{"version":3,"sources":["webpack:///./node_modules/moment/locale/uz-latn.js","webpack:///./src/views/triggerAlerts/StatusAlert.vue?8a1a","webpack:///./node_modules/moment/locale/ml.js","webpack:///./node_modules/moment/locale/cv.js","webpack:///./node_modules/moment/locale/is.js","webpack:///./node_modules/moment/locale/fo.js","webpack:///./node_modules/moment/locale/ja.js","webpack:///./node_modules/@syncfusion/ej2-popups/src/tooltip/tooltip.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/datepicker/datepicker.js","webpack:///./node_modules/moment/locale/es-do.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/chart-series.js","webpack:///./node_modules/moment/locale/ar-ma.js","webpack:///./node_modules/moment/locale/gom-latn.js","webpack:///./node_modules/moment/locale/fr-ch.js","webpack:///./node_modules/moment/locale/en-au.js","webpack:///./node_modules/moment/locale/tr.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-line-series.js","webpack:///./node_modules/moment/locale/da.js","webpack:///./node_modules/moment/locale/tl-ph.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/model/chart-base.js","webpack:///./node_modules/moment/locale/eu.js","webpack:///./node_modules/moment/locale/th.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/axis/axis-helper.js","webpack:///./node_modules/moment/locale/sr-cyrl.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/line-base.js","webpack:///./node_modules/moment/locale/oc-lnc.js","webpack:///./node_modules/moment/locale/mt.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/stacking-column-series.js","webpack:///./node_modules/moment/locale/ar-ly.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/tooltip.js","webpack:///./node_modules/moment/locale/be.js","webpack:///./node_modules/moment/locale/ka.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/foreign-key.js","webpack:///./node_modules/@syncfusion/ej2-vue-inputs/src/textbox/textbox.component.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/scatter-series.js","webpack:///./node_modules/moment/locale/ko.js","webpack:///./node_modules/moment/locale/ku.js","webpack:///./node_modules/moment/locale/bs.js","webpack:///./node_modules/@syncfusion/ej2-vue-calendars/src/datepicker/datepicker.component.js","webpack:///./node_modules/moment/locale/lt.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/compression-writer.js","webpack:///./node_modules/moment/locale/vi.js","webpack:///./node_modules/moment/locale/me.js","webpack:///./src/common/syncfusion.js","webpack:///./node_modules/moment/locale/af.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/data.js","webpack:///./node_modules/moment/locale/uz.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/calendar/calendar.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/axis/cartesian-panel.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/marker-explode.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/marker.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/technical-indicators/technical-indicator.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/chart.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/common/highlight-search.js","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/auto-complete/auto-complete.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/string-literals.js","webpack:///./node_modules/moment/locale/en-ca.js","webpack:///./node_modules/moment/locale/en-gb.js","webpack:///./node_modules/@syncfusion/ej2-buttons/src/radio-button/radio-button.js","webpack:///./node_modules/moment/locale/mr.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/axis/axis.js","webpack:///./node_modules/moment/locale/ne.js","webpack:///./node_modules/moment/locale/zh-mo.js","webpack:///./node_modules/moment/locale/tg.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/column.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/scroll.js","webpack:///./node_modules/moment/locale/cs.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/summary-model-generator.js","webpack:///./node_modules/moment/locale/ta.js","webpack:///./node_modules/moment/locale/kn.js","webpack:///./src/views/triggerAlerts/StatusAlert.vue?953c","webpack:///src/views/triggerAlerts/StatusAlert.vue","webpack:///./src/views/triggerAlerts/StatusAlert.vue?3b21","webpack:///./src/views/triggerAlerts/StatusAlert.vue","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/zooming-toolkit.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/user-interaction/zooming.js","webpack:///./node_modules/@syncfusion/ej2-vue-popups/src/dialog/buttons.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-popups/src/dialog/dialog.component.js","webpack:///./node_modules/moment/locale/ar-kw.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/worksheets.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/worksheet.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/cell-style.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/column.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/row.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/image.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/cell.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/utils.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/decompressor-huffman-tree.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/checksum-calculator.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/compression-reader.js","webpack:///./node_modules/@syncfusion/ej2-compression/src/zip-archive.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/value-formatter.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/csv-helper.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/blob-helper.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/auto-filters.js","webpack:///./node_modules/@syncfusion/ej2-excel-export/src/workbook.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/aria-service.js","webpack:///./node_modules/moment/locale/lb.js","webpack:///./src/views/templates/VolumeReportTemplate.vue?79cf","webpack:///./node_modules/@syncfusion/ej2-navigations/src/toolbar/toolbar.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/h-scroll.js","webpack:///./node_modules/moment/locale sync ^\\.\\/.*$","webpack:///./node_modules/moment/locale/az.js","webpack:///./node_modules/moment/locale/zh-hk.js","webpack:///./src/views/templates/ContractAlertsReportTemplate.vue?525b","webpack:///./node_modules/moment/locale/hr.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/reorder.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/command-column-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/command-column.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/common/legend/legend.js","webpack:///./node_modules/moment/locale/id.js","webpack:///./src/common/dates.js","webpack:///./node_modules/moment/locale/ga.js","webpack:///./node_modules/@syncfusion/ej2-svg-base/src/svg-render/svg-renderer.js","webpack:///./node_modules/@syncfusion/ej2-svg-base/src/svg-render/canvas-renderer.js","webpack:///./node_modules/@syncfusion/ej2-svg-base/src/tooltip/interface.js","webpack:///./node_modules/@syncfusion/ej2-svg-base/src/tooltip/helper.js","webpack:///./node_modules/@syncfusion/ej2-svg-base/src/tooltip/tooltip.js","webpack:///./node_modules/moment/locale/ur.js","webpack:///./node_modules/moment/locale/ss.js","webpack:///./src/views/templates/CostAndPricingReportTemplate.vue?faff","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/column-base.js","webpack:///./node_modules/moment/locale/es-us.js","webpack:///./node_modules/moment/locale/tet.js","webpack:///./src/views/contracts/ContractReportTabs.vue?0339","webpack:///./src/views/templates/M2MReportTemplate.vue?ecba","webpack:///./node_modules/moment/locale/dv.js","webpack:///./node_modules/moment/locale/tk.js","webpack:///./node_modules/moment/locale/hu.js","webpack:///./node_modules/moment/locale/zh-cn.js","webpack:///./node_modules/moment/locale/te.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/utils/get-data.js","webpack:///./node_modules/@syncfusion/ej2-vue-navigations/src/tab/items.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-navigations/src/tab/tab.component.js","webpack:///./node_modules/moment/locale/sv.js","webpack:///./node_modules/moment/locale/ug-cn.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/multi-colored-base.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/multi-colored-line-series.js","webpack:///(webpack)/buildin/module.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/common/model/constants.js","webpack:///./node_modules/moment/locale/ms-my.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/axis/category-axis.js","webpack:///./node_modules/moment/locale/eo.js","webpack:///./node_modules/moment/locale/sd.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/axis/strip-line.js","webpack:///./node_modules/moment/locale/br.js","webpack:///./node_modules/moment/locale/mi.js","webpack:///./node_modules/moment/locale/mk.js","webpack:///./node_modules/moment/locale/nb.js","webpack:///./node_modules/moment/locale/kk.js","webpack:///./node_modules/moment/locale/ar-tn.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/export-helper.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/excel-export.js","webpack:///./node_modules/moment/locale/it.js","webpack:///./node_modules/moment/locale/it-ch.js","webpack:///./node_modules/moment/locale/en-nz.js","webpack:///./node_modules/moment/locale/fy.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/print.js","webpack:///./node_modules/moment/locale/en-il.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/timepicker/timepicker.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/datetimepicker/datetimepicker.js","webpack:///./node_modules/moment/locale/sw.js","webpack:///./src/views/templates/HypotheticalTradeReportTemplate.vue?155f","webpack:///./node_modules/@syncfusion/ej2-vue-buttons/src/check-box/checkbox.component.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/common/model/data.js","webpack:///./src/views/contracts/ContractReportTabs.vue?6507","webpack:///./src/views/templates/PositionReportTemplate.vue?98a2","webpack:///src/views/templates/PositionReportTemplate.vue","webpack:///./src/views/templates/PositionReportTemplate.vue?9374","webpack:///./src/views/templates/PositionReportTemplate.vue","webpack:///./src/views/templates/M2MReportTemplate.vue?eff6","webpack:///src/views/templates/M2MReportTemplate.vue","webpack:///./src/views/templates/M2MReportTemplate.vue?db92","webpack:///./src/views/templates/M2MReportTemplate.vue","webpack:///./src/views/templates/VolumeReportTemplate.vue?f4d1","webpack:///src/views/templates/VolumeReportTemplate.vue","webpack:///./src/views/templates/VolumeReportTemplate.vue?f25c","webpack:///./src/views/templates/VolumeReportTemplate.vue","webpack:///./src/views/templates/CostAndPricingReportTemplate.vue?4301","webpack:///src/views/templates/CostAndPricingReportTemplate.vue","webpack:///./src/views/templates/CostAndPricingReportTemplate.vue?52eb","webpack:///./src/views/templates/CostAndPricingReportTemplate.vue","webpack:///./src/views/templates/ContractAlertsReportTemplate.vue?de6d","webpack:///src/views/templates/ContractAlertsReportTemplate.vue","webpack:///./src/views/templates/ContractAlertsReportTemplate.vue?1126","webpack:///./src/views/templates/ContractAlertsReportTemplate.vue","webpack:///./src/views/templates/TicketsReportTemplate.vue?045a","webpack:///src/views/templates/TicketsReportTemplate.vue","webpack:///./src/views/templates/TicketsReportTemplate.vue?fa38","webpack:///./src/views/templates/TicketsReportTemplate.vue","webpack:///./src/views/templates/HedgingOverviewReportTemplate.vue?094f","webpack:///src/views/templates/HedgingOverviewReportTemplate.vue","webpack:///./src/views/templates/HedgingOverviewReportTemplate.vue?5745","webpack:///./src/views/templates/HedgingOverviewReportTemplate.vue","webpack:///./src/views/templates/HypotheticalTradeReportTemplate.vue?680e","webpack:///src/views/templates/HypotheticalTradeReportTemplate.vue","webpack:///./src/views/templates/HypotheticalTradeReportTemplate.vue?c82d","webpack:///./src/views/templates/HypotheticalTradeReportTemplate.vue","webpack:///./src/views/templates/TicketsLogsReportTemplate.vue?78a6","webpack:///src/views/templates/TicketsLogsReportTemplate.vue","webpack:///./src/views/templates/TicketsLogsReportTemplate.vue?4e43","webpack:///./src/views/templates/TicketsLogsReportTemplate.vue","webpack:///src/views/contracts/ContractReportTabs.vue","webpack:///./src/views/contracts/ContractReportTabs.vue?4498","webpack:///./src/views/contracts/ContractReportTabs.vue","webpack:///./node_modules/@syncfusion/ej2-splitbuttons/src/common/common.js","webpack:///./node_modules/moment/locale/sk.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/value-formatter.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-operator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/string-filter-ui.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/number-filter-ui.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-filter-ui.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/date-filter-ui.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/filter-menu-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/checkbox-filter.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/common/excel-filter-base.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/excel-filter.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/filter.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/trendlines.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/segments.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/series.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/striplines.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/categories.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/multilevellabels.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/axes.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/rows.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/columns.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/rangecolorsettings.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/annotations.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/selecteddataindexes.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/indicators.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-charts/src/chart/chart.component.js","webpack:///./node_modules/moment/locale/yo.js","webpack:///./src/views/triggerAlerts/DeadlineAlert.vue?9ca8","webpack:///./node_modules/@syncfusion/ej2-dropdowns/src/combo-box/combo-box.js","webpack:///./node_modules/moment/locale/sl.js","webpack:///./node_modules/moment/locale/fi.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/common/annotation/annotation.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/annotation/annotation.js","webpack:///./node_modules/moment/locale/ar-sa.js","webpack:///./node_modules/moment/locale/bg.js","webpack:///./node_modules/moment/locale/my.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-renderer.js","webpack:///./node_modules/moment/locale/gl.js","webpack:///./node_modules/moment/locale/es.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/column-series.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/row-model-generator.js","webpack:///./node_modules/moment/locale/el.js","webpack:///./node_modules/moment/locale/pl.js","webpack:///./node_modules/moment/locale/fa.js","webpack:///./node_modules/moment/locale/ar.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/line-series.js","webpack:///./node_modules/moment/locale/bn.js","webpack:///./node_modules/moment/locale/zh-tw.js","webpack:///./src/views/templates/PositionReportTemplate.vue?db5e","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/candle-series.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/enum.js","webpack:///./node_modules/moment/locale/ru.js","webpack:///./node_modules/moment/locale/mn.js","webpack:///./node_modules/moment/locale/ky.js","webpack:///./node_modules/moment/locale/bn-bd.js","webpack:///./node_modules/moment/locale/ro.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/v-scroll.js","webpack:///./node_modules/moment/locale/cy.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/form-validator/form-validator.js","webpack:///./node_modules/@syncfusion/ej2-vue-buttons/src/button/button.component.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/stacked-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/indent-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/caption-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/expand-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/header-indent-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-header-indent-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/detail-expand-cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-drag-drop-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/row-drag-header-indent-render.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/render.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/cell-render-factory.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/service-locator.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/renderer-factory.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/page-settings.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/column-chooser-settings.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/search.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/show-hide.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/aggregate.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/clipboard.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/grid.js","webpack:///./node_modules/@syncfusion/ej2-buttons/src/check-box/check-box.js","webpack:///./node_modules/moment/locale/fr.js","webpack:///./node_modules/moment/locale/ar-dz.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/numerictextbox/numerictextbox.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/common/checkbox-filter-base.js","webpack:///./node_modules/moment/locale/bm.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/inline-edit-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/batch-edit-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/dialog-edit-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/edit-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/edit-cell-base.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/boolean-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/dropdown-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/numeric-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/default-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/normal-edit.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/inline-edit.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/batch-edit.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/dialog-edit.js","webpack:///./node_modules/@syncfusion/ej2-calendars/src/maskbase/masked-date-time.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/datepicker-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/template-edit-cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/edit.js","webpack:///./node_modules/moment/locale/gom-deva.js","webpack:///./src/views/triggerAlerts/TriggerHitAlert.vue?edb3","webpack:///./src/views/triggerAlerts/TriggerHitAlert.vue?020c","webpack:///src/views/triggerAlerts/TriggerHitAlert.vue","webpack:///./src/views/triggerAlerts/TriggerHitAlert.vue?e3d9","webpack:///./src/views/triggerAlerts/TriggerHitAlert.vue","webpack:///./node_modules/moment/locale/uk.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/responsive-dialog-renderer.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/common/user-interaction/tooltip.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/numeric-container.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/pager-message.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/pager.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/pager-dropdown.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/pager/external-message.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/page.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/selection.js","webpack:///./node_modules/moment/locale/lo.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/width-controller.js","webpack:///./node_modules/moment/locale/de-at.js","webpack:///./src/views/triggerAlerts/DeadlineAlert.vue?6404","webpack:///src/views/triggerAlerts/DeadlineAlert.vue","webpack:///./src/views/triggerAlerts/DeadlineAlert.vue?b4b9","webpack:///./src/views/triggerAlerts/DeadlineAlert.vue","webpack:///./node_modules/moment/locale/de.js","webpack:///./node_modules/moment/locale/tzm-latn.js","webpack:///./node_modules/moment/locale/jv.js","webpack:///./node_modules/moment/locale/es-mx.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/menu-scroll.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/common/menu-base.js","webpack:///./node_modules/moment/locale/en-sg.js","webpack:///./node_modules/moment/locale/nn.js","webpack:///./node_modules/moment/locale/lv.js","webpack:///./node_modules/moment/locale/de-ch.js","webpack:///./node_modules/@syncfusion/ej2-vue-grids/src/grid/stacked-column.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-grids/src/grid/columns.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-grids/src/grid/aggregate-columns.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-grids/src/grid/aggregates.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-grids/src/grid/grid.component.js","webpack:///./node_modules/moment/locale/tzm.js","webpack:///./node_modules/moment/moment.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/axis/date-time-axis.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/focus-strategy.js","webpack:///./node_modules/moment/locale/he.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/common/utils/print.js","webpack:///./node_modules/moment/locale/sq.js","webpack:///./src/views/templates/HedgingOverviewReportTemplate.vue?c1ed","webpack:///./src/views/templates/TicketsReportTemplate.vue?81a5","webpack:///./node_modules/@syncfusion/ej2-charts/src/common/model/base.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/axis/double-axis.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/constant.js","webpack:///./node_modules/moment/locale/sr.js","webpack:///./node_modules/moment/locale/tzl.js","webpack:///./node_modules/moment/locale/tlh.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/content-renderer.js","webpack:///./node_modules/moment/locale/bo.js","webpack:///./node_modules/moment/locale/pt-br.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/services/group-model-generator.js","webpack:///./node_modules/moment/locale/fil.js","webpack:///./node_modules/moment/locale/hy-am.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/common/model/theme.js","webpack:///./node_modules/moment/locale/ca.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/base/util.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/common/utils/helper.js","webpack:///./node_modules/moment/locale/fr-ca.js","webpack:///./node_modules/moment/locale/nl-be.js","webpack:///./node_modules/@syncfusion/ej2-vue-splitbuttons/src/drop-down-button/items.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-splitbuttons/src/drop-down-button/dropdownbutton.component.js","webpack:///./node_modules/moment/locale/hi.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/renderer/cell-merge-renderer.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/toolbar.js","webpack:///./node_modules/moment/locale/gu.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/uploader/uploader.js","webpack:///./node_modules/@syncfusion/ej2-vue-inputs/src/uploader/files.directive.js","webpack:///./node_modules/@syncfusion/ej2-vue-inputs/src/uploader/uploader.component.js","webpack:///./node_modules/moment/locale/en-ie.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/sort.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/tab/tab.js","webpack:///./node_modules/@syncfusion/ej2-splitbuttons/src/drop-down-button/drop-down-button.js","webpack:///./node_modules/moment/locale/km.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/utils/double-range.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/row.js","webpack:///./node_modules/moment/locale/ms.js","webpack:///./node_modules/moment/locale/et.js","webpack:///./node_modules/moment/locale/en-in.js","webpack:///./node_modules/moment/locale/si.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/models/cell.js","webpack:///./node_modules/@syncfusion/ej2-grids/src/grid/actions/resize.js","webpack:///./node_modules/@syncfusion/ej2-inputs/src/textbox/textbox.js","webpack:///./node_modules/moment/locale/pt.js","webpack:///./node_modules/@syncfusion/ej2-file-utils/src/save.js","webpack:///./node_modules/moment/locale/pa-in.js","webpack:///./node_modules/@syncfusion/ej2-file-utils/src/encoding.js","webpack:///./node_modules/moment/locale/gd.js","webpack:///./node_modules/@syncfusion/ej2-navigations/src/context-menu/context-menu.js","webpack:///./node_modules/moment/locale/nl.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/series/data-label.js","webpack:///./node_modules/@syncfusion/ej2-charts/src/chart/legend/legend.js","webpack:///./node_modules/moment/locale/x-pseudo.js","webpack:///./node_modules/moment/locale/se.js"],"names":["global","factory","this","moment","uzLatn","defineLocale","months","split","monthsShort","weekdays","weekdaysShort","weekdaysMin","longDateFormat","LT","LTS","L","LL","LLL","LLLL","calendar","sameDay","nextDay","nextWeek","lastDay","lastWeek","sameElse","relativeTime","future","past","s","ss","m","mm","h","hh","d","dd","M","MM","y","yy","week","dow","doy","ml","monthsParseExact","meridiemParse","meridiemHour","hour","meridiem","minute","isLower","cv","output","affix","exec","dayOfMonthOrdinalParse","ordinal","plural","n","translate","number","withoutSuffix","key","isFuture","result","is","fo","ja","eras","since","offset","name","narrow","abbr","until","Infinity","eraYearOrdinalRegex","eraYearOrdinalParse","input","match","parseInt","l","ll","lll","llll","isPM","now","period","__extends","extendStatics","b","Object","setPrototypeOf","__proto__","Array","p","hasOwnProperty","__","constructor","prototype","create","__decorate","decorators","target","desc","c","arguments","length","r","getOwnPropertyDescriptor","Reflect","decorate","i","defineProperty","TOUCHEND_HIDE_DELAY","TAPHOLD_THRESHOLD","SHOW_POINTER_TIP_GAP","HIDE_POINTER_TIP_GAP","MOUSE_TRAIL_GAP","POINTER_ADJUST","ROOT","RTL","DEVICE","ICON","CLOSE","TOOLTIP_WRAP","CONTENT","ARROW_TIP","ARROW_TIP_OUTER","ARROW_TIP_INNER","TIP_BOTTOM","TIP_TOP","TIP_LEFT","TIP_RIGHT","POPUP_ROOT","POPUP_OPEN","POPUP_CLOSE","POPUP_LIB","HIDE_POPUP","POPUP_CONTAINER","Animation","_super","apply","effect","duration","delay","Tooltip","options","element","_this","call","mouseMoveEvent","mouseMoveTarget","containerElement","isBodyContainer","initialize","formatPosition","_a","_b","position","indexOf","tooltipPositionY","tooltipPositionX","renderArrow","setTipClass","tip","createElement","className","tipClass","appendChild","tooltipEle","renderPopup","elePos","mouseTrail","top","left","getTooltipPosition","classList","remove","popupObj","height","width","X","Y","enableRtl","open","openPopupHandler","bind","close","closePopupHandler","getScalingFactor","x","scalingFactors","elementsWithTransform","closest","contains","computedStyle","window","getComputedStyle","transformValue","getPropertyValue","matrixValues","map","parseFloat","style","display","parentWithZoomStyle","zoom","pos","getBoundingClientRect","offsetPos","calculateTooltipOffset","collisionPosition","calculateElementPosition","collisionLeft","collisionTop","collisionFlipFit","windowResize","reposition","findTarget","dataBind","needTemplateReposition","trigger","tooltipEventArgs","isReact","opensOn","clearTemplate","clear","xScalingFactor","yScalingFactor","tipWidth","tipHeight","tooltipEleWidth","tooltipEleHeight","arrowEle","tipAdjust","tipHeightAdjust","tipWidthAdjust","tooltipEleRect","arrowEleRect","Math","round","showTipPointer","clientHeight","clientWidth","offsetWidth","offsetHeight","offsetX","offsetY","updateTipPosition","selEle","removeList","adjustArrow","leftValue","topValue","tooltipWidth","tooltipHeight","arrowInnerELe","tipPosExclude","tipPointerPosition","renderContent","tooltipContent","cssClass","getAttribute","setAttribute","removeAttribute","content","innerHTML","HTMLElement","enableHtmlSanitizer","setProperties","sanitize","enableHtmlParse","tempFunction","tempArr","id","undefined","root","templateFunction","renderReactTemplates","renderCloseIcon","isSticky","tipClose","add","touchStartEvent","onStickyClose","existingCloseIcon","querySelector","addDescribedBy","describedby","push","join","trim","removeDescribedBy","index","splice","orgdescribedby","tapHoldHandler","evt","clearTimeout","autoCloseTimer","targetHover","originalEvent","touchEndHandler","e","setTimeout","targetClick","hideTooltip","animation","closeDelay","targetList","slice","ctrlId","document","_i","targetList_1","target_1","restoreElement","showTooltip","mouseMoveBeforeOpen","mouseMoveBeforeRemove","showAnimation","showTimer","hideTimer","openDelay","type","cancel","event","isInteracted","observeCallback","beforeRenderArgs","beforeRenderCallback","isHidden","attrs","role","styles","tooltipBeforeRender","tooltipAfterRender","stop","appendContainer","ctrlObj","container","body","tagName","isDevice","maxWidth","observedArgs","beforeOpenCallback","openAnimation_1","timingFunction","show","onMouseMove","wireMouseEvents","tooltip","viewContainerRef","checkCollision","horizontal","vertical","affectedPos","checkCollideTarget","offsetLeft","pageXOffset","scrollLeft","offsetTop","pageYOffset","scrollTop","newpos","collidedPosition","elePosVertical","elePosHorizontal","getOffSetPosition","elePosition","eleOffset","windowCollision","arrowleft","toString","positionString","newPos","offsetType","hideAnimation","targetElement","hide","isTooltipOpen","tooltipHide","popupHide","closeAnimation","unwireMouseEvents","destroy","tooltipHover","tooltipMouseOut","onMouseOut","enteredElement","relatedTarget","checkForTooltipElement","tooltipElementMouseOut","eventPageX","eventPageY","preventDefault","touches","pageX","pageY","colpos","keyDown","keyCode","touchEnd","scrollHandler","render","wireEvents","renderComplete","preRender","triggerList","getTriggerList","triggerList_1","wireFocusEvents","touchModule","tapHoldThreshold","tapHold","touchEndEvent","targetsList","targetList_2","unwireEvents","triggerList_2","unwireFocusEvents","targetList_3","triggerList_3","getModuleName","getPersistData","addOnPersist","onPropertyChanged","newProp","oldProp","keys","prop","refresh","target_2","currentTarget","currentTarget_1","DATEWRAPPER","LIBRARY","CONTROL","POPUPWRAPPER","INPUTWRAPPER","POPUP","INPUTCONTAINER","INPUTFOCUS","INPUTROOT","ERROR","ACTIVE","OVERFLOW","DATEICON","ICONS","OPENDURATION","OFFSETVALUE","SELECTED","FOCUSEDDATE","NONEDIT","containerAttr","DatePicker","isDateIconClicked","isAltKeyPressed","invalidValueString","checkPreviousValue","maskedDateValue","isAngular","preventChange","isIconClicked","isDynamicValueChanged","moduleName","isFocused","isBlur","isKeyAction","datepickerOptions","bindEvents","floatLabelType","calculateWidth","inputElement","inputWrapper","buttons","getElementsByClassName","disabled","enabled","setTimeZone","serverTimezoneOffset","offsetValue","value","clientTimeZoneDiff","Date","getTimezoneOffset","serverTimezoneDiff","timeZoneDiff","isDayLightSaving","getTime","updateInput","firstOffset","getFullYear","secondOffset","max","setAllowEdit","allowEdit","readonly","updateIconState","checkInvalidValue","enableMask","notify","module","createInput","updateHtmlAttributeToWrapper","placeholder","updateInputValue","previousElementValue","previousDate","inputValueCopy","ariaAttrs","l10nLocale","globalize","locale","l10n","getConstant","fullScreenMode","updatedCssClassValues","replace","isBindClearAction","bindClearAction","properties","showClearButton","setWidth","tabIndex","addAttributes","isDynamic","formatOptions","isCalendar","disabledDates","isNaN","checkValue","strictMode","validateDate","minMaxUpdates","minMaxUpdate","dateValue","dateString","tempFormat","formatString","dateTimeFormat","calendarMode","formatDate","format","skeleton","min","changedArgs","errorClass","checkStringValue","val","returnDate","formatDateTime","culture","getDatePattern","checkDateValue","parseDate","valueDate","valueString","invalid","extISOString","basicISOString","test","bindInputEvent","inputHandler","dateIconHandler","mouseUpHandler","inputFocusHandler","inputBlurHandler","keyupHandler","keydownHandler","inputChangeHandler","clearButton","resetHandler","formElement","resetFormHandler","defaultKeyConfigs","keyConfigs","keyboardModules","eventName","keyAction","inputKeyActionHandle","code","unBindEvents","restoreValue","currentDate","stopPropagation","bindClearEvent","clearedArgs","popupUpdate","changeEvent","keyupEvent","createEvent","initEvent","dispatchEvent","preventEventBubbling","interopAdaptor","invokeMethodAsync","setValue","blur","focus","htmlAttributes","updatedClassValues","setStyle","charAt","updateHtmlAttributeToElement","updateCssClass","newCssClass","oldCssClass","setCssClass","popupWrapper","calendarKeyActionHandle","action","children","selectionStart","selectionEnd","focusArguments","model","openOnFocus","isPopupClicked","strictModeUpdate","changeTrigger","activeElement","blurArguments","calendarKeyboardModules","calendarElement","firstElementChild","documentHandler","parentElement","depth","toLowerCase","generateTodayVal","focusOut","clickedView","currentView","start","end","length_1","headerTitleElement","defaultAction","keyActionHandle","setActiveDescendant","previousDateTime","querySelectorAll","targetdate","navigateTo","dateOptions","date","pattern","charPattern","len","modifiedValue","toLocaleUpperCase","setFullYear","setHours","getHours","getMinutes","getSeconds","getMilliseconds","createCalendar","modelHeader","modal","relateTo","targetType","zIndex","collision","iconRight","marginRight","swipe","CalendarSwipeHandler","TouchStartHandler","resetCalendar","preventArgs","setAriaAttributes","targetExitViewport","direction","swipeDirection","touchStart","navigateNext","navigatePrevious","setAriaDisabled","yearHeading","h2","daySpan","monthSpan","textContent","modelCloseIcon","modelCloseHandler","modelTodayButton","insertBefore","valueOf","navigatedEvent","navigatedArgs","selectCalendar","requiredModules","modules","args","member","prevent_1","outOfRange","mobilePopupWrapper","popup","appendTo","eventArgs","refreshPosition","openAnimation","setOverlayIndex","tableBodyElement","dlgOverlay","prevent_2","closeEventCallback","prevent","keyboardModule","outerHTML","focusIn","triggerEvent","view","removeAttributes","inputElementCopy","ensureInputAttribute","ngTag","insertAdjacentElement","attributes","cloneNode","validationAttribute","getDefaultKeyConfig","checkHtmlAttributes","hasAttribute","altUpArrow","altDownArrow","escape","enter","controlUp","controlDown","moveDown","moveUp","moveLeft","moveRight","select","home","pageUp","pageDown","shiftPageUp","shiftPageDown","controlHome","controlEnd","shiftTab","tab","nameAttribute","attribute","attr","checkFormat","skeletonString","dynamic","checkView","attributes_1","valueCopy","previousValCopy","renderDayCell","inputVal","dateIdString","isDisabledDate","setMilliseconds","setPlaceholder","setReadonly","setEnabled","setLocale","setEnableRtl","setClearButton","removeFloating","addFloating","day","month","year","second","dayOfTheWeek","monthsShortDot","monthsParse","monthsRegex","esDo","monthsShortRegex","monthsStrictRegex","monthsShortStrictRegex","longMonthsParse","shortMonthsParse","weekdaysParseExact","hours","w","ww","DataLabelSettings","color","right","bottom","size","fontStyle","fontWeight","fontFamily","MarkerSettings","ParetoOptions","Points","symbolLocations","regions","percentage","regionData","isSelect","marker","visible","isPointInRange","verticalError","verticalNegativeError","horizontalError","horizontalNegativeError","verticalPositiveError","horizontalPositiveError","Trendline","clipRect","setDataSource","series","chart","points","trendLineModule","initDataSource","visibleSeriesCount","ErrorBarCapSettings","ChartSegment","ErrorBarSettings","SeriesBase","rangeColorPoints","isAdvancedColor","currentViewData","seriesType","isRectTypeSeries","processJsonData","point","xName","Series","textMappingName","dataLabel","processInternalData","category","paretoSeriesModule","performCumulativeCalculation","xMin","xMax","yMin","yMax","sizeMax","getSeriesType","xAxis","valueType","dataPoint","pushCategoryData","pushData","setEmptyPoint","rangeColorsInterior","option","dateParser","intl","getDateParser","dateFormatter","getDateFormat","parse","parseJson","xValue","isBlazor","stockChart","drawType","chartAreaType","isArea","isRange","findSplinePoint","maximum","minimum","calculateBinValues","histogramValues","binWidth","rangeColorSettings","visibleSeries","interior","yValue","xData","getObjectValueByMappingString","enableComplexProperty","getObjectValue","high","low","volume","pointColorMapping","errorBar","errorBarColor","errorBarColorMapping","yName","text","tooltipMappingName","isAdvancedColorSupported","rangeColorName","colorName","colorValue","getPointFillColor","pointFill","rangeMap","colors","mappingName","data","findVisibility","isEmpty","mode","emptyPointSettings","yData","getAverage","yValues","yAxisMin","yAxis","yAxisMax","setXYMinMax","setHiloMinMax","filter","sort","a","seriesMinY","isLogAxis","isNegativeValue","rangePadding","pointX","shared","isIndexed","labels","indexLabels","previous","next","refreshDataManager","dataSource","query","dataManager","dataModule","getData","generateQuery","requiresCount","then","dataManagerSuccess","count","isRemoteData","allowServerDataBinding","localData","argsData","fill","findCurrentData","recordsCount","refreshChart","refreshTechnicalIndicator","trendlines","trendline","refreshBound","initialRender","stockChartDataManagerSuccess","parent","propName","defaultValue","isArray","isRectSeries","drawPoints","lowDrawPoints","delayedAnimation","refreshAxisLabel","item","_c","findSeriesCollection","column","row","isStack","seriesCollection","axes","rowAxis","rowSeries","_d","_e","axis","_f","_g","rectSeriesInChart","calculateStackedValue","isStacking100","columns","columnItem","rows","calculateStackingValues","startValues","endValues","stackingGroup","lastValue","lastPositive","lastNegative","frequencies","findFrequencies","groupingValues","visiblePoints","k","stackingSeies","stackedValues","seriesCollection_2","seriesCollection_1","j","pointsLength","toFixed","abs","isColumnBarType","startFromZero","findPercentageOfStacking","values","stackingSeies_1","seriesCollection_3","isStack100","renderSeries","createSeriesElements","requireInvertedAxis","errorBarModule","dataLabelModule","appendSeriesElement","seriesElements","enableCanvas","performAnimation","elementId","explodeValue","border","svgRenderer","renderer","markerHeight","markerWidth","markerMaxValue","radius","clipRectElement","redraw","columnIndex","rowIndex","transform","symbolElement","seriesElement","createGroup","checkTabindex","errorBarElement","textElement","dataLabelElements","shapeElement","hasChildNodes","enable","animateSeries","isStockChartRendered","doAnimation","doErrorBarAnimation","markerRender","doMarkerAnimation","info","isIE","doDataLabelAnimation","setPointColor","setBorderColor","arMa","processRelativeTime","gomLatn","standalone","isFormat","frCh","enAu","suffixes","1","5","8","70","80","2","7","20","50","3","4","100","6","9","10","30","60","90","tr","minutes","StackingLineSeries","isInverted","pointIndex","nextPointIndex","point1","point2","polarType","getCoordinate","visiblePts","stackedvalue","concat","opacity","dashArray","appendLinePath","renderMarker","doLinearAnimation","da","tlPh","ChartAnnotationSettings","LabelBorder","MultiLevelCategories","StripLineSettings","MultiLevelLabels","ScrollbarSettingsRange","ScrollbarSettings","eu","th","NiceInterval","calculateDateTimeNiceInterval","isChart","interval","oneDay","startDate","endDate","totalDays","actualIntervalType","intervalType","calculateNumericNiceInterval","getSkeleton","currentValue","previousValue","isIntervalInDecimal","findCustomFormats","labelFormat","translator","words","correctGrammaticalCase","wordKey","word","srCyrl","lastWeekDays","LineBase","chartModule","tempPoint","tempPoints","tempPoints2","xVisibleRange","visibleRange","yVisibleRange","seriesPoints","areaBounds","xTolerance","delta","yTolerance","prevXValue","prevYValue","xVal","yVal","seriesPoints_1","currentPoint","getLineDirection","firstPoint","secondPoint","getPointLocation","startPoint","previousDirection","htmlObject","drawPath","Int32Array","pathElement","doProgressiveAnimation","currentTime","path","strokeDashArray","pathLength","getTotalLength","visibility","animate","progress","timeStamp","storePointLocation","getLocation","withinYRange","GetStepLineDirection","previousPoint","stepLineType","command","centerX","getFirstLastVisiblePoint","first","last","points_1","getBorderDirection","coordinates","stackingAreaSeriesModule","stackingStepAreaSeriesModule","removeEmptyPointsBorder","borderDirection","startIndex","childNodes","animated","elementHeight","elementWidth","xCenter","yCenter","ocLnc","mt","StackingColumnSeries","sideBySideInfo","getSideBySideInfo","stackedValue","visiblePoints_1","rect","getRectangle","columnWidthInPixel","rectCount","drawRectangle","updateSymbolLocation","columnFacet","cylinderSeriesOption","drawCylinder","symbolMap","0","pluralForm","plurals","pluralize","u","string","f","str","arLy","preparse","postformat","commonXvalues","addEventListener","isDestroyed","cancelEvent","isPointer","on","mouseLeaveHandler","longPress","touchMoveEvent","mouseMoveHandler","control","lierIndex","isTouch","isSelected","mouseX","mouseY","chartAxisLayoutPanel","seriesClipRect","crosshair","startMove","fadeOutMode","removeTooltip","fadeOutDuration","findData","previousPoints","scaleX","scaleY","onPanning","disableTrackTooltip","markerMove","svgElement","getElement","isStockSvg","firstChild","isTooltip","tooltipDiv","getTooltipElement","getElementById","renderGroupedTooltip","renderSeriesTooltip","findHeader","header","parseTemplate","findShapes","enableMarker","currentPoints","shape","isFirst","dataEditingModule","isPointDragging","triggerTooltipRender","getTooltipText","isRemove","mergeXvalues","getClosestX","findMouseValue","textCollection","headerText","tooltipTemplate","template","textStyle","pointY","seriesIndex","seriesName","pointText","borderWidth","padding","chartTooltipSuccess","removeHighlight","removeText","formattedText","location_1","getSymbolLocation","location","createTooltip","findMarkerHeight","availableSize","getTemplateText","pointData","getBoxLocation","getWaterfallRegion","getRangeArea","inverted","getFormat","formatPointValue","valueY","valueX","lastData","dataCollection","stopAnimation","pointXValue","pointYValue","tempData","extraPoints","closestXValue","Number","MAX_VALUE","closetYValue","argument","enableTooltip","commonXValue","showNearestPoint","collection","dataCollection_1","data_1","triggerSharedTooltip","toolbarHeight","titleHeight","enablePeriodSelector","title","titleStyle","themeStyle","tooltipLabelFont","sharedTooltip","location_2","findSharedLocation","outliers","textValue","dataValue","RegExp","source","getPrototypeOf","isXPoint","isYPoint","customLabelFormat","getNumberFormat","useGrouping","useGroupingSeparator","tooltipFormat","getIndicatorTooltipFormat","textX","toolTip","removeHighlightedMarker","fadeOut","data_2","num","forms","relativeTimeWithPlural","be","ka","$0","$1","$2","ForeignKey","serviceLocator","initForeignKeyColumns","getForeignKeyData","generateQueryFormData","eventfPromise","state","getStateEventArgument","def","deff","getDataModule","requestType","foreignKeyDataState","isDataChanged","setForeignKeyDataState","isPending","resolver","resolve","promise","setColumnData","setForeignKeyData","foreignColumns","getForeignKeyColumns","allPromise","_loop_1","isComplex","this_1","genarateColumnQuery","genarateQuery","params","ready","offline","executeQuery","Promise","all","responses","columnData","editType","edit","fields","foreignKeyField","field","foreignKeyValue","catch","log","reject","predicate","fromData","needQuery","gObj","predicates","allowPaging","enableVirtualization","allowGrouping","groupSettings","records","executeLocal","filteredValue","distinct","getDay","operator","matchCase","where","or","queryColumn","isFiltered","isTrue","filterQuery","searchSettings","sSettings","adaptor","searchQuery","search","ignoreCase","filterColumn","filterSettings","fColumn","uid","destroyEvent","off","modelProps","testProp","props","watch","emitProbs","modelProps_1","props_1","TextBoxComponent","mixins","emits","provide","custom","ej2Instances","propKeys","models","hasChildDirective","hasInjectedModules","tagMapper","tagNameMapper","isVue3","templateCollection","created","_trigger","bindProperties","_setProperties","updated","slots","$slots","default","methods","templateNames","templateNames_1","tempName","elementCollection","elementCollection_1","ele","__vue__","$destroy","muteOnChange","referModels","vueInstance","$emit","eventProp","successHandler","propKey","$props","isLazyUpdate","addIcon","icons","TextBoxPlugin","install","Vue","component","ScatterSeries","startLocation","scatterBorder","isLineShapeMarker","currentTempPoint","circlePath","previousPath","imageURL","imageUrl","shapeOption","rectElements","ko","token","isUpper","numberMap","ku","bs","DatePickerComponent","addDate","dates","createContent","removeDate","DatePickerPlugin","units","translateSeconds","translateSingular","special","lt","ARR_LITERAL_CODES","Int16Array","ARR_LITERAL_LENGTHS","Uint8Array","ARR_DISTANCE_CODES","ARR_DISTANCE_LENGTHS","CompressedStreamWriter","noWrap","pendingBuffer","pendingBufLength","pendingBufCache","pendingBufBitsInCache","bufferPosition","extraBits","currentHash","matchStart","matchLength","matchPrevAvail","blockStart","stringStart","lookAhead","totalBytesIn","inputOffset","inputEnd","windowSize","windowMask","hashSize","hashMask","hashShift","floor","maxDist","checkSum","isHuffmanTreeInitiated","initHuffmanTree","treeLiteral","CompressorHuffmanTree","treeDistances","treeCodeLengths","arrDistances","Uint16Array","arrLiterals","stream","dataWindow","hashHead","hashPrevious","writeZLibHeader","get","enumerable","configurable","compressedString","String","fromCharCode","write","Error","encode","getBytes","inputBuffer","ChecksumCalculator","checksumUpdate","pendingBufferFlush","compressData","headerDate","pendingBufferWriteShortBytes","finish","success","fillWindow","canFlush","compressSlow","flush","lookAheadCompleted","slideWindow","prevMatch","prevLen","discardMatch","matchPreviousBest","matchPreviousAvailable","huffmanIsFull","insertString","findLongestMatch","huffmanTallyLit","huffmanTallyDist","huffmanFlushBlock","lastBlock","more","set","subarray","updateHash","hash","curMatch","chainLen","niceLen","scan","bestEnd","bestLength","limit","stringEnd","scanEnd1","scanEnd","literal","codeFrequencies","dist","lc","huffmanLengthCode","dc","huffmanDistanceCode","stored","storedOffset","storedLength","buildTree","calculateBLFreq","blTreeCodes","codeLengths","huffCodeLengthOrders","opt_len","getEncodedLength","static_len","huffmanFlushStoredBlock","pendingBufferWriteBits","setStaticCodes","huffmanCompressBlock","huffmanReset","huffmanSendAllTrees","pendingBufferAlignToByte","pendingBufferWriteShort","pendingBufferWriteByteBlock","distance","buildCodes","treeLength","rank","writeTree","reset","literalLen","writeCodeToStream","bits","uint","Uint32Array","pendingBufferFlushBits","isClose","array","bitReverse","writer","elementCount","minCodes","maxLength","codeMinCount","codeFrequency","lengthCount","codeCount","codeLength","codes","lengths","temp","lengthTemp","nextCode","bitsCount","reverseBits","blTree","maxCount","minCount","curLen","nextLen","maxRepeatCount","minRepeatCount","currentRepeatCount","currentCodeLength","codesCount","arrTree","freq","pPos","leafsCount","nodesCount","child","node","iIndex","constructHuffmanTree","buildLength","lastVal","minDepth","numNodes","numLeafs","overflow","calculateOptimalCodeLength","iIncreasableLength","recreateTree","nodePtr","childPtr","childIndex","bitLength","checksum","buffer","checksum_uint","s1","s2","checkSumBitOffset","steps","checksumIterationCount","checksumBase","vi","me","CustomWebApiAdaptor","_WebApiAdaptor","_classCallCheck","_callSuper","_inherits","_createClass","dm","xhttp","p3","originalFail","onFailure","err","status","authToken","logger","apis","unprotectedApi","put","Token","resp","rules","getPermissions","checkUIPermissions","navigateToLogin","pathname","_superPropGet","WebApiAdaptor","SyncHelper","getDataManager","relativePath","queryString","DataManager","url","urls","apiBaseUrl","crossDomain","headers","Authorization","af","Data","dataState","group","initDataManager","addRows","reorderRows","removeRows","crudActions","refreshFilteredCols","json","toIndex","fromIndex","isQueryInvokedFromData","isVue","skipPage","isAutoCompleteCall","getQuery","clone","columnQueryMode","getColumns","isPrimaryKey","selectQueryFields","aggregateQuery","sortQuery","virtualGroupPageQuery","pageQuery","groupQuery","aggregates","cols","types","aggregate","fName","queries","enableInfiniteScrolling","pageSettings","currentPage","pageCount","pageSize","infiniteScrollModule","page","pagerModule","pagerObj","isAllPage","isManualRefresh","enableLazyLoading","lazyLoad","getColumnByField","columnName","isGrpFmt","enableGroupByFormat","formatGroupColumn","allowSorting","sortSettings","sortGrp","col","setSortDirection","fn","sortComparer","isRemote","isForeignColumn","sortByForeignKey","sortBy","getSortDirection","fcolumn","isForeignKey","getSearchColumnFieldNames","predicateList","needForeignKeySearch","some","fGeneratePredicate","ignoreAccent","predList","skipFoerign","foreignColEmpty","actualFilter","foreignColumn","allowFiltering","colType","foreignCols","defaultFltrCols","columns_1","gridColumn","getColumnByUid","grabColumnByFieldFromAllCols","excelPredicate","getPredicate","foreignCols_1","column_1","grabColumnByUidFromAllCols","and","fPredicate","getKey","foreignKeyData","getPrimaryKeyFieldNames","eventPromise","crud","fromTable","changes","addedRecords","deletedRecords","changedRecords","saveChanges","insert","deferred_1","getFormatter","formatVal","toView","pr","update","previousData","original","endEdit","setState","getState","getForeignKeyDataState","adaptr","processQuery","JSON","pvtData","dataArgs","disablePageWiseAggregates","editArgs_1","cancelEdit","colFieldNames","columns_2","allowSearching","uz","OTHERMONTH","OTHERDECADE","HEADER","CONTENTTABLE","YEAR","MONTH","DECADE","PREVICON","NEXTICON","PREVSPAN","NEXTSPAN","ICONCONTAINER","DISABLED","OVERLAY","WEEKEND","WEEKNUMBER","FOCUSEDCELL","OTHERMONTHROW","TODAY","TITLE","LINK","CELL","WEEKHEADER","ZOOMIN","FOOTER","BTN","FLAT","CSS","PRIMARY","DAYHEADERLONG","dayMilliSeconds","minutesMilliSeconds","CalendarBase","isDateSelected","isTodayClicked","previousDates","rangeValidation","calendarEleCopy","setSeconds","firstDayOfWeek","getFirstDayOfWeek","todayDisabled","todayDate","createHeader","spacebar","altRightArrow","altLeftArrow","popupElement","ariaPrevAttrs","ariaNextAttrs","ariaTitleAttrs","tabIndexAttr","headerElement","iconContainer","previousIcon","selector","isCenterRipple","nextIcon","adjustLongHeaderSize","contentElement","table","createContentHeader","createContentBody","showTodayButton","createContentFooter","addContentFocus","removeContentFocus","focusedDate","selectedDate","getCultureValues","cldrObj","culShortNames","dayFormat","dayHeaderFormat","getCultureObjects","obj","toCapitalize","toUpperCase","daysCount","html","tableHeadElement","weekNumber","shortNames","shiftArray","days","renderYears","renderDecades","renderMonths","updateFooter","todayElement","l10","today","footer","todayButtonClick","ref","keyConfig","navigateTitle","dateWireEvents","serverModuleName","isCustomDate","getViewNumber","renderDayCellArgs","multiSelection","depthValue","levelRestrict","keyboardNavigate","selectDate","contentClick","firstDay","addMonths","addYears","isMonthYearRange","addDay","isMinMaxRange","navigatePreviousHandler","navigateNextHandler","navigateHandler","triggerNavigate","minMaxDate","localDate","minDate","maxDate","tdEles","numCells","renderDays","islamicModule","islamicRenderDays","renderTemplate","islamicRenderTemplate","isTodayDate","cellsCount","getDate","timezone","currentMonth","getMonth","titleUpdate","setStartDate","weekEle","weekAnchor","numberOfDays","weekRule","finalDate","getWeek","dateFormatOptions","tdEle","dayCell","dayLink","isDisabled","isOutOfRange","renderDayCellEvent","argsDate","localDateString","tempDateString","otherMnthBool","disabledCls","clickHandler","getDateVal","tempValue","innerText","copyValues","type_1","formatOptions_1","localDateString_1","tempDateString_1","updateFocus","otherMonth","tableElement","removeTableHeadElement","valueUtil","curDate","mon","yr","curYrs","minYr","minMonth","maxYr","maxMonth","setMonth","setDate","localMonth","yearCell","localYr","startYr","endYr","startFullYr","endFullYr","startHdrYr","endHdrYr","startYear","rowIterator","lastDate","timeOffset","findLastDay","elements","classNm","trEle","weekNumCell","numberCell","otherMonthCell","iconHandler","islamicIconHandler","setAriaActiveDescendant","clickEventEmitter","eve","getIdValue","islamicPreviousHeader","islamicDate","getIslamicDate","toGregorian","switchView","keyEntity","validateValues","skipIndex","tempValueString","minFormatOption","minStringValue","minString","maxFormatOption","maxStringValue","maxString","setValueUpdate","dayFormatOptions","monthFormatOptions","focusedEle","selectedEle","previousIconHandler","compareMonth","nextIconHandler","compareYear","compareDecade","todayButtonEvent","stringVal","islamicPrevious","islamicNext","ld","gregorianFormat","islamicFormat","mainVal","ceil","time","tzOffset","tzOffsetDiff","setTime","getMaxDays","setDateDecade","setDateYear","checkPresentDate","tempElement","selectedElement","checkPrevious","compare","modifier","findNextTD","rangeValue","tmpDate","inValue","toUTCString","toLocaleString","timeZone","Calendar","isMultiSelection","tempValues","copyDate","previousValues","setEnable","setClass","form","formResetHandler","setMinutes","changeHandler","triggerChange","isMultiSelect","tempDays","islamicRenderYears","islamicRenderDecade","storeView","tempDate","tempDates","setTodayDate","NaN","axisPadding","CartesianAxisLayoutPanel","measureAxis","chartAreaWidth","chartArea","crossAt","initialClipRect","leftSize","rightSize","topSize","bottomSize","measureRowAxis","measureColumnAxis","delayRedraw","calculateAxisSize","calculateFixedChartArea","refreshAxis","margin","legendSettings","legendModule","legendBounds","farSizes","calculateRowSize","nearSizes","insideNearSizes","insideFarSizes","arrangeAxis","measureDefinition","computedHeight","calculateColumnSize","computedWidth","definition","scrollbarSettings","scrollBarHeight","scrollBarModule","zoomModule","zoomSettings","enableScrollbar","enableScrollbarOnZooming","isZoomed","zoomFactor","zoomPosition","getModule","baseModule","calculateRangeAndInterval","computeSize","axisOffset","nearCount","farCount","len_1","plotOffset","len_2","span","computedTop","plotOffsetTop","getAxisOffsetValue","plotOffsetBottom","isAxisOpposedPosition","labelPosition","orientation","len_3","len_4","computedLeft","plotOffsetLeft","plotOffsetRight","measure","actualIndex","axisCollections","verticalAxes","getActualRow","pushAxis","horizontalAxes","getActualColumn","isRTLEnabled","setIsInversedAndOpposedPosition","position1","position2","rangeOffset","crossesAt","crossesInAxis","crossInAxis","updateCrossAt","primaryXAxis","primaryYAxis","logBase","axisCollection","actualLength","rowTop","remainingHeight","columnLeft","remainingWidth","renderAxes","outsideElement","isInside","axisElement","axisLineElement","axisVisibility","yAxisName","xAxisName","paretoOptions","showAxis","findAxisPosition","updateCrossValue","internalVisibility","lineStyle","drawAxisLine","updatedRect","majorGridLines","majorTickLines","minorTickLines","minorGridLines","drawXAxisGridLine","tickPosition","drawXAxisLabels","placeNextToAxisLine","drawXAxisBorder","drawXAxisTitle","drawYAxisGridLine","drawYAxisLabels","drawYAxisBorder","drawYAxisTitle","renderScrollbar","drawBottomLine","svgObject","zoomingScrollBar","isScrollUI","scrollElement","isRow","x1","x2","y1","y2","definitionName","optionsLine","drawLine","plotX","plotY","plotBottom","plotTop","plotLeft","plotRight","axisLine","tempInterval","minorGridDirection","isCategoryAxis","majorGrid","majorTick","isOpposed","tickSize","axisLineSize","ticksbwtLabel","labelPlacement","isTickInside","ticks","visibleLabels","chartThemeStyle","isBorder","renderGridLine","majorGridLine","majorTickLine","minorTicksPerInterval","renderMinorGridOnZooming","drawAxisMinorLine","minorGridLine","minorTickLine","endIndex","label","elementSize","isAxisBreakLabel","RotatedWidth","labelSpace","labelPadding","isLabelInside","tickSpace","angle","isVerticalAngle","textHeight","textPadding","maxLineWidth","intervalLength","labelHeight","yAxisLabelX","labelElement","pixel","isInverse","isAxisInverse","previousEnd","isLabelOnAxisLineLeft","sizeWidth","breakLabelSizeWidth","breakLabelSize","LabelMaxWidth","breakLabelMaxWidth","cos","PI","originalText","labelIntersectAction","isInversed","opposedPosition","labelStyle","textAlignment","edgeLabelPlacement","previousYValue","currentYValue","axisLabelFont","createZoomingLabel","getAxisLabelXvalue","textWidth","anchor","lineBreakAlignment","startY","gap","dateTimeInterval","endY","maxLabelSize","labelBorder","endX","createAxisBorderElement","multiLevelLabels","multiLevelLabelModule","renderYAxisMultiLevelLabels","isRotated","labelRotation","titleRotation","titlePadding","multiLevelLabelHeight","titleSize","titleCollection","axisTitleFont","minorDirection","labelIndex","isFirstLabel","logStart","logEnd","coor","range","logInterval","logPosition","ticksX","ticksY","minorGird","minorTick","pow","findLogNumeric","labelWidth","isLeft","islabelInside","isHorizontalAngle","newPoints","isRotatedLabelIntersect","textPoints","rotatedLabelSize","isLabelUnderAxisLine","isEndAnchor","paddingForBreakLabel","getAnchor","isRtlEnabled","i_1","breakLabelWidth","getLabelText","xValue2","rect_1","xAdjustment","yAdjustment","rectCoordinates","getRectanglePoints","rectCenterX","rectCenterY","index_1","rotateAngle","textRect","textRectCoordinates","rectPoints","newRect","interSectPoint","calculateIntersection","rectPoint1","rectPoint2","trimValue","sqrt","p1","p2","p4","c2x","c3x","c2y","c3y","u1","u4","px","py","point3","point4","findAxisLabel","axisRect","startX","length_2","renderXAxisMultiLevelLabels","borderElement","pointerEvents","enableTrim","gridDirection","gridModel","gridId","gridIndex","themeColor","findParentNode","parentNode","zoomElement","replaceChild","MarkerExplode","removeEventListener","highlightMode","explodeSeries","chartSeries","tooltipModule","isPointMouseDown","markerExplode","allowHighlight","drawTrackBall","animationDuration","maxPointCount","svg","seriesMarker","highlightModule","generateStyle","selectionModule","selectionMode","symbolId","borderColor","markerShadow","g","markerElement","trackElement","createSvg","cssText","symbol","selectionId","seletionElem","endAnimate","trackballAnimate","delays","durations","isLabel","centerY","clipX","clipY","point_1","trackballElements","markerShapes","Marker","previousLocation","isBoxPlot","isFilled","markerFill","markerBorder","markerOpacity","markerShape","markerClipRect","getRangeLowPoint","region","markerElements","incFactor","lowPoint","TechnicalIndicator","targetSeries","RangeColorSetting","CrosshairSettings","ZoomSettings","Chart","rotatedDataLabelCollections","isScrolling","checkResize","clickCount","singleClickTimer","isCrosshair","chartid","isLegendClicked","previousTargetId","currentPointIndex","currentSeriesIndex","currentLegendIndex","previousPageX","previousPageY","allowPan","mergePersistChartData","localStorage","getItem","dataObj","isProtectedOnChange","keys_1","isIdHasSpecialCharacter","regex","numberRegex","childElementId","blazor","markerIndex","unWireEvents","initPrivateVariable","setCulture","dragY","refreshDefinition","description","elementid","svgId","loadEventData","theme","cartesianChartRendering","applyZoomkit","beforeRenderData","setTheme","createChartSvg","calculateAreaType","calculateVisibleSeries","initTechnicalIndicators","initTrendLines","calculateVisibleAxis","processData","getLocalizedLabel","localeObject","getLegendOptions","calculateStackValues","calculateBounds","rangeFound","enableSelector","renderElements","removeSelection","isCalculateStacking","filterArray","calculateDragSelectedElements","renderBorder","renderTitle","renderAreaBorder","renderSeriesElements","renderLegend","performSelection","setSecondaryElementPosition","renderAnnotation","yAxisElements","stripLineModule","renderStripLine","legendCollections","calTotalPage","bounds","canvasClip","canvasRestore","chartObject","mainObject","svgRect","initializeModuleElements","dataLabelCollections","indicators","indicatorElements","hasTrendlines","trendLineElements","isTrendline","tooltipdiv","initializeIndicator","initializeTrendLine","appendElementsAfterSeries","sourceIndex","renderCanvasSeries","seriesSvg","indicator","createIndicatorElements","getTrendLineElements","childElementCount","calculateStockEvents","enablePan","performedUI","showToolbar","applyZoomToolkit","annotationModule","renderAnnotations","selectedDataIndexes","invokeSelection","invokeHighlight","redrawSelection","check","prevPointCount","initializeDataModule","techIndicator","subTitleHeight","elementSpacing","subTitleCollection","chartTitleFont","subTitle","subTitleStyle","chartSubTitleFont","marginTotal","stockLegendModule","calculateLegendBounds","print","exportChart","trendIndex","trendLine","initSeriesCollection","isTransposed","polarSeriesModule","radarSeriesModule","paretoAxes","isPanning","isAxisZoomed","scrollSettingEnabled","initAxis","injectTo","isSeries","targetIndicator","palettes","zOrder","isSecondaryAxis","initSeries","positionY","positionX","rotation","alignment","subtitleSize","borderOptions","cornerRadius","background","renderSubTitle","titleWidth","titleText","subTitleElementSize","reduce","subTitleOptions","backGroundImage","backgroundImage","fillColor","image","drawImage","previousRect","areaBorder","addSeries","removeSeries","clearSeries","addAxes","axisCollection_1","desiredIntervals","removeAxis","highlightElement","removeSvg","startEvent","moveEvent","stopEvent","chartOnMouseDown","mouseMove","mouseEnd","chartOnMouseClick","chartOnDoubleClick","chartRightClick","mouseLeave","chartKeyDown","documentKeyHandler","chartKeyUp","resizeBound","touchObject","chartResize","longPressBound","crosshairModule","which","pointerType","zooming","disableScroll","enableSelectionZooming","enablePinchZooming","touchAction","msTouchAction","msContentZooming","msUserSelect","webkitUserSelect","isOrientation","changedTouches","setMouseXY","export","fileName","exportModule","afterExport","getDataUrl","arg","currentSize","previousSize","beforeResizeArgs","cancelResizedEvent","resizeTo","touchArg","clientX","clientY","chartOnMouseMove","chartOnMouseLeave","isChartDrag","actionKey","removeLegendHighlightStyles","ctrlKey","enableDeferredZooming","enableMouseWheelZooming","chartKeyboardNavigations","groupElement","markerGroup","targetId","titleElement","legendElement","pagingElement","previousElement","setTabIndex","focusChild","legendElement_1","getActualIndex","currentLegend","seriesIndexes","currentElement","totalLength","altKey","pointRegion","highlightChart","completeSelection","legendID","legendItemsId","legendSelection","click","calculateSelectedElements","toolkit","zoomInOutCalculation","performZoomRedraw","yArrowPadding","xArrowPadding","doPan","timeInterval","pointDoubleClick","observers","pointClick","triggerPointEvent","axisLabelClick","triggerAxisLabelClickEvent","clickEvt","axisIndex","currentAxis","labelID","pointMove","titleTooltip","axisTooltip","pointMouseMove","isTitleOrLegendEnabled","texts","categories","mouseDownX","previousMouseMoveX","mouseDownY","previousMouseMoveY","isDoubleTap","threshold","pointMouseDown","chartOnMouseUp","pointMouseUp","setLocaleConstants","defaultLocalConstants","setAnnotationValue","annotationIndex","annotation","annotations","processAnnotation","ZoomIn","Zoom","ZoomOut","Pan","Reset","ResetZoom","tabColor","enableAnnotation","errorBarVisible","isPointDrag","dataLabelEnable","isLegend","dragSettings","currentModule","findIndicatorModules","findTrendLineModules","findAxisModule","enableExport","allowExport","enableHighlight","datetimeEnabled","categoryEnabled","logarithmicEnabled","striplineEnabled","dateTimeCategoryEnabled","multiLevelEnabled","axisCollections_1","findStriplineVisibility","stripLines","macdEnable","bandEnable","isLine","isSpline","markerEnable","striplines","striplines_1","stripline","clearRect","removeLength","pinchTarget","containerCollection","removeChild","definitions","definitions_1","axisChange","getVisibleSeries","visibleSeries_1","refreshLiveData","removeStyles","mousemove","initMouseEvent","isPoint","showCrosshair","hideCrosshair","removeCrosshair","refreshBounds","crosshairTooltip","textOverflow","seriesRefresh","blazorProp","isClosed","boxPlotMode","showMean","binInterval","currentMode","styleId","highlightDataIndexes","highlightSearch","ignoreRegex","replaceQuery","findTextNode","nodeType","nodeValue","revertHighlightSearch","parent_1","createTextNode","icon","AutoComplete","_this_1","searchList","getLocaleName","getNgDirective","filterType","dataType","typeOfData","typeof","virtualGroupDataSource","mapping","suggestionCount","queryElements","take","takeValue","getTakeValue","skip","virtualItemStartIndex","searchLists","isTyped","isDataFetched","isSelectCustom","checkAndResetCache","list","renderList","filterInput","beforePopupOpen","resetList","activeIndex","preventDefaultAction","updateData","filterAction","isNoDataElement","minLength","isFiltering","isPreventScrollAction","previousStartIndex","virtualListInfo","getTransformValues","virualElement","GetVirtualTrackHeight","totalItemCount","getFilteringSkeletonCount","hidePopup","clearAll","property","onActionComplete","ulElement","isUpdated","fixedHeaderElement","li","postBackAction","autofill","liCollections","items","listData","searchItem","setAutoFill","setSelection","isValidLI","getFormattedValue","getIndexByValue","setHoverList","selectedLI","setScrollPosition","isPopupOpen","preventAutoFill","isKeyNavigate","listOption","fieldsSettings","itemCreated","highlight","itemTemplate","isHtmlElement","charCodeAt","itemCreated_1","isEditTextBox","isPopupButton","showPopupButton","isSelectFocusItem","setInputValue","oldValue","typedString","allowCustom","setOldText","setOldValue","checkFields_1_1","listLength_1","getItems","_this_2","addItem","updateValues","showPopup","refreshPopup","viewPortInfo","previousEndIndex","setUpdateInitial","button","appendSpan","dropDownClick","atcProps","getPropObject","newProperty","oldProperty","renderHightSearch","isHighlight","iconCss","groupBy","rowCell","gridHeader","gridContent","gridFooter","headerContent","movableContent","movableHeader","frozenContent","frozenHeader","gridChkBox","editedRow","addedRow","leftRight","frozenRight","frozenLeft","dataColIndex","ariaColIndex","dataRowIndex","ariaRowIndex","tbody","colGroup","change","beforeOpen","initialFrozenColumnIndex","enCa","enGb","LABEL","RIPPLE","WRAPPER","ATTRIBUTES","RadioButton","RadioButton_1","checked","updateChange","instance","radioGrp","getRadioGroup","angularValue","radioWrap","wrapper","forEach","refreshing","focusHandler","focusOutHandler","getLabel","getSelectedValue","getWrapper","nextElementSibling","initialCheckedValue","initWrapper","updateHtmlAttribute","setDisabled","rippleSpan","for","setText","keyUpHandler","labelMouseDownHandler","labelMouseLeaveHandler","rippleElem","labelMouseUpHandler","wrap","formControlName","textLabel","rippleLabel","getElementsByTagName","relativeTimeMr","mr","Row","innerPadding","findTickSize","findLabelSize","Column","MajorGridLines","MinorGridLines","AxisLine","MajorTickLines","MinorTickLines","CrosshairTooltip","Axis","axisBottomLine","intervalDivs","crossAxis","diff","isHorizontal","legendLabelFont","labelSize","findDifference","calculateVisibleRangeOnZooming","baseRange","actualRange","doubleRange","triggerRangeRender","getRangePadding","getMaxLabelWidth","isAxisLabelBreak","isIntersect","rotatedLabel","width1","findMultiRows","result1","height_1","getMultilevelLabelsHeight","currentX","currentLabel","isBreakLabels","width2","isMultiRows","store","isPolar","VisibleLabels","ne","zhMo","hm","12","13","40","tg","disableHtmlEncode","allowResizing","allowReordering","showColumnMenu","allowEditing","showInColumnChooser","autoFit","sortDirection","getEditTemplate","editTemplateFn","getFilterTemplate","filterTemplateFn","valueFormatter","setFormatter","getFormatFunction","setParser","getParserFunction","toJSON","commands","textAlign","commandsTemplate","templateFn","headerTemplate","headerTemplateFn","fltrTemplateFn","editTemplate","filterTemplate","ddEditedData","a_1","xObj","yObj","z","fnDescending","fnAscending","getFreezeTableName","freezeTable","refreshReactColumnTemplateByUid","refreshReactHeaderTemplateByUid","formatFn","getParser","parserFn","getColumnTemplate","getHeaderTemplate","getFilterItemTemplate","getDomSetter","GridColumn","CommandColumnModel","StackedColumn","Scroll","oneTimeReady","widthService","uiupdate","setWidthToColumns","toolbarModule","toolbar","tlbrElement","tlbrLeftElement","tlbrCenterElement","tlbrRightElement","tlbrItems","tlbrLeftWidth","tlbrCenterWidth","tlbrRightWidth","tlbrItemsWidth","tlbrWidth","enableAdaptiveUI","refreshOverflow","setHeight","mHdrHeight","getContent","enableColumnVirtualization","isFrozenGrid","getScrollBarWidth","frozenRows","getHeaderContent","getRowHeight","isInitialLoad","loadingIndicator","indicatorType","ensureOverflow","setPadding","scrollWidth","getThreshold","cssProps","getCssProperties","removePadding","rtl","hDiv","footerDiv","getFooterContent","getSiblingsHeight","appName","setScrollLeft","setPageXY","onTouchScroll","mScrollBar","onCustomScrollbarScroll","userAgent","contentScrollHandler","headerScrollHandler","onContentScroll","scrollTarget","isHeader","isPreventScrollEvent","errorFreeze","errorFixed","getVisibleFrozenLeftCount","widthVal","getVisibleFrozenRightCount","isEdit","isDown","scrollDown","isFooter","cont","hdr","isFrozen","pageXY","getPointXY","mHdr","mCont","scrollBar","getScrollbleParent","scrollingElement","overflowY","defaultView","scrollHeight","addStickyListener","isAdd","eventElement","makeStickyHeader","resizeFrozenRowBorder","div","frzCols","enableStickyHeader","sLeft","sHeight","getContentTable","setLastRowCell","css","contentRect","getClientRects","headerEle","toolbarEle","groupHeaderEle","parentTop","top_1","colMenuEle","elemTop","showDropArea","setSticky","ccDlg","topStyle","gridElement","cs","SummaryModelGenerator","footerTemplate","groupFooterTemplate","groupCaptionTemplate","columnSelector","detailTemplate","childGrid","isRowDragable","generateRows","buildSummaryData","getGeneratedRow","level","parentUid","summaryRow","raw","tmp","indents","getIndentByLevel","isDetailGridAlone","indentLength","getIndentCount","allowRowDragAndDrop","getGeneratedCell","getCellType","DetailFooterIntent","Indent","class","cells","isAggregateRow","cell","isDataCell","cellType","indent","sColumn","scolumn","opt","dummy","summaryRows","single","setTemplate","helper","disp","Summary","GroupSummaryModelGenerator","v","indx","GroupSummary","CaptionSummaryModelGenerator","initVal","prev","cur","CaptionSummary","ta","kn","_vm","_h","$createElement","_self","staticClass","staticStyle","commandClick","wrapSettings","gridQuery","toolbarClick","excelExportComplete","editSettings","actionComplete","actionBegin","actionFailure","filterOptions","customiseCell","percentageRules","numericParams","dateColumns","requiredRules","tradebalePeriodParams","tradebalePeriods","percentageParams","referenceTypeParams","referenceTypes","checkboxParams","multilineParams","alertDlgButtons","animationSettings","showCloseIcon","dialogOpen","dialogClose","alertWidth","draggable","_v","_s","alertType","triggerDate","alertText","client","country","pricingAreaName","utility","product","company","contractName","contractId","watchPeriod","triggerPrice","contractUnits","marketPrice","textRender","staticRenderFns","Toolkit","iconRectOverFill","iconRectSelectionFill","zoomCompleteEvtCollection","createPanButton","childElement","toolkitSelectionColor","toolkitFill","elementOpacity","panElements","toolkitIconRect","pan","createZoomButton","rectColor","toolkitIconRectSelectionFill","zoomElements","selectedID","createZoomInButton","polygonDirection","drawPolygon","zoomInElements","enableZoomButton","zoomIn","createZoomOutButton","zoomOutElements","zoomOut","createResetButton","process","icon2","icon3","hoveredID","toolkitIconRectOverFill","iconColor","zoomingEventArgs","toolkitElements","zoomedAxisCollection","previousZoomFactor","previousZoomPosition","currentZoomFactor","currentZoomPosition","previousVisibleRange","currentVisibleRange","axisName","axisRange","setDefferedZoom","touchMoveList","touchStartList","applySelection","scale","cumulative","zoomingEventArgs_1","zoomCancel","browserName","wheelEvent","zoomingRect","zoomAxes","zoomkitOpacity","isIOS","isIos","isIos7","renderZooming","calculateZoomAxesRange","drawZoomingRectangle","endLocation","selectionRectFill","selectionRectStroke","xDifference","yDifference","currentScale","performDefferedZoom","redrawOnZooming","translateX","translateY","setTransform","doZoom","layout","zoomRect","zoomedAxisCollections","onZoomingEventArg","isRedraw","isMouseUp","zoomCompleteCollection","performMouseWheelZooming","origin","onZoomingEventArgs","performPinchZooming","elementOffset","touchDown","touchMove","touch0StartX","touch0StartY","touch0EndX","touch0EndY","touch1StartX","touch1StartY","touch1EndX","touch1EndY","pinchRect","translateXValue","translateYValue","calculatePinchZoomFactor","selectionMin","selectionMax","rangeMin","rangeMax","axisTrans","currentZF","currentZP","actualMin","actualDelta","transX","transY","isPinch","xAxisLoc","yAxisLoc","showZoomingToolkit","toolboxItems","toolbarItems","spacing","iconSize","xPosition","shadowElement","defElement","createDefs","zoomFillColor","currentItem","outerElement","panIcon","zoomDiv","zoomheight","zoomToolkitMove","zoomToolkitLeave","showToolkit","zoomCompleteEventCollection","zoomCompleteEvent","chartMouseWheel","mouseDownHandler","mouseCancelHandler","addTouchPointer","touchList","pointerId","ButtonsDirective","inject","getTag","ButtonsPlugin","DialogButtonDirective","DialogButtonPlugin","DialogComponent","getButtons","getDimension","sanitizeHelper","isFullScreen","DialogPlugin","arKw","Worksheets","Worksheet","isSummaryRowBelow","showGridLines","HyperLink","Grouping","FreezePane","MergeCell","MergeCells","mergeCell","inserted","mCell","isIntersecting","intersectingCell","Width","Height","base","CellStyle","numFmtId","backColor","fontName","fontSize","fontColor","italic","bold","underline","strikeThrough","wrapText","hAlign","vAlign","numberFormat","borders","Borders","isGlobalStyle","Font","sz","strike","CellXfs","Alignment","CellStyleXfs","CellStyles","xfId","NumFmt","formatCode","Border","mLine","mColor","Rows","Image","Cell","Cells","Utils","bitConverterToInt32","bitConverterToInt16","bitConverterToUInt32","bitConverterToUInt16","bitConverterUintToInt32","bitConverterInt32ToUint","bitConverterInt32ToInt16","byteToString","byteIntToString","arrayCopy","destination","destinationIndex","dataToCopy","mergeArray","arrayOne","arrayTwo","mergedArray","encodedString","chr1","chr2","chr3","encode1","encode2","encode3","encode4","keyStr","resultIndex","DecompressorHuffmanTree","init","m_LengthTree","m_DistanceTree","prepareData","blCount","treeSize","MAX_BITLEN","treeFromData","tree","pointer","increment","revcode","subTree","treeLen","m_Tree","unpackSymbol","lookahead","peekBits","skipBits","subtree","bitlen","availableBits","ChecksumUpdate","checkSumUInt","DEF_CHECKSUM_BIT_OFFSET","DEF_CHECKSUM_ITERATIONSCOUNT","DEF_CHECKSUM_BASE","ChecksumGenerate","CompressedStreamReader","bNoWrap","defaultHuffmanDynamicTree","DEF_HEADER_METHOD_MASK","DEF_HEADER_INFO_MASK","DEF_HEADER_FLAGS_FCHECK","DEF_HEADER_FLAGS_FDICT","DEF_HEADER_FLAGS_FLEVEL","DEF_MAX_WINDOW_SIZE","DEF_HUFFMAN_REPEATE_MAX","DEF_HUFFMAN_END_BLOCK","DEF_HUFFMAN_LENGTH_MINIMUMCODE","DEF_HUFFMAN_LENGTH_MAXIMUMCODE","DEF_HUFFMAN_DISTANCE_MAXIMUMCODE","mCheckSum","tBuffer","mBufferedBits","mTempBuffer","mBlockBuffer","mbNoWrap","mWindowSize","mCurrentPosition","mDataLength","mbCanReadNextBlock","mbCanReadMoreData","mbCheckSumRead","DOMException","mInputStream","readZLibHeader","decodeBlockHeader","fillBuffer","bitMask","mBuffer","bytesRead","read","readInt16","readBits","bFinalBlock","blockType","mbReadingUncompressed","skipToBoundary","readInt16Inverted","lengthComplement","mUncompressedDataLength","mCurrentLengthTree","mCurrentDistanceTree","lengthTree","distanceTree","trees","decodeDynamicHeader","bLastSymbol","iLengthsCount","iDistancesCount","iCodeLengthsCount","iResultingCodeLengthsCount","arrResultingCodeLengths","arrDecoderCodeLengths","iCurrentCode","treeInternalDecoder","bNeedBreak","miRepSymbol","DEF_HUFFMAN_DYNTREE_REPEAT_BITS","DEF_HUFFMAN_DYNTREE_REPEAT_MINIMUMS","tempArray","readHuffman","free","dataRead","readdata","numDataRead","numReadMore","iRepeatLength","DEF_HUFFMAN_REPEAT_LENGTH_BASE","iRepeatExtraBits","DEF_HUFFMAN_REPEAT_LENGTH_EXTENSION","extra","DEF_HUFFMAN_REPEAT_DISTANCE_BASE","iRepeatDistance","DEF_HUFFMAN_REPEAT_DISTANCE_EXTENSION","initialLength","inBlockPosition","oldDataLength","dataToRead","readPackedBytes","readInt32","DEF_REVERSE_BITS","Stream","inputStream","byteLength","readByte","toByteArray","CRC32TABLE","INT_SIZE","SHORT_SIZE","CentralDirectoryEndSignature","CentralDirSizeOffset","CentralHeaderSignature","BufferSize","ZipArchive","initCrc32Table","files","isMicrosoftBrowser","navigator","msSaveBlob","file","ZipArchiveItem","addDirectory","directoryName","base64String","zipByteArray","lCentralDirEndPosition","findValueFromEnd","iCentralDirSize","ReadInt32","lCentralDirPosition","readCentralDirectoryDataAndExtractItems","itemHelper","readCentralDirectoryData","readData","checkCrc","decompressData","unCompressedStream","save","zipArchive","saveInternal","saveAsBlob","blob","skipFileSave","zipData","dirLength","compressedObject","getCompressedData","constructZippedObject","isDirectory","writeZippedContent","reader_1","FileReader","onload","crc32Value","compressedData","compressedSize","uncompressedDataSize","compressionType","calculateCrc32Value","readAsArrayBuffer","crc32Table","compressor","currentIndex","nextIndex","subArray","zipParts","extFileAttr","writeHeader","localHeader","centralDir","writeCentralDirectory","zipHeader","getModifiedTime","getModifiedDate","localDirLen","cenDirLen","getArrayBuffer","shift","writeFooter","Blob","externalFileAttribute","directoryHeader","centralLength","localLength","dirEnd","bytes","modTime","modiDate","lStreamSize","arrBuffer","lLastPos","lCurrentPosition","uiCurValue","bFound","ReadInt16","ReadUInt16","ZipArchiveItemHelper","headerSignature","crc32","compressionMethod","originalSize","iFileNameLength","iExtraFieldLenth","iCommentLength","externalAttributes","localHeaderOffset","m_strItemName","readLocalHeader","readCompressedData","decompressDataOld","decompressedData","reader","compressedStream","iReadBytes","iNameLength","iExtraLength","headerVal","dataStream","iBytesLeft","iBytesToRead","itemName","decompressedStream","ValueFormatter","cultureName","isServerRendered","displayText","CsvHelper","separator","csvStr","formatter","globalStyles","Map","worksheets","parseWorksheet","parseRows","rows_1","parseRow","parseCell","csv","parseCellValue","error","has","dataUrl_1","URL","createObjectURL","dwlLink","createElementNS","download","href","event_1","revokeObjectURL","encodingType","encoding","encodeString","BlobHelper","parts","append","part","getBlob","AutoFilters","Workbook","saveType","currencyString","sharedStringCount","unitsProportions","hyperlinkStyle","currency","mSaveType","mArchive","sharedString","mFonts","mBorders","mStyles","printTitles","cellStyles","mNumFmt","mFills","mCellXfs","mCellStyleXfs","drawingCount","imageCount","cellStyle","parserCellStyle","cellStylesIn","tFormat","parserWorksheets","builtInProperties","BuiltInProperties","parserBuiltInProperties","csvHelper","jsonBuiltInProperties","author","comments","manager","subject","createdDate","modifiedDate","tags","jsonSheet","sheet","mergeCells","mergedCellsStyle","mHyperLinks","parserColumns","parserRows","freeze","parserFreezePanes","printTitle","parserPrintTitle","pageSetup","images","parserImages","autoFilters","parseFilters","hyperLinks","mergeOptions","fromJson","toJson","applyProperties","sourceJson","destJson","getCellName","getColumnName","strColumnName","iCurrentDigit","titleRowName","titleColName","printTitleName","fromRow","toRow","fromColumn","toColumn","freezePanes","leftCell","columnsLength","rowsLength","rowId","parserRow","insertMergedCellsStyle","rowToInsert","createCell","insertIndex","styleIndex","cellToInsert","refName","grouping","parseGrouping","parseCells","outlineLevel","isCollapsed","cellsLength","spanMin","spanMax","cellId","jsonCell","rowSpan","colSpan","hyperlink","hyperLink","getCellValueType","rId","formula","parseCellType","processMergeCells","spans","GetColors","processColor","colorVal","rgbColors","processCellValue","cellValue","processedVal","startindex","processString","substring","subString","subSplit","subSplit_1","applyGlobalStyle","defStyleIndex","parserBorder","leftBorder","rightBorder","topBorder","bottomBorder","processCellStyle","switchNumberFormat","numFmt","cellStyleXfs","cellXfs","changeNumberFormats","returnFormat","getNumberPattern","processNumFormatId","compareResult","compareStyle","isNewFont","toCompareStyle","font","isNewBorder","bStyle","isAllBorder","toCompareBorder","allBorderStyle","baseStyle","toOADate","value_1","sstvalue","imagesLength","parserImage","lastRow","lastColumn","horizontalFlip","verticalFlip","blobSaveType","blobData","proxyUrl","xlsxMatch","csvMatch","saveWorkbook","saveWorksheets","saveSharedString","saveStyles","saveApp","saveCore","saveContentType","saveTopLevelRelation","saveWorkbookRelation","workbookTemp","sheets","sheetName","printTitle_1","addToArchive","saveWorksheet","sheetBlob","sheetString","saveSheetView","colString","pixelsToColumnWidth","rowString","pixelsToRowHeight","_j","hLink","saveDrawings","saveSheetRelations","drawings","sheetDrawingString","imgId","pic","updatelastRowOffset","updatelastColumnOffSet","lastRowOffset","lastColOffset","imageData","convertBase64toImage","saveDrawingRelations","picture","iCurHeight","iCurRow","iCurOffset","iRowHeight","convertToPixels","iSpaceInCell","rowHiddenHeight","iCurWidth","iCurCol","iColWidth","ColumnWidthToPixels","colHiddenWidth","img","byteStr","atob","ArrayBuffer","drawingRelation","pixels","dDigitWidth","trunc","fileWidth","relStr","paneString","sstStart","si","updateCellXfsStyleXfs","styleTemp","saveNumberFormats","saveFonts","saveFills","saveBorders","saveCellStyleXfs","saveCellXfs","saveCellStyles","compareFontResult","fontId","fillId","borderId","applyAlignment","numFmtStyle_1","fillsStyle","bordersStyle","cellStyleString","cellXfsStyle","cellStyleXf","saveAlignment","cellXf","alignString","appString","coreString","toISOString","topRelation","wbRelation","contentTypeString","sheetsOverride","drawingIndex","xmlString","archiveItem","startCell","endCell","updatedMergedCellStyles","sCell","eCell","dateToTicks","ticksPerDay","daysToMonth365","daysToMonth366","isLeapYear","timeToTicks","totalSeconds","daysTo1899","doubleDateOffset","oaDateMinAsTicks","millisPerDay","AriaService","setOptions","setStateAndProperties","config","setExpand","expand","setSort","setBusy","isBusy","busy","setGrabbed","isGrabbed","grabbed","setDropTarget","isTarget","dropeffect","datarole","selected","multiselectable","haspopup","colcount","rowcount","processFutureTime","substr","eifelerRegelAppliesToNumber","processPastTime","lastDigit","firstDigit","lb","CLS_VERTICAL","CLS_ITEMS","CLS_ITEM","CLS_RTL","CLS_SEPARATOR","CLS_POPUPICON","CLS_POPUPDOWN","CLS_POPUPOPEN","CLS_TEMPLATE","CLS_DISABLE","CLS_POPUPTEXT","CLS_TBARTEXT","CLS_TBAROVERFLOW","CLS_POPOVERFLOW","CLS_TBARBTN","CLS_TBARNAV","CLS_TBARSCRLNAV","CLS_TBARRIGHT","CLS_TBARLEFT","CLS_TBARCENTER","CLS_TBARPOS","CLS_HSCROLLCNT","CLS_VSCROLLCNT","CLS_HSCROLLBAR","CLS_POPUPNAV","CLS_POPUPCLASS","CLS_POPUP","CLS_TBARBTNTEXT","CLS_TBARNAVACT","CLS_TBARIGNORE","CLS_POPPRI","CLS_HIDDEN","CLS_MULTIROW","CLS_MULTIROWPOS","CLS_MULTIROW_SEPARATOR","CLS_EXTENDABLE_SEPARATOR","CLS_EXTEANDABLE_TOOLBAR","CLS_EXTENDABLECLASS","CLS_EXTENDPOPUP","CLS_EXTENDEDPOPOPEN","Item","Toolbar","resizeContext","resize","orientationChangeContext","orientationChange","popupOpen","popupClose","btnItems","el","ej2_instances","tempId","destroyItems","lastElementChild","trgtEle","ctrlTem","popObj","activeEle","tbarAlign","tbarItemsCol","attrb","enableCollision","scrollStep","scrollModule","isVertical","isExtendedOpen","popupPriCount","allowKeyboard","wireKeyboardEvent","keyModule","keyActionHandler","docKeyDown","updateTabIndex","dataTabIndex","unwireKeyboardEvent","popCheck","overflowMode","keyCheck","destroyScroll","docEvent","clearProperty","tbarEle","tbarAlgEle","lefts","centers","rights","popEle","tbarItems","destroyMode","tempEle","popupRefresh","elementFocus","fChild","activeEleSwitch","clstElement","tbrNavChk","trgt","clst","keyHandling","navChk","scrollChk","nodes","rootEle","popAnimate","eleFocus","popupCheck","extendedPopup","focusFirstVisibleEle","focusLastVisibleEle","popFrstEle","ele_1","activeEleRemove","tbarScrollChk","disable","eleContains","sib","skipEle","elem","tbrItems","itemObj","isPopupElement","clsList","popupNav","popupClickHandler","tempItem","clickedArgs","getElementOffsetY","minHeight","renderControl","portals","ariaAttr","renderItems","renderLayout","renderOverflowMode","itemPositioning","checkPopupRefresh","itemsAlign","itemEleDom","innerItem","innerPos","renderSubComponent","tbarItemAlign","align","showAlwaysInPopup","changeOrientation","initScroll","innerItems","checkOverflow","scrollEle","itemWidthCal","marginTop","marginBottom","marginLeft","getScrollCntEle","trgClass","eleWidth","itemWidth","popNav","scrollNav","navEleWidth","toolbarAlign","priorityCheck","offsetWid","removePositioning","setOverflowAttributes","createPopupEle","eleItem","multiVar","extendVar","eleInlineItem","innerEle","innerNav","createPopupIcon","innerNavDom","checkPriority","removeProperty","createPopup","pushingPoppedEle","tbarObj","popupPri","eleHeight","sepHeight","poppedEle","nodeIndex","nodePri","tbResize","tbarElement","sepItem","extendEle","popupEle","popupInit","maxHeight","eleStyles","borderRightWidth","tbarPopupHandler","isOpen","toolEle","popupElePos","popIcon","scrollVal","scrollY","innerHeight","overflowHeight","tbEleData","popupOffset","documentElement","inEle","pre","checkoffset","popPriority","eleWid","sepCheck","itemCount","itemPopCount","checkClass","rVal","cls","mrgn","compuStyle","fstEleCheck","tbarEleMrgn","eleWid_1","minWidth","sepEle","popedEle","nav","navItem","tbarPriRef","sepPri","des","elWid","wid","ig","ignoreCount","priEleCnt","eleSep","ignoreCheck","eleSepWidth","prevSep","previousElementSibling","isVer","dimension","popupEleWidth","popupEleRefresh","ignoreEleFetch","ignoreEle","ignoreInx","tbarWidth","tbarItemsWid","elWidth","btnText","btn","eleSplice","inlineStyles","sepBeforePri_1","state_1","refreshPositioning","tbarWid","popWid","itemEle","alignDiv","alignEle","leftAlign_1","ctrlTemplate","setAttr","keyVal","enableItems","isEnable","itemElement","getElementByIndex","addItems","extendedOpen","itemsDiv","itemsRerender","itemAgn","items_1","algIndex","removeItems","removeItemByIndex","eleIdx","indexAgn","clearToolbarTemplate","btnItem","templateRender","templateProp","isComponent","itemType","eleObj","regEx","tempStr","toolbarTemplateID","isStringTemplate","getDataTabindex","buttonRendering","dom","iconPos","textStr","btnTxt","prefixIcon","suffixIcon","btnObj","iconPosition","tempDom","tooltipText","itemClick","showTextOn","sTxt","curEle","multirowele","updateHideEleTabIndex","isElement","eleIndex","nextEle","templateEle","registeredTemplate","registeredTemplates","registeredItem","rootNodes","closestItem","portalItem","containerInfo","tEle","changedProb","popupPriCheck","booleanCheck","itemCol","hideItem","innerItems_1","CLS_ROOT","CLS_HSCROLLCON","CLS_NAVARROW","CLS_NAVRIGHTARROW","CLS_NAVLEFTARROW","CLS_HSCROLLNAV","CLS_HSCROLLNAVRIGHT","CLS_HSCROLLNAVLEFT","CLS_DEVICE","CLS_OVERLAY","CLS_RIGHTOVERLAY","CLS_LEFTOVERLAY","OVERLAY_MAXWID","HScroll","browser","browserCheck","customStep","ieCheck","uniqueId","scroll","touchHandler","swipeHandler","createOverlay","createNavIcon","setScrollState","scrollDiv","innerEle_1","overflowX","scrollItems","overlay","navEles","rightOverlayEle","clsRight","rightEle","leftEle","eventBinding","rightAttributes","clsLeft","leftAttributes","navEle","navLeftItem","onKeyPress","timeoutFun_1","keyTimeout","eleScrolling","keyTimer","onKeyUp","tabHoldHandler","repeatScroll","clickEventHandler","clearInterval","timeout","scrollDis","timeoutFun","setInterval","isContinuous","frameScrollRequest","swipeEle","velocity","distanceX","step","sin","cancelAnimationFrame","requestAnimationFrame","scrollUpdating","scrollValue","scrollDirection","arrowDisabling","addDisable","removeDisable","arrowIcon","navLeftEle","navRightEle","leftOverlay","rightOverlay","disEle","webpackContext","req","webpackContextResolve","__webpack_require__","o","exports","az","zhHk","hr","Reorder","idx","headerDrop","enableAfterRender","drag","dragStart","dragStop","createReorderElement","keyPressHandler","chkDropPosition","srcElem","destElem","bool","lockColumn","isEqualNode","targetParentContainerIndex","chkDropAllCols","isFound","getHeaderCells","pop","findColParent","cnt","getColumnsModel","isNotStackedHeader","columnModel","subCols","dropElement","uId","destElemDiv","destElemUid","destColumn","sourceUid_1","colMatchIndex_1","destUid_1","moveColumns","newIndex","destElement","oldIdx","isActionPrevent","destIndex","reorderByColumn","preventRefresh","handler","arg1","arg2","getColParent","srcIdx","lockcolPositionCount","frozenColumns","getFrozenLeftCount","getFrozenRightColumnsCount","toColumnUid","cols_1","refreshColumnIndex","stackedHdrColumn","getStackedColumns","stackedCols","getAllStackedheaderParentColumns","flatColumns","parents","reorderSingleColumn","fromFName","toFName","reorderMultipleColumns","fromFNames","getColumnIndexByField","getColumnByIndex","moveTargetColumn","reorderSingleColumnByTarget","fieldName","reorderMultipleColumnByTarget","reorderColumns","fromCol","reorderColumnByIndex","reorderColumnByTargetIndex","isXaxis","setDisplay","upArrow","downArrow","getColumnHeaderByField","focusModule","onClick","isMacLike","platform","metaKey","currentInfo","visibleCols","getVisibleColumns","toCol","cloneElement","getHeaderTable","stopTimer","updateScrollPostion","updateArrowPosition","draggableType","cliRect","cliRectBaseRight","cliRectBaseLeft","scrollElem","timer","cliRectBase","CommandColumnRenderer","locator","buttonElement","unbounDiv","childRefs","tabindex","destroyButtons","isVirtualEdit","localizer","tempID","renderTemplates","renderButton","setAttributes","buttonOption","onclick","buttonObj","commandType","CommandColumn","initiateRender","cellFac","getService","addCellRenderer","commandClickHandler","commandColumn","getRowObjectFromUID","commandCols","idInString","typeInString","findIndex","rowData","commandclickargs","editModule","startEdit","closeEdit","commandDelIndex","clearSelection","selectRow","deleteRecord","load","commandCol","LegendSettings","BaseLegend","maxItemHeight","rowHeights","pageHeights","columnHeights","pageXCollections","chartRowCount","legendTitleCollections","legendRegions","pagingRegions","legend","isChartControl","isAccChartControl","isBulletChartControl","isStockChartControl","bulletChart","fivePixel","rowCount","pageButtonSize","maxColumns","backwardArrowOpacity","forwardArrowOpacity","arrowWidth","arrowHeight","isTop","isTitle","currentPageNumber","getPosition","itemPadding","library","get3DLegendBounds","getLegendBounds","containerPadding","accumulation","setBounds","titlePosition","legendTitleSize","isPaging","enablePages","calculateLegendTitle","isBulletChart","labelIns","ticklIns","categoryFieldValue","categoryField","legendHeight","legendWidth","alignLegend","axisTextSize","legendSize","titlePlusArrowWidth","pagingLegendBounds","requireLegendBounds","firstLegend","findFirstLegendPosition","upArrowHeight","legendGroup","legendTranslateGroup","createLegendElements","totalPages","textSize","shapeHeight","isRtlEnable","getLinearLegend","legendSeriesGroup","previousLegend","startPadding","shapeWidth","xLocation","textOptions","shapePadding","legendIndex","leftSpace","bottomSapce","rightSpace","legendOption","isReverse","accessbilityText","generateId","getRenderPoint","renderSymbol","renderText","toggleVisibility","renderPagingElements","xmlns","nextLegend","gradientLegendCount","linerGradientEle","fillColors","numberItems","colorMap","diffValue","colorsLength","calculatedValue","full","stopEle","startLabelY","endLabelY","startLabelX","endLabelX","startLabel","endLabel","startTextSize","endTextSize","otherSpaces","linearBarWidth","linearBarHeight","diffWidth","diffHeight","hiddenColor","fontcolor","isCanvas","translatePage","gradientLegend","legendCollection","legendCollection_1","legendTitleFont","maximumTitleWidth","renderLegendTitle","topPadding","legendTitleTextOptions","legendItemsGroup","clippath","createClipPath","pagingClipRect","regionPadding","symbolColor","isStrokeWidth","isCustomBorder","strokewidth","seriesBorder","isLineShapemarker","symbolOption","markerVisibility","textOption","pageTextElement","paginggroup","grayColor","cursor","clipPathHeight","totalNoOfPages","getPageHeight","sum","pagingText","pageNumber","changePage","backwardArrow","forwardArrow","pageText","hideArrow","showArrow","arrowElement","prefix","move","clearTooltip","LegendOptions","addDays","getTradePeriodName","yearSuffix","ToString","Substring","numOfDays","getDateDiffInDays","tradeablePeriod","getQuarter","getBusinessDatesCount","dayOfWeek","ga","SvgRenderer","rootID","svgLink","rootId","getOptionValue","svgObj","setElementAttributes","setSVGSize","line","rectangle","drawCircle","circle","drawPolyline","polyline","drawEllipse","ellipse","polygon","setAttributeNS","preserveAspectRatio","createText","createTSpan","tSpan","createTitle","defs","clipPath","createForeignObject","foreignObject","createPattern","createRadialGradient","colorStop","newOptions","cx","cy","fx","fy","drawGradient","createLinearGradient","gradientType","gradient","stop_1","drawClipPath","drawCircularClipPath","createCanvas","CanvasRenderer","canvasObj","ctx","getContext","setCanvasSize","lineWidth","dashArrayString","setLineDash","strokeStyle","beginPath","stroke","moveTo","lineTo","restore","canvasTranslate","canvasCtx","rx","globalAlpha","drawCornerRadius","fillStyle","fillRect","arcTo","closePath","dataSplit","flag","innerR","q1","q2","quadraticCurveTo","c1","c2","c3","c4","bezierCurveTo","arc","counterClockWise","dy","isTSpan","baseline","textBaseline","txtlngth","rotate","fillText","circumference","ry","imageObj","src","myGradient","setGradientValues","newColorStop","stopColor","addColorStop","updateCanvasAttributes","dataUrl","img_1","clip","getTooltipThemeColor","tooltipFill","tooltipBoldLabel","tooltipLightLabel","tooltipHeaderLine","measureText","themeFontStyle","breakText","textArray","whiteSpace","lineHeight","Size","withInAreaBounds","findDirection","rX","rY","arrowLocation","arrowPadding","tipX","tipY","controlName","Rect","Side","isRight","isBottom","CustomizeOption","TextOption","baseLine","removeElement","drawSymbol","calculateShapes","functionName","renderOption","locX","locY","eq","PathOption","renderOptions","TooltipLocation","TextStyle","TooltipBorder","AreaBounds","ToolLocation","removeSVG","createTooltipElement","highlightPadding","areaMargin","markerPoint","templateObject","blazorTemplate","fadeOuted","updateTemplateFn","createTemplate","markerSide","renderTooltipElement","drawMarker","markerSize","textElements","enableRTL","shapes","marginX","palette","tipLocation","marginY","isFixed","sharedTooltipLocation","tooltipLocation","clipBounds","wrapPadding","wrapHeader","isWrap","wrappedText","headerSize","xLength","pathElement_1","pointRect","enableAnimation","updateDiv","animateTooltipDiv","tooltipPlacement","enableShadow","shadowId","shadow","changeText","revert","findFormattedText","isRender","lines","tspanElement","tspanOption","subWidth","tspanStyle","isBoldTag","headerWidth","isLeftSpace","isRightSpace","headerSpace","isColumn","subStringLength","markerPadding","spaceWidth","labelColor","contentWidth","withoutHeader","isTextWrap","reverse","isRTLText","textFont","getTooltipTextContent","width_1","renderContentRTL","contentWidthIndex","characterCollection","isRtlText","isValidHTMLElement","firstElement","templateElement","sharedTemplateElement","controlInstance","tooltipRect","tooltipRendered","rect1","thisObject_1","tooltipRect1","getCurrentPosition","symbolLocation","boundsX","boundsY","outOfBounds","currenDiff","transition","tooltipElement","tooltipGroup_1","Node","ELEMENT_NODE","opacity_1","progressAnimation","endAnimation","tooltipGroup","ur","ColumnBase","enableSideBySidePlacement","getSideBySidePositions","seriesSpacing","columnSpacing","pointSpacing","columnWidth","minimumPointDelta","groupName","mainColumnWidth_1","mainWidth","mainDoubleRange","difference","canvasRender","gradientColor","cx1","cx2","cy1","cy2","xl","yl","xPos","yPos","rxt","ryt","gx1","gx2","gy1","gy2","ini","stacking","isLastSeries","AEx","AEy","LX","LY","GX","GY","X1","Y1","X2","Y2","optiong","gradientElement","linearGradientElement","stopElement","findRectPosition","vSeries","updateYRegion","updateXRegion","getRegion","calculateRoundedRectPath","topLeft","topRight","bottomLeft","bottomRight","animateRect","isPlot","halfValue","esUs","tet","dv","tk","weekEndings","hu","zhCn","te","ChartData","insideRegion","getRectPoint","fromCenterX","fromCenterY","clickAngle","startAngle","endAngle","distanceFromCenter","arcAngle","currentXPosition","atan2","innerRadius","isPointInThresholdRegion","checkRegionContainsPoint","regionRect","isBar","heightValue","getClosest","xvalues","leftSideNearest","rightSideNearest","isDataExist","binarySearch","middle","found","getDistinctValues","commonXValues","intial","TabItemsDirective","TabItemsPlugin","TabItemDirective","TabItemPlugin","TabComponent","addTab","enableTab","getItemIndex","tabItemId","hideTab","refreshActiveTab","refreshActiveTabBorder","removeTab","TabPlugin","sv","ugCn","MultiColoredSeries","getAreaPathDirection","startPath","getAreaEmptyDirection","isXSegment","segments","segment","getAxisValue","sortSegments","chartSegments","segmentAxis","applySegmentAxis","includeSegment","attributeOptions","areaBorderCount","createClipRect","multiColoredAreaSeriesModule","startValue","endValue","isX","isRequired","startPointLocation","endPointLocation","segmentValue","MultiColoredLineSeries","lastPoint","segmentPoint","webpackPolyfill","deprecate","paths","legendClick","legendRender","pointRender","sharedTooltipRender","seriesRender","axisLabelRender","axisRangeCalculated","tooltipRender","chartMouseMove","chartMouseClick","chartDoubleClick","chartMouseLeave","chartMouseDown","chartMouseUp","zoomComplete","resized","beforeResize","beforePrint","annotationRender","stockEventRender","regSub","regSup","beforeExport","onZooming","msMy","Category","calculateRange","getActualRange","applyRangePadding","calculateVisibleLabels","initializeDoubleRange","calculateVisibleRange","eo","sd","StripLine","measureStripLine","actualStart","actualEnd","isDateTimeAxis","isRepeat","dateToMilliSeconds","isCoreDate","getFromTovalue","startFromAxis","to","from","sizeType","isSegmented","segmentStart","segmentEnd","segRect","getToValue","findValue","isEnd","fromValue","dateParse","striplineGroup","axes_1","getSegmentAxis","repeatEvery","repeatUntil","renderStripLineElement","getStartValue","renderPath","strokeWidth","renderRectangle","stripLineLabelFont","isRotationNull","textMid","ty","tx","getTextStart","factor","horizontalAlignment","verticalAlignment","invertAlignment","segmentAxisName","pixelRect","xy","relativeTimeWithMutation","mutation","specialMutationForYears","lastNumber","softMutation","mutationTable","fullWeekdaysParse","shortWeekdaysParse","minWeekdaysParse","br","weekdaysParse","mi","mk","last2Digits","nb","kk","arTn","ExportHelper","hideColumnInclude","parentDetails","totalRecordsCount","getFData","getGridRowModel","isExpand","hierarchyPrintMode","expandedRows","generateCells","processColumns","childGridLevel","generateCell","getColumnData","gridObj","columnPromise","fColumns","colData","getHeaders","isHideColumnInclude","colDepth","processHeaderCells","generateActualColumns","getConvertedWidth","actualColumns","getCellCount","appendGridCells","gridRows","StackedHeader","isIgnoreFirstCell","Header","columnIndexes","getColumnIndexesInView","HeaderIndent","checkAndExport","gridPool","globalResolve","failureHandler","childGridObj","createChildGrid","exportType","detailRowModule","getGridModel","isPrinting","parentID","parentPrimaryKeys","parentKeyField","parentKeyFieldValue","parentRowData","exportId","isExportGrid","getGridExportColumns","actualGridColumns","gridColumns","ExportValueFormatter","internationalization","returnFormattedValue","customFormat","formatCellValue","cFormat","ExcelExport","book","workSheet","rowLength","expType","includeHiddenColumn","isCsvExport","isChild","isElementIdChanged","grpFooterTemplates","footerTemplates","aggIndex","totalAggregates","isExporting","exportValueFormatter","grid","exportProperties","isMultipleExport","workbook","isCsv","isBlob","isBlb","Child","workbk","isMultiEx","hierarchyExportMode","gridObject","processRecords","exportingSuccess","blobPromise","gridInstance","allPromise_1","processInnerRecords","getCurrentViewRecords","query_1","isCountRequired","groupedColLength","blankRows","isExportPropertiesPresent","multipleExport","processExcelHeader","stringify","processGridExport","organisedRows","organiseRows","processExcelFooter","enableFilter","headerRowLen","headerRows","initialIndex","childRows","excelRows","gColumns","headerRow","groupIndent","processHeaderContent","groupData","lazyloadData","acc","curr","lazQuery","contentModule","lazyLoadQuery","processRecordContent","capTemplate","returnType","currentViewRecords","excelRow","record","processRecordRows","processGroupedRows","GroupGuid","processAggregates","excelExportProperties","dataSource_1","cArgs","captionText","getCaptionThemeStyle","captionModelGen","groupCaptionSummaryRows","fillAggregates","childLevels","lIndex","hIndex","tCell","col_1","templateRowHeight","gCell","valueAccessor","arr","fkData","excelCellArgs","base64","setImage","getColumnStyle","parentRow","processDetailTemplate","returnVal","beforeDataBound","childGridCell","rowObj","templateData","detailCellIndex","detailIndent","columnHeader","processCell_1","currentCell","getHeaderThemeStyle","getRecordThemeStyle","excelHAlign","excelVAlign","excelRotation","excelBorders","excelNumberFormat","excelType","processRow","currentRow","excelDetailCells","detailCell","excelImage","excelExportProps","gRow","intent","rec","byGroup","summaryModel","aggregateModule","prepareSummaryInfo","groupSummaryModel","groupSummaryRows","sRows","customIndex","rows_2","columnsDetails","getAggreateValue","Sum","Average","Max","Min","Count","TrueCount","FalseCount","Custom","aggregateStyle","gridCellStyle","row_1","dummyOutlineLevel","dummyGrouping","txt","JSON1","JSON2","attrname","headerRotation","degree","spannedCells","parseStyles","currentCellIndex","gridCell","DetailHeader","getIndex","spannedCell","headerTextAlign","excelHeaderCellArgs","updateThemeStyle","themestyle","caption","noRows","updatedCellIndex","footerRows","spannedCells_1","it","itCh","enNz","monthsShortWithDots","monthsShortWithoutDots","getCloneProperties","Print","isAsyncPrint","defered","isContentReady","actionBeginFunction","onEmpty","hierarchyPrint","isPrintGrid","contentReady","removeColGroup","printGridObj","printModule","renderPrintGrid","printGrid","getFrozenColumns","getInjectedModules","injectedModues","setInjectedModules","printgrid","selectedRows","contentDiv","headerDiv","waitingPop","printGridElement","printWind","outerHeight","outerWidth","screen","availWidth","availHeight","groupCaption","colGroups","contentColGroups","footerColGroups","hideColGroup","printGridProp","enIl","WRAPPERCLASS","POPUPDIMENSION","DAY","HOVER","NAVIGATION","ICONANIMATION","FOCUS","LISTCLASS","HALFPOSITION","ANIMATIONDURATION","OFFSETVAL","EDITABLE","wrapperAttributes","TimePickerBase","createListItems","createdEl","timeFormat","listItems","timeCollections","listTag","createList","TimeMaskPlaceholder","TimePicker","disableItemCollection","timeOptions","keyConfigure","down","up","angularTag","openPopupEventArgs","createInputElement","setTimeAllowEdit","validateInterval","validateDisable","checkErrorState","inputEleValue","getDateObject","clearIconState","setMinMax","initMin","initMax","popupCreation","valueIsDisable","resetState","initValue","defaultCulture","checkTimeFormat","checkInValue","scrollTo","checkAttributes","localeText","isNavigate","isPreventBlur","isTextSelected","valueWithMinutes","prevDate","updatedCssClassesValue","isNullOrEmpty","inputStyle","getCldrDateTimeFormat","cldrTime","dateFormat","cldrFormat","isInvalid","valueExpression","valueExp","setCurrentDate","cldrDateTimeString","getCultureTimeObject","ariaAttribute","enableElement","rippleFn","propertyList","generateList","listWrapper","addSelection","getPopupHeight","popupHeight","wireListEvents","rippleModel","containerStyle","setPopupWidth","unWireListEvents","modelTitleSpan","timePopupCloseHandler","createDateObj","updatedClassesValue","timeStyle","cssClassNew","cssClassOld","removeErrorClass","validateState","disableTimeIcon","disableElement","selectInputText","setSelectionRange","setCursorToEnd","getMeridianText","meridian","getCursorSelection","getActiveElement","inputWidth","setScrollTo","findScrollTop","listHeight","liHeight","initialTime","scrollTime","getText","getValue","cldrTimeFormat","cldrDateFormat","cldrDate","getCultureDateObject","dateToNumeric","getExactDateTime","validateMinMax","compareFormatChange","updatePlaceHolder","popupHandler","closePopup","curPos","cursorDetails","focusSelection","isSeparator","keyHandler","updateValue","objToString","createMask","previousState","onMouseClick","animModel","documentClickHandler","mobileTimePopupWrap","disposeServerPopup","checkValueChange","isNavigation","valueProcess","prevValue","onMouseOver","currentLi","setHover","removeHover","onMouseLeave","minVal","maxVal","dateVal","strictOperation","maxValue","minValue","inputEventHandler","clearHandler","inputEvent","timeValue","raiseClearedEvent","setZIndex","getTextFormat","strArray","validateValue","newval","findNextElement","textVal","timeVal","collections","selectNextItem","validLiElement","elementValue","backward","elementIndex","isCheck","nextItem","isUpdate","hoveredItem","getHoverItem","setActiveClass","formatStr","timeParse","listBaseOptions","getProperty","popupAlignment","timePopupElement","formatValues","DATEPICKERROOT","DATETIMEWRAPPER","HOUR","MINUTE","SECOND","MILLISECOND","DATETIMEPOPUPWRAPPER","DateTimePicker","scrollInvoked","formatRegex","dateFormatString","dateTimeOptions","blurHandler","isTimePopupOpen","popupObject","dateTimeWrapper","keyboardHandler","unBindInputEvents","timeIcon","timekeyConfigure","cldrDateTimeFormat","bindInputEvents","validateMinMaxRange","isDateObject","disablePopupButton","checkValidState","isValidState","isDisable","renderTimeIcon","timeHandler","dateHandler","inputKeyAction","getCldrFormat","cldrDateTime","isDatePopupOpen","toggle","listCreation","dateObject","TimePopupFormat","startTime","endTime","listDetails","wireTimeListEvents","addTimeSelection","setTimeScrollPosition","openPopup","timeModal","timeKeyActionHandle","unWireTimeListEvents","modelWrapper","dateTimeCloseHandler","timeContent","setDimension","setTimeHover","removeTimeHover","nextElement","listContent","getFullDateTime","tempVal","combineDateTime","seconds","setTimeActiveClass","setTimeActiveDescendant","removeTimeSelection","getTimeHoverItem","calculateStartEnd","method","milliseconds","tempStartValue","tempMin","formatCount","proxy","formatValueSpecifier","formattext","tempEndValue","tempMax","getUTCFullYear","dateTimeCloseEventCallback","maskedDateModule","getTimeActiveElement","status_1","millisecond","findNextTimeElement","dateTimeVal","listCount","timeElementValue","setTimeValue","timeKeyHandler","nextItemValue","sw","CheckBoxComponent","CheckBoxPlugin","dataQuery","dataManagerDeferred_1","_m","selectedItem","headerText0","PositionReportTemplate","headerText1","M2MReportTemplate","headerText9","VolumeReportTemplate","headerText3","CostAndPricingReportTemplate","headerText4","ContractAlertsReportTemplate","headerText5","HedgingOverviewReportTemplate","headerText6","TicketsReportTemplate","headerText8","TicketsLogsReportTemplate","headerText7","hypotheticalTradesTemplate","callback","$$v","$set","expression","checkFields","companyName","strategyDisabled","strategys","annualVolume","pricingAreaNames","nativeOn","$event","btnDownloadFullReport","btnDownloadPositionReport","contractFileitems","onViewContractClick","contractStrategyFileItems","onViewStrategyClick","reportingView","onReportViewSelect","onCurrencyChange","currencies","onCheckPostionDefault","gridData","fixedColumns","openColumns","m2mColumns","referenceColumns","varianceColumns","YoYColumns","onTypeChange","products","typeIndex","onCurrencyChangeM2M","currenciesM2M","onPriceAreaChange","priceArea","onCheckM2mDefault","gridMonthData","totalColumns","gridQuarterData","gridSeasonData","gridCalendarData","gridFiscalData","onTypeVolumeChange","productsVolume","onPriceAreaVolChange","priceAreaVol","btnVolumeReportDownload","thermsColumnes","thdColumnes","kWhColumnes","PercentageColumnes","MWColumnes","MWhColumnes","onYearsChange","contractYears","periodsIndex","periods","onPeriodsChange","onCurrencyChangeCAP","currenciesCAP","onPriceAreaCostChange","priceAreaCost","graphTypes","onGraphChange","performanceTypes","onCheckCostAndPriceDefault","directives","rawName","tooltipRenderM2MAndReference","seriesData","tooltipRenderWhisker","enableSolidCandles","candleMarker","medianMarker","seriesDataCost","hit","reportContractId","deadline","onCurrencyChangeTrade","currenciesTrade","btnTradeReportDownload","volumeColumnes","availableYears","onYearSelect","views","firstIndex","onViewSelect","onCurrencyChangeHedg","currenciesHedg","onPriceAreaHedgChange","priceAreaHedg","onProductSelect","onCheckHedingDefault","fixedPriceDataGraph","openPriceDataGraph","openMarker","openGridData","dataBoundOpenPrice","fixedGridData","dataBoundFixedPrice","m2mGridData","dataBoundM2mPrice","onCurrencyChangeHypTrade","currenciesHypTrade","onPriceAreaHypoChange","priceAreaHypo","onCheckHypoDefault","impliedDataGraph","impliedGridData","dataBoundImplied","modalBtnClick","clearWhatIf","tradeLogData","excelQueryCellInfo","getModel","upDownKeyHandler","ul","defaultIdx","liIdx","selectedLi","setBlankIconStyle","blankIcon","blankIconList","menuItem","paddingLeft","paddingRight","iconLi","cssProp","sk","getNumberParser","fromView","FilterCellRenderer","getGui","innerDIV","fltrData","isReactCompiler","isReactChild","parentInstObj","filterBarTemplate","Element","clearIconElem","localeObj","appendHtml","showFilterBarOperator","operatorIconRender","templateWrite","innerHtml","operators","fbicon","filterModule","dropOptr","popupWidth","internalEvent","customOperators","spanElmt","FlMenuOptrUI","customFltrOperators","ddOpen","dropDownOpen","customFilterOperators","destroyDropDownList","renderOperatorUI","dlgConetntEle","dlgObj","dialogObj","optr","optrData","customOptr","dropDatasource","selectedValue","dropSelectedVal","optrDiv","optrInput","valInput","renderResponsiveDropDownList","selValue","selectedField","optrLen","getFlOperator","StringFilterUI","serLocator","processDataOperation","getAutoCompleteOptions","foreignColumnQuery","filteredData","getDistinct","enableCaseSensitivity","autoComplete","sortOrder","localizeText","acFocus","acComplete","acOpen","defObj","deffered","actObj","afterRenderFilterUI","struiObj","filterOptr","filterObj","actuiObj","filterValue","filterByColumn","getOptrInstance","mapObj","NumberFilterUI","keyEventHandler","numericTxtObj","numberuiObj","BooleanFilterUI","dropInstance","ddComplete","drpuiObj","DateFilterUI","dpOpen","fltrSettings","inputElem","datePickerObj","dateuiObj","FilterMenuRenderer","fltrObj","isDialogOpen","isMenuCheck","colTypes","flMuiObj","menuFilterBase","clearCustomFilter","clearBtnClick","applyCustomFilter","filterBtnClick","openDialog","renderDlgContent","closeDialog","columnType","filterModel","mainDiv","dlgDiv","responsiveCnt","closeOnEscape","dialogCreated","buttonModel","isPrimary","renderResponsiveDialog","isModal","currentDialogCreatedColumn","renderFilterUI","ui","writeMethod","renderFlValueUI","menuOperator","valueDiv","fObj","instanceofFilterUI","valueInString","compElement","cBox","getAllData","dlgContentEle","flValue","targ","flOptrValue","fltrValue","eControl","closeResponsiveDialog","removeFilteredColsByField","getFilterUIInfo","renderCheckBoxMenu","updateModel","getAndSetChkElem","btnClick","dlg","sBox","CheckBoxFilter","isresetFocus","checkBoxBase","actionPrevent","clearFilter","fltrBtnHandler","ExcelFilterBase","eventHandlers","focusedMenuItem","isExcel","getCMenuDS","datetime","dateonly","unwireExEvents","menuObj","destroyCMenu","removeDialog","createMenu","isCheckIcon","eleOptions","menu","isResponsiveFilter","hdrele","getColumnHeaderByUid","colIsSort","isAsc","isDesc","ascName","descName","createMenuElem","ensureTextFilter","iconName","isSubMenu","wireExEvents","hoverHandler","clickExHandler","keyUp","focusNextOrPrevElement","focusableElements","focusClassName","shiftKey","focusClass","excelSetFocus","prevElem","isCMenuOpen","contextKeyDownHandler","cmenu","focused","submenu","selectedMenu","menuOptions","selectHandler","onClose","beforeClose","preventClose","contextRect","getContextBounds","innerWidth","getCMenuYPosition","existingPredicate","isFilterBack","MouseEvent","contextWidth","targetPosition","leftPos","targetBorder","showDialog","filterLength","filteredColumns","renderDialogue","complexFieldName","overlayClick","dropDownList","templateField_1","createdDialog","rowResponsiveDlg","destroyTemplate","removeObjects","renderCustomFilter","dialog","dlgFields","fieldSet","displayName","checkBoxValue","colValue","fValue","fOperator","sValue","sOperator","checkBox","andRadio","firstOperator","firstValue","secondOperator","secondValue","mPredicate","fColl","arg3","arg4","arg5","arg6","arg7","arg8","filterCollection","ejpredicate","actualPredicate","foreignKeyFilter","elementID","fieldElement","xlfloptr","menuText","dropDownValueChange","removeHandlersFromComponent","includes","getSelectedText","renderRadioButton","td","radioDiv","frstpredicate","secndpredicate","renderMatchCase","orRadio","elements_1","isFilteredCol","fltrPredicates","columnObj","getExcelFilterData","valueInput","renderAutoComplete","renderNumericTextBox","renderDate","renderDateTime","predIndex","matchCaseDiv","matchCaseInput","checkbox","inputValue","isRtl","datePicker","dateTimePicker","completeAction","numericTextBox","colObj","acActionComplete","mapObject","columnvalue","ExcelFilter","excelFilterBase","isCustomFilter","Filter","contentRefresh","filterByMethod","cellText","nextFlMenuOpen","filterOperators","endsWith","equal","greaterThan","greaterThanOrEqual","lessThan","lessThanOrEqual","notEqual","startsWith","wildCard","isNull","notNull","like","fltrDlgDetails","skipNumberInput","skipStringInput","setFullScreenDialog","getObject","getLocalizedCustomOperators","fltrElem","rowRenderer","cellrender","generateRow","rowdrag","detail","gCells","case","showCustomFilter","responsiveDialogRenderer","isCustomDialog","showResponsiveDialog","renderResponsiveChangeAction","setFilterModel","updateFilterMsg","dropdownlist","filterBarElement","registerAdaptiveService","isFilter","getFrozenMode","RowDragHIcon","filterObjIndex","getFilteredColsIndexByField","prevFilterObject","arrayVal","isMenuNotEqual","currentFilterObject","actualFilterValue","actualOperator","currentFilteringColumn","keyUpHandlerImmediate","refreshFilterValue","refreshFilterValueFn","initialEnd","initialLoad","columnPositionChanged","filterMenuClose","docClickHandler","refreshClearIcon","columnMenuFilter","filterIconClickHandler","targetText","filterOperator","filterCell","getOperatorName","checkForSkipInput","filterStatusMsg","applyColumnFormat","predObj","checkAlreadyColFiltered","getFlvalue","setFormatForFlColumn","skipUid","colLen","actualData","checkboxPrevFilterObject","checkboxFilterObject","iconClass","filterIconElement","updateFilterIcon","refreshFilterSettings","updateFilter","updateExternalMessage","refreshHeader","filterElement","getFilterBarElement","fltrIconElement","refreshFilter","clearFiltering","renderModule","colUid","filteredcols","fltrElement","filterDialogOpen","createOptions","hideSearchbox","filterHandler","localizedStrings","getLocaleConstants","allowCaseSensitive","parentTotalDataCount","totalDataRecordsCount","getFilteredRecords","parentCurrentViewDataCount","parentFilteredLocalRecords","isClearFilterBar","fCell","filteredColsUid","currentPred","currentFilterColumn","closeHeaderEle","dropDownListInput","processFilter","openMenuByField","clearIndicator","updateCrossIcon","getFormatFlValue","showFilterBarStatus","formater","isSkip","operatorSymbols","startTimer","onTimerTick","immediateModeDelay","templateRead","validateFilterValue","skipInput","getOperator","singleOp","multipleOp","numOptr","stringOperator","numberOperator","dateOperator","datetimeOperator","dateonlyOperator","booleanOperator","gClient","fClient","filterOperatorElement","inputId","datepickerEle","hasDialog","hasDialogClosed","refreshFilterIcon","addFilteredClass","renderCheckboxOnFilterMenu","TrendlinesDirective","TrendlinesPlugin","TrendlineDirective","TrendlinePlugin","SegmentsDirective","SegmentsPlugin","SegmentDirective","SegmentPlugin","SeriesCollectionDirective","SeriesCollectionPlugin","SeriesDirective","SeriesPlugin","StripLinesDirective","StripLinesPlugin","StripLineDirective","StripLinePlugin","CategoriesDirective","CategoriesPlugin","CategoryDirective","CategoryPlugin","MultiLevelLabelsDirective","MultiLevelLabelsPlugin","MultiLevelLabelDirective","MultiLevelLabelPlugin","AxesDirective","AxesPlugin","AxisDirective","AxisPlugin","RowsDirective","RowsPlugin","RowDirective","RowPlugin","ColumnsDirective","ColumnsPlugin","ColumnDirective","ColumnPlugin","RangeColorSettingsDirective","RangeColorSettingsPlugin","RangeColorSettingDirective","RangeColorSettingPlugin","AnnotationsDirective","AnnotationsPlugin","AnnotationDirective","AnnotationPlugin","SelectedDataIndexesDirective","SelectedDataIndexesPlugin","SelectedDataIndexDirective","SelectedDataIndexPlugin","IndicatorsDirective","IndicatorsPlugin","IndicatorDirective","IndicatorPlugin","ChartComponent","ChartPlugin","yo","SPINNER_CLASS","inputObject","ComboBox","wireEvent","preventBlur","onBlurHandler","targetFocus","onInput","onFilterUp","onFilterDown","pasteHandler","bindCommonEvent","customValue","valueMuteChange","setHiddenValue","dataItem","itemData","detachChangeEvent","getElementByText","getElementByValue","isExistItem","getItemData","clearIconHide","getAriaAttributes","ariaAttributes","hiddenElement","incrementalSearch","setSearchBox","searchBoxContainer","inlineSearch","getFocusElement","isDropDownClick","sortedData","activeItem","updatingincrementalindex","incrementalEndIndex","incrementalStartIndex","updateIncrementalInfo","updateIncrementalView","incrementalLiCollections","skeletonCount","removeFocus","fixedHead","selectedLiOffsetTop","removeFillSelection","checkCustomValue","getDataByValue","showSpinner","spinnerElement","disableIcon","hideSpinner","isHover","getTextByValue","currentFillValue","updateSelectedItem","isAndroidAutoFill","setAutoFillSelection","isAndroid","getSelectionPoints","prevEnd","prevSelectPoints","curEnd","prevStart","curStart","focusItem","selection","getValueByText","unWireEvent","unBindCommonEvent","selectCurrentItem","onChangeEvent","preventFocus","onFocus","previousValue_1","initial","updateCustomValueCallback","changeData","checkData","setReadOnly","comboProps","itemIndex","isEscape","isEscapeKey","sl","numbersPast","numbersFuture","verbalNumber","fi","AnnotationBase","setAnnotationPixelValue","accumulationBound","setAnnotationPointValue","xAnnotation","setAccumulationPointValue","annotationElement","annotationRendered","coordinateUnits","setElementStyle","accPoint","elementRect","setAlignmentValue","ChartAnnotation","arSa","bg","my","RowRenderer","isSpan","rowTemplate","refreshRow","isChanged","refreshMergeCells","tempCells","cells_1","rowArgs","cellArgs","chekBoxEnable","selIndex","getSelectedRowIndexes","isDataRow","isCheckBoxSelection","checkAllRows","buildAttributeFromRow","cellRendererFact","_loop_2","isColumnSelected","cellRenderer","getCellRenderer","DetailExpand","requireTemplateRef","isTemplate","thisRef_1","requestTypeAction","isRowSpanned","rowsObject","getRowsObject","prevRowCells","uid_1","prevRowCell","rowSpanRange","cellSpan","cellMerge","isSpanned","emptyColspan","getFrozenLeftColumnsCount","freezeCells","oldColspan","colspan","rowHeight","eventArg_1","isSelectable","cellTemplate","thisRef_2","disableRowSelection","isDraggable","selectionSettings","persistSelection","primaryKey_1","pKey_1","SelectedRecords","partialSelectedRecords","disableSelectedRecords","lazyLoadCssClass","rowRenderingMode","allowTextWrap","textWrapSettings","wrapMode","vFTable","summarycell","lastSummaryCell","firstSummaryCell","thisRef","eventArg","isPartialSelection","selRowIndex","chkBox","isDrag","cellIdx","isDetail","classes","isAltRow","isCaptionRow","rowindex","dataUID","ariaSelected","gl","es","invalidDate","ColumnSeries","pointColumn","RowModelGenerator","getInfiniteIndex","enableImmutableMode","ensureColumns","RowDragIcon","pid","tIndex","parentGid","enableAltRow","refreshForeignKeyRow","foreignKeyColumns","dummies","oIndex","refreshRows","isFunction","Function","monthsNominativeEl","monthsGenitiveEl","momentToFormat","_monthsGenitiveEl","_monthsNominativeEl","calendarEl","mom","_calendarEl","monthsNominative","monthsSubjective","pl","fa","ar","LineSeries","prevPoint","isDrop","bn","zhTw","CandleSeries","centerRegion","tickRegion","median","getPathString","triggerPointRenderEvent","drawCandle","getCandleColor","bullFillColor","bearFillColor","topRect","midRect","center","candleElement","CellType","RenderType","ToolbarItem","ResponsiveDialogAction","ResponsiveToolbarAction","ru","mn","ky","bnBd","ro","CLS_VSCROLLBAR","CLS_VSCROLLCON","CLS_NAVUPARROW","CLS_NAVDOWNARROW","CLS_VSCROLLNAV","CLS_VSCROLLNAVUP","CLS_VSCROLLNAVDOWN","CLS_UPOVERLAY","CLS_DOWNOVERLAY","VScroll","scrollEventHandler","createOverlayElement","wheelEventHandler","scrollCnt","navs","overlays","downOverlayEle","clsDown","downEle","upEle","clsUp","navElement","navUpItem","ev","scrollDistance","deltaY","swipeElement","distanceY","addDisableCls","removeDisableCls","navUpEle","navDownEle","upOverlay","downOverlay","lookup","ErrorOption","EMAIL","DATE_ISO","DIGITS","PHONE","CREDITCARD","FormValidator","validated","errorRules","allowSubmit","required","infoElement","selectQuery","localyMessage","defaultMessages","email","dateIso","creditcard","digits","rangeLength","tel","equalTo","localeFunc","afterLocalization","inputElements","createHTML5Rules","FormValidator_1","addRules","removeRules","validate","validateRules","rules_1","name_1","clearForm","getInputElement","validClass","elements_2","inputParent","grandParent","getErrorElement","hideMessage","defRules","acceptedTypes","allRule","defRules_1","rule","defRule","annotationRule","ruleCon","ruleName","rulesList","ruleFirstName","ruleSecondName","minvalue","maxvalue","customMessage","message","annotationMessage","getErrorMessage","isCheckable","submitHandler","clearEvents","excludeKeys","hiddenType","validateHiddenType","vhPos","hPos","rules_2","errorMessage","errorRule","inputName","isValid","ignore","removeErrorRules","showMessage","createErrorElement","errorElement","optionalValidationStatus","refer","param","currentRule","checkValidator","ruleValue","formats","errorOption","Message","errorContainer","containerId","divElement","customPlacement","nextSibling","checkRequired","inputType","uNum","compareTo","Label","ButtonComponent","ButtonPlugin","HeaderRender","frzIdx","notfrzIdx","isFirstCol","isReplaceDragEle","currentStateTarget","parentEle","visualElement","headercelldiv","getStackedHeaderColumnByHeaderText","colIndex","drop","droppedElement","ariaService","setVisible","colPosRefresh","renderCustomToolbar","updateCustomResponsiveToolbar","renderPanel","isRendered","innerDiv","toggleStackClass","setPanel","renderTable","getPanel","createHeaderTable","setTable","initializeHeaderDrag","initializeHeaderDrop","headerPanel","panel","getTable","headerTable","getColGroup","colgroup","setColGroup","getRows","tHead","createTable","tableEle","tableName","cellspacing","findHeaderRow","createHeaderContent","thead","bodyCell","rowBody","updateColGroup","colHeader","indexes","enablePersistence","lockColsRendered","appendCells","isFirstObj","isLastCol","isMovable","isStackLastCol","lastCol","isLockColumn","getCellCnt","stackedLockColsCount","getStackedLockColsCount","isStackedLockColumn","getColSpan","isFirstCol_1","isLaststackedCol","getColumnIndexByUid","lockColsCount","displayVal","clen","getNormalizedColumnIndex","refreshUI","freezeReorder","appendContent","updateDefaultCursor","firstHeaderCell","stackedHdr","dragTarget","abort","droppableDestroy","droppable","accept","toolbarLeft","toolbarItem","showResponsiveCustomSort","showResponsiveCustomFilter","resToolbar","HeaderCellRenderer","hTxtEle","sortEle","gui","chkAllBox","fltrMenuEle","prepareHeader","clean","hValueAccer","elementDesc","headerValueAccessor","checkAllWrap","buildAttributeFromCell","matchFlColumns","customAttributes","extendPrepareHeader","headerTempID","isReactChild_1","copied","clipMode","titleElem","matchFilteredColumns","StackedHeaderCellRenderer","IndentCellRenderer","GroupCaptionCellRenderer","cellUid","fKeyValue","gTemplateValue","domSetter","gCaptionTemp","tempObj","getTemplate","tempValue_1","captionTemplate","GroupCaptionEmptyCellRenderer","ExpandCellRenderer","infiniteScrollSettings","enableCache","HeaderIndentCellRenderer","DetailHeaderIndentCellRenderer","DetailExpandCellRenderer","RowDragDropRenderer","nodeElement","RowDragDropHeaderRenderer","Render","emptyGrid","counter","headerRenderer","getRenderer","contentRenderer","Content","isLayoutRendered","emptyRow","flIcon","Columns","headerCell","allowSelection","searchString","pageSizes","checkAll","dataLength","prevPageMoving","lazyLoadRender","getGroupCache","refreshContentRows","resetTemplates","detailTemplateID","toolbarTemplate","guid","refreshComplete","maskRow","enableVirtualMaskRow","isCaptionCollapse","showMaskRow","virtualInfo","sentinelInfo","isFActon","isNeedForeignAction","deffered_1","validateGroupRecords","dataManagerFailure","deferred","foreignKey","fbool","sendBulkRequest","dmSuccess","dmFailure","renderEmptyRow","isTrigger","spanCount","rowDropSettings","targetID","emptyRecordTemplate","emptyRecordTemplateID","getEmptyRecordTemplate","renderEmpty","dynamicColumnChange","updateColumnType","fmtr","validationRules","isColTypeDef","actionArgs","isInfiniteDelete","isInfiniteEnd","prevCurrentView","removeMaskRow","updatesOnInitialRender","agg","immutableModeRendering","alert","setRowElements","setRowObjects","preventAdjustColumns","setRowCount","setFirstFocusableTabIndex","dataRowCount","isEmptyCol","buildColumns","isAutoGen","iterateComplexColumns","childKeys","complexCols","instantiateRenderer","addRenderer","GroupCaption","GroupCaptionEmpty","Expand","group0","groupN","addWhere","groups","curDm","curFilter","newQuery","rPredicate","updateGroupInfo","current","untouched","uGroup","itemGroup","uGroupItem","context","customAggregate","CellRendererFactory","cellRenderMap","ServiceLocator","services","register","isAdaptiveUI","RendererFactory","rendererMap","rName","PageSettings","ColumnChooserSettings","Search","refreshSearch","onSearchComplete","actionCompleteFunc","cancelBeginEvent","ShowHide","colName","isShowHide","evtHandlers","batchChanges","resetColumnState","changedCol","showBy","getToggleFields","hideBy","finalized","getKeyBy","batchActionPrevent","changedStateColumns","groupModule","visibleRows","showHideArgs","currentViewCols","emptyVcRows","getSelectedRecords","colsInCurrentView","col1","col2","isModeChg","AggregateColumn","setPropertiesSilent","AggregateRow","Clipboard","copyContent","keyDownHandler","selectedRowCellIndexes","getSelectedRowCellIndexes","copy","clipBoardTextArea","cellSelectionMode","x_1","scrollX","y_1","paste","cellIndexes","isAvail","cIdx","rIdx","getRowByIndex","getCellFromIndex","updateCell","selectCellsByRange","cellIndex","setCopyData","withHeader","getSelection","getDataRows","selectedIndexes","headerTextArray","getCopyData","leftCols","checkBoxSelection","colIndexes","getColumnHeaderByIndex","rowIndexes","isCell","splitKey","colIdx","queryCommandSupported","execCommand","removeAllRanges","rowCellIndxes","SortDescriptor","SortSettings","Predicate","InfiniteScrollSettings","FilterSettings","SelectionSettings","SearchSettings","RowDropSettings","TextWrapSettings","ResizeSettings","GroupSettings","EditSettings","LoadingIndicator","Grid","inViewIndexes","keyA","frozenRightCount","freezeColumnRefresh","rightcount","frozenLeftCount","leftcount","tablesCount","movableCount","movablecount","fixedcount","fixedCount","visibleFrozenLeft","visibleFrozenFixed","isPreparedFrozenColumns","visibleFrozenRight","visibleMovable","frozenLeftColumns","frozenRightColumns","movableColumns","stackedLeft","stackedRight","stackedFixed","stackedMovable","stackedarrayLeft","stackedarrayRight","stackedarrayFixed","stackedarrayMovable","media","tableIndex","componentRefresh","isChangeDataSourceCall","mergedColumns","isVirtualAdaptive","vRows","vcRows","vGroupOffsets","rowUid","isAutoFitColumns","enableDeepCompare","islazyloadRequest","pageTemplateChange","isAutoGenerateColumns","mediaBindInstance","asyncTimeOut","enableLogger","needsID","Grid_1","Inject","mergePersistGridData","ignoreOnPersist","selectedRowIndex","scrollPosition","currentObject","settings","assign","pagerTemplate","persistData","setFrozenCount","enableInfiniteAggrgate","allowExcelExport","allowPdfExport","sortedColumns","isCommandColumn","allowAdding","allowDeleting","extendRequiredModules","contextMenuItems","showColumnChooser","isForeignKeyEnabled","initProperties","initializeServices","isInitial","mediaCol","ignoreCollectionWatch","isPersistSelection","defaultLocale","EmptyRecord","True","False","InvalidFilterMessage","GroupDropArea","UnGroup","UnGroupButton","GroupDisable","FilterbarTitle","EmptyDataSourceError","Add","Edit","Cancel","Update","Delete","Pdfexport","Excelexport","Wordexport","Csvexport","Columnchooser","Save","Items","EditOperationAlert","DeleteOperationAlert","SaveButton","OKButton","CancelButton","EditFormTitle","AddFormTitle","BatchSaveConfirm","BatchSaveLostChanges","ConfirmDelete","CancelEdit","ChooseColumns","ColumnMenu","SearchColumns","Matchs","FilterButton","ClearButton","StartsWith","NotStartsWith","Like","EndsWith","NotEndsWith","Contains","NotContains","IsNull","NotNull","IsEmpty","IsNotEmpty","Equal","NotEqual","LessThan","LessThanOrEqual","GreaterThan","GreaterThanOrEqual","ChooseDate","EnterValue","Copy","Group","Ungroup","GroupButton","UnGroupAria","GroupSeperator","UnGroupIcon","GroupedSortIcon","GroupedDrag","CheckBoxLabel","SelectAllCheckbox","SelectRow","autoFitAll","AutoFitAll","AutoFit","Export","FirstPage","LastPage","PreviousPage","NextPage","SortAscending","SortDescending","EditRecord","DeleteRecord","FilterMenu","SelectAll","AddCurrentSelection","Blanks","FilterTrue","FilterFalse","NoResult","ClearFilter","Clear","NumberFilter","TextFilter","DateFilter","DateTimeFilter","MatchCase","Between","CustomFilter","CustomFilterPlaceHolder","CustomFilterDatePlaceHolder","AND","OR","ShowRowsWhere","ToolbarMenuDialogARIA","FilterMenuDialogARIA","ExcelFilterDialogARIA","CheckBoxFilterDialogARIA","DialogEditARIA","ColumnMenuDialogARIA","CustomFilterDialogARIA","SortAtoZ","SortZtoA","SortByOldest","SortByNewest","SortSmallestToLargest","SortLargestToSmallest","Sort","FilterDescription","SortDescription","ColumnMenuDescription","GroupDescription","ColumnHeader","TemplateCell","CommandColumnAria","DialogEdit","ClipBoard","AscendingText","DescendingText","NoneText","Expanded","Collapsed","rightArrow","leftArrow","shiftDown","shiftUp","shiftRight","shiftLeft","ctrlHome","ctrlEnd","ctrlAltPageUp","ctrlAltPageDown","altPageUp","altPageDown","ctrlDownArrow","ctrlUpArrow","ctrlPlusA","ctrlPlusP","delete","f2","ctrlEnter","shiftEnter","space","ctrlPlusC","ctrlShiftPlusH","ctrlSpace","ctrlLeftArrow","ctrlRightArrow","searchModule","updateColumnModel","getMediaColumns","setInitialFrozenColumnIndex","checkLockColumns","processModel","gridRender","addListener","updateStackedFilter","refreshMaskRow","axisDirection","dialogElement","headerModule","dialogHolder","maskRowCount","maskTemplate","getShimmerTemplate","maskSpan","contentHeight","maskTableHeight","contentRowCount","headerMaskTable","createEmptyMaskTable","contentMaskTable","maskRowContentScroll","createMaskTable","getContentMaskColumns","gridFooterContent","footerContentMaskTable","footerContent","translateMaskRow","maskElement","gridContentScrollHeight","maskTable","maskColgroup","createMaskRow","frzTd","maskTHead","maskTBody","rowCountElement","altRow","altNumber","rowsQuery","addEditRow","addEditRowIndex","applyMaskRow","addEditMaskRow","tfoot","maskTFoot","minScrollTop","maskCells","maskCell","displayAsCheckBoxCell","refColgroup","refColumns","localTD","displayAsCheckBox","addShimmerEffect","maskTables","refreshMaskRowColgroupWidth","gcol","getShowHideService","hideAtMedia","pushMediaColumn","updateFrozenColumnsWidth","matchMedia","mediaQueryUpdate","updateMediaColumns","mediaColumn","matches","invokedFromMedia","showHider","refreshMediaCol","checkboxColumn","checkboxMode","enableHover","removeMediaListener","removeListener","eventInitializer","hasGridChild","destroyDependentModules","toolTipObj","clipboardModule","enableBoxSelection","enableAutoFill","setCSSClass","oldCSSClass","checkCursor","requireRefresh","requireGridRefresh","freezeRefresh","childGridParent","parentInstance","isEllipsisTooltip","updateColumnObject","properties_1","isCancel","updateAutoFillPosition","rowTemplateFn","emptyRecordTemplateFn","detailTemplateFn","childGridObject","currentParent","currentParentInstance","currentChildObject","oldProperties","restoreAdjustColumns","extendedPropertyChange","maintainSelection","updateRTL","getToolbar","contextMenuModule","getContextMenu","columnMenuModule","getColumnMenu","updateResizeLines","updateGridLines","columnMenuItems","applyTextWrap","removeTextWrap","pending_1","deepWatch","pKeyField","setRowData","gResult","names","scrollRefresh","isSelectedRowIndexUpdating","setWidthToTable","enableVerticalRendering","fn_1","getTablesCount","headerCells","stdHdrCell","isRecursion","updateLockableColumns","frozenName","frozenCount","leftrightColumnWidth","getFrozenLeftColumns","getFrozenRightColumns","isRefresh","inview","vLen","movable","isLeftRightFrozen","stackedHeader","individualColumn","stackedColumn","setColumnIndexesInView","getCurrentVisibleColumns","setGridHeaderContent","setGridContentTable","setGridContent","setGridHeaderTable","footerElement","getFooterContentTable","getPager","gridPager","setGridPager","getMovableRowByIndex","getFrozenRowByIndex","getRowElements","getFrozenRightRowByIndex","getRowInfo","row_2","getMovableRows","getFrozenRightRows","getAllDataRows","includeAdd","hdrTbody","freezeRows","addMovableRows","dataRows","generateDataRows","fRows","mrows","includAdd","dRows","isCollapseStateEnabled","getMovableDataRows","getAllMovableDataRows","getFrozenDataRows","getAllFrozenDataRows","getFrozenRightDataRows","getAllFrozenRightDataRows","setCellValue","rowIdx","rowuID","pkName","fieldIdx","rowObjects","selectedRow","Idx","sRow","refreshTD","columnUid","isChildGrid","refreshReactTemplateTD","childIndent","isChildRow","rowsObj","refreshGroupCaptionFooterTemplate","dataUid","headerCellRenderer","selectRowEle","fRowTr","setFrozenRowData","fTr","getMovableCellFromIndex","getFrozenRightCellFromIndex","getMovableColumnHeaderByIndex","getFrozenRightColumnHeaderByIndex","getFrozenLeftColumnHeaderByIndex","rowObject","getMovableRowsObject","getFrozenRightRowsObject","getUidByColumnField","getColumnFieldNames","columnNames","getRowTemplate","getDetailTemplate","getEditHeaderTemplate","editHeaderTemplateFn","getEditFooterTemplate","editFooterTemplateFn","getSelectedRows","selectedRecords","selectedRowIndexes","getSelectedColumnsUid","selectedColumnsIndexes","showColumns","hideColumns","getFrozenCount","getMovableColumnsCount","isAutoWidth","autoCol_1","difference_1","autoWidth_1","tWidth_1","gWidth","this_2","isPercentageWidthGrid","refreshSplitFrozenColumn","splitFrozenCount","getVisibleMovableCount","getMovableColumns","splitStackedColumns","pushStackedColumns","stackedcol","stockCol","pushallcol","text1","resetStackedColumns","headercol","gridcolumns","tempHead","firstcol","changedProperties","removeBorder","frozenLeftBorderColumns","lastVisibleLeftCol","frozenRightBorderColumns","firstVisibleRightCol","isVisibleColumns","getVisibleFrozenColumns","getVisibleFrozenColumnsCount","getVisibleFrozenCount","visibleFrozenColumns","goToPage","pageNo","sortColumn","isMultiSort","sortModule","changeDataSource","clearSorting","removeSortColumn","clearGridActions","isToggle","selectRows","selectCell","fieldname","addRecord","deleteRow","editCell","saveCell","updateRow","getBatchChanges","enableToolbarItems","recalcIndentWidth","indentWidth","headerCol","contentCol","perPixel","parentOffset","applyWidth","newWidth","resetIndentWidth","tgridWidth","getTableWidth","setMinwidthBycalculation","refreshFrozenScrollbar","reorderModule","fromIndexes","rowDragAndDropModule","refreshDataSource","disableRowDD","contentTable","disValue","autoFitColumns","fieldNames","resizeModule","resizeSettings","tableWidth","percentageWidth","unit","widthUnit","defaultIndentWidth","indentWidthUnitFormat","headerIndentCol","contentIndentCol","setProperty","tableWidthUnitFormat","indentWidthUnitFormat_1","createColumnchooser","columnChooserModule","renderColumnChooser","valueFormatterService","gCols","sCols","_loop_3","sLen","this_3","isFromGroup","showGroupedColumn","initForeignColumn","rendererFactory","createGridPopUpElement","dataReady","gridLines","getTooltipStatus","headerDivTag","htable","ctable","prevElement","elemNames","innerElement","tag","myTableDiv","mySubDiv","myTable","myTr","mytd","onKeyPressed","mouseClickHandler","dblClickHandler","tapEvent","refreshFrozenPosition","dataBoundFunction","checkEdit","dataRow","filterClear","ariaOwns","keyPress","editFormValidate","persistedData","getLocalData","mergeColumns","storedColumn","storedColumns","_loop_4","localCol","tCol","this_4","presskey","stopImmediatePropagation","collapse","elementToFocus","focusContent","addOutline","injectedModules","refreshColumns","excelExport","exportGrids","gridIds","exportMultipleExcelGrids","excelExportModule","csvExport","pdfExport","pdfExportProperties","pdfDoc","exportMultiplePdfGrids","pdfExportModule","currentGridId","currentGridInstance","exportPromise","exportedGridResults","groupColumn","groupExpandAll","expandAll","groupCollapseAll","collapseAll","clearGrouping","ungroupColumn","openColumnChooser","detailCollapseAll","detailExpandAll","clearCellSelection","clearRowSelection","selectCells","rowCellIndexes","selectRowsByRange","isContextMenuOpen","ensureModuleInjected","propertyNames","loggerModule","applyBiggerTheme","getPreviousRowData","previousRowData","hideScroll","getRowIndexByPrimaryKey","isDetailRow","pKvalue","getUserAgent","getRowUid","getRowElementByUID","rowEle","cntRows","getHiddenColumns","calculatePageSizeByParentHeight","containerHeight","pagesize","nonContentHeight","getNoncontentHeight","getSummaryValues","summaryCol","summaryData","serverExcelExport","exportGrid","serverPdfExport","serverCsvExport","include","sorted","setHeaderText","gridInput","submit","isExpanded","updateRowValue","colpending","resetFilterDlgPosition","filterDlg","callBack","batchUpdate","processRowChanges","batchAsyncUpdate","processBulkRowChanges","dataToBeUpdated","loopstring","keyField","setNewData","oldValues","bulkRefresh","deleteRowElement","out_i_1","_loop_5","this_5","_loop_6","isRowExist","this_6","renderRowElement","modelData","addRowObject","updateVisibleExpandCollapseRows","getHeight","isInteger","getFrozenRightContent","getFrozenRightHeader","getMovableHeaderTbody","getMovableContentTbody","getFrozenHeaderTbody","getFrozenLeftContentTbody","getFrozenRightHeaderTbody","getFrozenRightContentTbody","isCustom","showCustomSort","showResponsiveCustomColumnChooser","showCustomColumnChooser","showAdaptiveFilterDialog","showAdaptiveSortDialog","isColVirtualization","gridCols","gridCols_1","CHECK","FRAME","INDETERMINATE","RIPPLECHECK","RIPPLEINDETERMINATE","CheckBox","isMouseClick","clickTriggered","validCheck","changeState","isInitialize","frameSpan","indeterminate","changeEventArgs","updateVueArrayModel","labelWrap","formElem","fr","arDz","SPINICON","SPINUP","SPINDOWN","INCREMENT","DECREMENT","INTREGEXP","DECIMALSEPARATOR","COMPONENT","NUMERIC_FOCUS","HIDDENELEMENT","selectionTimeOut","NumericTextBox","isDynamicChange","numericOptions","isPrevFocused","decimalSeparator","intRegExp","isCalled","ejInstance","angularTagName","formEle","attributeName","nodeName","incrementTitle","decrementTitle","cultureInfo","initCultureInfo","initCultureFunc","updateHTMLAttrToElement","validateStep","updatePlaceholder","createWrapper","showSpinButton","spinBtnCreation","setElementWidth","changeValue","decimals","roundNumber","hiddenInput","elementPrevValue","setNumber","stepValue","currencyCode","updatedCssClassValue","getNumericValidClassList","inputObj","updateHTMLAttrToWrapper","updateDataAttribute","pro","newClass","oldClass","numericClassName","updatedClassValue","numericStyle","spinDown","spinUp","wireSpinBtnEvents","formattedValue","maximumFractionDigits","minimumFractionDigits","operation","isInteract","performAction","raiseChangeEvent","checkErrorClass","setElementValue","setSpinButton","mouseDownOnSpinner","mouseUpOnSpinner","touchMoveOnSpinner","unwireSpinBtnEvents","parsedInput","isInteraction","beforeUpdate","numericRegex","preventHandler","iOS","currentPos","prevPos","valArray","numericObject","ignoreKeyCode","prevVal","lastIndexOf","cursorPosChanged","validateDecimalOnType","parseValue","numerictextboxObj","fireFox","parsedValue","localChange","nonZeroRegex","updatedValue","correctRounding","floatExp","floatValue","floatStep","valueCount","stepCount","roundValue","precision","divide","updateCurrency","propVal","numberOfDecimals","getNumberOfDecimals","modifyText","formatNumber","serverDecimalSeparator","EXPREGEXP","decimalPart","result2","version","currentChar","isAlterNumPadDecimalChar","fractionRule","mouseWheel","rawEvent","wheelDelta","focusEventArgs","formatValue_1","blurEventArgs","focusEvent","getElementData","mouseUpClick","timeOut","touchEvent","elementFromPoint","floatLabelTypeUpdate","decrement","attrArray","validateInputType","updateSpinButton","updateClearButton","propValue","CheckBoxFilterBase","isExecuteLocal","foreignKeyQuery","filterState","isCheckboxFilterTemplate","infiniteRenderMod","infiniteInitialLoad","infiniteSearchValChange","infinitePermenantLocalData","infiniteQueryExecutionPending","infiniteSkipCnt","infiniteScrollAppendDiff","prevInfiniteScrollDirection","infiniteLoadedElem","infiniteDataCount","infiniteLocalSelectAll","localInfiniteSelectAllClicked","localInfiniteSelectionInteracted","infiniteManualSelectMaintainPred","cBoxTrue","cBoxFalse","searchHandler","searchBoxKeyUp","fpred","foreignFilter","initalPredicate","searchBoxClick","sInput","refreshCheckboxes","updateSearchIcon","sIcon","updateDataSource","infiniteUnloadParentExistPred","searchBox","inputargs","spinner","renderResponsiveFilter","dialogLabel","showMask","getListHeight","isBlanks","filterTemplateCol","filterItemTemplate","searchInput","ddlValue","caseSen","defaults","isNotEqual","itemsCnt","coll","infiniteFltrBtnHandler","generateNullValuePredicates","notifyFilterPrevEvent","addCurrSelection","existingPredicate_1","initiateFilter","isClearFilter","pred","dummyDefaults","unshift","infiniteSearchPred","firstVal","foreignQuery","parsed","predicte","addDistinct","filterChoiceCount","itemsCount","filterargs","emptyValPredicte","generatePredicate","fullData","makeInfiniteScrollRequest","filterEvent","processSearch","getPredicateFromCols","isGrid","customQuery","distincts","queryGenerate","filteredColumn","dataSuccess","infiniteScrollMouseKeyDownHandler","infiniteScrollHandler","infiniteScrollMouseKeyUpHandler","listDiv","maskItemHeight","maskList","wrapperElem","removeMask","backgroundColor","borderStyle","insertAdjacentHTML","maskLists","maskParent","infiniteRemoveElements","infiniteAppendElements","removeElem","appendElem","infiniteQuery","existQuery","runArray","executeQueryOperations","args1","processDataSource","updateResult","createFilterItems","result_1","res","selectAll","updateAllCBoxes","previousSibling","updateInfiniteManualSelectPred","updateIndeterminatenBtn","setFocus","predmdl","focusNextOrPrev","cBoxes","cBoxes_1","createCheckbox","dummyData","checkboxUid","nullCounter","selectAllValue","isColFiltered","predicateCheckBox","predicateElement","checkBoxListElem","reduceHeight","increaseHeight","isRndere","args_1","updateInfiniteUnLoadedCheckboxExistPred","getCheckedState","lastChild","selectAllParent","addCurrSelectionParent","updatePredArr","checkState","checkboxFilter","ejValue","currentFilterValue","foreignDataObj","operate","updateDateFilter","getCaseValue","bm","CellRenderer","rowChkBox","evaluate","fData","CSPTemplate","literals_1","templateID","invokeFormatter","refreshCell","newTD","cloneAttributes","arialabelText","localeStr","fromFormatter","checkWrap","rowID","isCheckBoxType","colindex","InlineEditRender","addNew","newRowPosition","getEditElement","checkLastRow","tdElement","gLen","appendChildren","isCustomFormValidation","td_1","editTemplateID","BatchEditRender","columnObject","newTd","DialogEditRender","setLocaleObj","createDialog","createDialogHeader","responsiveDlgRenderer","renderResponsiveHeader","getDialogEditTemplateElement","primaryKeyValue","allowDragging","adaptiveDlgTarget","dialogEditTemplates","templateName","dialogTemp","tempDiv","setRules","formObj","checkColumnIsGrouped","dataCell","EditRender","getEditElements","convertWidget","focusElement","isFocus","preventScroll","tArgs","isInput","isIdentity","EditCellBase","removeEventHandler","BooleanEditCell","activeClasses","classNames","selectChkBox","chkState","editRow","cbChange","checkBoxChange","DropDownEditCell","isInline","dropDownClose","editCellDialogClose","ddCreated","dropdownCreated","ddBeforeOpen","dropdownBeforeOpen","ddActionComplete","dlgElement","NumericEditCell","instances","DefaultEditCell","Event","bubbles","cancelable","NormalEdit","currentVirtualData","allowEditOnDblClick","editComplete","editRowIndex","getEditArgs","editedData","isScroll","primaryKeys","primaryKeyValues","primaryKey","virtualRow","rObj","inlineEditHandler","prevData","argsCreator","begineditargs","editargs","applyFormValidation","edFail","validationArgs","editIdx","addIdx","addedRowIndex","isDlg","dlgWrapper","dlgForm","virtualData","getCurrentEditedData","eleLength","endEditArgs","destroyElements","destroyWidgets","destroyForm","editHandler","edSucc","editSuccess","editFailure","updateCurrentViewData","requestSuccess","stopEditStatus","isLastRow","dragRow","dragRowUid","dragRowObject_1","groupedColumn","comparer1","comparer2","dropRowObject","groupedRowReorder","checkboxOnly","getGroupAggregateTemplates","closeForm","cloneRow","originalRow","cloneFrozen","frozen","needRefresh","leftrightCells","closeEditArgs","isLazyLoad","inlineAddHandler","addArgs","dataLen","tmpRecord","contained","addElements","editElements","InlineEdit","BatchEdit","cellDetails","originalCell","cloneCell","editNext","preventSaveCell","validationColObj","addBatchRow","prevEditedBatchCell","onBeforeCellFocused","onCellFocused","editNextValCell","dataBound","batchCancelFunction","batchCancel","restoreFocus","mouseDownElement","setCellIdx","isAddRow","validateFormObj","byClick","keyArgs","clickArgs","isContent","active","matrix","prevEditedBatchCellMatrix","crtRowIndex","byKey","isLastCellPrimaryKey","editCellFromIndex","isAdded","isInsert","isDirty","removeBatchElementChanges","refreshRowIdx","isInstertedRemoved","bulkDelete","bulkAddRow","batchSave","checkAllBox","removeSelectedData","beforeBatchSaveArgs","removeRowObjectFromUID","rowClone","deleteRowUid","beforeBatchDeleteArgs","uniqueid","dataObjects","visibleColumns","defaultData","getDefaultData","beforeBatchAddArgs","forgetPrevious","btmIdx","getBottomIndex","findNextEditableCell","isValOnly","validation","dValues","editCellExtend","getDataByIndex","getColIndex","getCellIdx","cellEditArgs","isColored","rowObj_1","newReactTd_1","newReactTd","setChanges","rowcell","insertedRows","isSingleInsert","escapeCellEdit","generateCellArgs","successCallBack","cloneEditedData","isForceSave","cellSaveArgs","isEscapeCellEdit","editedBatchCellMatrix","editedBatchCell","addCancelWhilePaging","ARROWLEFT","ARROWRIGHT","ARROWUP","ARROWDOWN","TAB","SHIFTTAB","END","HOME","MaskedDateTime","mask","defaultConstant","hiddenMask","validCharacters","isDayPart","isMonthPart","isYearPart","isHourPart","isMinutePart","isSecondsPart","isMilliSecondsPart","monthCharacter","periodCharacter","isHiddenMask","isComplete","navigated","isDeletion","isShortYear","isDeleteKey","isDateZero","isMonthZero","isYearZero","isLeadingZero","dayTypeCount","monthTypeCount","hourTypeCount","minuteTypeCount","secondTypeCount","dateformat","getCulturedFormat","maskDateValue","validCharacterCheck","maskInputHandler","maskKeydownHandler","maskPlaceholder","getCUltureMaskFormat","formatCheck","previousHiddenMask","setDynamicValue","objectString","validChar","navigateSelection","formatText","dateAlteration","isPersist","differenceCheck","previousVal","newVal","newDateValue","handleDeletion","monthString","getCulturedValue","monthValue","monthValue_1","previousMaxDate","currentMaxDate","yearValue","periodString","periodkeys","daysAbbreviated","dayKeyAbbreviated","daysWide","dayKeyWide","daysNarrow","dayKeyNarrow","monthAbbreviated","monthWide","zeroCheck","roundOff","hiddenChar","isbackward","formatIndex","valueText","isZero","resultValue","isSegment","isDecrement","incrementValue","newMonth","DatePickerEditCell","dateanddatetimerender","datePickerEditCell","datePickerClose","TemplateEditCell","updateEditObj","createAlertDlg","createConfirmDlg","updateColTypeObj","templteCell","editCellType","alertDObj","lastTr","refreshToolbar","showConfirmDialog","showDeleteConfirmDialog","endEditing","form1","form2","mFormObj","form3","frFormObj","getCurrentEditCellData","getValueFromType","destroyToolTip","dlgWidget","dlgOk","dlgCancel","alertClick","btnOptions","isForceCancel","executeAction","destroyEditComponents","eventDetails","preventBatch","onActionBegin","actionCompleteFunction","actions","inputs","addRow","restrictedRequestTypes","isRestrict","isDestroyVirtualForm","formObjects","virtualFormObj","curretRowFocus","focusableEditCells","commandColCell","preventObj","newRule","mRules","frRules","createFormObj","validationComplete","valErrorPlacement","getElemTable","isFHdr","resetElemPosition","tdRight","elemRight","offSet","customForm","validationForBottomRowPos","gcontent","isFHdrLastRow","isBatchModeLastRow","viewPortRowCount","fHearderRows","insertRow","inputClient","arrow","getEditCell","gHeight","rowsCount","rowsHeight","AddEditors","editors","gomDeva","weekdaysCaseReplace","nounCase","nominative","accusative","genitive","processHoursFunction","uk","ResponsiveDialogRenderer","sortedCols","sortPredicate","closeCustomDialog","refreshCustomFilterOkBtn","renderResponsiveContextMenu","renderCustomFilterDiv","customExFilterClose","refreshCustomFilterClearBtn","onActionCompleteFn","editComplate","isCustomDlgRender","customResponsiveDlg","closeBtn","saveBtn","backBtn","customExcelFilterParent","filterClearBtn","getHeaderTitle","columnMenuResponsiveContent","cDiv","customColumnDiv","renderResponsiveContent","isColumnChooser","filterParent","isColMenu","sortColumns","sortBtnParent","filteredCols","isSort","getSortedFieldsAndDirections","buttonInnerText","sortButtonClickHandler","divIcon","iconSpan","customFilterColumnClickHandler","columndiv","allowMultiSorting","isSortApplied","resetSortButtons","directionTxt","setSortedCols","getCurrentSortedFields","menuCol","filteredCol","closeCustomFilter","isRowResponsive","colDiv","isDialogClose","removeCustomDlgFilterEle","renderCustomFilterDialog","setTopToChildDialog","dialogEle","colMenu","outerDiv","customFilterDlg","getDialogOptions","beforeDialogClose","sortField","getDialogName","getButtonText","titleDiv","dialogHdrBtnClickHandler","id_1","clearBtn","removeCustomFilterElement","custommenu","mainfilterdiv","destroyCustomFilterDialog","customEle","BaseTooltip","isStockChart","enable3D","highlightPoint","accumulationSelectionModule","isSelectedElement","highlightColor","highlightPoints","clipLocation","crosshairEnabled","templatePoint","customTemplate","tooltip3DModule","accumulationTooltipModule","svgTooltip","findPalette","isNegative","enableTextWrap","updatePreviousPoint","animationComplete","findColor","toolTipInterval","NumericContainer","pagerElement","renderNumericContainer","refreshNumericLinks","updateTotalPages","links","updateLinksHtml","refreshAriaAttrLabel","updateStyles","link","frag","createDocumentFragment","auxiliaryClickHandler","numericContainer","renderFirstNPrev","renderPrevPagerSet","renderNextPagerSet","renderNextNLast","pagerContainer","prevPager","PP","nextPager","NP","previousPageNo","currentPageSet","isLastSet","numItems","isPagerResized","focusedItem","focusedorTarget","prevFocused","nextFocused","firstFocused","lastFocused","numItemFocused","npFocused","ppFocused","classList_1","isPageAvailable","customText","ppIndex","avgNumItems","NPIndex","updateFirstNPrevStyles","updatePrevPagerSetStyles","updateNextPagerSetStyles","updateNextNLastStyles","currentPageIndex","firstPage","firstPageDisabled","prevPage","prevPageDisabled","lastPage","lastPageDisabled","nextPage","nextPageDisabled","PagerMessage","pageNoMsgElem","pageCountMsgElem","regx","Pager","hasParent","pageRefresh","firstPagerFocus","enableExternalMessage","checkpagesizes","defaultConstants","currentPageInfo","totalItemsInfo","totalItemInfo","firstPageTooltip","lastPageTooltip","nextPageTooltip","previousPageTooltip","nextPagerTooltip","previousPagerTooltip","pagerDropDown","pagerAllDropDown","CurrentPageInfo","TotalItemsInfo","FirstPageTooltip","LastPageTooltip","NextPageTooltip","PreviousPageTooltip","NextPagerTooltip","PreviousPagerTooltip","PagerDropDown","PagerAllDropDown","All","Container","Information","ExternalMsg","Page","Of","Pages","containerModule","pagerMessageModule","initLocalization","isReactTemplate","renderFirstPrevDivForDevice","enablePagerMessage","renderNextLastDivForDevice","pagerdropdownModule","addAriaLabel","externalMessageModule","checkGoToPage","currentPageChanged","setDropDownValue","compile","resizePager","onFocusIn","onFocusOut","focusedTabIndexElement","getFocusedTabindexElement","dropDownPage","getDropDownPage","focusablePagerElements","getFocusablePagerElements","addFocus","focusedElement","getFocusedElement","setTabIndexForFocusLastElement","checkPagerHasFocus","changePagerFocus","setPagerFocus","setPagerContainerFocus","setPagerFocusForActiveElement","currentActivePage","offsetParent","changeFocusByShiftTab","changeFocusByTab","navigateToPageByEnterOrSpace","navigateToPageByKey","tabindexElements","currentItemPagerFocus","incrementNumber","decrementNumber","lastCell","checkFirstPagerFocus","selectedClass","getClass","classElement","getElementByClass","checkFocusInAdaptiveMode","changeFocusInAdaptiveMode","actionClass","pagingItem","mPrev","removeTabindexLastElements","tabIndexElements","dropDownPageHolder","currentClass","previousElements","targetChildrens","pagerElements","element_1","tabindexElement","addFocusClass","removeFocusClass","setPageSize","newPageNo","oldPageNo","enableQueryString","updateQueryString","getPagerTemplate","updatedUrl","getUpdatedURL","history","pushState","uri","calculateActualWidth","actualWidth","isStyleApplied","pagerWidth","hiddenNumItems","hideFrom","showFrom","bufferWidth","detailItems","totDetailWidth_1","averageDetailWidth","totalWidth","numericItemWidth","numToHide","hideIndex","pagerDetailItemsWidth","detailtoHide","hiddenDetailItems","numToShow","lesserIndexItems","greaterIndexItems","showItems","showItem","pagerDropDownDiv","dropDownDiv","defaultTextDiv","pagerCons","pageSizesModule","pageSizesArray","convertValue","dropDownListObject","onChange","isPageSizeAll","beforeValueChange","pageSizeValue","pageSizeNum","isbeforeAll","ExternalMessage","externalMessage","isInitialRender","pagerDestroy","dropDownChanged","onSelect","addAriaAttr","renderReactPagerTemplate","numericContainerNew","numericContainerDiv","previousPage","keyActions","appendToElement","handlers","complete","updateLayout","inboundChange","Selection","checkBoxState","isMultiShiftRequest","isMultiCtrlRequest","isMultiCtrlRequestCell","enableSelectMultiTouch","clearRowCheck","selectRowCheck","selectedRowState","unSelectedRowState","chkAllCollec","isCheckedOnAdd","persistSelectedData","deSelectedData","isHdrSelectAllClicked","needColumnSelection","isCancelDeSelect","isPreventCellSelect","disableUI","isPersisted","cmdKeyPressed","cellselected","isAddRowsToSelection","initialRowSelection","isPrevRowSelection","isRowDragSelected","rmtHdrChkbxClicked","isCheckboxReset","autoFillRLselection","right_bottom","bottom_left","top_right","top_left","top_bottom","top_right_bottom","top_bottom_left","top_right_left","right_bottom_left","all_border","initializeSelection","fDataUpdate","getRowObj","hidePopUp","isEditing","getCurrentBatchRecordChanges","currentRecords","selectedGroupedData","enableSimpleMultiRowSelection","addRowsToSelection","selectData","isRemoved","selectedIndex","isAvailable","prevSelectedData","isRowType","isRowSelected","activeTarget","can","rowSelectingCallBack","isCtrlPressed","isShiftPressed","previousRow","prevRowIndex","previousRowIndex","actualTarget","isHeaderCheckboxClicked","removed","clearSelectedRow","selectRowCallBack","clearRow","disableInteracted","updateRowSelection","selectRowIndex","isHeaderCheckBoxClicked","updateRowProps","getCollectionFromIndexes","selectedDataUpdate","selectedData","selectableRowIndex","isSingleSel","prevRow","isDragged","selectRowFn","selectableRowIndex_1","rowIndexes_1","isUnSelected","enableToggle","rowDeselect","addRemoveClassesForRow","clearRowCallBack","updatePersistCollection","updateCheckBoxes","getPkValue","pkField","ensureCheckboxFieldSelection","updatePersistDelete","pKey","isPresent","checkedTarget","setCheckAllState","getPrevIndexes","mouseButton","checkSelectAllClicked","clearColumnSelection","prevCIdxs","prevECIdxs","rowIndex_1","foreignKeyData_1","isRowClicked","getCheckAllStatus","updatePersistSelectedData","mRow","rowDeselectCallBack","frozenRightRow","cancl_1","isSingleDeSel","rowDeselectObj","rowInString","rowidx","rowidxex","dataTxt","isHeaderCheckBxClick","isCellType","selectedCell","isCellSelected","previousRowCell","getCellIndex","previousRowCellIndex","cellSelectingArgs","cncl","clearCell","updateCellSelection","selectedRowCellIndex","updateCellProps","stIndex","edIndex","getLastColIndex","addAttribute","cellSelectedArgs","cellSelectArgs","cellLen","addRowCellIndex","prvRowCellIndex","addCellsToSelection","hideAutoFill","cellIndexes_1","selectedCellIdx","cellDeselect","cancl","rowCellIndex","isRowAvail","selectedCells","getSelectedCellsElement","cLen","bdrElement","showHideBorders","gBRect","isCellDrag","startAFCell","endAFCell","selectLikeExcel","startDIndex","updateScrollPosition","timer1","timer2","isAutoFillSel","findNextCell","e_1","colInd","rowInd","siblingEles","nextEleInd","showAFBorders","selectLikeAutoFill","startDCellIndex","drawBorders","setFrozenBorders","bdrStr","strCell","fixedCells","firstRowIdx","firstColIdx","lastRowIdx","lastColIdx","preCell","nextCell","refreshFrozenBorders","frcBdrElement","fhBdrElement","frhBdrElement","createBorders","positionBorders","isLastCell","isFirstRow","isFirstCell","setBorders","stOff","endOff","parentOff","topOffSet","leftOffset","rightOffset","selectDirection","updateStartEndCells","mcBdrElement","mhBdrElement","applyBorders","applyBothFrozenBorders","drawAFBorders","bdrAFBottom","createAFBorders","positionAFBorders","bdrAFLeft","firstCellTop","firstCellLeft","parentRect","sTop","totalHeight","scrolloffSet","bdrAFRight","bdrAFTop","leftRemove","topRemove","hideAFBorders","createBeforeAutoFill","getAutoFillCells","startCellIdx","isApply","startrowIdx","endrowIdx","endCellIdx","rowLen","startCellIndex","trIdx","mUPTarget","closeRowCell","updateStartCellsIndex","rindex","isFrozenRow","isFrozenRight","clientRect","colWidth","enableDrag","postion","clearSelAfterRefresh","isInfiniteScroll","pkValue","rowsRemoved","addEventListener_checkbox","removeEventListener_checkbox","isMacOS","beforeFragAppend","getCheckAllBox","initPerisistSelection","prevColIndex","checkBoxSelectionChanged","gobj","chkField","proxy_1","refreshPersistSelection","setRowSelection","selectedStateKeys","unSelectedRowStateKeys","rowData_1","selectedData_1","getAvailableSelectedData","filteredSearchedSelectedData","editChkBox","onDataBound","totalRecords","checkSelectAllAction","cRenderer","editForm","getVirtualRowIndex","checkSelectAll","stateStr","updateSelectedRowIndexes","triggerChkChangeEvent","checkSelect","rIndex","rowCellSelectionHandler","moveIntoUncheckCollection","rowObj_2","rowObj_3","updateSelectedRowIndex","selectedVal","isAllSelected","isSelectAllRowCount","someDataSelected","checkToSelectAll","checkedLen","spanEle","getRecord","targetHeadCell","targetRowCell","isCheckBox","allowColumnSelection","popUpClickHandler","chkSelect","headerSelectionHandler","find","checkboxColumnIndexCheck","isJump","headerAction","thLen","getKeyColIndex","targetLabel","applyDownUpKey","applyRightLeftKey","shiftDownKey","applyShiftLeftRightKey","applyHomeEndKey","applyCtrlHomeEndKey","writeText","applySpaceSelection","allowNextRowEdit","innerColumn","getstackedColumns","lastIndex","applyUpDown","selectColumn","cIndex","selectColumnsByRange","innerColumnIndexes","detailIndentCell","dragdropIndentCell","selectedCol","isColSelected","isMultiColumns","clearColDependency","previousColumnIndex","updateColSelection","selectedArgs","updateColProps","selectColumns","getselectedCols","selectingArgs","selectColumnWithExisting","newCol","clearIndex","deselectedArgs","isCanceled","columnDeselect","selectedHeader","getSelectedColumnCells","isRowTemplate","seletedcells","selectionString","onDataBoundFunction","setCheckAllForEmptyGrid","actionCompleteHandler","resizeEndFn","isInfinitecroll","lo","ColumnWidthService","wFlag","totalColumnsWidth","setColumnWidth","tWidth","tmWidth","collection_1","isWidthUndefined","setUndefinedColumnWidth","cWidth","getWidth","fWidth","editTableCol","movableScrollbar","movableWidth","placeHolder","getHeightFromDirection","sibling","isWidUndefCount","isAutoResize","deAt","alertDate","deafaultDeadlineDate","openVolume","de","tzmLatn","jv","esMx","addScrolling","scrollType","containerOffset","contentOffset","parentElem","createScrollbar","scrollObj","ENTER","ESCAPE","FOCUSED","SEPARATOR","UPARROW","DOWNARROW","LEFTARROW","RIGHTARROW","CARET","ITEM","HIDE","TEMPLATE_PROPERTY","FieldSettings","MenuItem","MenuAnimationSettings","MenuBase","navIdx","isTapHold","showSubMenuOn","isMenu","ejInst","clonedElement","refEle","enableScrolling","hamburgerMode","createHeaderContainer","defaultOption","showItemOnClick","createJsonFromElement","removeChildElement","createItems","targetElems","menuHeaderClickHandler","cmenuHandler","delegateMoverHandler","moverHandler","delegateMouseDownHandler","delegateClickHandler","downarrow","uparrow","leftarrow","rightarrow","keyBoardHandler","closeMenu","actionName","actionNeeded","removeLIStateByClass","rightEnterKeyHandler","leftEscKeyHandler","cul","getUlByNavIdx","fliIdx","fli","getLIByClass","getIdx","cli","navIdxLen","popups_1","allPopup","keyType","openMenu","aEle","sli","isCMenu","canOpen","ulIndex","isIterated","isMenuVisible","item_1","wrapper_1","beforeCloseArgs","popups","getPopups","ul_1","liElem_1","getLI","parentItem","observedCloseArgs","closeArgs","trgtliId","closedLi","trgtLi","popupId","unWireKeyboardEvent","toggleAnimation","showSubMenu","updateReactTemplate","trgtpopUp","submenus","afterCloseMenu","isMenusClosed","sli_1","cliIdx","item_2","removeStateWrapper","getMenuItemModel","getFields","lItem","elemId","uList","getField","hdata","hli","isNestedOrVertical","generatePopup","calculateIndentSize","hoverDelay","triggerBeforeOpen","targetEvent","copyObject","srcElement","liStyle","liIndent","textIndent","blankIconElem","menuIconElem","menuIconElemStyle","blankIconIndent","actionOnScroll","triggerOpen","spanElem","tempTitle","spanTitle","spanIcon","openHamburgerMenu","closeHamburgerMenu","observedHamburgerCloseArgs","callFit","menuType","observedOpenArgs","checkScrollOffset","animationOptions","easing","setPosition","eventArgs_1","collide","offWidth","iconCssProps","offsetEle","offsetRight","toggleVisiblity","newTop","xCollision","isVisible","showIcon","hasField","itemNavigable","itemCreating","curData","liTrgt","ulId","hdrWrapper","isDifferentElem","cliWrapper","isInstLI","cliWrapperId","setLISelected","culIdx","classname","isUniqueId","isText","setItem","newItem","setItems","newItems","skipHdr","updateItemsByNavIdx","updateItem","ul_2","ul_3","getChangedItemIndex","insertAfter","removeItem","wrapper1","ul1","lis","popStr","uls","targetSelctor","parent_2","isMenuOpen","pUlHeight","pElement","begin","nIndex","isCallBack","skipItem","showHideItems","hideItems","ishide","validUl","iitems","insertItems","isAfter","menuitem","itemId","parentId","enSg","nn","relativeTimeWithSingular","relativeSeconds","lv","deCh","StackedColumnsDirective","StackedColumnsPlugin","StackedColumnDirective","StackedColumnPlugin","AggregateColumnsDirective","AggregateColumnsPlugin","AggregateColumnDirective","AggregateColumnPlugin","AggregatesDirective","AggregatesPlugin","AggregateDirective","AggregatePlugin","GridComponent","GridPlugin","tzm","hookCallback","hooks","setHookCallback","isObject","hasOwnProp","isObjectEmpty","getOwnPropertyNames","isUndefined","isNumber","isDate","arrLen","extend","createUTC","strict","createLocalOrUTC","utc","defaultParsingFlags","empty","unusedTokens","unusedInput","charsLeftOver","nullInput","invalidEra","invalidMonth","invalidFormat","userInvalidated","iso","parsedDateParts","era","rfc2822","weekdayMismatch","getParsingFlags","_pf","_isValid","flags","parsedParts","isNowValid","invalidWeekday","_strict","bigHour","createInvalid","fun","t","momentProperties","updateInProgress","copyConfig","momentPropertiesLen","_isAMomentObject","_l","_tzm","_isUTC","_offset","_locale","Moment","updateOffset","isMoment","warn","msg","suppressDeprecationWarnings","console","firstTime","deprecationHandler","argLen","stack","deprecations","deprecateSimple","_config","_dayOfMonthOrdinalParseLenient","_dayOfMonthOrdinalParse","_ordinalParse","mergeConfigs","parentConfig","childConfig","Locale","defaultCalendar","_calendar","zeroFill","targetLength","forceSign","absNumber","zerosToFill","sign","formattingTokens","localFormattingTokens","formatFunctions","formatTokenFunctions","addFormatToken","padded","func","localeData","removeFormattingTokens","makeFormatFunction","formatMoment","expandFormat","replaceLongDateFormatTokens","defaultLongDateFormat","_longDateFormat","formatUpper","tok","defaultInvalidDate","_invalidDate","defaultOrdinal","defaultDayOfMonthOrdinalParse","_ordinal","defaultRelativeTime","_relativeTime","pastFuture","aliases","addUnitAlias","shorthand","lowerCase","normalizeUnits","normalizeObjectUnits","normalizedProp","normalizedInput","priorities","addUnitPriority","priority","getPrioritizedUnits","unitsObj","absFloor","toInt","argumentForCoercion","coercedNumber","isFinite","makeGetSet","keepTime","set$1","daysInMonth","stringGet","stringSet","prioritized","prioritizedLen","regexes","match1","match2","match3","match4","match6","match1to2","match3to4","match5to6","match1to3","match1to4","match1to6","matchUnsigned","matchSigned","matchOffset","matchShortOffset","matchTimestamp","matchWord","addRegexToken","strictRegex","isStrict","getParseRegexForToken","unescapeFormat","regexEscape","matched","tokens","addParseToken","tokenLen","addWeekParseToken","_w","addTimeToArrayFromToken","DATE","WEEK","WEEKDAY","mod","modMonth","defaultLocaleMonths","defaultLocaleMonthsShort","MONTHS_IN_FORMAT","defaultMonthsShortRegex","defaultMonthsRegex","localeMonths","_months","localeMonthsShort","_monthsShort","handleStrictParse","monthName","ii","llc","toLocaleLowerCase","_monthsParse","_longMonthsParse","_shortMonthsParse","localeMonthsParse","_monthsParseExact","dayOfMonth","getSetMonth","getDaysInMonth","computeMonthsParse","_monthsShortStrictRegex","_monthsShortRegex","_monthsStrictRegex","_monthsRegex","cmpLenRev","shortPieces","longPieces","mixedPieces","daysInYear","parseTwoDigitYear","getSetYear","getIsLeapYear","createDate","ms","createUTCDate","UTC","setUTCFullYear","firstWeekOffset","fwd","fwdlw","getUTCDay","dayOfYearFromWeeks","weekday","resYear","resDayOfYear","localWeekday","weekOffset","dayOfYear","weekOfYear","resWeek","weeksInYear","weekOffsetNext","localeWeek","_week","defaultLocaleWeek","localeFirstDayOfWeek","localeFirstDayOfYear","getSetWeek","getSetISOWeek","parseWeekday","parseIsoWeekday","shiftWeekdays","ws","weekdaysMinRegex","weekdaysShortRegex","weekdaysRegex","defaultLocaleWeekdays","defaultLocaleWeekdaysShort","defaultLocaleWeekdaysMin","defaultWeekdaysRegex","defaultWeekdaysShortRegex","defaultWeekdaysMinRegex","localeWeekdays","_weekdays","localeWeekdaysShort","_weekdaysShort","localeWeekdaysMin","_weekdaysMin","handleStrictParse$1","weekdayName","_weekdaysParse","_shortWeekdaysParse","_minWeekdaysParse","localeWeekdaysParse","_weekdaysParseExact","_fullWeekdaysParse","getSetDayOfWeek","getSetLocaleDayOfWeek","getSetISODayOfWeek","computeWeekdaysParse","_weekdaysStrictRegex","_weekdaysRegex","_weekdaysShortStrictRegex","_weekdaysShortRegex","_weekdaysMinStrictRegex","_weekdaysMinRegex","minp","shortp","longp","minPieces","hFormat","kFormat","lowercase","matchMeridiem","_meridiemParse","localeIsPM","kInput","_isPm","_meridiem","pos1","pos2","defaultLocaleMeridiemParse","getSetHour","localeMeridiem","globalLocale","baseConfig","locales","localeFamilies","commonPrefix","arr1","arr2","minl","normalizeLocale","chooseLocale","loadLocale","isLocaleNameSane","oldLocale","_abbr","require","getSetGlobalLocale","getLocale","parentLocale","updateLocale","tmpLocale","listLocales","_overflowDayOfYear","_overflowWeeks","_overflowWeekday","extendedIsoRegex","basicIsoRegex","tzRegex","isoDates","isoTimes","aspNetJsonRegex","obsOffsets","UT","GMT","EDT","EST","CDT","CST","MDT","MST","PDT","PST","configFromISO","allowTime","tzFormat","isoDatesLen","isoTimesLen","configFromStringAndFormat","extractFromRFC2822Strings","yearStr","monthStr","dayStr","hourStr","minuteStr","secondStr","untruncateYear","preprocessRFC2822","checkWeekday","weekdayStr","weekdayProvided","weekdayActual","calculateOffset","obsOffset","militaryOffset","numOffset","configFromRFC2822","parsedArray","setUTCMinutes","getUTCMinutes","configFromString","createFromInputFallback","currentDateArray","nowValue","_useUTC","getUTCMonth","getUTCDate","configFromArray","expectedWeekday","yearToUse","dayOfYearFromWeekInfo","_dayOfYear","_nextDay","weekYear","weekdayOverflow","curWeek","GG","W","E","createLocal","gg","ISO_8601","RFC_2822","skipped","stringLength","totalParsedInputLength","meridiemFixWrap","erasConvertYear","isPm","configFromStringAndArray","tempConfig","bestMoment","scoreToBeat","currentScore","validFormatFound","bestFormatIsValid","configfLen","score","configFromObject","dayOrDate","createFromConfig","prepareConfig","configFromInput","isUTC","prototypeMin","other","prototypeMax","pickBy","moments","ordering","isDurationValid","unitHasDecimal","orderLen","isValid$1","createInvalid$1","createDuration","Duration","years","quarters","quarter","weeks","isoWeek","_milliseconds","_days","_data","_bubble","isDuration","absRound","compareArrays","array1","array2","dontConvert","lengthDiff","diffs","utcOffset","offsetFromString","chunkOffset","matcher","chunk","cloneWithOffset","local","getDateOffset","getSetOffset","keepLocalTime","keepMinutes","localAdjust","_changeInProgress","addSubtract","getSetZone","setOffsetToUTC","setOffsetToLocal","subtract","setOffsetToParsedOffset","tZone","hasAlignedHourOffset","isDaylightSavingTime","isDaylightSavingTimeShifted","_isDSTShifted","toArray","isLocal","isUtcOffset","isUtc","aspNetRegex","isoRegex","ret","diffRes","parseIso","momentsDifference","inp","positiveMomentsDifference","isBefore","createAdder","dur","isAdding","isString","isMomentInput","isNumberOrStringArray","isMomentInputObject","objectTest","propertyTest","propertyLen","arrayTest","dataTypeTest","isCalendarSpec","getCalendarFormat","myMoment","calendar$1","sod","startOf","calendarFormat","localInput","endOf","isBetween","inclusivity","localFrom","localTo","isSame","inputMs","isSameOrAfter","isSameOrBefore","asFloat","that","zoneDelta","monthDiff","anchor2","adjust","wholeMonthDiff","keepOffset","toDate","inspect","suffix","zone","inputString","defaultFormatUtc","defaultFormat","humanize","fromNow","toNow","newLocaleData","lang","MS_PER_SECOND","MS_PER_MINUTE","MS_PER_HOUR","MS_PER_400_YEARS","mod$1","dividend","divisor","localStartOfDate","utcStartOfDate","startOfDate","isoWeekday","unix","toObject","isValid$2","parsingFlags","invalidAt","creationData","localeEras","_eras","localeErasParse","eraName","localeErasConvertYear","dir","getEraName","getEraNarrow","getEraAbbr","getEraYear","erasNameRegex","computeErasParse","_erasNameRegex","_erasRegex","erasAbbrRegex","_erasAbbrRegex","erasNarrowRegex","_erasNarrowRegex","matchEraAbbr","matchEraName","matchEraNarrow","matchEraYearOrdinal","_eraYearOrdinalRegex","abbrPieces","namePieces","narrowPieces","addWeekYearFormatToken","getter","getSetWeekYear","getSetWeekYearHelper","getSetISOWeekYear","getISOWeeksInYear","getISOWeeksInISOWeekYear","isoWeekYear","getWeeksInYear","weekInfo","getWeeksInWeekYear","weeksTarget","setWeekAll","dayOfYearData","getSetQuarter","erasParse","getSetDayOfMonth","getSetDayOfYear","getSetMinute","getSetMillisecond","getSetSecond","parseMs","getZoneAbbr","getZoneName","proto","createUnix","createInZone","parseZone","preParsePostFormat","Symbol","eraNarrow","eraAbbr","eraYear","isoWeeks","weeksInWeekYear","isoWeeksInYear","isoWeeksInISOWeekYear","isDST","zoneAbbr","zoneName","isDSTShifted","proto$1","get$1","setter","listMonthsImpl","out","listWeekdaysImpl","localeSorted","listMonths","listMonthsShort","listWeekdays","listWeekdaysShort","listWeekdaysMin","firstDayOfYear","langData","mathAbs","addSubtract$1","add$1","subtract$1","absCeil","bubble","monthsFromDays","monthsToDays","daysToMonths","as","valueOf$1","makeAs","alias","asMilliseconds","asSeconds","asMinutes","asHours","asDays","asWeeks","asMonths","asQuarters","asYears","clone$1","get$2","makeGetter","thresholds","substituteTimeAgo","relativeTime$1","posNegDuration","getSetRelativeTimeRounding","roundingFunction","getSetRelativeTimeThreshold","argWithSuffix","argThresholds","withSuffix","abs$1","toISOString$1","totalSign","ymSign","daysSign","hmsSign","total","proto$2","toIsoString","relativeTimeRounding","relativeTimeThreshold","HTML5_FMT","DATETIME_LOCAL","DATETIME_LOCAL_SECONDS","DATETIME_LOCAL_MS","TIME","TIME_SECONDS","TIME_MS","DateTime","POSITIVE_INFINITY","NEGATIVE_INFINITY","datetimeInterval","getYear","getHour","endMinute","endSecond","endYear","endMonth","endDay","endHour","increaseDateTimeInterval","axisLabels","alignRangeStart","blazorCustomFormat","skeletonType","actualInterval","getDecimalInterval","sDate","intervalSize","sResult","decimalValue","sec","milliSec","FocusStrategy","oneTime","swap","forget","skipFocus","focusByClick","firstHeaderCellClick","prevIndexes","refMatrix","refreshMatrix","isVirtualScroll","rowModelGen","focusCheck","setActive","enableHeaderFocus","generate","validator","passiveFocus","firstHeaderCellIndex","skipAction","onBlur","isGantt","setLastContentCellTabIndex","focusableGroupedItems","getFocusableGroupedItems","toolbarElement","focusableToolbarItems","getFocusableToolbarItems","force","beforeArgs","clearOutline","handleFilterNavigation","inputSelector","buttonSelector","allowToPaging","lastHeaderCellIndex","isValidBatchEditCell","findBatchEditCell","parentCell","skipOn","setLastContentCellActive","focusOutFromChildGrid","focusFirstHeaderCell","activeKey","bValue","prevBatchValue","outline","swapInfo","jump","toHeader","getNextCurrent","setActiveByKey","lastIdxCell","nextHeaderCellIndex","firstContentCellIndex","previousCellIndex","focusOutFromHeader","cellColIndex","cellCol","limitRow","tempCellIndex","cellIndexObtain","prevTempCellIndex","lastContentCellIndex","parentTable","parentGrid","parentRows","parentRowIndex","nextFocusCell","rowCells","inputTarget","focusVirtualElement","isKeyFocus","setFocusedElement","getFocusInfo","cellElem","focusHeader","resetFocus","getInfo","focusedColumnUid","ContentFocus","HeaderFocus","cFocus","frozenRow","batchLen","matrixcs","hdrLen","handlerInstance","cellPosition","gridPosition","passiveHandler","filterfocus","restoreFocusWithAction","internalCellFocus","groupSortFocus","groupTextFocus","groupCancelFocus","toFrozen","focusEle","getFocusable","Matrix","allow","emptyTable","inValid","vector","columnsCount","rowColumns","currentColumnCount","indexesByKey","navigators","getCurrentFromAction","editNextRow","visibleIndex","shouldFocusChange","rN","cN","oRowIndex","oCellIndex","nextRowFocusValidate","previousRowFocusValidate","enterFrozen","headerSwap","isHeaderFocus","optionals","defaultLen","isData","isCellWidth","getGridSeletion","current1","checkFilterColumn","getHeaderType","SearchBox","searchFocus","searchBlur","he","PrintUtils","printWindow","htmlContent","getHTMLContent","actualBackgroundColor","isSVG","sq","Connector","titleBorder","titleSettings","Location","Offset","ChartArea","Margin","ContainerPadding","Indexes","CornerRadius","Index","EmptyPointSettings","DragSettings","TooltipSettings","CenterLabel","StockTooltipSettings","Periods","PeriodSelectorSettings","Double","isStacking","actualDesiredIntervalsCount","niceInterval","isAutoIntervalOnBothAxis","minInterval","currentInterval","enableAutoIntervalOnZooming","paddingInterval","maxPointLength","yAxisRange","findMinMax","findAdditional","findNormal","updateActualRange","remaining","duplicateTempInterval","isPolarRadar","intervalDigits","formatDigits","formatValue","labelValue","rowDataBound","queryCellInfo","headerCellInfo","rowSelecting","rowSelected","rowDeselecting","rowDeselected","cellSelecting","cellSelected","cellDeselecting","cellDeselected","columnSelecting","columnSelected","columnDeselecting","columnDeselected","columnDragStart","columnDrag","columnDrop","rowDragStartHelper","rowDragStart","rowDrag","rowDrop","printComplete","detailDataBound","batchAdd","batchDelete","beforeBatchAdd","beforeBatchDelete","beforeBatchSave","beginEdit","cellEdit","cellSave","cellSaved","recordDoubleClick","recordClick","beforeOpenColumnChooser","beforeOpenAdaptiveDialog","resizeStart","onResize","resizeStop","beforeCopy","beforePaste","beforeAutoFill","filterChoiceRequest","filterAfterOpen","filterBeforeOpen","filterSearchBegin","exportGroupCaption","uiUpdate","inBoundModelChanged","modelChanged","colGroupRefresh","headerRefreshed","pageComplete","sortComplete","filterComplete","searchComplete","reorderComplete","rowDragAndDropComplete","groupComplete","ungroupComplete","groupAggregates","refreshFooterRenderer","refreshAggregateCell","refreshAggregates","rowSelectionComplete","cellSelectionComplete","beforeCellFocused","cellFocused","keyPressed","columnVisibilityChanged","columnWidthChanged","rowsAdded","columnDragStop","dataSourceModified","dblclick","toolbarRefresh","bulkSave","autoCol","tooltipDestroy","saveComplete","deleteComplete","dialogDestroy","crudAction","addDeleteAction","doubleTap","beforeExcelExport","excelHeaderQueryCellInfo","exportDetailDataBound","exportDetailTemplate","freezeRender","columnMenuClick","columnMenuOpen","filterOpen","filterDialogCreated","initForeignKeyColumn","showEmptyGrid","columnDataStateChange","dataStateChange","dataSourceChanged","rtlUpdated","textWrapRefresh","recordAdded","cancelBegin","expandChildGrid","printGridInit","exportRowDataBound","exportDataBound","rowPositionChanged","columnChooserOpened","batchForm","beforeStartEdit","beforeBatchCancel","batchEditFormRendered","partialRefresh","beforeCustomFilterOpen","selectVirtualRow","columnsPrepared","cBoxFltrBegin","cBoxFltrComplete","fltrPrevent","beforeFltrcMenuOpen","valCustomPlacement","filterCboxValue","detailIndentCellInfo","virtaulCellFocus","virtualScrollEditActionBegin","virtualScrollEditSuccess","virtualScrollEditCancel","virtualScrollEdit","refreshVirtualCache","editReset","virtualScrollAddActionBegin","getVirtualData","refreshInfiniteModeBlocks","resetInfiniteBlocks","infinitePageQuery","infiniteShowHide","appendInfiniteContent","removeInfiniteRows","setInfiniteCache","infiniteEditHandler","initialCollapse","closeFilterDialog","columnChooserCancelBtnClick","getFilterBarOperator","resetColumns","excelAggregateQueryCellInfo","setGroupCache","lazyLoadScrollHandler","groupCollapse","beforeCheckboxRenderer","refreshHandlers","refreshFrozenColumns","setReorderDestinationElement","setFreezeSelection","beforeRefreshOnDataChange","immutableBatchCancel","checkScrollReset","preventFrozenScrollRefresh","nextCellIndex","refreshInfiniteCurrentViewData","filterDialogClose","renderResponsiveCmenu","filterCmenuSelect","customFilterClose","refreshExpandandCollapse","rowModeChange","enterKeyHandler","refreshVirtualMaxPage","setVirtualPageQuery","pagerRefresh","closeInline","resetVirtualFocus","beforeCheckboxRendererQuery","createVirtualValidationForm","validateVirtualForm","destroyChildGrid","stickyScrollComplete","captionActionComplete","refreshInfinitePersistSelection","refreshInfiniteEditrowindex","afterFilterColumnMenuClose","beforeCheckboxfilterRenderer","commandColumnDestroy","batchCnfrmDlgCancel","refreshResizePosition","renderResponsiveColumnChooserDiv","sr","tzl","numbersNouns","translateFuture","translatePast","numberNoun","numberAsNoun","hundred","ten","one","tlh","ContentRender","movableRows","freezeRowElements","isLoaded","infiniteCache","visibleFrozenRows","rightFreezeRows","isAddRows","isInfiniteFreeze","useGroupCache","tempFreezeRows","rafCallback","setRowsInLazyGroup","maxBlock","maxBlocks","rowElements","startIdx","generator","getModelGenerator","pressedKey","renderHorizontalScrollbar","scrollbarHeight","setScrollbarHeight","virtualTable","virtualTrack","createContentTable","initializeContentDrop","currentMovableRows","initialPageRecords","refFrag","refHdrfrag","hdrfrag","trElement","tbdy","isGroupFrozenHdr","checkCache","isFrozenLeft","templatetoclear","templates","updateVirtualCells","blockLoad","offsets","offsets_1","bSize","isEndBlock","blockIndexes","contentPanel","isVFFrozenOnly","bIndex","mhdrData","vgenerator","virtualFrozenHdrRefresh","refRowsObj","setInfiniteVisibleRows","getBlockSize","rowTemplateID","isTR","isVFreorder","ensureFrozenHeaderRender","ensureVirtualFrozenHeaderRender","headerCellHeight","cellHeight","boxSizing","maintainRows","initialGroupRows","getCurrentBlockInfiniteRecords","getReorderedRows","getReorderedFrozenRows","fhdrData","getInfiniteRows","getInfiniteMovableRows","infiniteCacheRows","infiniteRows","testRow","needFullRefresh","infiniteData","infiniteRowVisibility","contentrows","setDisplayNone","isFreeze","getHeaderColGroup","canSkip","getInfiniteRowIndex","firstRowIndex","oldKeys","newKeys","newRowObjs","oldIndexes","oldRowObjs","batchChangeKeys","getBatchEditedRecords","newIndexes","hasBatch","oldRowElements","trs","currentLen","oldIndex","refreshImmutableContent","isEqual","objectEqualityChecker","setRowValue","old","updateCellIndex","bo","ptBr","GroupModelGenerator","infiniteChildCount","renderInfiniteAgg","summaryModelGen","getGroupedRecords","ensureRowVisibility","parentid","childId","preCaption","captionRow","generateCaptionRow","getPreCaption","isRenderAggregate","rowCnt","aggregatesCount","setInfiniteRowVisibility","preCap","getCaptionRowCells","visibles","groupedLen","generateIndentCell","captionCells","cIndex_1","tmpFlag","childID","childGid","gSummary","fkValue","cRow","childRow","fil","hyAm","Theme","getSeriesColor","getThemeColor","canvas","darkBackground","axisLabel","axisTitle","chartTitle","legendLabel","crosshairLine","crosshairFill","crosshairLabel","selectionCircleStroke","datalabelFont","crosshairLabelFont","histogram","stockEventFont","ca","doesImplementInterface","checkFor","getUpdateUsingRaf","updateFunction","isExportColumns","updateColumnTypeForExportColumns","exportColumns","updatecloneRow","nRows","actualRows","getCollapsedRowsCount","dataRowCnt","agrCnt","gLevel","recursive","rCount","nLevel","iterateArrayOrObject","iterateExtend","getActualProperties","templateCompiler","validSelector","setStyleAndAttributes","copyAttr","literals","exclude","moved","setColumnIndex","ind","prepareColumns","autoWidth","setCssInGridPopUp","popUp","popUpSpan","isBottomTail","getPopupLeftPosition","parentsUntil","isID","getElementIndex","inArray","getActualPropFromColl","getUid","calculateAggregate","Global","divNode","isComplexField","getComplexFieldID","getParsedFieldID","setComplexFieldID","isEditable","isOldRow","inst","clName","addRemoveActiveClasses","distinctStringValues","getFilterMenuPostion","elementVisible","dlgWidth","getZIndexCalcualtion","toogleCheckbox","setChecked","createCboxWithWrap","removeAddCboxClasses","refreshForeignData","getForeignData","lValue","fField","fdata","getDatePredicate","getColumnByForeignKeyValue","padZero","filterObject","datePredicate","nextDate","prevObj","nextObj","predicateSt","predicateEnd","dateOnlyString","isGroupAdaptive","object","splits","newCase","getCustomDateFormat","formatvalue","getExpandedState","printMode","getPrintGridModel","printGridModel","extendObjWithFn","deep","obj1","getPrototypesOfObj","cpy","cln","measureColumnDepth","checkDepth","indices","refreshFilteredColsUid","getColumnModelByFieldName","transformV","replacedTv","rootElement","getScrollWidth","resetColspanGroupCaption","gridWidth","groupCaptionRowLeftRightPos","applyStickyLeftRightPosition","newColspan","ispercentageWidth","percentageCol","undefinedWidthCol","resetRowIndex","rowElms","startRowIndex","compareChanges","newArray","isChildColumn","uids","pushuid","frozenDirection","addFixedColumnBorder","addStickyColumnPosition","getCellsByTableName","getCellByColAndRowIndex","setValidationRuels","patternRegex","mtch_1","'","addBiggerDialog","dialogs","performComplexDataOperation","returnObj","duplicateMap","setDisplayValue","addRemoveEventListener","isOn","evt_1","createEditElement","registerEventHandlers","evts","removeEventHandlers","clearReactVueTemplates","generateExpandPredicates","filterCols","getPredicates","findCellIndex","checkActiveMatrix","checkCellIndex","activeMatrix","currentCellIndexPass","capitalizeFirstLetter","isDescending","sortData","isBreakLabel","getVisiblePoints","rotateTextSize","labelText","box","angleInRadians","rotatedTextWidth","rotatedTextHeight","areaWidth","inside","withIn","logWithIn","withInRange","nextPoint","mX2","mX1","mX3","xStart","xEnd","values_1","subtractThickness","thickness","degreeToLocation","radian","ChartLocation","degreeToRadian","getRotatedRectangleCoordinates","actualPoints","coordinatesAfterRotation","tempX","tempY","rotatedX","rotatedY","isRotatedRectIntersect","minA","maxA","projected","i1","minB","maxB","polygons","i2","normal","getAccumulationLegend","cartesianlarge","cartesiansmall","valueToCoefficient","TransformToVisible","CoefficientToVector","valueToPolarCoefficient","coefficient","Mean","verticalStandardMean","verticalSquareRoot","horizontalStandardMean","horizontalSquareRoot","verticalMean","horizontalMean","PolarArc","createZoomingLabels","chartRect","findCrosshairDirection","withInBounds","getValueXByPoint","actualValue","getValueYByPoint","findClipRect","firstToLowerCase","getMinPointsDelta","xValues","seriesMin","minDelta","stackingGroups","getAnimationFunction","linear","markerAnimate","animateRectElement","currentRect","pathAnimation","animateDuration","currentDireciton","startDirections","splitDirections","endDirections","endPath","directions","appendClipElement","clipElement","redrawElement","triggerLabelRender","isLineBreakLabels","text_1","lineBreakLabelTrim","maximumLabelWidth","textTrim","setRange","isZoomSet","getActualDesiredIntervalsCount","desiredIntervalsCount","maximumLabels","templateAnimate","chartRenderer","drawElement","sizeBullet","targetWidth","lx","ly","calculateLegendShapes","getRectLocation","outerRect","minMax","getTemplateFunction","accReactTemplate","datalabelGroup","accumulationDataLabelModule","calculateLabelSize","chartReactTemplate","calculateTemplateLabelSize","dataLabelId","tempObject","templateId","elementData","reactCallback","getFontStyle","measureElementRect","isReactCallback","findlElement","getPoint","yLength","locationX","locationY","appendElement","appendChildElement","isAnimate","forceAnimate","isRect","scatterElement","existChild","animateRedrawElement","upperQuartile","lowerQuartile","liers","isCollide","isOverlap","calculateRect","convertToHexCode","componentToHex","hex","convertHexToColor","ColorValue","colorNameToHex","exp","isRGBValue","checkColorFormat","getSaturationColor","colorCode","rgb","applyZLight","RGB","textLength","labelCollection","breakLabels","stringToNumber","containerSize","isDiv","isMinus","isDataLabelWrap","dx","calculateSize","containerWidth","marginHeight","tooltipSpace","periodHeight","periodSelectorSettings","enableGrouping","disableRangeSelector","scaleValue","selectorObject","getTitle","textWrap","titlePositionX","maximumWidth","wrapAnyWhere","textWrapAnyWhere","getUnicodeText","regexp","digit","digitSpecific","convertedText","unicodeSub","unicodeSup","blazorTemplatesReset","StackValues","RectOption","ImageOption","CircleOption","PolygonOption","Thickness","LabelLocation","PointData","ControlPoints","AccPointData","Point3D","controlPoint1","controlPoint2","getColorByValue","rbgColorValue","getGradientColor","midColor","previousColor","nextColor","previousOffset","nextOffset","percent","splitColorValueOffset","splitColor","getPercentageColor","prevColor","getPercentage","getTextAnchor","frCa","nlBe","DropDownButtonItemsDirective","DropDownButtonItemsPlugin","DropDownButtonItemDirective","DropDownButtonItemPlugin","DropDownButtonComponent","DropDownButtonPlugin","hi","CellMergeRender","targetCell_1","colSpanLen","colSpanRange","spanText","containsKey","backupMergeCells","setMergeCells","generteKey","fname","getMergeCells","mCells","merge","getIndexFromAllColumns","vColumnIndices","predefinedItems","isSearched","isRightToolbarMenu","gridID","preItems","isAdaptive","excludingItems","preItems_1","itemStr","localeName","isResponsiveToolbarMenuItems","responsiveToolbarItems","ColumnChooser","responsiveFilter","responsiveSort","responsiveBack","createToolbar","responsiveToolbarMenu","renderResponsiveToolbarpopup","addReactToolbarPortals","bindSearchEvents","searchElement","refreshToolbarItems","updateSearchBox","toolbarCreated","isNormal","clicked","toolbarClickHandler","viewStr","registerTemp","ID","renderResponsiveSearch","refreshResponsiveToolbarItems","isSearch","searchBoxObj","disableItems","hasData","getItemObject","toolbarItems_1","itemObject","gID","openResponsiveToolbarMenuPopup","newArgs","toolbarargs","tarElement","targetEle","toolbarMenuElement","getMenuItems","toolbarItems_2","getLocaleText","ResponsiveToolbarMenuItemClick","setFocusToolbarItem","getFocusToolbarElements","getFocusToolbarItems","keyPressedHandler","targetParent","reRenderToolbar","removeResponsiveSearch","rowSelectedFunction","rowDeSelectedFunction","gu","CONTROL_WRAPPER","INPUT_WRAPPER","DROP_AREA","DROP_WRAPPER","LIST_PARENT","FILE","STATUS","ACTION_BUTTONS","UPLOAD_BUTTONS","CLEAR_BUTTONS","FILE_NAME","FILE_TYPE","FILE_SIZE","REMOVE_ICON","DELETE_ICON","SPINNER_PANE","ABORT_ICON","RETRY_ICON","DRAG_HOVER","PROGRESS_WRAPPER","PROGRESSBAR","PROGRESSBAR_TEXT","UPLOAD_INPROGRESS","UPLOAD_SUCCESS","UPLOAD_FAILED","TEXT_CONTAINER","VALIDATION_FAILS","RTL_CONTAINER","ICON_FOCUSED","PROGRESS_INNER_WRAPPER","PAUSE_UPLOAD","RESUME_UPLOAD","RESTRICT_RETRY","wrapperAttr","FORM_UPLOAD","HIDDEN_INPUT","INVALID_FILE","INFORMATION","FilesProp","ButtonsProps","AsyncSettings","Uploader","initialAttr","multiple","uploadedFilesData","isForm","allTypes","pausedData","uploadMetaData","btnTabIndex","disableKeyboardNavigation","actionCompleteCount","selectedFiles","uploaderName","fileStreams","newFileRef","isFirstFileOnSelection","dragCounter","fileList","filesData","uploaderOptions","setExtensions","allowedExtensions","setControlStatus","setMultipleSelection","setRTL","reRenderFileList","browse","upload","renderButtonTemplates","unBindDropEvents","updateDropArea","checkHTMLAttributes","renderPreLoadFiles","updateDirectoryAttributes","setLocalizedTexts","preLocaleObj","browseButton","localizedTexts","uploadWrapper","updateFileList","getKeyValue","keyValue","autoUpload","uploadButton","listParent","internalCreateFileList","actionButtons","removeActionButtons","renderActionButtons","checkActionButtonStatus","Browse","Upload","invalidFileName","dropFilesHint","invalidMaxFileSize","invalidMinFileSize","invalidFileType","uploadFailedMessage","uploadSuccessMessage","removedSuccessMessage","removedFailedMessage","inProgress","readyToUploadMessage","pauseUpload","pause","resume","retry","fileUploadCancel","invalidFileSelection","totalFiles","formRendered","isPureReactComponent","directoryUpload","renderBrowseButton","initializeUpload","isPreloadFiles","wireActionButtonEvents","serverActionButtonsEventBind","unwireActionButtonEvents","uploadButtonClick","clearButtonClick","uploadText","clearText","dropAreaWrapper","setDropArea","clearData","files_1","fileData","rawFile","validationMessages","minSize","maxSize","statusCode","allowUpload","showFileList","sequentialUpload","dropTextArea","dropArea","dropZoneElement","enableDropText","createDropTextHint","bindDropEvents","fileDropArea","uploadStyle","newAttr","createAttribute","setAttributeNode","checkAutoUpload","sequenceUpload","isFileListCreated","updatedOldCssClass","browseButtonClick","onSelectFiles","resetForm","metaData","getCurrentMetaData","abortUpload","resumeUpload","chunkUpload","removeFiles","fileInfo","targetMetaData","dragHover","onDragLeave","onPasteFile","onDragEnter","dropEffect","dataTransfer","clipboardData","pasteFile","kind","renderSelectedFiles","getAsFile","getSelectedFiles","liElement","allFiles","getFilesData","nameElements","formUpload","isFormUpload","getFilesInArray","spinnerTarget","uploadSequential","checkActionComplete","removeFilesData","getLiElement","removeUploadedFile","removeDirectly","ajax","asyncSettings","removeUrl","emitError","formData","FormData","beforeSend","currentRequest","httpRequest","removingEventCallback","onLoad","removeCompleted","onError","removeFailed","send","postRawFile","updateFormData","customFormData","customData","updateCustomheader","request","setRequestHeader","response","getResponse","readyState","updateStatus","statusElement","getFilesFromFolder","filesEntries","validDirectoryUpload","checkDirectoryUpload","webkitGetAsEntry","isFile","files_2","fileObj","fullPath","traverseFileTree","directoryReader","createReader","readFileFromDirectory","readEntries","entries","pushFilesEntries","targetFiles","sortFilesList","sortFileList","getBase64","fileReader","readAsDataURL","onerror","directory","isModified","modifiedFilesData","progressInterval","updateInitialFileDetails","sanitizeFile","beforeSanitize","sanitizeFileName","serializeValue","currentFileName","isUTF8","htmlTagRegex","hasHTMLString","encodedFileName","checkExtension","_internalRenderSelect","getFileType","webkitRelativePath","fileDetails","validatedFileSize","fileSource","dataFiles","updateSortedFileList","allowFormUpload","saveUrl","singleUpload","previousListClone","added","oldList","createParentUL","isBlank","dropFiles","extensions","extensions_1","extension","fileSize","minSizeError","maxSizeError","minFileSize","maxFileSize","isPreLoadFile","isPreload","createCustomfileList","fileData_1","listItem","listElement","uploadTemplateFn","templateComplier","liTempCompiler","fromElements","eventsArgs","formFileList","statusMessage","fileContainer","fileData_2","fileNameEle","getFileNameOnly","fileTypeEle","fileType","rtlContainer","truncateName","formValidateFileInfo","setListToFileInfo","infoEle","bytesToSize","getFileSize","createFormInput","iconElement","mergeFileInfo","addInvalidClass","typeValidationMessage","fileData_3","fileData_4","fileNames","fileData_5","statusForFormUpload","fileData_6","formCustomFileList","createFileList","fileData_7","textContainer","fileExtension","preventActionComplete","getSlicedName","nameElement","dataset","tail","fileData_8","setInitialAttributes","filterfileList","filterFiles","updateLiStatus","createProgressBar","progressbarWrapper","progressBar","progressbarInnerWrapper","progressbarText","updateProgressbar","loaded","changeProgressValue","progressValue","uploadInProgress","customUI","cancelUploadingFile","updateProgressBarClasses","iconEle","ajax_1","removecanceledFile","renderFailureState","requestResponse","removeProgressbar","deleteIcon","pauseButton","retryElement","reloadcanceledFile","uploadComplete","raiseSuccessEvent","uploadFailed","statusText","getAllResponseHeaders","withCredentials","spinnerEle","raiseActionComplete","getSelectedFileStatus","matchFiles","matchFilesIndex","selectFileIndex","selectedFileData","fileDataIndex","callType","animateProgressBar","uploadTemplate","exception","isMutiple","fileIndex","chunkSize","chunkIndex","retryCount","sendRequest","totalChunk","async","contentType","chunkUploadComplete","onUploadProgress","chunkUploadInProgress","currentChunkIndex","uploadingEventCallback","chunkUploadFailed","eventCancelByArgs","removeIcon","checkChunkUpload","updateMetaData","sendNextRequest","name_2","removeChunkFile","removeChunkProgressBar","pauseIcon","chunkCount","cancelButton","retryRequest","retryAfterDelay","file_1","failureMessage","checkPausePlayAction","retryUpload","fromcanceledStage","clearIcon","progressVal","totalChunks","abortIcon","sortedFileNames","sortedFilesData","sortedFileNames_1","name_3","attributes_2","uploadFiles_1","uploadFiles","serverReadFileBase64","totalCount","contents","uploadFileCount","getFileRead","fileCount","getFileInfo","uploadFilesRequest","chunkEnabled","name_4","spliceFiles","liIndex","beforeEventArgs","removingFiles","isLiRemoved","removingFiles_1","validUrl","fileUploadedIndex","removeFiles_1","fileDataFiles","pauseUploading","getFiles","resumeFiles","retryFailedFiles","cancelingFiles","cancelUpload","showHideUploadSpinner","FilesDirective","FilesPlugin","UploadedFilesDirective","UploadedFilesPlugin","UploaderComponent","UploaderPlugin","enIe","isModelChanged","aria","sortedColumn","getSortedColsIndexByField","sCol","getSortColumnFromField","lastSortedCol","backupSettings","removeSortIcons","updateSortedCols","lastSortedCols","lastCols","restoreSettings","refreshSortSettings","addSortIcons","refreshSortIcons","gObj_1","initiateSort","showPopUp","enableSortMultiTouch","allowUnsort","updateAriaAttr","CLS_TAB","CLS_HEADER","CLS_BLA_TEM","CLS_CONTENT","CLS_NEST","CLS_ACTIVE","CLS_FOCUS","CLS_ICONS","CLS_ICON","CLS_ICON_TAB","CLS_ICON_CLOSE","CLS_CLOSE_SHOW","CLS_TEXT","CLS_INDICATOR","CLS_WRAP","CLS_TEXT_WRAP","CLS_TAB_ICON","CLS_TB_ITEMS","CLS_TB_ITEM","CLS_TB_POP","CLS_TB_POPUP","CLS_HOR_NAV","CLS_POPUP_OPEN","CLS_POPUP_CLOSE","CLS_PROGRESS","CLS_IGNORE","CLS_HSCRCNT","CLS_VSCRCNT","CLS_VTAB","CLS_VLEFT","CLS_VRIGHT","CLS_HBOTTOM","CLS_FILL","TABITEMPREFIX","CLS_REORDER_ACTIVE_ITEM","TabActionSettings","TabAnimationSettings","TabItem","Tab","isIconAlone","draggableItems","tbObj","expTemplateContent","cntEle","btnCls","hdrEle","tbItems","tbItem","tbPop","prevItem","bdrLine","dragItem","draggingItems","nested","prevIndex","isNested","isPopup","initRender","isSwiped","itemIndexArray","allowDragAndDrop","dragArea","updatePopAnimationConfig","tabId","renderContainer","refreshActiveBorder","setOrientation","headerPlacement","renderHeader","scrCnt","scrCntClass","setContentHeight","hdrPlace","tabItems","getTabHeader","addVerticalClass","hdrItems","tabItems_1","parseObject","setCloseButton","showCloseButton","toolbarHeader","hdrItem","reRenderItems","maxId","isReplace","idList_1","getIndexFromEle","txtWrapEle","tItems","spliceArray","tbId","hidden","tHtml","txtEmpty","headerTextCompile","tCont","wrapAttrs","attrObj","tItem","spliceItemIndex","removeActiveClass","tabHeader","checkPopupOverflow","isOverflow","ripEle","actEleId","prevEle","trg","prevCtnAnimation","triggerPrevAnimation","oldCnt","animateObj","triggerAnimation","itemCollection","prevActiveEle","newCnt","getTrgContent","extIndex","idNo","isPrevent","openEff","clsEff","setActiveBorder","trgParent","trgIndex","getEleIndex","selectTab","eleStr","templateCompile","compileElement","templateFUN","eleVal","no","findEle","tbPos","place","activeTab","changeToolbarOrientation","curActItem","headerPos","contentPos","heightAdjustMode","trgHdrEle","reorderActiveTab","bar","tbHeight","tbWidth","skipDataBind","serverDataBind","trg_1","eleTrg","refreshItemVisibility","previousItem","previousIndex","selectedContent","selectingID","selectEventArgs","tbPopObj","bindDraggable","initializeDrag","spaceKeyDown","tabKeyModule","nestedTab","clstHead","actEle","nxtSib","scrBar","scrStart","scrEnd","eleStart","eleEnd","eleViewRange","closeButtonTitle","evalOnPropertyChangeItems","selectElement","changedProp","oldVal","cntItem","clearTabTemplate","isHiddenEle","strVal","clearTemplates","dragObj","itemDragStart","dropIndex","dropItem","dragIndex","dragArgs","draggedItem","droppedItem","scrollRightNavEle","scrollLeftNavEle","hscrollBar","scrollContentWidth","isSameNode","dragAction","droppedIndex","itemDragStop","tabItemDragArgs","intDestroy","dragsIndex","popupContainer","lastEle","dragStopArgs","tabItemDropArgs","addedItems","addingTabContent","tabAddingArgs","lastEleIndex","tabItems_2","textValue_1","removeArgs","removedItem","removedIndex","tabRemovingArgs","targetEleIndex","cntTrg","selectingItem","selectingIndex","selectingContent","selectArgs","detachContent","mainContents","txtString","conte","crElem","txtWrap","tConts","wrapAtt","wraper","VERTICAL","DropDownButton","isPopupCreated","openPopUp","createPopupOnClick","getULElement","dropDown","getTargetElement","popupContent","isColorPicker","appendItems","hasIcon","createAnchor","beforeDisabled","afterDisabled","getPopUpElement","appendArrowSpan","setActiveElem","activeElem","attrList","popupUnWireEvents","destroyPopup","dropDownBtn","delegateMousedownHandler","mousedownHandler","popupWireEvents","closeActionEvents","focusoutHandler","triggerSelect","liTarget","popupElem","splitButton","appendReactElement","beforeOpenArgs","wrapperWidth","popupRect","popupLeft","openArgs","btnModel","arrowSpan","km","DoubleRange","mStart","mEnd","isValDiff","makechanges","et","enIn","resizeClassList","suppress","Resize","tapped","isDblClk","resizeProcess","findColumn","newarray","resizeColumn","footerTable","footerTextClone","contentDivTag","footerDivTag","headerTextClone","contentTextClone","columnIndexByField","indentWidthClone","detailsElement","contentText","footerText","wHeader","wFooter","wContent","columnbyindex","colMaxWidth","calcTableWidth","contentwidth","refreshResizefrzCols","adaptiveClass","offsetWidthValue","refreshHeight","setHandlerHeight","getResizeHandlers","touchResizeStart","callAutoFit","getTargetColumn","refreshColumnWidth","refreshStackedColumnWidth","parentElementWidth","appendHelper","getPointX","minMove","removeHelper","cancelResizeAction","resizeEnd","resizing","updateCursor","removeEvents","updateResizeEleHeight","getColData","refreshResizeFixedCols","isAutoFitCol","frzHdrRefresh","width_2","columnsRight","refreshGroupCaptionRow","capRow","getParticularCol","setHelperHeight","finalColumns","getSubColumns","calulateColumnsWidth","finalColumns_1","updateHelper","subColumns","cTable","isFrozenColResized","doubleTapEvent","getStackedWidth","headerRows_1","calcPos","doc","ownerDocument","timeoutHandler","HIDE_CLEAR","TEXTBOX_FOCUS","TextBox","isHiddenInput","inputPreviousValue","textboxOptions","textboxWrapper","respectiveElement","prevOnChange","multiline","textarea","autocomplete","apiAttributes","attrs_1","autoCompleteTxt","getInputValidClassList","initialValue","setInitialValue","inputClassName","animationHandler","resetValue","textboxObj","interaction","resetInputHandler","pt","mimeType","getMimeType","downloadLink","hasDownloadAttribute","isPopupBlocked","onloadend","paIn","Encoding","includeBom","emitBOM","initBOM","getByteCount","chars","validateNullOrUndefined","byte","utf8Len","getByteCountInternal","codePoint","isHighSurrogate","codeUnit","toCodepoint","highCodeUnit","lowCodeUnit","charIndex","charCount","byteCount","isUtf8","charCode","RangeError","getBytesOfUtf8Encoding","getBytesOfUnicodeEncoding","getBytesOfAnsiEncoding","getString","byteCal","getStringOfUtf8Encoding","byteUnicode","getStringofUnicodeEncoding","bufview","charcode","uint16","byteUni","byte16","gd","ContextMenu","nl","DataLabel","errorHeight","initPrivateVariables","commonId","calculateErrorHeight","chartBackground","positiveHeight","negativeHeight","rgbValue","contrast","labelLocation","yAxisInversed","isDataLabelOverlap","showZero","labelLength","shapeRect","enableRotation","argsFont","fontBackground","isDataLabelShape","createDataLabelTemplate","calculateTextPosition","visibleAxisLabelRect","rectRegion","actualRect","isDataLabelOverlapWithChartBound","isShape","textAnchor","loc1","loc2","loc3","loc4","clipWidth","clipHeight","vAxis","hAxis","labelRegion","getLabelLocation","alignmentValue","calculateAlignment","calculateRectPosition","calculatePathPosition","calculatePolarRectPosition","dataLabelOutRegion","columnRadius","chartWidth","alignmentSign","extraSpace","calculateRectActualPosition","calculateTopAndOuterPosition","seriesLength","nextSeries","nextSeriesPoint","calculatePathActualPosition","labelRect","isOverLap","finalPosition","actualPosition","updateLabelLocation","yLocation","positionIndex","slope","intersectY","shapeElements","textNode","Legend","legendItemsId_1","visibleSeriesCollection","visibleSeriesCollection_1","legendShape","legendImageUrl","extraHeight","extraWidth","verticalArrowSpace","titleSpace","legendEventArgs","rowWidth","columnHeight","columnCount","titlePlusArrowSpace","getLegendHeight","prevLegend","previousBound","isWithinBounds","availwidth","LegendClick","changeDetection","legendClickArgs","legendText","changeSeriesVisiblity","refreshLegendToggle","redrawSeriesElements","refreshSeries","series_1","legendRegion","legendItemsId_2","checkWithinBounds","cRender","canvasRect","canvasPageUp","canvasPageDown","xPseudo","se"],"mappings":"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CA,mBACA,iCACA,oEACA,mEACA,yEACA,oDACA,2CACA,uBACA,kBAEA,OADA,kCACA,GAEA,gBACA,gBAEA,mBACA,aAEA,kBACA,cACA,gEACA,8BACA,sEACA,+FACA,+BACA,wBACA,kBACA,mBACA,mBACA,eACA,sHAEA,YAEA,wBAEA,qBACA,wBACA,OACA,YACA,8GACA,qCAMA,gBAGA,qBACA,kBAEA,OADA,kCACA,GAEA,gBACA,gBAEA,mBACA,aAEA,kBACA,cACA,4BACA,sEACA,+FACA,6BACA,wBACA,kBACA,qBAEA,gBAGA,mBACA,kBAEA,OADA,kCACA,GAEA,gBACA,gBAEA,mBACA,aAEA,kBACA,cACA,+HACA,0BACA,sEACA,+FACA,2BACA,wBACA,kBACA,mBACA,mBACA,0BACA,mDACA,oDAEA,qDACA,oDAIA,gBAIA,gBACA,kBAEA,OADA,kCACA,GAEA,gBACA,kBAEA,mBACA,aAEA,kBACA,cACA,qBACA,kCACA,YAEA,6BACA,mBACA,4BACA,sHACA,0BAEA,OACA,YACA,8GACA,kCAIA,aACA,aAEA,gBAIA,gBAGA,iBACA,kBAEA,OADA,qCACA,GAEA,gBACA,gBAEA,mBACA,aAEA,kBACA,eACA,wCACA,wBACA,qCACA,eAGA,gBAIA,gEACA,cACA,qBACA,2BACA,gBACA,eACA,uEACA,eAEA,eACA,QACA,yBACA,WACA,cAGA,kBACA,QACA,yBACA,WACA,cAGA,iCACA,4BACA,wCACA,qCACA,0CACA,oCAEA,mCACA,cACA,yCACA,aACA,YACA,4BACA,8CAGA,aACA,CACA,cACA,YACA,4BACA,6CAEA,kBAEA,oBACA,cAOA,iBACA,kCAIA,SACA,4BACA,+BAEA,uBACA,iBAEA,sBACA,iBAEA,2BACA,yBAEA,uBAUA,WAEA,yBACA,+BACA,oCACA,0BAEA,qCACA,2CAGA,gCACA,wHACA,eACA,OACA,YACA,8GACA,mCAIA,iCACA,4HACA,iCACA,+BACA,+CACA,qBACA,mBACA,uDACA,kKACA,2FAEA,sEACA,eACA,CACA,4BAEA,0BACA,CACA,CACA,kIAEA,sUACA,sTAGA,4CACA,YACA,wBACA,kFACA,oFAGA,+EACA,sFAGA,0BACA,mCAEA,wBAEA,uBACA,+DACA,sBACA,sBACA,4BACA,wBACA,8BACA,oCACA,0BACA,oCACA,yCACA,uCACA,2BACA,wBACA,8BAEA,OACA,YACA,8GACA,mCAIA,yBACA,oCAEA,4CAEA,6CAEA,2DAEA,gCACA,8BAEA,4CAEA,6CAGA,wBAEA,GADA,sBACA,2BAEA,kCACA,sDACA,qDAIA,kDACA,gDAaA,GARA,uBAEA,uDAEA,0BAEA,uDAEA,mDACA,kDACA,2EACA,2CACA,yDAEA,uDADA,2CAGA,wDAEA,yDAEA,8DAHA,2CAKA,qDAEA,6DADA,2CAGA,4DAEA,0DAEA,2DAEA,yDAEA,mDAPA,2CASA,sDAEA,oDAEA,qDAHA,2CAKA,2DACA,6CAKA,sCAEA,GADA,oCACA,2BAEA,mCAEA,sDACA,gDAGA,aACA,aACA,aACA,aACA,aACA,aACA,kBAEA,CACA,kDACA,gDAIA,aACA,aACA,aACA,aACA,aACA,aACA,cAqDA,GA9CA,gCAEA,0BACA,yIACA,2BACA,uBACA,iBACA,wCAEA,mEACA,2GACA,qGAKA,kBACA,+HACA,2BACA,uBACA,iBACA,wCAEA,mEACA,2GACA,qGAKA,8BACA,oJACA,2BACA,uBACA,iBACA,wCAEA,mEACA,2GACA,iGAOA,oDAEA,8BACA,OAEA,cAGA,sBACA,qBACA,oCACA,wBACA,cACA,iBACA,6CAKA,kDACA,2EACA,2CACA,yDAEA,uDADA,2CAGA,wDAEA,yDAEA,8DAHA,2CAKA,qDAEA,6DADA,2CAGA,4DACA,2CACA,qCACA,0DAGA,0DAEA,2DAEA,yDAEA,mDARA,4CAUA,sDAEA,oDAEA,wDAHA,4CAOA,uBAEA,0BACA,sCACA,uDAGA,oDACA,kDACA,sCAKA,oDACA,kDACA,qDAKA,0BACA,wBACA,wDAEA,0BACA,mCACA,mCACA,iCAEA,+BAEA,gCACA,8DACA,6BACA,0CACA,iCACA,gCACA,kFACA,8EAIA,iCACA,+GACA,qBACA,oCACA,OACA,YACA,8GACA,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,QAAUu8F,EAAIgmF,iBAAiB,UAAY,YAAY96J,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,wBAAwB,QAAUu8F,EAAIimF,gBAAgB,UAAY,YAAY/6J,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,MAAM,QAAUu8F,EAAIkmF,WAAW,UAAY,aAAa,IAAI,IAAI,SAASlmF,EAAIijF,GAAG,MACxvS,EAAkB,CAAC,WAAa,IAAIjjF,EAAInxG,KAASoxG,EAAGD,EAAIE,eAAmBh1E,EAAG80E,EAAIG,MAAMj1E,IAAI+0E,EAAG,OAAO/0E,EAAG,MAAM,CAACznB,MAAM,CAAC,GAAK,yBAAyB,CAACynB,EAAG,MAAM,CAACznB,MAAM,CAAC,GAAK,yB,gMCoJhL,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBAEA,OACA,6BACA,qBAEA,gBACA,OACA,QACA,UACA,cACA,gBACA,WACA,iBACA,qBACA,oBACA,iBACA,cACA,gBACA,WACA,qBACA,6BACA,oBACA,gBACA,mBACA,YACA,gBACA,oBACA,gCACA,oCACA,iCACA,sEACA,iDACA,cACA,CACA,8BACA,sBACA,mBACA,YACA,aAEA,CACA,mBACA,mBACA,mBACA,YACA,cAGA,aACA,CACA,6BACA,sBACA,mBACA,YACA,aAEA,CACA,kBACA,mBACA,mBACA,YACA,cAGA,YACA,CACA,iBACA,mBACA,mBACA,YACA,aAEA,CACA,iBACA,mBACA,mBACA,YACA,cAGA,kBACA,CACA,uBACA,mBACA,mBACA,YACA,aAEA,CACA,uBACA,mBACA,mBACA,YACA,cAGA,iBACA,CACA,sBACA,mBACA,mBACA,YACA,aAEA,CACA,sBACA,mBACA,mBACA,YACA,cAGA,YACA,CACA,2BACA,mBACA,mBACA,YACA,aAEA,CACA,gCACA,eACA,mBACA,YACA,gBAMA,UACA,sBACA,sGAGA,mBACA,gBACA,oDAEA,gBACA,8CACA,WACA,gBACA,wBACA,qBAEA,2DACA,uDACA,8CACA,4BACA,wBAEA,SACA,kCACA,2DACA,uDAEA,sBACA,iNACA,oFACA,8BACA,2DACA,0DACA,OACA,YACA,2DACA,uDACA,8GACA,mCAKA,kCAEA,uCASA,wDACA,0DAEA,yCAEA,6BACA,sBACA,sCAEA,wDACA,0CAKA,sCACA,2DACA,uDACA,gDACA,iNACA,oFACA,8BACA,2DACA,0DACA,OACA,YACA,2DACA,uDACA,8GACA,mCAMA,gCAIA,IAFA,uCACA,KACA,mBACA,cACA,QAKA,GAFA,uDACA,2DACA,UACA,mDACA,4CACA,qFACA,CACA,kCACA,oBACA,UAEA,2DACA,wDAKA,gCAGA,IAFA,uCACA,KACA,mBACA,cACA,QAKA,GAFA,2DACA,uDACA,UACA,mDACA,4CACA,qFACA,CAEA,kCACA,oBACA,UAEA,2DACA,wDAEA,sCACA,2FACA,kBACA,SACA,2DACA,2CACA,4BACA,sDAEA,qCAGA,yBACA,kDACA,uEAGA,kDAEA,wBAEA,iDACA,8EAEA,qDAGA,mBACA,mEACA,2DAKA,mCAEA,SACA,oBACA,eACA,kDAEA,UAIA,sCAEA,SACA,oBACA,eACA,oFAEA,UAEA,yCACA,uDAEA,8OACA,kBACA,mDACA,gBACA,uDAEA,2DACA,qBACA,mBACA,2BACA,qBACA,wCACA,8CACA,wGACA,wBAGA,gDAGA,sEAGA,mBAEA,uDACA,2DACA,aACA,uDACA,gDAIA,+BACA,sBACA,yBAEA,4BACA,cACA,qBACA,UACA,uBACA,iBACA,iBACA,kCACA,eAGA,0BACA,kHACA,oDACA,kFACA,2CACA,8JACA,qDACA,uMACA,0DAGA,uBACA,mDACA,gBACA,0DChiB8W,I,wBCQ1WkpC,EAAY,eACd,EACA,EACA,GACA,EACA,KACA,KACA,MAIa,EAAAA,E,QCnBX,EAAS,WAAa,IAAIqzD,EAAInxG,KAASoxG,EAAGD,EAAIE,eAAmBh1E,EAAG80E,EAAIG,MAAMj1E,IAAI+0E,EAAG,OAAO/0E,EAAG,OAAO,CAACA,EAAG,OAAO,CAACznB,MAAM,CAAC,IAAM,KAAK,CAACynB,EAAG,MAAM,CAACk1E,YAAY,4BAA4BC,YAAY,CAAC,QAAU,OAAO,SAAW,aAAa,CAACn1E,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F,YAAY,UAAY,YAAY56J,EAAG,WAAW,CAACznB,MAAM,CAAC,WAAa,MAAM,QAAUu8F,EAAI+lF,WAAW,UAAY,YAAY76J,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,YAAY,QAAUu8F,EAAIgmF,iBAAiB,UAAY,aAAa,IAAI,IAAI,MAAM,IAChjO,EAAkB,G,mWC4GtB,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,mBACA,QACA,cAEA,8BACA,kIACA,qBAEA,OACA,YACA,8GACA,mCAKA,gBACA,OAEA,aACA,YAEA,aACA,mDACA,6EACA,iCACA,0BACA,2BACA,6BACA,4BACA,2BACA,oBACA,mBACA,sBACA,qBACA,oBACA,sBACA,qBACA,wBACA,uBACA,sBACA,wBACA,6CACA,YACA,UACA,cACA,gBACA,WACA,iCACA,WACA,oCACA,eACA,yCACA,oBACA,mBACA,YACA,cAEA,cACA,CACA,yCACA,oBACA,mBACA,YACA,aAEA,CACA,8BACA,sBACA,mBACA,YACA,aAEA,CACA,mBACA,mBACA,mBACA,YACA,aAEA,CACA,mBACA,mBACA,mBACA,YACA,cAGA,aACA,CACA,wCACA,oBACA,mBACA,YACA,aAEA,CACA,6BACA,sBACA,mBACA,YACA,aAEA,CACA,kBACA,0BACA,mBACA,YACA,aAEA,CACA,kBACA,mBACA,mBACA,YACA,cAGA,YACA,CACA,iBACA,mBACA,mBACA,YACA,aAEA,CACA,iBACA,mBACA,mBACA,YACA,cAGA,kBACA,CACA,uBACA,mBACA,mBACA,YACA,aAEA,CACA,uBACA,mBACA,mBACA,YACA,aAEA,CACA,sBACA,sBACA,mBACA,YACA,cAGA,oBAGA,SACA,6BACA,6BACA,4EAGA,4BACA,kHACA,wCACA,UACA,sCAOA,8BACA,4CACA,gBACA,iEAGA,yBACA,sBACA,oHACA,8CAIA,8BACA,uCACA,mDACA,kBAGA,gCAEA,4BACA,kBAGA,uBACA,WAEA,gCACA,sDACA,uDAEA,2JACA,+DACA,gDACA,oCACA,sCACA,0CACA,wCACA,sCAGA,mBACA,qBACA,6BACA,qEAEA,wBAGA,mDAKA,sEAIA,kDAEA,yDAEA,yCAEA,8DAEA,8CAEA,8DAEA,8CAEA,8DAEA,+CAKA,6CAKA,kKACA,sDACA,0DAGA,OACA,YACA,sDACA,uDACA,8GACA,mCAKA,iCAEA,oEAEA,MAEA,kLACA,iRACA,sRACA,iRACA,2RAEA,+BACA,gCACA,kCACA,gCACA,mCAIA,8BACA,2FACA,8FACA,oGACA,iGACA,+FACA,8BACA,uFACA,0FACA,gGACA,6FACA,2FACA,8BACA,uFACA,0FACA,gGACA,6FACA,2FACA,yBACA,sFACA,yFACA,+FACA,4FACA,0FACA,8BACA,2FACA,8FACA,oGACA,iGACA,gGAEA,0FACA,6FACA,mGACA,gGACA,8FAEA,+BACA,gCACA,kCACA,gCACA,mCAKA,0BAEA,wCACA,gCAIA,0CAEA,QACA,gCAEA,iCACA,2BACA,mCACA,iCACA,0DAEA,mCACA,+BACA,yDAGA,6JACA,oDACA,kFACA,2CACA,8JACA,qDACA,gKACA,0DAGA,6BACA,sDACA,uDACA,6DACA,4HACA,wUACA,8BACA,sDACA,0DAEA,OACA,YACA,8GACA,+BACA,sDACA,2DAIA,0BACA,0BAGA,mBACA,gBACA,+CAEA,gBACA,8CACA,WACA,gBACA,wBACA,qBAEA,iBACA,UACA,yBACA,qGAEA,qBACA,uGAGA,SACA,6EACA,yHCzhByW,MCQrW,I,UAAY,eACd,GACA,EACA,GACA,EACA,KACA,KACA,OAIa,M,QCnBX,GAAS,WAAa,IAAIhmF,EAAInxG,KAASoxG,EAAGD,EAAIE,eAAmBh1E,EAAG80E,EAAIG,MAAMj1E,IAAI+0E,EAAG,OAAO/0E,EAAG,MAAM,CAACk1E,YAAY,OAAO,CAACl1E,EAAG,MAAM,CAACznB,MAAM,CAAC,GAAK,mBAAmBynB,EAAG,MAAM,CAACk1E,YAAY,eAAe,CAACl1E,EAAG,MAAM,CAACk1E,YAAY,OAAO,CAACl1E,EAAG,MAAM,CAACk1E,YAAY,iBAAiB,CAACl1E,EAAG,mBAAmB,CAACigC,IAAI,gBAAgB1nD,MAAM,CAAC,G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A,mBACA,YACA,aAEA,CACA,eACA,kBACA,mBACA,YACA,cAGA,aACA,CACA,iBACA,mBACA,mBACA,YACA,aAEA,CACA,iBACA,mBACA,mBACA,YACA,aAEA,CACA,gBACA,kBACA,mBACA,YACA,cAGA,aACA,CACA,iBACA,mBACA,mBACA,YACA,aAEA,CACA,iBACA,mBACA,mBACA,YACA,aAEA,CACA,gBACA,kBACA,mBACA,YACA,cAGA,gBACA,CACA,oBACA,mBACA,mBACA,YACA,aAEA,CACA,oBACA,mBACA,mBACA,YACA,aAEA,CACA,mBACA,kBACA,mBACA,YACA,cAGA,aACA,CACA,iBACA,mBACA,mBACA,YACA,aAEA,CACA,iBACA,mBACA,mBACA,YACA,aAEA,CACA,gBACA,kBACA,mBACA,YACA,cAGA,YACA,CACA,gBACA,mBACA,mBACA,YACA,aAEA,CACA,gBACA,mBACA,mBACA,YACA,aAEA,CACA,eACA,kBACA,mBACA,YACA,cAGA,oBACA,CACA,wBACA,mBACA,mBACA,YACA,aAEA,CACA,uBACA,kBACA,mBACA,YACA,cAGA,WACA,oCACA,oBAKA,SACA,6BACA,kDACA,6BACA,4CAGA,uCACA,2HACA,6CAEA,iCACA,mBACA,kDACA,kEAGA,uCACA,2HACA,8CAEA,+BAGA,2BAGA,iCACA,gBACA,oCACA,UAEA,cADA,EACA,0GAEA,sGAKA,gBACA,gCACA,UAEA,cADA,EACA,0GAEA,sGAKA,gBACA,gCACA,UAEA,cADA,EACA,0GAEA,sGAIA,gBACA,mCACA,UAEA,cADA,EACA,0GAEA,uGAOA,uCACA,uDACA,sDACA,oKACA,0BACA,yDACA,0CACA,0DACA,kCACA,kCACA,wCACA,gCACA,0CACA,kCACA,qBACA,QACA,cAEA,gBAEA,kDACA,2HACA,2BACA,0DACA,mBACA,yDACA,uDACA,YACA,+CAIA,oCACA,yDACA,uDACA,qJACA,8BACA,yDACA,0DACA,OACA,YACA,yDACA,uDACA,8GACA,mCAIA,kCAGA,4BACA,cACA,qBACA,UACA,uBACA,iBACA,iBA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,MAAQ,gBAAgB,UAAY,QAAQ,SAAU,EAAM,WAAa,aAAa,KAAO,SAAS,OAAS,QAAQynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,gBAAgB,UAAY,QAAQ,SAAU,EAAM,WAAa,aAAa,KAAO,SAAS,OAAS,SAAS,IAAI,IAAI,QAAQ,IAC9qd,GAAkB,G,wqBC2KtB,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,mBACA,QACA,cAEA,gBACA,0BAEA,aACA,0DACA,eACA,uBACA,kCACA,uCACA,yDACA,aACA,iCACA,KACA,CACA,2BACA,sBACA,2BAEA,oBACA,mBACA,aACA,eACA,gBACA,mBACA,sBACA,wBACA,mDACA,6CACA,6EACA,SACA,oBAEA,MACA,MACA,QACA,yBACA,iCACA,cACA,gBACA,oBACA,iCACA,WACA,4BACA,wCACA,qCACA,0CACA,oCACA,cACA,qBACA,SACA,YACA,uHAEA,gBACA,WACA,uHAEA,aACA,CACA,cACA,YACA,sHACA,YACA,uHAEA,YACA,0BACA,mBACA,qBACA,gBACA,cACA,QACA,2BACA,2EACA,mCACA,4CACA,2BACA,IAGA,SAEA,kCACA,mDACA,yCACA,uDACA,gBAEA,wCAGA,gCACA,4HACA,+CACA,yCACA,uDACA,cACA,4BAIA,kCAEA,gFACA,yEACA,sOACA,oCAEA,4KACA,oDAEA,oCACA,0KACA,+CAGA,sCAGA,iCACA,oFACA,yEACA,kCACA,4KACA,sKACA,oLACA,oLAEA,yFAEA,gCACA,0KACA,0BAEA,sCAEA,uCACA,uCACA,4HACA,+CACA,yCACA,uDAEA,4BAIA,0BACA,yBAEA,4BACA,4HACA,+CACA,yCACA,uDAEA,2BAEA,oBAEA,yBACA,kBACA,4HACA,+CACA,yCAEA,mCAEA,oBAEA,0BACA,oCAEA,uBACA,WAEA,gCACA,4HACA,wBACA,yCACA,uDAEA,4BAIA,yCACA,sDACA,iCACA,uDACA,uDACA,oSACA,2EACA,uBACA,gBACA,sEACA,wBAEA,mDAIA,sEAEA,uDACA,0DAEA,OACA,YACA,uDACA,uDACA,8GACA,mCAIA,uBACA,6BACA,UACA,KACA,oDACA,WACA,oCACA,yCACA,mCACA,wBACA,yBACA,4DACA,6DACA,6DAEA,gCAEA,iCACA,qCACA,mCACA,wBACA,yBACA,wDACA,yDACA,yDAEA,2BAIA,eACA,CACA,SAEA,8BACA,8BAEA,YACA,YACA,cAGA,yBACA,MACA,2CAYA,OAVA,EADA,WACA,gCACA,aACA,kCACA,YACA,iCACA,cACA,mCAEA,iCAEA,GAEA,iCACA,WACA,kBACA,oBACA,sBACA,aACA,kBACA,oBACA,uBAEA,kBACA,oBACA,uBAGA,qBACA,uDACA,uDACA,6DACA,+UACA,8BACA,uDACA,0DAEA,OACA,YACA,8GACA,+BACA,2DAIA,0BACA,wBACA,wDAEA,yCACA,oFACA,yBACA,kBACA,qHAEA,qBACA,uIAGA,iCACA,kBACA,2HAEA,qBACA,gJAKA,mBACA,gBACA,gDAEA,gBACA,8CACA,WACA,gBACA,wBACA,qBAEA,kBACA,UACA,yBACA,iFAEA,yBACA,qGAEA,yBACA,uGAEA,mBACA,2BACA,8CAGA,SACA,6EACA,yHC9hBoX,MCQhX,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,OAIa,M,QCnBX,GAAS,WAAa,IAAIu8F,EAAInxG,KAASoxG,EAAGD,EAAIE,eAAmBh1E,EAAG80E,EAAIG,MAAMj1E,IAAI+0E,EAAG,OAAO/0E,EAAG,MAAM,CAACA,EAAG,KAAK,CAACk1E,YAAY,iCAAiC,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,gBAAgBnC,EAAIoC,GAAGpC,EAAIkpF,UAAUh+J,EAAG,kBAAkB,CAACznB,MAAM,CAAC,iBAAmBu8F,EAAImpF,oBAAoBj+J,EAAG,KAAK,CAACk1E,YAAY,6BAA6B,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,mBAAmBnC,EAAIoC,GAAGpC,EAAIrkD,aAAazwB,EAAG,cAAc,CAACznB,MAAM,CAAC,iBAAmBu8F,EAAImpF,oBAAoBj+J,EAAG,KAAK,CAACk1E,YAAY,6BAA6B,CAACl1E,EAAG,IAAI,CAAC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ACA,UACA,gBACA,CACA,oCACA,0BACA,mBACA,YACA,aAEA,CACA,+BACA,eACA,mBACA,YACA,cAGA,2EACA,oCACA,kBACA,uFACA,uBACA,OACA,kDACA,oGACA,gBACA,OACA,UAGA,SACA,kBACA,uDACA,2FACA,6BACA,YACA,yEACA,8BACA,gCACA,SACA,qCACA,6BACA,UACA,6BACA,0DACA,OACA,YACA,8FACA,+BACA,kEAYA,SACA,yBACA,gFACA,wHAQA,kCACA,4BACA,sBAGA,oCACA,uDACA,mNACA,kBACA,0DACA,yBACA,gCACA,qCAEA,mBAEA,+CACA,uEAEA,wBAEA,qDAIA,wEAEA,0DACA,mBACA,0DACA,uDACA,YACA,+CAKA,mCACA,0DACA,uDACA,+DACA,kTACA,8BACA,0DACA,0DACA,OACA,YACA,0DACA,uDACA,8GACA,mCAIA,gCACA,uDACA,0EAGA,4BACA,cACA,qBACA,UACA,uBACA,iBACA,iBACA,kCACA,eAGA,0BACA,iDACA,qDAEA,2BACA,oEAGA,mCACA,sBACA,sHACA,gBACA,yEAEA,OACA,YACA,0DACA,uDACA,8GACA,mCAKA,2BACA,qCAEA,0BACA,qCAGA,mBACA,gDACA,gBACA,WAEA,kBACA,gBACA,8CACA,WACA,gBACA,wBACA,qBAEA,uDACA,oBACA,6BAEA,UACA,2BACA,sGAGA,SACA,mDC/R6W,MCQzW,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,OAIa,M,QCnBX,GAAS,WAAa,IAAIu8F,EAAInxG,KAASoxG,EAAGD,EAAIE,eAAmBh1E,EAAG80E,EAAIG,MAAMj1E,IAAI+0E,EAAG,OAAO/0E,EAAG,MAAM,CAACznB,MAAM,CAAC,GAAK,gBAAgB,CAACynB,EAAG,MAAM,CAACk1E,YAAY,UAAU,CAACl1E,EAAG,MAAM,CAACk1E,YAAY,MAAMC,YAAY,CAAC,QAAU,MAAM58F,MAAM,CAAC,GAAK,gBAAgB,CAACynB,EAAG,MAAM,CAACk1E,YAAY,YAAY,CAACl1E,EAAG,MAAM,CAACk1E,YAAY,YAAY,CAACl1E,EAAG,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,6BACA,yKAGA,kCACA,mBACA,oDACA,+LAGA,gCACA,4HACA,gDAEA,4JAGA,6BACA,uBACA,6BACA,yBACA,4BACA,4BACA,MACA,MAIA,IAFA,QAEA,cACA,UACA,qCACA,wCACA,IAEA,6CAEA,iCACA,4HACA,uCACA,oDAEA,4JAGA,yBACA,4HAEA,4BACA,4HACA,+EACA,gDAEA,kHAGA,yBACA,4HACA,gDAEA,kIAGA,iCACA,4HACA,gDAEA,4JAIA,gDACA,sDACA,0DACA,uDACA,6NACA,sJACA,kBACA,mBACA,eACA,mBACA,2BACA,qBAEA,sEACA,wBAEA,oDAIA,uEAEA,kDAEA,0DACA,0DACA,mBACA,0DACA,uDACA,YACA,+CAIA,qBACA,0DACA,uDACA,oDACA,6PACA,8BACA,0DACA,0DAEA,OACA,YACA,8GACA,+BACA,0DACA,2DAIA,sBAMA,aALA,iCACA,mCACA,+BACA,2BAEA,mBACA,OACA,SACA,+CAEA,WACA,gCAIA,aADA,4BACA,oBACA,GACA,SACA,gDAEA,YACA,iCAwBA,wEACA,kBACA,eACA,CAIA,iBACA,kBAIA,aAEA,eACA,CAIA,0BACA,mBAOA,eACA,CAIA,yBACA,kBAEA,iBACA,WACA,cAIA,YACA,2BACA,4BACA,0BACA,wBACA,cACA,4BAEA,oEACA,wBACA,cACA,8BAKA,8BACA,4BACA,yCAEA,4BAEA,+BACA,6BACA,0CAEA,6BAEA,6BACA,2BACA,wCAEA,2BAEA,sBAIA,IAHA,gDACA,WACA,KACA,aACA,WACA,KAEA,aAEA,WADA,gCACA,IAEA,IAEA,UAEA,8BAGA,4BACA,cACA,qBACA,UACA,uBACA,iBACA,iBACA,qCAGA,6BAKA,UACA,oBACA,kHAEA,0BACA,qGAEA,yBACA,uGAGA,SACA,uCAEA,mBACA,2BACA,+CC9dqX,MCQjX,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,OAIa,M,QCnBX,GAAS,WAAa,IAAIu8F,EAAInxG,KAASoxG,EAAGD,EAAIE,eAAmBh1E,EAAG80E,EAAIG,MAAMj1E,IAAI+0E,EAAG,OAAO/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m1E,YAAY,CAAC,aAAa,SAAS,CAACn1E,EAAG,aAAa,CAACigC,IAAI,eAAe1nD,MAAM,CAAC,GAAK,eAAe,WAAY,GAAMshL,SAAS,CAAC,MAAQ,SAASC,GAAQ,OAAOhlF,EAAIqrF,cAAcrG,MAAW,CAAChlF,EAAImC,GAAG,6BAA6Bj3E,EAAG,aAAa,CAACm1E,YAAY,CAAC,cAAc,QAAQ58F,MAAM,CAAC,GAAK,kBAAkBshL,SAAS,CAAC,MAAQ,SAASC,GAAQ,OAAOhlF,EAAIsrF,YAAYtG,MAAW,CAAChlF,EAAImC,GAAG,gCAAgC,GAAGj3E,EAAG,MAAM,CAACznB,MAAM,CAAC,GAAK,uBACv3K,GAAkB,GCyGtB,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,yBACA,QACA,6BACA,qBAEA,gBACA,OACA,QACA,yCACA,gBACA,iBACA,eACA,mBACA,aACA,UACA,sBACA,WACA,uBACA,sBACA,oBACA,mBACA,oBACA,kBACA,uBACA,sBACA,qBACA,oBACA,wBACA,6CACA,eACA,qBACA,gBACA,iBACA,kBACA,kBACA,YACA,WACA,WACA,gIAGA,QACA,WACA,WACA,gIAGA,gBACA,WACA,kBACA,kIAEA,cACA,qBACA,UACA,mIAEA,aACA,CACA,eACA,iBACA,kIACA,mIAEA,WACA,yBACA,4EAEA,kBACA,WACA,2BACA,kBACA,eACA,kCACA,oBAIA,mBACA,0CACA,wCAEA,gBACA,mDAEA,gBACA,gDAEA,iDAEA,SACA,6BACA,mDACA,8BACA,4KACA,0KAGA,kCACA,mBACA,mDACA,iMACA,+LAIA,gCACA,4HACA,+CAEA,+JACA,4JAIA,uBACA,gCACA,YAGA,6BACA,uBACA,6BACA,yBACA,4BACA,4BACA,MACA,MAIA,IAFA,QAEA,cACA,UACA,qCACA,wCACA,IAEA,6CAEA,+BACA,4HACA,uCACA,SAEA,4JACA,yJAEA,yBACA,4HACA,+CACA,KAEA,qIAEA,kIAEA,4BACA,4HACA,+EACA,+CACA,KAEA,oHAEA,iHAEA,yBACA,SAEA,wHACA,+CACA,oIACA,iIAEA,qCACA,4HACA,wBACA,KAEA,8JACA,2JAKA,gDACA,sDACA,0DACA,uDACA,0HACA,4BACA,mBACA,yBACA,8CAIA,6NACA,sJACA,kBACA,mBACA,qBACA,mBACA,qCACA,eACA,kDACA,sEACA,0DACA,0DACA,mBACA,0DACA,uDACA,YACA,+CAIA,oDACA,sDACA,0DACA,uDACA,yOACA,sJACA,kBACA,+BAEA,wBACA,mDAIA,sEAEA,0DACA,uDACA,0BACA,sBACA,cACA,8BAEA,mBACA,0DACA,uDACA,YACA,+CAIA,qBACA,uDACA,0DACA,6DACA,8RACA,8BACA,0DACA,0DAEA,OACA,YACA,8GACA,+BACA,0DACA,2DAIA,sBAMA,aALA,iCACA,mCACA,+BAEA,4BACA,oBACA,OACA,SACA,gDAEA,YACA,iCAIA,qEACA,oBACA,eACA,CACA,iBACA,mBAGA,eACA,eACA,CACA,0BACA,mBAIA,YACA,eACA,CACA,oCACA,kBAEA,iBACA,WACA,cAIA,YACA,2BACA,4BACA,0BACA,wBACA,cACA,4BAEA,oEACA,wBACA,cACA,8BAEA,4BAKA,aAHA,uBAEA,yBACA,MACA,OACA,SACA,kCAEA,cACA,8BAIA,aADA,2BACA,MACA,GACA,SACA,kCAEA,cACA,gCAIA,qEACA,YAEA,yBACA,kCAEA,4BACA,0BACA,uCAEA,0BAEA,8BACA,4BACA,yCAEA,4BAEA,+BACA,6BACA,0CAEA,6BAEA,6BACA,2BACA,wCAEA,2BAEA,sBAIA,IAHA,gDACA,WACA,KACA,aACA,WACA,KAEA,aACA,gCACA,eACA,cACA,eACA,oCAEA,eAEA,UAEA,8BAEA,4BACA,cACA,qBACA,UACA,uBACA,iBACA,iBACA,qCAGA,yBAEA,oIAEA,kCACA,KACA,wHACA,+CAEA,0DACA,+JACA,iJACA,mBACA,gDAKA,UACA,oBACA,kHAEA,8BACA,qGAEA,yBACA,uGAGA,SACA,uCAEA,mBACA,2BACA,+CC3iBuX,MCQnX,I,UAAY,eACd,GACA,GACA,IACA,EACA,KACA,KACA,OAIa,M,QCnBX,GAAS,WAAa,IAAIu8F,EAAInxG,KAASoxG,EAAGD,EAAIE,eAAmBh1E,EAAG80E,EAAIG,MAAMj1E,IAAI+0E,EAAG,OAAO/0E,EAAG,MAAM,CAACk1E,YAAY,OAAO,CAACl1E,EAAG,MAAM,CAACznB,MAAM,CAAC,GAAK,wBAAwBynB,EAAG,MAAM,CAACk1E,YAAY,eAAe,CAACl1E,EAAG,MAAM,CAACk1E,YAAY,OAAO,CAACl1E,EAAG,MAAM,CAACk1E,YAAY,WAAW,CAACl1E,EAAG,WAAW,CAACigC,IAAI,OAAO1nD,MAAM,CAAC,WAAau8F,EAAIurF,aAAa,aAAc,EAAK,eAAgB,EAAK,iBAAkB,EAAM,cAAe,EAAM,gBAAiB,EAAK,kBAAmB,EAAK,oBAAsBvrF,EAAIU,oBAAoB,eAAiBV,EAAIe,cAAc,SAAU,EAAK,aAAef,EAAIxgD,aAAa,eAAiBwgD,EAAIY,eAAe,mBAAqBZ,EAAIwrF,mBAAmB,QAAUxrF,EAAI1J,QAAQ,YAAc0J,EAAIa,YAAY,aAAeb,EAAIS,aAAa,cAAgBT,EAAIc,cAAc,cAAgBd,EAAIgB,gBAAgB,CAAC91E,EAAG,YAAY,CAACA,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,cAAc,WAAa,eAAe,MAAQ,SAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,WAAW,WAAa,cAAcynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,gBAAgB,WAAa,aAAa,MAAQ,SAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,YAAY,WAAa,aAAa,KAAO,OAAO,OAASu8F,EAAI5xC,qBAAqBljC,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,8BAA8B,WAAa,kBAAkBynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,cAAc,WAAa,aAAaynB,EAAG,WAAW,CAACznB,MAAM,CAAC,WAAa,gBAAgB,MAAQ,qBAAqB,UAAY,YAAYynB,EAAG,WAAW,CAACznB,MAAM,CAAC,WAAa,gBAAgB,MAAQ,eAAe,UAAY,YAAYynB,EAAG,WAAW,CAACznB,MAAM,CAAC,WAAa,eAAe,MAAQ,iBAAiB,UAAY,YAAYynB,EAAG,WAAW,CAACznB,MAAM,CAAC,WAAa,2BAA2B,MAAQ,yBAAyB,UAAY,YAAYynB,EAAG,WAAW,CAACznB,MAAM,CAAC,WAAa,qBAAqB,MAAQ,kBAAkB,UAAY,YAAYynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,QAAQ,WAAa,QAAQ,OAAS,KAAK,UAAY,YAAYynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,WAAW,WAAa,YAAY,UAAY,YAAYynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,wBAAwB,WAAa,yBAAyB,UAAY,YAAYynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,oBAAoB,WAAa,qBAAqB,UAAY,YAAYynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,UAAU,WAAa,aAAa,UAAY,SAAS,KAAO,YAAYynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,cAAc,WAAa,kBAAkB,UAAY,SAAS,KAAO,YAAYynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,gBAAgB,WAAa,WAAW,UAAY,OAAO,KAAO,OAAO,OAASu8F,EAAI5xC,qBAAqBljC,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,gBAAgB,WAAa,WAAW,UAAY,OAAO,KAAO,YAAYynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,WAAW,WAAa,OAAO,UAAY,OAAO,KAAO,aAAa,IAAI,IAAI,UAC7zF,GAAkB,GCoEtB,yBACA,yBACA,yBACA,yBAEA,QACA,yBACA,qBAEA,gBACA,OACA,aACA,gBACA,oCACA,iCACA,wBACA,yFAGA,mBACA,uDACA,wBAEA,SACA,sCAEA,+EACA,kBACA,0DACA,6BACA,oCACA,kCACA,gDAEA,mBACA,0DACA,YACA,+CAIA,wBACA,uBAGA,2BACA,oCACA,wDAEA,0BACA,oCAEA,4BACA,cACA,cACA,UACA,iBACA,iBACA,uBACA,kCACA,eAIA,0BAIA,4CACA,2CAEA,2BACA,0DAEA,mCACA,6EAIA,+BAIA,4CACA,qBAEA,2BACA,+CAEA,mCACA,iEAEA,mCACA,gEAEA,qCACA,+CAIA,sCACA,kBACA,qDACA,+BAEA,qCACA,kBACA,qDACA,+BAEA,uBACA,kBACA,+BAEA,yBACA,qDAEA,uBACA,oFAEA,gCACA,gCAGA,SACA,mDClMiX,MCO7W,GAAY,eACd,GACA,GACA,IACA,EACA,KACA,WACA,MAIa,M,QCmBf,yBACA,QACA,0BACA,mBACA,yEACA,8CACA,mDAGA,gBACA,OACA,sCACA,yBACA,0CACA,sCACA,4BACA,yCACA,iCACA,mCACA,gCACA,eACA,uGACA,WACA,SACA,MACA,cACA,kCACA,OACA,UACA,aAIA,6BACA,OACA,UACA,cAIA,gCACA,OACA,UACA,cAIA,wCACA,OACA,UACA,cAIA,wCACA,OACA,UACA,cAIA,yCACA,OACA,UACA,cAIA,iCACA,OACA,UACA,cAIA,sCACA,OACA,UACA,cAIA,qCACA,OACA,UACA,gBAMA,SACA,iCACA,qHACA,2BACA,uBACA,iBACA,2CAEA,OACA,YACA,8GACA,uBAMA,qCACA,0EACA,kBAEA,mCACA,wEAEA,mBACA,8GACA,wBAKA,UACA,uBACA,gDCjK0W,MCQtW,I,UAAY,eACd,GACAyE,EACAm7F,GACA,EACA,KACA,WACA,OAIa,gB,6CCnBf,wJAAIjvG,EAAwC,WACxC,IAAIC,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAaxCI,EAA0C,SAAUC,EAAYC,EAAQzC,EAAK0C,GAC7E,IAA2HtE,EAAvHuE,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOb,OAAOkB,yBAAyBN,EAAQzC,GAAO0C,EACrH,GAAuB,kBAAZM,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQzC,EAAK0C,QACpH,IAAK,IAAIQ,EAAIV,EAAWK,OAAS,EAAGK,GAAK,EAAGA,KAAS9E,EAAIoE,EAAWU,MAAIJ,GAAKH,EAAI,EAAIvE,EAAE0E,GAAKH,EAAI,EAAIvE,EAAEqE,EAAQzC,EAAK8C,GAAK1E,EAAEqE,EAAQzC,KAAS8C,GAChJ,OAAOH,EAAI,GAAKG,GAAKjB,OAAOsB,eAAeV,EAAQzC,EAAK8C,GAAIA,GAQzD,SAASi2L,EAAShiJ,EAAOn0B,GAE5B,IADA,IAAI00C,EAAM,eAAO,GAAIvgB,GACZnnC,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAKqgD,GAAM1nD,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC1D,IAAIsH,EAAOnR,EAAG6J,GACV,EAAQ1J,QAAQgR,GAAQ,GACxB,eAAaogD,EAAKpgD,GAG1B,OAAOogD,EAOJ,SAAS0hI,EAAiBC,EAAI5jL,GACjC,IAEIkgF,EAFA2jG,EAAyB,KAAZ7jL,EAAiB,EAAI4jL,EAAG53G,kBAAoB,EACzD83G,EAAQD,EAERE,EAAaH,EAAGhrL,cAAc,eAC9BmrL,GACAA,EAAWjyL,UAAUC,OAAO,cAEhC,IAAK,IAAIlE,EAAI,EAAG2hB,EAAMo0K,EAAGz2K,SAAS3f,OAAQK,EAAI2hB,EAAK3hB,IAC3C+1L,EAAGz2K,SAAStf,GAAGiE,UAAUkB,SAAS,eAClCktF,EAAK0jG,EAAGz2K,SAAStf,GACjBi2L,EAAQj2L,EACRqyF,EAAGpuF,UAAUC,OAAO,aACJ,KAAZiO,EACA8jL,IAGAA,IAEAA,KAAuB,KAAZ9jL,EAAiB4jL,EAAG53G,mBAAqB,KACpD83G,EAAQD,IAIpB3jG,EAAK0jG,EAAGz2K,SAAS22K,GACjBA,EAAQnjG,EAAUijG,EAAI1jG,EAAI4jG,EAAO9jL,IAClB,IAAX8jL,IACA,eAAS,CAACF,EAAGz2K,SAAS22K,IAAS,aAC/BF,EAAGz2K,SAAS22K,GAAOx3K,SAa3B,SAASq0E,EAAUijG,EAAI1jG,EAAI/mF,EAAO6G,EAAS0hB,GAgBvC,QAfc,IAAVA,IAAoBA,EAAQ,IAC5Bw+D,EAAGpuF,UAAUkB,SAAS,gBAAkBktF,EAAGpuF,UAAUkB,SAAS,iBAC1DmG,KAAuB,KAAZ6G,EAAiB4jL,EAAG53G,kBAAoB,EAAI,GACvD7yE,EAAoB,KAAZ6G,EAAiB,EAAI4jL,EAAG53G,kBAAoB,EAGpC,KAAZhsE,EACA7G,IAGAA,KAIZ+mF,EAAK0jG,EAAGz2K,SAAShU,GACb+mF,EAAGpuF,UAAUkB,SAAS,gBAAkBktF,EAAGpuF,UAAUkB,SAAS,cAAe,CAE7E,GADA0uB,IACIA,IAAUkiK,EAAG53G,kBACb,OAAgB,EAEpB7yE,EAAQwnF,EAAUijG,EAAI1jG,EAAI/mF,EAAO6G,EAAS0hB,GAE9C,OAAOvoB,EAMJ,SAAS6qL,EAAkBrxK,EAAOsxK,GACrC,IAAIC,EAAgB,GAAG9pL,MAAMjK,KAAKwiB,EAAMhO,uBAAuB,iBAC/D,GAAIs/K,EAAW,CACX,IAAIE,EAAW,GAAG/pL,MAAMjK,KAAKwiB,EAAMhO,uBAAuB,WAC1Dw/K,EAAS/9F,SAAQ,SAAUlG,IACnBA,EAAGzsF,MAAM2wL,aAAelkG,EAAGzsF,MAAM4wL,eACjCnkG,EAAG5oF,gBAAgB,YAI/B,GAAK4sL,EAAc12L,OAAnB,CAGA,IAAI82L,EAAS3xK,EAAM/Z,cAAc,gDACjC,IAAI,eAAkB0rL,GAAtB,CAGIA,EAAOxyL,UAAUkB,SAAS,WAC1BsxL,EAASA,EAAO1rL,cAAc,gBAElC,IACI2rL,EADAxnG,EAAOunG,EAAO1rL,cAAc,gBAE5BvG,EAAYsgB,EAAM7gB,UAAUkB,SAAS,SAErCuxL,EADAlyL,EACU,CAAEslC,QAAS,eAAgBo4B,OAAQ,cAGnC,CAAEp4B,QAAS,cAAeo4B,OAAQ,eAGhD,IAAIx3C,EAAO1sB,SAASsH,iBAAiB4pF,GAAMupB,SAAU,IAAMz6G,SAAsBsH,iBAAiB4pF,GAAMwnG,EAAQx0H,QAAmD,IAC7JlkE,SAASsH,iBAAiBmxL,GAAQF,YAAa,IAAM,KAC3DF,EAAc99F,SAAQ,SAAUlG,GACxBA,EAAGpuF,UAAUkB,SAAS,SACtBktF,EAAGtnF,cAAc,eAAenF,MAAM8wL,EAAQ5sJ,SAAWpf,EAGzD2nE,EAAGzsF,MAAM8wL,EAAQ5sJ,SAAWpf,OAQxC,IAAI83G,EAAsB,SAAU3gI,GAEhC,SAAS2gI,IACL,OAAkB,OAAX3gI,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAoB/D,OAtBAuF,EAAUgkI,EAAM3gI,GAIhBxC,EAAW,CACP,eAAS,KACVmjI,EAAKrjI,UAAW,eAAW,GAC9BE,EAAW,CACP,eAAS,KACVmjI,EAAKrjI,UAAW,UAAM,GACzBE,EAAW,CACP,gBAAS,IACVmjI,EAAKrjI,UAAW,iBAAa,GAChCE,EAAW,CACP,eAAS,KACVmjI,EAAKrjI,UAAW,YAAQ,GAC3BE,EAAW,CACP,eAAS,KACVmjI,EAAKrjI,UAAW,WAAO,GAC1BE,EAAW,CACP,gBAAS,IACVmjI,EAAKrjI,UAAW,gBAAY,GACxBqjI,EAvBc,CAwBvB,S,wBC9KA,SAAUzpI,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIG,EACI,oFAAoFC,MAChF,KAERC,EAAc,kDAAkDD,MAAM,KAC1E,SAASmD,EAAOC,GACZ,OAAOA,EAAI,GAAKA,EAAI,EAExB,SAASC,EAAUC,EAAQC,EAAeC,EAAKC,GAC3C,IAAIC,EAASJ,EAAS,IACtB,OAAQE,GACJ,IAAK,IACD,OAAOD,GAAiBE,EAAW,aAAe,gBACtD,IAAK,KACD,OAAIF,GAAiBE,EACVC,GAAUP,EAAOG,GAAU,UAAY,UAEvCI,EAAS,YAExB,IAAK,IACD,OAAOH,EAAgB,SAAWE,EAAW,SAAW,UAC5D,IAAK,KACD,OAAIF,GAAiBE,EACVC,GAAUP,EAAOG,GAAU,SAAW,SAEtCI,EAAS,WAExB,IAAK,IACD,OAAOH,EAAgB,SAAWE,EAAW,SAAW,UAC5D,IAAK,KACD,OAAIF,GAAiBE,EACVC,GAAUP,EAAOG,GAAU,SAAW,SAEtCI,EAAS,WAExB,IAAK,IACD,OAAOH,GAAiBE,EAAW,MAAQ,OAC/C,IAAK,KACD,OAAIF,GAAiBE,EACVC,GAAUP,EAAOG,GAAU,MAAQ,OAEnCI,EAAS,QAExB,IAAK,IACD,OAAOH,GAAiBE,EAAW,SAAW,WAClD,IAAK,KACD,OAAIF,GAAiBE,EACVC,GAAUP,EAAOG,GAAU,UAAY,YAEvCI,EAAS,WAExB,IAAK,IACD,OAAOH,GAAiBE,EAAW,MAAQ,QAC/C,IAAK,KACD,OAAIF,GAAiBE,EACVC,GAAUP,EAAOG,GAAU,OAAS,SAEpCI,EAAS,SAKhC,IAAI25L,EAAKz9L,EAAOE,aAAa,KAAM,CAC/BC,OAAQA,EACRE,YAAaA,EACbC,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,gBACTC,SAAU,WACN,OAAQpB,KAAKmwB,OACT,KAAK,EACD,MAAO,kBACX,KAAK,EACL,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,oBACX,KAAK,EACD,MAAO,kBACX,KAAK,EACD,MAAO,oBAGnB9uB,QAAS,eACTC,SAAU,WACN,OAAQtB,KAAKmwB,OACT,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACD,MAAO,uBACX,KAAK,EACD,MAAO,yBAGnB5uB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG+B,EACH9B,GAAI8B,EACJ7B,EAAG6B,EACH5B,GAAI4B,EACJ3B,EAAG2B,EACH1B,GAAI0B,EACJzB,EAAGyB,EACHxB,GAAIwB,EACJvB,EAAGuB,EACHtB,GAAIsB,EACJrB,EAAGqB,EACHpB,GAAIoB,GAERJ,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOi7L,M,oCCzJX,kDAOI7rE,EAAgC,WAChC,SAASA,EAAeC,GACpB9xH,KAAKy1B,KAAO,IAAI,OACX,eAAkBq8F,KACnB9xH,KAAKy1B,KAAKhT,QAAUqvG,GAuC5B,OApCAD,EAAe3rH,UAAU++F,kBAAoB,SAAUjjF,GACnD,OAAIA,EAAO5N,KACApU,KAAKy1B,KAAKG,cAAc5T,GAGxBhiB,KAAKy1B,KAAK+e,gBAAgBxyB,IAGzC6vG,EAAe3rH,UAAUi/F,kBAAoB,SAAUnjF,GACnD,OAAIA,EAAO5N,KACApU,KAAKy1B,KAAKC,cAAc1T,GAGxBhiB,KAAKy1B,KAAKkoK,gBAAgB37K,IAGzC6vG,EAAe3rH,UAAU03L,SAAW,SAAUz/K,EAAO6D,EAAQ5N,GACzD,MAAc,SAATA,GAA4B,aAATA,GAAgC,WAATA,GAAwB,eAAkB4N,GAI9E7D,EAHA6D,EAAO7D,IAMtB0zG,EAAe3rH,UAAUivD,OAAS,SAAUh3C,EAAO6D,GAC/C,IAAIje,EAASoa,EAIb,OAHK,eAAkB6D,IAAY,eAAkB7D,KACjDpa,EAASie,EAAO7D,IAEbpa,GAEX8tH,EAAe3rH,UAAU66E,WAAa,SAAU+wC,GACvC,eAAkBA,IACnB,gBAAWA,IAGZD,EA3CwB,I,sOCP/BtsH,EAAwC,WACxC,IAAIC,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAyBxC,EAAoC,SAAU4C,GAE9C,SAASi1L,IACL,IAAIz0L,EAAmB,OAAXR,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAEhE,OADAoJ,EAAMD,QAAUC,EAAMuyB,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,kBAAmBsK,MAAO,CAAEC,KAAM,kBACzFzL,EAkNX,OAtNA7D,EAAUs4L,EAAoBj1L,GAW9Bi1L,EAAmB33L,UAAU43L,OAAS,WAClC,OAAO99L,KAAK27B,OAAOtxB,cAAc,QASrCwzL,EAAmB33L,UAAUmT,OAAS,SAAUq2F,EAAMn3E,GAClD,IAGI1zB,EAHA6+B,EAAK1jC,KAAK27B,OAAOxyB,QAAQ2I,cAAc,gBACvCy4C,EAAOvqD,KAAKmJ,QAAQgkB,YACpB4wK,EAAW/9L,KAAK89L,SAEhBvhK,EAASmzE,EAAKnzE,OAGlB,GAFAmH,EAAGl5B,YAAY+/C,GACfA,EAAKh6C,aAAa,eAAgBgsB,EAAOge,KACrChe,EAAOspE,eAAgB,CACvB,IAAIm4F,EAAW,GACXzlK,IACAylK,EAASzhK,EAAO4b,OAAS5f,EAAKgE,EAAO4b,QAEzC,IAAI4Z,EAAM,SAEV,GADAisI,EAAS,GAAKjsI,GAAOx1B,EACjBA,EAAOjK,QAAS,CAChB,IAAI2rK,EAAkBj+L,KAAK27B,OAAO5tB,SAA8C,kBAA3BwuB,EAAqB,eACtE2hK,EAAel+L,KAAK27B,OAAOs2I,eAAiBjyK,KAAK27B,OAAOs2I,cAAcksB,eACtEn+L,KAAK27B,OAAOs2I,cAAcksB,cAAcpwL,QACxC25I,EAAS1nJ,KAAK27B,OAAOxyB,QAAQ+H,GAAKqrB,EAAOge,IAAM,iBACnD,GAAI0jJ,GAAmBC,EACnB3hK,EAAOsoE,mBAAPtoE,CAA2ByhK,EAAUh+L,KAAK27B,OAAQ,iBAAkB+rH,EAAQ,KAAM,KAAMn9F,GACxFvqD,KAAK27B,OAAOgsH,sBAEX,CACD,IAAIx+I,EAAUozB,EAAOsoE,mBAAPtoE,CAA2ByhK,EAAUh+L,KAAK27B,OAAQ,iBAAkB+rH,GAClF,eAAen9F,EAAMphD,SAIzBohD,EAAKv/C,UAAU0G,IAAI,eAIvB,GAAoB,aAAhB6qB,EAAOnoB,KAAqB,CAC5B,IAAK,eAAkBmoB,EAAO82B,kBAAmB92B,EAAO82B,gBAAoB,eAAkB92B,EAAO6hK,mBAgChG,CACD,eAAWL,EAAU,CACjB,MAAS,+BAEbl5L,EAAQ7E,KAAK27B,OAAOtxB,cAAc,QAAS,CACvC6G,GAAIqrB,EAAO4b,MAAQ,iBAAkB7tC,UAAW,eAChDsK,MAAO,CACHR,KAAM,SAAUo/B,MAAOjX,EAAO6T,WAAas/D,EAAKxiF,WAAWsmB,MAC3Dr1B,MAAOoa,EAAKm3E,EAAKnzE,OAAO4b,OAAS5f,EAAKm3E,EAAKnzE,OAAO4b,OAAS,MAGnE4lJ,EAASvzL,YAAY3F,GACjB2mB,EAAO,CACPriB,QAAStE,EAAO2Y,eAAgB,QAChCkD,WAAY,CACRnV,UAAWvL,KAAK27B,OAAOpwB,UAAWoV,iBAAiB,EAAMtQ,SAAUrQ,KAAK27B,OAAOtrB,WAGvF,OAAMmP,YAAYgM,EAAMxrB,KAAK27B,OAAOtxB,oBA7CpC,GAJAkgD,EAAKv/C,UAAU0G,IAAI,cACnB,eAAWqsL,EAAU,CACjB,MAAS,kBAET,eAAkBxhK,EAAO6hK,kBAAkBj4L,QAC3CtB,EAAQ7E,KAAK27B,OAAOtxB,cAAc,QAAS,CACvC6G,GAAIqrB,EAAO4b,MAAQ,iBAAkB7tC,UAAW,2CAChDsK,MAAO,CAAER,KAAM,SAAUo/B,MAAOjX,EAAO6T,cAE3C2tJ,EAASvzL,YAAY3F,OAEpB,CACD,IAAI2mB,EAAO,CAAE+Q,OAAQA,EAAQguB,KAAM8zI,SAC/Bn1I,EAAO3sB,EAAO6hK,kBAAkBj4L,OAKpC,GAJoB,kBAAT+iD,IACPA,EAAO,eAASA,EAAM98C,SAE1BvH,EAAQqkD,EAAK19B,GACQ,kBAAV3mB,EAAoB,CAC3B,IAAIynG,EAAMtsG,KAAK27B,OAAOtxB,cAAc,OACpCiiG,EAAI57F,UAAY7L,EAChBA,EAAQynG,EAAI19D,WAEhB,eAAWmvJ,EAAU,CACjBxuF,MAAO,2CACP/7D,MAAOjX,EAAO6T,WACdl/B,GAAIqrB,EAAO4b,MAAQ,mBAEvB4lJ,EAASvzL,YAAY3F,KAwBC,IAA1B03B,EAAO82B,gBAA6C,KAAjB92B,EAAO4b,OAAgB,eAAkB5b,EAAO4b,UACnFtzC,EAAM0L,aAAa,WAAY,QAC/B1L,EAAMmG,UAAU0G,IAAI,cAExB,IAAI4sL,EAAgBP,EAASjsL,cAAc,iBAa3C,GAZIwsL,GACAA,EAAc/tL,aAAa,QAASvQ,KAAK27B,OAAO4iK,UAAUn+K,YAAY,gBAErEmc,EAAOjK,SACRi4B,EAAKv/C,UAAU0G,IAAI,UAEvB1R,KAAKw+L,WAAWj0I,EAAMwzI,GAElB/9L,KAAK27B,OAAO0e,eAAeokJ,uBAA6D,cAApCz+L,KAAK27B,OAAO0e,eAAejmC,OAC9EpU,KAAK27B,OAAO+4I,YAAc,eAAkBn4I,EAAOspE,iBAAmB,eAAkBtpE,EAAO6hK,oBAChGp+L,KAAK0+L,mBAAmBX,EAAUxhK,EAAQmzE,IAEzC,eAAkBnzE,EAAO82B,iBAAmB92B,EAAO82B,kBAAoB,eAAkB92B,EAAO6hK,mBAAoB,CACrH,IAAIO,EAAgBpiK,EAAO6hK,kBAAkBr7I,MACzCv3B,EAAO,CAAEriB,QAAStE,EAAO03B,OAAQA,GACR,kBAAlBoiK,IACPA,EAAgB,eAASA,EAAevyL,SAE5CuyL,EAAct1L,KAAKrJ,KAAMwrB,IAOrC,OAHIxrB,KAAK27B,OAAO+sE,gBACZ,eAAwB1oG,KAAK27B,OAAQY,EAAQguB,GAE1CA,GASXszI,EAAmB33L,UAAUs4L,WAAa,SAAUj0I,EAAMq0I,GAEtD,OADAr0I,EAAK//C,YAAYo0L,GACVr0I,GAEXszI,EAAmB33L,UAAUw4L,mBAAqB,SAAUX,EAAUxhK,EAAQmzE,GAC1E,IACImvF,EADAlmJ,EAAO34C,KAAK27B,OAEZmjK,EAAS9+L,KAAK27B,OAAOtxB,cAAc,QAAS,CAC5CC,UAAW,6CACX4G,GAAIw+F,EAAKnzE,OAAOge,MAGpB,GADAwjJ,EAASjsL,cAAc,QAAQtH,YAAYs0L,GACvCviK,EAAOnD,QAAUmD,EAAOnD,OAAOkgB,SAC/BulJ,EAAYtiK,EAAOnD,OAAOkgB,cAEzB,GAAIX,EAAK0B,eAAe/c,QAAQ52B,OACjC,IAAK,IAAIK,EAAI,EAAGuyB,EAAIqf,EAAK0B,eAAe/c,QAASv2B,EAAIuyB,EAAE5yB,OAAQK,IAAK,CAChE,IAAIgrD,EAAMz4B,EAAEv0B,SAASgC,EAAEuQ,WAAY,KACnC,GAAIy6C,EAAI5Z,QAAU5b,EAAO4b,MAAO,CAC5B0mJ,EAAY9sI,EAAIzY,SAChB,MAGAulJ,EAAY,aAKpBA,EAAY,QAEX,eAAkBlmJ,EAAKomJ,aAAaF,UAAUtiK,EAAO4b,UACtD0mJ,EAAYlmJ,EAAKomJ,aAAaF,UAAUtiK,EAAO4b,QAEnDn4C,KAAKg/L,SAAW,IAAI,OAAa,CAC7B/mJ,OAAQ,CAAErgB,KAAM,OAAQzZ,MAAO,SAC/B0pK,YAAa,OACb1pK,MAAO0gL,EACPzzL,MAAO,MACP2S,QAASwe,EAAO82B,eAChB4rI,WAAY,OACZ1zL,UAAWvL,KAAK27B,OAAOpwB,UACvB4yF,OAAQn+F,KAAKk/L,cAAcxzL,KAAK1L,MAChCo+F,WAAY,WACR,IAAI9kD,EAAWX,EAAKomJ,aAAaI,gBACjCn/L,KAAKm6B,WAAamf,EAASX,EAAKgb,eAAe3zD,KAAKmJ,QAAQ+H,IAAIkD,KAAO,YACvE,IAAK,IAAIrN,EAAI,EAAGA,EAAI/G,KAAKm6B,WAAWzzB,OAAQK,IACpCw1B,EAAOnD,QAAUmD,EAAOnD,OAAOkgB,UAAY,eAAkBX,EAAKomJ,aAAaF,UAAUtiK,EAAO4b,SAChGn4C,KAAKm6B,WAAWp1B,SAASgC,EAAEuQ,WAAY,KAAK6G,QAAUoe,EAAOnD,OAAOkgB,WACpEt5C,KAAKme,MAAQoe,EAAOnD,OAAOkgB,WAIvCjpC,SAAUrQ,KAAK27B,OAAOtrB,SAAW,iBAAwBrQ,KAAK27B,OAAOtrB,SAAW,kBAEpFrQ,KAAKg/L,SAASlzK,SAASgzK,GACvB,IAAIM,EAAW,eAAQp/L,KAAKg/L,SAAS71L,QAAS,QAC9Ci2L,EAASp0L,UAAU0G,IAAI,uBACvB0tL,EAAS5uL,gBAAgB,aAE7BqtL,EAAmB33L,UAAUg5L,cAAgB,SAAUnsL,GACnD,IAAI4lC,EAAO34C,KAAK27B,OACZo2B,EAAMpZ,EAAKgb,eAAe5gD,EAAE5J,QAAQmH,aAAa,OACrDyC,EAAEwpB,OAASw1B,EACXpZ,EAAKomJ,aAAaF,UAAU9sI,EAAI5Z,OAASplC,EAAEoL,MAC3Cw6B,EAAKr5B,OAAO,QAA6BvM,IAEtC8qL,EAvN4B,CAwNrC,Q,wBCvOE,EAA8B,WAC9B,SAASwB,EAAa1jK,EAAQ2jK,EAAqB3pJ,EAAgB0E,GAC/Dr6C,KAAKu/L,OAASv/L,KAAKw/L,aAAa9zL,KAAK1L,MACrCA,KAAK27B,OAASA,EACd37B,KAAK21C,eAAiBA,EACtB31C,KAAKq6C,eAAiBA,EACtBr6C,KAAKy/L,sBAAwBH,EACzBt/L,KAAK27B,SACL37B,KAAK27B,OAAOqR,GAAG,QAAwBhtC,KAAK0/L,oBAAqB1/L,MACjEA,KAAK27B,OAAOqR,GAAG,QAAgBhtC,KAAK0/L,oBAAqB1/L,OAiGjE,OApFAq/L,EAAan5L,UAAUy5L,iBAAmB,SAAUC,EAAet5L,EAAQi2B,EAAQsjK,EAAQvmJ,GACvFt5C,KAAK8/L,UAAYD,EACjB,IAAIE,EAAOxjK,EAAOnoB,KAAO,WACzBpU,KAAKggM,SAAWhgM,KAAKigM,WAAc,eAAkB3mJ,GAC/C,eAAkBt5C,KAAK27B,OAAO0e,eAAewkJ,YAAe,eAAkB7+L,KAAK27B,OAAO0e,eAAewkJ,UAAU,GAAKkB,IACpE//L,KAAKy/L,sBAAsB,GAAKM,GAAlF//L,KAAK27B,OAAO0e,eAAewkJ,UAAU,GAAKkB,GAFezmJ,EAGjE,IAAI4mJ,EAAiBlgM,KAAKigM,WACtBE,EAAgBngM,KAAKogM,gBAAgB7jK,EAAQwjK,GAC7CM,EAAUrgM,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,kBAC5Ds1L,EAAcp1L,YAAY61L,GAC1B,IAAIC,EAAYtgM,KAAK27B,OAAOtxB,cAAc,QAAS,CAAE6G,GAAIqrB,EAAOge,IAAM,YACtE8lJ,EAAQ71L,YAAY81L,GACpBtgM,KAAKg/L,SAAW,IAAI,OAAa,CAC7B7kK,WAAY+lK,EACZjoJ,OAAQ,CAAErgB,KAAM,OAAQzZ,MAAO,SAC/B9N,SAAUrQ,KAAK27B,OAAOtrB,SAAW,kBAAyBrQ,KAAK27B,OAAOtrB,SAAW,iBACjF9E,UAAWvL,KAAK27B,OAAOpwB,UACvBqsB,KAAMuoK,EAENhiG,OAAQ,WACJ,IAAIoiG,EAAW/sL,SAAS1B,cAAc,sBAAsBA,cAAc,SACvD,YAAf9R,KAAKme,OAAsC,eAAfne,KAAKme,OAClB,WAAfne,KAAKme,OAAqC,cAAfne,KAAKme,MAChCoiL,EAAS,iBAAiB,GAAG,YAAa,EAEpC,eAAkBA,EAASjwL,aAAa,eAC9CiwL,EAAS,iBAAiB,GAAG,YAAa,MAItDvgM,KAAKg/L,SAASpyJ,iBAAiB,OAAkB5sC,KAAKu/L,QACtDv/L,KAAKg/L,SAASlzK,SAAS,IAAMyQ,EAAOge,IAAM,YAE9C8kJ,EAAan5L,UAAUs6L,6BAA+B,SAAUh1K,GAC5DA,EAAKK,MAAM1iB,QAAQwD,MAAMvB,MAAQ,QAErCi0L,EAAan5L,UAAUs5L,aAAe,SAAUh0K,GAC5CA,EAAKK,MAAM1iB,QAAQwD,MAAM6c,QAAUxpB,KAAK8/L,UAAUt2K,OAAS,GAAGlS,WAC1DtX,KAAK27B,OAAOysE,kBACZpoG,KAAKwgM,6BAA6Bh1K,IAI1C6zK,EAAan5L,UAAUk6L,gBAAkB,SAAUruI,EAAKguI,GAGpD,IAFA,IAAIU,EAAW,GACXnjK,EAAUt9B,KAAK27B,OAAO0e,eAAe/c,QAChC7pB,EAAK,EAAGggD,EAAYn2B,EAAS7pB,EAAKggD,EAAU/sD,OAAQ+M,IAAM,CAC/D,IAAI8oB,EAASk3B,EAAUhgD,GACvB,GAAIs+C,EAAI5Z,QAAU5b,EAAO4b,OAAU4Z,EAAIK,mBAAqBL,EAAI3Z,kBAAoB7b,EAAO4b,MAAQ,CAC/F,IAAIuoJ,EAAgB,IAAI,OAAY1gM,KAAKggM,UAAU9mJ,cAAa,IAAI,QAAQM,MAAM,QAAS,QAASjd,EAAO+c,WAC3GmnJ,EAAY,eAAkBC,EAAc,IAA8B,GAAxBA,EAAc,GAAG9oK,MAG3E,GAAiB,KAAb6oK,EACA,GAAI1uI,EAAI34B,OAAOkgB,SAEX,IADA,IAAIqnJ,EAAUj7L,OAAOoV,KAAK9a,KAAKggM,UAAUt5L,OAChCK,EAAI,EAAGA,EAAI45L,EAAS55L,IACrB/G,KAAKggM,SAASj7L,SAASgC,EAAEuQ,WAAY,KAAK6G,QAAU4zC,EAAI34B,OAAOkgB,WAC/DmnJ,EAAWzgM,KAAKggM,SAASj7L,SAASgC,EAAEuQ,WAAY,KAAKsgB,WAK7D6oK,EAAWzgM,KAAKggM,SAAS,GAAGpoK,KAGpC,OAAO6oK,GAMXpB,EAAan5L,UAAU06L,cAAgB,WACnC,OAAO5gM,KAAKg/L,SAAS7gL,OAEzBkhL,EAAan5L,UAAUw5L,oBAAsB,WACrC1/L,KAAKg/L,SAASnyJ,cAGlB7sC,KAAKg/L,SAASzjH,oBAAoB,OAAkBv7E,KAAKu/L,QACzDv/L,KAAKg/L,SAAS9mL,UACdlY,KAAK27B,OAAO8e,IAAI,QAAwBz6C,KAAK0/L,qBAC7C1/L,KAAK27B,OAAO8e,IAAI,QAAgBz6C,KAAK0/L,uBAElCL,EA1GsB,G,wBCE7B,EAAgC,WAChC,SAASwB,EAAellK,EAAQga,EAAgB0E,GAC5Cr6C,KAAK27B,OAASA,EACd37B,KAAK8gM,WAAanrJ,EAClB31C,KAAKq6C,eAAiBA,EAClBr6C,KAAK27B,SACL37B,KAAK27B,OAAOqR,GAAG,QAAwBhtC,KAAKkY,QAASlY,MACrDA,KAAK27B,OAAOqR,GAAG,QAAgBhtC,KAAKkY,QAASlY,OAoIrD,OAjIA6gM,EAAe36L,UAAUC,OAAS,SAAUqlB,GACxCxrB,KAAKg/F,SAAWh/F,KAAK27B,OAAOtxB,cAAc,QAAS,CAAEC,UAAW,iBAAkB4G,GAAI,SAAWsa,EAAK+Q,OAAOge,MAC7G/uB,EAAKllB,OAAOkE,YAAYxK,KAAKg/F,UAC7Bh/F,KAAK8/L,UAAYt0K,EAAKs0K,UACtB9/L,KAAK+gM,qBAAqBv1K,IAE9Bq1K,EAAe36L,UAAU66L,qBAAuB,SAAUv1K,GACtD,IAAIpiB,EAAQpJ,KACRwrB,EAAK+Q,OAAO61B,kBACZpyD,KAAK27B,OAAOya,gBAAgB/b,YAAYqd,aAAa13C,KAAK27B,OAAOya,gBAAgB5b,eAAc,IAC1FE,MAAK,SAAU32B,GAAUqF,EAAM43L,uBAAuBx1K,EAAMznB,MAGrE/D,KAAKghM,uBAAuBx1K,IAEhCq1K,EAAe36L,UAAU86L,uBAAyB,SAAUx1K,EAAMznB,GAC9D,IACIk9L,EADA7uI,EAAkB5mC,EAAK+Q,OAAO61B,kBAElC,GAAIA,EAAiB,CAIjB,IAHA,IAAI8uI,EAAe,OAAmBC,YAAYp9L,EAAOA,OAAQynB,EAAK+Q,OAAO4b,OACxEc,SAAW,GACZY,OAAc,EACT9yC,EAAI,EAAGA,EAAIm6L,EAAax6L,OAAQK,IAEjC8yC,EADAA,EACcA,EAAYJ,GAAGjuB,EAAK+Q,OAAO4b,MAAO,WAAY+oJ,EAAan8L,SAASgC,EAAEuQ,WAAY,KAAKkU,EAAK+Q,OAAO4b,OAAQn4C,KAAK27B,OACzH0e,eAAe+mJ,sBAAuBphM,KAAK27B,OAAO0e,eAAe0Y,cAGxD,IAAI,OAAUvnC,EAAK+Q,OAAO4b,MAAO,WAAY+oJ,EAAan8L,SAASgC,EAAEuQ,WAAY,KAAKkU,EAAK+Q,OAAO4b,OAAQn4C,KAAK27B,OACxH0e,eAAe+mJ,sBAAuBphM,KAAK27B,OAAO0e,eAAe0Y,cAG9EkuI,GAAqB,IAAI,QAAQznJ,MAAMK,GACvConJ,EAAmB1pJ,OAASv3C,KAAK27B,OAAOvB,MAAMmd,OAElD,IAAIpd,EAAai4B,EAAkB5mC,EAAK+Q,OAAOpC,WAAan6B,KAAK27B,OAAOxB,WACpE8d,EAAS,CAAE95B,MAAOi0C,EAAkB5mC,EAAK+Q,OAAO6b,gBAAkB5sB,EAAK+Q,OAAO4b,OAC9EkpJ,EAAe,IAAI,OAAa,eAAO,CACvClnK,WAAYA,aAAsB,OAAcA,EAAa,IAAI,OAAYA,GAC7E8d,OAAQA,EACR/3B,OAAQlgB,KAAK27B,OAAOzb,OACpB3U,UAAWvL,KAAK27B,OAAOpwB,UACvB6uB,MAAOg4B,EAAkB6uI,EAAqBjhM,KAAK27B,OAAOya,gBAAgB5b,eAAc,GAAM,GAC9F8mK,UAAW,YACXjxL,SAAUrQ,KAAK27B,OAAOtrB,SAAW,kBAAyBrQ,KAAK27B,OAAOtrB,SAAW,iBACjFipF,UAAU,EACV55E,YAAa8L,EAAK+1K,aAAanhL,YAAY,cAC3C4xF,YAAa,WACT,GAAIhyG,KAAKo6B,MAAMq2B,QAAQ/pD,QAAuC,YAA7B1G,KAAKo6B,MAAMq2B,QAAQ,GAAGwB,IAAoBjyD,KAAKo6B,MAAMq2B,QAAQ,GAAG19C,GAC1F/S,KAAKo6B,MAAMq2B,QAAQ,GAAG19C,EAAE6lC,WAAY,CACvC,IAAK,IAAI7xC,EAAI,EAAGA,EAAI/G,KAAKo6B,MAAMq2B,QAAQ,GAAG19C,EAAE6lC,WAAWlyC,OAAQK,IACvD/G,KAAK0gB,WAAWu3B,OAAO95B,QAAUne,KAAKo6B,MAAMq2B,QAAQ,GAAG19C,EAAE6lC,WAAW,GAAK7xC,GAAGoxC,QAC5En4C,KAAKo6B,MAAMq2B,QAAQ,GAAG19C,EAAE6lC,WAAWtmC,OAAOvL,EAAG,GAC7CA,GAAQ,GAGX/G,KAAKo6B,MAAMq2B,QAAQ,GAAG19C,EAAE6lC,WAAWlyC,QACpC1G,KAAKo6B,MAAMq2B,QAAQn+C,OAAO,EAAG,MAI1CkZ,EAAK+Q,OAAOnD,OAAOme,SAOtB,GANAv3C,KAAKwhM,QAAUxhM,KAAKwlB,MAAM67K,EAAc71K,GACxCxrB,KAAKyhM,WAAazhM,KAAK+xG,eAAesvF,GACtCrhM,KAAK0hM,OAAS1hM,KAAKmxL,UAAUzlL,KAAK1L,MAClCqhM,EAAaz0J,iBAAiB,OAAgB5sC,KAAKwhM,SACnDH,EAAaz0J,iBAAiB,OAAkB5sC,KAAK0hM,QACrDL,EAAaz0J,iBAAiB,OAAuB5sC,KAAKyhM,YACtDtnK,GAAc,WAAYA,EAAY,CACtC,IAAIC,EAAQp6B,KAAK27B,OAAO8zB,SAAWzvD,KAAK27B,OAAO8zB,WAAWC,QAAU,IAAI,OACpEiyI,EAAS,eAAa,CAAEtrJ,YAAa,uBAAyBjc,GAClEp6B,KAAK27B,OAAO9tB,QAAQ,QAAwB8zL,EAAO3rJ,OACnD,IAAIE,EAAMyrJ,EAAOC,SACjB1rJ,EAAIU,QAAQlc,MAAK,SAAU3nB,GACvBsuL,EAAalnK,WAAa,IAAI,OAAYpnB,MAGlD/S,KAAK6hM,OAASR,EACdrhM,KAAK6hM,OAAO/1K,SAAS9rB,KAAKg/F,UACtB5sC,GACApyD,KAAK27B,OAAOojK,aAAaA,aAAa+C,uBAG9CjB,EAAe36L,UAAU68C,MAAQ,SAAUv3B,GACvC,GAA2B,KAAvBA,EAAK2tB,gBAAyB,eAAkB3tB,EAAK2tB,eAAgB,CACrE,IAAI4oJ,EAAWvuL,SAAS1B,cAAc,UAAY0Z,EAAK+Q,OAAOge,KAAK0vF,cAAc,GACjF83D,EAAS5jL,MAAQqN,EAAK2tB,gBAG9B0nJ,EAAe36L,UAAU+gH,KAAO,SAAU99G,EAASozB,EAAQylK,EAAYC,GACnE,IAAIC,EAAW1uL,SAAS1B,cAAc,UAAYyqB,EAAOge,KAAK0vF,cAAc,GACxE,OAAQ10H,WACR2sL,EAASrpG,YACTqpG,EAAS16K,YAEb,IAAI26K,EAAcD,EAAS/jL,OACvB,eAAkBgkL,IAAgC,KAAhBA,KAClCA,EAAc,MAElBF,EAAUG,eAAe7lK,EAAO4b,MAAO6pJ,EAAYG,EAAa,MAAOniM,KAAK27B,OAAO0e,eAAe+mJ,wBAEtGP,EAAe36L,UAAUirL,UAAY,SAAU3lK,GAC3C,eAAqBA,EAAMxrB,KAAK8/L,YAEpCe,EAAe36L,UAAUsf,MAAQ,SAAUq8K,EAAQr2K,GAC/C,OAAO,WACHq2K,EAAOtrG,WAAa/qE,EAAK62K,gBAAgBzB,kBAGjDC,EAAe36L,UAAU6rG,eAAiB,SAAU8vF,GAChD,OAAO,SAAU9uL,GACbA,EAAEhP,OAASgP,EAAEhP,OAAOq1B,QAAO,SAAU+hC,EAAK9oD,EAAO+oK,GAC7C,OAAOA,EAAI3uK,KAAI,SAAU61L,GACrB,OAAQ,cAAD,CAAUT,EAAO5pJ,OAAO95B,MAAOmkL,MACvCv4L,QAAQ,eAAU83L,EAAO5pJ,OAAY,MAAGkjB,MAAU9oD,OAIjEwuL,EAAe36L,UAAUgS,QAAU,WAC1BlY,KAAK6hM,SAAU7hM,KAAK6hM,OAAOh1J,cAGhC7sC,KAAK6hM,OAAOtmH,oBAAoB,OAAgBv7E,KAAKwhM,SACrDxhM,KAAK6hM,OAAOtmH,oBAAoB,OAAkBv7E,KAAK0hM,QACvD1hM,KAAK6hM,OAAOtmH,oBAAoB,OAAuBv7E,KAAKyhM,YAC5DzhM,KAAK6hM,OAAO3pL,UACZlY,KAAK27B,OAAO8e,IAAI,QAAwBz6C,KAAKkY,SAC7ClY,KAAK27B,OAAO8e,IAAI,QAAgBz6C,KAAKkY,WAElC2oL,EA3IwB,G,YCJ/B,EAAgC,WAChC,SAAS0B,EAAe5mK,EAAQga,EAAgB0E,GAC5Cr6C,KAAKq6C,eAAiBA,EACtBr6C,KAAK27B,OAASA,EACd37B,KAAK21C,eAAiBA,EAClB31C,KAAK27B,SACL37B,KAAK27B,OAAOqR,GAAG,QAAwBhtC,KAAKkY,QAASlY,MACrDA,KAAK27B,OAAOqR,GAAG,QAAgBhtC,KAAKkY,QAASlY,OA0CrD,OAvCAuiM,EAAer8L,UAAUs8L,gBAAkB,SAAUh3K,GACjD,GAAqB,KAAjBA,EAAKtS,SAAmC,IAAjBsS,EAAKtS,QAAe,CAC3C,IAAIzG,EAAMe,SAASwR,YAAY,cAC/BvS,EAAIwS,UAAU,UAAU,GAAO,GAE/BjlB,KAAKklB,cAAczS,KAG3B8vL,EAAer8L,UAAUC,OAAS,SAAUqlB,GACxCxrB,KAAKg/F,SAAWh/F,KAAK27B,OAAOtxB,cAAc,QAAS,CAAEC,UAAW,iBAAkB4G,GAAI,YAAcsa,EAAK+Q,OAAOge,MAChH/uB,EAAKllB,OAAOkE,YAAYxK,KAAKg/F,UAC7Bh/F,KAAKyiM,cAAgB,IAAI,OAAe,eAAO,CAC3CzgL,OAAwC,kBAAxBwJ,EAAK+Q,OAAa,QAAkB,gBAAY/Q,EAAK+Q,OAAOva,QAAUwJ,EAAK+Q,OAAOva,OAC9FwJ,EAAK+Q,OAAOva,OAAOA,OACvB9B,OAAQlgB,KAAK27B,OAAOzb,OACpB7P,SAAUrQ,KAAK27B,OAAOtrB,SAAW,kBAAyBrQ,KAAK27B,OAAOtrB,SAAW,iBACjFqP,YAAa8L,EAAK+1K,aAAanhL,YAAY,cAC3C7U,UAAWvL,KAAK27B,OAAOpwB,WACxBigB,EAAK+Q,OAAOnD,OAAOme,SACtBv3C,KAAKyiM,cAAc32K,SAAS9rB,KAAKg/F,WAErCujG,EAAer8L,UAAU68C,MAAQ,SAAUv3B,GACvC,IAAIk3K,EAAclvL,SAAS1B,cAAc,aAAe0Z,EAAK+Q,OAAOge,KAAK0vF,cAAc,GACvFy4D,EAAYv5L,QAAQyjC,iBAAiB,UAAW5sC,KAAKwiM,iBACrDE,EAAYvkL,MAAQqN,EAAK2tB,eAE7BopJ,EAAer8L,UAAU+gH,KAAO,SAAU99G,EAASozB,EAAQylK,EAAYC,GACnE,IAAIS,EAAclvL,SAAS1B,cAAc,aAAeyqB,EAAOge,KAAK0vF,cAAc,GAC9Ek4D,EAAcO,EAAYvkL,MAC9B8jL,EAAUG,eAAe7lK,EAAO4b,MAAO6pJ,EAAYG,EAAa,OAAO,IAE3EI,EAAer8L,UAAUgS,QAAU,WAC1BlY,KAAKyiM,gBAAiBziM,KAAKyiM,cAAc51J,cAG9C7sC,KAAKyiM,cAAcvqL,UACnBlY,KAAK27B,OAAO8e,IAAI,QAAwBz6C,KAAKkY,SAC7ClY,KAAK27B,OAAO8e,IAAI,QAAgBz6C,KAAKkY,WAElCqqL,EAjDwB,GCG/B,EAAiC,WACjC,SAASI,EAAgBhnK,EAAQga,EAAgB0E,GAC7Cr6C,KAAK27B,OAASA,EACd37B,KAAK21C,eAAiBA,EACtB31C,KAAKq6C,eAAiBA,EAClBr6C,KAAK27B,SACL37B,KAAK27B,OAAOqR,GAAG,QAAwBhtC,KAAKkY,QAASlY,MACrDA,KAAK27B,OAAOqR,GAAG,QAAgBhtC,KAAKkY,QAASlY,OAuDrD,OApDA2iM,EAAgBz8L,UAAUC,OAAS,SAAUqlB,GACzC,IAAI4mC,EAAkB5mC,EAAK+Q,OAAO61B,kBAC9Bj4B,EAAai4B,EAAkB5mC,EAAK+Q,OAAOpC,WAAan6B,KAAK27B,OAAOxB,WACpE8d,EAASma,EAAkB5mC,EAAK+Q,OAAO6b,gBAAkB5sB,EAAK+Q,OAAO4b,MACzEn4C,KAAKouI,KAAOpuI,KAAK27B,OAAOtxB,cAAc,QAAS,CAAEC,UAAW,iBAAkB4G,GAAI,WAAasa,EAAK+Q,OAAOge,MAC3G/uB,EAAKllB,OAAOkE,YAAYxK,KAAKouI,MAC7BpuI,KAAK8/L,UAAYt0K,EAAKs0K,UACtB9/L,KAAK4iM,aAAe,IAAI,OAAa,eAAO,CACxCzoK,WAAYA,aAAsB,OAC9BA,EAAa,IAAI,OAAYA,GACjCC,OAAO,IAAI,QAAQlM,OAAO+pB,GAC1BA,OAAQ,CAAErgB,KAAMqgB,EAAQ95B,MAAO85B,GAC/Bv4B,YAAa8L,EAAK+1K,aAAanhL,YAAY,eAC3C/P,SAAUrQ,KAAK27B,OAAOtrB,SAAW,kBAAyBrQ,KAAK27B,OAAOtrB,SAAW,iBACjF6P,OAAQlgB,KAAK27B,OAAOzb,OACpB3U,UAAWvL,KAAK27B,OAAOpwB,WACxBigB,EAAK+Q,OAAOnD,OAAOme,SACtBv3C,KAAKu/L,OAASv/L,KAAKmxL,UAAUzlL,KAAK1L,MAClCA,KAAK6iM,WAAa7iM,KAAK+xG,eAAe95D,GACtCj4C,KAAK4iM,aAAah2J,iBAAiB,OAAkB5sC,KAAKu/L,QAC1Dv/L,KAAK4iM,aAAah2J,iBAAiB,OAAuB5sC,KAAK6iM,YAC/D7iM,KAAK4iM,aAAa92K,SAAS9rB,KAAKouI,OAEpCu0D,EAAgBz8L,UAAU68C,MAAQ,SAAUv3B,GACxC,IAAIs3K,EAAWtvL,SAAS1B,cAAc,YAAc0Z,EAAK+Q,OAAOge,KAAK0vF,cAAc,GAC9E,eAAkBz+G,EAAK2tB,iBACxB2pJ,EAAS3kL,MAAQqN,EAAK2tB,gBAG9BwpJ,EAAgBz8L,UAAU+gH,KAAO,SAAU99G,EAASozB,EAAQylK,EAAYC,GACpE,IAAIa,EAAWtvL,SAAS1B,cAAc,YAAcyqB,EAAOge,KAAK0vF,cAAc,GAC1Ek4D,EAAcW,EAAS3kL,MAC3B8jL,EAAUG,eAAe7lK,EAAO4b,MAAO6pJ,EAAYG,EAAa,OAAO,IAE3EQ,EAAgBz8L,UAAUirL,UAAY,SAAU3lK,GAC5C,eAAqBA,EAAMxrB,KAAK8/L,YAEpC6C,EAAgBz8L,UAAU6rG,eAAiB,SAAU95D,GACjD,OAAO,SAAUllC,GACbA,EAAEhP,OAAS,OAASq1C,SAASrmC,EAAEhP,OAAQk0C,GAAQ,KAGvD0qJ,EAAgBz8L,UAAUgS,QAAU,WAC3BlY,KAAK4iM,eAAgB5iM,KAAK4iM,aAAa/1J,cAG5C7sC,KAAK4iM,aAAarnH,oBAAoB,OAAkBv7E,KAAKu/L,QAC7Dv/L,KAAK4iM,aAAarnH,oBAAoB,OAAuBv7E,KAAK6iM,YAClE7iM,KAAK4iM,aAAa1qL,UAClBlY,KAAK27B,OAAO8e,IAAI,QAAwBz6C,KAAKkY,SAC7ClY,KAAK27B,OAAO8e,IAAI,QAAgBz6C,KAAKkY,WAElCyqL,EA9DyB,G,wBCDhC,EAA8B,WAC9B,SAASI,EAAapnK,EAAQga,EAAgB0E,GAC1Cr6C,KAAKgjM,OAAShjM,KAAKmxL,UAAUzlL,KAAK1L,MAClCA,KAAK27B,OAASA,EACd37B,KAAKknJ,QAAUvxG,EACf31C,KAAKijM,aAAe5oJ,EAChBr6C,KAAK27B,SACL37B,KAAK27B,OAAOqR,GAAG,QAAwBhtC,KAAKkY,QAASlY,MACrDA,KAAK27B,OAAOqR,GAAG,QAAgBhtC,KAAKkY,QAASlY,OAqDrD,OAlDA+iM,EAAa78L,UAAUC,OAAS,SAAUqlB,GACtC,IAAIxJ,EAAS,eAAoBwJ,EAAK+Q,OAAOva,OAAQwJ,EAAK+Q,OAAOnoB,MACjEpU,KAAK8/L,UAAYt0K,EAAKs0K,UACtB9/L,KAAKkjM,UAAYljM,KAAK27B,OAAOtxB,cAAc,QAAS,CAAEC,UAAW,iBAAkB4G,GAAI,UAAYsa,EAAK+Q,OAAOge,MAC/G/uB,EAAKllB,OAAOkE,YAAYxK,KAAKkjM,WACJ,SAArB13K,EAAK+Q,OAAOnoB,MAAwC,aAArBoX,EAAK+Q,OAAOnoB,KAC3CpU,KAAKmjM,cAAgB,IAAI,OAAW,eAAO,CACvCnhL,OAAQA,EACR3R,SAAUrQ,KAAK27B,OAAOtrB,SAAW,kBAAyBrQ,KAAK27B,OAAOtrB,SAAW,iBACjFqP,YAAa8L,EAAK+1K,aAAanhL,YAAY,cAC3ChV,MAAO,OACP8U,OAAQlgB,KAAK27B,OAAOzb,OACpB3U,UAAWvL,KAAK27B,OAAOpwB,WACxBigB,EAAK+Q,OAAOnD,OAAOme,SAEI,aAArB/rB,EAAK+Q,OAAOnoB,OACjBpU,KAAKmjM,cAAgB,IAAI,OAAe,eAAO,CAC3CnhL,OAAQA,EACR3R,SAAUrQ,KAAK27B,OAAOtrB,SAAW,kBAAyBrQ,KAAK27B,OAAOtrB,SAAW,iBACjFqP,YAAa8L,EAAK+1K,aAAanhL,YAAY,cAC3ChV,MAAO,OACP8U,OAAQlgB,KAAK27B,OAAOzb,OACpB3U,UAAWvL,KAAK27B,OAAOpwB,WACxBigB,EAAK+Q,OAAOnD,OAAOme,UAE1Bv3C,KAAKmjM,cAAcv2J,iBAAiB,OAAkB5sC,KAAKgjM,QAC3DhjM,KAAKmjM,cAAcr3K,SAAS9rB,KAAKkjM,YAErCH,EAAa78L,UAAU68C,MAAQ,SAAUv3B,GACrC,IAAI43K,EAAY5vL,SAAS1B,cAAc,WAAa0Z,EAAK+Q,OAAOge,KAAK0vF,cAAc,GACnFm5D,EAAUjlL,MAAS,eAAkBqN,EAAK2tB,eAAgD,KAA/B,IAAI96B,KAAKmN,EAAK2tB,gBAE7E4pJ,EAAa78L,UAAU+gH,KAAO,SAAU99G,EAASozB,EAAQylK,EAAYC,GACjE,IAAImB,EAAY5vL,SAAS1B,cAAc,WAAayqB,EAAOge,KAAK0vF,cAAc,GAC1Ek4D,EAAciB,EAAUjlL,MAC5BgkL,EAAc,eAAkBA,GAAe,KAAOA,EACtDF,EAAUG,eAAe7lK,EAAO4b,MAAO6pJ,EAAYG,EAAa,OAAO,IAE3EY,EAAa78L,UAAUirL,UAAY,SAAU3lK,GACzCA,EAAKK,MAAM1iB,QAAQwD,MAAM6c,QAAUxpB,KAAK8/L,UAAUt2K,OAAS,GAAGlS,YAElEyrL,EAAa78L,UAAUgS,QAAU,WAC7BlY,KAAK27B,OAAO8e,IAAI,QAAwBz6C,KAAKkY,SAC7ClY,KAAK27B,OAAO8e,IAAI,QAAgBz6C,KAAKkY,SACjC,eAAkBlY,KAAKmjM,gBAAkBnjM,KAAKmjM,cAAct2J,cAGhE7sC,KAAKmjM,cAAc5nH,oBAAoB,OAAkBv7E,KAAKgjM,QAC9DhjM,KAAKmjM,cAAcjrL,YAEhB6qL,EA7DsB,GCM7B,EAAoC,WACpC,SAASM,EAAmB1nK,EAAQ0e,EAAgB1E,EAAgB2pJ,EAAqBgE,GACrFtjM,KAAKujM,cAAe,EACpBvjM,KAAK8yI,UAAY,QACjB9yI,KAAKwjM,aAAc,EACnBxjM,KAAKyjM,SAAW,CACZ,OAAU,EAAgB,OAAU,EAAgB,KAAQ,EAAc,SAAY,EAAc,QAAW,EAAiB,SAAY,GAEhJzjM,KAAK27B,OAASA,EACd37B,KAAKq6C,eAAiBA,EACtBr6C,KAAK21C,eAAiBA,EACtB31C,KAAKy/L,sBAAwBH,EAC7Bt/L,KAAKiiM,UAAYqB,EACjBtjM,KAAK0jM,SAAW,IAAI,EAAa1jM,KAAK27B,OAAQ37B,KAAKy/L,sBAAuBz/L,KAAK21C,gBAC/E31C,KAAKmgB,KAAOngB,KAAK21C,eAAe0yG,WAAW,gBAC3CroJ,KAAK2jM,eAAiB,IAAI,OAAmBhoK,GAkVjD,OAhVA0nK,EAAmBn9L,UAAU09L,kBAAoB,SAAU7xI,GACvD/xD,KAAK6jM,cAAc9xI,IAEvBsxI,EAAmBn9L,UAAU49L,kBAAoB,SAAUt4K,GACvDxrB,KAAK+jM,eAAev4K,EAAKumC,MAE7BsxI,EAAmBn9L,UAAU89L,WAAa,SAAUx4K,GAChDxrB,KAAKkJ,QAAUsiB,EACfxrB,KAAK+xD,IAAM/xD,KAAK27B,OAAO41B,iBAAiB/lC,EAAK2sB,QACzC,eAAkBn4C,KAAK+xD,IAAI34B,SAAY,eAAkBp5B,KAAK+xD,IAAI34B,OAAOhlB,OAAkC,SAAzBpU,KAAK+xD,IAAI34B,OAAOhlB,OAClGpU,KAAKikM,iBAAiBz4K,EAAKllB,OAAQtG,KAAK+xD,MAGhDsxI,EAAmBn9L,UAAUg+L,YAAc,SAAU59L,GACjD,GAAKtG,KAAK6/L,OAAV,EAGI7/L,KAAK27B,OAAO5tB,SAAW/N,KAAK27B,OAAO2zB,QACnC,eAAuBtvD,KAAK27B,OAAQ,CAAC,mBAEzC,IAAIyyG,EAAO56H,SAASw7B,eAAehvC,KAAK6/L,OAAO12L,QAAQ+H,IACvD,GAAIlR,KAAK6/L,SAAW7/L,KAAK6/L,OAAOhzJ,aAAeuhG,EAAM,CACjD,IAAIv7F,EAAW,CAAEx+B,QAAQ,EAAOkoB,OAAQv8B,KAAK+xD,IAAKzrD,OAAQA,EAAQ6C,QAASilI,GAE3E,GADApuI,KAAK27B,OAAOrc,OAAO,QAAwBuzB,GACvCA,EAASx+B,OACT,OAEJrU,KAAKujM,cAAe,EAChBvjM,KAAKwjM,cACLxjM,KAAK2jM,eAAe9iH,eACpB7gF,KAAK27B,OAAO8e,IAAI,OAAyBz6C,KAAK+xG,gBAC9C/xG,KAAKwjM,aAAc,GAEvBxjM,KAAK6/L,OAAO3nL,UACZ,gBAAOk2H,GAEXpuI,KAAK27B,OAAOrc,OAAO,QAA0B,MAEjD+jL,EAAmBn9L,UAAU+9L,iBAAmB,SAAU39L,EAAQi2B,GAC9D,IAAI/Q,EAAO,CACP6qB,YAAa,QACbmb,WAAYj1B,EAAO4b,MAAOgsJ,WAAY5nK,EAAOnoB,MAE7CgwL,EAAc,cAClB54K,EAAK,GAAK44K,GAAepkM,KACzBA,KAAK27B,OAAO9tB,QAAQ,OAAoB2d,GACxC,IAAI64K,EAAUrkM,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,mBAAoB4G,GAAIqrB,EAAOge,IAAM,YAGjG,GAFAv6C,KAAKskM,OAAStkM,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,WAAY4G,GAAIqrB,EAAOge,IAAM,YACzFv6C,KAAKskM,OAAO/zL,aAAa,aAAcvQ,KAAKmgB,KAAKC,YAAY,yBACzDpgB,KAAK27B,OAAOysE,iBAAkB,CAC9B,IAAIm8F,EAAgB/wL,SAAS1B,cAAc,oDAC3CyyL,EAAc/5L,YAAYxK,KAAKskM,aAG/BtkM,KAAK27B,OAAOxyB,QAAQqB,YAAYxK,KAAKskM,QAEzCtkM,KAAK6/L,OAAS,IAAI,OAAO,CACrB5sF,eAAe,EACfuxF,eAAe,EACftkL,OAAQlgB,KAAK27B,OAAOzb,OACpBoS,SAAS,EACT/mB,UAAWvL,KAAK27B,OAAOpwB,UACvBwwC,QAAS/7C,KAAKykM,cAAc/4L,KAAK1L,KAAMsG,EAAQi2B,GAC/CzyB,SAAU9J,KAAK27B,OAAOxyB,QAAQ6B,UAAUkB,SAAS,YAAc,CAAEb,EAAG,SAAUC,EAAG,UAAa,CAAED,EAAG,GAAIC,EAAG,IAC1GhF,OAAQtG,KAAK27B,OAAOxyB,QAAQ6B,UAAUkB,SAAS,YAAcsH,SAAS6B,KAAOrV,KAAK27B,OAAOxyB,QACzFyU,QAAS,CAAC,CACF+wE,MAAO3uF,KAAK+jM,eAAer4L,KAAK1L,KAAMu8B,GACtCmoK,YAAa,CACTj0L,QAASzQ,KAAKmgB,KAAKC,YAAY,gBAAiBukL,WAAW,EAC3Dt0L,SAAUrQ,KAAK27B,OAAOtrB,SAAW,kBAAyBrQ,KAAK27B,OAAOtrB,SAAW,mBAGzF,CACIs+E,MAAO3uF,KAAK6jM,cAAcn4L,KAAK1L,KAAMu8B,GACrCmoK,YAAa,CAAEj0L,QAASzQ,KAAKmgB,KAAKC,YAAY,eAC1C/P,SAAUrQ,KAAK27B,OAAOtrB,SAAW,sBAA6BrQ,KAAK27B,OAAOtrB,SAAW,wBAEjGI,QAAS4zL,EACTj5L,OAAS,eAAkB,gBAAa9E,EAAQ,cAAiBtG,KAAK27B,OAAOxyB,QAAQ6B,UAAUkB,SAAS,YAAc,IAAM,IAC5H8mG,kBAAmB,CAAElqG,OAAQ,QAC7BuH,SAAUrQ,KAAK27B,OAAOtrB,SAAW,kBAAyBrQ,KAAK27B,OAAOtrB,SAAW,mBAErF,IAAI6oI,EAAmB,mBACvBl5I,KAAK6/L,OAAO,GAAK3mD,IAAoB,EACrCl5I,KAAK4kM,yBACL5kM,KAAK6/L,OAAO/zK,SAAS9rB,KAAKskM,SAE9BjB,EAAmBn9L,UAAU0+L,uBAAyB,WAClD,IAAIjsJ,EAAO34C,KAAK27B,OACZgd,EAAKyvD,mBACLpoG,KAAK6/L,OAAO/1L,SAAW,CAAEuB,EAAG,GAAIC,EAAG,IACnCtL,KAAK6/L,OAAOv5L,OAASkN,SAAS1B,cAAc,oDAC5C9R,KAAK6/L,OAAOz0L,MAAQ,OACpBpL,KAAK6/L,OAAOgF,SAAU,EACtB7kM,KAAK6/L,OAAOjiL,QAAU,CAAC,MAG/BylL,EAAmBn9L,UAAUu+L,cAAgB,SAAUn+L,EAAQi2B,IACtD,OAAQhnB,UAAYjP,GACrB,eAAqBA,EAAQtG,KAAK6/L,QAEtC7/L,KAAK8kM,2BAA6BvoK,EAClCv8B,KAAK+kM,eAAez+L,EAAQi2B,GACtBA,EAAO61B,oBAAwB,eAAkB71B,EAAOnD,SAAY,eAAkBmD,EAAOnD,OAAO4rK,KAClG,eAAkBzoK,EAAOnD,OAAO4rK,GAAG7+L,UACvCnG,KAAK8hM,sBAEJ,eAAkBvlK,EAAOspE,gBAIpB,eAAkB7lG,KAAKskM,OAAOxyL,cAAc,sBAClD9R,KAAKskM,OAAOxyL,cAAc,mBAAmB0T,QAC7CxlB,KAAKskM,OAAOxyL,cAAc,mBAAmBsV,cAAcpc,UAAU0G,IAAI,mBALzE1R,KAAKskM,OAAOxyL,cAAc,sBAAsBoV,kBAAkB1B,QAClExlB,KAAKskM,OAAOxyL,cAAc,sBAAsBoV,kBAAkBlc,UAAU0G,IAAI,mBAaxF2xL,EAAmBn9L,UAAU47L,oBAAsB,WAC/C,IAAIvlK,EAASv8B,KAAK8kM,2BACdvoK,EAAO+nE,gBACPtkG,KAAK27B,OAAOrc,OAAO,QAA4B,IAE/Ctf,KAAK27B,OAAOysE,kBACZpoG,KAAK6/L,OAAO12L,QAAQwD,MAAM7B,KAAO,MACjC9K,KAAK6/L,OAAO12L,QAAQwD,MAAMmmI,UAAY,QAGtC9yI,KAAK6/L,OAAO12L,QAAQwD,MAAMmmI,UAAY9yI,KAAK8yI,UAE/C9yI,KAAK6/L,OAAOhqL,OACZ,IAAIyqL,EAAYtgM,KAAK6/L,OAAO12L,QAAQ2I,cAAc,kBAAkBA,cAAc,SAC9EyuL,EAAWvgM,KAAK6/L,OAAO12L,QAAQ2I,cAAc,sBAAsBA,cAAc,SAC7D,UAApBwuL,EAAUniL,OAAyC,cAApBmiL,EAAUniL,OACrB,SAApBmiL,EAAUniL,OAAwC,aAApBmiL,EAAUniL,MACxCoiL,EAAS,iBAAiB,GAAG,YAAa,EAEpC,eAAkBA,GAAYA,EAASjwL,aAAa,eAC1DiwL,EAAS,iBAAiB,GAAG,YAAa,GAEzChkK,EAAOspE,gBACR7lG,KAAKilM,YAAY1oK,EAAQv8B,KAAK6/L,OAAO12L,QAAQ2I,cAAc,IAAMyqB,EAAOge,IAAM,YAElF,IAAI/uB,EAAO,CACP6qB,YAAa,QACbmb,WAAYj1B,EAAO4b,MAAOgsJ,WAAY5nK,EAAOnoB,MAE7CgwL,EAAc,cAClB54K,EAAK,GAAK44K,GAAepkM,KACzBA,KAAKujM,cAAe,EACfvjM,KAAKwjM,aACNxjM,KAAK27B,OAAO9tB,QAAQ,OAAuB2d,IAGnD63K,EAAmBn9L,UAAU6+L,eAAiB,SAAUz+L,EAAQyrD,GAC5D,IAAI6tI,EAAgB5/L,KAAK6/L,OAAO12L,QAAQ2I,cAAc,qBACtD9R,KAAK27B,OAAO2c,IAAI,sBAAuB,CAAE/b,OAAQw1B,IACjD/xD,KAAK2/L,iBAAiBC,EAAet5L,EAAQyrD,GAC7C/xD,KAAKklM,gBAAgBtF,EAAet5L,EAAQyrD,IAEhDsxI,EAAmBn9L,UAAUy5L,iBAAmB,SAAUC,EAAet5L,EAAQi2B,GAC7Ev8B,KAAK0jM,SAAS/D,iBAAiBC,EAAet5L,EAAQi2B,EAAQv8B,KAAK6/L,OAAQ7/L,KAAKiiM,UAAUkD,eAE9F9B,EAAmBn9L,UAAUg/L,gBAAkB,SAAUtF,EAAet5L,EAAQi2B,GAC5E,IAAI6oK,EAAWplM,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,sBACzD+6L,EAAOrlM,KAAKiiM,UAChBrC,EAAcp1L,YAAY46L,GAC1B,IAAIE,EAAqB,IAAItlM,KAAKyjM,SAASlnK,EAAOnoB,MAAMpU,KAAK27B,OAAQ37B,KAAK21C,eAAgB31C,KAAK27B,OAAO0e,gBACtG,GAAI9d,EAAOspE,eAAgB,CACvB,IAAIm4F,EAAW,GACXuH,EAAgB,QACpBvH,EAASzhK,EAAO4b,OAAS6lJ,EAAS,GAAKuH,GAAiBF,EAAKrmK,OAAOzC,EAAO4b,OACvE5b,EAAO6b,kBACP4lJ,EAASzhK,EAAO6b,iBAAmBitJ,EAAKrmK,OAAOzC,EAAO4b,OACtD6lJ,EAASzhK,EAAO4b,YAAShnC,GAE7B,IAAI4gD,EAAM,SACVisI,EAAS,GAAKjsI,GAAOx1B,EACrB,IAAI0hK,EAAkBj+L,KAAK27B,OAAO5tB,SAA8C,kBAA3BwuB,EAAqB,eACtE2hK,EAAel+L,KAAK27B,OAAOs2I,eAAiBjyK,KAAK27B,OAAOs2I,cAAcksB,eACtEn+L,KAAK27B,OAAOs2I,cAAcksB,cAAcpwL,QACxC25I,EAAS1nJ,KAAK27B,OAAOxyB,QAAQ+H,GAAKqrB,EAAOge,IAAM,iBACnD,GAAI0jJ,GAAmBC,EACnB3hK,EAAOsoE,mBAAPtoE,CAA2ByhK,EAAUh+L,KAAK27B,OAAQ,iBAAkB+rH,EAAQ,KAAM,KAAM09C,GACxFplM,KAAK27B,OAAOgsH,sBAEX,CACD,IAAI69C,EAAcjpK,EAAOsoE,mBAAPtoE,CAA2ByhK,EAAUh+L,KAAK27B,OAAQ,iBAAkB+rH,GACtF,eAAe09C,EAAUI,GAEzBxlM,KAAKwjM,cACLxjM,KAAK2jM,eAAe8B,KAAOzlM,KAAK6/L,OAAO12L,QAAQ2I,cAAc,4BAC7D9R,KAAK2jM,eAAerqL,aACpBtZ,KAAK27B,OAAOqR,GAAG,OAAyBhtC,KAAK+xG,eAAgB/xG,MAC7DA,KAAK2jM,eAAe+B,mBAIxB,GAAK,eAAkBnpK,EAAOnD,SAAY,eAAkBmD,EAAOnD,OAAO4rK,KAClE,eAAkBzoK,EAAOnD,OAAO4rK,GAAG7+L,QAWvCm/L,EAAmBn/L,OAAO,CACtBo2B,OAAQA,EAAQj2B,OAAQ8+L,EACxB/C,gBAAiBriM,KAAK0jM,SAAUnC,aAAcvhM,KAAKmgB,KAAM2/K,UAAW9/L,KAAK6/L,aAb7B,CAChD,IAAI32I,EAAO3sB,EAAOnD,OAAO4rK,GAAG7+L,OACR,kBAAT+iD,IACPA,EAAO,eAASA,EAAM98C,SAE1B88C,EAAK,CACD3sB,OAAQA,EAAQj2B,OAAQ8+L,EACxB/C,gBAAiBriM,KAAK0jM,SAAU5D,UAAW9/L,KAAK6/L,WAWhEwD,EAAmBn9L,UAAU++L,YAAc,SAAUlzI,EAAK4zI,GAKtD,IAJA,IAAIC,EACAt/L,EAASq/L,EAAc7zL,cAAc,sBACrCwzL,EAAqB,IAAItlM,KAAKyjM,SAAS1xI,EAAI39C,MAAMpU,KAAK27B,OAAQ37B,KAAK21C,eAAgB31C,KAAK27B,OAAO0e,gBAC/F/c,EAAUt9B,KAAKq6C,eAAe/c,QACzB7pB,EAAK,EAAGggD,EAAYn2B,EAAS7pB,EAAKggD,EAAU/sD,OAAQ+M,IAAM,CAC/D,IAAI8oB,EAASk3B,EAAUhgD,GACnBs+C,EAAIxX,MAAQhe,EAAOge,MACnBqrJ,EAAUrpK,EAAOpe,OAGzB,GAAK,eAAkB4zC,EAAI34B,SAAY,eAAkB24B,EAAI34B,OAAO4rK,KAC5D,eAAkBjzI,EAAI34B,OAAO4rK,GAAGjiJ,OAQpCuiJ,EAAmBviJ,MAAM,CAAExmB,OAAQw1B,EAAKzrD,OAAQA,EAAQq1B,OAAQ37B,KAAK27B,OAAQwd,cAAeysJ,QARhD,CAC5C,IAAI18I,EAAO6I,EAAI34B,OAAO4rK,GAAGjiJ,MACL,kBAATmG,IACPA,EAAO,eAASA,EAAM98C,SAE1B88C,EAAK,CAAE3sB,OAAQw1B,EAAKzrD,OAAQA,EAAQq1B,OAAQ37B,KAAK27B,OAAQwd,cAAeysJ,MAMhFvC,EAAmBn9L,UAAU69L,eAAiB,SAAUhyI,GACpD,IACI8zI,EAAO7lM,KAAK6/L,OAAO12L,QAAQ2I,cAAc,4BACzCg0L,EAAc9lM,KAAK0jM,SAAS9C,gBAC5B0E,EAAqB,IAAItlM,KAAKyjM,SAAS1xI,EAAI39C,MAAMpU,KAAK27B,OAAQ37B,KAAK21C,eAAgB31C,KAAK27B,OAAO0e,gBACnG,GAAI0X,EAAI8zC,eAAgB,CACpB,IAAI18F,EAAUnJ,KAAKskM,OAAOxyL,cAAc,sBACpCi0L,OAAY,EAChB,GAAI58L,EAAQkd,SAAS,GAAGlI,MACpB4nL,EAAY58L,EAAQkd,SAAS,GAAGlI,WAGhC,GAAK,eAAkBhV,EAAQkd,SAAS,GAAG4jH,eAKtC,CACD,IAAI+7D,EAAW78L,EAAQ2I,cAAc,cAChC,eAAkBk0L,KACnBD,EAAyB,YAAbh0I,EAAI39C,KAAqB4xL,EAASlnG,QACzC,eAAkBknG,EAAS/7D,eAExB+7D,EAAS7nL,MADT6nL,EAAS/7D,cAAc,GAAG9rH,YARtC4nL,GAAa/lM,KAAK27B,OAAO7e,UAAY3T,EAAQkd,SAAS,GAClDld,EAAQ2I,cAAc,UAAUm4H,cAAc,GAAG9rH,MAY7Dne,KAAKiiM,UAAUG,eAAerwI,EAAI5Z,MAAO2tJ,EAAaC,QAGtD,GAAK,eAAkBh0I,EAAI34B,SACtB,eAAkB24B,EAAI34B,OAAO4rK,KAAQ,eAAkBjzI,EAAI34B,OAAO4rK,GAAG/9E,MAStEq+E,EAAmBr+E,KAAK4+E,EAAM9zI,EAAK+zI,EAAa9lM,KAAKiiM,eATwB,CAC7E,IAAI/4I,EAAO6I,EAAI34B,OAAO4rK,GAAG/9E,KACL,kBAAT/9D,IACPA,EAAO,eAASA,EAAM98C,SAGhB88C,EAAK,CAAE//C,QAAS08L,EAAMtpK,OAAQw1B,EAAKzY,SAAUwsJ,EAAaxC,QAAStjM,KAAKiiM,YAM1FjiM,KAAKkkM,cACDlkM,KAAK27B,OAAO2oE,gBACZtkG,KAAK27B,OAAOrc,OAAO,OAAmC,KAG9D+jL,EAAmBn9L,UAAU+/L,sBAAwB,WACjDjmM,KAAKkkM,eAETb,EAAmBn9L,UAAU29L,cAAgB,SAAUtnK,GACnDv8B,KAAKiiM,UAAUiE,0BAA0B3pK,EAAO4b,OAChDn4C,KAAKkkM,eAETb,EAAmBn9L,UAAUgS,QAAU,WACnClY,KAAKkkM,eAMTb,EAAmBn9L,UAAUigM,gBAAkB,WAC3C,MAAO,CAAEhuJ,MAAOn4C,KAAK+xD,IAAI5Z,MAAOmB,SAAUt5C,KAAK0jM,SAAS9C,kBAE5DyC,EAAmBn9L,UAAUkgM,mBAAqB,WAoB9C,OAnBApmM,KAAKwjM,aAAc,EACnBxjM,KAAK2jM,eAAe0C,YAAYrmM,KAAKkJ,SACrClJ,KAAK2jM,eAAe2C,iBAAiBtmM,KAAKkJ,SAC1ClJ,KAAK6/L,OAAOjiL,QAAU,CAAC,CACf+wE,MAAO3uF,KAAK2jM,eAAe4C,SAAS76L,KAAK1L,KAAK2jM,gBAC9Ce,YAAa,CACTj0L,QAASzQ,KAAK2jM,eAAezhH,kBAAkB,gBAC/C7xE,SAAU,YAAas0L,WAAW,IAG1C,CACIh2G,MAAO3uF,KAAK2jM,eAAe4C,SAAS76L,KAAK1L,KAAK2jM,gBAC9Ce,YAAa,CAAEr0L,SAAU,SAAUI,QAASzQ,KAAK2jM,eAAezhH,kBAAkB,kBAE1FliF,KAAK2jM,eAAe7D,UAAY9/L,KAAK6/L,OACrC7/L,KAAK2jM,eAAe6C,IAAMxmM,KAAK6/L,OAAO12L,QACtCnJ,KAAK2jM,eAAe6C,IAAIx7L,UAAU0G,IAAI,kBACtC1R,KAAK2jM,eAAe6C,IAAIx7L,UAAUC,OAAO,oBACzCjL,KAAK8yI,UAAY,QACV9yI,KAAK2jM,eAAe8C,KAAK/1L,WAEpC2yL,EAAmBn9L,UAAU6rG,eAAiB,SAAUvmF,GAChDxrB,KAAKwjM,aACLxjM,KAAK27B,OAAO9tB,QAAQ,OAAuB2d,IAG5C63K,EAjW4B,GCTnC,EAAgC,WAUhC,SAASqD,EAAe/qK,EAAQ0e,EAAgB1E,GAC5C31C,KAAK27B,OAASA,EACd37B,KAAK2mM,cAAe,EACpB3mM,KAAK4mM,aAAe,IAAI,OAAmBjrK,GAC3C37B,KAAK4sC,mBAqET,OA7DA85J,EAAexgM,UAAUgS,QAAU,WAC/BlY,KAAKu7E,sBACLv7E,KAAK4mM,aAAa1C,eAEtBwC,EAAexgM,UAAU89L,WAAa,SAAU96L,GAC5ClJ,KAAK4mM,aAAa5C,WAAW96L,GAC7BlJ,KAAK27B,OAAO2c,IAAI,sBAAuB,CAAE/b,OAAQrzB,EAAQqzB,UAE7DmqK,EAAexgM,UAAUg+L,YAAc,WACnClkM,KAAKkY,UACDlY,KAAK2mM,cACL3mM,KAAK27B,OAAOrc,OAAO,QAAqB,KAGhDonL,EAAexgM,UAAU+/L,sBAAwB,WAC7CjmM,KAAK4mM,aAAa1C,eAQtBwC,EAAexgM,UAAUsU,cAAgB,WACrC,MAAO,kBAEXksL,EAAexgM,UAAU8rG,YAAc,SAAUxmF,GAC7CxrB,KAAK27B,OAAO9tB,QAAQ,OAAoB2d,IAE5Ck7K,EAAexgM,UAAU6rG,eAAiB,SAAUvmF,GAChDxrB,KAAK27B,OAAO9tB,QAAQ,OAAuB2d,IAE/Ck7K,EAAexgM,UAAU2gM,cAAgB,SAAUr7K,GAC3C,eAAgBxrB,KAAK27B,UACrB37B,KAAK27B,OAAOrc,OAAO,QAAqBkM,GACxCA,EAAKnX,QAAS,IAGtBqyL,EAAexgM,UAAU09L,kBAAoB,SAAU7xI,GACnD/xD,KAAK4mM,aAAaE,YAAY/0I,IAElC20I,EAAexgM,UAAU49L,kBAAoB,WACzC9jM,KAAK4mM,aAAaG,iBAClB/mM,KAAK4mM,aAAa1C,eAEtBwC,EAAexgM,UAAU0mC,iBAAmB,WACpC5sC,KAAK27B,OAAOkR,cAGhB7sC,KAAK27B,OAAOqR,GAAG,OAAsBhtC,KAAKgyG,YAAahyG,MACvDA,KAAK27B,OAAOqR,GAAG,OAAyBhtC,KAAK+xG,eAAgB/xG,MAC7DA,KAAK27B,OAAOqR,GAAG,QAAoBhtC,KAAK6mM,cAAe7mM,QAE3D0mM,EAAexgM,UAAUq1E,oBAAsB,WACvCv7E,KAAK27B,OAAOkR,cAGhB7sC,KAAK27B,OAAO8e,IAAI,OAAsBz6C,KAAKgyG,aAC3ChyG,KAAK27B,OAAO8e,IAAI,OAAyBz6C,KAAK+xG,gBAC9C/xG,KAAK27B,OAAO8e,IAAI,QAAoBz6C,KAAK6mM,iBAEtCH,EAnFwB,G,oCCP/B,EAAwC,WACxC,IAAIlhM,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GA+BxC,EAAiC,SAAU4C,GAS3C,SAASo+L,EAAgBrrK,EAAQ2jK,GAC7B,IAAIl2L,EAAQR,EAAOS,KAAKrJ,KAAM27B,IAAW37B,KAOzC,OANAoJ,EAAMi+I,UAAY,GAClBj+I,EAAM69L,cAAgB,GACtB79L,EAAMmM,UAAW,EACjBnM,EAAM89L,gBAAkB,KACxB99L,EAAMq2L,sBAAwBH,EAC9Bl2L,EAAM+9L,SAAU,EACT/9L,EAq+BX,OAr/BA,EAAU49L,EAAiBp+L,GAkB3Bo+L,EAAgB9gM,UAAUkhM,WAAa,SAAUhzL,EAAMklC,GACnD,IAAIpwC,EAAU,CACVvF,OAAQ,CAAC,QAAS,WAAY,GAAI,WAAY,kBAAmB,cAC7D,qBAAsB,UAAW,GAAI,gBACzC0oC,OAAQ,CAAC,QAAS,WAAY,GAAI,aAAc,WAAY,GAAI,WAAY,cAAe,GAAI,iBAEnGnjC,EAAQqf,KAAOrf,EAAQvF,OACvBuF,EAAQm+L,SAAWn+L,EAAQvF,OAC3BuF,EAAQo+L,SAAWp+L,EAAQvF,OAE3B,IADA,IAAI8iB,EAAQ,GACH1f,EAAI,EAAGA,EAAImC,EAAQ,GAAKkL,GAAM1N,OAAQK,IACvCmC,EAAQ,GAAKkL,GAAMrP,SAASgC,EAAEuQ,WAAY,KAAK5Q,OAC3C4yC,EACA7yB,EAAMxU,KAAK,CACP2lB,KAAM53B,KAAKkiF,kBAAkBh5E,EAAQ,GAAKkL,GAAMrP,SAASgC,EAAEuQ,WAAY,MAAQ,MAC/EslF,QAAS,yBAA2BtjD,IAAapwC,EAAQ,GAAKkL,GAAMrP,SAASgC,EAAEuQ,WAAY,KAAKgQ,cAAgB,GAAK,iBAIzHb,EAAMxU,KAAK,CACP2lB,KAAM53B,KAAKkiF,kBAAkBh5E,EAAQ,GAAKkL,GAAMrP,SAASgC,EAAEuQ,WAAY,MAAQ,QAKvFmP,EAAMxU,KAAK,CAAEigH,WAAW,IAGhC,OAAOzrG,GAQXugL,EAAgB9gM,UAAUgS,QAAU,WAKhC,GAJIlY,KAAKwmM,MACLxmM,KAAKunM,iBACL3+L,EAAO1C,UAAUg+L,YAAY76L,KAAKrJ,QAEjCA,KAAKuV,UAAYvV,KAAKwnM,QAAS,CAChC,IAAIpuG,EAAKp5F,KAAKwnM,QAAQr+L,QAAQ2I,cAAc,gBACtCsnF,GAAM,gBAAaA,EAAI,iBACzBp5F,KAAKynM,eAGTznM,KAAK6/L,SAAW7/L,KAAK6/L,OAAOhzJ,aAC5B7sC,KAAK0nM,gBAGbV,EAAgB9gM,UAAUyhM,WAAa,SAAUvzL,EAAMulC,EAAYiuJ,EAAaC,GAC5E,IAAI3+L,EAAU,CAAEmjC,OAAQ,aAAc9jB,KAAM,aAAc++K,SAAU,aAAcD,SAAU,iBAAkB1jM,OAAQ,gBACtH3D,KAAK8nM,KAAO9nM,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,0BACtDtK,KAAK27B,OAAOpwB,UACZvL,KAAK8nM,KAAK98L,UAAU0G,IAAI,SAGxB1R,KAAK8nM,KAAK98L,UAAUC,OAAO,SAE3BjL,KAAK27B,OAAOtrB,UACZrQ,KAAK8nM,KAAK98L,UAAU0G,IAAI1R,KAAK27B,OAAOtrB,UAExC,IAAIysL,EAAK98L,KAAK27B,OAAOtxB,cAAc,MAC/B4rF,EAAOt8C,EAAa,gCAAkC,qBAE1D,GAAI35C,KAAK27B,OAAOi2B,cAAgD,SAAhC5xD,KAAK27B,OAAOnhB,kBACpCxa,KAAKkJ,QAAQ6+L,mBAAoB,CACrC,IAAIC,EAAShoM,KAAK27B,OAAOssK,qBAAqBJ,EAAWttJ,KAAKjqC,aAAa,aACvE43L,EAAYloM,KAAK27B,OAAO41B,iBAAiBs2I,EAAW1vJ,OAAOyZ,aAC3Du2I,EAAUD,GAAwB,cAAXF,EAA2D,oBAAjC,+BACjDI,EAAWF,GAAwB,eAAXF,EAA6D,qBAAlC,gCACnDK,EAAoB,WAATj0L,EAAqBpU,KAAKkiF,kBAAkB,YAAwB,aAAT9tE,GAAgC,SAATA,EAC7FpU,KAAKkiF,kBAAkB,gBAAkBliF,KAAKkiF,kBAAkB,yBAChEomH,EAAqB,WAATl0L,EAAqBpU,KAAKkiF,kBAAkB,YAAwB,aAAT9tE,GAAgC,SAATA,EAC9FpU,KAAKkiF,kBAAkB,gBAAkBliF,KAAKkiF,kBAAkB,yBACpE46G,EAAGtyL,YAAYxK,KAAKuoM,eAAeF,EAASF,EAAO,oBACnDrL,EAAGtyL,YAAYxK,KAAKuoM,eAAeD,EAAUF,EAAQ,qBACrD,IAAIl2E,EAAYlyH,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,8CAC7DwyL,EAAGtyL,YAAY0nH,GAEdlyH,KAAKkJ,QAAQ6+L,oBACdjL,EAAGtyL,YAAYxK,KAAKuoM,eAAevoM,KAAKkiF,kBAAkB,eAAgBvoC,EAAa,GAAK,aAAcs8C,IAEjG,YAAT7hF,GACA0oL,EAAGtyL,YAAYxK,KAAKuoM,eAAevoM,KAAKkiF,kBAAkBh5E,EAAQ,GAAKkL,IAAQ,YAAawzL,GAAe5nM,KAAKwoM,mBAAqB,eAAiBvyG,EAAO,gBAAgB,IAEjLj2F,KAAK8nM,KAAKt9L,YAAYsyL,GACtB98L,KAAK27B,OAAOrc,OAAO,OAA4B,CAAEnW,QAASnJ,KAAK8nM,OAC/D9nM,KAAK27B,OAAOrc,OAAO,QAAoC,CAAEq6B,WAAYA,KAEzEqtJ,EAAgB9gM,UAAUqiM,eAAiB,SAAUjmL,EAAKhY,EAAWm+L,EAAUC,GAC3E,IAAItvG,EAAKp5F,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAWA,EAAY,iBAOlE,OANA8uF,EAAG1oF,UAAY4R,EACf82E,EAAGv4E,SAAWu4E,EAAGpuF,UAAUkB,SAAS,eAAiB,EAAI,EACzDktF,EAAGnuE,aAAajrB,KAAK27B,OAAOtxB,cAAc,OAAQ,CAAEC,UAAW,uBAAyBm+L,EAAU7zL,MAAO,CAAE,cAAe,UAAawkF,EAAGxqD,YACtI85J,GACAtvG,EAAG5uF,YAAYxK,KAAK27B,OAAOtxB,cAAc,OAAQ,CAAEC,UAAW,qBAE3D8uF,GAEX4tG,EAAgB9gM,UAAUyiM,aAAe,WAChC,OAAQpzL,UACT,OAAa7D,IAAI1R,KAAKwmM,IAAK,YAAaxmM,KAAK4oM,aAAc5oM,MAE/D,OAAa0R,IAAI1R,KAAKwmM,IAAK,QAASxmM,KAAK6oM,eAAgB7oM,MACzD,OAAa0R,IAAI1R,KAAKwmM,IAAK,QAASxmM,KAAK8oM,MAAO9oM,MAChD,OAAa0R,IAAI1R,KAAKwmM,IAAK,UAAWxmM,KAAKiZ,QAASjZ,OAExDgnM,EAAgB9gM,UAAUqhM,eAAiB,WAClC,OAAQhyL,UACT,OAAatK,OAAOjL,KAAKwmM,IAAK,YAAaxmM,KAAK4oM,cAEpD,OAAa39L,OAAOjL,KAAKwmM,IAAK,QAASxmM,KAAK6oM,gBAC5C,OAAa59L,OAAOjL,KAAKwmM,IAAK,QAASxmM,KAAK8oM,OAC5C,OAAa79L,OAAOjL,KAAKwmM,IAAK,UAAWxmM,KAAKiZ,UAElD+tL,EAAgB9gM,UAAU2iM,eAAiB,SAAU91L,GACjD,IAAI7J,EAAU,CAAEmjC,OAAQ,aAAc9jB,KAAM,aAAc8+K,SAAU,iBAAkB1jM,OAAQ,gBAC1F05L,EAAW,gBAAatqL,EAAEzM,OAAQ,eAClC+2L,IACIr9L,KAAKkiF,kBAAkB,iBAAmBm7G,EAAS/8H,UAAUnuD,QAC7DnS,KAAK8mM,cACL9mM,KAAKkkM,gBAEClkM,KAAKkJ,QAAQ6+L,oBAAsB,OAAQxyL,WAC9CvV,KAAKkiF,kBAAkBh5E,EAAQlJ,KAAKkJ,QAAQkL,SAAWipL,EAAS/8H,UAAUnuD,QAC7EnS,KAAK4oM,aAAa71L,KAI9Bi0L,EAAgB9gM,UAAU6iM,uBAAyB,SAAUh2L,EAAGi2L,EAAmBC,GAC/E,IAAI/6E,EAAuB,YAAVn7G,EAAElP,KAAgC,QAAVkP,EAAElP,KAAiBkP,EAAEm2L,SAAaF,EAAkBj/L,QAAQyJ,SAASsT,eAAiB,EACzHkiL,EAAkBj/L,QAAQyJ,SAASsT,eAAiB,EACtD+qK,EAAcmX,GAAoB96E,EAAY86E,EAAkBtiM,QAAUsiM,EAAkBtiM,QAEhG,GAAImrL,EAAa,CACbA,EAAYrsK,QACZ,IAAI2jL,EAAatX,EAAY7mL,UAAUkB,SAAS,gBAAkB,aAAe+8L,EAC7E3iM,EAASurL,EAAY7mL,UAAUkB,SAAS,gBAAkB,gBAAa2lL,EAAa,YAAc,gBAAaA,EAAa,eAChI7xL,KAAKopM,cAAc9iM,EAAQ6iM,KAGnCnC,EAAgB9gM,UAAU4iM,MAAQ,SAAU/1L,GACxC,GAAe,QAAVA,EAAElP,KAAiBkP,EAAEm2L,UAAuB,QAAVn2L,EAAElP,IAAe,CACpD,IAAIslM,EAAap2L,EAAEzM,OAAO0E,UAAUkB,SAAS,gBAAkB,aAAe,cAC1E5F,EAASyM,EAAEzM,OAAO0E,UAAUkB,SAAS,eACnC,gBAAa6G,EAAEzM,OAAQ,eAAiB,gBAAayM,EAAEzM,OAAQ,YACrEtG,KAAKopM,cAAc9iM,EAAQ6iM,QAE1B,GAAe,YAAVp2L,EAAElP,KAA+B,cAAVkP,EAAElP,KAAyBkP,EAAEq7E,OAK1C,UAAVr7E,EAAElP,KAA8B,eAAXkP,EAAEuR,OAA0BvR,EAAEzM,OAAO0E,UAAUkB,SAAS,iBACnF6G,EAAE6F,iBACF7F,EAAEzM,OAAOqoF,QACL57E,EAAEzM,OAAO0E,UAAUkB,SAAS,eAC5BlM,KAAK4oM,aAAa71L,GAClB/S,KAAKwnM,QAAQr+L,QAAQ2I,cAAc,gBAAgB0T,QACnDxlB,KAAKopM,cAAc,gBAAappM,KAAKwnM,QAAQr+L,QAAQ2I,cAAc,gBAAiB,eAAgB,aACpG9R,KAAKknM,gBAAkBlnM,KAAKwnM,QAAQr+L,QAAQ2I,cAAc,sBAZI,CAClEiB,EAAE6F,iBACF,IAAIowL,EAAoBnjM,MAAM+oK,KAAK5uK,KAAKwmM,IAAIr+K,iBAAiB,oGAC7DnoB,KAAK+oM,uBAAuBh2L,EAAGi2L,EAAmB,iBAa1DhC,EAAgB9gM,UAAU+S,QAAU,SAAUlG,GAE5B,YAAVA,EAAElP,KAA+B,cAAVkP,EAAElP,KACzBkP,EAAE6F,kBAGVouL,EAAgB9gM,UAAUkjM,cAAgB,SAAUh7D,EAAM9jI,GACtD,IAAI++L,EAAW71L,SAAS1B,cAAc,IAAMxH,GACxC++L,GACAA,EAASr+L,UAAUC,OAAOX,GAE1B8jI,GACAA,EAAKpjI,UAAU0G,IAAIpH,IAG3B08L,EAAgB9gM,UAAUuhM,aAAe,WACrCznM,KAAKspM,aAAc,EACftpM,KAAKwnM,UAAYxnM,KAAKwnM,QAAQ36J,cAC9B7sC,KAAKwnM,QAAQtvL,UACb,OAAajN,OAAOjL,KAAKwnM,QAAQr+L,QAAS,UAAWnJ,KAAKupM,uBAC1D,gBAAOvpM,KAAKwpM,OACZxpM,KAAK27B,OAAOrc,OAAO,QAA8B,CAAEhZ,OAAQ,KAAM8oC,OAAQ,GAAI8jG,QAAQ,EAAOnhF,IAAK/xD,KAAKkJ,QAAQqzB,WAGtHyqK,EAAgB9gM,UAAU0iM,aAAe,SAAU71L,GAC/C,IAAI/S,KAAKkJ,QAAQ6+L,oBAAiC,cAAXh1L,EAAEqB,KAAzC,CAGA,IAGIs0L,EAHApiM,EAASyM,EAAEzM,OAAOwL,cAAc,kBAChCsnF,EAAK,gBAAarmF,EAAEzM,OAAQ,eAC5BmjM,EAAUzpM,KAAK8nM,KAAKh2L,cAAc,cAStC,GAPI23L,GACAA,EAAQz+L,UAAUC,OAAO,aAEzBmuF,IACAA,EAAGpuF,UAAU0G,IAAI,aACjBg3L,EAAYtvG,EAAGpuF,UAAUkB,SAAS,eAElC5F,EAAJ,CAGA,IAAKoiM,EAAW,CACZ,IAAIgB,EAAU1pM,KAAK8nM,KAAKh2L,cAAc,cACjC,eAAkB43L,IACnBA,EAAQ1+L,UAAUC,OAAO,cAE7BjL,KAAKynM,eAET,IAAIkC,EAAe3pM,KAAKwoM,mBACxB,IAAKxoM,KAAKspM,aAAeZ,EAAW,CAChCtvG,EAAGpuF,UAAU0G,IAAI,cACjB1R,KAAKspM,aAAc,EACnB,IAAIM,EAAc,CACdpwG,MAAOx5F,KAAKonM,WAAWpnM,KAAKkJ,QAAQkL,KAAMu1L,EAAeA,EAAappL,QAAQ,MAAO,SAAMpP,GAC3F+c,OAAQluB,KAAK6pM,cAAcn+L,KAAK1L,MAChC8pM,QAAS9pM,KAAKynM,aAAa/7L,KAAK1L,MAChCuL,UAAWvL,KAAK27B,OAAOpwB,UACvBynG,kBAAmB,CAAElqG,OAAQ,QAC7BihM,YAAa/pM,KAAKgqM,aAAat+L,KAAK1L,MACpCqQ,SAAUrQ,KAAKkJ,QAAQ6+L,oBAAsB/nM,KAAK27B,OAAOtrB,SACrD,6BAAoCrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAKkJ,QAAQ6+L,mBACxE,4BAA8B/nM,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,IAEpFrQ,KAAK27B,OAAOxyB,QAAQqB,YAAYxK,KAAKwpM,OACrCxpM,KAAKwnM,QAAU,IAAI,OAAYoC,EAAa5pM,KAAKwpM,OACjD,OAAa93L,IAAI1R,KAAKwnM,QAAQr+L,QAAS,UAAWnJ,KAAKupM,sBAAuBvpM,MAC9E,IAAI2zG,EAAS3zG,KAAK8nM,KAAKh2L,cAAc,cAAc9E,wBAC/CD,EAAM,CAAElC,IAAK,EAAGC,KAAM,GAC1B,GAAI9K,KAAKkJ,QAAQ6+L,mBAAoB,CACjC,IAAI7+L,EAAU,CAAEmjC,OAAQ,aAAc9jB,KAAM,aAAc8+K,SAAU,iBAAkB1jM,OAAQ,gBAC1F8M,EAAU+C,SAAS1B,cAAc,gDACjC3G,EAASsF,EAAQpB,aAAe,EACpCrP,KAAKwnM,QAAQr+L,QAAQwD,MAAMxB,OAAS,eAAiBA,EAAS,MAC9DnL,KAAKwnM,QAAQ,QAAQr8L,EAAQ,EAAGqI,SAAS6B,MACzC,IAAI+5B,EAASpvC,KAAKkiF,kBAAkBh5E,EAAQlJ,KAAKkJ,QAAQkL,OACzDpU,KAAK27B,OAAOrc,OAAO,QAA8B,CAC7ChZ,OAAQtG,KAAKwnM,QAAQr+L,QAAQie,cAAegoB,OAAQA,EAAQ8jG,QAAQ,QAGvE,CACD,GAAI,OAAQ39H,SAAU,CAClBvV,KAAKuV,UAAW,EAChB,IAAI00L,EAAcjqM,KAAKkqM,mBACvBn9L,EAAIlC,KAAOuB,OAAOonI,YAAcy2D,EAAY9+L,QAAU,EACtD4B,EAAIjC,MAAQsB,OAAO+9L,WAAaF,EAAY7+L,OAAS,EACrDpL,KAAKkkM,cACLlkM,KAAKuV,UAAW,OAGhBxI,EAAIlC,IAAM,OAAQ+2B,KAAOx1B,OAAOuK,YAAcg9F,EAAO9oG,IAAMuB,OAAOmnI,QAAU5/B,EAAO9oG,IACnFkC,EAAIjC,KAAO9K,KAAKoqM,kBAAkBpqM,KAAKwmM,KAE3CxmM,KAAKwnM,QAAQ,QAAQz6L,EAAIlC,IAAKkC,EAAIjC,KAAMiI,EAAEzM,QAE9C,eAAiBtG,KAAK27B,OAAOxyB,QAASnJ,KAAKwnM,QAAQr+L,QAAQie,mBAGnE4/K,EAAgB9gM,UAAUqjM,sBAAwB,SAAUx2L,GACxD,GAAe,QAAVA,EAAElP,KAAiBkP,EAAEm2L,UAAuB,QAAVn2L,EAAElP,IAAe,CACpDkP,EAAE6F,iBACF,IAAIowL,EAAoBnjM,MAAM+oK,KAAK5uK,KAAKwnM,QAAQr+L,QAAQgf,iBAAiB,qFAEzEnoB,KAAK+oM,uBAAuBh2L,EAAGi2L,EAAmB,iBAEnC,cAAVj2L,EAAElP,KAAiC,WAAVkP,EAAElP,MAChCkP,EAAE6F,iBACF5Y,KAAKwnM,QAAQ77L,QACb3L,KAAKknM,gBAAkB,KACvB1zL,SAAS1B,cAAc,0BAA0B9G,UAAUC,OAAO,cAClEuI,SAAS1B,cAAc,0BAA0B0T,UAGzDwhL,EAAgB9gM,UAAUsiM,iBAAmB,WACzC,IAAImB,EACA/wJ,EAAa54C,KAAKqqM,kBAAkBrqM,KAAKkJ,QAAQivC,OAerD,OAdIS,GAAoC,IAAtBA,EAAWlyC,OAErBijM,EAD2B,uBAA3B/wJ,EAAW,GAAGU,UAAgE,oBAA3BV,EAAW,GAAGU,SAClD,UAGA,eAIfV,GAAoC,IAAtBA,EAAWlyC,SACzB1G,KAAKggM,SAAWhgM,KAAKy/L,sBAAsBz/L,KAAKkJ,QAAQkL,KAAO,YAC/Du1L,EAAe/wJ,EAAW,GAAGU,UAG9BqwJ,GAEX3C,EAAgB9gM,UAAU8jM,aAAe,SAAUx+K,GAC/C,GAAIxrB,KAAKkJ,SAAWlJ,KAAKkJ,QAAQ6+L,oBAAsBv8K,EAAKlX,MAAO,CAC/D,IAAIhO,EAASklB,EAAKlX,MAAMhO,OACpBgkM,EAAehkM,EAAO0E,UAAUkB,SAAS,oBACtC5F,EAAO0E,UAAUkB,SAAS,mBAAqB5F,EAAO0E,UAAUkB,SAAS,eAChFsf,EAAKnX,QAAUi2L,OAGX9+K,EAAKlX,iBAAiBi2L,YAAc/+K,EAAKlX,MAAMhO,OAAO0E,UAAUkB,SAAS,eACzEsf,EAAKnX,QAAS,IAI1B2yL,EAAgB9gM,UAAUgkM,iBAAmB,WAEzC,OADAlqM,KAAKwnM,QAAQr+L,QAAQwD,MAAMC,QAAU,QAC9B5M,KAAKwnM,QAAQr+L,QAAQ6D,yBAEhCg6L,EAAgB9gM,UAAUkkM,kBAAoB,SAAU9jM,GACpD,IAAIkkM,EAAexqM,KAAKkqM,mBAAmB9+L,MACvCq/L,EAAiBnkM,EAAO0G,wBACxB09L,EAAUD,EAAel5K,MAAQi5K,EAAexqM,KAAK27B,OAAOxyB,QAAQgG,YACpEw7L,EAAerkM,EAAO8I,YAAc9I,EAAO6I,YAE/C,OADAw7L,EAAeA,EAAeA,EAAe,EAAI,EACzCD,EAAU,EAAMD,EAAel5K,MAAQ,EAAIo5K,EAAiBF,EAAe3/L,KAAO0/L,EAAe,EAAIG,GAEjH3D,EAAgB9gM,UAAU89L,WAAa,SAAU96L,GAC7C,IAAIE,EAAQpJ,KAIZ,GAHAA,KAAKqmM,YAAYn9L,GACjBlJ,KAAKsmM,iBAAiBp9L,GACtBlJ,KAAK4qM,WAAW1hM,IACZA,EAAQmL,OAAZ,CAGArU,KAAK8/L,UAAUnyL,WACf,IAAIk9L,EAAgB7qM,KAAKqqM,kBAAkBnhM,EAAQivC,QAAUn4C,KAAKqqM,kBAAkBnhM,EAAQivC,OAAOzxC,QAC/F1G,KAAKkJ,QAAQ4hM,gBAAgB1xK,QAAO,SAAU24B,GAC1C,OAAO3oD,EAAMF,QAAQivC,QAAU4Z,EAAI5Z,SACpCzxC,OACP1G,KAAK2nM,WAAWz+L,EAAQkL,KAAMy2L,EAAe,EAAqB,IAAjBA,GAAuC,IAAjBA,EAAqB3hM,GAC5FlJ,KAAKwmM,IAAIv7K,aAAajrB,KAAK8nM,KAAM9nM,KAAKwmM,IAAI53J,YAC1C5uC,KAAKwmM,IAAIx7L,UAAU0G,IAAI,iBACnB1R,KAAK27B,OAAOpwB,WACZvL,KAAKwmM,IAAIx7L,UAAU0G,IAAI,SAE3B1R,KAAKwmM,IAAIx7L,UAAUC,OAAO,oBAC1BjL,KAAKwpM,MAAQxpM,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,iBACtDpB,EAAQqzB,OAAO+nE,gBACftkG,KAAK27B,OAAOrc,OAAO,QAA4B,IAEnDtf,KAAK2oM,iBAET3B,EAAgB9gM,UAAUg+L,YAAc,WACpClkM,KAAKkY,WAET8uL,EAAgB9gM,UAAU2jM,cAAgB,SAAU92L,GAC5CA,EAAEqpB,OACFp8B,KAAK27B,OAAOrc,OAAO,QAA0B,IAC7Ctf,KAAKq9L,SAAWtqL,EAAEqpB,KAClBp8B,KAAKkkM,cACLlkM,KAAK+qM,eAAeh4L,KAQ5Bi0L,EAAgB9gM,UAAU6kM,eAAiB,SAAUh4L,GACjD,IAAI3J,EAAQpJ,KACRsG,EAASyM,EAAIA,EAAE5J,aAAUgI,EACzBorB,EAASv8B,KAAKkJ,QAAQivC,MACtBhB,GAAa,eAAkB5a,IAAW,eAAeA,GACzDyuK,GAAoB,eAAkBzuK,IAAW,eAAkBA,GACnE8nK,EAAUrkM,KAAK27B,OAAOtxB,cAAc,MAAO,CAC3CC,UAAW,iBACX4G,GAAIimC,EAAY6zJ,EAAmB,YAAczuK,EAAS,cAM9D,GAJAv8B,KAAKskM,OAAStkM,KAAK27B,OAAOtxB,cAAc,MAAO,CAC3CC,UAAW,aACX4G,GAAIimC,EAAY6zJ,EAAmB,WAAazuK,EAAS,aAEzDv8B,KAAKkJ,QAAQ6+L,mBAAoB,CACjC,IAAIxD,EAAgB/wL,SAAS1B,cAAc,yDAC3CyyL,EAAc/5L,YAAYxK,KAAKskM,aAG/BtkM,KAAK27B,OAAOxyB,QAAQqB,YAAYxK,KAAKskM,QAEzCtkM,KAAK6/L,OAAS,IAAI,OAAO,CACrBzwJ,OAAQpvC,KAAKkiF,kBAAkB,gBAC/B2iH,SAAS,EACToG,aAAcjrM,KAAK0nM,aAAah8L,KAAK1L,MACrCizG,eAAe,EACf/yF,OAAQlgB,KAAK27B,OAAOzb,OACpBskL,eAAe,EACfl+L,OAAQkN,SAAS6B,KAEjBid,SAAS,EACT/mB,UAAWvL,KAAK27B,OAAOpwB,UACvBC,KAAM,WAEF,IADA,IAAIgyB,EAAO,GAAGlqB,MAAMjK,KAAKD,EAAMy2L,OAAO12L,QAAQgf,iBAAiB,wCACtDphB,EAAI,EAAGA,EAAIy2B,EAAK92B,OAAQK,IAAK,CAClC,IAAIw5L,EAAW/iK,EAAKz2B,GAAGsf,SAAS,GAAGvU,cAAc,cAC7Co5L,EAAe1tK,EAAKz2B,GACnB+K,cAAc,6BAA6B,iBAAiB,GACtC,YAAvBo5L,EAAa/sL,OAA8C,eAAvB+sL,EAAa/sL,OAC1B,WAAvB+sL,EAAa/sL,OAA6C,cAAvB+sL,EAAa/sL,MAChDoiL,EAAS,iBAAiB,GAAG,YAAa,EAErCA,IAAa,eAAkBA,EAASjwL,aAAa,eAC1DiwL,EAAS,iBAAiB,GAAG,YAAa,GAGlD,IAAI/jK,EAAMpzB,EAAMy2L,OAAO12L,QAAQ2I,cAAc,yBAC7C,GAAI1I,EAAMF,QAAQqzB,OAAOspE,eAAgB,CACrC,IAAIslG,EAAkB,eAAe/hM,EAAMF,QAAQqzB,OAAO4b,OACtD,eAAkB/uC,EAAMF,QAAQqzB,OAAO4b,OAAS/uC,EAAMF,QAAQqzB,OAAO4b,MACrE8lJ,EAAkB70L,EAAMuyB,OAAO5tB,SAA4D,kBAAzC3E,EAAMF,QAAQqzB,OAAqB,eAErF2hK,EAAe90L,EAAMuyB,OAAOs2I,eAAiB7oK,EAAMuyB,OAAOs2I,cAAcksB,eAExE/0L,EAAMuyB,OAAOs2I,cAAcksB,cAAcpwL,QACzCkwL,GAAmBC,EACnB90L,EAAMuyB,OAAOgsH,iBAAgB,WACzBnrH,EAAI1qB,cAAc,IAAMq5L,EAAkB,mBAAmB3lL,WAIjEgX,EAAI1qB,cAAc,IAAMq5L,EAAkB,mBAAmB3lL,UAOzE7Z,MAAO3L,KAAK0nM,aAAah8L,KAAK1L,MAC9B+7C,QAAS/7C,KAAKorM,cAAc1/L,KAAK1L,KAAMsG,EAAQi2B,GAC/C3e,QAAS,CAAC,CACF+wE,MAAO3uF,KAAK+jM,eAAer4L,KAAK1L,KAAMu8B,GACtCmoK,YAAa,CACTj0L,QAASzQ,KAAKkiF,kBAAkB,YAAayiH,WAAW,EACxDt0L,SAAUrQ,KAAK27B,OAAOtrB,SAAW,gBAAuBrQ,KAAK27B,OAAOtrB,SAAW,iBAGvF,CACIs+E,MAAO3uF,KAAK0nM,aAAah8L,KAAK1L,MAC9B0kM,YAAa,CAAEj0L,QAASzQ,KAAKkiF,kBAAkB,gBAC3C7xE,SAAUrQ,KAAK27B,OAAOtrB,SAAW,oBAA2BrQ,KAAK27B,OAAOtrB,SAAW,sBAE/FI,QAAS4zL,EACTj5L,MAAO,IACP4nG,kBAAmB,CAAElqG,OAAQ,QAC7BuH,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,KAE5D,IAAI6oI,EAAmB,mBACvBl5I,KAAK6/L,OAAO,GAAK3mD,IAAoB,EACrCl5I,KAAK4kM,yBACL5kM,KAAKskM,OAAO/zL,aAAa,aAAcvQ,KAAKkiF,kBAAkB,2BAC9DliF,KAAKqnJ,UAAUp1I,KAAKjS,KAAK6/L,QACzB7/L,KAAK6/L,OAAO/zK,SAAS9rB,KAAKskM,SAE9B0C,EAAgB9gM,UAAU0+L,uBAAyB,WAC/C,GAAI5kM,KAAKkJ,QAAQ6+L,mBAAoB,CACjC,IAAIsD,EAAmB73L,SAAS1B,cAAc,4BAC1Cu5L,GACAA,EAAiBrgM,UAAUC,OAAO,2BAEtCjL,KAAK6/L,OAAOjiL,QAAU,CAAC,IACvB5d,KAAK6/L,OAAOzwJ,YAASj+B,EACrBnR,KAAK6/L,OAAO/1L,SAAW,CAAEuB,EAAG,GAAIC,EAAG,IACnCtL,KAAK6/L,OAAOv5L,OAASkN,SAAS1B,cAAc,yDAC5C9R,KAAK6/L,OAAOz0L,MAAQ,OACpBpL,KAAK6/L,OAAOgF,SAAU,EACtB7kM,KAAK6/L,OAAO5sF,eAAgB,IAOpC+zF,EAAgB9gM,UAAUwhM,aAAe,WACrC1nM,KAAK27B,OAAOrc,OAAO,QAA0B,KACxCtf,KAAK27B,OAAO5tB,SAAW/N,KAAK27B,OAAO2zB,aAA0Cn+C,IAAhCnR,KAAK27B,OAAO2vK,iBAC1D,eAAuBtrM,KAAK27B,OAAQ,CAAC,mBAEzC37B,KAAKurM,cAAcvrM,KAAKqnJ,WACxB,gBAAOrnJ,KAAKskM,QACZtkM,KAAK27B,OAAOrc,OAAO,QAA0B,KAEjD0nL,EAAgB9gM,UAAUklM,cAAgB,SAAU9kM,EAAQi2B,GAGxD,GAFAv8B,KAAKwrM,mBAAmBllM,EAAQi2B,GAChCv8B,KAAK6/L,OAAO12L,QAAQwD,MAAM7B,KAAO,MAC5B9K,KAAKkJ,QAAQ6+L,mBAGb,CACD,IAAIt3L,EAAU+C,SAAS1B,cAAc,gDACjC3G,EAASsF,EAAQpB,aAAe,EACpCrP,KAAK6/L,OAAO12L,QAAQwD,MAAM9B,IAAMM,EAAS,UALzCnL,KAAK6/L,OAAO12L,QAAQwD,MAAM9B,IAAM,OAO/B7K,KAAKkJ,QAAQ6+L,oBAAsB,OAAQxyL,UAAYnJ,OAAO+9L,WAAa,MAC5EnqM,KAAK6/L,OAAO12L,QAAQwD,MAAMvB,MAAQ,OAEtCpL,KAAK27B,OAAOrc,OAAO,OAA+B,CAAEid,OAAQA,EAAQkvK,OAAQzrM,KAAK8/L,YACjF9/L,KAAK6/L,OAAOhqL,OACZ,eAAiB7V,KAAK27B,OAAOxyB,QAASnJ,KAAK6/L,OAAO12L,QAAQie,gBAE9D4/K,EAAgB9gM,UAAUslM,mBAAqB,SAAUllM,EAAQi2B,GAC7D,IAAIqjK,EAAgB5/L,KAAK6/L,OAAO12L,QAAQ2I,cAAc,mBAClD45L,EAAY1rM,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEqG,UAAW1Q,KAAKkiF,kBAAkB,iBAAkB53E,UAAW,qBAClHs1L,EAAcp1L,YAAYkhM,GAE1B,IAAIC,EAAW3rM,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEqG,UAAW1Q,KAAKkJ,QAAQ0iM,YAAathM,UAAW,oBAClGs1L,EAAcp1L,YAAYmhM,GAC1B3rM,KAAK+kM,eAAexoK,EAAQqjK,IAOhCoH,EAAgB9gM,UAAU69L,eAAiB,SAAUhyI,GACjD,IAOI85I,EAPA10J,GAAa,eAAkB4a,IAAQ,eAAeA,GACtDi5I,GAAoB,eAAkBj5I,IAAQ,eAAkBA,GAChE+5I,EAAW30J,EAAY6zJ,EAAmBj5I,EAC1Cg6I,EAAS/rM,KAAKskM,OAAOxyL,cAAc,IAAMg6L,EAAW,mBAAmB7hE,cAAc,GACrF+hE,EAAYhsM,KAAKskM,OAAOxyL,cAAc,IAAMg6L,EAAW,kBAAkB7hE,cAAc,GACvFgiE,EAASjsM,KAAKskM,OAAOxyL,cAAc,IAAMg6L,EAAW,oBAAoB7hE,cAAc,GACtFiiE,EAAYlsM,KAAKskM,OAAOxyL,cAAc,IAAMg6L,EAAW,mBAAmB7hE,cAAc,GAE5F,GAA0B,WAAtBjqI,KAAKkJ,QAAQkL,KAAmB,CAChC,IAAI+3L,EAAWnsM,KAAKskM,OAAOxyL,cAAc,IAAMg6L,EAAW,eAAe7hE,cAAc,GACvF4hE,EAAgBM,EAASrtG,QAE7B,IAAIstG,EAAWpsM,KAAKskM,OAAOxyL,cAAc,IAAMg6L,EAAW,wBAAwB7hE,cAAc,GAC5FzxF,EAAa4zJ,EAASttG,QAAU,MAAQ,KACvB,OAAjBmtG,EAAO9tL,QACPq6B,EAAY,MAEhBx4C,KAAKoiM,eAAepiM,KAAKkJ,QAAQivC,MAAO6zJ,EAAU7tL,MAAO4tL,EAAO5tL,MAAOq6B,EAAWqzJ,EAAe7rM,KAAKkJ,QAAQ6pD,aAAcm5I,EAAU/tL,MAAO8tL,EAAO9tL,OACpJne,KAAK0nM,gBAiBTV,EAAgB9gM,UAAUk8L,eAAiB,SAAUn9C,EAAWonD,EAAeC,EAAY9zJ,EAAWe,EAAWwZ,EAAcw5I,EAAgBC,GAC3I,IAGIC,EAHA16I,EAAM/xD,KAAK27B,OAAO41B,iBAAmBvxD,KAAK27B,OAAO41B,iBAAiB0zF,GAAajlJ,KAAKkJ,QAAQqzB,OAC5F4b,EAAQn4C,KAAKoyD,gBAAgBL,GAAOA,EAAI3Z,gBAAkB6sG,EAC1DynD,EAAQ,GAERvgH,EAAM,CACN6S,SAAUh/F,KAAMsjJ,QAAStjJ,KAAKoiM,eAAgB7+C,KAAM0B,EAAWzB,KAAM6oD,EAAeM,KAAML,EAAYM,KAAMp0J,EAC5Gq0J,KAAMtzJ,EAAWuzJ,KAAM/5I,EAAcg6I,KAAMR,EAAgBS,KAAMR,EAAan4L,QAAQ,GAG1F,GADArU,KAAK27B,OAAOrc,OAAO,QAAoB6sE,IACnCA,EAAI93E,OAAR,CAGAq4L,EAAMz6L,KAAK,CACPkmC,MAAOA,EACPK,UAAWA,EACXe,UAAWA,EACXwZ,aAAcA,EACdzZ,SAAU+yJ,EACVluL,MAAOguE,EAAIwgH,KACXv4L,KAAMpU,KAAKkJ,QAAQkL,OAEvBq4L,EAAa,IAAI,OAAUt0J,EAAOk0J,EAAc/kL,cAAe6kE,EAAIwgH,MAAOpzJ,EAAWwZ,GAChF,eAAkBy5I,IAAiB,eAAkBD,KACtDG,EAAMz6L,KAAK,CACPkmC,MAAOA,EACPK,UAAWA,EACXe,UAAWA,EACXwZ,aAAcA,EACdzZ,SAAUizJ,EACVpuL,MAAOguE,EAAI6gH,KACX54L,KAAMpU,KAAKkJ,QAAQkL,OAEvBq4L,EAAaA,EAAW,GAAKj0J,GAAWL,EAAOo0J,EAAejlL,cAAeklL,GAAcjzJ,EAAWwZ,IAE1G,IAAIvnC,EAAO,CACPpF,OAAQ,YAAa6mL,iBAAkBP,EAAOv0J,MAAOn4C,KAAKkJ,QAAQivC,MAClE+0J,YAAaT,EAAYU,gBAAiBT,GAE1C1sM,KAAKoyD,gBAAgBL,GACrB/xD,KAAKotM,iBAAiB5hL,EAAMkhL,EAAOD,GAGnCzsM,KAAKkJ,QAAQo6I,QAAQ93H,KAI7Bw7K,EAAgB9gM,UAAUy5L,iBAAmB,SAAUpjK,EAAQ69B,EAAOizI,EAAWz0J,EAAYlJ,GACzF,IAAI49J,EAAettM,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,gBAAiBsK,MAAO,CAAEC,KAAM,SAChGulD,EAAM5vD,YAAY8iM,GAClB,IAAIC,EAAWvtM,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,gBAC5DgjM,EAAa9iM,YAAY+iM,GACzB,IAAIlN,EAAUrgM,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,mBACxD6sC,GAAa,eAAkB5a,IAAW,eAAeA,GACzDyuK,GAAoB,eAAkBzuK,IAAW,eAAkBA,GACnE+jK,EAAYtgM,KAAK27B,OAChBtxB,cAAc,QAAS,CAAE6G,GAAIimC,EAAY6zJ,EAAmBqC,EAAY9wK,EAAS8wK,IACtFhN,EAAQ71L,YAAY81L,GACpBiN,EAAS/iM,YAAY61L,GACrB,IAAIN,EAAO//L,KAAKkJ,QAAQkL,KAAO,WAC3B8rL,EAAiBlgM,KAAKy/L,sBAAsB,GAAKM,GACrD//L,KAAKggM,SAAWE,EAChB,IAAIC,EAAgBngM,KAAKogM,gBAAgBpgM,KAAKkJ,QAAQqzB,OAAQqc,EAAYlJ,GAEtE89J,EAAW,GACXxtM,KAAKq9L,WACLmQ,EAAWxtM,KAAKq9L,SAASzlK,KAAKtkB,MAAM,GAAI,GACpCk6L,IAAaxtM,KAAKkiF,kBAAkB,kBACpCi+G,EAAgBzwJ,EAAU89J,OAAWr8L,GAErCq8L,IAAaxtM,KAAKkiF,kBAAkB,aACpCi+G,EAAgBngM,KAAKkiF,kBAAkBxyC,EAAU,qBAAuB,qBAGhF,IAAIqiB,EAAM/xD,KAAKkJ,QAAQqzB,OACnByiK,EAAW,IAAI,OAAa,eAAO,CACnC7kK,WAAY+lK,EACZjoJ,OAAQ,CAAErgB,KAAM,OAAQzZ,MAAO,SAC/ByZ,KAAMuoK,EACN50L,UAAWvL,KAAK27B,OAAOpwB,UACvB8E,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,MACzD0hD,EAAI34B,OAAOme,SACdv3C,KAAKqnJ,UAAUp1I,KAAK+sL,GACpB,IAAIvsL,EAAM,CAAE,KAAQzS,KAAKw/L,aAAa9zL,KAAK1L,MAAO,OAAUA,KAAKytM,oBAAoB/hM,KAAK1L,OAC1F,gBAAsBsgM,EAAUpvL,GAAI,CAAC,OAAe,QAAkBuB,EAAKzS,MAC3Eg/L,EAASpyJ,iBAAiB,OAAkB5sC,KAAKinM,cAAc3G,EAAUpvL,IAAI,SAC7E8tL,EAASpyJ,iBAAiB,OAAiB5sC,KAAKinM,cAAc3G,EAAUpvL,IAAI,SAC5E8tL,EAASlzK,SAASw0K,GAClB,IAAIhnJ,EAAWt5C,KAAK2/F,iBAAiBwgG,GACrC,MAAO,CAAEmN,aAAcA,EAAch0J,SAAUA,IAEnD0tJ,EAAgB9gM,UAAUwnM,4BAA8B,SAAU5vJ,GAC1DA,EAAU30C,QAAQ6B,UAAUkB,SAAS,kBACrC,gBAAoB4xC,EAAW,CAAC,OAAe,QAAkB99C,MAE5D89C,EAAU30C,QAAQ6B,UAAUkB,SAAS,mBAC1C,gBAAoB4xC,EAAW,CAAC,OAAuB,QAAiB99C,OAGhFgnM,EAAgB9gM,UAAUs5L,aAAe,SAAUh0K,GAC/CA,EAAKK,MAAM1iB,QAAQwD,MAAM6c,QAAUxpB,KAAK8/L,UAAUt2K,OAAS,GAAGlS,YAElE0vL,EAAgB9gM,UAAUunM,oBAAsB,SAAUjiL,GAClDA,EAAKriB,QAAQ+H,GAAGy8L,SAAS,kBACzB3tM,KAAKqsM,cAAgB7gL,EAAKrN,MAAM7G,WAGhCtX,KAAKusM,eAAiB/gL,EAAKrN,MAAM7G,WAErC,IAAIipL,EAAW/0K,EAAKriB,QAAQ8C,QAAQ,kBAAkBoa,SAAS,GAAGvU,cAAc,cAC5Eo5L,EAAe1/K,EAAKriB,QAAQ,iBAAiB,GACtB,YAAvB+hM,EAAa/sL,OAA8C,eAAvB+sL,EAAa/sL,OAC1B,WAAvB+sL,EAAa/sL,OAA6C,cAAvB+sL,EAAa/sL,MAChDoiL,EAAS,iBAAiB,GAAG,YAAa,EAEpC,eAAkBA,EAASjwL,aAAa,eAC9CiwL,EAAS,iBAAiB,GAAG,YAAa,IAOlDyG,EAAgB9gM,UAAUigM,gBAAkB,WACxC,MAAO,CAAEkG,cAAersM,KAAKqsM,cAAeE,eAAgBvsM,KAAKusM,eAAgBp0J,MAAOn4C,KAAKkJ,QAAQivC,QAEzG6uJ,EAAgB9gM,UAAUy5F,iBAAmB,SAAU/nE,GACnD,IAAI8oK,EAAgB,IAAI,OAAY1gM,KAAKggM,UAAU9mJ,cAAa,IAAI,QAAQM,MAAM,OAAQ,QAAS5hB,IACnG,OAAQ,eAAkB8oK,EAAc,IAA+B,GAAzBA,EAAc,GAAGviL,OAEnE6oL,EAAgB9gM,UAAUk6L,gBAAkB,SAAUruI,EAAKnZ,EAAYlJ,GACnE,IAAI4J,EAYJ,OAVIA,EADAV,GAAcA,EAAWlyC,OAAS,EACD,IAAtBkyC,EAAWlyC,OACjBgpC,EAAUkJ,EAAW,GAAGU,SAAWV,EAAW,GAAGU,SACjD5J,EAAUkJ,EAAW,GAAGU,cAAWnoC,EAEnCu+B,GAAwB,WAAbqiB,EAAI39C,OAAsB29C,EAAI34B,OAAOkgB,SAC1C,aAGA5J,EAAUqiB,EAAI34B,OAAOkgB,UAAY,aAAUnoC,EAEnDnR,KAAK4tM,gBAAgBt0J,IAEhC0tJ,EAAgB9gM,UAAU0nM,gBAAkB,SAAUt0J,GAClD,IAAIonJ,EAAgB,IAAI,OAAY1gM,KAAKggM,UAAU9mJ,cAAa,IAAI,QAAQM,MAAM,QAAS,QAASF,IACpG,OAAQ,eAAkBonJ,EAAc,IAA8B,GAAxBA,EAAc,GAAG9oK,MAEnEovK,EAAgB9gM,UAAU6+L,eAAiB,SAAUxoK,EAAQqjK,GACzD,IAAIhnJ,EAAa54C,KAAKqqM,kBAAkB,GAAK9tK,GACzC69B,EAAQp6D,KAAK27B,OAAOtxB,cAAc,QAAS,CAAEC,UAAW,eAAgBsK,MAAO,CAAEC,KAAM,UAC3F+qL,EAAcp1L,YAAY4vD,GAC1B,IAAI8jC,EAAWl+F,KAAK27B,OAAOtxB,cAAc,QACzC6zF,EAASxtF,UAAY,+DACrB0pD,EAAM5vD,YAAY0zF,GAElB,IAAI6hG,EAAO//L,KAAK2/L,iBAAiBpjK,EAAQ69B,EAAO,iBAAkBxhB,GAAY,GAC9E54C,KAAKqsM,cAAgBtM,EAAKzmJ,SAE1Bt5C,KAAKklM,gBAAgB3oK,EAAQwjK,EAAM,kBAAmBnnJ,GAAY,GAClE,IAAIJ,EAAYx4C,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,mBAAoBsK,MAAO,CAAEC,KAAM,SAChGulD,EAAM5vD,YAAYguC,GAElBx4C,KAAK6tM,kBAAkBtxK,EAAQic,EAAWI,GAE1CmnJ,EAAO//L,KAAK2/L,iBAAiBpjK,EAAQ69B,EAAO,kBAAmBxhB,GAAY,GAC3E54C,KAAKusM,eAAiBxM,EAAKzmJ,SAE3Bt5C,KAAKklM,gBAAgB3oK,EAAQwjK,EAAM,mBAAoBnnJ,GAAY,IAEvEouJ,EAAgB9gM,UAAU2nM,kBAAoB,SAAUtxK,EAAQmH,EAAIkV,GAChE,IAAIk1J,EAAK9tM,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,eAAgBsK,MAAO,CAAE,QAAW,OAC1F8uB,EAAGl5B,YAAYsjM,GACf,IAAIC,EAAW/tM,KAAK27B,OACftxB,cAAc,MAAO,CAAEC,UAAW,kBAAmBsK,MAAO,CAAE,MAAS,2BACxEuiC,GAAa,eAAkB5a,IAAW,eAAeA,GACzDyuK,GAAoB,eAAkBzuK,IAAW,eAAkBA,GACnEyxK,EAAgBhuM,KAAK27B,OAAOtxB,cAAc,QAAS,CAAE6G,GAAIimC,EAAY6zJ,EAAmB,uBAAyBzuK,EAAS,uBAAwB3nB,MAAO,CAAE,KAAQ,WACnKq5L,EAAiBjuM,KAAK27B,OAAOtxB,cAAc,QAAS,CAAE6G,GAAIimC,EAAY6zJ,EAAmB,wBAA0BzuK,EAAS,wBAAyB3nB,MAAO,CAAE,KAAQ,WAE1Km5L,EAASvjM,YAAYwjM,GACrBD,EAASvjM,YAAYyjM,GACrBH,EAAGtjM,YAAYujM,GACW,WAAtB/tM,KAAKkJ,QAAQkL,MACbpU,KAAKkuM,gBAAgB3xK,EAAQmH,EAAIoqK,EAAI,cAAel1J,GAGxD,IAAIwzJ,EAAW,IAAI,OAAY,CAC3B95H,MAAOtyE,KAAKkiF,kBAAkB,OAC9B59E,KAAM,UAAWw6F,SAAS,EAC1BvzF,UAAWvL,KAAK27B,OAAOpwB,UACvB8E,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,KAE5DrQ,KAAKqnJ,UAAUp1I,KAAKm6L,GAEpB,IAAI+B,EAAU,IAAI,OAAY,CAC1B77H,MAAOtyE,KAAKkiF,kBAAkB,MAC9B59E,KAAM,UACNiH,UAAWvL,KAAK27B,OAAOpwB,UACvB8E,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,KAE5DrQ,KAAKqnJ,UAAUp1I,KAAKk8L,GACpB,IAAIvI,EAAUhtJ,GAAoC,IAAtBA,EAAWlyC,OAAekyC,EAAW,GAAGJ,UAAY,MAChE,QAAZotJ,GACAwG,EAASttG,SAAU,EACnBqvG,EAAQrvG,SAAU,IAGlBqvG,EAAQrvG,SAAU,EAClBstG,EAASttG,SAAU,GAGvBstG,EAAStgL,SAASkiL,GAClBG,EAAQriL,SAASmiL,GACjB7B,EAASjjM,QAAQ02F,mBAAmB70F,UAAU0G,IAAI,oBAClDy8L,EAAQhlM,QAAQ02F,mBAAmB70F,UAAU0G,IAAI,oBAGrDs1L,EAAgB9gM,UAAUqlM,cAAgB,SAAU9oI,GAChD,IAAK,IAAIhvD,EAAK,EAAG26L,EAAa3rI,EAAUhvD,EAAK26L,EAAW1nM,OAAQ+M,IAAM,CAClE,IAAI0nD,EAAMizI,EAAW36L,GACjB0nD,IAAQA,EAAItuB,cACZ7sC,KAAK0tM,4BAA4BvyI,GACjCA,EAAIjjD,aAKhB8uL,EAAgB9gM,UAAUg/L,gBAAkB,SAAU3oK,EAAQwjK,EAAMlgK,EAAW+Y,EAAYlJ,GACvF,IAAIvxB,EAAQne,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,iBACzDy1L,EAAKuN,aAAa9iM,YAAY2T,GAC9B,IAAIg5B,GAAa,eAAkB5a,IAAW,eAAeA,GACzDyuK,GAAoB,eAAkBzuK,IAAW,eAAkBA,GACnE6oK,EAAWplM,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,oBACzD+jM,EAAgBruM,KAAKkJ,QAAQ4hM,gBAAgBj4I,MAAK,SAAUd,GAAO,OAAOx1B,IAAWw1B,EAAI5Z,SACzFm2J,EAAiBtuM,KAAKkJ,QAAQ4hM,gBAAgB1xK,QAAO,SAAU24B,GAAO,OAAOA,EAAI5Z,QAAU5b,KAC/F,GAAIv8B,KAAKkJ,QAAQqzB,OAAOspE,eAAgB,CACpC,IAAIttE,EAAO,GACPg2K,EAAYvuM,KAAKkJ,QAAQqzB,OACzB8xK,GAAiBxuK,IACjBtH,EAAOv4B,KAAKwuM,mBAAmB3uK,EAAWtH,EAAMg2K,EAAW31J,EAAY01J,IAE3E,IAAIrQ,EAAkBj+L,KAAK27B,OAAO5tB,SAA2D,kBAAxC/N,KAAKkJ,QAAQqzB,OAAqB,eAEnF2hK,EAAel+L,KAAK27B,OAAOs2I,eAAiBjyK,KAAK27B,OAAOs2I,cAAcksB,eAEtEn+L,KAAK27B,OAAOs2I,cAAcksB,cAAcpwL,QACxC25I,EAAS1nJ,KAAK27B,OAAOxyB,QAAQ+H,GAAKq9L,EAAUh0J,IAAM,iBACtD,GAAI0jJ,GAAmBC,EACnBl+L,KAAKkJ,QAAQqzB,OAAOsoE,mBAApB7kG,CAAwCu4B,EAAMv4B,KAAK27B,OAAQ,iBAAkB+rH,EAAQ,KAAM,KAAM09C,OAEhG,CACD,IAAIj8L,EAAUnJ,KAAKkJ,QAAQqzB,OAAOsoE,mBAApB7kG,CAAwCu4B,EAAMv4B,KAAK27B,OAAQ,iBAAkB+rH,GAC3F,eAAe09C,EAAUj8L,GAEzB80L,GAAmBC,EACnBl+L,KAAK27B,OAAOgsH,iBAAgB,WACxBy9C,EAAStzL,cAAc,SAASZ,GAAKimC,EAAY6zJ,EAAmBnrK,EAAYtD,EAASsD,EACzF1hB,EAAM3T,YAAY46L,QAKrBplM,KAAK27B,OAAO7e,UAAYsoL,EAAS/+K,SAAS,GAAK++K,EAAStzL,cAAc,UAAUZ,GAAKimC,EAClF6zJ,EAAmBnrK,EAAYtD,EAASsD,EAC5C1hB,EAAM3T,YAAY46L,QAGrB,CACD,IAAIqJ,EAAazuM,KAAK27B,OACjBtxB,cAAc,QAAS,CAAE6G,GAAIimC,EAAY6zJ,EAAmBnrK,EAAYtD,EAASsD,IACtFulK,EAAS56L,YAAYikM,GACrBtwL,EAAM3T,YAAY46L,GAClB,IAAIQ,OAAU,EACVptJ,OAAY,EACZI,GAAcA,EAAWlyC,OAAS,IAClC8xC,EAAkC,IAAtBI,EAAWlyC,OAClBgpC,EAAUkJ,EAAW,GAAKA,EAAW,GACrClJ,EAAUkJ,EAAW,QAAKznC,EAC/By0L,EAAWptJ,GAAaA,EAAUc,WAAaymJ,EAAKzmJ,SAAYd,EAAUr6B,WAAQhN,EAC9E,eAAkBy0L,KAClBA,OAAUz0L,IAGlB,IAAIm/C,EAAQ,CACR,OAAUtwD,KAAK0uM,mBAAmBhjM,KAAK1L,MACvC,OAAUA,KAAK2uM,qBAAqBjjM,KAAK1L,MACzC,KAAQA,KAAK4uM,WAAWljM,KAAK1L,MAC7B,SAAYA,KAAK4uM,WAAWljM,KAAK1L,MACjC,SAAYA,KAAK6uM,eAAenjM,KAAK1L,OAEzCswD,EAAMtwD,KAAKkJ,QAAQkL,MAAMpU,KAAKkJ,QAASqzB,EAAQkyK,EAAY7I,EAAS5lM,KAAK27B,OAAOpwB,aAGxFy7L,EAAgB9gM,UAAUsoM,mBAAqB,SAAU3uK,EAAWtH,EAAMg2K,EAAW31J,EAAY01J,GAC7F,IAAIQ,EAA0B,oBAAdjvK,EAAkC,EAAI,EACtD,GAAkB,oBAAdA,GAAmCyuK,EAAe5nM,OAAS,EAAG,CAC9D6xB,EAAO,CAAEgE,OAAQqc,aAAsB/yC,MAAQ+yC,EAAW7zC,SAAS+pM,EAAUx3L,WAAY,KAAOshC,GAChG,IAAI83D,EAAO1wG,KAAKkJ,QAAQqzB,OAAOub,YAAcw2J,EAAe5nM,OAAS,EACtB,IAA1C1G,KAAKkJ,QAAQqzB,OAAOub,WAAWpxC,OAAe,EAAI,EAAKooM,EAC5Dv2K,EAAKv4B,KAAKkJ,QAAQivC,OAASo2J,EAAUn2J,gBACjCp4C,KAAKkJ,QAAQqzB,OAAOub,WAAW/yC,SAAS2rG,EAAKp5F,WAAY,KAAKi3L,EAAUn2J,iBACxEk2J,EAAevpM,SAAS2rG,EAAKp5F,WAAY,KAAK6G,MAC9Cne,KAAKkJ,QAAQkvC,kBACb7f,EAAKv4B,KAAKkJ,QAAQkvC,iBAAmBp4C,KAAKkJ,QAAQqzB,OAC7Cub,WAAW/yC,SAAS2rG,EAAKp5F,WAAY,KAAKi3L,EAAUn2J,kBAGjE,OAAO7f,GAGXyuK,EAAgB9gM,UAAUgoM,gBAAkB,SAAU3xK,EAAQmH,EAAI6V,EAAW1Z,EAAW+Y,GACpF,IAAIm2J,EAAe/uM,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,sBAAuBsK,MAAO,CAAE,MAAS,2BACtGuiC,GAAa,eAAkB5a,IAAW,eAAeA,GACzDyuK,GAAoB,eAAkBzuK,IAAW,eAAkBA,GACnEyyK,EAAiBhvM,KAAK27B,OAAOtxB,cAAc,QAAS,CAAE6G,GAAIimC,EAAY6zJ,EAAmBnrK,EAAYtD,EAASsD,EAAWjrB,MAAO,CAAE,KAAQ,cAC9Im6L,EAAavkM,YAAYwkM,GACzBz1J,EAAU/uC,YAAYukM,GACtB,IAAInJ,KAAUhtJ,GAAcA,EAAWlyC,OAAS,KAC3CkyC,GAAoC,IAAtBA,EAAWlyC,OAAekyC,EAAW,GAAGW,UAAYX,EAAW,GAAGW,WAGjF01J,EAAW,IAAI,OAAS,CACxB38H,MAAOtyE,KAAKkiF,kBAAkB,aAC9B32E,UAAWvL,KAAK27B,OAAOpwB,UAAWuzF,QAAS8mG,EAC3Cv1L,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,KAE5DrQ,KAAKqnJ,UAAUp1I,KAAKg9L,GAEpBA,EAASnjL,SAASkjL,IAGtBhI,EAAgB9gM,UAAU0oM,WAAa,SAAU1lM,EAASqzB,EAAQ2yK,EAAYnD,EAAQoD,GAClF,IAAIntL,EAAS,eAAoB9Y,EAAQ8Y,OAAQ9Y,EAAQkL,OAASlL,EAAQ8Y,OACtEotL,EAAa,IAAI,OAAW,eAAO,CACnCptL,OAAQA,EACR3R,SAAUrQ,KAAK27B,OAAOtrB,SAAW,kBAAyBrQ,KAAK27B,OAAOtrB,SAAW,iBACjFqP,YAAa1f,KAAKkiF,kBAAkB,+BACpC92E,MAAO,OACPG,UAAW4jM,EACXhxL,MAAO,IAAIE,KAAK0tL,GAChB7rL,OAAQlgB,KAAK27B,OAAOzb,QACrBhX,EAAQqzB,OAAOnD,OAAOme,SACzBv3C,KAAKqnJ,UAAUp1I,KAAKm9L,GACpBA,EAAWtjL,SAASojL,IAGxBlI,EAAgB9gM,UAAU2oM,eAAiB,SAAU3lM,EAASqzB,EAAQ2yK,EAAYnD,EAAQoD,GACtF,IAAIntL,EAAS,eAAoB9Y,EAAQ8Y,OAAQ9Y,EAAQkL,MACrDi7L,EAAiB,IAAI,OAAe,eAAO,CAC3CrtL,OAAQA,EACR3R,SAAUrQ,KAAK27B,OAAOtrB,SAAW,kBAAyBrQ,KAAK27B,OAAOtrB,SAAW,iBACjFqP,YAAa1f,KAAKkiF,kBAAkB,+BACpC92E,MAAO,OACPG,UAAW4jM,EACXhxL,MAAO,IAAIE,KAAK0tL,GAChB7rL,OAAQlgB,KAAK27B,OAAOzb,QACrBhX,EAAQqzB,OAAOnD,OAAOme,SACzBv3C,KAAKqnJ,UAAUp1I,KAAKo9L,GACpBA,EAAevjL,SAASojL,IAE5BlI,EAAgB9gM,UAAUopM,eAAiB,SAAUv8L,GACjDA,EAAEhP,OAAS,eAAqBgP,EAAEhP,SAGtCijM,EAAgB9gM,UAAUyoM,qBAAuB,SAAUzlM,EAASqzB,EAAQ2yK,EAAYnD,EAAQoD,GAC5F,IAAII,EAAiB,IAAI,OAAe,eAAO,CAC3CvtL,OAAQ9Y,EAAQ8Y,OAChBtC,YAAa1f,KAAKkiF,kBAAkB,2BACpC32E,UAAW4jM,EACXhxL,MAAO4tL,EACP7rL,OAAQlgB,KAAK27B,OAAOzb,OACpB7P,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,MACzDnH,EAAQqzB,OAAOnD,OAAOme,SACzBv3C,KAAKqnJ,UAAUp1I,KAAKs9L,GACpBA,EAAezjL,SAASojL,IAG5BlI,EAAgB9gM,UAAUwoM,mBAAqB,SAAUxlM,EAASqzB,EAAQ2yK,EAAYnD,EAAQoD,GAC1F,IAAIK,EAASxvM,KAAKkJ,QAAQqzB,OACtB61B,EAAkBpyD,KAAKoyD,gBAAgBo9I,GACvCr1K,EAAai4B,EAAkBo9I,EAAOr1K,WAAajxB,EAAQixB,WAC3D8d,EAAS,CAAE95B,MAAOi0C,EAAkBo9I,EAAOp3J,gBAAkB7b,GAC7DslK,EAAS,IAAI,OAAa,eAAO,CACjC1nK,WAAYA,aAAsB,OAAcA,EAAa,IAAI,OAAYA,GAC7E8d,OAAQA,EACR7d,MAAOp6B,KAAKyvD,WACZ6xI,UAAW,YACXphL,OAAQlgB,KAAK27B,OAAOzb,OACpB7P,SAAUrQ,KAAK27B,OAAOtrB,SAAW,kBAAyBrQ,KAAK27B,OAAOtrB,SAAW,iBACjFipF,UAAU,EACV55E,YAAa1f,KAAKkiF,kBAAkB,2BACpC32E,UAAW4jM,EACXv3K,KAAMm0K,GACPyD,EAAOp2K,OAAOme,SACjB,GAAIpd,GAAc,WAAYA,EAAY,CACtC,IAAIwnK,EAAS,eAAa,CAAEtrJ,YAAa,uBAAyBr2C,KAAKyvD,YACvEzvD,KAAK27B,OAAO9tB,QAAQ,QAAwB8zL,EAAO3rJ,OACnD,IAAIE,EAAMyrJ,EAAOC,SACjB1rJ,EAAIU,QAAQlc,MAAK,SAAU3nB,GACvB8uL,EAAO1nK,WAAa,IAAI,OAAYpnB,MAG5C/S,KAAKqnJ,UAAUp1I,KAAK4vL,GACpB,IAAIpvL,EAAM,CAAE,eAAkBzS,KAAKyvM,iBAAiB5N,EAAQtlK,GAAS,MAASv8B,KAAKwhM,QAAQK,EAAQtlK,EAAQrzB,EAASgmM,IACpH,gBAAsBA,EAAWh+L,GAAI,CAAC,OAAuB,QAAiBuB,EAAKzS,MACnF6hM,EAAOj1J,iBAAiB,OAAgB5sC,KAAKinM,cAAciI,EAAWh+L,IAAI,SAC1E2wL,EAAOj1J,iBAAiB,OAAuB5sC,KAAKinM,cAAciI,EAAWh+L,IAAI,SACjF2wL,EAAO/1K,SAASojL,IAEpBlI,EAAgB9gM,UAAUupM,iBAAmB,SAAU5N,EAAQtlK,GAC3D,OAAO,SAAUxpB,GACb,IAAIokC,GAAa,eAAkB5a,IAAW,eAAeA,GAC7DxpB,EAAEhP,OAASgP,EAAEhP,OAAOq1B,QAAO,SAAU+hC,EAAK9oD,EAAO+oK,GAC7C,OAAOA,EAAI3uK,KAAI,SAAUijM,GACrB,OAAOv4J,EAAY,gBAA4B0qJ,EAAO5pJ,OAAO95B,MAAOuxL,GAC9DA,EAAU7N,EAAO5pJ,OAAO95B,UAC/BpU,QAAQotC,EAAY,gBAA4B0qJ,EAAO5pJ,OAAO95B,MAAOg9C,GACpEA,EAAI0mI,EAAO5pJ,OAAO95B,UAAY9L,OAI9C20L,EAAgB9gM,UAAUs7L,QAAU,SAAUK,EAAQtlK,EAAQrzB,EAASgmM,GACnE,IAAI9lM,EAAQpJ,KACZ,OAAO,WACH,IAAIm3C,GAAa,eAAkB5a,IAAW,eAAeA,GACzDyuK,GAAoB,eAAkBzuK,IAAW,eAAkBA,GACnEozK,EAAcx4J,EAAY6zJ,EAAmBzuK,EACjDslK,EAAOtrG,WAAantF,EAAMk7L,OAAOxyL,cAAc,IAAM69L,GAChDT,EAAWh+L,KAAQy+L,EAAc,kBAC9B,iBACA,oBAAoB1lE,cAAc,GAAG9rH,MAC7C0jL,EAAO1nJ,WAA8B,WAAjBjxC,EAAQkL,OACvBhL,EAAMk7L,OAAOxyL,cAAc,IAAM69L,EAAc,eAAe1lE,cAAc,GAAGnrC,QAEpF+iG,EAAOtrG,WAAc,eAAkBsrG,EAAOtrG,YAC1C,QADwDsrG,EAAOtrG,aAIpEywG,EAt/ByB,CAu/BlC,QCthCE,EAAwC,WACxC,IAAIxhM,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAoBxC,EAA6B,SAAU4C,GAWvC,SAASgnM,EAAYj0K,EAAQ0e,EAAgB1E,EAAgB2pJ,GACzD,IAAIl2L,EAAQR,EAAOS,KAAKrJ,KAAM27B,EAAQ0e,EAAgB1E,IAAmB31C,KAIzE,OAHAoJ,EAAMuyB,OAASA,EACfvyB,EAAMu9L,cAAe,EACrBv9L,EAAMymM,gBAAkB,IAAI,EAAgBl0K,EAAQ2jK,GAC7Cl2L,EA2DX,OA1EA,EAAUwmM,EAAahnM,GAuBvBgnM,EAAY1pM,UAAUgS,QAAU,WAC5BlY,KAAK6vM,gBAAgB3L,eAEzB0L,EAAY1pM,UAAU89L,WAAa,SAAU96L,GACzClJ,KAAK6vM,gBAAgB7L,WAAW96L,IAEpC0mM,EAAY1pM,UAAUg+L,YAAc,WAChClkM,KAAK6vM,gBAAgB3L,cACjBlkM,KAAK2mM,cACL3mM,KAAK27B,OAAOrc,OAAO,QAAqB,KAGhDswL,EAAY1pM,UAAU09L,kBAAoB,SAAU7xI,GAChD/xD,KAAK6vM,gBAAgB/I,YAAY/0I,IAErC69I,EAAY1pM,UAAU+/L,sBAAwB,SAAU6J,GAChDA,EACA9vM,KAAK6vM,gBAAgBnI,eAGrB1nM,KAAKkkM,eAGb0L,EAAY1pM,UAAU49L,kBAAoB,SAAUt4K,GAC3CA,EAAKskL,eAKN9vM,KAAK6vM,gBAAgB9L,eAAev4K,EAAKumC,IAAI5Z,QAJ7Cn4C,KAAK6vM,gBAAgB9I,iBACrB/mM,KAAK6vM,gBAAgB3L,gBAM7B0L,EAAY1pM,UAAUk8L,eAAiB,SAAUn9C,EAAWonD,EAAeC,EAAY9zJ,EAAWe,EAAWwZ,EAAcw5I,EAAgBC,GACvIxsM,KAAK6vM,gBAAgBzN,eAAen9C,EAAWonD,EAAeC,EAAY9zJ,EAAWe,EAAWwZ,EAAcw5I,EAAgBC,IAMlIoD,EAAY1pM,UAAUigM,gBAAkB,WACpC,OAAOnmM,KAAK6vM,gBAAgB1J,mBAQhCyJ,EAAY1pM,UAAUsU,cAAgB,WAClC,MAAO,eAEJo1L,EA3EqB,CA4E9B,GC5EE,EAAwB,WASxB,SAASG,EAAOp0K,EAAQ0e,EAAgB1E,GACpC31C,KAAKw4C,UAAY,MACjBx4C,KAAKgwM,gBAAiB,EACtBhwM,KAAKiwM,gBAAiB,EACtBjwM,KAAKgb,SAAU,EACfhb,KAAKg/B,OAAS,GACdh/B,KAAK6+L,UAAY,GACjB7+L,KAAKkwM,SAAW,GAChBlwM,KAAKmwM,eAAiB,GACtBnwM,KAAKoU,KAAO,CAAE,KAAQ,EAAoB,SAAY,EAAgB,MAAS,GAE/EpU,KAAKowM,gBAAkB,CACnBlkM,SAAU,WAAYmkM,SAAU,WAAYC,MAAO,QAASC,YAAa,cAAeC,mBAAoB,qBAC5GC,SAAU,WAAYC,gBAAiB,kBAAmBC,SAAU,WAAYC,WAAY,aAAcC,SAAU,WACpHC,OAAQ,SAAUC,QAAS,UAAWC,KAAM,QAEhDhxM,KAAKixM,eAAiB,CAAE94J,MAAO,GAAI+6F,QAAQ,GAE3ClzI,KAAKkxM,gBAAkB,CAAC,IAAK,IAAK,KAClClxM,KAAKmxM,gBAAkB,CAAC,IAAK,IAAK,KAClCnxM,KAAKmtM,gBAAkB,GACvBntM,KAAK27B,OAASA,EACd37B,KAAKq6C,eAAiBA,EACtBr6C,KAAK21C,eAAiBA,EACtB31C,KAAK4sC,mBACL5sC,KAAKoxM,sBAoxCT,OA3wCArB,EAAO7pM,UAAUmT,OAAS,SAAUtG,GAChC,IAAI,OAASs+L,UAAU,gBAAiBt+L,GAAxC,CAGA,IAAI4lC,EAAO34C,KAAK27B,OAGhB,GAFA37B,KAAKmgB,KAAOngB,KAAK21C,eAAe0yG,WAAW,gBAC3CroJ,KAAKsxM,8BACmC,cAApCtxM,KAAK27B,OAAO0e,eAAejmC,MACvBukC,EAAKrb,QAAQ52B,OAAQ,CACrB,IAAI6qM,EAAWvxM,KAAK27B,OAAOxyB,QAAQ2I,cAAc,gBAC7Cy/L,GACA,gBAAOA,GAEX,IAAIC,EAAc,IAAI,OAAYxxM,KAAK21C,eAAgB,OAASo6J,OAAQp3J,GACpE84J,EAAazxM,KAAK21C,eAAe0yG,WAAW,uBAChDopD,EAAWnpD,gBAAgB,OAASynD,OAAQ,IAAI,EAAmB/vM,KAAK27B,OAAQ37B,KAAK21C,iBACrF31C,KAAK+kG,eAAiB/kG,KAAK21C,eAAe0yG,WAAW,kBACrDmpD,EAAYroM,QAAUnJ,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,cAAesK,MAAO,CAAEC,KAAM,SACjG,IAAI2nB,EAAMx8B,KAAK0xM,cACfl1K,EAAIjE,KAAOv4B,KAAKg/B,OAChBh/B,KAAK27B,OAAOktE,mBAAmB/2F,cAAc,8BAA8BtH,YAAYgnM,EAAYroM,SACnG,IAAIwoM,EAAU3xM,KAAK27B,OAAOxyB,QAAQ2I,cAAc,oBAEhD,GADA9R,KAAKmJ,QAAUqoM,EAAYn4L,OAAOmjB,EAAKmc,EAAKiX,aAAc,KAAM,KAAM4hJ,EAAYroM,SAC9EnJ,KAAKmJ,QAAQgf,iBAAiB,iBAAiBzhB,SAC9C1G,KAAKmJ,QAAQgf,iBAAiB,iBAAiBzhB,QAAU1G,KAAKmJ,QAAQgf,iBAAiB,uBAAuBzhB,QAE/G,IADA,IAAIonM,EAAK9tM,KAAKmJ,QAAQgf,iBAAiB,sCAC9BphB,EAAI,EAAGA,EAAI+mM,EAAGpnM,OAAQK,IAC3B+mM,EAAG/oM,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAU0G,IAAI,gBAC7C,eAA6Bo8L,EAAG/oM,SAASgC,EAAEuQ,WAAY,KAAU,GAAJvQ,EAAQ/G,KAAK27B,OAAOpwB,UAAW,QAGpG,eAAqBvL,KAAKmJ,SAC1B,IAAIyoM,EAAS5xM,KAAKmJ,QAAQ2I,cAAc,uBACpC8/L,IACAA,EAAOtnM,UAAY,gCAEnBqnM,IACIA,EAAQ3mM,UAAUkB,SAAS,gBAC3BylM,EAAQrnM,UAAY,6CAGpBqnM,EAAQrnM,UAAY,gCAG5B,IAAIunM,EAAS,GAAGv+L,MAAMjK,KAAKrJ,KAAKmJ,QAAQ0U,uBAAuB,uBAC3Dg0L,EAAOnrM,QACPmrM,EAAOA,EAAOnrM,OAAS,GAAGsE,UAAU0G,IAAI,0BAE5C1R,KAAKsZ,aACLtZ,KAAK27B,OAAOrc,OAAO,QAAqB,CAAEwyL,KAAM,cAW5D/B,EAAO7pM,UAAU6rM,iBAAmB,SAAU3wK,GAC1CphC,KAAKgyM,yBAAyBC,eAAiB7wK,EAC/CphC,KAAKgyM,yBAAyBE,qBAAqBlyM,KAAKu8B,SAE5DwzK,EAAO7pM,UAAUisM,6BAA+B,SAAU3mL,GACtDxrB,KAAKgyM,yBAAyB5rL,OAASoF,EAAKpF,QAShD2pL,EAAO7pM,UAAUksM,eAAiB,SAAUrgJ,GACxC,IAAI39C,EAAO29C,EAAI34B,OAAOhlB,MAAQpU,KAAK27B,OAAO0e,eAAejmC,KACzDpU,KAAK++L,aAAe,IAAI/+L,KAAKoU,KAAK,GAAKA,GAAMpU,KAAK27B,OAAQ37B,KAAK27B,OAAO0e,eAAgBr6C,KAAK21C,eAAgB31C,KAAKm/L,gBAAiBn/L,OAQrI+vM,EAAO7pM,UAAUgS,QAAU,WACvB,IAAIy1F,EAAc3tG,KAAK27B,OAAOxyB,QAC9B,GAAKwkG,IAAiBA,EAAY77F,cAAc,IAAM,SAAyB67F,EAAY77F,cAAc,IAAM,SAA/G,CAaA,GAVI9R,KAAK++L,cACL/+L,KAAK++L,aAAa7mL,UAGjBlY,KAAK27B,OAAO4jE,aAAev/F,KAAK27B,OAAOkR,aAAgB7sC,KAAK27B,OAAO03B,iBACpErzD,KAAKq6C,eAAe/c,QAAU,IAElCt9B,KAAKqyM,kBACLryM,KAAKu7E,sBACLv7E,KAAK6gF,eAC4B,cAA7B7gF,KAAKq6C,eAAejmC,MAAwBpU,KAAKq6C,eAAeokJ,sBAEhE,IADA,IAAI6T,EAAe,GAAGh/L,MAAMjK,KAAKrJ,KAAKmJ,QAAQ0U,uBAAuB,wBAC5D9W,EAAI,EAAGA,EAAIurM,EAAa5rM,OAAQK,IACjCurM,EAAavtM,SAASgC,EAAEuQ,WAAY,KAAK2yH,cAAc,IACvDqoE,EAAavtM,SAASgC,EAAEuQ,WAAY,KAAK2yH,cAAc,GAAG/xH,UAItE,GAAIlY,KAAKmJ,QAAS,CACVnJ,KAAKmJ,QAAQie,eACb,gBAAOpnB,KAAKmJ,SAEhB,IAAIopM,EAAmBvyM,KAAK27B,OAAOktE,mBAAmB/2F,cAAc,gBAChEygM,GACA,gBAAOA,MAInBxC,EAAO7pM,UAAUkrM,oBAAsB,WAC/BpxM,KAAK21C,gBACL31C,KAAK21C,eAAe68J,wBAAwBxyM,KAAMA,KAAK27B,OAAOysE,iBAAkB,OAAuBqqG,WAG/G1C,EAAO7pM,UAAUwrM,YAAc,WAC3B,IAAIxoM,EAAU,GACVszB,EAAM,IAAI,OAAItzB,GAElB,OADAszB,EAAIgzE,MAAQxvG,KAAKwyK,gBACVh2I,GAEXuzK,EAAO7pM,UAAUssK,cAAgB,WAE7B,IAAIhjE,EAAQ,GACZ,GAAIxvG,KAAK27B,OAAOod,cACZ,IAAK,IAAIvyC,EAAI,EAAGkiB,EAAM1oB,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,OAAQF,EAAIkiB,EAAKliB,IACrEgpG,EAAMv9F,KAAKjS,KAAK2yK,aAAa,GAAI,OAASqB,gBAG9Ch0K,KAAK27B,OAAOuyE,gBAAkBluG,KAAK27B,OAAOwyE,YAC1CqB,EAAMv9F,KAAKjS,KAAK2yK,aAAa,GAAI,OAAS8M,eAE1Cz/K,KAAK27B,OAAOyyE,iBAAmD,UAAhCpuG,KAAK27B,OAAO+2K,iBAC3CljG,EAAMv9F,KAAKjS,KAAK2yK,aAAa,GAAI,OAASggC,eAE9C,IAAK,IAAIl/L,EAAK,EAAG7J,EAAK5J,KAAK27B,OAAOi0B,aAAcn8C,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAClE,IAAIw8F,EAAQrmG,EAAG6J,GACf+7F,EAAMv9F,KAAKjS,KAAK2yK,aAAa1iE,IAKjC,OAHIjwG,KAAK27B,OAAOyyE,iBAAmD,UAAhCpuG,KAAK27B,OAAO+2K,iBAC3CljG,EAAMv9F,KAAKjS,KAAK2yK,aAAa,GAAI,OAASggC,eAEvCnjG,GAEXugG,EAAO7pM,UAAUysK,aAAe,SAAUp2I,EAAQqzE,GAC9C,IAAII,EAAM,CACN,QAAWzzE,EAAOjK,QAClB,YAAc,EACd,MAAS,GACT,OAAUiK,EACV,SAAYqzE,GAAsB,OAASmgG,OAC3C,WAAc,CAAEv8J,MAAOxzC,KAAKmgB,KAAKC,YAAY,oBAEjD,OAAO,IAAI,OAAK4vF,IAQpB+/F,EAAO7pM,UAAUmgM,YAAc,WAC3B,IAAIt0I,EAAM/xD,KAAKu8B,OAAO61B,kBAAoBpyD,KAAK27B,OAAOg4B,eAAe3zD,KAAKu8B,OAAOge,KAC7Ev6C,KAAK27B,OAAO41B,iBAAiBvxD,KAAKilJ,WACtCjlJ,KAAK4yM,eAAiB5yM,KAAK6yM,4BAA4B9gJ,GACvD/xD,KAAK8yM,iBAAmB9yM,KAAKq6C,eAAe/c,QAAQt9B,KAAK4yM,gBAGzD,IAFA,IAAIG,EAAWltM,MAAMi2B,QAAQ97B,KAAKme,OAASne,KAAKme,MAAQ,CAACne,KAAKme,OAC1DjB,EAAald,KAAK27B,OAAOxB,WAAW6f,SAAWh6C,KAAK27B,OAAOxB,WAAW6f,QAAQx/B,cAAgBxa,KAAK27B,OAAOxB,WAAW6f,QAAQx/B,qBAAkBrJ,EAC1IpK,EAAI,EAAG2hB,EAAMqqL,EAASrsM,OAAQK,EAAI2hB,EAAK3hB,IAAK,CACjD,IAAIoxC,EAAQ4Z,EAAIK,kBAAoBL,EAAI3Z,gBAAkBp4C,KAAKilJ,UAC3D+tD,EAAmC,aAAlBhzM,KAAKs5C,SAC1Bt5C,KAAKizM,oBAAsB,CACvB96J,MAAOA,EAAOoC,IAAKwX,EAAIxX,IAAKkY,aAAcV,EAAIK,kBAAmB9Y,SAAUt5C,KAAKs5C,SAChFn7B,MAAO40L,EAAShuM,SAASgC,EAAEuQ,WAAY,KAAMkhC,UAAWx4C,KAAKw4C,UAC7De,UAAWv5C,KAAKu5C,UAAWwZ,aAAc/yD,KAAK+yD,aAAcmgJ,kBAAmB,GAAIC,eAAgB,IAEvG,IAAI9gM,EAAQrS,KAAK6yM,4BAA4B9gJ,GAO7C,GANI1/C,GAAS,IAAMxM,MAAMi2B,QAAQ97B,KAAKme,OAClCne,KAAKq6C,eAAe/c,QAAQv4B,SAASsN,EAAMiF,WAAY,KAAOtX,KAAKizM,oBAGnEjzM,KAAKq6C,eAAe/c,QAAQrrB,KAAKjS,KAAKizM,sBAErCjzM,KAAKu8B,OAAO61B,mBAAqB,eAAkBpyD,KAAKme,SAA6B,UAAlBne,KAAKs5C,UACvD,aAAlBt5C,KAAKs5C,WAA4C,iBAAfp8B,GAAgD,mBAAfA,EAAkC,CACrG,IAAK,IAAI+6D,EAAM,EAAGA,EAAMj4E,KAAKq6C,eAAe/c,QAAQ52B,OAAQuxE,IACpDj4E,KAAKq6C,eAAe/c,QAAQ,GAAK26C,GAAK9/B,QAAUA,GACI,UAAnDn4C,KAAKq6C,eAAe/c,QAAQ,GAAK26C,GAAK3+B,UAA2E,aAAnDt5C,KAAKq6C,eAAe/c,QAAQ,GAAK26C,GAAK3+B,WAClG,eAAkBt5C,KAAKq6C,eAAe/c,QAAQ,GAAK26C,GAAK95D,SAC3Dne,KAAKq6C,eAAe/c,QAAQhrB,OAAO2lE,EAAK,GACxCA,GAAY,GAGH,WAAblmB,EAAI39C,MACJpU,KAAKq6C,eAAe/c,QAAQrrB,KAAK,CAC7BkmC,MAAOA,EAAO4a,aAAc/yD,KAAK+yD,aAAcxZ,UAAWv5C,KAAKu5C,UAC/DD,SAAUt5C,KAAKs5C,SAAUd,UAAWw6J,EAAiB,MAAQ,KAAM70L,MAAO,KAGlFne,KAAKq6C,eAAe/c,QAAQrrB,KAAK,CAC7BkmC,MAAOA,EAAO4a,aAAc/yD,KAAK+yD,aAAcxZ,UAAWv5C,KAAKu5C,UAC/DD,SAAUt5C,KAAKs5C,SAAUd,UAAWw6J,EAAiB,MAAQ,KAAM70L,WAAOhN,IAE9EnR,KAAKq6C,eAAe/c,QAAQrrB,KAAK,CAC7BkmC,MAAOA,EAAO4a,aAAc/yD,KAAK+yD,aAAcxZ,UAAWv5C,KAAKu5C,UAC/DD,SAAUt5C,KAAKs5C,SAAUd,UAAWw6J,EAAiB,MAAQ,KAAM70L,MAAO,QAKtFne,KAAKq6C,eAAe/c,QAAUt9B,KAAKq6C,eAAe/c,QAClDt9B,KAAK27B,OAAOhuB,YAEhBoiM,EAAO7pM,UAAU2sM,4BAA8B,SAAU9gJ,GAErD,IADA,IAAI1B,EAAOrwD,KAAKq6C,eAAe/c,QACtBv2B,EAAI,EAAG2hB,EAAM2nC,EAAK3pD,OAAQK,EAAI2hB,EAAK3hB,IACxC,GAAIspD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKijC,MAAQwX,EAAIxX,KAAQwX,EAAIK,mBACtDpyD,KAAK27B,OAAOg4B,eAAe5B,EAAIxX,KAAKpC,QAAU4Z,EAAI3Z,gBACrD,OAAOrxC,EAGf,OAAQ,GASZgpM,EAAO7pM,UAAU8yF,iBAAmB,SAAUjmF,GAC1C,IAAIyY,EAAQxrB,KAAK+vC,SAMb,CACAsG,YAAa,YAAajiC,KAAM,QAPR,CACxB6+L,oBAAqBjzM,KAAKizM,oBAE1BG,uBAAyB,eAAkBpzM,KAAKu8B,aAA8BprB,EAApBnR,KAAKu8B,OAAO4b,MAEtE7a,QAASt9B,KAAKq6C,eAAe/c,QAAS+Y,YAAa,YAAajiC,KAAM,QAI1EpU,KAAK27B,OAAO9tB,QAAQ,OAAuB,eAAOkF,EAAGyY,IACrDxrB,KAAK+vC,UAAW,GAEpBggK,EAAO7pM,UAAUoT,WAAa,WAC1B,OAAa5H,IAAI1R,KAAK27B,OAAOktE,mBAAoB,QAAS7oG,KAAKqzM,sBAAuBrzM,OAE1F+vM,EAAO7pM,UAAU26E,aAAe,WAC5B,OAAa51E,OAAOjL,KAAK27B,OAAOktE,mBAAoB,QAAS7oG,KAAKqzM,wBAEtEtD,EAAO7pM,UAAU66I,kBAAoB,SAAUhuI,GACvCA,EAAEwM,SAAWvf,KAAKwa,iBAAmBzH,EAAEquB,SACvCphC,KAAK27B,OAAO2qH,iBAAiBt7I,UAAU0G,IAAI,gBAC3C1R,KAAKqZ,WAGb02L,EAAO7pM,UAAUotM,mBAAqB,WAClCtzM,KAAK27B,OAAO4/C,oBAAoB,OAAwBv7E,KAAKuzM,sBAC5B,cAA7BvzM,KAAKq6C,eAAejmC,MAAwBpU,KAAKq6C,eAAe/c,QAAQ52B,SACvE1G,KAAK27B,OAAOi8I,wBAAwBlxK,QACrC1G,KAAKwzM,cAGbzD,EAAO7pM,UAAUstM,WAAa,WAE1B,GADAxzM,KAAK27B,OAAO8e,IAAI,QAAqBz6C,KAAKwzM,YACtCxzM,KAAK27B,OAAOi0B,aAAalpD,QAAU1G,KAAKq6C,eAAe/c,QAAQ52B,OAAQ,CACvE,IAAIiyC,EAAO34C,KAAK27B,OAChB37B,KAAKgwM,gBAAiB,EACtBhwM,KAAKyzM,aAAc,EACnB,IAAK,IAAIhgM,EAAK,EAAG7J,EAAK+uC,EAAK0B,eAAe/c,QAAS7pB,EAAK7J,EAAGlD,OAAQ+M,IAAM,CACrE,IAAIs+C,EAAMnoD,EAAG6J,GACbzT,KAAKoiM,eAAerwI,EAAI5Z,MAAO4Z,EAAIzY,SAAUyY,EAAI5zC,MAAO4zC,EAAIvZ,UAAWuZ,EAAIxY,UAAWwY,EAAIgB,aAAchB,EAAImhJ,kBAAmBnhJ,EAAIohJ,eAAgBphJ,EAAIU,cAE3JzyD,KAAKyzM,aAAc,EACnBzzM,KAAKqyM,kBACLryM,KAAKgwM,gBAAiB,IAO9BD,EAAO7pM,UAAU0mC,iBAAmB,WAC5B5sC,KAAK27B,OAAOkR,cAGhB7sC,KAAK27B,OAAOqR,GAAG,QAA4BhtC,KAAKoxM,oBAAqBpxM,MACrEA,KAAK27B,OAAOqR,GAAG,QAAiBhtC,KAAK+gJ,kBAAmB/gJ,MACxDA,KAAK27B,OAAOqR,GAAG,QAAuBhtC,KAAKg5F,iBAAkBh5F,MAC7DA,KAAK27B,OAAOqR,GAAG,QAA4BhtC,KAAK2a,kBAAmB3a,MACnEA,KAAK27B,OAAOqR,GAAG,QAAmBhtC,KAAKqgG,aAAcrgG,MACrDA,KAAK27B,OAAOqR,GAAG,QAA8BhtC,KAAK0zM,sBAAuB1zM,MACzEA,KAAK27B,OAAOqR,GAAG,QAAwBhtC,KAAKqZ,OAAQrZ,MACpDA,KAAK27B,OAAOqR,GAAG,QAAqBhtC,KAAKwzM,WAAYxzM,MACrDA,KAAK27B,OAAOqR,GAAG,QAAwBhtC,KAAK2zM,gBAAiB3zM,MAC7DA,KAAK27B,OAAOqR,GAAG,QAAqChtC,KAAKmyM,6BAA8BnyM,MACvFA,KAAK4zM,gBAAkB5zM,KAAKmgE,aAAaz0D,KAAK1L,MAC9C,OAAa0R,IAAI8B,SAAU,QAASxT,KAAK4zM,gBAAiB5zM,MAC1D,OAAa0R,IAAI1R,KAAK27B,OAAOxyB,QAAS,YAAanJ,KAAK6zM,iBAAkB7zM,MAC1EA,KAAK27B,OAAOqR,GAAG,QAAmBhtC,KAAK8zM,iBAAkB9zM,MACzDA,KAAK27B,OAAOqR,GAAG,OAAchtC,KAAK+zM,uBAAwB/zM,MAC1DA,KAAK27B,OAAOqR,GAAG,uBAAwBhtC,KAAKwzM,WAAYxzM,MACxDA,KAAK27B,OAAOqR,GAAG,QAA0BhtC,KAAKmgE,aAAcngE,MAC5DA,KAAK27B,OAAOqR,GAAG,QAAgBhtC,KAAKkY,QAASlY,MAC7CA,KAAKuzM,qBAAuBvzM,KAAKszM,mBAAmB5nM,KAAK1L,MACzDA,KAAK27B,OAAOiR,iBAAiB,OAAwB5sC,KAAKuzM,wBAM9DxD,EAAO7pM,UAAUq1E,oBAAsB,WACnC,OAAatwE,OAAOuI,SAAU,QAASxT,KAAK4zM,iBAC5C,OAAa3oM,OAAOjL,KAAK27B,OAAOxyB,QAAS,YAAanJ,KAAK6zM,kBACvD7zM,KAAK27B,OAAOkR,cAGhB7sC,KAAK27B,OAAO8e,IAAI,QAA4Bz6C,KAAKoxM,qBACjDpxM,KAAK27B,OAAO8e,IAAI,QAAiBz6C,KAAK+gJ,mBACtC/gJ,KAAK27B,OAAO8e,IAAI,QAAuBz6C,KAAKg5F,kBAC5Ch5F,KAAK27B,OAAO8e,IAAI,QAA4Bz6C,KAAK2a,mBACjD3a,KAAK27B,OAAO8e,IAAI,QAAmBz6C,KAAKqgG,cACxCrgG,KAAK27B,OAAO8e,IAAI,QAA8Bz6C,KAAK0zM,uBACnD1zM,KAAK27B,OAAO8e,IAAI,QAAwBz6C,KAAKqZ,QAC7CrZ,KAAK27B,OAAO8e,IAAI,QAAmBz6C,KAAK8zM,kBACxC9zM,KAAK27B,OAAO8e,IAAI,QAAwBz6C,KAAK2zM,iBAC7C3zM,KAAK27B,OAAO8e,IAAI,QAAqCz6C,KAAKmyM,8BAC1DnyM,KAAK27B,OAAO8e,IAAI,OAAcz6C,KAAK+zM,wBACnC/zM,KAAK27B,OAAO8e,IAAI,QAA0Bz6C,KAAKmgE,cAC/CngE,KAAK27B,OAAO8e,IAAI,QAAgBz6C,KAAKkY,WAEzC63L,EAAO7pM,UAAU2tM,iBAAmB,SAAU9gM,GAC1C,GAAI/S,KAAK27B,OAAO03B,gBAAsD,cAApCrzD,KAAK27B,OAAO0e,eAAejmC,MACzDrB,EAAEzM,OAAO2F,QAAQ,OAAS8G,EAAEzM,OAAO2F,QAAQ,MAAMjB,UAAUkB,SAAS,oBACpE6G,EAAEzM,OAAO0E,UAAUkB,SAAS,gBAAiB,CAC7C,IAAI8nM,EAAajhM,EAAEzM,OAAOwvI,uBAC1B,OAAMxwH,SAAS,KAAM0uL,EAAY,SAAS,GACT,cAA7Bh0M,KAAKq6C,eAAe3hB,MACpB14B,KAAKkmM,0BAA0B8N,EAAW9iM,GAAGoC,MAAM,GAAI,OAInEy8L,EAAO7pM,UAAUytM,gBAAkB,WAC/B3zM,KAAKixM,eAAe/9D,QAAS,GAiBjC68D,EAAO7pM,UAAUk8L,eAAiB,SAAUn9C,EAAWgvD,EAAgB9R,EAAa3pJ,EAAWe,EAAWwZ,EAAcmgJ,EAAmBC,EAAgB/gJ,GACvJ,IAEI8hJ,EAFA9qM,EAAQpJ,KACR24C,EAAO34C,KAAK27B,OAUhB,GARA37B,KAAKu8B,OAASoc,EAAKib,6BAA6BqxF,EAAW7yF,GAC1B,cAA7BpyD,KAAKq6C,eAAejmC,MAAwBpU,KAAKq6C,eAAeokJ,uBAC7D,eAAkBz+L,KAAKu8B,OAAO6hK,oBAAsB,eAAkBp+L,KAAKu8B,OAAOspE,kBACrFouG,EAAiBj0M,KAAKm0M,gBAAgBlvD,IAEnB,SAAnBgvD,GAA6B9R,IAA6C,IAA9BA,EAAYp4L,QAAQ,OAChEo4L,EAAc,IAAMA,EAAc,KAEjCniM,KAAKu8B,OAMV,GAHiC,cAA7Bv8B,KAAKq6C,eAAejmC,OACpB8/L,EAAav7J,EAAKkwD,mBAAmB/2F,cAAc,QAAW9R,KAAKu8B,OAAO4b,MAAQ,qBAEjF,eAAkBn4C,KAAKu8B,OAAO82B,iBAAoBrzD,KAAKu8B,OAAO82B,eAInE,GAAI,eAAgB1a,GAChBA,EAAKr5B,OAAO,QAAqB,CAC7B0/E,SAAUh/F,KAAMsjJ,QAAStjJ,KAAKoiM,eAAgB7+C,KAAM0B,EAAWzB,KAAMywD,EAAgBtH,KAAMxK,EAAayK,KAAMp0J,EAC9Gq0J,KAAMtzJ,EAAWuzJ,KAAM/5I,EAAcg6I,KAAMmG,EAAmBlG,KAAMmG,QAH5E,CAoBA,GAbAnzM,KAAKw4C,UAAYA,IAAwB3yC,MAAMi2B,QAAQqmK,GAAe,KAAO,OAC7EniM,KAAKme,MAAQgkL,EACbniM,KAAKu5C,UAAYA,IAAa,EAC9Bv5C,KAAK+yD,aAAe/yD,KAAK+yD,aAAgB,eAAkBA,GAA+B/yD,KAAK27B,OAAO0e,eAAe0Y,aAA1CA,EAC3E/yD,KAAKilJ,UAAYA,EACjBjlJ,KAAKs5C,SAAW26J,EAChB9R,EAAe,eAAkBA,GAAwCA,EAAzBA,EAAY7qL,WACxC,KAAhB6qL,IACAA,EAAc,MAEO,WAArBniM,KAAKu8B,OAAOnoB,MAA0C,SAArBpU,KAAKu8B,OAAOnoB,OAC7CpU,KAAKu5C,WAAY,GAEjB26J,GAA2C,cAA7Bl0M,KAAKq6C,eAAejmC,KAAsB,CACxD,GAAK+tL,GAAeA,EAAYz7L,OAAS,IAAQ1G,KAAKiwM,gBAClDjwM,KAAKo0M,kBAAkBp0M,KAAKu8B,OAAQ4lK,GAGpC,OAFAniM,KAAKq0M,gBAAmBlS,GAAeA,EAAYz7L,OAAS,EAAK,GAAK1G,KAAKmgB,KAAKC,YAAY,6BAC5FpgB,KAAKqyM,kBAGL6B,EAAW/1L,QAAUgkL,IACrB+R,EAAW/1L,MAAQgkL,GAGtB,eAAkBniM,KAAKu8B,OAAOva,QAO/BhiB,KAAKg/B,OAAOh/B,KAAKu8B,OAAO4b,OAASgqJ,GANjCniM,KAAKs0M,kBAAkBnS,GACnBniM,KAAKyzM,aAA4C,cAA7BzzM,KAAKq6C,eAAejmC,OACxC8/L,EAAW/1L,MAAQne,KAAKg/B,OAAOh/B,KAAKu8B,OAAO4b,SAMnD,IAAIo8J,EAAU,CACVp8J,MAAOn4C,KAAKilJ,UACZzsG,UAAWA,EACXe,UAAWA,EACXwZ,aAAcA,EACdzZ,SAAUt5C,KAAKs5C,SACfn7B,MAAOne,KAAKme,MACZ/J,KAAMpU,KAAKu8B,OAAOnoB,MAElBgmC,EAAep6C,KAAK27B,OAAO0e,eAAe/c,QAAQlE,QAAO,SAAUkhB,GACnE,OAAQA,EAAQnC,QAAU/uC,EAAM67I,aAEhC7qG,EAAa1zC,OAAS,IAAM,eAAkB1G,KAAKmtM,gBAAgBntM,KAAKilJ,YACxEjlJ,KAAKmtM,gBAAgBntM,KAAKilJ,WAAWhzI,KAAKsiM,GAG1Cv0M,KAAKmtM,gBAAgBntM,KAAKilJ,WAAa,CAACsvD,GAExCv0M,KAAKw0M,wBAAwBx0M,KAAKu8B,OAAO4b,QAG7Cn4C,KAAKqmM,mBAhEDrmM,KAAK27B,OAAO2c,IAAI,yBAA0B,CAAEp7B,WAAYld,KAAKwa,gBAAiBg3C,WAAYxxD,KAAKu8B,OAAO6T,cAkE9G2/J,EAAO7pM,UAAUouM,kBAAoB,SAAUnS,GAC3C,IAAI/4L,EAAQpJ,KACRy0M,EAAmC,SAArBz0M,KAAKu8B,OAAOnoB,MAAwC,aAArBpU,KAAKu8B,OAAOnoB,MAA4C,aAArBpU,KAAKu8B,OAAOnoB,KAC5F,IAAIiK,KAAK8jL,GAAez1L,WAAWy1L,IACb,SAArBniM,KAAKu8B,OAAOnoB,MAAwC,aAArBpU,KAAKu8B,OAAOnoB,MAA4C,aAArBpU,KAAKu8B,OAAOnoB,OAAwB+tL,GACvGt8L,MAAMi2B,QAAQ97B,KAAKme,QAAUgkL,EAAY9hM,MAAM,KAAKqG,OAAS,EAC7D1G,KAAKg/B,OAAOh/B,KAAKu8B,OAAO4b,OAAU,EAAc93C,MAAM,KAAMoM,KAAI,SAAU6V,GAItE,MAHY,KAARA,IACAA,EAAM,MAEHlZ,EAAMsrM,qBAAqB,IAAIr2L,KAAKiE,GAAMlZ,EAAMmzB,WAI3Dv8B,KAAKg/B,OAAOh/B,KAAKu8B,OAAO4b,OAASn4C,KAAK00M,qBAAqBD,EAAYz0M,KAAKu8B,SAIpFwzK,EAAO7pM,UAAUyuM,QAAU,SAAU5iJ,GAGjC,IAFA,IAAIsmG,GAAO,EACPu8C,EAASlvM,OAAOoV,KAAK,GAChB/T,EAAI,EAAGA,EAAI6tM,EAAOluM,OAAQK,IAAK,CACpC,IAAIlD,EAAM6B,OAAOoV,KAAKi3C,EAAI6iJ,EAAO7vM,SAASgC,EAAEuQ,WAAY,OACrC,IAAfzT,EAAI6C,QAA2B,QAAX7C,EAAI,KACxBw0J,GAAO,GAGf,OAAOA,GAEX03C,EAAO7pM,UAAUyU,kBAAoB,SAAU5H,GAC3C,GAAIA,EAAEwM,SAAWvf,KAAKwa,gBAGtB,IAAK,IAAI/G,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAK/H,EAAE2N,YAAajN,EAAK7J,EAAGlD,OAAQ+M,IAAM,CACnE,IAAIsH,EAAOnR,EAAG6J,GACd,OAAQsH,GACJ,IAAK,UAED,IAAIg3C,EAAM,UAENvmC,EAAO,CACPynL,oBAAqBjzM,KAAKizM,oBAAqBG,uBAAwBpzM,KAAKu8B,OACxEv8B,KAAKu8B,OAAO4b,WAAQhnC,EAAWiV,OAAQ,SAAUkX,QAASt9B,KAAKq6C,eAAe/c,QAClF+Y,YAAa,YAAajiC,KAAM,OAAoBC,QAAQ,GAEhE,GAAIrU,KAAKgwM,gBAAkBhwM,KAAK20M,QAAQ5hM,EAAE2N,WAAW,GAAKqxC,IAAO,CAE7D,GADA/xD,KAAK27B,OAAOrc,OAAO,QAAqBkM,GACpCA,EAAKnX,OAAQ,CACb,GAAkC,aAA7BrU,KAAKq6C,eAAejmC,MAAoD,UAA7BpU,KAAKq6C,eAAejmC,KAAmB,CACnFpU,KAAKq6C,eAAe/c,QAAWt9B,KAAK60M,WAAWnuM,QAAU,EAAK1G,KAAK80M,yBAC/D90M,KAAK+0M,qBACT/0M,KAAKmtM,gBAAgBntM,KAAKu8B,OAAO4b,OAASn4C,KAAKq6C,eAAe/c,QAC9D,IAAI09I,EAAQh7K,KAAK27B,OAAO41B,iBAAiBvxD,KAAKu8B,OAAO4b,OACjD68J,EAAYh1M,KAAK27B,OAAO2oE,gBAAkB02E,EAAM12E,eAAiB,gBAAkB,iBACnF2wG,EAAoBj1M,KAAK27B,OAAOgqH,uBAAuB3lJ,KAAKu8B,OAAO4b,OAClErmC,cAAckjM,GAC0B,IAAzCh1M,KAAK80M,yBAAyBpuM,OAC9BuuM,EAAkBjqM,UAAUC,OAAO,cAGnCgqM,EAAkBjqM,UAAU0G,IAAI,mBAIhC,eAAkB1R,KAAK8yM,kBACvB9yM,KAAKq6C,eAAe/c,QAAQhrB,OAAOtS,KAAKq6C,eAAe/c,QAAQ52B,OAAS,EAAG,GAG3E1G,KAAKq6C,eAAe/c,QAAQt9B,KAAK4yM,gBAAkB5yM,KAAK8yM,iBAGhE,OAEJ9yM,KAAKk1M,mBACLl1M,KAAKm1M,wBACLn1M,KAAKqyM,kBACLryM,KAAKo1M,eAET,MACJ,IAAK,sBACGriM,EAAE2N,WAAW,GAAK3F,GAClB/a,KAAKqyM,kBAEAryM,KAAK27B,OAAOkd,aACjB74C,KAAK27B,OAAO05K,sBAAsB,IAEtC,MACJ,IAAK,wBACL,IAAK,OACDr1M,KAAK27B,OAAO25K,gBACZt1M,KAAKm1M,wBACsB,SAAvBn1M,KAAK27B,OAAOxwB,QACZnL,KAAK27B,OAAOmvG,aAAa9vH,UAE7B,SAIhB+0L,EAAO7pM,UAAUivM,sBAAwB,WACrC,GAAiC,cAA7Bn1M,KAAKq6C,eAAejmC,KAAsB,CAC1C,IAAK,IAAIrN,EAAI,EAAGA,EAAI/G,KAAKq6C,eAAe/c,QAAQ52B,OAAQK,IAAK,CACzD/G,KAAKu8B,OAASv8B,KAAK27B,OAAOs4B,2BAA2Bj0D,KAAKq6C,eAAe/c,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKijC,KAC7G,IAAI4nJ,EAAcniM,KAAKq6C,eAAe/c,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6G,MAE1E,GADAgkL,GAAe,eAAkBA,IAAgBA,EAAY7qL,WACxD,eAAkBtX,KAAKu8B,OAAOva,QAG9B,CACD,IAAIne,EAAM7D,KAAKq6C,eAAe/c,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6gC,MAClEn4C,KAAKg/B,OAAO,GAAKn7B,GAAO7D,KAAKq6C,eAAe/c,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6G,WAJhFne,KAAKs0M,kBAAkBnS,GAM3B,IAAIoT,EAAgBv1M,KAAKw1M,oBAAoBx1M,KAAKu8B,OAAO4b,OACrDo9J,IACqF,KAAjFv1M,KAAKkwM,SAASlwM,KAAKq6C,eAAe/c,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6gC,QAClE,eAAkBn4C,KAAKkwM,SAASlwM,KAAKq6C,eAAe/c,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6gC,QAI5Fo9J,EAAcp3L,MAAQne,KAAKq6C,eAAe/c,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6G,MAH9Eo3L,EAAcp3L,MAAQne,KAAKkwM,SAASlwM,KAAKu8B,OAAO4b,QAO5D,GAA2C,IAAvCn4C,KAAKq6C,eAAe/c,QAAQ52B,OAC5B,KAAIqrD,EAAM/xD,KAAK27B,OAAOi0B,aACtB,IAAS7oD,EAAI,EAAGA,EAAIgrD,EAAIrrD,OAAQK,IAAK,CAC7BwuM,EAAgBv1M,KAAKw1M,oBAAoBzjJ,EAAIhtD,SAASgC,EAAEuQ,WAAY,KAAK6gC,OACzEo9J,GAAyC,KAAxBA,EAAcp3L,QAC/Bo3L,EAAcp3L,MAAQ,UACfne,KAAKg/B,OAAO+yB,EAAIhtD,SAASgC,EAAEuQ,WAAY,KAAK6gC,YAMvE43J,EAAO7pM,UAAUgvM,iBAAmB,WAChC,GAA2C,IAAvCl1M,KAAKq6C,eAAe/c,QAAQ52B,QAAgB1G,KAAK27B,OAAOxyB,QAAQ2I,cAAc,eAE9E,IADA,IAAI2jM,EAAkB,GAAGniM,MAAMjK,KAAKrJ,KAAK27B,OAAOxyB,QAAQ0U,uBAAuB,eACtE9W,EAAI,EAAG2hB,EAAM+sL,EAAgB/uM,OAAQK,EAAI2hB,EAAK3hB,IACnD0uM,EAAgB1wM,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAUC,OAAO,eAIzE8kM,EAAO7pM,UAAUsvM,oBAAsB,SAAUzjJ,GAC7C,IACIwjJ,EADAx7I,EAAW,QAAWhI,EAAM,mBAKhC,OAHIgI,IAAa,eAAkB/5D,KAAKmJ,WACpCosM,EAAgBv1M,KAAKmJ,QAAQ2I,cAAcioD,IAExCw7I,GAMXxF,EAAO7pM,UAAUwvM,cAAgB,WAC7B11M,KAAKm1M,wBACLn1M,KAAKqyM,mBAQTtC,EAAO7pM,UAAUyvM,eAAiB,SAAU19J,GACxC,IAAI7uC,EAAQpJ,KACRqwD,EAAO,eAAsBrwD,KAAKq6C,eAAe/c,SACrD,IAAK,eAAkB2a,GAMnB,OALAj4C,KAAKgb,SAAU,EACfi9B,EAAOqnD,SAAQ,SAAUnnD,GAAS/uC,EAAM88L,0BAA0B/tJ,GAAO,MACzEn4C,KAAK27B,OAAO9qB,cAAc,CAAEwpC,eAAgB,CAAE/c,QAASt9B,KAAKq6C,eAAe/c,WAAa,GACxFt9B,KAAK27B,OAAOi6K,aAAa56L,eACzBhb,KAAKgb,SAAU,GAGnB,GAAI,eAAgBhb,KAAK27B,QACrB37B,KAAK27B,OAAOrc,OAAO,QAAqB,CAAE0/E,SAAUh/F,KAAMsjJ,QAAStjJ,KAAK21M,qBAD5E,CAIA,IAAK,IAAI5uM,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IAC7BspD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKijC,IAAM8V,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKijC,KACjEv6C,KAAK27B,OAAO41B,iBAAiBlB,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,OAAOoC,IAEhF,IAAIs7J,EAASxlJ,EAAK5jD,KAAI,SAAU6/B,GAAK,OAAOA,EAAEiO,OAC1Cu7J,EAAeD,EAAOz8K,QAAO,SAAUgD,EAAMrvB,GAAO,OAAO8oM,EAAO9rM,QAAQqyB,KAAUrvB,KACxF/M,KAAKgb,SAAU,EACNjU,EAAI,EAAb,IAAK,IAAW2hB,EAAMotL,EAAapvM,OAAQK,EAAI2hB,EAAK3hB,IAChD/G,KAAKkmM,0BAA0BlmM,KAAK27B,OAAOg4B,eAAemiJ,EAAa/wM,SAASgC,EAAEuQ,WAAY,MAAM6gC,OAAO,GAM/G,GAJAn4C,KAAKgb,SAAU,EACX86L,EAAapvM,QACb1G,KAAK27B,OAAOi6K,aAAa56L,UAEqB,IAA9Chb,KAAK27B,OAAO0e,eAAe/c,QAAQ52B,QAAgB1G,KAAK27B,OAAOxyB,QAAQ2I,cAAc,eACrF,KAAIikM,EAAc,GAAGziM,MAAMjK,KAAKrJ,KAAK27B,OAAOxyB,QAAQ0U,uBAAuB,eAC3E,IAAS9W,EAAI,EAAG2hB,EAAMqtL,EAAYrvM,OAAQK,EAAI2hB,EAAK3hB,IAC/CgvM,EAAY,GAAG/qM,UAAUC,OAAO,cAGxCjL,KAAK+vC,UAAW,EAChB/vC,KAAKq0M,gBAAkB,GACvBr0M,KAAKqyM,oBAETtC,EAAO7pM,UAAUsuM,wBAA0B,SAAUr8J,GAEjD,IADA,IAAI7a,EAAUt9B,KAAKq6C,eAAe/c,QACzB7pB,EAAK,EAAGggD,EAAYn2B,EAAS7pB,EAAKggD,EAAU/sD,OAAQ+M,IAAM,CAC/D,IAAIs+C,EAAM0B,EAAUhgD,GACpB,GAAIs+C,EAAI5Z,QAAUA,GAAS4Z,EAAI5zC,QAAUne,KAAKme,OAC1C4zC,EAAIzY,WAAat5C,KAAKs5C,UAAYyY,EAAIvZ,YAAcx4C,KAAKw4C,UACzD,OAAO,EAGf,OAAO,GAEXu3J,EAAO7pM,UAAU4tM,iBAAmB,SAAUtoL,GAC1CxrB,KAAKu8B,OAAS/Q,EAAKumC,IACnB,IAAIlV,EAAM,eAAQrxB,EAAKllB,OAAQ,IAAMklB,EAAKta,IACtCsa,EAAK48B,UAAYvL,EACjB78C,KAAK++L,aAAamF,cAEbrnJ,GACL78C,KAAKg2M,iBAAiBh2M,KAAKu8B,OAAQ/Q,EAAKllB,SAGhDypM,EAAO7pM,UAAU8vM,iBAAmB,SAAUjkJ,EAAKzrD,EAAQwE,EAAMD,GACzD7K,KAAK++L,eACL/+L,KAAK++L,aAAa4H,cAAe,EACjC3mM,KAAK++L,aAAamF,eAEtBlkM,KAAKoyM,eAAergJ,GACpB/xD,KAAK++L,aAAaiF,WAAWhkM,KAAKi2M,cAAclkJ,EAAKzrD,EAAQwE,EAAMD,KAYvEklM,EAAO7pM,UAAU+vM,cAAgB,SAAUlkJ,EAAKzrD,EAAQwE,EAAMD,GAC1D,IAAI8tC,EAAO34C,KAAK27B,OACZxB,EAAa43B,EAAI34B,OAAOe,YAAcwe,EAAKxe,YAAc,WAAYwe,EAAKxe,WAAawe,EAAKxe,WAC5Fwe,EAAKvC,gBAAgB/b,YACrBjmB,EAAO29C,EAAI34B,OAAOhlB,MAAQpU,KAAK27B,OAAO0e,eAAejmC,KACrDlL,EAAU,CACVkL,KAAM29C,EAAI39C,KAAM+jC,MAAO4Z,EAAI5Z,MAAOyzJ,YAAa75I,EAAI3hB,WACnDjW,WAAYA,EAAYnY,OAAQ+vC,EAAI/vC,OAAQ7W,OAAQ,IAAKmyB,QAASqb,EAAKiX,aACvEk7I,gBAAiBnyJ,EAAK0B,eAAe/c,QAASh3B,OAAQA,EAAQ+zB,YAAase,EAAKvC,gBAAgB/b,YAChGosE,SAAU10C,EAAIkD,eAAgBlC,aAAcpa,EAAK0B,eAAe0Y,aAChE4zC,SAAU50C,EAAI20C,YAAatsE,MAAOue,EAAKve,MAAOkW,SAAUyhB,EAAI+0C,wBAC5DovG,eAAe,eAAkBnkJ,EAAI34B,OAAO88K,gBAAyBnkJ,EAAI34B,OAAO88K,cAChF5yD,QAAStjJ,KAAKm2M,cAAczqM,KAAK1L,MAAOo2M,iBAAkBz9J,EAAK09J,qBAC/DvsM,SAAU,CAAEuB,EAAGP,EAAMQ,EAAGT,GAAO0xB,OAAQw1B,EAAK3Z,gBAAiB2Z,EAAI3Z,gBACjE+0J,gBAAiBntM,KAAKmtM,gBAAiB5O,UAAW5lJ,EAAK4lJ,UACvDpsI,SAAUxZ,EAAKvC,gBAAgB+b,WAAYmkJ,mBAAoBt2M,KAAKq6C,eAAe+mJ,sBACnF2G,mBAAoB/nM,KAAK27B,OAAOysE,iBAChC9uD,SAAUt5C,KAAKmtM,gBAAgBp7I,EAAI5Z,QAAmB,SAAT/jC,EAAkBpU,KAAKmtM,gBAAgBp7I,EAAI5Z,OAAO,GAAGmB,SAAW,QAC7Gi9J,qBAAsB59J,EAAKvC,gBAAgB+b,YAAcxZ,EAAKE,YAAcF,EAAKsY,YAAYC,SAASghH,kBAClGv5H,EAAKvC,gBAAgB+b,WAAaxZ,EAAK69J,sBAAwB79J,EAAK89J,qBAAqB/vM,OAC7FgwM,2BAA4B/9J,EAAK9kB,gBAAgBntB,OACjDiwM,2BAA6Bh+J,EAAKvC,gBAAgB+b,WAAyC,GAA5BxZ,EAAK89J,sBAExE,OAAOvtM,GAUX6mM,EAAO7pM,UAAUggM,0BAA4B,SAAU/tJ,EAAOy+J,GAC1D,IAAIC,EACAxmJ,EAAOrwD,KAAKq6C,eAAe/c,QAC/B,GAAI,eAAgBt9B,KAAK27B,QAAzB,CACI,IAAInQ,EAAO,CAAEwzE,SAAUh/F,KAAMsjJ,QAAStjJ,KAAKkmM,0BAA2B3iD,KAAMprG,EAAOqrG,KAAMozD,GACzF52M,KAAK27B,OAAOrc,OAAO,QAAqBkM,OAF5C,CAKA,IAAIqqL,EAASxlJ,EAAK5jD,KAAI,SAAU6/B,GAAK,OAAOA,EAAEiO,OAC1Cu8J,EAAkBjB,EAAOz8K,QAAO,SAAUgD,EAAMrvB,GAAO,OAAO8oM,EAAO9rM,QAAQqyB,KAAUrvB,KAC3F,IAAK,eAAkB/M,KAAKu8B,QAAS,CACjC,IAAIw1B,EAAM/xD,KAAKu8B,OAAO61B,kBAAoBpyD,KAAK27B,OAAOg4B,eAAe3zD,KAAKu8B,OAAOge,KAC7Ev6C,KAAK27B,OAAO41B,iBAAiBpZ,GACjCn4C,KAAK4yM,eAAiB5yM,KAAK6yM,4BAA4B9gJ,GACvD/xD,KAAK8yM,iBAAmB9yM,KAAKq6C,eAAe/c,QAAQt9B,KAAK4yM,gBA8C7D,IA5CA,IAAI17J,EAAU,SAAUnwC,EAAG2hB,GACvB2nC,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKijC,IAAM8V,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKijC,KACjEnD,EAAOzb,OAAO41B,iBAAiBlB,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,OAAOoC,IAC9E,IAAI0wB,EAAQ5a,EAAK3pD,OACb61B,EAAS6a,EAAOzb,OAAOs4B,2BAA2B6iJ,EAAgB/xM,SAASgC,EAAEuQ,WAAY,MAC7F,GAAIilB,EAAO4b,QAAUA,GAAU5b,EAAO4b,QAAU5b,EAAO6b,iBAAmB7b,EAAO61B,kBAAoB,CACjG,IAAI2kJ,EAAc3/J,EAAOiD,eAAe/c,QAAQlE,QAAO,SAAUrmB,GAC7D,OAAOA,EAAEwnC,MAAQhe,EAAOge,OACzB,GACH,GAAmC,cAA/BnD,EAAOiD,eAAejmC,OAAyBwiM,EAAkB,CACjE,IAAI78I,EAAW,QAAWx9B,EAAO4b,MAAQ,mBACzC0+J,EAAQz/J,EAAOzb,OAAOktE,mBAAmB/2F,cAAcioD,GACnD88I,IACAA,EAAM14L,MAAQ,UACPi5B,EAAOpY,OAAO,GAAKmZ,IAGlC,MAAO8yB,IACC5a,EAAKtrD,SAASkmE,EAAM3zD,WAAY,KAAKijC,MAAQhe,EAAOge,KACpD8V,EAAK/9C,OAAO24D,EAAO,GAG3B,IAAI8qI,EAAc3+J,EAAOzb,OAAOgqH,uBAAuBppH,EAAO4b,OAC9D,GAAmC,cAA/Bf,EAAOiD,eAAejmC,MAAwBgjC,EAAOzb,OAAO2oE,eAAgB,CAC5E,IAAI0wG,EAAY59J,EAAOzb,OAAO2oE,gBAAkB/nE,EAAO+nE,eAAiB,gBAAkB,iBAC1FyxG,EAAYjkM,cAAckjM,GAAWhqM,UAAUC,OAAO,cAe1D,OAbAmsC,EAAOrH,UAAW,EACdqH,EAAO+1J,gBAAgB,GAAKh1J,WACrBf,EAAO+1J,gBAAgB,GAAKh1J,GAEnCf,EAAOpY,OAAO,GAAKmZ,WACZf,EAAOpY,OAAO,GAAKmZ,GAE1Bf,EAAOp8B,SACPo8B,EAAOzb,OAAOrc,OAAO,QAAqB,CACtC+2B,YAAa,YAAajiC,KAAM,OAAoB6+L,oBAAqB8D,EACzEC,oBAAqBz6K,EAAQnW,OAAQ,gBAGtC,UAGXgxB,EAASp3C,KACJ+G,EAAI,EAAG2hB,EAAMouL,EAAgBpwM,OAAQK,EAAI2hB,EAAK3hB,IAAK,CACxD,IAAI+vI,EAAU5/F,EAAQnwC,EAAG2hB,GACzB,GAAgB,UAAZouH,EACA,MAER92I,KAAKqyM,oBAQTtC,EAAO7pM,UAAUsU,cAAgB,WAC7B,MAAO,UAEXu1L,EAAO7pM,UAAUmtM,sBAAwB,SAAUtgM,GAC7B,KAAdA,EAAEmG,SACFlZ,KAAKqgG,aAAattF,IAG1Bg9L,EAAO7pM,UAAUm6F,aAAe,SAAUttF,GACtC,IAAI4lC,EAAO34C,KAAK27B,OACZr1B,EAASyM,EAAEzM,OACf,GAAIA,GAAU,gBAAQA,EAAQ,sBAAuB,CACjD,IAAI2wM,EAAiB,eAAQ3wM,EAAQ,sBAErC,GADAtG,KAAKu8B,OAASoc,EAAKgb,eAAesjJ,EAAe3mM,aAAa,kBACzDtQ,KAAKu8B,OACN,OAEJ,GAAiB,iBAAbxpB,EAAEqT,QAA6BpmB,KAAK27B,OAAO0e,eAAeokJ,sBAAuB,CACjF,IAAIyY,EAAoB,eAAQ5wM,EAAQ,QAAQwL,cAAc,wBAC9DolM,EAAkBjtE,cAAc,GAAGnuC,YACnCo7G,EAAkB1xL,QAEY,cAA7BxlB,KAAKq6C,eAAe3hB,OAAuC,KAAd3lB,EAAEmG,SAC/CnG,EAAEzM,OAAO0E,UAAUkB,SAAS,yBACZ,IAAd6G,EAAEmG,SAAkBlZ,KAAKu8B,OAAOspE,iBACnC7lG,KAAKme,MAAQ7X,EAAO6X,MAAMhM,OAC1BnS,KAAKm3M,cAAcpkM,IAG3B,GAAiB,iBAAbA,EAAEqT,QAA0D,cAA7BpmB,KAAKq6C,eAAejmC,OAAyB,gBAAarB,EAAEzM,OAAQ,cAChG,eAAkBtG,KAAK27B,OAAOxyB,QAAQ2I,cAAc,oBAAqB,CAC5E,IAAI3I,EAAUwvC,EAAKitG,YAAYK,YAAY98I,QAC3C,GAAIA,GAAWA,EAAQ6B,UAAUkB,SAAS,gBAAiB,CACvD,IAAIqwB,EAASoc,EAAKgb,eAAexqD,EAAQ+d,kBAAkB5W,aAAa,iBACxEtQ,KAAKo3M,gBAAgB76K,EAAO4b,OAC5Bn4C,KAAK27B,OAAOiqH,YAAYyxD,kBAGf,WAAbtkM,EAAEqT,QAAoD,SAA7BpmB,KAAKq6C,eAAejmC,MAAmBpU,KAAK++L,eACrE/+L,KAAK++L,aAAamF,cAClBvrJ,EAAKr5B,OAAO,QAAqB,MAGzCywL,EAAO7pM,UAAUoxM,gBAAkB,SAAUnuM,GACrCA,EAAQgV,MAAMzX,QACdyC,EAAQ02F,mBAAmB70F,UAAUC,OAAO,WAGpD8kM,EAAO7pM,UAAUmsM,gBAAkB,WAC/B,GAAiC,cAA7BryM,KAAKq6C,eAAejmC,KAAsB,CAC1C,IAAIukC,EAAO34C,KAAK27B,OACZ47K,OAAmB,EACnBj6K,EAAUt9B,KAAKq6C,eAAe/c,QAC9Bf,OAAS,EACb,IAAKv8B,KAAKq6C,eAAem9J,oBACrB,OAEJ,GAAIl6K,EAAQ52B,OAAS,GAAK1G,KAAKq0M,kBAAoBr0M,KAAKmgB,KAAKC,YAAY,wBAAyB,CAC9FpgB,KAAKq0M,gBAAkB,GACvB,IAAK,IAAIhiM,EAAQ,EAAGA,EAAQirB,EAAQ52B,OAAQ2L,IAMxC,GALAkqB,EAASoc,EAAKsb,2BAA2B32B,EAAQv4B,SAASsN,EAAMiF,WAAY,KAAKijC,MAC1E5B,EAAKib,6BAA6Bt2B,EAAQv4B,SAASsN,EAAMiF,WAAY,KAAK6gC,MAAO7a,EAAQv4B,SAASsN,EAAMiF,WAAY,KAAKm7C,cAC5HpgD,IACArS,KAAKq0M,iBAAmB,QAEvB,eAAkB93K,EAAOva,QAc1BhiB,KAAKq0M,iBAAmB93K,EAAO6T,WAAa,KAAOpwC,KAAKg/B,OAAOzC,EAAO4b,WAdnC,CACnC,IAAIytJ,EAA2B,SAAhBrpK,EAAOnoB,MAAmC,aAAhBmoB,EAAOnoB,MAAuC,aAAhBmoB,EAAOnoB,KAC1EpU,KAAK+kG,eAAe64F,SAAS59L,KAAKg/B,OAAOzC,EAAO4b,OAAQ5b,EAAOmqE,YAA8B,aAAhBnqE,EAAOnoB,KAAsB,OAASmoB,EAAOnoB,MAC1HpU,KAAKg/B,OAAOzC,EAAO4b,OACvB,GAAsB,SAAhB5b,EAAOnoB,MAAmC,aAAhBmoB,EAAOnoB,MAAuC,aAAhBmoB,EAAOnoB,KAAsB,CACvF,IAAIqjM,EAAWz3M,KAAK21C,eAAe0yG,WAAW,kBAC9CkvD,EAAmBE,EAAStiJ,OAAOywI,EAASrpK,EAAOmqE,aAAapvF,gBAGhEigM,EAAmBv3M,KAAK00M,qBAAqB9O,EAASrpK,GAE1Dv8B,KAAKq0M,iBAAmB93K,EAAO6T,WAAa,KAAOmnK,GAO3D5+J,EAAKE,aACLF,EAAK08J,sBAAsBr1M,KAAKq0M,iBAGpCr0M,KAAKq0M,gBAAkB,KAG/BtE,EAAO7pM,UAAUwuM,qBAAuB,SAAUv2L,EAAOoe,GACrD,IAAIk7K,EAAWz3M,KAAK21C,eAAe0yG,WAAW,kBAC9C,OAAOovD,EAAStiJ,OAAOh3C,EAAOoe,EAAO04B,gBAAgB39C,YAEzDy4L,EAAO7pM,UAAUkuM,kBAAoB,SAAU73K,EAAQpe,GACnD,IAAIu5L,EACJ,GAAoB,WAAhBn7K,EAAOnoB,MACH,OAASujM,gBAAgB,GAAKx5L,IAAUne,KAAKkxM,gBAAgBnnM,QAAQoU,IAAU,KAC/Eu5L,GAAS,QAGZ,GAAoB,WAAhBn7K,EAAOnoB,KACZ,IAAK,IAAIX,EAAK,EAAG4pH,EAAUl/G,EAAO1K,EAAK4pH,EAAQ32H,OAAQ+M,IAAM,CACzD,IAAI6O,EAAM+6G,EAAQ5pH,GACdzT,KAAKmxM,gBAAgBpnM,QAAQuY,IAAQ,IACrCo1L,GAAS,GAIrB,OAAOA,GAEX3H,EAAO7pM,UAAUixM,cAAgB,SAAUpkM,GACvC/S,KAAKumJ,YACLvmJ,KAAK43M,WAAW7kM,IAEpBg9L,EAAO7pM,UAAU0xM,WAAa,SAAU7kM,GACpC,IAAI3J,EAAQpJ,KACZA,KAAK+mJ,MAAQ36I,OAAOyyI,aAAY,WAAcz1I,EAAMyuM,gBAAgC,KAAd9kM,EAAEmG,QAAiB,EAAIlZ,KAAKq6C,eAAey9J,qBAErH/H,EAAO7pM,UAAUqgJ,UAAY,WACzBn6I,OAAOqyI,cAAcz+I,KAAK+mJ,QAE9BgpD,EAAO7pM,UAAU2xM,YAAc,WAC3B,IAKI1V,EALApoI,EAAW,QAAW/5D,KAAKu8B,OAAO4b,MAAQ,mBAC1Co9J,EAAgBv1M,KAAKmJ,QAAQ2I,cAAcioD,GAO/C,GANKw7I,IACDA,EAAgBv1M,KAAK27B,OAAOktE,mBAAmB/2F,cAAcioD,IAGjE/5D,KAAKkwM,SAASlwM,KAAKu8B,OAAO4b,OAASo9J,EAAcp3L,MACjDne,KAAKumJ,YACA,eAAkBvmJ,KAAKu8B,OAAO6hK,mBAU/B+D,EAAcrsI,KAAKjgC,MAAMigC,KAAKsiH,UAAUm9B,EAAcp3L,YAVH,CACnD,IAAI45L,EAAe/3M,KAAKu8B,OAAO6hK,kBAAkBn3E,KACrB,kBAAjB8wF,IACPA,EAAe,eAASA,EAAc3rM,SAErC,eAAkB2rM,KACnB/3M,KAAKme,MAAQ45L,EAAa1uM,KAAKrJ,KAAMu1M,IAMzC,eAAkBv1M,KAAKme,QAAyB,KAAfne,KAAKme,MACtCne,KAAKkmM,0BAA0BlmM,KAAKu8B,OAAO4b,QAG/Cn4C,KAAKg4M,oBAAoBh4M,KAAKme,OAC9Bne,KAAKiwM,gBAAiB,EACtBjwM,KAAKoiM,eAAepiM,KAAKu8B,OAAO4b,MAAOn4C,KAAKs5C,SAAUt5C,KAAKme,MAAOne,KAAKw4C,UAAWx4C,KAAKq6C,eAAe+mJ,sBAAuBphM,KAAK+yD,aAAc/yD,KAAKu8B,OAAO61B,mBAC5JpyD,KAAKiwM,gBAAiB,EACtBsF,EAAcp3L,MAAQgkL,EACtBniM,KAAKqyM,oBAETtC,EAAO7pM,UAAU8xM,oBAAsB,SAAU75L,GAC7C,IAAI85L,EACA5lM,EAEJ,OADArS,KAAKu5C,UAAYv5C,KAAKq6C,eAAe+mJ,sBAC7BphM,KAAKu8B,OAAOnoB,MAChB,IAAK,SACGpU,KAAKu8B,OAAOnD,OAAOkgB,SACnBt5C,KAAKs5C,SAAWt5C,KAAKu8B,OAAOnD,OAAOkgB,SAGnCt5C,KAAKs5C,SAAWt5C,KAAKowM,gBAAgBE,MAEzC2H,EAAY,CAAC,IAAK,IAAK,IAAK,KAC5B,IAAK,IAAIlxM,EAAI,EAAGA,EAAIoX,EAAMzX,OAAQK,IAC9B,GAAIkxM,EAAUluM,QAAQoU,EAAMpZ,SAASgC,EAAEuQ,WAAY,OAAS,EAAG,CAC3DjF,EAAQtL,EACR,MAGR/G,KAAKk4M,YAAY/5L,EAAMk9G,UAAUhpH,IACnB,IAAVA,IACArS,KAAKme,MAAQA,EAAMk9G,UAAU,EAAGhpH,IAEjB,KAAfrS,KAAKme,OAAgBA,EAAMzX,QAAU,IACrC1G,KAAKme,MAAQne,KAAK+kG,eAAe64F,SAAS59L,KAAKme,MAAOne,KAAKu8B,OAAOmqE,YAAa1mG,KAAKu8B,OAAOnoB,OAE3F+M,MAAMnhB,KAAKme,SACXne,KAAKq0M,gBAAkBr0M,KAAKmgB,KAAKC,YAAY,yBAEjD,MACJ,IAAK,OACL,IAAK,WACDpgB,KAAKs5C,SAAWt5C,KAAKowM,gBAAgBE,MAClB,KAAftwM,KAAKme,OAAkBne,KAAKme,iBAAiBE,OAC7Cre,KAAKk4M,YAAY/5L,GACjBne,KAAKme,MAAQne,KAAK+kG,eAAe64F,SAAS59L,KAAKme,MAAOne,KAAKu8B,OAAOmqE,YAAa1mG,KAAKu8B,OAAOnoB,MACvF,eAAkBpU,KAAKme,SACvBne,KAAKq0M,gBAAkBr0M,KAAKmgB,KAAKC,YAAY,0BAGrD,MACJ,IAAK,SACDpgB,KAAKu5C,WAAY,EACbv5C,KAAKu8B,OAAOnD,OAAOkgB,SACnBt5C,KAAKs5C,SAAWt5C,KAAKu8B,OAAOnD,OAAOkgB,UAGP,IAAxBn7B,EAAMpU,QAAQ,OAAuC,IAAxBoU,EAAMpU,QAAQ,OAAyC,IAA1BoU,EAAMpU,QAAQ,OACxE/J,KAAKs5C,SAAWt5C,KAAKowM,gBAAgBS,UAER,IAAxB1yL,EAAMpU,QAAQ,KACnB/J,KAAKs5C,SAAWt5C,KAAKowM,gBAAgBY,KAGrChxM,KAAKs5C,SAAWt5C,KAAKowM,gBAAgBQ,WAG7C,MACJ,IAAK,UAC2B,SAAxBzyL,EAAMmJ,eAAsC,MAAVnJ,EAClCne,KAAKme,OAAQ,EAEgB,UAAxBA,EAAMmJ,eAAuC,MAAVnJ,EACxCne,KAAKme,OAAQ,EAERA,EAAMzX,SACX1G,KAAKq0M,gBAAkBr0M,KAAKmgB,KAAKC,YAAY,yBAEjDpgB,KAAKs5C,SAAWt5C,KAAKowM,gBAAgBE,MACrC,MACJ,QACQtwM,KAAKu8B,OAAOnD,OAAOkgB,SACnBt5C,KAAKs5C,SAAWt5C,KAAKu8B,OAAOnD,OAAOkgB,SAGnCt5C,KAAKs5C,SAAWt5C,KAAKowM,gBAAgBE,QAIrDP,EAAO7pM,UAAUgyM,YAAc,SAAU/5L,GACrC,IAAIg6L,EAAWh6L,EAAMyH,OAAO,GACxBwyL,EAAaj6L,EAAM7K,MAAM,EAAG,GAC5BurL,EAAY,eAAO,CAAE,IAAK7+L,KAAKowM,gBAAgBE,MAAO,IAAKtwM,KAAKowM,gBAAgBO,UAAY,OAASgH,kBAErG9Y,EAAU94L,eAAeoyM,IAAatZ,EAAU94L,eAAeqyM,MAC/Dp4M,KAAKs5C,SAAWulJ,EAAU,GAAKsZ,GAC/Bn4M,KAAKme,MAAQA,EAAMk9G,UAAU,GACxBr7H,KAAKs5C,WACNt5C,KAAKs5C,SAAWulJ,EAAU,GAAKuZ,GAC/Bp4M,KAAKme,MAAQA,EAAMk9G,UAAU,KAGjCr7H,KAAKs5C,WAAat5C,KAAKowM,gBAAgBK,UAAYzwM,KAAKs5C,WAAat5C,KAAKowM,gBAAgBG,aAC7D,MAAzBvwM,KAAKme,MAAMyH,OAAO,KAClB5lB,KAAKs5C,SAAWt5C,KAAKs5C,SAAW,UAChCt5C,KAAKme,MAAQne,KAAKme,MAAMk9G,UAAU,KAI9C00E,EAAO7pM,UAAUwtM,sBAAwB,WACjC1zM,KAAK27B,OAAO0e,eAAejmC,MAInC27L,EAAO7pM,UAAUorM,4BAA8B,WAC3C,IAAI+G,EAAU,CACV,CAAEl6L,MAAO,QAASyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,UAC9C,CAAEjC,MAAO,cAAeyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,gBACpD,CAAEjC,MAAO,qBAAsByZ,KAAM53B,KAAKmgB,KAAKC,YAAY,uBAC3D,CAAEjC,MAAO,WAAYyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,aACjD,CAAEjC,MAAO,kBAAmByZ,KAAM53B,KAAKmgB,KAAKC,YAAY,oBACxD,CAAEjC,MAAO,WAAYyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,aACjD,CAAEjC,MAAO,SAAUyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,WAC/C,CAAEjC,MAAO,YAAayZ,KAAM53B,KAAKmgB,KAAKC,YAAY,aAEtDpgB,KAAKm/L,gBAAkB,CACnBmZ,eAAgB,CACZ,CAAEn6L,MAAO,aAAcyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,eACnD,CAAEjC,MAAO,WAAYyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,aACjD,CAAEjC,MAAO,WAAYyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,aACjD,CAAEjC,MAAO,QAASyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,UAC9C,CAAEjC,MAAO,UAAWyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,YAChD,CAAEjC,MAAO,mBAAoByZ,KAAM53B,KAAKmgB,KAAKC,YAAY,kBACzD,CAAEjC,MAAO,iBAAkByZ,KAAM53B,KAAKmgB,KAAKC,YAAY,gBACvD,CAAEjC,MAAO,iBAAkByZ,KAAM53B,KAAKmgB,KAAKC,YAAY,gBACvD,CAAEjC,MAAO,WAAYyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,aACjD,CAAEjC,MAAO,aAAcyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,eACnD,CAAEjC,MAAO,OAAQyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,UAEjDm4L,eAAgBF,EAChBG,aAAcH,EACdI,iBAAkBJ,EAClBK,iBAAkBL,EAClBM,gBAAiB,CACb,CAAEx6L,MAAO,QAASyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,UAC9C,CAAEjC,MAAO,WAAYyZ,KAAM53B,KAAKmgB,KAAKC,YAAY,gBAS7D2vL,EAAO7pM,UAAUkxM,gBAAkB,SAAUj/J,GACzC,IAAIQ,EAAO34C,KAAK27B,OAChB,GAAIgd,EAAKyvD,iBACLpoG,KAAK+xM,kBAAiB,OAD1B,CAIA,IAAIx1K,EAASoc,EAAK4Y,iBAAiBpZ,GAC/B/I,EAASuJ,EAAKgtG,uBAAuBxtG,GACrC7xC,EAAS8oC,EAAOt9B,cAAc,oBAClC,GAAKxL,EAAL,CAGA,IAAIsyM,EAAUjgK,EAAKxvC,QAAQ6D,wBACvB6rM,EAAUvyM,EAAO0G,wBACrBhN,KAAKg2M,iBAAiBz5K,EAAQj2B,EAAQuyM,EAAQtnL,MAAQqnL,EAAQ9tM,KAAM+tM,EAAQrnL,OAASonL,EAAQ/tM,QAEjGklM,EAAO7pM,UAAU6tM,uBAAyB,SAAUhhM,GAChD,IAAIzM,EAASyM,EAAEzM,OACf,GAAIA,EAAO0E,UAAUkB,SAAS,qBAA2D,SAApClM,KAAK27B,OAAO0e,eAAejmC,MACxC,aAApCpU,KAAK27B,OAAO0e,eAAejmC,MAA2D,UAApCpU,KAAK27B,OAAO0e,eAAejmC,MAAmB,CAChG,IAAIukC,EAAO34C,KAAK27B,OACZo2B,EAAMpZ,EAAKgb,eAAe,gBAAartD,EAAQ,gBAAgB4gB,kBAAkB5W,aAAa,iBAElG,GADAtQ,KAAKu8B,OAASw1B,EACV/xD,KAAKixM,eAAe94J,QAAU4Z,EAAI5Z,OAASn4C,KAAKixM,eAAe/9D,OAC/D,OAEAlzI,KAAK++L,cACL/+L,KAAK++L,aAAamF,cAEtBlkM,KAAKixM,eAAiB,CAAE94J,MAAO4Z,EAAI5Z,MAAO+6F,QAAQ,GAClDlzI,KAAKo3M,gBAAgBrlJ,EAAI5Z,SAGjC43J,EAAO7pM,UAAUi6D,aAAe,SAAUptD,GACtC,GAAiC,cAA7B/S,KAAKq6C,eAAejmC,MAAwBpU,KAAKq6C,eAAeokJ,sBAAuB,CACvF,GAAI,gBAAa1rL,EAAEzM,OAAQ,oBACvByM,EAAEzM,OAAO0E,UAAUkB,SAAS,sBAAuB,CACnD,IAAI4sM,EAAwB,eAAQ/lM,EAAEzM,OAAQ,OAC1CwL,cAAc,wBACdgnM,EACAA,EAAsBtzL,QAGtBzS,EAAEzM,OAAOkf,QAGjB,GAAIzS,EAAEzM,OAAO0E,UAAUkB,SAAS,eAAgB,CAC5C,IAAI6sM,EAAUvlM,SAAS1B,cAAc,iBAAiBxB,aAAa,MAAMiQ,QAAQ,SAAU,KACnD,IAApCw4L,EAAQhvM,QAAQ,gBAChB,eAAQyJ,SAASw7B,eAAe+pK,GAAU,OAAOjnM,cAAc,iBAAiB0T,SAI5F,GAAiC,cAA7BxlB,KAAKq6C,eAAe3hB,MAA4D,SAApC14B,KAAK27B,OAAO0e,eAAejmC,MACnC,aAApCpU,KAAK27B,OAAO0e,eAAejmC,MAA2D,UAApCpU,KAAK27B,OAAO0e,eAAejmC,KAAkB,CAC/F,IAAI9N,EAASyM,EAAEzM,OACX0yM,EAAgB1yM,EAAO0E,UAAUkB,SAAS,SAC1Cu/L,EAAS,gBAAazrM,KAAK27B,OAAOxyB,QAAS,YAC3C8vM,GAAY,EACZrmE,EAAW,gBAAatsI,EAAQ,WAChC4yM,EAAkBl5M,KAAK27B,OAAOxyB,QAAQ6B,UAAUkB,SAAS,YAAcsH,SAAS1B,cAAc,mBAC5F9R,KAAK27B,OAAOxyB,QAAQ2I,cAAc,mBAQxC,GAPI25L,GAAU74D,IACVqmE,EAAYxN,EAAOv6L,KAAO0hI,EAAS1hI,IAElClR,KAAK++L,cAAgBma,IAAoB,gBAAa5yM,EAAQ,sBAC/D,gBAAaA,EAAQ,wBACrBtG,KAAK++L,aAAamF,YAAY59L,GAE9B,gBAAaA,EAAQ,mBAAqBA,EAAO0E,UAAUkB,SAAS,mBACpE,QAEKlM,KAAK++L,cAAiB,gBAAaz4L,EAAQ,oBAAwB,gBAAaA,EAAQ,oBACxF,eAAQA,EAAQ,+BAAoC0yM,GACpD,gBAAa1yM,EAAQ,sBAAwB4yM,IAC7CD,IAAe,gBAAa3yM,EAAQ,oBAChC,gBAAaA,EAAQ,oBAAyBssI,GAAYsmE,KAC/Dl5M,KAAK++L,aAAa4H,aAAe,gBAAargM,EAAQ,WAClD,gBAAaA,EAAQ,UAAU4K,KAAOlR,KAAK27B,OAAOxyB,QAAQ+H,MAAQ,gBAAa5K,EAAQ,qBACpF4yM,GACPl5M,KAAK++L,aAAamF,YAAY59L,MAK9CypM,EAAO7pM,UAAUiwM,cAAgB,SAAU3qL,GACvCxrB,KAAKmtM,gBAAgB3hL,EAAK2sB,OAAS3sB,EAAK2hL,gBACxCntM,KAAK60M,WAAanvM,OAAOoV,KAAK9a,KAAKmtM,iBACnC,IAAI9yK,EAAc,IAAI,OAAYr6B,KAAKq6C,eAAe/c,SAClDlD,GAAQ,IAAI,QAAQof,MAAM,QAASx5C,KAAKowM,gBAAgBE,MAAO9kL,EAAK2sB,OACxEn4C,KAAK+0M,qBAAuB16K,EAAYF,WAAW+0B,KACnDlvD,KAAK80M,yBAA2Bz6K,EAAY6e,aAAa9e,GACzD,IAAK,IAAIrzB,EAAI,EAAGA,EAAI/G,KAAK80M,yBAAyBpuM,OAAQK,IAAK,CAE3D,IADA,IAAIsL,GAAS,EACJosB,EAAI,EAAGA,EAAIz+B,KAAKq6C,eAAe/c,QAAQ52B,OAAQ+3B,IACpD,GAAIz+B,KAAK80M,yBAAyB/vM,SAASgC,EAAEuQ,WAAY,KAAK6gC,QAC1Dn4C,KAAKq6C,eAAe/c,QAAQv4B,SAAS05B,EAAEnnB,WAAY,KAAK6gC,MAAO,CAC/D9lC,EAAQosB,EACR,OAGO,IAAXpsB,GACArS,KAAKq6C,eAAe/c,QAAQhrB,OAAOD,EAAO,GAG9CrS,KAAKg/B,OAAOxT,EAAK2sB,eACVn4C,KAAKg/B,OAAOxT,EAAK2sB,OAE5B,IAAI4Z,EAAM/xD,KAAK27B,OAAO41B,iBAAiB/lC,EAAK2sB,OACxC68J,EAAYh1M,KAAK27B,OAAO2oE,gBAAkBvyC,EAAIuyC,eAAiB,gBAAkB,iBACjF2wG,EAAoBj1M,KAAK27B,OAAOgqH,uBAAuBn6H,EAAK2sB,OAAOrmC,cAAckjM,GACjE,cAAhBxpL,EAAKpF,QACLpmB,KAAKq6C,eAAe/c,QAAUt9B,KAAKq6C,eAAe/c,QAAQgH,OAAO9Y,EAAKyhL,kBAClEjtM,KAAKq6C,eAAe/c,QAAQ52B,QAAUuuM,GACtCA,EAAkBjqM,UAAU0G,IAAI,gBAIhCujM,GACAA,EAAkBjqM,UAAUC,OAAO,cAEvCugB,EAAK6qB,YAAc,YACnBr2C,KAAK27B,OAAOi6K,aAAa56L,QAAQwQ,IAErCxrB,KAAK27B,OAAOhuB,YAEhBoiM,EAAO7pM,UAAUkvM,aAAe,WAC5B,IAAI/kJ,EAAOrwD,KAAKq6C,eAAe/c,QAC/Bt9B,KAAKmtM,gBAAkB,GACvB,IAAK,IAAIpmM,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IAAK,CAClC/G,KAAKu8B,OAASv8B,KAAK27B,OAAO41B,iBAAiBlB,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,QACxE,eAA2BkY,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,MAAOn4C,KAAK27B,OAAOqb,wBACnF,IAAIiuG,EAAY50F,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,MAC5Cn4C,KAAK27B,OAAO41B,iBAAiBlB,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,SAC/D8sG,EAAY,eAA2B50F,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,MAAOn4C,KAAK27B,OAAOqb,wBAAwBmB,OAEvHn4C,KAAKm5M,kBAAkBl0D,EAAW50F,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgiC,SAAU+W,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6G,MAAOkyC,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKlD,KAAMi8C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKkhC,UAAW6X,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKiiC,UAAW8W,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKy7C,aAAc1C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKijC,OAG5Uw1J,EAAO7pM,UAAUizM,kBAAoB,SAAUl0D,EAAW3rG,EAAUn7B,EAAO/J,EAAMokC,EAAWe,EAAWwZ,EAAcxY,GACjH,IAAI4gB,EAAM,CACNhjB,MAAO8sG,EACPzsG,UAAWA,EACXe,UAAWA,EACXwZ,aAAcA,EACdzZ,SAAUA,EACVn7B,MAAOA,EACP/J,KAAMA,GAENpU,KAAKmtM,gBAAgB,GAAKloD,GAC1BjlJ,KAAKmtM,gBAAgB,GAAKloD,GAAWhzI,KAAKkpD,GAG1Cn7D,KAAKmtM,gBAAgB,GAAKloD,GAAa,CAAC9pF,GAE5C,IAAIhjB,EAAQoC,EAAMv6C,KAAK27B,OAAOs4B,2BAA2B1Z,GAAKpC,MAAQ8sG,EACtEjlJ,KAAKo5M,iBAAiBjhK,IAE1B43J,EAAO7pM,UAAUkzM,iBAAmB,SAAUn0D,GAC1C,IAAIgwD,EACAljJ,EAAM/xD,KAAK27B,OAAO41B,iBAAiB0zF,GACnCjlJ,KAAK27B,OAAO2oE,gBAAkBvyC,EAAIuyC,eAClC2wG,EAAoBj1M,KAAK27B,OAAOgqH,uBAAuBV,GAAWnzI,cAAc,iBAE3EigD,IACLkjJ,EAAoBj1M,KAAK27B,OAAOgqH,uBAAuBV,GAAWnzI,cAAc,mBAEhFmjM,GACAA,EAAkBjqM,UAAU0G,IAAI,eAOxCq+L,EAAO7pM,UAAUigM,gBAAkB,WAC/B,OAAOnmM,KAAK++L,aAAe/+L,KAAK++L,aAAaoH,kBAAoB,IAOrE4J,EAAO7pM,UAAUiuM,gBAAkB,SAAUh8J,GACzC,OAAO3kC,SAASw7B,eAAehvC,KAAK27B,OAAO41B,iBAAiBpZ,GAAOoC,KAAK0vF,cAAc,GAAG9rH,OAO7F4xL,EAAO7pM,UAAUmzM,2BAA6B,WAC1C,OAAOr5M,KAAK++L,aAAaqH,sBAEtB2J,EAtzCgB,I,+GClBhBuJ,EAAsB,eAAmB,CAChD/7F,OAAQ,CAAEliE,OAAQ,CAAEiB,QAAS,OAC7BjjC,OAAQ,SAAUhP,GACd,IAAK,OAAW,CACZ,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAO,CAAEwtG,MAAO,eAAiBnzD,KAIlDD,QAAS,YACA,QAAan8C,KAAKq7C,QACnBr7C,KAAKq7C,UAGbkB,QAAS,CACLihE,OAAQ,WACJ,MAAO,mBAIR+7F,EAAmB,CAC1Bj1M,KAAM,eACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUy7J,EAAiBj1M,KAAMg1M,KAGlCE,EAAqB,eAAmB,CAC/CngM,OAAQ,aAGRkjC,QAAS,CACLihE,OAAQ,WACJ,MAAO,kBAIRi8F,EAAkB,CACzBn1M,KAAM,cACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAU27J,EAAgBn1M,KAAMk1M,KC3CjCE,EAAoB,eAAmB,CAC9Cn8F,OAAQ,CAAEliE,OAAQ,CAAEiB,QAAS,OAC7BjjC,OAAQ,SAAUhP,GACd,IAAK,OAAW,CACZ,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAO,CAAEwtG,MAAO,eAAiBnzD,KAIlDD,QAAS,YACA,QAAan8C,KAAKq7C,QACnBr7C,KAAKq7C,UAGbkB,QAAS,CACLihE,OAAQ,WACJ,MAAO,iBAIRm8F,EAAiB,CACxBr1M,KAAM,aACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAU67J,EAAer1M,KAAMo1M,KAGhCE,EAAmB,eAAmB,CAC7CvgM,OAAQ,aAGRkjC,QAAS,CACLihE,OAAQ,WACJ,MAAO,gBAIRq8F,EAAgB,CACvBv1M,KAAM,YACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAU+7J,EAAcv1M,KAAMs1M,KC3C/BE,EAA4B,eAAmB,CACtDv8F,OAAQ,CAAEliE,OAAQ,CAAEiB,QAAS,OAC7BjjC,OAAQ,SAAUhP,GACd,IAAK,OAAW,CACZ,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAO,CAAEwtG,MAAO,eAAiBnzD,KAIlDD,QAAS,YACA,QAAan8C,KAAKq7C,QACnBr7C,KAAKq7C,UAGbkB,QAAS,CACLihE,OAAQ,WACJ,MAAO,0BAIRu8F,EAAyB,CAChCz1M,KAAM,sBACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUi8J,EAAuBz1M,KAAMw1M,KAGxCE,EAAkB,eAAmB,CAC5C3gM,OAAQ,aAGRkjC,QAAS,CACLihE,OAAQ,WACJ,MAAO,eAIRy8F,EAAe,CACtB31M,KAAM,WACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUm8J,EAAa31M,KAAM01M,KC3C9BE,EAAsB,eAAmB,CAChD38F,OAAQ,CAAEliE,OAAQ,CAAEiB,QAAS,OAC7BjjC,OAAQ,SAAUhP,GACd,IAAK,OAAW,CACZ,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAO,CAAEwtG,MAAO,eAAiBnzD,KAIlDD,QAAS,YACA,QAAan8C,KAAKq7C,QACnBr7C,KAAKq7C,UAGbkB,QAAS,CACLihE,OAAQ,WACJ,MAAO,mBAIR28F,EAAmB,CAC1B71M,KAAM,eACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUq8J,EAAiB71M,KAAM41M,KAGlCE,EAAqB,eAAmB,CAC/C/gM,OAAQ,aAGRkjC,QAAS,CACLihE,OAAQ,WACJ,MAAO,kBAIR68F,EAAkB,CACzB/1M,KAAM,cACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUu8J,EAAgB/1M,KAAM81M,KC3CjCE,EAAsB,eAAmB,CAChD/8F,OAAQ,CAAEliE,OAAQ,CAAEiB,QAAS,OAC7BjjC,OAAQ,SAAUhP,GACd,IAAK,OAAW,CACZ,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAO,CAAEwtG,MAAO,eAAiBnzD,KAIlDD,QAAS,YACA,QAAan8C,KAAKq7C,QACnBr7C,KAAKq7C,UAGbkB,QAAS,CACLihE,OAAQ,WACJ,MAAO,mBAIR+8F,EAAmB,CAC1Bj2M,KAAM,eACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUy8J,EAAiBj2M,KAAMg2M,KAGlCE,EAAoB,eAAmB,CAC9CnhM,OAAQ,aAGRkjC,QAAS,CACLihE,OAAQ,WACJ,MAAO,iBAIRi9F,EAAiB,CACxBn2M,KAAM,aACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAU28J,EAAen2M,KAAMk2M,KC3ChCE,EAA4B,eAAmB,CACtDn9F,OAAQ,CAAEliE,OAAQ,CAAEiB,QAAS,OAC7BjjC,OAAQ,SAAUhP,GACd,IAAK,OAAW,CACZ,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAO,CAAEwtG,MAAO,eAAiBnzD,KAIlDD,QAAS,YACA,QAAan8C,KAAKq7C,QACnBr7C,KAAKq7C,UAGbkB,QAAS,CACLihE,OAAQ,WACJ,MAAO,yBAIRm9F,EAAyB,CAChCr2M,KAAM,qBACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAU68J,EAAuBr2M,KAAMo2M,KAGxCE,EAA2B,eAAmB,CACrDvhM,OAAQ,aAGRkjC,QAAS,CACLihE,OAAQ,WACJ,MAAO,wBAIRq9F,EAAwB,CAC/Bv2M,KAAM,oBACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAU+8J,EAAsBv2M,KAAMs2M,KC3CvCE,EAAgB,eAAmB,CAC1Cv9F,OAAQ,CAAEliE,OAAQ,CAAEiB,QAAS,OAC7BjjC,OAAQ,SAAUhP,GACd,IAAK,OAAW,CACZ,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAO,CAAEwtG,MAAO,eAAiBnzD,KAIlDD,QAAS,YACA,QAAan8C,KAAKq7C,QACnBr7C,KAAKq7C,UAGbkB,QAAS,CACLihE,OAAQ,WACJ,MAAO,aAIRu9F,EAAa,CACpBz2M,KAAM,SACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUi9J,EAAWz2M,KAAMw2M,KAG5BE,EAAgB,eAAmB,CAC1C3hM,OAAQ,aAGRkjC,QAAS,CACLihE,OAAQ,WACJ,MAAO,aAIRy9F,EAAa,CACpB32M,KAAM,SACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUm9J,EAAW32M,KAAM02M,KC3C5BE,EAAgB,eAAmB,CAC1C39F,OAAQ,CAAEliE,OAAQ,CAAEiB,QAAS,OAC7BjjC,OAAQ,SAAUhP,GACd,IAAK,OAAW,CACZ,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAO,CAAEwtG,MAAO,eAAiBnzD,KAIlDD,QAAS,YACA,QAAan8C,KAAKq7C,QACnBr7C,KAAKq7C,UAGbkB,QAAS,CACLihE,OAAQ,WACJ,MAAO,aAIR29F,EAAa,CACpB72M,KAAM,SACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUq9J,EAAW72M,KAAM42M,KAG5BE,EAAe,eAAmB,CACzC/hM,OAAQ,aAGRkjC,QAAS,CACLihE,OAAQ,WACJ,MAAO,YAIR69F,EAAY,CACnB/2M,KAAM,QACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUu9J,EAAU/2M,KAAM82M,KC3C3BE,EAAmB,eAAmB,CAC7C/9F,OAAQ,CAAEliE,OAAQ,CAAEiB,QAAS,OAC7BjjC,OAAQ,SAAUhP,GACd,IAAK,OAAW,CACZ,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAO,CAAEwtG,MAAO,eAAiBnzD,KAIlDD,QAAS,YACA,QAAan8C,KAAKq7C,QACnBr7C,KAAKq7C,UAGbkB,QAAS,CACLihE,OAAQ,WACJ,MAAO,gBAIR+9F,EAAgB,CACvBj3M,KAAM,YACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUy9J,EAAcj3M,KAAMg3M,KAG/BE,EAAkB,eAAmB,CAC5CniM,OAAQ,aAGRkjC,QAAS,CACLihE,OAAQ,WACJ,MAAO,eAIRi+F,EAAe,CACtBn3M,KAAM,WACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAU29J,EAAan3M,KAAMk3M,KC3C9BE,EAA8B,eAAmB,CACxDn+F,OAAQ,CAAEliE,OAAQ,CAAEiB,QAAS,OAC7BjjC,OAAQ,SAAUhP,GACd,IAAK,OAAW,CACZ,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAO,CAAEwtG,MAAO,eAAiBnzD,KAIlDD,QAAS,YACA,QAAan8C,KAAKq7C,QACnBr7C,KAAKq7C,UAGbkB,QAAS,CACLihE,OAAQ,WACJ,MAAO,2BAIRm+F,EAA2B,CAClCr3M,KAAM,uBACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAU69J,EAAyBr3M,KAAMo3M,KAG1CE,EAA6B,eAAmB,CACvDviM,OAAQ,aAGRkjC,QAAS,CACLihE,OAAQ,WACJ,MAAO,0BAIRq+F,EAA0B,CACjCv3M,KAAM,sBACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAU+9J,EAAwBv3M,KAAMs3M,KC3CzCE,EAAuB,eAAmB,CACjDv+F,OAAQ,CAAEliE,OAAQ,CAAEiB,QAAS,OAC7BjjC,OAAQ,SAAUhP,GACd,IAAK,OAAW,CACZ,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAO,CAAEwtG,MAAO,eAAiBnzD,KAIlDD,QAAS,YACA,QAAan8C,KAAKq7C,QACnBr7C,KAAKq7C,UAGbkB,QAAS,CACLihE,OAAQ,WACJ,MAAO,oBAIRu+F,EAAoB,CAC3Bz3M,KAAM,gBACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUi+J,EAAkBz3M,KAAMw3M,KAenCE,EAAsB,eAAmB,CAChD3iM,OAAQ,aAGRkjC,QAAS,CACLihE,OAAQ,WACJ,MAAO,mBAIRy+F,EAAmB,CAC1B33M,KAAM,eACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUm+J,EAAiB33M,KAAM03M,KCvDlCE,EAA+B,eAAmB,CACzD3+F,OAAQ,CAAEliE,OAAQ,CAAEiB,QAAS,OAC7BjjC,OAAQ,SAAUhP,GACd,IAAK,OAAW,CACZ,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAO,CAAEwtG,MAAO,eAAiBnzD,KAIlDD,QAAS,YACA,QAAan8C,KAAKq7C,QACnBr7C,KAAKq7C,UAGbkB,QAAS,CACLihE,OAAQ,WACJ,MAAO,4BAIR2+F,EAA4B,CACnC73M,KAAM,wBACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUq+J,EAA0B73M,KAAM43M,KAG3CE,EAA6B,eAAmB,CACvD/iM,OAAQ,aAGRkjC,QAAS,CACLihE,OAAQ,WACJ,MAAO,0BAIR6+F,EAA0B,CACjC/3M,KAAM,sBACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUu+J,EAAwB/3M,KAAM83M,KC3CzCE,GAAsB,eAAmB,CAChD/+F,OAAQ,CAAEliE,OAAQ,CAAEiB,QAAS,OAC7BjjC,OAAQ,SAAUhP,GACd,IAAK,OAAW,CACZ,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAO,CAAEwtG,MAAO,eAAiBnzD,KAIlDD,QAAS,YACA,QAAan8C,KAAKq7C,QACnBr7C,KAAKq7C,UAGbkB,QAAS,CACLihE,OAAQ,WACJ,MAAO,mBAIR++F,GAAmB,CAC1Bj4M,KAAM,eACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAUy+J,GAAiBj4M,KAAMg4M,MAGlCE,GAAqB,eAAmB,CAC/CnjM,OAAQ,aAGRkjC,QAAS,CACLihE,OAAQ,WACJ,MAAO,kBAIRi/F,GAAkB,CACzBn4M,KAAM,cACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAU2+J,GAAgBn4M,KAAMk4M,MC5BjC97L,GAAa,CAAC,eAAgB,UAAW,cAAe,sBAAuB,cAAe,OAAQ,aAAc,kBAAmB,SAAU,YAAa,UAAW,YAAa,eAAgB,aAAc,cAAe,kBAAmB,+BAAgC,eAAgB,eAAgB,oBAAqB,YAAa,4BAA6B,SAAU,iBAAkB,gBAAiB,mBAAoB,aAAc,gBAAiB,eAAgB,iBAAkB,SAAU,SAAU,WAAY,eAAgB,eAAgB,qBAAsB,OAAQ,sBAAuB,gBAAiB,mBAAoB,SAAU,WAAY,gBAAiB,WAAY,QAAS,QAAS,aAAc,UAAW,uBAAwB,QAAS,eAAgB,cAAe,oBAAqB,mBAAoB,iBAAkB,kBAAmB,uBAAwB,sBAAuB,eAAgB,cAAe,eAAgB,mBAAoB,kBAAmB,iBAAkB,kBAAmB,iBAAkB,eAAgB,OAAQ,eAAgB,UAAW,YAAa,cAAe,eAAgB,OAAQ,SAAU,uBAAwB,YAAa,aAAc,mBAAoB,YAAa,cAAe,UAAW,gBAAiB,YAAa,cAAe,oBAAqB,eAAgB,sBAAuB,aAAc,gBAAiB,gBACh6Cg6B,GAAa,CAAC,cACdC,GAAW,eAAS,CAAEC,MAAOl6B,KAC7Bk6B,GAAQD,GAAS,GAAIE,GAAQF,GAAS,GAAIG,GAAYp1C,OAAOoV,KAAK+/B,IAC7EC,GAAU7oC,KAAK,eAAgB,qBAC/B,IAAK,IAAI,GAAK,EAAG8oC,GAAeL,GAAY,GAAKK,GAAar0C,OAAQ,KAAM,CACxE,IAAIs0C,GAAUD,GAAa,IAC3BD,GAAU7oC,KAAK,UAAY+oC,IAQxB,IAAI0hK,GAAiB,eAAmB,CAC3Cp4M,KAAM,iBACN42C,OAAQ,CAAC,QACTN,MAAOA,GACPC,MAAOA,GACPM,MAAOL,GACPr0B,MAAO,CAAEnS,MAAO,gBAChB8mC,QAAS,WAAc,MAAO,CAAEC,OAAQr7C,KAAKq7C,SAC7C9iB,KAAM,WACF,MAAO,CACH+iB,aAAc,IAAI,OAAM,IACxBC,SAAU76B,GACV86B,OAAQd,GACRe,mBAAmB,EACnBC,oBAAoB,EACpBC,UAAW,CAAE,sBAAuB,CAAE,WAAY,CAAE,eAAgB,cAAe,aAAc,cAAiB,SAAU,CAAE,SAAU,CAAE,eAAgB,cAAe,qBAAsB,CAAE,oBAAqB,CAAE,eAAgB,iBAAsB,SAAU,QAAS,YAAa,WAAY,uBAAwB,sBAAuB,gBAAiB,eAAgB,wBAAyB,sBAAuB,eAAgB,eAC1bC,cAAe,CAAE,sBAAuB,WAAY,eAAgB,eAAgB,qBAAsB,qBAAsB,uBAAwB,uBAAwB,wBAAyB,yBACzMC,QAAS,OACTC,mBAAoB,KAG5BC,QAAS,WACL/7C,KAAKs7C,aAAaU,SAAWh8C,KAAKs7C,aAAaztC,QAC/C7N,KAAKs7C,aAAaztC,QAAU7N,KAAK6N,QACjC7N,KAAKi8C,iBACLj8C,KAAKs7C,aAAaY,eAAiBl8C,KAAKs7C,aAAazqC,cACrD7Q,KAAKs7C,aAAazqC,cAAgB7Q,KAAK6Q,cACvC7Q,KAAKs7C,aAAartC,cAAgBjO,KAAKiO,cACvCjO,KAAKm8C,QAAUn8C,KAAKm8C,SAExB9iC,OAAQ,SAAUhP,GACd,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,MAAOq6C,IAEpBG,QAAS,CACLtuC,cAAe,SAAUuuC,GAIrB,GAHKA,IACDA,EAAgB92C,OAAOoV,KAAK9a,KAAK87C,oBAAsB,KAEvDU,EAAc91C,QAAU1G,KAAK87C,mBAC7B,IAAK,IAAIroC,EAAK,EAAGgpC,EAAkBD,EAAe/oC,EAAKgpC,EAAgB/1C,OAAQ+M,IAAM,CACjF,IAAIipC,EAAWD,EAAgBhpC,GAC3BkpC,EAAoB38C,KAAK87C,mBAAmBY,GAChD,GAAIC,GAAqBA,EAAkBj2C,OAAQ,CAC/C,IAAK,IAAIkD,EAAK,EAAGgzC,EAAsBD,EAAmB/yC,EAAKgzC,EAAoBl2C,OAAQkD,IAAM,CAC7F,IAAIizC,EAAMD,EAAoBhzC,GAC1BsO,EAAU,eAAS,mBAAoB2kC,GACvC3kC,GACA2kC,EAAIC,QAAQC,WAEZF,EAAInsC,YACJmsC,EAAInsC,UAAY,WAGjB1Q,KAAK87C,mBAAmBY,MAK/C7rC,cAAe,SAAUkK,EAAMiiC,GAC3B,IAAI5zC,EAAQpJ,KACRA,KAAK67C,SACL77C,KAAKw7C,OAAUx7C,KAAKw7C,OAAyCx7C,KAAKw7C,OAArCx7C,KAAKs7C,aAAa2B,aAE/Cj9C,KAAKs7C,cAAgBt7C,KAAKs7C,aAAaY,gBACvCl8C,KAAKs7C,aAAaY,eAAenhC,EAAMiiC,GAEvCjiC,GAAQ/a,KAAKw7C,QAAUx7C,KAAKw7C,OAAO90C,QACnChB,OAAOoV,KAAKC,GAAMtO,KAAI,SAAU5I,GAC5BuF,EAAMoyC,OAAO/uC,KAAI,SAAUga,GAClB5iB,IAAQ4iB,GAAY,cAAcvD,KAAKrf,KACpCuF,EAAMyyC,OACNzyC,EAAMkyC,aAAa4B,YAAYC,MAAM,UAAYt5C,EAAKkX,EAAKlX,KAG3DuF,EAAM+zC,MAAM,UAAYt5C,EAAKkX,EAAKlX,IAClCuF,EAAM+zC,MAAM,eAAgBpiC,EAAKlX,aAOzDgK,QAAS,SAAUsW,EAAWi5B,EAAWC,GAIrC,GAHK,SACDr9C,KAAKw7C,OAAUx7C,KAAKw7C,OAAyCx7C,KAAKw7C,OAArCx7C,KAAKs7C,aAAa2B,aAEhC,WAAd94B,GAAwC,UAAdA,IAA0BnkB,KAAKw7C,QAAkC,IAAvBx7C,KAAKw7C,OAAO90C,QAiBhF,GAAmB,gBAAdyd,GAAyD,iBAA1Bi5B,EAAU/G,aAAmCr2C,KAAKw7C,QAAkC,IAAvBx7C,KAAKw7C,OAAO90C,OAAe,CACzH7C,EAAM7D,KAAKw7C,OAAOlkC,WAAWxS,MAAM,6BAA+B,GAClEw4C,EAAUz5C,EAAI,GACdu5C,GAAav5C,IAAQ,gBAAYu5C,EAAUE,MACtC,QAKDt9C,KAAKm9C,MAAM,UAAYG,EAASF,EAAUE,IAC1Ct9C,KAAKm9C,MAAM,eAAgBC,EAAUE,MALrCt9C,KAAKs7C,aAAa4B,YAAYC,MAAM,UAAYG,EAASF,EAAUE,IACnEt9C,KAAKs7C,aAAa4B,YAAYC,MAAM,eAAgBC,EAAUE,WAvB0B,CAChG,IAAIz5C,EAAM7D,KAAKw7C,OAAOlkC,WAAWxS,MAAM,kBAAoB,GACvDw4C,EAAUz5C,EAAI,GACdu5C,GAAav5C,IAAQ,gBAAYu5C,EAAUE,MACtC,QAMiB,WAAdn5B,GAA2BnkB,KAAKu9C,SAAWv9C,KAAKu9C,OAAOC,gBACvDx9C,KAAKm9C,MAAM,UAAYG,EAASF,EAAUE,IAC1Ct9C,KAAKm9C,MAAM,eAAgBC,EAAUE,MAPzCt9C,KAAKs7C,aAAa4B,YAAYC,MAAM,UAAYG,EAASF,EAAUE,IACnEt9C,KAAKs7C,aAAa4B,YAAYC,MAAM,eAAgBC,EAAUE,IAC9Dt9C,KAAKs7C,aAAa4B,YAAYC,MAAM,oBAAqBC,EAAUE,MAwB1Et9C,KAAKs7C,cAAgBt7C,KAAKs7C,aAAaU,UACxCh8C,KAAKs7C,aAAaU,SAAS73B,EAAWi5B,EAAWC,IAGzDhC,OAAQ,WACJr7C,KAAKm8C,WAETqtC,QAAS,SAAUnc,GACf,OAAOrtE,KAAKs7C,aAAakuC,QAAQnc,IAErCgc,UAAW,SAAU3sD,GACjB,OAAO18B,KAAKs7C,aAAa+tC,UAAU3sD,IAEvC6sD,YAAa,WACT,OAAOvpF,KAAKs7C,aAAaiuC,eAE7B5H,eAAgB,WACZ,OAAO3hF,KAAKs7C,aAAaqmC,kBAE7BmK,OAAQ,SAAU13E,EAAM23E,GACpB,OAAO/rF,KAAKs7C,aAAawwC,OAAO13E,EAAM23E,IAE1C7J,kBAAmB,SAAUr+E,GACzB,OAAO7D,KAAKs7C,aAAa4mC,kBAAkBr+E,IAE/C6wF,cAAe,WACX,OAAO10F,KAAKs7C,aAAao5C,iBAE7BxhF,YAAa,WACT,OAAOlT,KAAKs7C,aAAapoC,eAE7B40E,gBAAiB,SAAU9qD,GACvB,OAAOh9B,KAAKs7C,aAAawsC,gBAAgB9qD,IAE7C4pD,MAAO,SAAU11E,GACb,OAAOlR,KAAKs7C,aAAasrC,MAAM11E,IAEnC+wE,YAAa,SAAU5oE,GACnB,OAAOrZ,KAAKs7C,aAAa2mC,YAAY5oE,IAEzC+6E,gBAAiB,WACb,OAAOp0F,KAAKs7C,aAAa84C,mBAE7BzK,WAAY,SAAUt3E,GAClB,OAAOrS,KAAKs7C,aAAaquC,WAAWt3E,IAExCi3E,aAAc,SAAUj3E,GACpB,OAAOrS,KAAKs7C,aAAaguC,aAAaj3E,IAE1C2+E,mBAAoB,SAAUC,EAAiBxgF,GAC3C,OAAOzQ,KAAKs7C,aAAa01C,mBAAmBC,EAAiBxgF,IAEjEgkF,cAAe,SAAU3oF,EAAGzJ,GACxB,OAAOrC,KAAKs7C,aAAam5C,cAAc3oF,EAAGzJ,IAE9CwR,YAAa,SAAU/H,EAAGzJ,EAAGmyF,GACzB,OAAOx0F,KAAKs7C,aAAaznC,YAAY/H,EAAGzJ,EAAGmyF,OAI5CmoH,GAAc,CACrBr4M,KAAM,YACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAU6+J,GAAYr4M,KAAMo4M,IAChC7+J,EAAIC,UAAUm8J,EAAa31M,KAAM01M,GACjCn8J,EAAIC,UAAUi8J,EAAuBz1M,KAAMw1M,GAC3Cj8J,EAAIC,UAAU27J,EAAgBn1M,KAAMk1M,GACpC37J,EAAIC,UAAUy7J,EAAiBj1M,KAAMg1M,GACrCz7J,EAAIC,UAAU+7J,EAAcv1M,KAAMs1M,GAClC/7J,EAAIC,UAAU67J,EAAer1M,KAAMo1M,GACnC77J,EAAIC,UAAUm9J,EAAW32M,KAAM02M,GAC/Bn9J,EAAIC,UAAUi9J,EAAWz2M,KAAMw2M,GAC/Bj9J,EAAIC,UAAUu8J,EAAgB/1M,KAAM81M,GACpCv8J,EAAIC,UAAUq8J,EAAiB71M,KAAM41M,GACrCr8J,EAAIC,UAAU+8J,EAAsBv2M,KAAMs2M,GAC1C/8J,EAAIC,UAAU68J,EAAuBr2M,KAAMo2M,GAC3C78J,EAAIC,UAAU28J,EAAen2M,KAAMk2M,GACnC38J,EAAIC,UAAUy8J,EAAiBj2M,KAAMg2M,GACrCz8J,EAAIC,UAAUu9J,EAAU/2M,KAAM82M,GAC9Bv9J,EAAIC,UAAUq9J,EAAW72M,KAAM42M,GAC/Br9J,EAAIC,UAAU29J,EAAan3M,KAAMk3M,GACjC39J,EAAIC,UAAUy9J,EAAcj3M,KAAMg3M,GAClCz9J,EAAIC,UAAU+9J,EAAwBv3M,KAAMs3M,GAC5C/9J,EAAIC,UAAU69J,EAAyBr3M,KAAMo3M,GAC7C79J,EAAIC,UAAUm+J,EAAiB33M,KAAM03M,GACrCn+J,EAAIC,UAAUi+J,EAAkBz3M,KAAMw3M,GACtCj+J,EAAIC,UAAUu+J,EAAwB/3M,KAAM83M,GAC5Cv+J,EAAIC,UAAUq+J,EAA0B73M,KAAM43M,GAC9Cr+J,EAAIC,UAAU2+J,GAAgBn4M,KAAMk4M,IACpC3+J,EAAIC,UAAUy+J,GAAiBj4M,KAAMg4M,O,wBC/O3C,SAAUx8M,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI28M,EAAK38M,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,0FAA0FC,MAC9F,KAEJC,YAAa,gEAAgED,MAAM,KACnFE,SAAU,uDAAuDF,MAAM,KACvEG,cAAe,sCAAsCH,MAAM,KAC3DI,YAAa,2BAA2BJ,MAAM,KAC9CK,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,eACTC,SAAU,8BACVC,QAAS,eACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,WACNC,EAAG,oBACHC,GAAI,WACJC,EAAG,cACHC,GAAI,aACJC,EAAG,cACHC,GAAI,aACJC,EAAG,WACHC,GAAI,UACJC,EAAG,WACHC,GAAI,UACJC,EAAG,YACHC,GAAI,YAERgB,uBAAwB,gBACxBC,QAAS,UACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOm6M,M,oCC7DX,W,oCCAA,0HAAIr3M,EAAwC,WACxC,IAAIC,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAaxCI,EAA0C,SAAUC,EAAYC,EAAQzC,EAAK0C,GAC7E,IAA2HtE,EAAvHuE,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOb,OAAOkB,yBAAyBN,EAAQzC,GAAO0C,EACrH,GAAuB,kBAAZM,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQzC,EAAK0C,QACpH,IAAK,IAAIQ,EAAIV,EAAWK,OAAS,EAAGK,GAAK,EAAGA,KAAS9E,EAAIoE,EAAWU,MAAIJ,GAAKH,EAAI,EAAIvE,EAAE0E,GAAKH,EAAI,EAAIvE,EAAEqE,EAAQzC,EAAK8C,GAAK1E,EAAEqE,EAAQzC,KAAS8C,GAChJ,OAAOH,EAAI,GAAKG,GAAKjB,OAAOsB,eAAeV,EAAQzC,EAAK8C,GAAIA,GAW5Dk2M,EAAgB,qBACpB,OAAoBzrM,KAAO,aAC3B,IAAI0rM,EAAc,CACd1nM,UAAW,KACXwI,QAAS,IAkBTm/L,EAA0B,SAAUn0M,GASpC,SAASm0M,EAAS7zM,EAASC,GACvB,OAAOP,EAAOS,KAAKrJ,KAAMkJ,EAASC,IAAYnJ,KA04BlD,OAn5BAuF,EAAUw3M,EAAUn0M,GAiBpBm0M,EAAS72M,UAAUsT,UAAY,WAC3B5Q,EAAO1C,UAAUsT,UAAUnQ,KAAKrJ,OAEpC+8M,EAAS72M,UAAUmwF,cAAgB,WAC/B,MAAO,aAEX0mH,EAAS72M,UAAU82M,UAAY,WACE,aAAzBh9M,KAAKwa,kBACL,OAAa9I,IAAI1R,KAAK2d,aAAaC,QAAQ,GAAI,YAAa5d,KAAKi9M,YAAaj9M,MAC9E,OAAa0R,IAAI1R,KAAK2d,aAAavI,UAAW,OAAQpV,KAAKk9M,cAAel9M,OAEzE,eAAkBA,KAAK2d,aAAaC,QAAQ,KAC7C,OAAalM,IAAI1R,KAAK2d,aAAaC,QAAQ,GAAI,YAAa5d,KAAKq8F,cAAer8F,MAEpF,OAAa0R,IAAI1R,KAAK0d,aAAc,QAAS1d,KAAKm9M,YAAan9M,MAC1DA,KAAKkf,WACN,OAAaxN,IAAI1R,KAAK0d,aAAc,QAAS1d,KAAKo9M,QAASp9M,MAC3D,OAAa0R,IAAI1R,KAAK0d,aAAc,QAAS1d,KAAKq9M,WAAYr9M,MAC9D,OAAa0R,IAAI1R,KAAK0d,aAAc,UAAW1d,KAAKs9M,aAAct9M,MAClE,OAAa0R,IAAI1R,KAAK0d,aAAc,QAAS1d,KAAKu9M,aAAcv9M,MAChE,OAAa0R,IAAItF,OAAQ,SAAUpM,KAAKwN,aAAcxN,OAE1DA,KAAKw9M,mBAETT,EAAS72M,UAAU+2M,YAAc,SAAUlqM,IACjC/S,KAAKqzD,gBAAkB7/C,SAASsT,gBAAkB9mB,KAAK0d,cACxDlK,SAASsT,cAAc9b,UAAUkB,SAAS,OAAoBrH,SAAU,OAAQ0Q,WAAa,OAAQA,UACtGxC,EAAE6F,kBAGVmkM,EAAS72M,UAAUg3M,cAAgB,SAAUnqM,GACzC,IAAIm8L,EAAalvM,KAAK0d,cAA4C,KAA5B1d,KAAK0d,aAAaS,MACpD,KAAOne,KAAK0d,cAAgB1d,KAAK0d,aAAaS,MAC7C,eAAkBne,KAAKy5F,WAAc,eAAkBy1G,IAAeA,IAAelvM,KAAK43B,MAC3F53B,KAAKy9M,YAAY1qM,GAErBnK,EAAO1C,UAAUg3M,cAAc7zM,KAAKrJ,KAAM+S,IAE9CgqM,EAAS72M,UAAUyR,cAAgB,WAC/B,OAAO3X,KAAK0d,cAGhBq/L,EAAS72M,UAAUo1F,WAAa,SAAU1jE,GACtC,OAAMtS,SAAStlB,KAAK43B,KAAM53B,KAAK0d,aAAc1d,KAAKwd,eAAgBxd,KAAK2gB,iBACvE3gB,KAAKy9M,cACLz9M,KAAK0iF,mBAGTq6H,EAAS72M,UAAUq1F,YAAc,SAAUp9E,GACnCne,KAAKq7F,YACLr7F,KAAK09M,gBAAgB19M,KAAKme,OAG1Bne,KAAK09M,gBAAgB,MAEzB19M,KAAK0iF,kBACL1iF,KAAK29M,kBAETZ,EAAS72M,UAAUw3M,gBAAkB,SAAUv/L,GAC3C,IAAI+wL,EAAa,eAAkB/wL,GAAS,KAAOA,EAAM7G,WACzD,OAAMgO,SAAS4pL,EAAYlvM,KAAK0d,aAAc1d,KAAKwd,eAAgBxd,KAAK2gB,iBACxE3gB,KAAK6Q,cAAc,CAAEsN,MAAOA,EAAOyZ,KAAMzZ,EAAO9L,MAAO,OAAQ,GAC/DrS,KAAK83F,YAAc93F,KAAKqS,MACxB,IAAI4lC,EAASj4C,KAAKi4C,OACd2lK,EAAW,GACfA,EAAS3lK,EAAOrgB,MAAQ,eAAkBzZ,GAAS,KAAOA,EAAM7G,WAChEsmM,EAAS3lK,EAAO95B,OAAS,eAAkBA,GAAS,KAAOA,EAAM7G,WACjEtX,KAAK69M,SAAWD,EAChB59M,KAAKo8B,KAAO,KACRp8B,KAAKomC,gBAAkBpmC,KAAKme,OAC5Bne,KAAK89M,kBAAkB,OAG/Bf,EAAS72M,UAAU21F,aAAe,WAC9B,GAAK,eAAkB77F,KAAKme,OAsCvB,GAAIne,KAAK43B,MAAQ,eAAkB53B,KAAKme,OAAQ,CAC7Ci7E,EAAKp5F,KAAK+9M,iBAAiB/9M,KAAK43B,MAChCwhE,EACAp5F,KAAK45F,aAAaR,EAAI,OAGtB,OAAM9zE,SAAStlB,KAAK43B,KAAM53B,KAAK0d,aAAc1d,KAAKwd,eAAgBxd,KAAK2gB,iBACvE3gB,KAAKy9M,oBAITz9M,KAAK45F,aAAa55F,KAAKu5F,cAAcv5F,KAAK83F,aAAc,UAjDxB,CAChC,IAAIsB,EAAKp5F,KAAKg+M,kBAAkBh+M,KAAKme,OACjC8/L,GAAe,eAAkB7kH,GACrC,GAAIp5F,KAAK84C,sBAAwB94C,KAAKme,MAAO,CACzC,IAAI85B,EAAUj4C,KAAKi4C,OAAY,MAAIj4C,KAAKi4C,OAAO95B,MAAQ,GACvD,GAAIne,KAAKm6B,sBAAsB,QAAen6B,KAAK22F,uBAAwB,CACvE,IAAIxW,EAAU,IAAI,OAAYngF,KAAK22F,wBAAwBz9C,cAAa,IAAI,QAAQM,MAAM,IAAI,OAAUvB,EAAQ,QAASj4C,KAAKme,SAC9H,GAAIgiE,GAAWA,EAAQz5E,OAAS,EAAG,CAC/B1G,KAAK69M,SAAW19H,EAAQ,GACxB89H,GAAc,EACd,IAAIL,EAAW59M,KAAKk+M,eACfl+M,KAAKme,QAAUy/L,EAASz/L,OAASne,KAAK43B,OAASgmL,EAAShmL,MAAU53B,KAAKme,QAAUy/L,EAASz/L,OAASne,KAAK43B,OAASgmL,EAAShmL,OAC3H53B,KAAK6Q,cAAc,CAAE,KAAQ+sM,EAAShmL,KAAM,MAASgmL,EAASz/L,aAIrE,CACGgiE,EAAU,IAAI,OAAYngF,KAAKm6B,YAAY+e,cAAa,IAAI,QAAQM,MAAM,IAAI,OAAUvB,EAAQ,QAASj4C,KAAKme,SAClH,GAAIgiE,GAAWA,EAAQz5E,OAAS,EAAG,CAC/B1G,KAAK69M,SAAW19H,EAAQ,GACxB89H,GAAc,EACVL,EAAW59M,KAAKk+M,eACfl+M,KAAKme,QAAUy/L,EAASz/L,OAASne,KAAK43B,OAASgmL,EAAShmL,MAAU53B,KAAKme,QAAUy/L,EAASz/L,OAASne,KAAK43B,OAASgmL,EAAShmL,OAC3H53B,KAAK6Q,cAAc,CAAE,KAAQ+sM,EAAShmL,KAAM,MAASgmL,EAASz/L,UAK1Ei7E,EACAp5F,KAAK45F,aAAaR,EAAI,OAEfp5F,KAAK84C,sBAAwB94C,KAAKq7F,aAAiBr7F,KAAKq7F,aAAer7F,KAAK84C,uBAAyBmlK,EAC5Gj+M,KAAK09M,gBAAgB19M,KAAKme,SAEpBne,KAAK84C,sBAAyB94C,KAAK84C,uBAAyBmlK,IAClEj+M,KAAK09M,gBAAgB,MAgB7B19M,KAAK29M,iBACL,OAAMr4L,SAAStlB,KAAK43B,KAAM53B,KAAK0d,aAAc1d,KAAKwd,eAAgBxd,KAAK2gB,kBAE3Eo8L,EAAS72M,UAAUiZ,gBAAkB,WAC7Bnf,KAAK2gB,kBACD3gB,KAAK0d,cAA4C,KAA5B1d,KAAK0d,aAAaS,QAAiBne,KAAKkf,SAC7D,gBAAY,CAAClf,KAAK2d,aAAaiG,aAAc,OAAoBu6L,eAGjE,eAAS,CAACn+M,KAAK2d,aAAaiG,aAAc,OAAoBu6L,iBAI1EpB,EAAS72M,UAAUk4M,kBAAoB,WACnC,IAAIC,EAAiB,CACjB,KAAQ,WACR,oBAAqB,OACrB,kBAAmBr+M,KAAKs+M,cAAcptM,GACtC,gBAAiB,QACjB,gBAAiBlR,KAAKkf,SAAS5H,WAC/B,aAAgB,MAChB,eAAkB,MAClB,WAAc,SAElB,OAAO+mM,GAEXtB,EAAS72M,UAAUkxF,YAAc,SAAUrkF,GACvC/S,KAAKq3F,SAAU,EACXr3F,KAAKo4F,eACLxvF,EAAO1C,UAAUkxF,YAAY/tF,KAAKrJ,KAAM+S,GACpC/S,KAAKi5F,WAA+C,KAAlCj5F,KAAK23F,YAAYx5E,MAAMhM,QACzCnS,KAAKg6F,aAAah6F,KAAKi5F,UAAUnnF,cAAc,IAAM,OAAoBsnF,OAIzEp5F,KAAKi5F,WAAyC,KAA5Bj5F,KAAK0d,aAAaS,OAAgBne,KAAKo6F,iBACzDp6F,KAAKg6F,aAAah6F,KAAKi5F,UAAUnnF,cAAc,IAAM,OAAoBsnF,KAE7Ep5F,KAAKu+M,kBAAkBxrM,KAG/BgqM,EAAS72M,UAAUowF,eAAiB,WAChC,MAAO,gBAEXymH,EAAS72M,UAAUs4M,aAAe,WAC9Bx+M,KAAK23F,YAAc33F,KAAK0d,aACxB,IAAI+gM,EAAsBz+M,KAAKo4F,eAAkBp4F,KAAK+N,SAAoC,aAAzB/N,KAAKwa,gBAAmCxa,KAAK2d,aAAem/L,EAC7H,OAAO2B,GAGX1B,EAAS72M,UAAU8yF,iBAAmB,SAAUC,EAAWxB,EAAM1kF,EAAGmmF,GAChE,IAAI9vF,EAAQpJ,KACZ4I,EAAO1C,UAAU8yF,iBAAiB3vF,KAAKrJ,KAAMi5F,EAAWxB,EAAM1kF,GAC1D/S,KAAKu3F,gBACLv3F,KAAK0iF,kBAEJ1iF,KAAKo6F,iBAA4C,aAAzBp6F,KAAKwa,kBAAkCxa,KAAKq3F,SAAYr3F,KAAK84C,sBACtF9lC,YAAW,WACP5J,EAAMs1M,mBAIlB3B,EAAS72M,UAAUy4M,gBAAkB,WACjC,IAAIf,EAAW59M,KAAKu3F,eAAiB,CAAE3/D,KAAM,IAAO53B,KAAKk+M,cACrD/3E,EAAY,eAAkBnmI,KAAKy3F,MAAsEz3F,KAAKy3F,KAAnEz3F,KAAKy3F,KAAK3lF,cAAc,IAAM,OAAoBq0H,UAC7F34F,EAAaowK,EAAShmL,MAAQgmL,EAAShmL,KAAKtgB,aAAetX,KAAK0d,aAAaS,QAAU,eAAkBgoH,GAC7G,GAAI34F,EACA,OAAO24F,EAEX,IAAK,OAAQ5wH,WAAavV,KAAK4+M,kBAAoB,OAAQrpM,YACtD,eAAkBvV,KAAKu5F,gBAAkBv5F,KAAKu5F,cAAc7yF,OAAS,EAAG,CACzE,IAAIwoM,EAAalvM,KAAK0d,aAAaS,MAC/Bgc,EAAan6B,KAAK6+M,WAClBzqM,EAAOpU,KAAKy2F,WAAWt8D,GAAYu8D,OACnCooH,EAAa,eAAO5P,EAAYlvM,KAAKu5F,cAAev5F,KAAKu2F,YAAY,EAAMp8D,EAAYn6B,KAAKi4C,OAAQ7jC,GACxG,GAAIpU,KAAK84C,sBAAuC,KAAfo2J,GAA8C,iBAAzBlvM,KAAKwa,iBAAsCxa,KAAKq3F,UAAYr3F,KAAKqzD,eAAgB,CACnI,IAAI0rJ,GAA2B,GAC1B/+M,KAAKg8F,aAAa3pB,UAAYryE,KAAKg/M,qBAAuBh/M,KAAKg/M,qBAAuBh/M,KAAK24F,gBAA+C,GAA5B34F,KAAKg/M,uBACpHD,GAA2B,EAC3B/+M,KAAKi/M,sBAAwBj/M,KAAKg/M,oBACF,GAA5Bh/M,KAAKg/M,oBACLh/M,KAAKg/M,oBAAsB,IAAMh/M,KAAK24F,eAAiB34F,KAAK24F,eAAiB,IAG7E34F,KAAKg/M,oBAAsBh/M,KAAKg/M,oBAAsB,IAAMh/M,KAAK24F,eAAiB34F,KAAK24F,eAAiB34F,KAAKg/M,oBAAsB,IAEvIh/M,KAAKk/M,sBAAsBl/M,KAAKi/M,sBAAuBj/M,KAAKg/M,qBAC5DD,GAA2B,IAEM,IAAjC/+M,KAAKg8F,aAAaxxD,YAAoBu0K,IACtC/+M,KAAKm/M,sBAAsB,EAAGn/M,KAAKm0I,WAEvC2qE,EAAa,eAAO5P,EAAYlvM,KAAKo/M,yBAA0Bp/M,KAAKu2F,YAAY,EAAMp8D,EAAYn6B,KAAKi4C,OAAQ7jC,GAC/G,MAAO,eAAkB0qM,IAAe9+M,KAAKg/M,oBAAsBh/M,KAAK24F,eAAgB,CASpF,GARA34F,KAAKi/M,sBAAwBj/M,KAAKg/M,oBAClCh/M,KAAKg/M,oBAAsBh/M,KAAKg/M,oBAAsB,IAAMh/M,KAAK24F,eAAiB34F,KAAK24F,eAAiB34F,KAAKg/M,oBAAsB,IACnIh/M,KAAKk/M,sBAAsBl/M,KAAKi/M,sBAAuBj/M,KAAKg/M,qBAC5DD,GAA2B,GACU,IAAjC/+M,KAAKg8F,aAAaxxD,YAAoBu0K,IACtC/+M,KAAKm/M,sBAAsB,EAAGn/M,KAAKm0I,WAEvC2qE,EAAa,eAAO5P,EAAYlvM,KAAKo/M,yBAA0Bp/M,KAAKu2F,YAAY,EAAMp8D,EAAYn6B,KAAKi4C,OAAQ7jC,IAC1G,eAAkB0qM,GACnB,MAEJ,GAAI,eAAkBA,IAAe9+M,KAAKg/M,qBAAuBh/M,KAAK24F,eAAgB,CAClF34F,KAAKi/M,sBAAwB,EAC7Bj/M,KAAKg/M,oBAAsB,IAAMh/M,KAAK24F,eAAiB34F,KAAK24F,eAAiB,IAC7E,OAGR,GAAImmH,EAAWzsM,UACJrS,KAAKg8F,aAAaxxD,YAAcs0K,EAAWzsM,UAAcysM,EAAWzsM,OAASrS,KAAKg8F,aAAa3pB,WAAY,CAC9G,IAAI7nC,EAAas0K,EAAWzsM,OAAUrS,KAAKm0I,UAAY,EAAK,GAAK,EAAI2qE,EAAWzsM,OAAUrS,KAAKm0I,UAAY,EAAK,GAAK,EACjH9hE,EAAWryE,KAAKg8F,aAAaxxD,WAAaxqC,KAAKm0I,UAAYn0I,KAAK24F,eAAiB34F,KAAK24F,eAAiB34F,KAAKg8F,aAAaxxD,WAAaxqC,KAAKm0I,UAC3I3pG,GAAcxqC,KAAKg8F,aAAaxxD,YAChCxqC,KAAKm/M,sBAAsB30K,EAAY6nC,GAInD,GAAK,eAAkBysI,EAAW1iL,MAU9Bp8B,KAAKm/M,sBAAsB,EAAGn/M,KAAKm0I,WAEnCn0I,KAAKy3F,KAAK55E,uBAAuB,yBAAyB,GAAGlR,MAAQ3M,KAAKw4F,qBAC1Ex4F,KAAKy3F,KAAK7gF,UAAY,MAbe,CACrC,IAAIgiE,EAAU54E,KAAK+5F,gBAAgB+kH,EAAW1iL,KAAK9rB,aAAa,eAAiBtQ,KAAKq/M,cACtF,GAAIzmI,EAAU54E,KAAKm0I,UAAY,EAAG,CAC1B3pG,EAAaxqC,KAAKg8F,aAAaxxD,YAAexqC,KAAKm0I,UAAY,EAAK,GAAKn0I,KAAK24F,eAAiB34F,KAAKg8F,aAAaxxD,YAAexqC,KAAKm0I,UAAY,EAAK,GAAKn0I,KAAK24F,eAChKtmB,EAAWryE,KAAKg8F,aAAaxxD,WAAaxqC,KAAKm0I,UAAYn0I,KAAK24F,eAAiB34F,KAAK24F,eAAiB34F,KAAKg8F,aAAaxxD,WAAaxqC,KAAKm0I,UAC/In0I,KAAKm/M,sBAAsB30K,EAAY6nC,GAE3CysI,EAAW1iL,KAAOp8B,KAAKg+M,kBAAkBc,EAAW1iL,KAAK9rB,aAAa,eAQtEwuM,GAAcA,EAAW1iL,OACzB0iL,EAAW1iL,KAAOp8B,KAAKg+M,kBAAkBc,EAAW1iL,KAAK9rB,aAAa,gBAG9E,IAAIwW,EAAgBg4L,EAAW1iL,KAC/B,GAAK,eAAkBtV,GAqBf9mB,KAAKu3F,gBAAqD,KAAnCv3F,KAAK0d,aAAaS,MAAMhM,SAC/CnS,KAAKs/M,cACAt/M,KAAK84C,uBACN94C,KAAKy3F,KAAK7gF,UAAY,QAxBK,CACnC,IAAIgkB,EAAQ56B,KAAK+5F,gBAAgBjzE,EAAcxW,aAAa,eAAiB,EACzEnF,EAASpG,SAASsH,iBAAiBrM,KAAKu5F,cAAc,GAAI,MAAMhtF,iBAAiB,UAAW,IAChG,IAAK4U,MAAMhW,IAAoC,iBAAzBnL,KAAKwa,gBAAoC,CAC3Dxa,KAAKs/M,cACL,IAAIC,EAAYv/M,KAAKi4C,OAAO4kD,QAAU78F,KAAKu5F,cAAc,GAAGlqF,aAAe,EAC3E,GAAKrP,KAAK84C,sBAMN,GADA94C,KAAKy3F,KAAK55E,uBAAuB,yBAAyB,GAAGlR,MAAQ3M,KAAKw4F,qBACtEx4F,KAAK84C,uBAAyB94C,KAAKi4C,OAAO4kD,QAAS,CACnD,IAAI2iH,EAAsBx/M,KAAKu4F,iBAAmBv4F,KAAKu4F,gBAAgB/tD,WAAa1jB,EAAcpQ,UAAa1W,KAAKu4F,gBAAgB/tD,WAAa1jB,EAAczX,aAAgByX,EAAcpQ,UAC7L1W,KAAKy3F,KAAK7gF,UAAY4oM,EAAuBx/M,KAAKy3F,KAAKtvE,iBAAiB,mBAAmBzhB,OAASogB,EAAczX,mBAPtHrP,KAAKy3F,KAAK7gF,UAAYgkB,EAAQzvB,EAASo0M,EAU3C,eAAS,CAACz4L,GAAgB,OAAoBtB,QAWtD,OAAOsB,EAGP,OAAO,MAGfi2L,EAAS72M,UAAUof,SAAW,SAAUvS,GAIpC,OAHIA,GAAgB,YAAXA,EAAEqB,MAAmC,UAAbrB,EAAEqT,QAC/BpmB,KAAKy/M,sBAELz/M,KAAKs5F,UAAqC,aAAzBt5F,KAAKwa,iBAAkCzH,GAAgB,YAAXA,EAAEqB,MAAmC,UAAbrB,EAAEqT,QACvFpmB,KAAKo6F,iBAAkB,EACvBp6F,KAAK0+M,aAAa3rM,IACX,GAGAnK,EAAO1C,UAAUof,SAASjc,KAAKrJ,KAAM+S,IAGpDgqM,EAAS72M,UAAUw5M,iBAAmB,WAClC1/M,KAAK69M,SAAW79M,KAAK2/M,eAAe3/M,KAAKme,OACzC,IAAIy/L,EAAW59M,KAAKk+M,cACdl+M,KAAKq7F,aAAe,eAAkBuiH,EAASz/L,QAAU,eAAkBy/L,EAAShmL,OACtF53B,KAAK6Q,cAAc,CAAE,MAAS+sM,EAASz/L,QAAUne,KAAKq7F,cAS9D0hH,EAAS72M,UAAU05M,YAAc,WACzB,eAAkB5/M,KAAK6/M,kBACvB7/M,KAAK6/M,eAA2C,iBAAzB7/M,KAAKwa,gBAAuCxa,KAAK2d,aAAaC,QAAQ,IACzF5d,KAAK2d,aAAaiG,aAClB,OAAMw4E,WAAW,sBAAwBygH,EAAe78M,KAAK2d,aAAavI,UAAWpV,KAAKqK,eACzFrK,KAAK2d,aAAaC,QAAQ,IAAM5d,KAAK2d,aAAaiG,YACvD,eAAS,CAAC5jB,KAAK6/M,gBAAiB,OAAoBC,aACpD,eAAc,CACVx5M,OAAQtG,KAAK6/M,eACbz0M,MAAO,OAAQmK,SAAW,OAAS,QACpCvV,KAAKqK,eACR,eAAYrK,KAAK6/M,kBASzB9C,EAAS72M,UAAU65M,YAAc,WACxB,eAAkB//M,KAAK6/M,kBACxB,eAAY7/M,KAAK6/M,gBACjB,gBAAY,CAAC7/M,KAAK6/M,gBAAiB,OAAoBC,aACnD9/M,KAAK6/M,eAAe70M,UAAUkB,SAAS2wM,GACvC,eAAO78M,KAAK6/M,gBAGZ7/M,KAAK6/M,eAAenvM,UAAY,GAEpC1Q,KAAK6/M,eAAiB,OAG9B9C,EAAS72M,UAAUyzF,YAAc,SAAU7yE,EAAek5L,GAItD,GAHKA,GACDhgN,KAAKg6F,aAAalzE,GAElB9mB,KAAKs5F,WAAat5F,KAAKo6F,gBAAiB,CACxC,IAAIj0D,EAAenmC,KAAKigN,eAAen5L,EAAcxW,aAAa,eAAegH,WAC7E4oM,EAAmBlgN,KAAK85F,kBAAkBhzE,EAAcxW,aAAa,eAC5C,aAAzBtQ,KAAKwa,kBACAxa,KAAKwtC,YAAcxtC,KAAKomC,gBAAkB85K,EAM3ClgN,KAAKmgN,mBAAmBr5L,EAAe,MAAM,IAL7C9mB,KAAKmgN,mBAAmBr5L,EAAe,MACvC9mB,KAAKwtC,YAAa,EAClBxtC,KAAKomC,cAAgBpmC,KAAK85F,kBAAkBhzE,EAAcxW,aAAa,iBAM1EtQ,KAAKogN,kBAAkBj6K,IACxBnmC,KAAKqgN,qBAAqBl6K,EAAc65K,KAIpDjD,EAAS72M,UAAUk6M,kBAAoB,SAAUjiM,GAC7C,GAAI,OAAQmiM,UAAW,CACnB,IAAI9wK,EAAgBxvC,KAAKugN,qBACrBC,EAAUxgN,KAAKygN,iBAAiB74L,IAChC84L,EAASlxK,EAAc5nB,IACvB+4L,EAAY3gN,KAAKygN,iBAAiB94L,MAClCi5L,EAAWpxK,EAAc7nB,MAC7B,OAAgB,IAAZ64L,IAAmBA,IAAYriM,EAAMzX,QAAUi6M,IAAcxiM,EAAMzX,QAClEi6M,EAAYC,GAAYJ,EAAUE,GAAYF,IAAYE,GAAUC,IAAcC,GAQvF,OAAO,GAGf7D,EAAS72M,UAAU4yF,SAAW,SAAU/lF,EAAGgmF,IACnC,eAAkBA,KAAe,eAAkBA,IAAa,eAAkBA,EAAS5+D,cAC3FvxB,EAAO1C,UAAU4yF,SAASzvF,KAAKrJ,KAAM+S,GAErC/S,KAAKo4F,gBAAkB,eAAkBrlF,IAAMA,EAAEzM,SAAWtG,KAAK2d,aAAaiG,aAC9E5jB,KAAKo3F,YAAYrkF,IAGzBgqM,EAAS72M,UAAU+0F,kBAAoB,SAAU9xF,GAC7C,OAAQ,eAAkBA,IAE9B4zM,EAAS72M,UAAUw4M,aAAe,SAAU3rM,GACxC,IAAIsnF,EAAiBtnF,IAAmB,SAAbA,EAAEqT,QAAkC,OAAbrT,EAAEqT,QACnC,SAAbrT,EAAEqT,QAAkC,QAAbrT,EAAEqT,QAAiC,WAAbrT,EAAEqT,QAAoC,aAAbrT,EAAEqT,QACxEU,EAAgBuzE,EAAgBr6F,KAAKu5F,cAAcv5F,KAAK83F,aAAe93F,KAAK2+M,kBAChF,GAAK,eAAkB73L,GASlB,GAAgC,KAA5B9mB,KAAK0d,aAAaS,OAEvB,GADAne,KAAK83F,YAAc,MACd,eAAkB93F,KAAKy3F,MAAO,CAC1Bz3F,KAAK84C,uBACN94C,KAAKy3F,KAAK7gF,UAAY,GAE1B,IAAIiqM,EAAY7gN,KAAKy3F,KAAK3lF,cAAc,IAAM,OAAoBsnF,IAClEp5F,KAAKg6F,aAAa6mH,SAItB7gN,KAAK83F,YAAc,KACnB93F,KAAK0iF,kBACD1iF,KAAKu5F,eAAiBv5F,KAAKu5F,cAAc7yF,OAAS,IAAM1G,KAAK8vM,gBAC7D9vM,KAAKs/M,kBAvB0B,CACnC,IAAKjlH,EAAe,CAChB,IAAIl8E,EAAQne,KAAK85F,kBAAkBhzE,EAAcxW,aAAa,eAC9DtQ,KAAK83F,YAAc93F,KAAK+5F,gBAAgB57E,GACxCne,KAAK83F,YAAe,eAAkB93F,KAAK83F,aAAkC,KAAnB93F,KAAK83F,YAEnE93F,KAAKo6F,gBAA8C,KAA5Bp6F,KAAK0d,aAAaS,OAAuBne,KAAKo6F,gBACrEp6F,KAAK25F,YAAY7yE,EAAeuzE,KAoBxC0iH,EAAS72M,UAAUq4M,kBAAoB,SAAUxrM,GAC7C/S,KAAK87F,UAAU/oF,GACV,eAAkB/S,KAAKy5F,YACxBz5F,KAAK0+M,aAAa3rM,GAClBA,EAAE6F,mBAGVmkM,EAAS72M,UAAUm6M,qBAAuB,SAAUl6K,EAAck0D,QACxC,IAAlBA,IAA4BA,GAAgB,GAChD,IAAIymH,EAAY9gN,KAAKugN,qBACjBpiM,EAAQne,KAAK0d,aAAaS,MAAMsoH,OAAO,EAAGq6E,EAAUn5L,OACxD,GAAIxJ,GAAUA,EAAMmJ,gBAAkB6e,EAAasgG,OAAO,EAAGq6E,EAAUn5L,OAAOL,cAAgB,CAC1F,IAAI4nL,EAAa/wL,EAAQgoB,EAAasgG,OAAOtoH,EAAMzX,OAAQy/B,EAAaz/B,QACxE,OAAM4e,SAAS4pL,EAAYlvM,KAAK0d,aAAc1d,KAAKwd,eAAgBxd,KAAK2gB,iBACxE3gB,KAAK0d,aAAaqrK,kBAAkB+3B,EAAUn5L,MAAO3nB,KAAK0d,aAAaS,MAAMzX,aAExE2zF,IACL,OAAM/0E,SAAS6gB,EAAcnmC,KAAK0d,aAAc1d,KAAKwd,eAAgBxd,KAAK2gB,iBAC1E3gB,KAAK0d,aAAaqrK,kBAAkB,EAAG/oL,KAAK0d,aAAaS,MAAMzX,UAGvEq2M,EAAS72M,UAAU66M,eAAiB,SAAUnpL,GAC1C,OAAOhvB,EAAO1C,UAAU66M,eAAe13M,KAAKrJ,KAAM43B,GAAM,EAAM53B,KAAK+yD,eAEvEgqJ,EAAS72M,UAAU86M,YAAc,WACA,aAAzBhhN,KAAKwa,kBACL,OAAavP,OAAOjL,KAAK2d,aAAaC,QAAQ,GAAI,YAAa5d,KAAKi9M,aACpE,OAAahyM,OAAOjL,KAAK2d,aAAavI,UAAW,OAAQpV,KAAKk9M,gBAE7D,eAAkBl9M,KAAK2d,aAAaC,QAAQ,KAC7C,OAAa3S,OAAOjL,KAAK2d,aAAaC,QAAQ,GAAI,YAAa5d,KAAKq8F,eAEpEr8F,KAAK0d,eACL,OAAazS,OAAOjL,KAAK0d,aAAc,QAAS1d,KAAKm9M,aAChDn9M,KAAKkf,WACN,OAAajU,OAAOjL,KAAK0d,aAAc,QAAS1d,KAAKo9M,SACrD,OAAanyM,OAAOjL,KAAK0d,aAAc,QAAS1d,KAAKq9M,YACrD,OAAapyM,OAAOjL,KAAK0d,aAAc,UAAW1d,KAAKs9M,cACvD,OAAaryM,OAAOjL,KAAK0d,aAAc,QAAS1d,KAAKu9M,cACrD,OAAatyM,OAAOmB,OAAQ,SAAUpM,KAAKwN,gBAGnDxN,KAAKihN,qBAETlE,EAAS72M,UAAU0zF,aAAe,SAAUR,EAAIrmF,GAC5CnK,EAAO1C,UAAU0zF,aAAavwF,KAAKrJ,KAAMo5F,EAAIrmF,GACxC,eAAkBqmF,IAAQp5F,KAAKs5F,UAAat5F,KAAK4+M,iBAClD5+M,KAAKs/M,eAGbvC,EAAS72M,UAAUg7M,kBAAoB,SAAUnuM,GAC7C,IAAIqmF,EACAp5F,KAAKm6F,cAEDf,EADAp5F,KAAKwtC,WACAxtC,KAAKy3F,KAAK3lF,cAAc,IAAM,OAAoBq0H,UAGlDnmI,KAAKy3F,KAAK3lF,cAAc,IAAM,OAAoB0T,OAEvD4zE,IACAp5F,KAAK45F,aAAaR,EAAIrmF,GACtB/S,KAAKq3F,SAAU,GAEfr3F,KAAKwtC,aACLxtC,KAAKu3F,gBAAiB,EACtBv3F,KAAKmhN,cAAcpuM,KAGV,UAAbA,EAAEqT,QAAyD,KAAnCpmB,KAAK0d,aAAaS,MAAMhM,OAChDnS,KAAK84F,SAAS/lF,GAET/S,KAAKq3F,UAAYr3F,KAAKwtC,YAAc,eAAkB4rD,IAC3Dp5F,KAAKy9M,YAAY1qM,GAErB/S,KAAK64F,UAAU9lF,IAEnBgqM,EAAS72M,UAAU8zF,aAAe,SAAUZ,GACxCp5F,KAAK0iF,kBACD1iF,KAAK65F,UAAUT,KAAQA,EAAGpuF,UAAUkB,SAAS,OAAoBi6H,YACjEnmI,KAAKs/M,cACLlmH,EAAGpuF,UAAU0G,IAAI,OAAoB8T,SAG7Cu3L,EAAS72M,UAAUi3M,YAAc,SAAUpqM,GACnC,OAAQwC,WAAavV,KAAKqzD,iBAC1BrzD,KAAKohN,cAAe,GAExBphN,KAAKqhN,QAAQtuM,GACb,OAAM0K,eAAezd,KAAK0d,aAAc1d,KAAK2d,aAAavI,YAE9D2nM,EAAS72M,UAAUm2F,cAAgB,SAAUtpF,GACzCA,EAAE6F,iBACE,OAAQrD,WAAavV,KAAKo4F,gBAC1Bp4F,KAAKohN,cAAe,GAExBx4M,EAAO1C,UAAUm2F,cAAchzF,KAAKrJ,KAAM+S,IAE9CgqM,EAAS72M,UAAUu3M,YAAc,SAAU1qM,GACvC,IAAI3J,EAAQpJ,KACRme,EAAQne,KAAK+gN,eAAe/gN,KAAK0d,aAAaS,OAClD,GAAKne,KAAKq7F,aAA2C,KAA5Br7F,KAAK0d,aAAaS,MAWtC,GAAuC,KAAnCne,KAAK0d,aAAaS,MAAMhM,OAAe,CAC5C,IAAImvM,EAAkBthN,KAAKme,MAC3B,GAAI,eAAkBA,GAAQ,CAC1B,IAAIk/G,EAAsC,KAA5Br9H,KAAK0d,aAAaS,MAAe,KAAOne,KAAK0d,aAAaS,MAEpE4N,EAAY,CAAE6L,KAAMylG,EAASjhG,KAAM,IAClCp8B,KAAKuhN,QAMNvhN,KAAKwhN,0BAA0BnkF,EAAStxG,EAAWu1L,GALnDthN,KAAK6N,QAAQ,uBAAwBke,GAAW,SAAUA,GACtD3iB,EAAMo4M,0BAA0BnkF,EAAStxG,EAAWu1L,EAAiBvuM,WAQ7E/S,KAAKu3F,gBAAiB,EACtBv3F,KAAK6Q,cAAc,CAAEsN,MAAOA,IACxBmjM,IAAoBthN,KAAKme,OACzBne,KAAKmhN,cAAcpuM,QAItB/S,KAAKq7F,cACVr7F,KAAKu3F,gBAAiB,OAnC+B,CACrD,IAAInxD,EAAgBpmC,KAAKomC,cACrBD,EAAenmC,KAAKme,MACxBne,KAAK6Q,cAAc,CAAEsN,MAAOA,IACxB,eAAkBne,KAAKme,QACvB,OAAMmH,SAAS,GAAItlB,KAAK0d,aAAc1d,KAAKwd,eAAgBxd,KAAK2gB,iBAEhE3gB,KAAKs5F,UAAYlzD,IAAkBpmC,KAAKme,OAASgoB,IAAiBnmC,KAAKme,OACvEne,KAAKmhN,cAAc,QA8B/BpE,EAAS72M,UAAUs7M,0BAA4B,SAAUrjM,EAAO4N,EAAWqa,EAAerzB,GACtF,IAAIklC,EAASj4C,KAAKi4C,OACd7b,EAAOrQ,EAAUqQ,KACjBwhL,EAAW,GACXxhL,GAAQ,eAAS6b,EAAOrgB,KAAMwE,IAAS,eAAS6b,EAAO95B,MAAOie,GAC9DwhL,EAAWxhL,GAGX,gBAAS6b,EAAOrgB,KAAMzZ,EAAOy/L,GAC7B,gBAAS3lK,EAAO95B,MAAOA,EAAOy/L,IAElC59M,KAAK69M,SAAWD,EAChB,IAAI6D,EAAa,CACb7pL,KAAM,eAASqgB,EAAOrgB,KAAM53B,KAAK69M,UACjC1/L,MAAO,eAAS85B,EAAO95B,MAAOne,KAAK69M,UACnCxrM,MAAO,MAEXrS,KAAK6Q,cAAc4wM,GAAY,GAC/BzhN,KAAK45F,aAAa,KAAM,MACxB55F,KAAKu3F,gBAAiB,EAClBnxD,IAAkBpmC,KAAKme,OACvBne,KAAKmhN,cAAcpuM,IAW3BgqM,EAAS72M,UAAUyU,kBAAoB,SAAUC,EAASC,GACzB,aAAzB7a,KAAKwa,kBACLxa,KAAK0hN,UAAU9mM,GACf5a,KAAKk8F,iBAAiB,CAAC,SAAU,QAAS,cAAethF,IAE7D,IAAK,IAAInH,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAKF,GAAUnH,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC9D,IAAIsH,EAAOnR,EAAG6J,GACd,OAAQsH,GACJ,IAAK,WACD,OAAM6U,YAAY5vB,KAAKkf,SAAUlf,KAAK0d,cAClC1d,KAAKkf,UACL,OAAajU,OAAOjL,KAAK0d,aAAc,QAAS1d,KAAKo9M,SACrD,OAAanyM,OAAOjL,KAAK0d,aAAc,QAAS1d,KAAKq9M,YACrD,OAAapyM,OAAOjL,KAAK0d,aAAc,UAAW1d,KAAKs9M,gBAGvD,OAAa5rM,IAAI1R,KAAK0d,aAAc,QAAS1d,KAAKo9M,QAASp9M,MAC3D,OAAa0R,IAAI1R,KAAK0d,aAAc,QAAS1d,KAAKq9M,WAAYr9M,MAC9D,OAAa0R,IAAI1R,KAAK0d,aAAc,UAAW1d,KAAKs9M,aAAct9M,OAEtEA,KAAK2hN,cACL,MACJ,IAAK,iBACD3hN,KAAKw+M,eACDx+M,KAAKo4F,eAA0C,aAAzBp4F,KAAKwa,iBAAkC,eAAkBxa,KAAKy3F,OACpF7uF,EAAO1C,UAAUwxF,WAAWruF,KAAKrJ,MAErC,MACJ,IAAK,cACD,MACJ,QAEI,IAAI4hN,EAAa5hN,KAAKu8F,cAAcxhF,EAAMH,EAASC,GACnDjS,EAAO1C,UAAUyU,kBAAkBtR,KAAKrJ,KAAM4hN,EAAWplH,YAAaolH,EAAWnlH,aAC7Ez8F,KAAKo4F,eAA0B,eAATr9E,GAAyB,eAAkB/a,KAAKy3F,OAASz3F,KAAK06F,cAC3D,aAAzB16F,KAAKwa,iBACL5R,EAAO1C,UAAUwxF,WAAWruF,KAAKrJ,MAErC,SAWhB+8M,EAAS72M,UAAUmT,OAAS,WACxBzQ,EAAO1C,UAAUmT,OAAOhQ,KAAKrJ,MAC7BA,KAAKw+M,eACDx+M,KAAKo4F,eAA0C,aAAzBp4F,KAAKwa,iBAAkC,eAAkBxa,KAAKy3F,OACpF7uF,EAAO1C,UAAUwxF,WAAWruF,KAAKrJ,MAErCA,KAAKuZ,kBAQTwjM,EAAS72M,UAAUsU,cAAgB,WAC/B,MAAO,YAWXuiM,EAAS72M,UAAU01F,QAAU,SAAUpC,EAAOqoH,GAC1Cj5M,EAAO1C,UAAU01F,QAAQvyF,KAAKrJ,KAAMw5F,EAAOqoH,IAW/C9E,EAAS72M,UAAUkzB,OAAS,SAAUe,EAAYC,EAAO6d,GACrDrvC,EAAO1C,UAAUkzB,OAAO/vB,KAAKrJ,KAAMm6B,EAAYC,EAAO6d,IAS1D8kK,EAAS72M,UAAU41F,UAAY,SAAU/oF,GAErCnK,EAAO1C,UAAU41F,UAAUzyF,KAAKrJ,KAAM+S,IAS1CgqM,EAAS72M,UAAU2yF,UAAY,SAAU9lF,GAErC,IAAIm8L,EAAalvM,KAAK0d,cAA4C,KAA5B1d,KAAK0d,aAAaS,MAAe,KACjEne,KAAK0d,cAAgB1d,KAAK0d,aAAaS,MAC7C,IAAK,eAAkBne,KAAKy5F,UAAW,CACnC,IAAIqoH,EAAW9hN,KAAK+hN,YAChB/hN,KAAK+hN,cACL,OAAMz8L,SAAStlB,KAAKo7F,YAAap7F,KAAK0d,aAAc1d,KAAKwd,eAAgBxd,KAAK2gB,iBAC9E3gB,KAAK+hN,aAAc,GAEnB/hN,KAAKs5F,UACLt5F,KAAKy/M,sBAET,IAAI7B,EAAW59M,KAAKu3F,eAAiB,CAAE3/D,KAAM,IAAO53B,KAAKk+M,cACrD/3E,EAAY,eAAkBnmI,KAAKy3F,MAAsE,KAA9Dz3F,KAAKy3F,KAAK3lF,cAAc,IAAM,OAAoBq0H,UACjG,GAAInmI,KAAK0d,cAAgBkgM,EAAShmL,OAAS53B,KAAK0d,aAAaS,QAAU,eAAkBgoH,GAMrF,OALInmI,KAAKwtC,aACLxtC,KAAKmhN,cAAcpuM,GACnB/S,KAAKu3F,gBAAiB,QAE1B3uF,EAAO1C,UAAU2yF,UAAUxvF,KAAKrJ,KAAM+S,GAG1C,GAA6B,aAAzB/S,KAAKwa,iBAAqE,KAAnCxa,KAAK0d,aAAaS,MAAMhM,OAAe,CAC9E,IAAIgoB,EAAan6B,KAAK6+M,WAClBzqM,EAAOpU,KAAKy2F,WAAWt8D,GAAYu8D,OACnCgD,EAAa,eAAO15F,KAAK0d,aAAaS,MAAOne,KAAKu5F,cAAe,SAAS,EAAMp/D,EAAYn6B,KAAKi4C,OAAQ7jC,GAC7GpU,KAAKi6F,WAAaP,EAAWt9D,KACzB,eAAkBs9D,EAAWrnF,SAC7BqnF,EAAWrnF,MAAQ,eAAOrS,KAAK0d,aAAaS,MAAOne,KAAKu5F,cAAe,cAAc,EAAMp/D,EAAYn6B,KAAKi4C,OAAQ7jC,GAAM/B,OAE9HrS,KAAK83F,YAAc4B,EAAWrnF,MACzB,eAAkBrS,KAAKi6F,YAGnB6nH,IACL9hN,KAAKu3F,gBAAiB,EACtBv3F,KAAK0iF,mBAJL1iF,KAAKmgN,mBAAmBngN,KAAKi6F,WAAY,MAAM,GAOlDj6F,KAAK+hN,cAAe/hN,KAAKq3F,SAAYr3F,KAAKuU,cAC3CvU,KAAKy9M,YAAY1qM,GAGrB,eAAkB/S,KAAKy5F,WAAaz5F,KAAKq7F,cAAgB,eAAkB6zG,IAAeA,IAAelvM,KAAKme,OAC9Gne,KAAKy9M,cAET70M,EAAO1C,UAAU2yF,UAAUxvF,KAAKrJ,KAAM+S,IAO1CgqM,EAAS72M,UAAUwmB,QAAU,WACpB1sB,KAAK+d,UAGN,OAAQxI,WAAavV,KAAKo4F,gBAC1Bp4F,KAAKohN,cAAe,GAExBx4M,EAAO1C,UAAUwmB,QAAQrjB,KAAKrJ,QAQlC+8M,EAAS72M,UAAUgI,MAAQ,WACvBlO,KAAKme,MAAQ,MASjB4+L,EAAS72M,UAAUshB,SAAW,SAAUzU,GAEpCnK,EAAO1C,UAAUshB,SAASne,KAAKrJ,KAAM+S,IASzCgqM,EAAS72M,UAAUw1F,SAAW,WAC1B,OAAO9yF,EAAO1C,UAAUw1F,SAASryF,KAAKrJ,OAS1C+8M,EAAS72M,UAAUy5M,eAAiB,SAAUxhM,GAC1C,OAAOvV,EAAO1C,UAAUy5M,eAAet2M,KAAKrJ,KAAMme,IAGtD4+L,EAAS72M,UAAUw2F,kBAAoB,aAGvCt2F,EAAW,CACP,gBAAS,IACV22M,EAAS72M,UAAW,gBAAY,GACnCE,EAAW,CACP,gBAAS,IACV22M,EAAS72M,UAAW,mBAAe,GACtCE,EAAW,CACP,eAAS,KACV22M,EAAS72M,UAAW,sBAAkB,GACzCE,EAAW,CACP,gBAAS,IACV22M,EAAS72M,UAAW,sBAAkB,GACzCE,EAAW,CACP,eAAS,OACV22M,EAAS72M,UAAW,aAAS,GAChCE,EAAW,CACP,eAAS,OACV22M,EAAS72M,UAAW,aAAS,GAChCE,EAAW,CACP,gBAAS,IACV22M,EAAS72M,UAAW,uBAAmB,GAC1CE,EAAW,CACP,gBAAS,IACV22M,EAAS72M,UAAW,iBAAa,GACpCE,EAAW,CACP,kBACD22M,EAAS72M,UAAW,4BAAwB,GAC/CE,EAAW,CACP,kBACD22M,EAAS72M,UAAW,iBAAa,GACpCE,EAAW,CACP,eAAS,OACV22M,EAAS72M,UAAW,qBAAiB,GACxCE,EAAW,CACP,eAAS,UACV22M,EAAS72M,UAAW,sBAAkB,GACzCE,EAAW,CACP,eAAS,OACV22M,EAAS72M,UAAW,4BAAwB,GAC/CE,EAAW,CACP,eAAS,OACV22M,EAAS72M,UAAW,gBAAY,GACnCE,EAAW,CACP,eAAS,OACV22M,EAAS72M,UAAW,sBAAkB,GACzCE,EAAW,CACP,eAAS,OACV22M,EAAS72M,UAAW,sBAAkB,GACzCE,EAAW,CACP,eAAS,OACV22M,EAAS72M,UAAW,mBAAe,GACtCE,EAAW,CACP,eAAS,SACV22M,EAAS72M,UAAW,aAAS,GAChCE,EAAW,CACP,eAAS,UACV22M,EAAS72M,UAAW,mBAAe,GACtCE,EAAW,CACP,eAAS,SACV22M,EAAS72M,UAAW,kBAAc,GACrCE,EAAW,CACP,gBAAS,IACV22M,EAAS72M,UAAW,gBAAY,GACnCE,EAAW,CACP,eAAS,OACV22M,EAAS72M,UAAW,YAAQ,GAC/BE,EAAW,CACP,eAAS,OACV22M,EAAS72M,UAAW,aAAS,GAChC62M,EAAW32M,EAAW,CAClB,QACD22M,GACIA,EAp5BkB,CAq5B3B,S,sBCn8BA,SAAUj9M,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASgiC,EAAoBt+B,EAAQC,EAAeC,EAAKC,GACrD,IAAIC,EAASJ,EAAS,IACtB,OAAQE,GACJ,IAAK,IACD,OAAOD,GAAiBE,EAClB,eACA,kBACV,IAAK,KAUD,OARIC,GADW,IAAXJ,EACUC,EAAgB,UAAY,UACpB,IAAXD,EACGC,GAAiBE,EAAW,UAAY,WAC3CH,EAAS,EACNC,GAAiBE,EAAW,UAAY,WAExC,SAEPC,EACX,IAAK,IACD,OAAOH,EAAgB,aAAe,aAC1C,IAAK,KAUD,OARIG,GADW,IAAXJ,EACUC,EAAgB,SAAW,SACnB,IAAXD,EACGC,GAAiBE,EAAW,SAAW,WAC1CH,EAAS,EACNC,GAAiBE,EAAW,SAAW,WAEvCF,GAAiBE,EAAW,QAAU,WAE7CC,EACX,IAAK,IACD,OAAOH,EAAgB,UAAY,UACvC,IAAK,KAUD,OARIG,GADW,IAAXJ,EACUC,EAAgB,MAAQ,MAChB,IAAXD,EACGC,GAAiBE,EAAW,MAAQ,QACvCH,EAAS,EACNC,GAAiBE,EAAW,MAAQ,QAEpCF,GAAiBE,EAAW,KAAO,QAE1CC,EACX,IAAK,IACD,OAAOH,GAAiBE,EAAW,SAAW,YAClD,IAAK,KAQD,OANIC,GADW,IAAXJ,EACUC,GAAiBE,EAAW,MAAQ,OAC5B,IAAXH,EACGC,GAAiBE,EAAW,MAAQ,UAEpCF,GAAiBE,EAAW,MAAQ,QAE3CC,EACX,IAAK,IACD,OAAOH,GAAiBE,EAAW,WAAa,eACpD,IAAK,KAUD,OARIC,GADW,IAAXJ,EACUC,GAAiBE,EAAW,QAAU,UAC9B,IAAXH,EACGC,GAAiBE,EAAW,SAAW,WAC1CH,EAAS,EACNC,GAAiBE,EAAW,SAAW,SAEvCF,GAAiBE,EAAW,UAAY,SAE/CC,EACX,IAAK,IACD,OAAOH,GAAiBE,EAAW,WAAa,aACpD,IAAK,KAUD,OARIC,GADW,IAAXJ,EACUC,GAAiBE,EAAW,OAAS,QAC7B,IAAXH,EACGC,GAAiBE,EAAW,OAAS,SACxCH,EAAS,EACNC,GAAiBE,EAAW,OAAS,OAErCF,GAAiBE,EAAW,MAAQ,OAE3CC,GAInB,IAAIi+M,EAAK/hN,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,wFAAwFC,MAC5F,KAEJC,YACI,8DAA8DD,MAC1D,KAERsC,kBAAkB,EAClBpC,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C4wB,oBAAoB,EACpBvwB,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,eACHC,GAAI,eACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,gBACTC,QAAS,gBAETC,SAAU,WACN,OAAQpB,KAAKmwB,OACT,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,sBACX,KAAK,EACD,MAAO,uBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,qBAGnB9uB,QAAS,iBACTC,SAAU,WACN,OAAQtB,KAAKmwB,OACT,KAAK,EACD,MAAO,+BACX,KAAK,EACD,MAAO,6BACX,KAAK,EACD,MAAO,8BACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,4BAGnB5uB,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,UACNC,EAAGsgC,EACHrgC,GAAIqgC,EACJpgC,EAAGogC,EACHngC,GAAImgC,EACJlgC,EAAGkgC,EACHjgC,GAAIigC,EACJhgC,EAAGggC,EACH//B,GAAI+/B,EACJ9/B,EAAG8/B,EACH7/B,GAAI6/B,EACJ5/B,EAAG4/B,EACH3/B,GAAI2/B,GAER3+B,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOu/M,M,wBC/KT,SAAUliN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIgiN,EACI,wEAAwE5hN,MACpE,KAER6hN,EAAgB,CACZ,QACA,QACA,SACA,SACA,SACA,SACA,SACAD,EAAY,GACZA,EAAY,GACZA,EAAY,IAEpB,SAASv+M,EAAUC,EAAQC,EAAeC,EAAKC,GAC3C,IAAIC,EAAS,GACb,OAAQF,GACJ,IAAK,IACD,OAAOC,EAAW,oBAAsB,kBAC5C,IAAK,KACDC,EAASD,EAAW,WAAa,WACjC,MACJ,IAAK,IACD,OAAOA,EAAW,WAAa,WACnC,IAAK,KACDC,EAASD,EAAW,WAAa,YACjC,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACDC,EAASD,EAAW,SAAW,SAC/B,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACDC,EAASD,EAAW,SAAW,SAC/B,MACJ,IAAK,IACD,OAAOA,EAAW,YAAc,WACpC,IAAK,KACDC,EAASD,EAAW,YAAc,YAClC,MACJ,IAAK,IACD,OAAOA,EAAW,SAAW,QACjC,IAAK,KACDC,EAASD,EAAW,SAAW,SAC/B,MAGR,OADAC,EAASo+M,EAAax+M,EAAQG,GAAY,IAAMC,EACzCA,EAEX,SAASo+M,EAAax+M,EAAQG,GAC1B,OAAOH,EAAS,GACVG,EACIo+M,EAAcv+M,GACds+M,EAAYt+M,GAChBA,EAGV,IAAIy+M,EAAKniN,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,2GAA2GC,MAC/G,KAEJC,YACI,uEAAuED,MACnE,KAERE,SACI,qEAAqEF,MACjE,KAERG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,mBACJC,IAAK,gCACLC,KAAM,sCACNgE,EAAG,WACHC,GAAI,cACJC,IAAK,2BACLC,KAAM,iCAEVlE,SAAU,CACNC,QAAS,oBACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,mBACTC,SAAU,4BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,YACNC,EAAG+B,EACH9B,GAAI8B,EACJ7B,EAAG6B,EACH5B,GAAI4B,EACJ3B,EAAG2B,EACH1B,GAAI0B,EACJzB,EAAGyB,EACHxB,GAAIwB,EACJvB,EAAGuB,EACHtB,GAAIsB,EACJrB,EAAGqB,EACHpB,GAAIoB,GAERJ,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO2/M,M,oIC1HP,EAAgC,WAMhC,SAASC,EAAeh1K,GACpBrtC,KAAKqtC,QAAUA,EA0MnB,OAjMAg1K,EAAen8M,UAAUmT,OAAS,SAAU63E,EAAY7+E,GACpDrS,KAAKylC,QAA2C,UAAjCzlC,KAAKqtC,QAAQ7yB,gBAC5Bxa,KAAKkxF,WAAaA,EAClB,IAAI4jB,EAAe,eAAe,eAAc,MAAO,CACnD5jG,GAAIlR,KAAKqtC,QAAQlkC,QAAQ+H,GAAK,eAAiBmB,EAC/CyC,OAAQ,mCACRzC,EAAO6+E,EAAWzgF,QAASzQ,KAAKqtC,SACpC,OAAOynE,GAQXutG,EAAen8M,UAAUo8M,wBAA0B,SAAUlxK,GACzD,IAAI9F,EAAkC,UAA3BtrC,KAAKkxF,WAAW1S,OACvB,IAAI,OAAK,EAAG,EAAGx+E,KAAKqtC,QAAQkE,cAAcnmC,MAAOpL,KAAKqtC,QAAQkE,cAAcpmC,QAC5EnL,KAAKylC,QACDzlC,KAAKqtC,QAAQM,qBAAqBC,eAClC5tC,KAAKqtC,QAAQpa,OAAO,GAAGsvL,kBAM/B,OALAnxK,EAAStlC,GAAmC,kBAAtB9L,KAAKkxF,WAAWplF,EACH,kBAAtB9L,KAAKkxF,WAAWplF,EAAkB9L,KAAKkxF,WAAWplF,EAAI,EAC/D,gBAAe9L,KAAKkxF,WAAWplF,EAAGw/B,EAAKlgC,QAAUkgC,EAAKx/B,EAC1DslC,EAAS/uC,GAAmC,kBAAtBrC,KAAKkxF,WAAW7uF,EAAkBrC,KAAKkxF,WAAW7uF,EACpE,gBAAerC,KAAKkxF,WAAW7uF,EAAGipC,EAAKngC,SAAWmgC,EAAKjpC,GACpD,GAQXggN,EAAen8M,UAAUs8M,wBAA0B,SAAUpxK,GACzD,IAAI8wH,EAAiB,IAAI,OAAc,EAAG,GAC1C,GAAIliK,KAAKylC,QAAS,CAUd,IATA,IAAIvS,EAAQlzB,KAAKqtC,QACb6jD,EAAalxF,KAAKkxF,WAClBhjB,EAAYgjB,EAAWhjB,UACvBD,EAAYijB,EAAWjjB,UACvBpqC,EAAa3Q,EAAMoM,oBACnBrJ,EAAaj2B,KAAKqtC,QAAQpX,WAC1BjB,OAAQ,EACRgE,OAAQ,EACRjD,OAAS,EACJtiB,EAAK,EAAG7J,EAAKspB,EAAMi5C,gBAAiB14D,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC/D,IAAIupB,EAAOpzB,EAAG6J,GACd,GAAIy6D,IAAclxC,EAAK14B,MAAsB,MAAb4pE,GAAmC,iBAAdlxC,EAAK14B,KAEtD,GADA0wB,EAAQgI,EACJhI,EAAMC,UAAUlrB,QAAQ,aAAe,EAAG,CAC1C,IAAI04M,EAAkC,qBAApBztL,EAAMC,UAAoCi8D,EAAWplF,EAAE4S,UAAWpH,WAChF45E,EAAWplF,EACf,GAAIkpB,EAAM8E,OAAO/vB,QAAQ04M,GAAe,EACpC,OAAO,EAGP1sL,EAASf,EAAM8E,OAAO/vB,QAAQ04M,QAGjC,GAAwB,aAApBztL,EAAMC,UAA0B,CACrC,IAAIM,EAAS,CAAEtT,SAAU,OAAQ7N,KAAM,YACvC2hB,EAAuC,kBAAtB/1B,KAAKkxF,WAAWplF,GAAyD,kBAAhC,IAAIuS,KAAKre,KAAKkxF,WAAWplF,GAC/EuS,KAAKwX,MAAM3C,EAAMuC,KAAKC,cAAcH,EAAzBrC,CAAiCA,EAAMuC,KAAKG,cAAcL,EAAzBrC,CAAiC,IAAI7U,KAAK,OAASwX,MAAMC,UAAU,CAAExT,IAAK4uE,EAAWplF,IAAKwW,QAAU,OAGpJyT,GAAUm7D,EAAWplF,OAGpBmiE,IAAcjxC,EAAK14B,MAAsB,MAAb2pE,GAAmC,iBAAdjxC,EAAK14B,QAC3D00B,EAAQgE,GAGhB,SAAIhI,GAASgE,GAAS,gBAA2B,gBAApBhE,EAAMC,UAA8B,gBAAQc,EAAQf,EAAMo4C,SAAWr3C,EAAQf,EAAMqS,eAAiB,gBAA2B,gBAApBrO,EAAM/D,UAA8B,iBAASi8D,EAAW7uF,EAAG22B,EAAMo0C,UAAY8jB,EAAW7uF,EAAG22B,EAAMqO,iBACrO66H,EAAiB,eAASnsI,GAASm7D,EAAW7uF,EAAG2yB,EAAOgE,EAAO6K,GAC/DuN,EAAStlC,EAAIo2J,EAAep2J,GAAK+3B,EAAa7K,EAAMsS,KAAKx/B,EAAIkpB,EAAMsW,KAAKx/B,GAExEslC,EAAS/uC,EAAI6/J,EAAe7/J,GAAKwhC,EAAa7O,EAAMsW,KAAKjpC,EAAI22B,EAAMsS,KAAKjpC,IAClE4zB,GAAcA,EAAWsd,qBAAwBtd,EAAWod,cAAgBpd,EAAWigD,UAAU/qE,OAAS,IAK7G,GAGP,OAAOnL,KAAK0iN,0BAA0BtxK,IAU9CixK,EAAen8M,UAAUkrF,kBAAoB,SAAUF,EAAY7+E,EAAO+U,GACtE,IAAI8L,EAAQlzB,KAAKqtC,QACb+D,EAAW,IAAI,OAAc,EAAG,GAChCuxK,EAAoB3iN,KAAKqZ,OAAO63E,EAAY7+E,GAC5CuwM,EAAqB,WACrBD,EAAkBh2M,MAAM+zB,UAAY,yBAExCkiL,EAAmBl3M,KAAK0lC,EAAUpxC,MAC9BA,KAAK,gBAAkBkxF,EAAW2xH,gBAAkB,SAASzxK,GAC7DpxC,KAAK8iN,gBAAgB1xK,EAAUuxK,EAAmBv7L,GAE7CpnB,KAAKqtC,QAAQ9M,QAClB,gBAAcoiL,EAAkBzxM,IAEpC,iBAAsBlR,KAAKqtC,QAAQlkC,QAAQ+H,GAAK,aAAemB,GAAOkO,QAAQ,gBAAiB,IAAK,kBAAmB2S,EAAM+C,WAAa/C,EAAM+C,WAAWk7D,YAAY9+E,GAASrS,KAAKqtC,QAAQ8jD,YAAY9+E,QAAQlB,EAAWyxM,IAQhOP,EAAen8M,UAAUw8M,0BAA4B,SAAUtxK,GAG3D,IAFA,IACInd,EADA03H,EAAe3rJ,KAAKqtC,QAEf55B,EAAK,EAAG7J,EAAK+hJ,EAAa90H,cAAc,GAAG1D,OAAQ1f,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC9E,IAAIsvM,EAAWn5M,EAAG6J,GAClB,GAA0B,kBAAfsvM,EAASj3M,GAChB,GAAIuS,KAAKwX,MAAMktL,EAASj3M,KAAOuS,KAAKwX,MAAM71B,KAAKkxF,WAAWplF,IACtDi3M,EAAS1gN,IAAMrC,KAAKkxF,WAAW7uF,EAAG,CAClC4xB,EAAQ8uL,EACR,YAIJ,GAAIA,EAASj3M,IAAM9L,KAAKkxF,WAAWplF,GAAKi3M,EAAS1gN,IAAMrC,KAAKkxF,WAAW7uF,EAAG,CACtE4xB,EAAQ8uL,EACR,OAIZ,SAAI9uL,IAASA,EAAM3B,WACf8e,EAAStlC,EAAImoB,EAAMiuI,eAAep2J,EAClCslC,EAAS/uC,EAAI4xB,EAAMiuI,eAAe7/J,GAC3B,IAcfggN,EAAen8M,UAAU48M,gBAAkB,SAAU1xK,EAAUjoC,EAASie,GACpE,IAAI47L,EAAc,gBAAmB75M,EAASnJ,KAAKqtC,QAAQ9M,QACvDvF,EAAW,CACX3mB,QAAQ,EAAO/P,KAAM,OAAkBmM,QAAStH,EAChDioC,SAAUA,GAEdpxC,KAAKqtC,QAAQx/B,QAAQ,OAAkBmtB,GAClCA,EAAS3mB,SACV2mB,EAASvqB,QAAQ9D,MAAM7B,KAAO9K,KAAKijN,kBAAkBjjN,KAAKkxF,WAAWs/E,oBAAqBwyC,EAAY53M,MAAO4vB,EAASoW,SAAStlC,GAAK,KACpIkvB,EAASvqB,QAAQ9D,MAAM9B,IAAM7K,KAAKijN,kBAAkBjjN,KAAKkxF,WAAWu/E,kBAAmBuyC,EAAY73M,OAAQ6vB,EAASoW,SAAS/uC,GAAK,KAClI24B,EAASvqB,QAAQF,aAAa,aAAcvQ,KAAKkxF,WAAWhQ,aAAe,cAC3E,eAAclmD,EAASvqB,QAAS2W,EAAepnB,KAAKqtC,QAAQ9M,QAAQ,EAAM,OAAQ,SAW1F8hL,EAAen8M,UAAU+8M,kBAAoB,SAAU96H,EAAW12D,EAAMtT,GACpE,OAAQgqE,GACJ,IAAK,MACL,IAAK,OACDhqE,GAASsT,EACT,MACJ,IAAK,SACL,IAAK,MACDtT,GAAS,EACT,MACJ,IAAK,SACL,IAAK,SACDA,GAAUsT,EAAO,EACjB,MAER,OAAOtT,GAEJkkM,EAjNwB,GCV/B98M,EAAwC,WACxC,IAAIC,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAmBxC,EAAiC,SAAU4C,GAO3C,SAASs6M,EAAgB71K,EAAS8jD,GAC9B,IAAI/nF,EAAQR,EAAOS,KAAKrJ,KAAMqtC,IAAYrtC,KAG1C,OAFAoJ,EAAM8pB,MAAQma,EACdjkC,EAAM+nF,YAAcA,EACb/nF,EAoCX,OA9CA7D,EAAU29M,EAAiBt6M,GAkB3Bs6M,EAAgBh9M,UAAUu/E,kBAAoB,SAAUt8E,GACpD,IAAIC,EAAQpJ,KACZA,KAAKmxF,YAAcnxF,KAAKkzB,MAAMi+D,YAC9BnxF,KAAKonB,cAAgB,gBAAcpnB,KAAKkzB,MAAMqN,OAAQvgC,KAAKkzB,MAAM/pB,QAAQ+H,GAAK,4BAC1E,eAAc,MAAO,CACjBA,GAAIlR,KAAKkzB,MAAM/pB,QAAQ+H,GAAK,4BAEpClR,KAAKmxF,YAAY1kF,KAAI,SAAUykF,EAAY7+E,GACvCjJ,EAAMgoF,kBAAkBF,EAAY7+E,EAAOjJ,EAAMge,kBAErD,eAAcpnB,KAAKonB,cAAeje,EAASnJ,KAAKkzB,MAAMqN,SAQ1D2iL,EAAgBh9M,UAAUgS,QAAU,aAMpCgrM,EAAgBh9M,UAAUsU,cAAgB,WAEtC,MAAO,cAEJ0oM,EA/CyB,CAgDlC,I,sBC/DA,SAAUpjN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI8rC,EAAY,CACRvJ,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH2I,EAAG,KAEP6S,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGTskK,EAAOljN,EAAOE,aAAa,QAAS,CACpCC,OAAQ,6EAA6EC,MACjF,KAEJC,YACI,6EAA6ED,MACzE,KAERE,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,wCAAwCH,MAAM,KAC7DI,YAAa,gBAAgBJ,MAAM,KACnC4wB,oBAAoB,EACpBvwB,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEV4B,cAAe,MACfwC,KAAM,SAAUP,GACZ,MAAO,MAAQA,GAEnB9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,IAEA,KAGf7B,SAAU,CACNC,QAAS,wBACTC,QAAS,sBACTC,SAAU,uBACVC,QAAS,sBACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,OACHC,GAAI,WACJC,EAAG,QACHC,GAAI,WACJC,EAAG,OACHC,GAAI,WACJC,EAAG,MACHC,GAAI,UACJC,EAAG,MACHC,GAAI,UACJC,EAAG,MACHC,GAAI,YAERmqC,SAAU,SAAUJ,GAChB,OAAOA,EACF9rB,QAAQ,iBAAiB,SAAUzb,GAChC,OAAO+5C,EAAU/5C,MAEpByb,QAAQ,KAAM,MAEvBmsB,WAAY,SAAUL,GAClB,OAAOA,EACF9rB,QAAQ,OAAO,SAAUzb,GACtB,OAAOinC,EAAUjnC,MAEpByb,QAAQ,KAAM,MAEvBhe,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO0gN,M,wBC7GT,SAAUrjN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAImjN,EAAKnjN,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,oFAAoFC,MACxF,KAEJC,YAAa,kDAAkDD,MAAM,KACrEE,SAAU,yDAAyDF,MAC/D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,YACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,cACTC,SAAU,cACVC,QAAS,eACTC,SAAU,WACN,OAAQtB,KAAKmwB,OACT,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,yBACX,KAAK,EACL,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,0BAGnB5uB,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,WACNC,EAAG,kBACHC,GAAI,aACJC,EAAG,SACHC,GAAI,YACJC,EAAG,MACHC,GAAI,UACJC,EAAG,MACHC,GAAI,UACJivB,EAAG,UACHC,GAAI,aACJjvB,EAAG,QACHC,GAAI,YACJC,EAAG,SACHC,GAAI,aAERgB,uBAAwB,8BACxBC,QAAS,SAAUI,GACf,IAAIijI,EAAYjjI,EAAS,GACrBguK,EAAchuK,EAAS,IAC3B,OAAe,IAAXA,EACOA,EAAS,MACO,IAAhBguK,EACAhuK,EAAS,MACTguK,EAAc,IAAMA,EAAc,GAClChuK,EAAS,MACK,IAAdijI,EACAjjI,EAAS,MACK,IAAdijI,EACAjjI,EAAS,MACK,IAAdijI,GAAiC,IAAdA,EACnBjjI,EAAS,MAETA,EAAS,OAGxBpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO2gN,M,sBCzFT,SAAUtjN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI8rC,EAAY,CACRvJ,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH2I,EAAG,KAEP6S,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGTwkK,EAAKpjN,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,mDAAmDD,MAAM,KACtEE,SAAU,wDAAwDF,MAC9D,KAEJG,cAAe,2BAA2BH,MAAM,KAChDI,YAAa,2BAA2BJ,MAAM,KAE9CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,sBACTC,SAAU,gBACVC,QAAS,mBACTC,SAAU,6BACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,gBACRC,KAAM,kBACNC,EAAG,kBACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,SACHC,GAAI,SACJC,EAAG,OACHC,GAAI,OACJC,EAAG,UACHC,GAAI,WAERmqC,SAAU,SAAUJ,GAChB,OAAOA,EAAO9rB,QAAQ,iBAAiB,SAAUzb,GAC7C,OAAO+5C,EAAU/5C,OAGzB4nC,WAAY,SAAUL,GAClB,OAAOA,EAAO9rB,QAAQ,OAAO,SAAUzb,GACnC,OAAOinC,EAAUjnC,OAGzBvC,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO4gN,M,kCCnGX,8GAYIC,EAA6B,WAC7B,SAASA,EAAY3tK,EAAgBi6D,EAAUj0E,GAC3C37B,KAAKujN,QAAS,EACdvjN,KAAK4vG,SAAWA,EAChB5vG,KAAK21C,eAAiBA,EACtB31C,KAAK27B,OAASA,EACd37B,KAAKmJ,QAAUnJ,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEuK,MAAO,CAAEC,KAAM,SAmWpE,OArVAyuM,EAAYp9M,UAAUmT,OAAS,SAAUmjB,EAAKc,EAASpQ,EAAYs2L,EAAar2L,GAC5E,OAAOntB,KAAKyjN,WAAWjnL,EAAKc,EAASpQ,EAAYs2L,EAAar2L,IAclEm2L,EAAYp9M,UAAU8U,QAAU,SAAUwhB,EAAKc,EAASomL,EAAWx2L,EAAYs2L,GAC3E,IAAIp6M,EAAQpJ,KACR0jN,IACAlnL,EAAIjE,KAAO,eAAgB,GAAIiE,EAAIk4B,SACnC10D,KAAK2jN,kBAAkBnnL,IAE3B,IAAI+tB,EAAOvqD,KAAK27B,OAAOxyB,QAAQ2I,cAAc,aAAe0qB,EAAI+d,IAAM,KAClE7W,EAAK1jC,KAAKyjN,WAAWjnL,EAAKc,EAASpQ,EAAYs2L,EAAa,KAAME,GAClEl0G,EAAQ,GAAGl8F,MAAMjK,KAAKq6B,EAAG8rE,OACzBo0G,EAAY,GAAGtwM,MAAMjK,KAAKkhD,EAAKpiC,iBAAiB,oBACpD,GAAInoB,KAAK27B,OAAO5tB,SAAW61M,EAAUl9M,OASjC,IARA,IAAIwwC,EAAU,SAAU6a,GACpB,GAAIA,EAAIzhB,SAIJ,OAHAt9B,YAAW,WACP5J,EAAMuyB,OAAO4qE,gCAAgCx0C,EAAIxX,KAAK,KACvD,GACI,SAGN9mC,EAAK,EAAGggD,EAAYn2B,EAAS7pB,EAAKggD,EAAU/sD,OAAQ+M,IAAM,CAC/D,IAAIs+C,EAAM0B,EAAUhgD,GAChBqjI,EAAU5/F,EAAQ6a,GACtB,GAAgB,UAAZ+kF,EACA,MAGZ,IAAIhoH,EAAO,GAAGxb,MAAMjK,KAAKq6B,EAAGxW,YAC5B4B,EAAKriB,KAAI,SAAU2vB,GACfmuB,EAAKh6C,aAAa6rB,EAAK,QAASA,EAAK,aAEzCmuB,EAAK75C,UAAY,GACjB,IAAK,IAAI9G,EAAK,EAAGi6M,EAAUr0G,EAAO5lG,EAAKi6M,EAAQn9M,OAAQkD,IAAM,CACzD,IAAI8lG,EAAOm0G,EAAQj6M,GACnB2gD,EAAK//C,YAAYklG,KAIzB4zG,EAAYp9M,UAAUu9M,WAAa,SAAUjnL,EAAKc,EAASpQ,EAAYs2L,EAAar2L,EAAW69E,GAC3F,IAAItnE,EAAM,eAAkBvW,GAAyBntB,KAAKmJ,QAAQgkB,YAAzBA,EACrC22L,EAAU,CAAEvrL,KAAMiE,EAAIjE,MACtBwrL,EAAW,CAAExrL,KAAMiE,EAAIjE,MACvByrL,EAAgBhkN,KAAK27B,OAAOi0B,aAAax2B,QAAO,SAAU24B,GAAO,MAAoB,aAAbA,EAAI39C,MAAuB29C,EAAI5Z,SAAU,GACjHh6B,GAAQ,EACR6lM,IACA7lM,EAAQ,eAAU6lM,EAAc7rK,MAAO2rK,EAAQvrL,OAEnD,IAAI0rL,EAAWjkN,KAAK27B,OAAOuoL,wBACvB1nL,EAAI2nL,YACJ3nL,EAAIgR,WAAay2K,EAASl6M,QAAQyyB,EAAInqB,QAAU,GAAK8L,GAErDqe,EAAI2nL,WAAankN,KAAK27B,OAAOyoL,qBACG,UAA7BpkN,KAAK27B,OAAO0oL,eAA6BrkN,KAAK27B,OAAOmd,sBAAwB94C,KAAK27B,OAAO+0B,2BAC5Fl0B,EAAIgR,YAAa,GACoB,IAAjCy2K,EAASl6M,QAAQyyB,EAAInqB,QACrB4xM,EAAShyM,KAAKuqB,EAAInqB,QAG1BrS,KAAKskN,sBAAsB5gL,EAAIlH,GAC/B,eAAckH,EAAI,eAAO,GAAIxW,EAAY,KACzC,gBAAsBwW,EAAIlH,EAAItP,YAiE9B,IAhEA,IAAIq3L,EAAmBvkN,KAAK21C,eAAe0yG,WAAW,uBAClDm8D,EAAU,SAAUz9M,EAAG2hB,GACvB,IAAIgnF,EAAOlzE,EAAIgzE,MAAMzqG,SAASgC,EAAEuQ,WAAY,KAC5Co4F,EAAKliE,WAAahR,EAAIgR,WACtBkiE,EAAK+0G,iBAAmB/0G,EAAKnzE,OAAOiR,WACpC,IAAIk3K,EAAeH,EAAiBI,gBAAgBnoL,EAAIgzE,MAAMzqG,SAASgC,EAAEuQ,WAAY,KAAKs4F,UACnF,OAASnhD,MACZ75C,EAAQ,CAAE,MAAU,eAAkB4nB,EAAInqB,OAAgC,GAAvBmqB,EAAInqB,MAAMiF,YAC7DklB,EAAI61I,UAAY71I,EAAIgzE,MAAMzqG,SAASgC,EAAEuQ,WAAY,KAAKs4F,WAAa,OAASg1G,eAC5EhwM,EAAM,SAAWwiC,EAAOzb,OAAO+4I,WAAa,sBAAwB,qBAExE,IAAIo5B,EAAK4W,EAAarrM,OAAOmjB,EAAIgzE,MAAMzqG,SAASgC,EAAEuQ,WAAY,KAAMklB,EAAIjE,KAAM3jB,EAAO4nB,EAAI61I,SAAUrnE,GACnG,GAAIxuE,EAAIgzE,MAAMzqG,SAASgC,EAAEuQ,WAAY,KAAKs4F,WAAa,OAASmgG,OAAQ,CACpE,GAAIvzK,EAAIgzE,MAAMzqG,SAASgC,EAAEuQ,WAAY,KAAKs4F,WAAa,OAASnhD,MACzDjyB,EAAIgzE,MAAMzqG,SAASgC,EAAEuQ,WAAY,KAAKs4F,WAAa,OAASs4C,cAAe,CAC9E,IAAIg2C,EAAe9mJ,EAAOzb,OAAOs2I,eAAiB76H,EAAOzb,OAAOs2I,cAAcksB,eAC1E/mJ,EAAOzb,OAAOs2I,cAAcksB,cAAcpwL,QAC9C,IAAMqpC,EAAOzb,OAAO5tB,SAAWqpC,EAAOzb,OAAOkpL,oBAAwB3mB,GACjE9mJ,EAAOzb,OAAOs2I,cAAcksB,cAAc0mB,qBAAwBn1G,EAAKo1G,WAAY,CAEnF,IAAIC,EAAY3tK,EAChB2tK,EAAUppL,OAAOgsH,iBAAgB,WAC7B,GAAsC,kBAA1Bj4C,EAAKnzE,OAAe,SAAgB,CAC5C,IAAI0yG,EAAW6+D,EAAGx9L,aAAa,cAC/Bw9L,EAAGv9L,aAAa,aAAcu9L,EAAGxtI,UAAY2uE,GAEjD81E,EAAUppL,OAAO9tB,QAAQ,QAAe,eAAOk2M,EAAU,CACrDr0G,KAAMo+F,EAAIvxK,OAAQmzE,EAAKnzE,OAAQ49F,QAAS,EACxCD,QAAS,EAAG7lE,eAAgB73B,EAAIgzE,MAAMzqG,SAASgC,EAAEuQ,WAAY,KAAK+8C,eAClEhe,YAAa0uK,EAAUppL,OAAOqpL,6BAKtC5tK,EAAOzb,OAAO9tB,QAAQ,QAAe,eAAOk2M,EAAU,CAClDr0G,KAAMo+F,EAAIvxK,OAAQmzE,EAAKnzE,OAAQ49F,QAAS,EACxCD,QAAS,EAAG7lE,eAAgB73B,EAAIgzE,MAAMzqG,SAASgC,EAAEuQ,WAAY,KAAK+8C,eAClEhe,YAAae,EAAOzb,OAAOqpL,qBAGnC,IAAIC,GAAe,EACnB,GAAIzoL,EAAInqB,MAAQ,GAAK+kC,EAAOmsK,OAAQ,CAChC,IAAI2B,EAAa9tK,EAAOzb,OAAOwpL,gBAC3BC,EAAehuK,EAAOzb,OAAOqd,cAAc1b,QAAQ52B,OAAS,IAC3Dw+M,EAAW1oL,EAAInqB,MAAQ,GAAG8xM,UAAYe,EAAW1oL,EAAInqB,OAAOm9F,MAAQ01G,EAAW1oL,EAAInqB,MAAQ,GAAGm9F,MAC/F61G,EAAQ,MACRC,EAAcF,EAAahsL,QAAO,SAAUs2E,GAC5C,OAAOA,EAAKnzE,OAAOge,MAAQ/d,EAAIgzE,MAAMzqG,SAASgC,EAAEuQ,WAAY,KAAKilB,OAAO,GAAK8oL,MAC9E,GACHJ,EAAeK,EAAYL,aAAeK,EAAYL,aAAeK,EAAYC,aAAe,EAEpG,GAAIxB,EAAS5pF,QAAU,GAAK39F,EAAIgzE,MAAMzqG,SAASgC,EAAEuQ,WAAY,KAAKkuM,SAAW,GAAKzB,EAAS7pF,QAAU,GAC9F+qF,EAAc,CACjB7tK,EAAOmsK,QAAS,EAChB,IAAIkC,EAAY,IAAI,OAAgBruK,EAAOzB,eAAgByB,EAAOzb,QAClEmyK,EAAK2X,EAAUpsM,OAAO0qM,EAAUvnL,EAAKz1B,EAAG+mM,IAG3CtxK,EAAIgzE,MAAMzqG,SAASgC,EAAEuQ,WAAY,KAAKouM,WACvChiL,EAAGl5B,YAAYsjM,KAIvB12J,EAASp3C,KACJ+G,EAAI,EAAG2hB,EAAM8T,EAAIgzE,MAAM9oG,OAAQK,EAAI2hB,EAAK3hB,IAC7Cy9M,EAAQz9M,EAAG2hB,GAEf,IAAIi9L,EAAe,EACnB,GAAI3lN,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,QAAU1G,KAAK27B,OAAOiqL,4BAA6B,CACrF,GAAIliL,EAAG14B,UAAUkB,SAAS,qBAAsB,CAC5C,IAAI25M,EAAc,GAAGvyM,MAAMjK,KAAKq6B,EAAGvb,iBAAiB,qGAIpD,GAHI09L,EAAYn/M,QACZ,gBAAYm/M,EAAa,CAAC,eAAgB,aAAc,gBAAiB,gBAAiB,sBAAuB,uBAEjHniL,EAAG5xB,cAAc,kBACjB,eAA4B4xB,EAAI1jC,KAAK27B,YAEpC,CACD,IAAK,IAAI8C,EAAI,EAAGA,EAAIiF,EAAG+G,WAAW/jC,OAAQ+3B,IAAK,CAC3C,IAAIqvK,EAAKpqK,EAAG+G,WAAW1lC,SAAS05B,EAAEnnB,WAAY,KAG9C,GAFAw2L,EAAG9iM,UAAU0G,IAAI,gBACjB,eAA6Bo8L,EAAQ,GAAJrvK,EAAQz+B,KAAK27B,OAAOpwB,UAAW,QAC5DuiM,EAAG9iM,UAAUkB,SAAS,kBAAmB,CACzC,IAAI45M,EAAa/gN,SAAS+oM,EAAGx9L,aAAa,WAAY,IAClDy1M,EAAU,gBAAyB/lN,KAAK27B,OAAQ8C,GACpDqvK,EAAGv9L,aAAa,UAAWw1M,EAAQzuM,YACnCquM,EAAeG,EAAaC,GAGpC,GAAIJ,EAAc,CACV7X,EAAK9tM,KAAK27B,OAAOtxB,cAAc,KAAM,CACrCC,UAAW,iBACXsK,MAAO,CAAEmxM,QAASJ,EAAaruM,WAAYpG,GAAIlR,KAAK27B,OAAOxyB,QAAQ+H,GAAK,cAAeo2I,SAAU,QAErG5jH,EAAGl5B,YAAYsjM,KAI3B,GAAIpqK,EAAGvb,iBAAiB,iBAAiBzhB,SACpCg9B,EAAGvb,iBAAiB,iBAAiBzhB,QAAUg9B,EAAGvb,iBAAiB,uBAAuBzhB,QAE3F,IADIonM,EAAKpqK,EAAGvb,iBAAiB,sCACpBphB,EAAI,EAAGA,EAAI+mM,EAAGpnM,OAAQK,IAC3B+mM,EAAG/oM,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAU0G,IAAI,gBAC7C,eAA6Bo8L,EAAG/oM,SAASgC,EAAEuQ,WAAY,KAAU,GAAJvQ,EAAQ/G,KAAK27B,OAAOpwB,UAAW,QAIxG,IAAIigB,EAAO,CAAEgR,IAAKkH,EAAIsiL,UAAWhmN,KAAK27B,OAAOqqL,WAC7C,GAAIxpL,EAAI2nL,UAAW,CACf,IAAI8B,EAAa,eAAOnC,EAASt4L,GACjCy6L,EAAWC,cAAe,EAC1B,IAAIhoB,EAAel+L,KAAK27B,OAAOs2I,eAAiBjyK,KAAK27B,OAAOs2I,cAAcksB,eACtEn+L,KAAK27B,OAAOs2I,cAAcksB,cAAcpwL,QACxCo4M,EAAeF,EAAWzpL,IAAIrU,iBAAiB,mBACnD,IAAMnoB,KAAK27B,OAAO5tB,SAAW/N,KAAK27B,OAAOkpL,oBAAwB3mB,GAC7Dl+L,KAAK27B,OAAOs2I,cAAcksB,cAAc0mB,qBAAwBsB,EAAaz/M,OAAQ,CAErF,IAAI0/M,EAAYpmN,KAChBomN,EAAUzqL,OAAOgsH,iBAAgB,WAC7By+D,EAAUzqL,OAAO9tB,QAAQ,QAAco4M,GAClCA,EAAWC,eACZ1pL,EAAI0pL,aAAeD,EAAWC,aAC9BE,EAAUC,oBAAoBD,EAAW5pL,EAAKhR,EAAMy6L,YAK5DjmN,KAAK27B,OAAO9tB,QAAQ,QAAco4M,GAEtCzpL,EAAI0pL,aAAeD,EAAWC,aAC9B,IAAII,EAActmN,KAAK27B,OAAOyyE,gBAC9B,GAAIpuG,KAAK27B,OAAOkd,aAAe74C,KAAK27B,OAAO4qL,kBAAkBC,iBAAkB,CAC3E,IAAIC,EAAezmN,KAAK27B,OAAO24B,0BAA0B,GACrDoyJ,EAASlqL,EAAIjE,KAAOiE,EAAIjE,KAAK,GAAKkuL,GAAgB,KAClDE,EAAkBV,EAAWC,aAAelmN,KAAK27B,OAAOirL,uBACxD5mN,KAAK27B,OAAOkrL,uBACXF,EAAgB9zJ,MAAK,SAAUt6B,GAAQ,OAAOA,EAAK,GAAKkuL,KAAkBC,MAC3EC,EAAgB10M,KAAKuqB,EAAIjE,MAMjC,GAHK0tL,EAAWC,cACZlmN,KAAKqmN,oBAAoBrmN,KAAMw8B,EAAKhR,EAAMy6L,GAE1CjmN,KAAK27B,OAAOwyE,WAAam4G,GAAetmN,KAAK27B,OAAOuyE,eAAgB,CAChE4/F,EAAKpqK,EAAGvb,iBAAiB,2BAA2B,GACpD2lL,GACAA,EAAG9iM,UAAU0G,IAAI,uBAIzB1R,KAAK27B,OAAOmd,uBACZgrK,EAAQkC,UAAYhmN,KAAK27B,OAAOqqL,WAEhClC,EAAQkC,UACRtiL,EAAG/2B,MAAMxB,OAAS24M,EAAQkC,UAAY,KAEjChmN,KAAK27B,OAAOqqL,YAActiL,EAAG5xB,cAAc,kBAAoB4xB,EAAG5xB,cAAc,sBACrF4xB,EAAG/2B,MAAMxB,OAASnL,KAAK27B,OAAOqqL,UAAY,MAE1CxpL,EAAInsB,UACJqzB,EAAG14B,UAAU0G,IAAI8qB,EAAInsB,UAErBmsB,EAAIsqL,kBACJpjL,EAAG14B,UAAU0G,IAAI8qB,EAAIsqL,kBAEY,aAAjC9mN,KAAK27B,OAAOorL,mBAAmC/mN,KAAK27B,OAAOqrL,eAA4D,WAA1ChnN,KAAK27B,OAAOsrL,iBAAiBC,UAC7D,SAA1ClnN,KAAK27B,OAAOsrL,iBAAiBC,UAChCxjL,EAAG14B,UAAU0G,IAAI,kBAErB,IAAIy1M,EAAUnnN,KAAK27B,OAAO8sE,2BAC1B,IAAK0+G,GAAWnnN,KAAK27B,OAAOy0B,WAAW1pD,QAAU1G,KAAK27B,OAAOxyB,QAAQ6iG,aAAehsG,KAAK27B,OAAOxwB,OAC5F,IAASpE,EAAI,EAAGA,EAAI/G,KAAK27B,OAAOy0B,WAAW1pD,OAAQK,IAAK,CACpD,IAAIgyF,EAAW,aACXx8D,EAAS,UACb,GAAIv8B,KAAK27B,OAAOy0B,WAAWrrD,SAASgC,EAAEuQ,WAAY,KAAK,GAAKyhF,GAAU,GAAKx8D,GAAQ,GAAGuxE,eAAgB,CAClG,IAAIs5G,EAAc,GAAG9zM,MAAMjK,KAAKq6B,EAAG7lB,uBAAuB,kBAC1D,GAAIupM,EAAY1gN,OAAQ,CACpB,IAAI2gN,EAAmBD,EAAYA,EAAY1gN,OAAS,GACxD,eAAS,CAAC2gN,GAAkB,CAAC,sBAC7B,IAAIC,EAAoBF,EAAY,GACpC,eAAS,CAACE,GAAmB,CAAC,yBAK9C,OAAO5jL,GAEX4/K,EAAYp9M,UAAUmgN,oBAAsB,SAAUkB,EAAS/qL,EAAKhR,EAAMg8L,GACtE,IAAIvD,EAAWjkN,KAAK27B,OAAOuoL,wBAC3BlkN,KAAK27B,OAAO2gD,gBAAgBmrI,oBAAqB,EACjDjrL,EAAIgR,YAAa,EACjB,IAAIk6K,EAAczD,EAASl6M,QAAQyyB,EAAInqB,OACnCq1M,GAAe,GACfzD,EAAS3xM,OAAOo1M,EAAa,GAKjC,IAHA,IAAIC,EAASn8L,EAAKgR,IAAIrU,iBAAiB,2BACnCy/L,EAASJ,EAAShrL,IAAI1qB,cAAc,kBACpC+1M,EAAUN,EAAQ5rL,OAAOqd,cAAc1b,QAAQ52B,QAAUkhN,GAAUL,EAAQ5rL,OAAOmsL,WAAa,EAAI,GAC9F/gN,EAAI,EAAGA,EAAI4gN,EAAOjhN,OAAQK,IAC/B4gN,EAAO5iN,SAASgC,EAAEuQ,WAAY,KAAK4P,kBAAkBlc,UAAU0G,IAAI,uBACnEi2M,EAAO5iN,SAASgC,EAAEuQ,WAAY,KAAKxF,cAAc,YAAY9G,UAAUC,OAAO,WAElF,GAAIuxB,EAAIgzE,MAAM9oG,OACV,IAASK,EAAI8gN,EAAS9gN,EAAIy1B,EAAIgzE,MAAM9oG,OAAQK,IAAK,CAC7C,IAAI2oG,EAAO83G,EAAShrL,IAAI1qB,cAAc,6BAA+B0qB,EAAIgzE,MAAMzqG,SAASgC,EAAEuQ,WAAY,KAAKjF,MAAQ,MAC/Gq9F,GACA,gBAAY,CAACA,GAAO,CAAC,wBAAyB,aAItDk4G,GACA,gBAAY,CAACA,GAAS,CAAC,wBAAyB,cAIxDtE,EAAYp9M,UAAUy9M,kBAAoB,SAAUnnL,GAChD,IAAK,IAAI/oB,EAAK,EAAG7J,EAAK4yB,EAAIgzE,MAAO/7F,EAAK7J,EAAGlD,OAAQ+M,IAAM,CACnD,IAAIi8F,EAAO9lG,EAAG6J,GACdi8F,EAAKg2G,WAAY,EAErB,OAAOlpL,GAWX8mL,EAAYp9M,UAAUo+M,sBAAwB,SAAU5gL,EAAIlH,GACxD,IAAI1N,EAAO,GACP/T,EAAO,CAAE,SAAY,OAAuB,QAAW,WAAY,aAAgB,iBACnFgtM,EAAU,GACVvrL,EAAI2nL,WACJ4D,EAAQ91M,KAAK,QAEbuqB,EAAIwrL,UACJD,EAAQ91M,KAAK,YAEbuqB,EAAIyrL,cACJF,EAAQ91M,KAAK,qBAEbuqB,EAAIizE,gBAAkBjzE,EAAIiyE,WAC1Bs5G,EAAQ91M,KAAK,oBAEZ,eAAkBuqB,EAAInqB,SACvByc,EAAK,QAAyB0N,EAAInqB,MAAQ,EAC1Cyc,EAAK/T,EAAKmtM,UAAY1rL,EAAInqB,OAE1BmqB,EAAI09F,UACJprG,EAAKorG,QAAU19F,EAAI09F,SAEnB19F,EAAI+d,MACJzrB,EAAK/T,EAAKotM,SAAW3rL,EAAI+d,KAEzB/d,EAAIgR,aACJ1e,EAAK/T,EAAKqtM,eAAgB,IAEV,IAAhB5rL,EAAIlK,SACJy1L,EAAQ91M,KAAK,UAEjB6c,EAAKygF,MAAQw4G,EACb,gBAAsBrkL,EAAI5U,IAEvBw0L,EAzWqB,I,sBCR9B,SAAUxjN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIooN,EAAKpoN,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,yFAAyFC,MAC7F,KAEJC,YACI,8DAA8DD,MAC1D,KAERsC,kBAAkB,EAClBpC,SAAU,mDAAmDF,MAAM,KACnEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C4wB,oBAAoB,EACpBvwB,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,UAA6B,IAAjBlB,KAAKkxB,QAAgB,KAAO,KAAO,QAE1D/vB,QAAS,WACL,MAAO,UAA6B,IAAjBnB,KAAKkxB,QAAgB,KAAO,KAAO,QAE1D9vB,SAAU,WACN,MAAO,UAA6B,IAAjBpB,KAAKkxB,QAAgB,KAAO,KAAO,QAE1D7vB,QAAS,WACL,MAAO,UAA6B,IAAjBrB,KAAKkxB,QAAgB,IAAM,KAAO,QAEzD5vB,SAAU,WACN,MACI,qBAAwC,IAAjBtB,KAAKkxB,QAAgB,KAAO,KAAO,QAGlE3vB,SAAU,KAEdC,aAAc,CACVC,OAAQ,SAAU8qC,GACd,OAA0B,IAAtBA,EAAIxiC,QAAQ,MACL,IAAMwiC,EAEV,MAAQA,GAEnB7qC,KAAM,SACNC,EAAG,eACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,YACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJC,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERgB,uBAAwB,WACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO4lN,M,wBC/ET,SAAUvoN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIuwB,EACI,8DAA8DnwB,MAC1D,KAERC,EAAc,kDAAkDD,MAAM,KACtEowB,EAAc,CACV,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAEJC,EACI,mLAEJ43L,EAAKroN,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,2FAA2FC,MAC/F,KAEJC,YAAa,SAAUuB,EAAGmgB,GACtB,OAAKngB,EAEM,QAAQqhB,KAAKlB,GACb1hB,EAAYuB,EAAEuuB,SAEdI,EAAe3uB,EAAEuuB,SAJjBI,GAOfE,YAAaA,EACbE,iBAAkBF,EAClBG,kBACI,+FACJC,uBACI,0FACJL,YAAaA,EACbM,gBAAiBN,EACjBO,iBAAkBP,EAClBlwB,SAAU,uDAAuDF,MAAM,KACvEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C4wB,oBAAoB,EACpBvwB,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,wBACJC,IAAK,6BACLC,KAAM,oCAEVC,SAAU,CACNC,QAAS,WACL,MAAO,aAAgC,IAAjBlB,KAAKkxB,QAAgB,IAAM,IAAM,QAE3D/vB,QAAS,WACL,MAAO,gBAAmC,IAAjBnB,KAAKkxB,QAAgB,IAAM,IAAM,QAE9D9vB,SAAU,WACN,MAAO,cAAiC,IAAjBpB,KAAKkxB,QAAgB,IAAM,IAAM,QAE5D7vB,QAAS,WACL,MAAO,cAAiC,IAAjBrB,KAAKkxB,QAAgB,IAAM,IAAM,QAE5D5vB,SAAU,WACN,MACI,0BACkB,IAAjBtB,KAAKkxB,QAAgB,IAAM,IAC5B,QAGR3vB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,gBACHC,GAAI,cACJC,EAAG,YACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,UACJivB,EAAG,aACHC,GAAI,aACJjvB,EAAG,SACHC,GAAI,WACJC,EAAG,SACHC,GAAI,WAERgB,uBAAwB,WACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,GAET8lN,YAAa,mBAGjB,OAAOD,M,oCCtHX,8DAAI/iN,EAAwC,WACxC,IAAIC,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAoBxCwiN,EAA8B,SAAU5/M,GAExC,SAAS4/M,IACL,OAAkB,OAAX5/M,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KA8D/D,OAhEAuF,EAAUijN,EAAc5/M,GAIxB4/M,EAAatiN,UAAUmT,OAAS,SAAU4Z,GAItC,IAHA,IAEI+H,EAFAkQ,EAAiBlrC,KAAKmrC,kBAAkBlY,GACxC2mF,EAAS7qG,KAAKgQ,IAAIkU,EAAO+F,MAAMqO,aAAanlB,IAAK,GAE5CzO,EAAK,EAAG7J,EAAKqpB,EAAOE,OAAQ1f,EAAK7J,EAAGlD,OAAQ+M,IAAM,CACvD,IAAIg1M,EAAc7+M,EAAG6J,GAGrB,GAFAg1M,EAAYz2L,gBAAkB,GAC9By2L,EAAYx2L,QAAU,GAClBw2L,EAAYn2L,SAAW,gBAAYW,EAAOE,OAAOs1L,EAAYp2M,MAAQ,GAAIo2M,EAAax1L,EAAOE,OAAOs1L,EAAYp2M,MAAQ,GAAI4gB,GAAS,CACrIjzB,KAAKsrC,KAAOtrC,KAAKurC,aAAak9K,EAAY1yL,OAASmV,EAAevjB,MAAO8gM,EAAY1xL,OAAQ0xL,EAAY1yL,OAASmV,EAAetjB,IAAKgyF,EAAQ3mF,GAC9IjzB,KAAKsrC,KAAKlgC,MAAQ6nB,EAAOuY,mBAAsBvY,EAAOuY,oBAAsBvY,EAAOC,MAAMgwI,0BAA4BjwI,EAAOuY,mBAAqBvY,EAAOowI,cAAgB,GAAMrjK,KAAKsrC,KAAKlgC,MACxLpL,KAAKsrC,KAAKx/B,EAAImnB,EAAOuY,mBAAqBxrC,KAAKsrC,KAAKx/B,GAAOmnB,EAAOuY,mBAAqB,EAAKvY,EAAOwY,UAC9FxY,EAAOuY,mBAAqBvY,EAAO5gB,OAAUrS,KAAKsrC,KAAKx/B,EAC5D,IAAIwlB,EAA4B,cAApB2B,EAAOsB,SAA2Bk0L,EAAYn3L,MAAQ2B,EAAO6D,SAEzE,GADAkE,EAAWh7B,KAAK2sB,aAAasG,EAAQw1L,EAAan3L,EAAO,CAAElmB,MAAO6nB,EAAO8M,OAAO30B,MAAOkmB,MAAO2B,EAAO8M,OAAOzO,SACvG0J,EAAS3mB,SACVrU,KAAK2rC,qBAAqB88K,EAAazoN,KAAKsrC,KAAMrY,GAClDjzB,KAAK0rC,cAAczY,EAAQw1L,EAAazoN,KAAKsrC,KAAMtQ,GACxB,aAAvB/H,EAAO2Y,aAA4B,CACnC,IAAIC,EAAuB,CACvB,UAAY,EACZ,UAAY,EACZ,cAAgB,GAEpB7rC,KAAK8rC,aAAa9rC,KAAKkJ,QAASlJ,KAAKmJ,QAAS0iC,EAAsB7rC,KAAKsrC,KAAMrY,KAK/FjzB,KAAK0kC,aAAazR,IAQtBu1L,EAAatiN,UAAUq7B,YAAc,SAAUtO,GAC3CjzB,KAAKmpC,QAAQlW,IAKjBu1L,EAAatiN,UAAUsU,cAAgB,WACnC,MAAO,gBAWXguM,EAAatiN,UAAUgS,QAAU,aAK1BswM,EAjEsB,CAkE/B,S,oCCtFF,8GAYIE,EAAmC,WAMnC,SAASA,EAAkB/sL,GACvB37B,KAAK27B,OAASA,EA+GlB,OA7GA+sL,EAAkBxiN,UAAUmoG,aAAe,SAAU91E,EAAM/M,GACvD,IAAIgS,EAAO,GACPgN,EAAaxqC,KAAK27B,OAAOmd,sBAAwBttB,EAAOA,EAAKgf,WAAa,EAC9EA,EAAaxqC,KAAK27B,OAAO+0B,yBAA2BllC,EAAOxrB,KAAK2oN,iBAAiBn9L,GAAQgf,EACrFxqC,KAAK27B,OAAOitL,qBAAuBp9L,GAAQA,EAAKgf,aAChDA,EAAahf,EAAKgf,YAEtB,IAAK,IAAIzjC,EAAI,EAAG2hB,EAAMhjB,OAAOoV,KAAKyd,GAAM7xB,OAAQK,EAAI2hB,EAAK3hB,IAAKyjC,IAC1DhN,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAOtX,KAAK0xM,YAAYn5K,EAAKxzB,SAASgC,EAAEuQ,WAAY,KAAMkzB,GAE1F,OAAOhN,GAEXkrL,EAAkBxiN,UAAU2iN,cAAgB,WAExC,IAAIx4J,EAAO,GACX,GAAIrwD,KAAK27B,OAAOuyE,gBAAkBluG,KAAK27B,OAAOwyE,UAAW,CACrD,IAAI3iF,EAAO,GACXxrB,KAAK27B,OAAOrc,OAAO,QAA6BkM,GAChD6kC,EAAKp+C,KAAKjS,KAAK2yK,aAAannJ,EAAM,KAAM,OAASo5L,eAKrD,OAHI5kN,KAAK27B,OAAOyyE,iBACZ/9C,EAAKp+C,KAAKjS,KAAK2yK,aAAa,GAAI,KAAM,OAASm2C,cAE5Cz4J,GAEXq4J,EAAkBxiN,UAAUwrM,YAAc,SAAUn5K,EAAMlmB,EAAOhC,EAAUw/F,EAAQk5G,EAAKC,EAAQv6G,GAC5F,IAAIvlG,EAAU,CACd,eAAyB,IACzBA,EAAQqxC,IAAM,eAAO,YACrBrxC,EAAQqvB,KAAOA,EACfrvB,EAAQmJ,MAAQA,EAChBnJ,EAAQ2mG,OAASA,EACjB3mG,EAAQ8/M,OAASA,EACjB9/M,EAAQi7M,WAAY,EACpBj7M,EAAQ+/M,UAAYF,EACpB7/M,EAAQulG,UAAYA,EAChBzuG,KAAK27B,OAAO+4I,aAC2B,QAAnC10K,KAAK27B,OAAO22I,mBACZppK,EAAQmpK,UAAW,EAEqB,aAAnCryK,KAAK27B,OAAO22I,oBAAqCtyK,KAAK27B,OAAO42I,cAAgBvyK,KAAK27B,OAAO42I,aAAaxtK,SAASsN,EAAMiF,WAAY,OACtIpO,EAAQmpK,SAAWryK,KAAK27B,OAAO42I,aAAaxtK,SAASsN,EAAMiF,WAAY,KAAK+6J,WAGpFnpK,EAAQmH,SAAWA,EACnBnH,EAAQ8+M,WAAWhoN,KAAK27B,OAAOutL,cAAe72M,EAAQ,IAAM,EAC5DnJ,EAAQ8+M,WAAWhoN,KAAK27B,OAAOutL,cAAe72M,EAAQ,IAAM,EAC5DnJ,EAAQskC,WAAaxtC,KAAK27B,OAAOuoL,wBAAwBn6M,QAAQsI,IAAU,EAC3ErS,KAAKmpN,qBAAqBjgN,GAC1B,IAAIsmG,EAAQxvG,KAAK6oN,gBACbrsL,EAAM,IAAI,OAAItzB,EAASlJ,KAAK27B,QAGhC,OAFAa,EAAIgzE,MAAwC,UAAhCxvG,KAAK27B,OAAO+2K,gBAA8B1yM,KAAKwyK,cAActpK,GAASo7B,OAAOkrE,GACnFA,EAAMlrE,OAAOtkC,KAAKwyK,cAActpK,IAC/BszB,GAEXksL,EAAkBxiN,UAAUijN,qBAAuB,SAAUjgN,GAEzD,IADA,IAAIkgN,EAAoBppN,KAAK27B,OAAOqb,uBAC3BjwC,EAAI,EAAGA,EAAIqiN,EAAkB1iN,OAAQK,IAC1C,gBAASqiN,EAAkBrkN,SAASgC,EAAEuQ,WAAY,KAAK6gC,MAAO,eAAeixK,EAAkBrkN,SAASgC,EAAEuQ,WAAY,KAAMpO,EAAQqvB,MAAOrvB,EAAQmrD,iBAG3Jq0J,EAAkBxiN,UAAUssK,cAAgB,SAAUtpK,GAGlD,IAFA,IAAImgN,EAAUrpN,KAAK27B,OAAOi0B,aACtBg/C,EAAM,GACD7nG,EAAI,EAAGA,EAAIsiN,EAAQ3iN,OAAQK,IAChC6nG,EAAI38F,KAAKjS,KAAK2yK,aAAa02C,EAAQtkN,SAASgC,EAAEuQ,WAAY,KAAMpO,EAAQqxC,IAAK,eAAkB8uK,EAAQtkN,SAASgC,EAAEuQ,WAAY,KAAK+tF,eAAYl0F,EAAY,OAAS+2I,cAAe,KAAMnhJ,EAAGmC,EAAQmrD,iBAExM,OAAOu6C,GAaX85G,EAAkBxiN,UAAUysK,aAAe,SAAUp2I,EAAQw8F,EAAOnpB,EAAUuqB,EAASmvF,EAAQj1J,GAC3F,IAAI27C,EAAM,CACN,QAAWzzE,EAAOjK,QAClB,YAAe,eAAkBiK,EAAO4b,OAAS5b,EAAO+T,UACxD,YAAe,eAAkB/T,EAAO+T,UACxC,MAASyoF,EACT,OAAUx8F,EACV,SAAa,eAAkBqzE,GAAuB,OAASnhD,KAApBmhD,EAC3C,QAAWuqB,EACX,SAAY59F,EAAO8oE,SACnB,aAAgB9oE,EAAO61B,iBAAmB71B,EAAO61B,kBACjD,eAAkB71B,EAAO61B,iBAAmB71B,EAAO61B,mBAAqB,eAAS71B,EAAO4b,MAAOkc,IAKnG,OAHI27C,EAAIL,YAAkC,aAApBK,EAAIzzE,OAAOnoB,MAAuB47F,EAAI3K,YACxD2K,EAAI39F,MAAQi3M,GAET,IAAI,OAAKt5G,IAEpB04G,EAAkBxiN,UAAUqjN,YAAc,SAAU1kN,GAChD,IAAK,IAAIkC,EAAI,EAAGA,EAAIlC,EAAM6B,OAAQK,IAC9B/G,KAAKmpN,qBAAqBtkN,EAAME,SAASgC,EAAEuQ,WAAY,MACvDzS,EAAME,SAASgC,EAAEuQ,WAAY,KAAKk4F,MAAQxvG,KAAKwyK,cAAc3tK,EAAME,SAASgC,EAAEuQ,WAAY,MAE9F,OAAOzS,GAEX6jN,EAAkBxiN,UAAUyiN,iBAAmB,SAAUn9L,GACrD,MAA4B,mBAArBA,EAAK6qB,aAAyD,WAArB7qB,EAAK6qB,aAA4C,QAAhB7qB,EAAKpF,OAC/E,eAAkBoF,EAAKgf,YAAchf,EAAK,SAAWA,EAAKgf,WAAc,GAE5Ek+K,EAtH2B,I,wBCRpC,SAAU5oN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASupN,EAAW3kN,GAChB,MACyB,qBAAb4kN,UAA4B5kN,aAAiB4kN,UACX,sBAA1C/jN,OAAOQ,UAAUoR,SAASjO,KAAKxE,GAIvC,IAAImlI,EAAK/pI,EAAOE,aAAa,KAAM,CAC/BupN,mBACI,qHAAqHrpN,MACjH,KAERspN,iBACI,qHAAqHtpN,MACjH,KAERD,OAAQ,SAAUwpN,EAAgB5nM,GAC9B,OAAK4nM,EAGiB,kBAAX5nM,GACP,IAAIkB,KAAKlB,EAAOq5G,UAAU,EAAGr5G,EAAOjY,QAAQ,UAGrC/J,KAAK6pN,kBAAkBD,EAAex5L,SAEtCpwB,KAAK8pN,oBAAoBF,EAAex5L,SARxCpwB,KAAK8pN,qBAWpBxpN,YAAa,oDAAoDD,MAAM,KACvEE,SAAU,yDAAyDF,MAC/D,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C0C,SAAU,SAAUmuB,EAAOyS,EAAS1gC,GAChC,OAAIiuB,EAAQ,GACDjuB,EAAU,KAAO,KAEjBA,EAAU,KAAO,MAGhCmC,KAAM,SAAUP,GACZ,MAAyC,OAAjCA,EAAQ,IAAIyiB,cAAc,IAEtC1kB,cAAe,gBACflC,eAAgB,CACZC,GAAI,SACJC,IAAK,YACLC,EAAG,aACHC,GAAI,cACJC,IAAK,qBACLC,KAAM,4BAEV+oN,WAAY,CACR7oN,QAAS,iBACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,WACN,OAAQtB,KAAKmwB,OACT,KAAK,EACD,MAAO,gCACX,QACI,MAAO,mCAGnB5uB,SAAU,KAEdN,SAAU,SAAU4C,EAAKmmN,GACrB,IAAI7mN,EAASnD,KAAKiqN,YAAYpmN,GAC1BqtB,EAAQ84L,GAAOA,EAAI94L,QAIvB,OAHIs4L,EAAWrmN,KACXA,EAASA,EAAO0F,MAAMmhN,IAEnB7mN,EAAOod,QAAQ,KAAM2Q,EAAQ,KAAO,EAAI,MAAQ,SAE3D1vB,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,oBACHC,GAAI,kBACJC,EAAG,YACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,WACHC,GAAI,WACJC,EAAG,aACHC,GAAI,WACJC,EAAG,cACHC,GAAI,aAERgB,uBAAwB,WACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOunI,M,wBC9GT,SAAUlqI,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIiqN,EACI,mGAAmG7pN,MAC/F,KAER8pN,EACI,qGAAqG9pN,MACjG,KAERowB,EAAc,CACV,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,QACA,SAER,SAASjtB,EAAOC,GACZ,OAAOA,EAAI,GAAK,GAAKA,EAAI,GAAK,MAAQA,EAAI,IAAM,KAAO,EAE3D,SAASC,EAAUC,EAAQC,EAAeC,GACtC,IAAIE,EAASJ,EAAS,IACtB,OAAQE,GACJ,IAAK,KACD,OAAOE,GAAUP,EAAOG,GAAU,UAAY,UAClD,IAAK,IACD,OAAOC,EAAgB,SAAW,SACtC,IAAK,KACD,OAAOG,GAAUP,EAAOG,GAAU,SAAW,SACjD,IAAK,IACD,OAAOC,EAAgB,UAAY,UACvC,IAAK,KACD,OAAOG,GAAUP,EAAOG,GAAU,UAAY,UAClD,IAAK,KACD,OAAOI,GAAUP,EAAOG,GAAU,WAAa,WACnD,IAAK,KACD,OAAOI,GAAUP,EAAOG,GAAU,WAAa,YACnD,IAAK,KACD,OAAOI,GAAUP,EAAOG,GAAU,OAAS,QAIvD,IAAIymN,EAAKnqN,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,SAAUwpN,EAAgB5nM,GAC9B,OAAK4nM,EAEM,SAAS1mM,KAAKlB,GACdmoM,EAAiBP,EAAex5L,SAEhC85L,EAAiBN,EAAex5L,SAJhC85L,GAOf5pN,YAAa,kDAAkDD,MAAM,KACrEowB,YAAaA,EACbM,gBAAiBN,EACjBO,iBAAkBP,EAClBlwB,SACI,6DAA6DF,MAAM,KACvEG,cAAe,2BAA2BH,MAAM,KAChDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,eACTC,SAAU,WACN,OAAQpB,KAAKmwB,OACT,KAAK,EACD,MAAO,qBAEX,KAAK,EACD,MAAO,mBAEX,KAAK,EACD,MAAO,iBAEX,KAAK,EACD,MAAO,kBAEX,QACI,MAAO,oBAGnB9uB,QAAS,iBACTC,SAAU,WACN,OAAQtB,KAAKmwB,OACT,KAAK,EACD,MAAO,4BACX,KAAK,EACD,MAAO,wBACX,KAAK,EACD,MAAO,yBACX,QACI,MAAO,2BAGnB5uB,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,UACNC,EAAG,eACHC,GAAI8B,EACJ7B,EAAG6B,EACH5B,GAAI4B,EACJ3B,EAAG2B,EACH1B,GAAI0B,EACJzB,EAAG,UACHC,GAAI,SACJivB,EAAG,UACHC,GAAI1tB,EACJvB,EAAG,UACHC,GAAIsB,EACJrB,EAAG,MACHC,GAAIoB,GAERJ,uBAAwB,YACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO2nN,M,wBChJT,SAAUtqN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI8rC,EAAY,CACRvJ,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH2I,EAAG,KAEP6S,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGTwrK,EAAKpqN,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,wEAAwEC,MAC5E,KAEJC,YACI,wEAAwED,MACpE,KAERE,SACI,qDAAoEF,MAChE,KAERG,cACI,qDAAoEH,MAChE,KAERI,YAAa,gBAAgBJ,MAAM,KACnC4wB,oBAAoB,EACpBvwB,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEV4B,cAAe,wBACfwC,KAAM,SAAUP,GACZ,MAAO,aAAaqe,KAAKre,IAE7B9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,aAEA,cAGf7B,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTC,SAAU,iBACVC,QAAS,kBACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,QACRC,KAAM,SACNC,EAAG,YACHC,GAAI,WACJC,EAAG,WACHC,GAAI,WACJC,EAAG,UACHC,GAAI,UACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,UAERmqC,SAAU,SAAUJ,GAChB,OAAOA,EACF9rB,QAAQ,UAAU,SAAUzb,GACzB,OAAO+5C,EAAU/5C,MAEpByb,QAAQ,KAAM,MAEvBmsB,WAAY,SAAUL,GAClB,OAAOA,EACF9rB,QAAQ,OAAO,SAAUzb,GACtB,OAAOinC,EAAUjnC,MAEpByb,QAAQ,KAAM,MAEvBjd,uBAAwB,WACxBC,QAAS,MACThB,KAAM,CACFC,IAAK,EACLC,IAAK,MAIb,OAAO4nN,M,wBCnHT,SAAUvqN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI8rC,EAAY,CACRvJ,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH2I,EAAG,KAEP6S,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAET5S,EAAa,SAAUxoC,GACnB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACAA,EAAI,KAAO,GAAKA,EAAI,KAAO,GAC3B,EACAA,EAAI,KAAO,GACX,EACA,GAEVyoC,EAAU,CACNvqC,EAAG,CACC,eACA,cACA,CAAC,UAAW,WACZ,UACA,WACA,YAEJE,EAAG,CACC,eACA,cACA,CAAC,UAAW,WACZ,WACA,WACA,YAEJE,EAAG,CACC,cACA,aACA,CAAC,SAAU,UACX,WACA,UACA,WAEJE,EAAG,CACC,aACA,WACA,CAAC,QAAS,SACV,UACA,WACA,UAEJE,EAAG,CACC,aACA,WACA,CAAC,QAAS,SACV,UACA,UACA,UAEJE,EAAG,CACC,aACA,WACA,CAAC,QAAS,SACV,WACA,WACA,WAGR8pC,EAAY,SAAUC,GAClB,OAAO,SAAUzoC,EAAQC,EAAeyoC,EAAQvoC,GAC5C,IAAIwoC,EAAIL,EAAWtoC,GACf4oC,EAAML,EAAQE,GAAGH,EAAWtoC,IAIhC,OAHU,IAAN2oC,IACAC,EAAMA,EAAI3oC,EAAgB,EAAI,IAE3B2oC,EAAIhsB,QAAQ,MAAO5c,KAGlCvD,EAAS,CACL,QACA,SACA,OACA,QACA,OACA,QACA,QACA,QACA,SACA,SACA,SACA,UAGJkqN,EAAKrqN,EAAOE,aAAa,KAAM,CAC/BC,OAAQA,EACRE,YAAaF,EACbG,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,wCAAwCH,MAAM,KAC7DI,YAAa,gBAAgBJ,MAAM,KACnC4wB,oBAAoB,EACpBvwB,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEV4B,cAAe,MACfwC,KAAM,SAAUP,GACZ,MAAO,MAAQA,GAEnB9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,IAEA,KAGf7B,SAAU,CACNC,QAAS,wBACTC,QAAS,uBACTC,SAAU,uBACVC,QAAS,sBACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,SACNC,EAAGwqC,EAAU,KACbvqC,GAAIuqC,EAAU,KACdtqC,EAAGsqC,EAAU,KACbrqC,GAAIqqC,EAAU,KACdpqC,EAAGoqC,EAAU,KACbnqC,GAAImqC,EAAU,KACdlqC,EAAGkqC,EAAU,KACbjqC,GAAIiqC,EAAU,KACdhqC,EAAGgqC,EAAU,KACb/pC,GAAI+pC,EAAU,KACd9pC,EAAG8pC,EAAU,KACb7pC,GAAI6pC,EAAU,MAElBM,SAAU,SAAUJ,GAChB,OAAOA,EACF9rB,QAAQ,iBAAiB,SAAUzb,GAChC,OAAO+5C,EAAU/5C,MAEpByb,QAAQ,KAAM,MAEvBmsB,WAAY,SAAUL,GAClB,OAAOA,EACF9rB,QAAQ,OAAO,SAAUzb,GACtB,OAAOinC,EAAUjnC,MAEpByb,QAAQ,KAAM,MAEvBhe,KAAM,CACFC,IAAK,EACLC,IAAK,MAIb,OAAO6nN,M,oCCrMX,0EAAI/kN,EAAwC,WACxC,IAAIC,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAqBxCukN,EAA4B,SAAU3hN,GAEtC,SAAS2hN,IACL,OAAkB,OAAX3hN,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KA8E/D,OAhFAuF,EAAUglN,EAAY3hN,GAUtB2hN,EAAWrkN,UAAUmT,OAAS,SAAU4Z,EAAQ+B,EAAOgE,EAAO6K,GAU1D,IATA,IAAIG,EACAC,EACA9Z,EAAY,GACZqgM,EAAY,KACZliL,EAAa,IACbo7D,EAAWzwE,EAAOC,OAAwC,eAA/BD,EAAOC,MAAMiD,cACxCs0L,EAAUx3L,EAAO0F,oBAAyD,SAAnC1F,EAAO0F,mBAAmBD,KACjEyL,EAAgBu/D,EAAU,OAAqB,OAC/CvlE,EAAoC,cAApBlL,EAAOsB,SAA2BtB,EAAOE,OAASnzB,KAAKk3B,sBAAsBjE,GACxFxf,EAAK,EAAG43B,EAAkBlN,EAAe1qB,EAAK43B,EAAgB3kC,OAAQ+M,IAAM,CACjF,IAAIwgB,EAAQoX,EAAgB53B,GAC5BwgB,EAAMhC,QAAU,GAChBgC,EAAMjC,gBAAkB,GACpBiC,EAAM3B,SAAW,gBAAY6L,EAAclK,EAAM5hB,MAAQ,GAAI4hB,EAAOkK,EAAclK,EAAM5hB,MAAQ,GAAI4gB,IACpG9I,GAAanqB,KAAKkoC,iBAAiBsiL,EAAWv2L,EAAOhB,EAAQ4Q,EAAYM,EAAemE,GACxFA,EAAakiL,EAAY,IAAMliL,EAC/BkiL,EAAYv2L,EACZj0B,KAAKspC,mBAAmBrV,EAAOhB,EAAQ4Q,EAAYM,KAGnDqmL,EAAYC,EAASD,EAAY,KACjCliL,EAAamiL,EAASniL,EAAa,KAG3C,GAAIo7D,GACIzwE,EAAOgiE,SAAU,CACjB,IAAI9hE,EAASnzB,KAAK8pC,yBAAyB3L,GAC3C8F,EAASE,EAAchR,EAAO6W,KAAKjU,OAAQ5C,EAAO6W,KAAKjT,OAAQ/B,EAAOgE,EAAO6K,EAAY5Q,GACzF+Q,EAASG,EAAchR,EAAO4W,MAAMhU,OAAQ5C,EAAO4W,MAAMhT,OAAQ/B,EAAOgE,EAAO6K,EAAY5Q,GAC3F9I,EAAYA,EAAUma,OAAOgE,EAAa,IAAMrE,EAAOn4B,EAAI,IAAMm4B,EAAO5hC,EAA3CimC,MAAiEtE,EAAOl4B,EAAI,IAAMk4B,EAAO3hC,GAG9H,IAAIiC,EAA2B,cAApB2uB,EAAOsB,SAA2BtB,EAAOC,MAAM/pB,QAAQ+H,GAAK,cAAgB+hB,EAAO5gB,MAAQ,IAAM4gB,EAAO3uB,KAC3F,cAApB2uB,EAAOsB,SAA2BtB,EAAOC,MAAM/pB,QAAQ+H,GAAK,WAAa+hB,EAAO2xD,YAAc,cAAgB3xD,EAAO5gB,MACjH4gB,EAAOC,MAAM/pB,QAAQ+H,GAAK,iBAA+BC,IAAjB8hB,EAAO5gB,MAAsB4gB,EAAOsB,SAAWtB,EAAO5gB,OAClGnJ,EAAU,IAAI,OAAW5E,EAAM,OAAQ2uB,EAAO7nB,MAAO6nB,EAAO6D,SAAU7D,EAAOsR,QAAStR,EAAOuR,UAAWra,GAC5GnqB,KAAKykC,eAAev7B,EAAS+pB,EAAQ,IACrCjzB,KAAK0kC,aAAazR,IAQtBs3L,EAAWrkN,UAAUq7B,YAAc,SAAUtO,GACzC,IAAIsC,EAAStC,EAAO9f,UACpBnT,KAAK4oC,uBAAuB3V,EAAQsC,IAKxCg1L,EAAWrkN,UAAUsU,cAAgB,WAIjC,MAAO,cAQX+vM,EAAWrkN,UAAUgS,QAAU,aAKxBqyM,EAjFoB,CAkF7B,S,sBCnGA,SAAUzqN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI8rC,EAAY,CACRvJ,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH2I,EAAG,KAEP6S,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGT6rK,EAAKzqN,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,0FAA0FC,MAC9F,KAEJC,YACI,mEAAmED,MAC/D,KAERE,SAAU,4DAA4DF,MAClE,KAEJG,cAAe,uCAAuCH,MAAM,KAC5DI,YAAa,kCAAkCJ,MAAM,KACrDK,eAAgB,CACZC,GAAI,aACJC,IAAK,gBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,UACTC,QAAS,gBACTC,SAAU,WACVC,QAAS,aACTC,SAAU,gBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,SACNC,EAAG,eACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,UAERmqC,SAAU,SAAUJ,GAChB,OAAOA,EAAO9rB,QAAQ,iBAAiB,SAAUzb,GAC7C,OAAO+5C,EAAU/5C,OAGzB4nC,WAAY,SAAUL,GAClB,OAAOA,EAAO9rB,QAAQ,OAAO,SAAUzb,GACnC,OAAOinC,EAAUjnC,OAGzBlC,cAAe,2BACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAGO,QAAbC,GAAsBD,GAAQ,GACjB,UAAbC,GAAwBD,EAAO,GACnB,UAAbC,EAEOD,EAAO,GAEPA,GAGfC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,MACAA,EAAO,GACP,OACAA,EAAO,GACP,QACAA,EAAO,GACP,QAEA,OAGfP,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOioN,M,wBC1HT,SAAU5qN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI0qN,EAAO1qN,EAAOE,aAAa,QAAS,CACpCC,OAAQ,wCAAwCC,MAC5C,KAEJC,YAAa,yCAAyCD,MAClD,KAEJE,SAAU,8BAA8BF,MAAM,KAC9CG,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,gBAAgBJ,MAAM,KACnCK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,YACJC,IAAK,kBACLC,KAAM,sBACNgE,EAAG,WACHC,GAAI,YACJC,IAAK,kBACLC,KAAM,uBAEVvC,cAAe,oBACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAEM,OAAbC,GAAkC,OAAbA,GAAkC,OAAbA,EACnCD,EACa,OAAbC,EACAD,GAAQ,GAAKA,EAAOA,EAAO,GACd,OAAbC,GAAkC,OAAbA,EACrBD,EAAO,QADX,GAIXC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,IAAI6gG,EAAY,IAAPhhG,EAAaE,EACtB,OAAI8gG,EAAK,IACE,KACAA,EAAK,IACL,KACAA,EAAK,KACL,KACAA,EAAK,KACL,KACAA,EAAK,KACL,KAEA,MAGf7iG,SAAU,CACNC,QAAS,UACTC,QAAS,UACTC,SAAU,aACVC,QAAS,UACTC,SAAU,aACVC,SAAU,KAEd+B,uBAAwB,iBACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO3B,EAAS,IACpB,IAAK,IACD,OAAOA,EAAS,IACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,IACpB,QACI,OAAOA,IAGnBnC,aAAc,CACVC,OAAQ,MACRC,KAAM,MACNC,EAAG,KACHC,GAAI,OACJC,EAAG,OACHC,GAAI,QACJC,EAAG,OACHC,GAAI,QACJC,EAAG,MACHC,GAAI,OACJC,EAAG,OACHC,GAAI,QACJC,EAAG,MACHC,GAAI,UAIZ,OAAOqoN,M,oCC3GX,W,oFCAA,0EAAIplN,EAAwC,WACxC,IAAIC,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAsBxC4kN,EAA8B,SAAUhiN,GAExC,SAASgiN,IACL,OAAkB,OAAXhiN,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAiK/D,OAnKAuF,EAAUqlN,EAAchiN,GAUxBgiN,EAAa1kN,UAAUmT,OAAS,SAAU4Z,GAItC,IAHA,IACI+H,EADAkQ,EAAiBlrC,KAAKmrC,kBAAkBlY,GAExC2d,EAAc7hC,KAAKgQ,IAAIkU,EAAO8M,OAAO30B,MAAO,GACvCqI,EAAK,EAAG7J,EAAKqpB,EAAOE,OAAQ1f,EAAK7J,EAAGlD,OAAQ+M,IAAM,CACvD,IAAIwgB,EAAQrqB,EAAG6J,GACX0W,EAAY,GACZ0gM,OAAe,EACfC,OAAa,EAEjB72L,EAAMhC,QAAU,GAChBgC,EAAMjC,gBAAkB,GACpBiC,EAAM3B,SAAW,gBAAYW,EAAOE,OAAOc,EAAM5hB,MAAQ,GAAI4hB,EAAOhB,EAAOE,OAAOc,EAAM5hB,MAAQ,GAAI4gB,KAEpG63L,EAAa9qN,KAAKurC,aAActX,EAAM8B,OAASmV,EAAe6/K,OAASh8M,KAAKgQ,IAAIkV,EAAMmD,KAAMnD,EAAMoD,KAAOpD,EAAM8B,OAASmV,EAAe6/K,OAASh8M,KAAKmT,IAAI+R,EAAMmD,KAAMnD,EAAMoD,KAAMpE,GAC5KA,EAAOC,MAAMoM,qBAKdwrL,EAAWzoN,GAAKuuC,EAAc,EAC9Bk6K,EAAW3/M,OAASylC,IALpBk6K,EAAWh/M,GAAK8kC,EAAc,EAC9Bk6K,EAAW1/M,MAAQwlC,GAOvBi6K,EAAe7qN,KAAKurC,aAActX,EAAM8B,OAASmV,EAAevjB,MAAQ5Y,KAAKgQ,IAAIkV,EAAMzoB,KAAMyoB,EAAMtoB,OAASsoB,EAAM8B,OAASmV,EAAetjB,IAAM7Y,KAAKmT,IAAI+R,EAAMzoB,KAAMyoB,EAAMtoB,OAAQsnB,GACnL9I,EAAYnqB,KAAKgrN,cAAcF,EAAYD,EAAc53L,GACzD+H,EAAWh7B,KAAKirN,wBAAwBh4L,EAAQgB,GAC3C+G,EAAS3mB,SACVrU,KAAKkrN,WAAWj4L,EAAQgB,EAAO42L,EAAc7vL,EAAU7Q,GACvDnqB,KAAK2rC,qBAAqB1X,EAAO62L,EAAY73L,GAC7CjzB,KAAK2rC,qBAAqB1X,EAAO42L,EAAc53L,OAQ/D23L,EAAa1kN,UAAU+kN,wBAA0B,SAAUh4L,EAAQgB,GAC/D,IAAIgH,EAAOj7B,KAAKmrN,eAAel3L,EAAOhB,GAClC8M,EAAS,CAAEzO,MAAO2B,EAAO8M,OAAOzO,MAAOlmB,MAAO2D,KAAKgQ,IAAIkU,EAAO8M,OAAO30B,MAAO,IAChF,OAAOpL,KAAK2sB,aAAasG,EAAQgB,EAAOgH,EAAM8E,IAUlD6qL,EAAa1kN,UAAUilN,eAAiB,SAAUl3L,EAAOhB,GACrD,IAAIyW,EAAgBzW,EAAOE,OAAOc,EAAM5hB,MAAQ,GAChD,OAAkC,IAA9B4gB,EAAOgnK,mBACFvwJ,GAIMA,EAAc/9B,MAAQsoB,EAAMtoB,MAAQsnB,EAAOm4L,eAAiBn4L,EAAOC,MAAMwgB,WAAW03K,cAHpFn4L,EAAOo4L,eAAiBp4L,EAAOC,MAAMwgB,WAAW23K,cAQpDp3L,EAAMzoB,KAAOyoB,EAAMtoB,MAAQsnB,EAAOm4L,eAAiBn4L,EAAOC,MAAMwgB,WAAW03K,cAC9En4L,EAAOo4L,eAAiBp4L,EAAOC,MAAMwgB,WAAW23K,eAQ5DT,EAAa1kN,UAAU8kN,cAAgB,SAAUM,EAASC,EAASt4L,GAC/D,IAAI9I,EAAY,GACZqhM,EAASv4L,EAAOC,MAAMoM,oBAAsBgsL,EAAQjpN,EAAIipN,EAAQngN,OAAS,EACzEmgN,EAAQx/M,EAAIw/M,EAAQlgN,MAAQ,EAgBhC,OAdA+e,GAAc8I,EAAOC,MAAMoM,oBAEvB,KAAagsL,EAAS,EAAI,IAAM,EAAhC,MAA8DC,EAAS,EAAI,IAAMC,EADjF,KAAY,EAAW,IAAOF,EAAS,EAAvC,MAA6D,EAAW,IAAMC,EAAQlpN,EAE1F8nB,EAAYA,EAAUma,OAAO,MAAcinL,EAAS,EAAI,IAAOA,EAAS,EAA3C,OACZA,EAAQz/M,EAAIy/M,EAAQngN,OAAS,IAAOmgN,EAAS,EADjC,OAEZA,EAAQz/M,EAAIy/M,EAAQngN,OAAS,KACzCmgN,EAAQlpN,EAAIkpN,EAAQpgN,QAHI,MAIZogN,EAAS,EAAI,KAAOA,EAAQlpN,EAAIkpN,EAAQpgN,QAJ5B,MAM7Bgf,GAAc8I,EAAOC,MAAMoM,oBAGvB,OAAcisL,EAAQz/M,EAAIy/M,EAAQngN,OAAS,IAAM,EAAjD,OACKkgN,EAAQx/M,EAAIw/M,EAAQlgN,OAAS,IAAMogN,EAHxC,MAAa,EAAW,KAAOD,EAAQlpN,EAAIkpN,EAAQpgN,QAAnD,MAA+E,EAAW,KAAOmgN,EAAQjpN,EACrGipN,EAAQngN,QAGTgf,GAaXygM,EAAa1kN,UAAUglN,WAAa,SAAUj4L,EAAQgB,EAAOqX,EAAMtQ,EAAU7Q,GACzE,IAAI27D,EAAQ7yD,EAAOC,MAAMoM,oBAAsBgM,EAAKngC,OAASmgC,EAAKlgC,MAClE,GAAI06E,GAAS,EACT,OAAO,KAEX,IAAI7qD,EAAQhI,EAAOgnK,oBACdhmK,EAAMzoB,KAAOyoB,EAAMtoB,MAAyCqvB,EAASC,KAA1B,cAChDD,EAAS+E,OAAOzO,MAAQ0J,EAASC,KACjC,IAAI/xB,EAAU,IAAI,OAAW+pB,EAAOC,MAAM/pB,QAAQ+H,GAAK,WAAa+hB,EAAO5gB,MAAQ,UAAY4hB,EAAM5hB,MAAO4oB,EAAMD,EAAS+E,OAAO30B,MAAO4vB,EAAS+E,OAAOzO,MAAO2B,EAAOsR,QAAStR,EAAOuR,UAAWra,GAC9LhhB,EAAU,eAAWD,EAAQgI,IAC7Bq3B,EAAoBp/B,EAAUA,EAAQmH,aAAa,KAAO,KAC1Dm7M,EAAgBx4L,EAAOC,MAAM+M,SAASwI,SAASv/B,EAAS,IAAIw/B,WAAW,CAACzV,EAAOF,SAASjnB,EAAGmnB,EAAOF,SAAS1wB,KAC/GopN,EAAcl7M,aAAa,OAAQ,OACnCk7M,EAAcl7M,aAAa,aAAc0jB,EAAMnoB,EAAEwL,WAAa,IAAM2c,EAAMmD,KAAK9f,WACzE,IAAM2c,EAAMoD,IAAI/f,WAAa,IAAM2c,EAAMtoB,MAAM2L,WAAa,IAAM2c,EAAMzoB,KAAK8L,YAC9E2b,EAAOC,MAAMyM,cACd1M,EAAO2N,cAAcp2B,YAAYihN,GAErC,gBAActiN,EAASghB,EAAW8I,EAAOC,MAAMqN,OAAQgI,IAQ3DqiL,EAAa1kN,UAAUq7B,YAAc,SAAUtO,GAC3CjzB,KAAKmpC,QAAQlW,IAKjB23L,EAAa1kN,UAAUsU,cAAgB,WACnC,MAAO,gBAWXowM,EAAa1kN,UAAUgS,QAAU,aAK1B0yM,EApKsB,CAqK/B,S,oCCtLK,IAAIc,EA4CAC,EAcAC,EAoBAC,EAoBAC,EAvGX,wIAMA,SAAWJ,GAEPA,EAASA,EAAS,QAAU,GAAK,OAEjCA,EAASA,EAAS,UAAY,GAAK,SAEnCA,EAASA,EAAS,WAAa,GAAK,UAEpCA,EAASA,EAAS,gBAAkB,GAAK,eAEzCA,EAASA,EAAS,kBAAoB,GAAK,iBAE3CA,EAASA,EAAS,UAAY,GAAK,SAEnCA,EAASA,EAAS,UAAY,GAAK,SAEnCA,EAASA,EAAS,gBAAkB,GAAK,eAEzCA,EAASA,EAAS,qBAAuB,GAAK,oBAE9CA,EAASA,EAAS,UAAY,GAAK,SAEnCA,EAASA,EAAS,gBAAkB,IAAM,eAE1CA,EAASA,EAAS,iBAAmB,IAAM,gBAE3CA,EAASA,EAAS,gBAAkB,IAAM,eAE1CA,EAASA,EAAS,gBAAkB,IAAM,eAE1CA,EAASA,EAAS,iBAAmB,IAAM,gBAE3CA,EAASA,EAAS,sBAAwB,IAAM,qBAEhDA,EAASA,EAAS,eAAiB,IAAM,cAEzCA,EAASA,EAAS,gBAAkB,IAAM,eApC9C,CAqCGA,IAAaA,EAAW,KAO3B,SAAWC,GAEPA,EAAWA,EAAW,UAAY,GAAK,SAEvCA,EAAWA,EAAW,WAAa,GAAK,UAExCA,EAAWA,EAAW,WAAa,GAAK,UAN5C,CAOGA,IAAeA,EAAa,KAO/B,SAAWC,GACPA,EAAYA,EAAY,OAAS,GAAK,MACtCA,EAAYA,EAAY,QAAU,GAAK,OACvCA,EAAYA,EAAY,UAAY,GAAK,SACzCA,EAAYA,EAAY,UAAY,GAAK,SACzCA,EAAYA,EAAY,UAAY,GAAK,SACzCA,EAAYA,EAAY,SAAW,GAAK,QACxCA,EAAYA,EAAY,UAAY,GAAK,SACzCA,EAAYA,EAAY,iBAAmB,GAAK,gBAChDA,EAAYA,EAAY,aAAe,GAAK,YAC5CA,EAAYA,EAAY,eAAiB,GAAK,cAC9CA,EAAYA,EAAY,aAAe,IAAM,YAC7CA,EAAYA,EAAY,cAAgB,IAAM,aAZlD,CAaGA,IAAgBA,EAAc,KAOjC,SAAWC,GAEPA,EAAuBA,EAAuB,UAAY,GAAK,SAE/DA,EAAuBA,EAAuB,SAAW,GAAK,QAE9DA,EAAuBA,EAAuB,UAAY,GAAK,SAE/DA,EAAuBA,EAAuB,YAAc,GAAK,WAEjEA,EAAuBA,EAAuB,aAAe,GAAK,YAElEA,EAAuBA,EAAuB,mBAAqB,GAAK,kBAZ5E,CAaGA,IAA2BA,EAAyB,KAOvD,SAAWC,GAEPA,EAAwBA,EAAwB,aAAe,GAAK,YAEpEA,EAAwBA,EAAwB,YAAc,GAAK,WAJvE,CAKGA,IAA4BA,EAA0B,M,wBCvGvD,SAAUhsN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASuD,EAAOojC,EAAMsO,GAClB,IAAIC,EAAQvO,EAAKvmC,MAAM,KACvB,OAAO60C,EAAM,KAAO,GAAKA,EAAM,MAAQ,GACjCC,EAAM,GACND,EAAM,IAAM,GAAKA,EAAM,IAAM,IAAMA,EAAM,IAAM,IAAMA,EAAM,KAAO,IAClEC,EAAM,GACNA,EAAM,GAEhB,SAASC,EAAuBzxC,EAAQC,EAAeC,GACnD,IAAIme,EAAS,CACTpgB,GAAIgC,EAAgB,yBAA2B,yBAC/C9B,GAAI8B,EAAgB,sBAAwB,sBAC5C5B,GAAI,iBACJE,GAAI,gBACJkvB,GAAI,uBACJhvB,GAAI,uBACJE,GAAI,gBAER,MAAY,MAARuB,EACOD,EAAgB,SAAW,SAE3BD,EAAS,IAAMH,EAAOwe,EAAOne,IAAOF,GAGnD,IAAI8sB,EAAc,CACd,QACA,QACA,QACA,QACA,WACA,QACA,QACA,QACA,QACA,QACA,QACA,SAMAs7L,EAAK9rN,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,CACJ4hB,OAAQ,oFAAoF3hB,MACxF,KAEJ8hC,WACI,kFAAkF9hC,MAC9E,MAGZC,YAAa,CAET0hB,OAAQ,gEAAgE3hB,MACpE,KAEJ8hC,WACI,gEAAgE9hC,MAC5D,MAGZE,SAAU,CACN4hC,WACI,gEAAgE9hC,MAC5D,KAER2hB,OAAQ,gEAAgE3hB,MACpE,KAEJ+hC,SAAU,iDAEd5hC,cAAe,uBAAuBH,MAAM,KAC5CI,YAAa,uBAAuBJ,MAAM,KAC1CowB,YAAaA,EACbM,gBAAiBN,EACjBO,iBAAkBP,EAGlBC,YACI,2MAGJE,iBACI,2MAGJC,kBACI,wHAGJC,uBACI,6FACJpwB,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,iBACJC,IAAK,uBACLC,KAAM,8BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,iBACTE,QAAS,gBACTD,SAAU,SAAUiE,GAChB,GAAIA,EAAI9C,SAAWvC,KAAKuC,OAcpB,OAAmB,IAAfvC,KAAKmwB,MACE,oBAEA,mBAhBX,OAAQnwB,KAAKmwB,OACT,KAAK,EACD,MAAO,6BACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,6BACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,+BAUvB7uB,SAAU,SAAU+D,GAChB,GAAIA,EAAI9C,SAAWvC,KAAKuC,OAcpB,OAAmB,IAAfvC,KAAKmwB,MACE,oBAEA,mBAhBX,OAAQnwB,KAAKmwB,OACT,KAAK,EACD,MAAO,2BACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,2BACX,KAAK,EACL,KAAK,EACL,KAAK,EACD,MAAO,6BAUvB5uB,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,WACNC,EAAG,mBACHC,GAAIwzC,EACJvzC,EAAGuzC,EACHtzC,GAAIszC,EACJrzC,EAAG,MACHC,GAAIozC,EACJnzC,EAAG,OACHC,GAAIkzC,EACJjkB,EAAG,SACHC,GAAIgkB,EACJjzC,EAAG,QACHC,GAAIgzC,EACJ/yC,EAAG,MACHC,GAAI8yC,GAERxyC,cAAe,wBACfwC,KAAM,SAAUP,GACZ,MAAO,iBAAiBqe,KAAKre,IAEjC9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,OACAA,EAAO,GACP,OACAA,EAAO,GACP,MAEA,UAGfQ,uBAAwB,mBACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO3B,EAAS,KACpB,IAAK,IACD,OAAOA,EAAS,MACpB,IAAK,IACL,IAAK,IACD,OAAOA,EAAS,KACpB,QACI,OAAOA,IAGnBpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOspN,M,wBCzNT,SAAUjsN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASyD,EAAUC,EAAQC,EAAeC,EAAKC,GAC3C,OAAQD,GACJ,IAAK,IACD,OAAOD,EAAgB,gBAAkB,kBAC7C,IAAK,KACD,OAAOD,GAAUC,EAAgB,UAAY,aACjD,IAAK,IACL,IAAK,KACD,OAAOD,GAAUC,EAAgB,SAAW,YAChD,IAAK,IACL,IAAK,KACD,OAAOD,GAAUC,EAAgB,OAAS,WAC9C,IAAK,IACL,IAAK,KACD,OAAOD,GAAUC,EAAgB,QAAU,WAC/C,IAAK,IACL,IAAK,KACD,OAAOD,GAAUC,EAAgB,OAAS,UAC9C,IAAK,IACL,IAAK,KACD,OAAOD,GAAUC,EAAgB,OAAS,WAC9C,QACI,OAAOD,GAInB,IAAIqoN,EAAK/rN,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,+LAA+LC,MACnM,KAEJC,YACI,6EAA6ED,MACzE,KAERsC,kBAAkB,EAClBpC,SAAU,6CAA6CF,MAAM,KAC7DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1C4wB,oBAAoB,EACpBvwB,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,oBACJC,IAAK,0BACLC,KAAM,iCAEV4B,cAAe,SACfwC,KAAM,SAAUP,GACZ,MAAiB,OAAVA,GAEX9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,KAEA,MAGf7B,SAAU,CACNC,QAAS,eACTC,QAAS,eACTC,SAAU,iBACVC,QAAS,eACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,UACNC,EAAG+B,EACH9B,GAAI8B,EACJ7B,EAAG6B,EACH5B,GAAI4B,EACJ3B,EAAG2B,EACH1B,GAAI0B,EACJzB,EAAGyB,EACHxB,GAAIwB,EACJvB,EAAGuB,EACHtB,GAAIsB,EACJrB,EAAGqB,EACHpB,GAAIoB,GAERJ,uBAAwB,eACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GACJ,IAAK,IACL,IAAK,IACL,IAAK,MACD,OAAO3B,EAAS,QACpB,QACI,OAAOA,MAKvB,OAAOqoN,M,sBCxGT,SAAUlsN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIsiC,EAAW,CACXyJ,EAAG,MACHxJ,EAAG,MACHK,EAAG,MACHI,EAAG,MACHC,EAAG,MACHT,EAAG,MACHW,EAAG,MACHN,EAAG,MACHJ,EAAG,MACHW,EAAG,MACHC,GAAI,MACJP,GAAI,MACJQ,GAAI,MACJ0gE,GAAI,MACJjhE,GAAI,MACJQ,GAAI,MACJb,GAAI,MACJC,GAAI,MACJa,GAAI,MACJN,IAAK,OAGL8oL,EAAKhsN,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,kFAAkFC,MACtF,KAEJC,YAAa,qDAAqDD,MAC9D,KAEJE,SAAU,2DAA2DF,MACjE,KAEJG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,kBACTC,QAAS,kBACTC,SAAU,iBACVC,QAAS,kBACTC,SAAU,wCACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,YACRC,KAAM,WACNC,EAAG,iBACHC,GAAI,YACJC,EAAG,YACHC,GAAI,WACJC,EAAG,WACHC,GAAI,UACJC,EAAG,UACHC,GAAI,SACJC,EAAG,SACHC,GAAI,QACJC,EAAG,UACHC,GAAI,UAERgB,uBAAwB,wBACxBC,QAAS,SAAUI,GACf,IAAI21B,EAAI31B,EAAS,GACb8B,EAAI9B,GAAU,IAAM,IAAM,KAC9B,OAAOA,GAAU4+B,EAAS5+B,IAAW4+B,EAASjJ,IAAMiJ,EAAS98B,KAEjElD,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOwpN,M,sBCxFT,SAAUnsN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI8rC,EAAY,CACRvJ,EAAG,IACHK,EAAG,IACHI,EAAG,IACHC,EAAG,IACHT,EAAG,IACHW,EAAG,IACHN,EAAG,IACHJ,EAAG,IACHW,EAAG,IACH2I,EAAG,KAEP6S,EAAY,CACR,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,IACL,IAAK,KAGTqtK,EAAOjsN,EAAOE,aAAa,QAAS,CACpCC,OAAQ,0FAA0FC,MAC9F,KAEJC,YACI,mEAAmED,MAC/D,KAERE,SAAU,4DAA4DF,MAClE,KAEJG,cAAe,uCAAuCH,MAAM,KAC5DI,YAAa,kCAAkCJ,MAAM,KACrDK,eAAgB,CACZC,GAAI,aACJC,IAAK,gBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,0BACLC,KAAM,iCAEVC,SAAU,CACNC,QAAS,UACTC,QAAS,gBACTC,SAAU,WACVC,QAAS,aACTC,SAAU,gBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,SACNC,EAAG,eACHC,GAAI,aACJC,EAAG,WACHC,GAAI,WACJC,EAAG,WACHC,GAAI,WACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,SACJC,EAAG,SACHC,GAAI,UAERmqC,SAAU,SAAUJ,GAChB,OAAOA,EAAO9rB,QAAQ,iBAAiB,SAAUzb,GAC7C,OAAO+5C,EAAU/5C,OAGzB4nC,WAAY,SAAUL,GAClB,OAAOA,EAAO9rB,QAAQ,OAAO,SAAUzb,GACnC,OAAOinC,EAAUjnC,OAIzBlC,cAAe,uCACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAEM,QAAbC,EACOD,EAAO,EAAIA,EAAOA,EAAO,GACZ,QAAbC,GAEa,SAAbA,EADAD,EAGa,UAAbC,EACAD,GAAQ,EAAIA,EAAOA,EAAO,GACb,UAAbC,GAEa,YAAbA,EADAD,EAAO,QACX,GAKXC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,MACAA,EAAO,EACP,MACAA,EAAO,GACP,OACAA,EAAO,GACP,QACAA,EAAO,GACP,QACAA,EAAO,GACP,UAEA,OAGfP,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOypN,M,wBCnIT,SAAUpsN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASm1C,EAAuBzxC,EAAQC,EAAeC,GACnD,IAAIme,EAAS,CACLpgB,GAAI,UACJE,GAAI,SACJE,GAAI,MACJE,GAAI,OACJkvB,GAAI,YACJhvB,GAAI,OACJE,GAAI,OAER4vH,EAAY,IAIhB,OAHIvuH,EAAS,KAAO,IAAOA,GAAU,KAAOA,EAAS,MAAQ,KACzDuuH,EAAY,QAETvuH,EAASuuH,EAAYlwG,EAAOne,GAGvC,IAAIsoN,EAAKlsN,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,oGAAoGC,MACxG,KAEJC,YACI,+DAA+DD,MAC3D,KAERsC,kBAAkB,EAClBpC,SAAU,kDAAkDF,MAAM,KAClEG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,OACJC,IAAK,UACLC,EAAG,aACHC,GAAI,cACJC,IAAK,mBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,cACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,WACRC,KAAM,aACNC,EAAG,iBACHC,GAAIwzC,EACJvzC,EAAG,WACHC,GAAIszC,EACJrzC,EAAG,QACHC,GAAIozC,EACJnzC,EAAG,OACHC,GAAIkzC,EACJjkB,EAAG,cACHC,GAAIgkB,EACJjzC,EAAG,SACHC,GAAIgzC,EACJ/yC,EAAG,QACHC,GAAI8yC,GAER7yC,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO0pN,M,kCCpFX,kDAAI5mN,EAAwC,WACxC,IAAIC,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAaxCI,EAA0C,SAAUC,EAAYC,EAAQzC,EAAK0C,GAC7E,IAA2HtE,EAAvHuE,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOb,OAAOkB,yBAAyBN,EAAQzC,GAAO0C,EACrH,GAAuB,kBAAZM,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQzC,EAAK0C,QACpH,IAAK,IAAIQ,EAAIV,EAAWK,OAAS,EAAGK,GAAK,EAAGA,KAAS9E,EAAIoE,EAAWU,MAAIJ,GAAKH,EAAI,EAAIvE,EAAE0E,GAAKH,EAAI,EAAIvE,EAAEqE,EAAQzC,EAAK8C,GAAK1E,EAAEqE,EAAQzC,KAAS8C,GAChJ,OAAOH,EAAI,GAAKG,GAAKjB,OAAOsB,eAAeV,EAAQzC,EAAK8C,GAAIA,GAK5D40I,EAAW,YACXrU,EAAU,QACVM,EAAc,YACd4kF,EAAiB,gBACjBC,EAAiB,oBACjB5wE,EAAe,cACf6wE,EAAiB,iBACjBC,EAAmB,mBACnBC,EAAiB,eACjBC,EAAmB,kBACnBC,EAAqB,oBACrB3wE,EAAa,kBACbC,EAAc,mBACd2wE,EAAgB,sBAChBC,EAAkB,wBAClBzwE,EAAiB,GAajB0wE,EAAyB,SAAUjkN,GAQnC,SAASikN,EAAQ3jN,EAASC,GACtB,OAAOP,EAAOS,KAAKrJ,KAAMkJ,EAASC,IAAYnJ,KAyZlD,OAjaAuF,EAAUsnN,EAASjkN,GAgBnBikN,EAAQ3mN,UAAUsT,UAAY,WAC1BxZ,KAAKq8I,QAAU,OAAQ16G,KAAKr9B,KAC5BtE,KAAKs8I,aAAgC,YAAjBt8I,KAAKq8I,QACzBr8I,KAAKuV,SAAW,OAAQA,SACxBvV,KAAKu8I,YAAa,EAClB,IAAI1/F,EAAM78C,KAAKmJ,QACfnJ,KAAKw8I,QAA2B,SAAjBx8I,KAAKq8I,SAAuC,SAAjBr8I,KAAKq8I,QAC/Cr8I,KAAK0J,aACU,KAAXmzC,EAAI3rC,KACJ2rC,EAAI3rC,GAAK,eAAY,WACrBlR,KAAKy8I,UAAW,GAEpB5/F,EAAIlwC,MAAMC,QAAU,QAChB5M,KAAKuL,WACLsxC,EAAI7xC,UAAU0G,IAAIw1H,IAS1B2lF,EAAQ3mN,UAAUmT,OAAS,WACvBrZ,KAAK6Z,YAAc,IAAI,OAAM7Z,KAAKmJ,QAAS,CAAEuzI,OAAQ18I,KAAK28I,aAAajxI,KAAK1L,MAAO4pB,MAAO5pB,KAAK48I,aAAalxI,KAAK1L,QACjH,OAAa0R,IAAI1R,KAAKmwI,UAAW,SAAUnwI,KAAK8sN,mBAAoB9sN,MAC/DA,KAAKuV,UAINvV,KAAKmJ,QAAQ6B,UAAU0G,IAAIqqI,GAC3B/7I,KAAK+sN,qBAAqB/sN,KAAKmJ,UAJ/BnJ,KAAK88I,cAAc98I,KAAKmJ,SAM5BnJ,KAAK+8I,iBACL,OAAarrI,IAAI1R,KAAKmJ,QAAS,QAASnJ,KAAKgtN,kBAAmBhtN,OAEpE6sN,EAAQ3mN,UAAU62I,eAAiB,WAC3B,eAAkB/8I,KAAK6qI,aAAe7qI,KAAK6qI,WAAa,GACxD7qI,KAAK6qI,WAAa7qI,KAAKmwI,UAAU9gI,aACjCrP,KAAKu8I,YAAa,GAGlBv8I,KAAKu8I,YAAa,GAG1BswE,EAAQ3mN,UAAUwD,WAAa,WAC3B,IAAIujN,EAAY,eAAS,MAAO,CAAE3iN,UAAW+hN,IACzC1gH,EAAY,eAAS,MAAO,CAAErhG,UAAW8hN,IAC7CzgH,EAAUp7F,aAAa,WAAY,MAGnC,IAFA,IAAIssC,EAAM78C,KAAKmJ,QACXsoI,EAAW,GAAGn+H,MAAMjK,KAAKwzC,EAAIx2B,UACxB5S,EAAK,EAAGwpI,EAAaxL,EAAUh+H,EAAKwpI,EAAWv2I,OAAQ+M,IAAM,CAClE,IAAIo6H,EAAQoP,EAAWxpI,GACvBw5M,EAAUziN,YAAYqjI,GAE1BliC,EAAUnhG,YAAYyiN,GACtBpwK,EAAIryC,YAAYmhG,GAChBA,EAAUh/F,MAAMo+C,SAAW,SAC3B/qD,KAAKmwI,UAAYxkC,EACjB3rG,KAAKm9I,YAAc8vE,GAEvBJ,EAAQ3mN,UAAUuU,eAAiB,WAC/B,IAAIipD,EAAY,CAAC,cACjB,OAAO1jE,KAAK0a,aAAagpD,IAQ7BmpJ,EAAQ3mN,UAAUsU,cAAgB,WAC9B,MAAO,WAOXqyM,EAAQ3mN,UAAUgS,QAAU,WACxB,IAAI8xH,EAAKhqI,KAAKmJ,QACd6gI,EAAGr9H,MAAMC,QAAU,GACnB,gBAAY,CAAC5M,KAAKmJ,SAAU,CAACoyI,EAAUQ,EAAY7U,IACnD,IAAIgmF,EAAO,gBAAU,MAAQljF,EAAG94H,GAAK,QAAUs7M,EAAgBxiF,GAC3DmjF,EAAW,gBAAU,IAAMnxE,EAAahS,GAC5C,GAAG12H,MAAMjK,KAAK8jN,GAAU7tH,SAAQ,SAAUziD,GACtC,eAAOA,MAEX,IAAK,IAAIppC,EAAK,EAAG7J,EAAK,GAAG0J,MAAMjK,KAAKrJ,KAAKm9I,YAAY92H,UAAW5S,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAClF,IAAI26H,EAAOxkI,EAAG6J,GACdu2H,EAAGx/H,YAAY4jI,GAEfpuI,KAAKy8I,UACLz8I,KAAKmJ,QAAQqH,gBAAgB,MAEjC,eAAOxQ,KAAKmwI,WACR+8E,EAAKxmN,OAAS,IACd,eAAOwmN,EAAK,IACP,eAAkBA,EAAK,KACxB,eAAOA,EAAK,KAGpB,OAAajiN,OAAOjL,KAAKmwI,UAAW,SAAUnwI,KAAK8sN,oBACnD9sN,KAAK6Z,YAAY3B,UACjBlY,KAAK6Z,YAAc,KACnBjR,EAAO1C,UAAUgS,QAAQ7O,KAAKrJ,OASlC6sN,EAAQ3mN,UAAU8nI,QAAU,SAAU7vH,GAClC,IAAI2/H,EAAS,gBAAU,sBAAwBtW,EAAc,IAAKxnI,KAAKmJ,SACnEgV,EACAne,KAAKmJ,QAAQ6B,UAAU0G,IAAI81H,GAG3BxnI,KAAKmJ,QAAQ6B,UAAUC,OAAOu8H,GAElC,GAAGl0H,MAAMjK,KAAKy0I,GAAQx+C,SAAQ,SAAU0qC,GACpCA,EAAGz5H,aAAa,WAAa4N,EAAc,KAAN,SAG7C0uM,EAAQ3mN,UAAU6mN,qBAAuB,SAAU5jN,GAC/C,IAAI+H,EAAK/H,EAAQ+H,GAAGozB,OAAO,QACvB8oL,EAAiB,eAAS,MAAO,CAAE9iN,UAAW0xI,EAAc,IAAM4wE,IAClES,EAAU,KAAOlkN,EAAQ+H,GAAGozB,OAAO,QAAUkoL,EAAiB,IAAME,GACpEY,EAAU,eAAS,MAAO,CAAEp8M,GAAIA,EAAGozB,OAAO,QAASh6B,UAAW+iN,IAC9Dp4E,EAAU,eAAS,MAAO,CAAE3qI,UAAWiiN,EAAmB,IAAM9wE,EAAe,aACnF6xE,EAAQ9iN,YAAYyqI,GACpB,IAAIs4E,EAAQ,eAAS,MAAO,CAAEjjN,UAAW0xI,EAAc,IAAM2wE,IACzD3sN,KAAKw8I,SACL8wE,EAAQtiN,UAAU0G,IAAI,cAE1BvI,EAAQqB,YAAY4iN,GACpBjkN,EAAQqB,YAAY8iN,GACpBnkN,EAAQ8hB,aAAasiM,EAAOpkN,EAAQylC,YACpC5uC,KAAK09I,aAAa,CAAC4vE,KAEvBT,EAAQ3mN,UAAU42I,cAAgB,SAAU3zI,GACxC,IAAI+H,EAAK/H,EAAQ+H,GAAGozB,OAAO,QACvB+oL,EAAU,KAAOlkN,EAAQ+H,GAAGozB,OAAO,QAAUkoL,EAAiB,IAAME,GACpE13E,EAAM,eAAS,MAAO,CAAE9jI,GAAIA,EAAGozB,OAAO,SAAUh6B,UAAW+iN,IAC/Dr4E,EAAIzkI,aAAa,gBAAiB,SAClC,IAAI0kI,EAAU,eAAS,MAAO,CAAE3qI,UAAWiiN,EAAmB,IAAM9wE,EAAe,aAC/E+xE,EAAQ,KAAOrkN,EAAQ+H,GAAGozB,OAAO,QAAUkoL,EAAiB,IAAMC,GAClEgB,EAAa,eAAS,MAAO,CAAEv8M,GAAIA,EAAGozB,OAAO,OAAQh6B,UAAWkjN,EAAQ,IAAMhmF,IAClFimF,EAAWl9M,aAAa,gBAAiB,QACzC,IAAIm9M,EAAY,eAAS,MAAO,CAAEpjN,UAAWgiN,EAAiB,IAAM7wE,EAAe,aACnFgyE,EAAWjjN,YAAYkjN,GACvB14E,EAAIxqI,YAAYyqI,GAChBD,EAAIzkI,aAAa,WAAY,KAC7BpH,EAAQqB,YAAYwqI,GACpB7rI,EAAQ8hB,aAAawiM,EAAYtkN,EAAQylC,YACrC5uC,KAAKw8I,UACLxH,EAAIhqI,UAAU0G,IAAI,cAClB+7M,EAAWziN,UAAU0G,IAAI,eAE7B1R,KAAK09I,aAAa,CAAC1I,EAAKy4E,KAE5BZ,EAAQ3mN,UAAU83I,WAAa,SAAU2vE,GACrC,IAAIvkN,EAAQpJ,KACZ,GAAe,UAAX2tN,EAAG9pN,IAAiB,CACpB,IAAIo6I,EAAe,WACf70I,EAAM80I,YAAa,EACnB90I,EAAM+0I,aAAa,GAAIwvE,EAAGrnN,QAAQ,IAEtCtG,KAAKo+I,SAAWhyI,OAAO4G,YAAW,WAC9BirI,MACD,OAGX4uE,EAAQ3mN,UAAUm4I,QAAU,SAAUsvE,GACnB,UAAXA,EAAG9pN,MAGH7D,KAAKk+I,WACLl+I,KAAKk+I,YAAa,EAGlByvE,EAAGrnN,OAAOqoF,QAEdj8E,aAAa1S,KAAKo+I,YAEtByuE,EAAQ3mN,UAAUw3I,aAAe,SAAUv0I,GACvC,IAAIC,EAAQpJ,KACZ,GAAGsT,MAAMjK,KAAKF,GAASm2F,SAAQ,SAAUziD,GACrC,IAAI,OAAMA,EAAK,CAAE9iC,QAAS3Q,EAAMk1I,eAAe5yI,KAAKtC,GAAQ0Q,iBAAkB,MAC9E+iC,EAAIjQ,iBAAiB,UAAWxjC,EAAM40I,WAAWtyI,KAAKtC,IACtDyzC,EAAIjQ,iBAAiB,QAASxjC,EAAMi1I,QAAQ3yI,KAAKtC,IACjDyzC,EAAIjQ,iBAAiB,UAAWxjC,EAAMm1I,aAAa7yI,KAAKtC,IACxDyzC,EAAIjQ,iBAAiB,WAAYxjC,EAAMm1I,aAAa7yI,KAAKtC,IACzDyzC,EAAIjQ,iBAAiB,eAAe,SAAU75B,GAC1CA,EAAE6F,oBAEN,OAAalH,IAAImrC,EAAK,QAASzzC,EAAMo1I,kBAAmBp1I,OAGhEyjN,EAAQ3mN,UAAUq4I,aAAe,WAC7BE,cAAcz+I,KAAK0+I,UAEvBmuE,EAAQ3mN,UAAUo4I,eAAiB,SAAUqvE,GACzC,IAAIvkN,EAAQpJ,KACR+sI,EAAO4gF,EAAG96M,cAAcvM,OAC5BymI,EAAO/sI,KAAKkM,SAAS6gI,EAAMy/E,GAAkBz/E,EAAK7lH,kBAAoB6lH,EACtE,IAAI6gF,EAAiB,GACjBhvE,EAAa,WACbx1I,EAAM+0I,aAAayvE,EAAgB7gF,GAAM,IAE7C/sI,KAAK0+I,QAAUtyI,OAAOyyI,aAAY,WAC9BD,MACD,KAEPiuE,EAAQ3mN,UAAUgG,SAAW,SAAU/C,EAASmB,GAC5C,OAAOnB,EAAQ6B,UAAUkB,SAAS5B,IAEtCuiN,EAAQ3mN,UAAUi4I,aAAe,SAAUQ,EAAW5R,EAAM+R,GACxD,IAAI9zI,EAAY+hI,EAAK/hI,UACjBA,EAAUkB,SAASsgN,KACnBxhN,EAAY+hI,EAAKj7H,cAAc,IAAM2pI,GAAczwI,WAEnDA,EAAUkB,SAASqgN,GACnBvsN,KAAK++I,mBAAmBJ,EAAW,MAAOG,GAErC9zI,EAAUkB,SAASogN,IACxBtsN,KAAK++I,mBAAmBJ,EAAW,GAAIG,IAG/C+tE,EAAQ3mN,UAAUs4I,kBAAoB,SAAUlqI,GAC5CtU,KAAKm+I,aAAan+I,KAAK6qI,WAAYv2H,EAAMhO,QAAQ,IAErDumN,EAAQ3mN,UAAU8mN,kBAAoB,SAAUj6M,GAC5CA,EAAE6F,iBACF5Y,KAAK++I,mBAAmB/+I,KAAK6qI,WAAa93H,EAAE86M,OAAS,EAAI,MAAQ,IAAK,IAE1EhB,EAAQ3mN,UAAU02I,aAAe,SAAU7pI,GACvC,IACIy0C,EADAsmK,EAAe9tN,KAAKmwI,UAGpB3oF,EADAz0C,EAAEksI,UAAY,EACHlsI,EAAEg7M,WAA0B,GAAbh7M,EAAEksI,UAGjBlsI,EAAEg7M,UAAYh7M,EAAEksI,SAE/B,IAAIt3H,EAAQ,GACRwhB,EAAU,WACV,IAAIg2G,EAAOpwI,KAAKqwI,IAAIz3H,GAChBw3H,GAAQ,EACR/yI,OAAOizI,qBAAqBF,IAGH,OAArBpsI,EAAEqX,eACF0jM,EAAal3M,WAAa4wC,EAAW23F,EAEX,SAArBpsI,EAAEqX,iBACP0jM,EAAal3M,WAAa4wC,EAAW23F,GAEzCx3H,GAAS,IACTvb,OAAOkzI,sBAAsBn2G,KAGrCA,KAEJ0jL,EAAQ3mN,UAAUq5I,eAAiB,SAAUjM,EAAWltH,GACrC,QAAXA,EACApmB,KAAKmwI,UAAUv5H,WAAa08H,EAG5BtzI,KAAKmwI,UAAUv5H,WAAa08H,GAGpCu5E,EAAQ3mN,UAAU64I,mBAAqB,SAAUS,EAAap5H,EAAQ04H,GAClE,IAAI11I,EAAQpJ,KACRm/I,EAAO,GACX,GAAIL,EACA9+I,KAAKu/I,eAAeC,EAAap5H,OADrC,CAIKpmB,KAAKu8I,YACN,GAAGjpI,MAAMjK,KAAK,gBAAU,IAAM2yI,EAAah8I,KAAKmJ,UAAUm2F,SAAQ,SAAU0qC,GACxEwV,GAAexV,EAAG36H,gBAG1B,IAAI85B,EAAU,WACNq2G,EAAcL,EACd/yI,OAAOizI,qBAAqBF,IAG5B/1I,EAAMm2I,eAAeJ,EAAM/4H,GAC3Bo5H,GAAeL,EACf/yI,OAAOkzI,sBAAsBn2G,KAGrCA,MAEJ0jL,EAAQ3mN,UAAUy2I,aAAe,SAAU5pI,GACvC,IAAIi3H,EAAKhqI,KAAKmwI,UACV3oF,EAAWz0C,EAAEg7M,UACS,OAAtBh7M,EAAE0sI,gBACFzV,EAAGpzH,UAAYozH,EAAGpzH,UAAY4wC,EAEH,SAAtBz0C,EAAE0sI,kBACPzV,EAAGpzH,UAAYozH,EAAGpzH,UAAY4wC,IAGtCqlK,EAAQ3mN,UAAUw5I,eAAiB,SAAUsuE,EAAeC,GACxD,GAAIjuN,KAAKuV,SAAU,CACf,IAAI9G,EAAW,eAAkBu/M,GAAiBC,EAAmBD,EACjEnuE,EAAYpxI,EAASqD,cAAc,IAAM2pI,GACzC,eAAkBuyE,GAClB,eAAUnuE,EAAW,CAAC0sE,GAAmB,CAACD,IAG1C,eAAUzsE,EAAW,CAACysE,GAAiB,CAACC,SAI5CyB,EAAchjN,UAAU0G,IAAI81H,GAC5BwmF,EAAcz9M,aAAa,gBAAiB,QAC5Cy9M,EAAcx9M,gBAAgB,YAC9By9M,EAAiBjjN,UAAUC,OAAOu8H,GAClCymF,EAAiB19M,aAAa,gBAAiB,SAC/C09M,EAAiB19M,aAAa,WAAY,KAE9CvQ,KAAKu+I,gBAETsuE,EAAQ3mN,UAAU4mN,mBAAqB,SAAU/5M,GAC7C,IAAIzM,EAASyM,EAAEzM,OACX6E,EAAS7E,EAAO+I,aAChB6+M,EAAWluN,KAAKmJ,QAAQ2I,cAAc,IAAM26M,GAC5C0B,EAAanuN,KAAKmJ,QAAQ2I,cAAc,IAAM46M,GAC9C0B,EAAYpuN,KAAKmJ,QAAQ2I,cAAc,IAAM66M,GAC7C0B,EAAcruN,KAAKmJ,QAAQ2I,cAAc,IAAM86M,GAC/Ch2M,EAAYtQ,EAAOsQ,UAkBvB,GAjBIA,GAAa,IACbA,GAAaA,GAEb5W,KAAKuV,WAED64M,EAAUzhN,MAAMxB,OADhByL,EAAYulI,EACavlI,EAAY,KAGZ,OAExBtQ,EAAO0lG,aAAej9F,KAAKu2D,KAAKn6D,EAASyL,GAAculI,EACxDkyE,EAAY1hN,MAAMxB,OAAU7E,EAAO0lG,aAAej9F,KAAKu2D,KAAKn6D,EAASyL,GAAc,KAGnFy3M,EAAY1hN,MAAMxB,OAAS,QAGjB,IAAdyL,EACA5W,KAAK0/I,eAAewuE,EAAUC,QAE7B,GAAIp/M,KAAKu2D,KAAKn6D,EAASyL,EAAY,KAAOtQ,EAAO0lG,aAClDhsG,KAAK0/I,eAAeyuE,EAAYD,OAE/B,CACD,IAAIhuE,EAASlgJ,KAAKmJ,QAAQ2I,cAAc,IAAM06M,EAAiB,IAAMhlF,GACjE0Y,IACAA,EAAOl1I,UAAUC,OAAOu8H,GACxB0Y,EAAO3vI,aAAa,gBAAiB,SACrC2vI,EAAO3vI,aAAa,WAAY,QAY5Cs8M,EAAQ3mN,UAAUyU,kBAAoB,SAAUC,EAASC,GACrD,IAAK,IAAIpH,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAKF,GAAUnH,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC9D,IAAIsH,EAAOnR,EAAG6J,GACd,OAAQsH,GACJ,IAAK,aACD/a,KAAK+8I,iBACL,MACJ,IAAK,YACGniI,EAAQrP,UACRvL,KAAKmJ,QAAQ6B,UAAU0G,IAAIw1H,GAG3BlnI,KAAKmJ,QAAQ6B,UAAUC,OAAOi8H,GAElC,SAIhB9gI,EAAW,CACP,eAAS,OACVymN,EAAQ3mN,UAAW,kBAAc,GACpC2mN,EAAUzmN,EAAW,CACjB,QACDymN,GACIA,EAlaiB,CAma1B,S,sBChdA,SAAU/sN,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIi2J,EAAKj2J,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,yFAAyFC,MAC7F,KAEJC,YAAa,qDAAqDD,MAC9D,KAEJE,SACI,+EAA+EF,MAC3E,KAERG,cAAe,+BAA+BH,MAAM,KACpDI,YAAa,uBAAuBJ,MAAM,KAC1C4wB,oBAAoB,EAEpBvwB,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,2BAEVC,SAAU,CACNC,QAAS,iBACTC,QAAS,gBACTC,SAAU,eACVC,QAAS,eACTC,SAAU,wBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,WACNC,EAAG,mBACHC,GAAI,YACJC,EAAG,QACHC,GAAI,WACJC,EAAG,MACHC,GAAI,SACJC,EAAG,UACHC,GAAI,aACJC,EAAG,MACHC,GAAI,SACJC,EAAG,WACHC,GAAI,cAERgB,uBAAwB,mCAExBC,QAAS,SAAUI,GACf,IAAI8B,EAAI9B,EACJR,EAAS,GACTmrN,EAAS,CACL,GACA,KACA,KACA,MACA,MACA,KACA,KACA,KACA,MACA,MACA,MACA,KACA,MACA,KACA,KACA,MACA,KACA,KACA,MACA,KACA,OAWR,OATI7oN,EAAI,GAEAtC,EADM,KAANsC,GAAkB,KAANA,GAAkB,KAANA,GAAkB,KAANA,GAAkB,MAANA,EACvC,MAEA,MAENA,EAAI,IACXtC,EAASmrN,EAAO7oN,IAEb9B,EAASR,GAEpBZ,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOyzJ,M,oCC1GX,sCA4CWq4D,EA5CX,YAAIhpN,EAAwC,WACxC,IAAIC,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAaxCI,EAA0C,SAAUC,EAAYC,EAAQzC,EAAK0C,GAC7E,IAA2HtE,EAAvHuE,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOb,OAAOkB,yBAAyBN,EAAQzC,GAAO0C,EACrH,GAAuB,kBAAZM,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQzC,EAAK0C,QACpH,IAAK,IAAIQ,EAAIV,EAAWK,OAAS,EAAGK,GAAK,EAAGA,KAAS9E,EAAIoE,EAAWU,MAAIJ,GAAKH,EAAI,EAAIvE,EAAE0E,GAAKH,EAAI,EAAIvE,EAAEqE,EAAQzC,EAAK8C,GAAK1E,EAAEqE,EAAQzC,KAAS8C,GAChJ,OAAOH,EAAI,GAAKG,GAAKjB,OAAOsB,eAAeV,EAAQzC,EAAK8C,GAAIA,GAUrD65E,EAAQ,CAEfguI,MAAO,IAAIt6K,OAAO,mHAGlBg/E,IAAK,kFACLu7F,SAAU,IAAIv6K,OAAO,2DACrBw6K,OAAQ,IAAIx6K,OAAO,YACnBy6K,MAAO,IAAIz6K,OAAO,qBAClB06K,WAAY,IAAI16K,OAAO,kBAS3B,SAAWq6K,GAIPA,EAAYA,EAAY,WAAa,GAAK,UAI1CA,EAAYA,EAAY,SAAW,GAAK,SAR5C,CASGA,IAAgBA,EAAc,KAgBjC,IAAIM,EAA+B,SAAUjmN,GASzC,SAASimN,EAAc1lN,EAASD,GAC5B,IAAIE,EAAQR,EAAOS,KAAKrJ,KAAMkJ,EAASC,IAAYnJ,KA6CnD,GA5CAoJ,EAAM0lN,UAAY,GAClB1lN,EAAM2lN,WAAa,GACnB3lN,EAAM4lN,aAAc,EACpB5lN,EAAM6lN,SAAW,WACjB7lN,EAAM8lN,YAAc,KACpB9lN,EAAMsU,aAAe,KACrBtU,EAAM+lN,YAAc,+DAEpB/lN,EAAMgmN,cAAgB,GAMtBhmN,EAAMimN,gBAAkB,CACpBJ,SAAU,0BACVK,MAAO,sCACPphK,IAAK,4BACL3lC,KAAM,6BACNgnM,QAAS,qCACTC,WAAY,iCACZ7rN,OAAQ,+BACR8rN,OAAQ,4BACR/mK,UAAW,4CACXyvC,UAAW,wCACXu3H,YAAa,4DACb/4I,MAAO,4CACP53D,IAAK,kDACLmD,IAAK,qDACLs+D,MAAO,gCACPmvI,IAAK,qCACLnnM,QAAS,wCACTonM,QAAS,qCAEc,qBAAhBxmN,EAAMkkD,QACblkD,EAAMkkD,MAAQ,IAElBlkD,EAAM+W,KAAO,IAAI,OAAK,gBAAiB/W,EAAMimN,gBAAiBjmN,EAAM8W,QAChE9W,EAAM8W,QACN9W,EAAMymN,aAEV,QAAa7iL,GAAG,uBAAwB5jC,EAAM0mN,kBAAmB1mN,GACjED,EAA6B,kBAAZA,EAAuB,gBAAOA,EAASqK,UAAYrK,EAE/C,MAAjBC,EAAMD,QASV,OARIC,EAAMD,QAAQoH,aAAa,aAAc,IACzCnH,EAAM2mN,cAAgB,gBAAU3mN,EAAM+lN,YAAa/lN,EAAMD,SACzDC,EAAM4mN,mBACN5mN,EAAMkQ,aAKHlQ,EA4oBX,IAAI6mN,EAuIJ,OAl1BA1qN,EAAUspN,EAAejmN,GAiEzBqnN,EAAkBpB,EASlBA,EAAc3oN,UAAUgqN,SAAW,SAAU5rN,EAAMgpD,GAC3ChpD,IAEItE,KAAKstD,MAAMvnD,eAAezB,GAC1B,eAAOtE,KAAKstD,MAAM,GAAKhpD,GAAOgpD,EAAO,IAGrCttD,KAAKstD,MAAM,GAAKhpD,GAAQgpD,IAYpCuhK,EAAc3oN,UAAUiqN,YAAc,SAAU7rN,EAAMgpD,GAClD,GAAKhpD,GAASgpD,EAGT,GAAIttD,KAAKstD,MAAM,GAAKhpD,KAAUgpD,SACxBttD,KAAKstD,MAAM,GAAKhpD,OAEtB,IAAK,eAAkBtE,KAAKstD,MAAM,GAAKhpD,IAASgpD,GAMjD,OALA,IAAK,IAAIvmD,EAAI,EAAGA,EAAIumD,EAAM5mD,OAAQK,WACvB/G,KAAKstD,MAAM,GAAKhpD,GAAMgpD,EAAMvoD,SAASgC,EAAEuQ,mBAPlDtX,KAAKstD,MAAQ,IAsBrBuhK,EAAc3oN,UAAUkqN,SAAW,SAAUjqF,GACzC,IAAI74E,EAAQ5nD,OAAOoV,KAAK9a,KAAKstD,OAC7B,GAAI64E,GAAY74E,EAAM5mD,OAGlB,OAFA1G,KAAKqwN,cAAclqF,IAEiB,IAA7B74E,EAAMvjD,QAAQo8H,IAEP,IAF2BnmI,KAAK+uN,WAAW31L,QAAO,SAAUb,GACtE,OAAOA,EAAKj0B,OAAS6hI,KACtBz/H,OAGH1G,KAAK+uN,WAAa,GAClB,IAAK,IAAIt7M,EAAK,EAAG68M,EAAUhjK,EAAO75C,EAAK68M,EAAQ5pN,OAAQ+M,IAAM,CACzD,IAAI88M,EAASD,EAAQ78M,GACrBzT,KAAKqwN,cAAcE,GAEvB,OAAkC,IAA3BvwN,KAAK+uN,WAAWroN,QAS/BmoN,EAAc3oN,UAAU2hD,MAAQ,WAC5B7nD,KAAKmJ,QAAQ0+C,QACb7nD,KAAKwwN,aAST3B,EAAc3oN,UAAUuqN,gBAAkB,SAAUnsN,GAEhD,OADAtE,KAAK0d,aAAgB,eAAD,CAAQ,UAAYpZ,EAAO,KAAMtE,KAAKmJ,SACnDnJ,KAAK0d,cAQhBmxM,EAAc3oN,UAAUgS,QAAU,WAC9BlY,KAAK6nD,QACL7nD,KAAKma,eACLna,KAAKstD,MAAQ,GAEb,IADA,IAAImV,EAAW,gBAAU,IAAMziE,KAAKoiB,WAAa,MAAQpiB,KAAK0wN,WAAY1wN,KAAKmJ,SACtEsK,EAAK,EAAG26L,EAAa3rI,EAAUhvD,EAAK26L,EAAW1nM,OAAQ+M,IAAM,CAClE,IAAItK,EAAUilM,EAAW36L,GACzB,eAAOtK,GAEXP,EAAO1C,UAAUgS,QAAQ7O,KAAKrJ,MAC9BA,KAAKkvN,YAAc,KACnB,QAAaz0K,IAAI,uBAAwBz6C,KAAK8vN,oBASlDjB,EAAc3oN,UAAUyU,kBAAoB,SAAUC,EAASC,GAC3D,IAAK,IAAIpH,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAKF,GAAUnH,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC9D,IAAIsH,EAAOnR,EAAG6J,GACd,OAAQsH,GACJ,IAAK,SACD/a,KAAK6vN,aACL,SAQhBhB,EAAc3oN,UAAU2pN,WAAa,WACjC,IAAK,IAAIp8M,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAK9a,KAAKqvN,iBAAkB57M,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC3E,IAAI5P,EAAM+F,EAAG6J,GACbzT,KAAKmgB,KAAK2P,UAAU9vB,KAAKkgB,QACzB,IAAI/B,EAAQne,KAAKmgB,KAAKC,YAAYvc,GAClC7D,KAAKovN,cAAc,GAAKvrN,GAAOsa,IAOvC0wM,EAAc3oN,UAAUsU,cAAgB,WACpC,MAAO,iBAOXq0M,EAAc3oN,UAAU4pN,kBAAoB,SAAUtkM,GAClDxrB,KAAKkgB,OAASsL,EAAKtL,OACnBlgB,KAAK6vN,cAOThB,EAAc3oN,UAAU8U,QAAU,WAC9Bhb,KAAKma,eACLna,KAAK+vN,cAAgB,gBAAU/vN,KAAKmvN,YAAanvN,KAAKmJ,SACtDnJ,KAAKsZ,cAETu1M,EAAc3oN,UAAUsqN,UAAY,WAChCxwN,KAAK+uN,WAAa,GAClB/uN,KAAK8uN,UAAY,GAEjB,IADA,IAAIrsJ,EAAW,gBAAUziE,KAAKmvN,YAAanvN,KAAKmJ,SACvCsK,EAAK,EAAGk9M,EAAaluJ,EAAUhvD,EAAKk9M,EAAWjqN,OAAQ+M,IAAM,CAClE,IAAItK,EAAUwnN,EAAWl9M,GACrB5O,EAAQsE,EACZtE,EAAM2L,gBAAgB,gBACtB,IAAIogN,EAAc/rN,EAAMuiB,cACpBypM,EAAcD,EAAYxpM,cAC1BwpM,EAAY5lN,UAAUkB,SAAS,sBAAwB0kN,EAAY5lN,UAAUkB,SAAS,cAAiBrH,EAAMmG,UAAUkB,SAAS,YAAc0kN,EAAY5lN,UAAUkB,SAAS,iBAC7K0kN,EAAY5lN,UAAUC,OAAOjL,KAAKoiB,YAEb,MAAfyuM,IAAyBA,EAAY7lN,UAAUkB,SAAS,sBAAwB2kN,EAAY7lN,UAAUkB,SAAS,cACrH2kN,EAAY7lN,UAAUC,OAAOjL,KAAKoiB,YAGlCvd,EAAMmG,UAAUC,OAAOjL,KAAKoiB,YAE5Bvd,EAAMP,KAAKoC,OAAS,IACpB1G,KAAKywN,gBAAgB5rN,EAAMP,MAC3BtE,KAAK8wN,gBAAgBjsN,EAAMP,MAC3BtE,KAAK+wN,YAAYlsN,EAAMP,OAEvBssN,EAAY5lN,UAAUkB,SAAS,sBAAwB0kN,EAAY5lN,UAAUkB,SAAS,cAAiBrH,EAAMmG,UAAUkB,SAAS,YAAc0kN,EAAY5lN,UAAUkB,SAAS,iBAC7K0kN,EAAY5lN,UAAUC,OAAOjL,KAAK0wN,YAEb,MAAfG,IAAyBA,EAAY7lN,UAAUkB,SAAS,sBAAwB2kN,EAAY7lN,UAAUkB,SAAS,cACrH2kN,EAAY7lN,UAAUC,OAAOjL,KAAK0wN,YAGlC7rN,EAAMmG,UAAUC,OAAOjL,KAAK0wN,cAIxC7B,EAAc3oN,UAAU8pN,iBAAmB,WAMvC,IALA,IAAIgB,EAAW,CAAC,WAAY,iBAAkB,QAAS,cAAe,YAAa,YAAa,UAAW,SACvG,UAAW,oBAAqB,OAAQ,kBAAmB,MAAO,MAAO,QAAS,UAAW,yBAC7F,yBAA0B,yBAA0B,qBAAsB,yBAA0B,sBACpG,sBAAuB,kBACvBC,EAAgB,CAAC,SAAU,QAAS,MAAO,OAAQ,SAAU,OACxDx9M,EAAK,EAAG7J,EAAM5J,KAAkB,cAAGyT,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAI9D,IAHA,IAAI5O,EAAQ+E,EAAG6J,GAEXy9M,EAAU,GACLrnN,EAAK,EAAGsnN,EAAaH,EAAUnnN,EAAKsnN,EAAWzqN,OAAQmD,IAAM,CAClE,IAAIunN,EAAOD,EAAWtnN,GACtB,GAAiC,OAA7BhF,EAAMyL,aAAa8gN,GACnB,OAAQA,GACJ,IAAK,WACDpxN,KAAKqxN,QAAQxsN,EAAOqsN,EAASE,EAAMvsN,EAAMoqN,UACzC,MACJ,IAAK,kBACDmC,EAAOvsN,EAAMyL,aAAa8gN,GAC1BpxN,KAAKqxN,QAAQxsN,EAAOqsN,EAASE,GAAM,GACnC,MACJ,IAAK,QAC0C,IAAvCH,EAAclnN,QAAQlF,EAAMuP,OAC5BpU,KAAKqxN,QAAQxsN,EAAOqsN,EAASrsN,EAAMuP,MAAM,GAE7C,MACJ,IAAK,cACL,IAAK,QACDpU,KAAKqxN,QAAQxsN,EAAOqsN,EAASE,EAAMt7J,KAAKjgC,MAAMhxB,EAAMyL,aAAa8gN,KACjE,MACJ,IAAK,UAEG,IAAIlgN,EAAKrM,EAAMyL,aAAa8gN,GAC5BpxN,KAAKqxN,QAAQxsN,EAAOqsN,EAASE,EAAMlgN,GAEvC,MACJ,QAC2C,SAAnCrM,EAAMyL,aAAa,YACnBtQ,KAAKsxN,eAAezsN,EAAOqsN,EAASE,EAAMvsN,EAAMyL,aAAa8gN,IAG7DpxN,KAAKqxN,QAAQxsN,EAAOqsN,EAASE,EAAMvsN,EAAMyL,aAAa8gN,KAMtC,IAAhC1rN,OAAOoV,KAAKo2M,GAASxqN,QACrB1G,KAAKkwN,SAASrrN,EAAMP,KAAM4sN,KAItCrC,EAAc3oN,UAAUorN,eAAiB,SAAUzsN,EAAO0sN,EAASC,EAAUrzM,GACzE,IAAImzM,EAAiBE,EAASnxN,MAAM,KAChCoxN,EAAY,CAAC,WAAY,aAAc,QAAS,YAAa,YAAa,QAAS,QAAS,WAC5FC,EAAgBJ,EAAeA,EAAe5qN,OAAS,GACvDirN,EAAiBL,EAAeA,EAAe5qN,OAAS,GAC5D,IAA0C,IAAtC+qN,EAAU1nN,QAAQ2nN,GAClB,OAAQA,GACJ,IAAK,WACD1xN,KAAKqxN,QAAQxsN,EAAO0sN,EAAS,WAAYpzM,GACzC,MACJ,IAAK,aACDne,KAAKqxN,QAAQxsN,EAAO0sN,EAAS,aAAcpzM,GAC3C,MACJ,IAAK,QACDne,KAAKqxN,QAAQxsN,EAAO0sN,EAAS,MAAOpzM,GACpC,WAGP,IAA2C,IAAvCszM,EAAU1nN,QAAQ4nN,GACvB,OAAQA,GACJ,IAAK,YACD3xN,KAAKqxN,QAAQxsN,EAAO0sN,EAAS,YAAapzM,GAC1C,MACJ,IAAK,YACDne,KAAKqxN,QAAQxsN,EAAO0sN,EAAS,YAAapzM,GAC1C,MACJ,IAAK,QAEG,IAAIyzM,EAAW/sN,EAAMyL,aAAa,sBAC9BuhN,EAAWhtN,EAAMyL,aAAa,sBAClCtQ,KAAKqxN,QAAQxsN,EAAO0sN,EAAS,QAAS,CAACK,EAAUC,IAErD,MACJ,IAAK,UAEG,IAAI3gN,EAAKrM,EAAMyL,aAAakhN,GAAUnxN,MAAM,KAC5CL,KAAKqxN,QAAQxsN,EAAO0sN,EAAS,UAAWrgN,EAAGA,EAAGxK,OAAS,IAE3D,MACJ,IAAK,QACD1G,KAAKqxN,QAAQxsN,EAAO0sN,EAAS,QAASpzM,GACtC,QAIhB0wM,EAAc3oN,UAAUmrN,QAAU,SAAUxsN,EAAO0sN,EAASC,EAAUrzM,GAClE,IAEI2zM,EAFAC,EAAUltN,EAAMyL,aAAa,QAAUkhN,EAAW,YAClDQ,EAAoBntN,EAAMyL,aAAa,YAAckhN,GAErDxxN,KAAKstD,MAAMzoD,EAAMP,OAAsB,mBAAbktN,GAA8C,WAAbA,IAC3DxxN,KAAKywN,gBAAgB5rN,EAAMP,MAC3BwtN,EAAgB9xN,KAAKiyN,gBAAgBjyN,KAAKstD,MAAMzoD,EAAMP,MAAM,GAAKktN,GAAWA,IAE5EO,EACA5zM,EAAQ,CAACA,EAAO4zM,GAEXC,EACL7zM,EAAQ,CAACA,EAAO6zM,GAEXF,IACL3zM,EAAQ,CAACA,EAAO2zM,IAEpBP,EAAQ,GAAKC,GAAYrzM,GAG7B0wM,EAAc3oN,UAAUoT,WAAa,WACjC,IAAK,IAAI7F,EAAK,EAAG7J,EAAM5J,KAAkB,cAAGyT,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC9D,IAAI5O,EAAQ+E,EAAG6J,GACXw8M,EAAgBiC,YAAYrtN,GAC5B,OAAa6M,IAAI7M,EAAO,QAAS7E,KAAKmgE,aAAcngE,MAE7B,WAAlB6E,EAAMyQ,QACX,OAAa5D,IAAI7M,EAAO,SAAU7E,KAAKqnE,cAAernE,OAGtD,OAAa0R,IAAI7M,EAAO,WAAY7E,KAAKy/F,gBAAiBz/F,MAC1D,OAAa0R,IAAI7M,EAAO,QAAS7E,KAAKqgG,aAAcrgG,OAG5D,OAAa0R,IAAI1R,KAAKmJ,QAAS,SAAUnJ,KAAKmyN,cAAenyN,MAC7D,OAAa0R,IAAI1R,KAAKmJ,QAAS,QAASnJ,KAAK6jB,aAAc7jB,OAG/D6uN,EAAc3oN,UAAUiU,aAAe,WACnC,IAAK,IAAI1G,EAAK,EAAG7J,EAAM5J,KAAkB,cAAGyT,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC9D,IAAI5O,EAAQ+E,EAAG6J,GACf,OAAa2+M,YAAYvtN,GAE7B,OAAaoG,OAAOjL,KAAKmJ,QAAS,SAAUnJ,KAAKmyN,eACjD,OAAalnN,OAAOjL,KAAKmJ,QAAS,QAASnJ,KAAK6jB,eAGpDgrM,EAAc3oN,UAAUu5F,gBAAkB,SAAU1sF,GAChD/S,KAAK6N,QAAQ,WAAYkF,GAEzB,IAAI5J,EAAU4J,EAAEzM,OACZtG,KAAKstD,MAAMnkD,EAAQ7E,QACftE,KAAKstD,MAAMnkD,EAAQ7E,MAAMtE,KAAKivN,WAAa9lN,EAAQgV,MAAMzX,OAAS,EAClE1G,KAAKowN,SAASjnN,EAAQ7E,OAEyB,IAA1CtE,KAAK8uN,UAAU/kN,QAAQZ,EAAQ7E,OACpCtE,KAAK8uN,UAAU78M,KAAK9I,EAAQ7E,QAKxCuqN,EAAc3oN,UAAUm6F,aAAe,SAAUttF,GAC7C/S,KAAK6N,QAAQ,QAASkF,GACtB,IAAI5J,EAAU4J,EAAEzM,OAEZ+rN,EAAc,CAAC,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,GAAI,IAAK,MACpD,IAAZt/M,EAAEi4E,OAAiBhrF,KAAKstD,MAAMnkD,EAAQ7E,SAAUtE,KAAKstD,MAAMnkD,EAAQ7E,OAAUtE,KAAKstD,MAAMnkD,EAAQ7E,MAAMtE,KAAKivN,cAGjE,IAA1CjvN,KAAK8uN,UAAU/kN,QAAQZ,EAAQ7E,OAAgBtE,KAAKstD,MAAMnkD,EAAQ7E,QAA2C,IAAlC+tN,EAAYtoN,QAAQgJ,EAAEi4E,QACjGhrF,KAAKowN,SAASjnN,EAAQ7E,OAI9BuqN,EAAc3oN,UAAUi6D,aAAe,SAAUptD,GAC7C/S,KAAK6N,QAAQ,QAASkF,GACtB,IAAI5J,EAAU4J,EAAEzM,OAEK,WAAjB6C,EAAQiL,KACRpU,KAAKowN,SAASjnN,EAAQ7E,MAE0B,OAA3C6E,EAAQmH,aAAa,oBAE1BtQ,KAAKgvN,aAAc,IAI3BH,EAAc3oN,UAAUmhE,cAAgB,SAAUt0D,GAC9C/S,KAAK6N,QAAQ,SAAUkF,GACvB,IAAI5J,EAAU4J,EAAEzM,OAChBtG,KAAKowN,SAASjnN,EAAQ7E,OAG1BuqN,EAAc3oN,UAAUisN,cAAgB,SAAUp/M,GAC9C/S,KAAK6N,QAAQ,SAAUkF,GAGlB/S,KAAKgvN,aAAgBhvN,KAAKowN,WAI3BpwN,KAAKgvN,aAAc,EAHnBj8M,EAAE6F,kBAOVi2M,EAAc3oN,UAAU2d,aAAe,WACnC7jB,KAAKwwN,aAGT3B,EAAc3oN,UAAUmqN,cAAgB,SAAU/rN,GAC9C,GAAKtE,KAAKstD,MAAM,GAAKhpD,GAArB,CAGA,IAAIgpD,EAAQ5nD,OAAOoV,KAAK9a,KAAKstD,MAAM,GAAKhpD,IACpCguN,GAAa,EACbC,GAAqB,EACrBC,EAAQllK,EAAMvjD,QAAQ,kBACtB0oN,EAAOnlK,EAAMvjD,QAAQ,UAQzB,GAPA/J,KAAKywN,gBAAgBnsN,IACP,IAAVmuN,IACAH,GAAa,IAEF,IAAXE,IACAD,GAAqB,IAEpBD,GAAeA,GAAcC,EAAlC,EACmB,IAAXC,GACAllK,EAAMh7C,OAAOkgN,EAAO,IAEV,IAAVC,GACAnlK,EAAMh7C,OAAQmgN,EAAO,EAAI,GAE7BzyN,KAAK8wN,gBAAgBxsN,GACrB,IAAK,IAAImP,EAAK,EAAGi/M,EAAUplK,EAAO75C,EAAKi/M,EAAQhsN,OAAQ+M,IAAM,CACzD,IAAI29M,EAAOsB,EAAQj/M,GACfk/M,EAAe3yN,KAAKiyN,gBAAgBjyN,KAAKstD,MAAM,GAAKhpD,GAAM,GAAK8sN,GAAOA,GACtEwB,EAAY,CAAEtuN,KAAMA,EAAMytN,QAASY,GACnC5mM,EAAY,CACZ8mM,UAAWvuN,EACX6E,QAASnJ,KAAK0d,aACdq0M,QAASY,GAEb,IAAK3yN,KAAK8yN,QAAQxuN,EAAM8sN,KAAUpxN,KAAK0d,aAAa1S,UAAUkB,SAASlM,KAAK+yN,QAAS,CACjF/yN,KAAKgzN,iBAAiB1uN,GACtBtE,KAAK+uN,WAAW98M,KAAK2gN,GAErB5yN,KAAK0d,aAAanN,aAAa,eAAgB,QAC/CvQ,KAAK0d,aAAanN,aAAa,mBAAoBvQ,KAAK0d,aAAaxM,GAAK,SAC1E,IAAI0/M,EAAc5wN,KAAK0d,aAAa0J,cAChCypM,EAAcD,EAAYxpM,cAC1BwpM,EAAY5lN,UAAUkB,SAAS,sBAAwB0kN,EAAY5lN,UAAUkB,SAAS,cAAiBlM,KAAK0d,aAAa1S,UAAUkB,SAAS,YAAc0kN,EAAY5lN,UAAUkB,SAAS,kBACzL0kN,EAAY5lN,UAAU0G,IAAI1R,KAAKoiB,YAC/BwuM,EAAY5lN,UAAUC,OAAOjL,KAAK0wN,aAEb,MAAfG,IAAyBA,EAAY7lN,UAAUkB,SAAS,sBAAwB2kN,EAAY7lN,UAAUkB,SAAS,eACrH2kN,EAAY7lN,UAAU0G,IAAI1R,KAAKoiB,YAC/ByuM,EAAY7lN,UAAUC,OAAOjL,KAAK0wN,cAGlC1wN,KAAK0d,aAAa1S,UAAU0G,IAAI1R,KAAKoiB,YACrCpiB,KAAK0d,aAAa1S,UAAUC,OAAOjL,KAAK0wN,aAEvC1wN,KAAKkvN,YAINlvN,KAAKizN,YAAYL,GAHjB5yN,KAAKkzN,mBAAmB5uN,EAAMsuN,EAAUb,QAAS/xN,KAAK0d,cAK1DqO,EAAUonM,aAAenzN,KAAKkvN,YAC9BnjM,EAAU+gC,OAAS,UACf8jK,EAAY5lN,UAAUkB,SAAS,sBAAwB0kN,EAAY5lN,UAAUkB,SAAS,cAAiBlM,KAAK0d,aAAa1S,UAAUkB,SAAS,YAAc0kN,EAAY5lN,UAAUkB,SAAS,kBACzL0kN,EAAY5lN,UAAU0G,IAAI1R,KAAKoiB,YAC/BwuM,EAAY5lN,UAAUC,OAAOjL,KAAK0wN,aAEb,MAAfG,IAAyBA,EAAY7lN,UAAUkB,SAAS,sBAAwB2kN,EAAY7lN,UAAUkB,SAAS,eACrH2kN,EAAY7lN,UAAU0G,IAAI1R,KAAKoiB,YAC/ByuM,EAAY7lN,UAAUC,OAAOjL,KAAK0wN,cAGlC1wN,KAAK0d,aAAa1S,UAAU0G,IAAI1R,KAAKoiB,YACrCpiB,KAAK0d,aAAa1S,UAAUC,OAAOjL,KAAK0wN,aAE5C1wN,KAAKozN,yBAAyB9uN,EAAMynB,GACpC/rB,KAAK6N,QAAQ,qBAAsBke,GAEtB,aAATqlM,GACApxN,KAAK0d,aAAanN,aAAa,gBAAiB,QAEpD,MAGAvQ,KAAK+wN,YAAYzsN,GACjBynB,EAAU+gC,OAAS,UACnB9sD,KAAK6N,QAAQ,qBAAsBke,OASnD8iM,EAAc3oN,UAAUktN,yBAA2B,SAAU9uN,EAAM+uN,GAC1DrzN,KAAKstD,MAAM,GAAKhpD,GAAMtE,KAAKivN,WAAcjvN,KAAK0d,aAAaS,MAAMzX,QAAW,eAAkB1G,KAAKkvN,eACpGlvN,KAAKkvN,YAAYx+M,UAAY1Q,KAAK0d,aAAaS,MAC/Cne,KAAKkvN,YAAY3+M,aAAa,eAAgB,SAC9C8iN,EAAMvmK,OAAS,GACf9sD,KAAK+wN,YAAYzsN,KAIzBuqN,EAAc3oN,UAAU4sN,QAAU,SAAUxuN,EAAM8sN,GAC9C,IAAI75K,EAASv3C,KAAKstD,MAAM,GAAKhpD,GAAM,GAAK8sN,GACpCkC,EAAS/7K,aAAkB1xC,OAA8B,kBAAd0xC,EAAO,GAAmBA,EAAO,GAAKA,EACjFg8K,EAAcvzN,KAAKstD,MAAM,GAAKhpD,GAAM,GAAK8sN,GACzC5lM,EAAO,CAAErN,MAAOne,KAAK0d,aAAaS,MAAOm1M,MAAOA,EAAOnqN,QAASnJ,KAAK0d,aAAcoG,YAAa9jB,KAAKmJ,SAEzG,GADAnJ,KAAK6N,QAAQ,kBAAmB2d,IAC3BA,EAAK8nM,OAAkB,aAATlC,EACf,OAAO,EAEX,GAAImC,GAAyC,oBAAnBA,EAAY,GAAmB,CACrD,IAAIthK,EAAKshK,EAAY,GACrB,OAAOthK,EAAG5oD,KAAKrJ,KAAM,CAAEmJ,QAASnJ,KAAK0d,aAAcS,MAAOne,KAAK0d,aAAaS,QAE3E,OAAI8xM,EAAgBiC,YAAYlyN,KAAK0d,cACzB,aAAT0zM,GAGG,gBAAU,eAAiB9sN,EAAO,aAActE,KAAKmJ,SAASzC,OAAS,EAGvEupN,EAAgBuD,eAAe,GAAKpC,GAAM5lM,IAIzDqjM,EAAc3oN,UAAU+rN,gBAAkB,SAAUwB,EAAWrC,GAC3D,IAAIW,EAAU/xN,KAAK0d,aAAapN,aAAa,QAAU8gN,EAAO,YAC1DpxN,KAAK0d,aAAapN,aAAa,QAAU8gN,EAAO,YAC/CqC,aAAqB5tN,OAAiC,kBAAjB4tN,EAAU,GAAmBA,EAAU,GAC7B,IAA3C/tN,OAAOoV,KAAK9a,KAAKovN,eAAe1oN,OAAgB1G,KAAKovN,cAAc,GAAKgC,GAAQpxN,KAAKqvN,gBAAgB,GAAK+B,GAC/GsC,EAAU3B,EAAQjtN,MAAM,WAC5B,IAAK,eAAkB4uN,GACnB,IAAK,IAAI3sN,EAAI,EAAGA,EAAI2sN,EAAQhtN,OAAQK,IAAK,CACrC,IAAIoX,EAAQs1M,aAAqB5tN,MAAQ4tN,EAAU1uN,SAASgC,EAAEuQ,aAAem8M,EAC7E1B,EAAUA,EAAQxxM,QAAQmzM,EAAQ3uN,SAASgC,EAAEuQ,aAAc6G,GAGnE,OAAO4zM,GAGXlD,EAAc3oN,UAAUgtN,mBAAqB,SAAU5uN,EAAMytN,EAASltN,GAClE,IAAIsuN,EAAe,eAAcnzN,KAAKmzN,aAAc,CAChD7oN,UAAWtK,KAAKoiB,WAChB1R,UAAWqhN,EACXn9M,MAAO,CAAEurF,IAAK77F,KAUlB,GAPItE,KAAK2zN,cAAgBpF,EAAYqF,UACjCT,EAAanoN,UAAUC,OAAOjL,KAAKoiB,YACnC+wM,EAAanoN,UAAU0G,IAAI,aAC3ByhN,EAAe,eAAcnzN,KAAK6zN,eAAgB,CAAEvpN,UAAWtK,KAAKoiB,WAAY1R,UAAWyiN,EAAa1mM,aAE5G0mM,EAAajiN,GAAKlR,KAAK0d,aAAapZ,KAAO,QAEvCtE,KAAKmJ,QAAQ2I,cAAc,qBAAuBjN,EAAMqM,GAAK,MAC7DlR,KAAKmJ,QAAQ2I,cAAc,qBAAuBjN,EAAMqM,GAAK,MAAM1G,YAAY2oN,QAE9E,IAAmD,IAA/CtuN,EAAM0oB,aAAa,wBAAkC,CAE1D,IAAIumM,EAAcjvN,EAAMyL,aAAa,wBACjCyjN,EAAa,gBAAO,IAAMD,EAAa9zN,KAAKmJ,SAChD4qN,EAAWvpN,YAAY2oN,QAEtB,GAA4B,MAAxBnzN,KAAKg0N,gBAEVh0N,KAAKg0N,gBAAgB3qN,KAAKrJ,KAAMA,KAAK0d,aAAcy1M,OAElD,CACD,IAAIvC,EAAc5wN,KAAK0d,aAAa0J,cAChCypM,EAAcD,EAAYxpM,cAC1BwpM,EAAY5lN,UAAUkB,SAAS,sBAAwB0kN,EAAY5lN,UAAUkB,SAAS,aACtF2kN,EAAY5lM,aAAakoM,EAAcvC,EAAYqD,aAE9CpD,EAAY7lN,UAAUkB,SAAS,sBAAwB2kN,EAAY7lN,UAAUkB,SAAS,aAC3F2kN,EAAYzpM,cAAc6D,aAAakoM,EAActC,EAAYoD,aAGjErD,EAAY3lM,aAAakoM,EAAcnzN,KAAK0d,aAAau2M,aAGjEd,EAAaxmN,MAAMC,QAAU,QAC7B5M,KAAK8wN,gBAAgBxsN,GACrBtE,KAAK8uN,UAAU78M,KAAK3N,GACpBtE,KAAKk0N,cAAc5vN,IAGvBuqN,EAAc3oN,UAAU4qN,gBAAkB,SAAUxsN,GAKhD,OAJAtE,KAAKkvN,YAAc,gBAAOlvN,KAAKmzN,aAAe,IAAMnzN,KAAKoiB,WAAYpiB,KAAK0d,aAAa0J,eAClFpnB,KAAKkvN,cACNlvN,KAAKkvN,YAAc,gBAAOlvN,KAAKmzN,aAAe,IAAMnzN,KAAKoiB,WAAa,SAAW9d,EAAO,KAAMtE,KAAKmJ,UAEhGnJ,KAAKkvN,aAGhBL,EAAc3oN,UAAU8sN,iBAAmB,SAAU1uN,GACjD,IAAK,IAAIyC,EAAI,EAAGA,EAAI/G,KAAK+uN,WAAWroN,OAAQK,IAAK,CAC7C,IAAIqqN,EAAOpxN,KAAK+uN,WAAWhqN,SAASgC,EAAEuQ,aAClC85M,EAAK9sN,OAASA,GACdtE,KAAK+uN,WAAWz8M,OAAOvL,EAAG,KAKtC8nN,EAAc3oN,UAAU+sN,YAAc,SAAUL,GAC5C5yN,KAAKkvN,YAAYviN,MAAMC,QAAU,QACjC5M,KAAKkvN,YAAYx+M,UAAYkiN,EAAUb,QACvC/xN,KAAKk0N,cAActB,EAAUtuN,OAGjCuqN,EAAc3oN,UAAU6qN,YAAc,SAAUzsN,GAC5C,GAAItE,KAAKkvN,YAAa,CAClBlvN,KAAKkvN,YAAYviN,MAAMC,QAAU,OACjC5M,KAAKgzN,iBAAiB1uN,GACtB,IAAIssN,EAAc5wN,KAAK0d,aAAa0J,cAChCypM,EAAcD,EAAYxpM,cAC1BwpM,EAAY5lN,UAAUkB,SAAS,sBAAwB0kN,EAAY5lN,UAAUkB,SAAS,cAAiBlM,KAAK0d,aAAa1S,UAAUkB,SAAS,YAAc0kN,EAAY5lN,UAAUkB,SAAS,kBACzL0kN,EAAY5lN,UAAU0G,IAAI1R,KAAK0wN,YAC/BE,EAAY5lN,UAAUC,OAAOjL,KAAKoiB,aAEb,MAAfyuM,IAAyBA,EAAY7lN,UAAUkB,SAAS,sBAAwB2kN,EAAY7lN,UAAUkB,SAAS,eACrH2kN,EAAY7lN,UAAU0G,IAAI1R,KAAK0wN,YAC/BG,EAAY7lN,UAAUC,OAAOjL,KAAKoiB,cAGlCpiB,KAAK0d,aAAa1S,UAAU0G,IAAI1R,KAAK0wN,YACrC1wN,KAAK0d,aAAa1S,UAAUC,OAAOjL,KAAKoiB,aAE5CpiB,KAAK0d,aAAanN,aAAa,eAAgB,WAIvDs+M,EAAc3oN,UAAUguN,cAAgB,SAAU5vN,GACzCtE,KAAKstD,MAAM,GAAKhpD,GAAMtE,KAAKivN,WAAcjvN,KAAK0d,aAAaS,MAAMzX,QAAW,eAAkB1G,KAAKkvN,eACpGlvN,KAAKkvN,YAAYx+M,UAAY1Q,KAAK0d,aAAaS,MAC/Cne,KAAKkvN,YAAY3+M,aAAa,eAAgB,SAC9CvQ,KAAK+wN,YAAYzsN,KAIzBuqN,EAAcqD,YAAc,SAAUrtN,GAClC,IAAIsvN,EAAYtvN,EAAMyL,aAAa,QACnC,OAAO6jN,IAA4B,aAAdA,GAA0C,UAAdA,GAAuC,WAAdA,IAI9EtF,EAAc2E,eAAiB,CAC3BvE,SAAU,SAAU15L,GAChB,OAAQpU,MAAM9C,KAAKwX,MAAMN,EAAOpX,QAAqDoX,EAAOpX,MAAM7G,WAAW5Q,OAAS,GAA3Eya,MAAM,IAAI9C,KAAKkX,EAAOpX,OAAOO,YAE5E4wM,MAAO,SAAU/5L,GACb,OAAOirD,EAAMguI,MAAMtrM,KAAKqS,EAAOpX,QAEnC+vC,IAAK,SAAU34B,GACX,OAAOirD,EAAM0yC,IAAIhwG,KAAKqS,EAAOpX,QAEjCoxM,QAAS,SAAUh6L,GACf,OAAOirD,EAAMiuI,SAASvrM,KAAKqS,EAAOpX,QAEtCwxM,IAAK,SAAUp6L,GACX,OAAOirD,EAAMmuI,MAAMzrM,KAAKqS,EAAOpX,QAEnCqxM,WAAY,SAAUj6L,GAClB,OAAOirD,EAAMouI,WAAW1rM,KAAKqS,EAAOpX,QAExCxa,OAAQ,SAAU4xB,GACd,OAAQpU,MAAMuxB,OAAOnd,EAAOpX,UAA0C,IAA/BoX,EAAOpX,MAAMpU,QAAQ,MAEhE0lN,OAAQ,SAAUl6L,GACd,OAAOirD,EAAMkuI,OAAOxrM,KAAKqS,EAAOpX,QAEpCuqC,UAAW,SAAUnzB,GACjB,OAAOA,EAAOpX,MAAMzX,QAAU6uB,EAAO+9L,OAEzCn7H,UAAW,SAAU5iE,GACjB,OAAOA,EAAOpX,MAAMzX,QAAU6uB,EAAO+9L,OAEzC5D,YAAa,SAAUn6L,GACnB,IAAI+9L,EAAQ/9L,EAAO+9L,MACnB,OAAO/9L,EAAOpX,MAAMzX,QAAU4sN,EAAM,IAAM/9L,EAAOpX,MAAMzX,QAAU4sN,EAAM,IAE3E38I,MAAO,SAAUphD,GACb,IAAI+9L,EAAQ/9L,EAAO+9L,MACnB,OAAQnyM,MAAMuxB,OAAOnd,EAAOpX,SAAWu0B,OAAOnd,EAAOpX,QAAUm1M,EAAM,IAAM5gL,OAAOnd,EAAOpX,QAAUm1M,EAAM,IAE7G/qM,KAAM,SAAUgN,GACZ,GAAK,eAAkBA,EAAO+9L,QAAqC,kBAAlB/9L,EAAY,OAAmC,KAAjBA,EAAO+9L,MAOlF,OAAQnyM,MAAM,IAAI9C,KAAKkX,EAAOpX,OAAOO,WANrC,IAAIuB,EAAY,IAAI,OAChBqI,EAAc,CAAEtG,OAAQuT,EAAO+9L,MAAMh8M,WAAYlD,KAAM,WAAY6N,SAAU,OAC7ER,EAAYxB,EAAU2C,UAAU2S,EAAOpX,MAAOmK,GAClD,OAAS,eAAkB7G,IAAcA,aAAqBpD,OAAS8C,OAAOM,IAMtF1C,IAAK,SAAUwW,GACX,OAAKpU,MAAMuxB,OAAOnd,EAAOpX,QAKlB,IAAIE,KAAKkX,EAAOpX,OAAOO,WAAa,IAAIL,KAAKy3C,KAAKjgC,MAAMigC,KAAKsiH,UAAU7iJ,EAAO+9L,SAAS50M,WAHlF6W,EAAOpX,OAASoX,EAAO+9L,OAKvCpxM,IAAK,SAAUqT,GACX,GAAKpU,MAAMuxB,OAAOnd,EAAOpX,QAIpB,KAAqC,IAAhCoX,EAAY,MAAExrB,QAAQ,KAAa,CACzC,IAAIqqN,EAAQ7+L,EAAY,MAAEhV,QAAQ,KAAM,IACxC,OAAO7T,WAAW0nN,IAAS7+L,EAAO+9L,MAIlC,OAAO,IAAIj1M,KAAKkX,EAAOpX,OAAOO,WAAa,IAAIL,KAAKy3C,KAAKjgC,MAAMigC,KAAKsiH,UAAU7iJ,EAAO+9L,SAAS50M,UAR9F,OAAQ6W,EAAOpX,OAASoX,EAAO+9L,OAWvC9yI,MAAO,SAAUjrD,GAEb,OAAO,IAAI2e,OAAO3e,EAAO+9L,OAAOpwM,KAAKqS,EAAOpX,QAEhDyxM,QAAS,SAAUr6L,GACf,IAAI8+L,EAAY9+L,EAAOzR,YAAYhS,cAAc,IAAMyjB,EAAO+9L,OAE9D,OADA/9L,EAAO+9L,MAAQe,EAAUl2M,MAClBoX,EAAO+9L,QAAU/9L,EAAOpX,QAGvC/X,EAAW,CACP,eAAS,KACVyoN,EAAc3oN,UAAW,cAAU,GACtCE,EAAW,CACP,eAAS,aACVyoN,EAAc3oN,UAAW,cAAU,GACtCE,EAAW,CACP,kBACDyoN,EAAc3oN,UAAW,aAAS,GACrCE,EAAW,CACP,eAAS,YACVyoN,EAAc3oN,UAAW,kBAAc,GAC1CE,EAAW,CACP,eAAS,YACVyoN,EAAc3oN,UAAW,kBAAc,GAC1CE,EAAW,CACP,eAAS,UACVyoN,EAAc3oN,UAAW,oBAAgB,GAC5CE,EAAW,CACP,eAAS,QACVyoN,EAAc3oN,UAAW,sBAAkB,GAC9CE,EAAW,CACP,eAASmoN,EAAY+F,QACtBzF,EAAc3oN,UAAW,mBAAe,GAC3CE,EAAW,CACP,kBACDyoN,EAAc3oN,UAAW,gBAAY,GACxCE,EAAW,CACP,kBACDyoN,EAAc3oN,UAAW,aAAS,GACrCE,EAAW,CACP,kBACDyoN,EAAc3oN,UAAW,aAAS,GACrCE,EAAW,CACP,kBACDyoN,EAAc3oN,UAAW,cAAU,GACtCE,EAAW,CACP,kBACDyoN,EAAc3oN,UAAW,cAAU,GACtCE,EAAW,CACP,kBACDyoN,EAAc3oN,UAAW,uBAAmB,GAC/CE,EAAW,CACP,kBACDyoN,EAAc3oN,UAAW,0BAAsB,GAClDE,EAAW,CACP,kBACDyoN,EAAc3oN,UAAW,uBAAmB,GAC/C2oN,EAAgBoB,EAAkB7pN,EAAW,CACzC,QACDyoN,GACIA,EAn1BuB,CAo1BhC,S,oCC15BF,0EAGWnuM,EAAa,CAAC,eAAgB,UAAW,UAAW,WAAY,WAAY,sBAAuB,oBAAqB,YAAa,UAAW,eAAgB,YAAa,WAAY,SAAU,WACnMg6B,EAAa,GACbC,EAAW,eAAS,CAAEC,MAAOl6B,IAC7Bk6B,EAAQD,EAAS,GAAIE,EAAQF,EAAS,GAAIG,EAAYp1C,OAAOoV,KAAK+/B,GAC7EC,EAAU7oC,KAAK,eAAgB,qBAC/B,IAAK,IAAIwB,EAAK,EAAGsnC,EAAeL,EAAYjnC,EAAKsnC,EAAar0C,OAAQ+M,IAAM,CACxE,IAAIunC,EAAUD,EAAatnC,GAC3BqnC,EAAU7oC,KAAK,UAAY+oC,GAQxB,IAAIu5K,EAAkB,eAAmB,CAC5CjwN,KAAM,kBACN42C,OAAQ,CAAC,QACTN,MAAOA,EACPC,MAAOA,EACPM,MAAOL,EACPM,QAAS,WAAc,MAAO,CAAEC,OAAQr7C,KAAKq7C,SAC7C9iB,KAAM,WACF,MAAO,CACH+iB,aAAc,IAAI,OAAO,IACzBC,SAAU76B,EACV86B,OAAQd,EACRe,mBAAmB,EACnBC,oBAAoB,EACpBC,UAAW,GACXC,cAAe,GACfC,QAAS,OACTC,mBAAoB,KAG5BC,QAAS,WACL/7C,KAAKi8C,iBACLj8C,KAAKs7C,aAAaY,eAAiBl8C,KAAKs7C,aAAazqC,cACrD7Q,KAAKs7C,aAAazqC,cAAgB7Q,KAAK6Q,cACvC7Q,KAAKs7C,aAAartC,cAAgBjO,KAAKiO,cACvCjO,KAAKm8C,QAAUn8C,KAAKm8C,SAExB9iC,OAAQ,SAAUhP,GACd,IAAItI,EAAK,OAAiBsI,EAAL,OACjB+xC,EAAQ,KAIZ,OAHK,eAAkBp8C,KAAKq8C,OAAOC,WAC/BF,EAAS,OAAoCp8C,KAAKq8C,OAAOC,QAApCt8C,KAAKq8C,OAAOC,WAE9Bv6C,EAAE,SAAUq6C,IAEvBG,QAAS,CACLtuC,cAAe,SAAUuuC,GAIrB,GAHKA,IACDA,EAAgB92C,OAAOoV,KAAK9a,KAAK87C,oBAAsB,KAEvDU,EAAc91C,QAAU1G,KAAK87C,mBAC7B,IAAK,IAAIroC,EAAK,EAAGgpC,EAAkBD,EAAe/oC,EAAKgpC,EAAgB/1C,OAAQ+M,IAAM,CACjF,IAAIipC,EAAWD,EAAgBhpC,GAC3BkpC,EAAoB38C,KAAK87C,mBAAmBY,GAChD,GAAIC,GAAqBA,EAAkBj2C,OAAQ,CAC/C,IAAK,IAAIkD,EAAK,EAAGgzC,EAAsBD,EAAmB/yC,EAAKgzC,EAAoBl2C,OAAQkD,IAAM,CAC7F,IAAIizC,EAAMD,EAAoBhzC,GAC1BsO,EAAU,eAAS,mBAAoB2kC,GACvC3kC,GACA2kC,EAAIC,QAAQC,WAEZF,EAAInsC,YACJmsC,EAAInsC,UAAY,WAGjB1Q,KAAK87C,mBAAmBY,MAK/C7rC,cAAe,SAAUkK,EAAMiiC,GAC3B,IAAI5zC,EAAQpJ,KACRA,KAAK67C,SACL77C,KAAKw7C,OAAUx7C,KAAKw7C,OAAyCx7C,KAAKw7C,OAArCx7C,KAAKs7C,aAAa2B,aAE/Cj9C,KAAKs7C,cAAgBt7C,KAAKs7C,aAAaY,gBACvCl8C,KAAKs7C,aAAaY,eAAenhC,EAAMiiC,GAEvCjiC,GAAQ/a,KAAKw7C,QAAUx7C,KAAKw7C,OAAO90C,QACnChB,OAAOoV,KAAKC,GAAMtO,KAAI,SAAU5I,GAC5BuF,EAAMoyC,OAAO/uC,KAAI,SAAUga,GAClB5iB,IAAQ4iB,GAAY,cAAcvD,KAAKrf,KACpCuF,EAAMyyC,OACNzyC,EAAMkyC,aAAa4B,YAAYC,MAAM,UAAYt5C,EAAKkX,EAAKlX,KAG3DuF,EAAM+zC,MAAM,UAAYt5C,EAAKkX,EAAKlX,IAClCuF,EAAM+zC,MAAM,eAAgBpiC,EAAKlX,aAOzDw3C,OAAQ,WACJr7C,KAAKm8C,WAETwyC,MAAO,WACH,OAAO3uF,KAAKs7C,aAAaqzC,SAE7BjiE,QAAS,WACL,OAAO1sB,KAAKs7C,aAAa5uB,cAI1B8nM,EAAe,CACtBlwN,KAAM,aACNs5C,QAAS,SAAUC,GACfA,EAAIC,UAAU02K,EAAalwN,KAAMiwN,M,+SClGrC,EAA8B,WAO9B,SAASE,EAAa94L,EAAQga,GAC1B,IAAIvsC,EAAQpJ,KACZA,KAAK00N,OAAS,EACd10N,KAAK20N,UAAY,EACjB30N,KAAK40N,YAAa,EAClB50N,KAAK60N,kBAAmB,EAExB70N,KAAKqwG,OAAS,SAAUt9F,GACpB,IAAI4lC,EAAOvvC,EAAMuyB,OACbr1B,EAAS8C,EAAMiqG,UAAUyhH,mBACzBC,EAAY,gBAAazuN,EAAQ,gBACrC,IAAMqyC,EAAK0rD,kBAAmB1rD,EAAKI,gBAAoB,eAAkBg8K,IAClEA,EAAUl3M,uBAAuB,oBAAoBnX,OAAS,EACjE,OAAO,EAEX,IAAIsuN,EAAgB5rN,EAAMuyB,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,gDAC/DnB,EAAU7C,EAAO0E,UAAUkB,SAAS,gBAAkB5F,EAASyuN,EACnE,IAAK5rN,IAAawvC,EAAK0rD,iBAAmBl7F,EAAQ6B,UAAUkB,SAAS,uBACjE,OAAO,EAEX,IAEI6lD,EAFA5mD,EAAShC,EAAQkG,aACjB4lN,EAAgB9rN,EAAQ2I,cAAc,qBAAuB3I,EAAQ2I,cAAc,2BAEvF,GAAImjN,EAAe,CAQf,GANIljK,EADA5oD,EAAQ2I,cAAc,2BAChB6mC,EAAKu8K,mCAAmCD,EAAc30J,UAAUnuD,OAAQwmC,EAAKrb,SAG7Eqb,EAAKgb,eAAeshK,EAAc3kN,aAAa,iBAEzDlH,EAAMmzB,OAASw1B,EACX3oD,EAAMmzB,OAAOklH,WACb,OAAO,EAEXuzE,EAAczkN,aAAa,eAAgBnH,EAAMmzB,OAAOge,KAE5D,GAAIwX,IAAQ,eAAkBA,EAAI0zC,gBAAiB,CAC/C,GAAK,eAAkB1zC,EAAI0zC,gBAYvBuvH,EAActkN,UAAYqhD,EAAI0zC,mBAZU,CACxC,IAAI0vH,EAAWx8K,EAAKksG,sBAAsB9yF,EAAI5Z,OAC1Cp0C,EAASguD,EAAI80C,mBAAJ90C,CAAwB,eAAO,CAAE,MAASojK,GAAYpjK,GAAMpZ,EAAM,kBAC3EslJ,EAAkBtlJ,EAAK5qC,SAA2C,kBAAxBgkD,EAAkB,eAC5DmsI,EAAevlJ,EAAKs5H,eAAiBt5H,EAAKs5H,cAAcksB,eACxDxlJ,EAAKs5H,cAAcksB,cAAcpwL,SACjCkwL,GAAmBC,IACnBvlJ,EAAKgvG,kBAET,eAAeqtE,EAAejxN,GAK7B,eAAkBixN,EAAcpmL,aAAqD,IAAtComL,EAAcpmL,WAAWgnD,WACzEo/H,EAAcpmL,WAAWjiC,MAAMguE,cAAgB,aAInDq6I,EAActkN,UAAYukN,EACtBljK,EAAI3hB,WAAajnC,EAAQ+d,kBAAkBxW,UAMnD,OAJAskN,EAAcroN,MAAMvB,MAAQjC,EAAQiG,YAAc,KAClD4lN,EAAcroN,MAAMxB,OAAShC,EAAQkG,aAAe,KACpD2lN,EAAcroN,MAAMouJ,YAAc5vJ,EAAS,GAAGmM,WAAa,KAC3DqhC,EAAKxvC,QAAQqB,YAAYwqN,GAClBA,GAEXh1N,KAAKihJ,UAAY,SAAUluI,GACvB,IAAI4lC,EAAOvvC,EAAMuyB,OACjBgd,EAAKxvC,QAAQ2I,cAAc,gBAAgBnF,MAAMC,QAAU,OAC3D+rC,EAAKr5B,OAAO,QAAwB,CAAEhZ,OAAQ8C,EAAMiqG,UAAUyhH,mBAAoBv4L,OAAQnzB,EAAMmzB,OAAQjoB,MAAOvB,EAAEuB,SAErHtU,KAAKghJ,KAAO,SAAUjuI,GAClB,IAAI4lC,EAAOvvC,EAAMuyB,OACbr1B,EAASyM,EAAEzM,OACf,GAAIA,EAAQ,CACR,IAAI2F,EAAU,eAAW3F,EAAQ,WAC7B+/I,EAAej9I,EAAMuyB,OAAOxyB,QAAQ2I,cAAc,sBACtD,KAAK7F,GAAWA,EAAQqE,aAAa,QAAUqoC,EAAKxvC,QAAQmH,aAAa,SACrE,eAAU+1I,EAAc,CAAC,mBAAoB,CAAC,iBAC1C1tG,EAAK0rD,kBACL1rD,EAAKxvC,QAAQ2I,cAAc,qBAAqBnF,MAAMC,QAAU,OAChE+rC,EAAKxvC,QAAQ2I,cAAc,uBAAuBnF,MAAMC,QAAU,SAEjE+rC,EAAKK,cAAcqrD,iBACpB,OAGR1rD,EAAKr5B,OAAO,QAAmB,CAAEhZ,OAAQyM,EAAEzM,OAAQi2B,OAAQnzB,EAAMmzB,OAAQjoB,MAAOvB,EAAEuB,UAG1FtU,KAAKkhJ,SAAW,SAAUnuI,GACtB,IACIsB,EADAskC,EAAOvvC,EAAMuyB,OAEjBgd,EAAKxvC,QAAQ2I,cAAc,gBAAgBnF,MAAMC,QAAU,SACrD,gBAAamG,EAAEzM,OAAQ,kBAAoB,gBAAayM,EAAEzM,OAAQ,qBAClEqyC,EAAK0rD,iBAAmB,gBAAatxF,EAAEzM,OAAQ,kBAC/CyM,EAAEs9F,OAAO//F,aAAa,iBAAmB,gBAAayC,EAAEzM,OAAQ,sBAClE,gBAAOyM,EAAEs9F,QACTh8F,GAAS,GAEbskC,EAAKr5B,OAAO,QAAuB,CAAEhZ,OAAQyM,EAAEzM,OAAQgO,MAAOvB,EAAEuB,MAAOioB,OAAQnzB,EAAMmzB,OAAQloB,OAAQA,KAEzGrU,KAAKo1N,KAAO,SAAUriN,GAClB,IAAI4lC,EAAOvvC,EAAMuyB,OACb4e,EAAMxnC,EAAEsiN,eAAe/kN,aAAa,gBACpCrE,EAAU,eAAW8G,EAAEzM,OAAQ,WACnC,gBAAOyM,EAAEsiN,gBACLppN,GAAWA,EAAQqE,aAAa,QAAUqoC,EAAKxvC,QAAQmH,aAAa,QAClEqoC,EAAK0rD,kBAAmB1rD,EAAKI,eAGnCJ,EAAKr5B,OAAO,QAAmB,CAAEhZ,OAAQyM,EAAEzM,OAAQi0C,IAAKA,EAAK86K,eAAgBtiN,EAAEsiN,kBAEnFr1N,KAAK27B,OAASA,EACd37B,KAAK21C,eAAiBA,EACtB31C,KAAKs1N,YAAct1N,KAAK21C,eAAe0yG,WAAW,eAClDroJ,KAAKqnG,aAAernG,KAAK21C,eAAe0yG,WAAW,gBAC/CroJ,KAAK27B,OAAOkR,cAGX7sC,KAAK27B,OAAO8sE,4BACbzoG,KAAK27B,OAAOqR,GAAG,QAAgChtC,KAAKu1N,WAAYv1N,MAEpEA,KAAK27B,OAAOqR,GAAG,QAA8BhtC,KAAKw1N,cAAex1N,MACjEA,KAAK27B,OAAOqR,GAAG,QAAmBhtC,KAAKy1N,oBAAqBz1N,MACvB,aAAjCA,KAAK27B,OAAOorL,kBACZ/mN,KAAK27B,OAAOqR,GAAG,QAAiBhtC,KAAK01N,8BAA+B11N,OA4hB5E,OAphBAy0N,EAAavuN,UAAUyvN,YAAc,WACjC,IAAIrpH,EAAMtsG,KAAK27B,OAAOxyB,QAAQ2I,cAAc,IAAM,QAC9C8jN,EAAqB,MAAPtpH,EAClBA,EAAMspH,EAAatpH,EAAMtsG,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,iBACvE,IAAIurN,EAAWD,EAAatpH,EAAIx6F,cAAc,IAAM,QAChD9R,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,SAClDtK,KAAK81N,iBAAiBxpH,GACtBA,EAAI9hG,YAAYqrN,GAChB71N,KAAK+1N,SAASzpH,GACTspH,GACD51N,KAAK27B,OAAOxyB,QAAQqB,YAAY8hG,IAQxCmoH,EAAavuN,UAAU8vN,YAAc,WACjC,IAAIh0C,EAAYhiL,KAAKi2N,WACrBj0C,EAAUx3K,YAAYxK,KAAKk2N,qBAC3Bl2N,KAAKm2N,SAASn0C,EAAUlwK,cAAc,IAAM,SAC5C9R,KAAKo2N,uBACLp2N,KAAKq2N,uBACLr2N,KAAK27B,OAAOrc,OAAO,QAAwB,CAAEke,KAAMx9B,KAAKw9B,QAO5Di3L,EAAavuN,UAAU+vN,SAAW,WAC9B,OAAOj2N,KAAKs2N,aAQhB7B,EAAavuN,UAAU6vN,SAAW,SAAUQ,GACxCv2N,KAAKs2N,YAAcC,GAOvB9B,EAAavuN,UAAUswN,SAAW,WAC9B,OAAOx2N,KAAKy2N,aAQhBhC,EAAavuN,UAAUiwN,SAAW,SAAU/7J,GACxCp6D,KAAKy2N,YAAcr8J,GAOvBq6J,EAAavuN,UAAUwwN,YAAc,WACjC,OAAO12N,KAAK22N,UAQhBlC,EAAavuN,UAAU0wN,YAAc,SAAU14H,GAC3C,OAAOl+F,KAAK22N,SAAWz4H,GAO3Bu2H,EAAavuN,UAAU2wN,QAAU,WAC7B,IAAIz8J,EAAQp6D,KAAKw2N,WACjB,OAAOp8J,EAAM08J,MAAMt5L,MAQvBi3L,EAAavuN,UAAUgwN,kBAAoB,WACvC,IAAI97J,EAAQp6D,KAAK+2N,cACblB,EAAW71N,KAAKi2N,WAAWnkN,cAAc,IAAM,QAEnD,OADA+jN,EAASrrN,YAAY4vD,GACdy7J,GAWXpB,EAAavuN,UAAUizD,aAAe,SAAU69J,EAAUC,QACrC,IAAbD,IAAuBA,EAAW,MACtC,IAAIr+K,EAAO34C,KAAK27B,OACZ37B,KAAKw2N,YACL,gBAAOx2N,KAAKw2N,YAEhB,IAAIp8J,EAAQp6D,KAAK27B,OAAOtxB,cAAc,QAAS,CAAEC,UAAW,OAAgBsK,MAAO,CAAEsiN,YAAa,SAAUriN,KAAM,kBAC9GsiN,EAAgBn3N,KAAKo3N,oBAAoBH,GACzCI,EAAQF,EAAcE,MACtBp5H,EAAQj+F,KAAK27B,OAAOtxB,cAAc,OAAgB,CAAEC,UAAWtK,KAAK27B,OAAOitE,WAAa,GAAK,SAAUh0F,MAAO,CAAEC,KAAM,cAC1H7U,KAAKggL,QAAUhgL,KAAK27B,OAAOtxB,cAAc,UAAW,CAAEqG,UAAW1Q,KAAK27B,OAAOxyB,QAAQ+H,GAAK,gBAAiB5G,UAAW,WAKtH,IAJA,IAEIgtN,EAFAp5H,EAAWl+F,KAAK27B,OAAOtxB,cAAc,QACrCktN,EAAUv3N,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEuK,MAAO,CAAEC,KAAM,SAE3D2oB,EAAOx9B,KAAKw9B,KAAO25L,EAAc35L,KAC5Bz2B,EAAI,EAAG2hB,EAAM8U,EAAK92B,OAAQK,EAAI2hB,EAAK3hB,IACxC,IAAK,IAAI03B,EAAI,EAAGwsC,EAAQztC,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKk4F,MAAM9oG,OAAQ+3B,EAAIwsC,EAAOxsC,IAC9E64L,EAAWt3N,KAAK27B,OAAOtxB,cAAc,MACrCktN,EAAQ/sN,YAAY8sN,GAY5B,OATI3+K,EAAK0a,gBAAkB1a,EAAKiZ,cAAgBjZ,EAAKI,gBACjDqhB,EAAMpvD,UAAU0G,IAAI,gBAExB1R,KAAKw3N,eAAet5H,GACpBD,EAAMzzF,YAAY+sN,GAClBn9J,EAAM5vD,YAAYxK,KAAK42N,YAAY14H,IACnC9jC,EAAM5vD,YAAY6sN,GAClBj9J,EAAM5vD,YAAYyzF,GAClB7jC,EAAM5vD,YAAYxK,KAAKggL,SAChB5lH,GAOXq6J,EAAavuN,UAAU6wN,YAAc,SAAUC,GAE3C,YADiB,IAAbA,IAAuBA,EAAW,MAC/Bh3N,KAAKm5D,aAAa69J,IAE7BvC,EAAavuN,UAAUkxN,oBAAsB,SAAUH,GACnD,IAAIt+K,EAAO34C,KAAK27B,OACZ2B,EAAUqb,EAAKiX,aACfynK,EAAQr3N,KAAK27B,OAAOtxB,cAAc,QAAS,CAAEuK,MAAO,CAAE,KAAQ,cAC9D6iN,EAAYz3N,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,iBAAkBsK,MAAO,CAAEC,KAAM,SAC1F28L,EAAc,IAAI,OAAYxxM,KAAK21C,eAAgB,OAASk+H,OAAQl7H,GACxE64J,EAAYroM,QAAUsuN,EACtB,IACIz+C,EADAx7I,EAAO,GAEXx9B,KAAKmzK,SAAW,gBAAmBx6H,EAAKrb,SACxC,IAAK,IAAIv2B,EAAI,EAAG2hB,EAAM1oB,KAAKmzK,SAAUpsK,EAAI2hB,EAAK3hB,IAC1Cy2B,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAOtX,KAAK0xM,YAAY3qM,GACpDy2B,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKk4F,MAAQ,GAI7C,GAFAhyE,EAAOx9B,KAAK6oN,cAAcrrL,GAC1BA,EAAOx9B,KAAK8hJ,eAAetkH,EAAMy5L,GAC7Bt+K,EAAKy1D,iBAAmD,UAAhCpuG,KAAK27B,OAAO+2K,gBACpC,IAAS3rM,EAAI,EAAG2hB,EAAM8U,EAAK92B,OAAQK,EAAI2hB,EAAK3hB,IACxCy2B,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKk4F,MAAMv9F,KAAKjS,KAAK2yK,aAAa,GAAI,OAASggC,eAGnF,IAAS5rM,EAAI,EAAG2hB,EAAM1oB,KAAKmzK,SAAUpsK,EAAI2hB,EAAK3hB,IAC1CiyK,EAAYw4B,EAAYn4L,OAAOmkB,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAMgmB,GAC7Dt9B,KAAK27B,OAAOqqL,WAAahtC,EAAUlnK,cAAc,mBACjDknK,EAAUrsK,MAAMxB,OAASnL,KAAK27B,OAAOqqL,UAAY,MAErD,eAAqBhtC,GACrBq+C,EAAM7sN,YAAYwuK,GAEtB,IAAIm+C,EAAgB,CAChBE,MAAOA,EACP75L,KAAMA,GAEV,OAAO25L,GAEX1C,EAAavuN,UAAUsxN,eAAiB,SAAUt5H,GAC9C,IACInsC,EADA1B,EAAOrwD,KAAK27B,OAAOi0B,aAEnB8nK,EAAU13N,KAAK27B,OAAOo4I,yBAE1B,GADA71E,EAAShtF,GAAKlR,KAAK27B,OAAOxyB,QAAQ+H,GAAK,OACnClR,KAAK27B,OAAOod,cACZ,IAAK,IAAIhyC,EAAI,EAAG2hB,EAAM1oB,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,OAAQK,EAAI2hB,EAAK3hB,IACjE/G,KAAK27B,OAAO8sE,6BAAsD,IAAxBivH,EAAQ3tN,QAAQhD,KAG9DgrD,EAAM/xD,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,mBACpD4zF,EAAS1zF,YAAYunD,KAGzB/xD,KAAK27B,OAAOuyE,gBAAkBluG,KAAK27B,OAAOwyE,aAC1Cp8C,EAAM/xD,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,oBACpD4zF,EAAS1zF,YAAYunD,IAErB/xD,KAAK27B,OAAOyyE,iBAAmD,UAAhCpuG,KAAK27B,OAAO+2K,kBAC3C3gJ,EAAM/xD,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,kBACpD4zF,EAAS1zF,YAAYunD,IAEzB,IAAShrD,EAAI,EAAG2hB,EAAM2nC,EAAK3pD,OAAQK,EAAI2hB,EAAK3hB,IACxCgrD,EAAM/xD,KAAK27B,OAAOtxB,cAAc,QACiB,IAA7CgmD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgb,SACjC,gBAAkBy/B,EAAK,CAAE,QAAW,SAExCmsC,EAAS1zF,YAAYunD,GAMzB,OAJI/xD,KAAK27B,OAAOyyE,iBAAmD,UAAhCpuG,KAAK27B,OAAO+2K,kBAC3C3gJ,EAAM/xD,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,kBACpD4zF,EAAS1zF,YAAYunD,IAElBmsC,GAEXu2H,EAAavuN,UAAU2iN,cAAgB,SAAUrrL,GAI7C,IAFA,IAAImb,EAAO34C,KAAK27B,OACZ+7L,EAAU13N,KAAK27B,OAAOo4I,yBACjBhtK,EAAI,EAAG2hB,EAAM8U,EAAK92B,OAAQK,EAAI2hB,EAAK3hB,IAAK,CAC7C,GAAI4xC,EAAKI,cACL,IAAK,IAAIvyC,EAAI,EAAG2kE,EAAQxyB,EAAKK,cAAc1b,QAAQ52B,OAAQF,EAAI2kE,EAAO3kE,IAC9DxG,KAAK27B,OAAO8sE,6BAAsD,IAAxBivH,EAAQ3tN,QAAQvD,IAG9Dg3B,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKk4F,MAAMv9F,KAAKjS,KAAK2yK,aAAa,GAAI,OAASqB,eAGnF,GAAIr7H,EAAKu1D,gBAAkBv1D,EAAKw1D,UAAW,CACvC,IAAI3iF,EAAO,GACXxrB,KAAK27B,OAAOrc,OAAO,QAA6BkM,GAChDgS,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKk4F,MAAMv9F,KAAKjS,KAAK2yK,aAAannJ,EAAM,OAASi0J,eAE7E9mI,EAAKy1D,iBAAmD,UAAhCpuG,KAAK27B,OAAO+2K,iBACpCl1K,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKk4F,MAAMv9F,KAAKjS,KAAK2yK,aAAa,GAAI,OAASggC,eAGnF,OAAOn1K,GAEXi3L,EAAavuN,UAAU47I,eAAiB,SAAUtkH,EAAMy5L,GACpD,IAAII,EAAQr3N,KAAK27B,OAAO2qH,kBAAoBtmJ,KAAK27B,OAAO2qH,iBAAiBx0I,cAAc,SACnFu+C,EAAOrwD,KAAK27B,OAAO8sE,2BACnBzoG,KAAK27B,OAAOi0B,WAAW5vD,KAAK27B,OAAOg8L,mBAAqB33N,KAAK27B,OAAO2B,QAGxE,GAFAt9B,KAAK00N,OAAS,EACd10N,KAAK20N,UAAY,EACb30N,KAAK27B,OAAOgoH,qBACZ,IAAK,IAAI58I,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IAC7B/G,KAAK43N,kBAAmB,EACxBp6L,EAAOx9B,KAAK63N,YAAYxnK,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAMkmB,EAAM,EAAS,IAANz2B,GAAS,EAAOA,IAAOspD,EAAK3pD,OAAS,EAAI2wN,EAAOJ,GAAW,GAG7HlwN,EAAI,EAAb,IAAK,IAAW2hB,EAAM2nC,EAAK3pD,OAAQK,EAAI2hB,EAAK3hB,IACxC/G,KAAK20N,UAAY,EACjB30N,KAAK43N,kBAAmB,EACxBp6L,EAAOx9B,KAAK63N,YAAYxnK,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAMkmB,EAAM,EAAS,IAANz2B,GAAS,EAAOA,IAAO2hB,EAAM,EAAI2uM,EAAOJ,GAAW,GAE1H,OAAOz5L,GAEXi3L,EAAavuN,UAAU2xN,YAAc,SAAUxnK,EAAM7yB,EAAMnrB,EAAOylN,EAAYlD,EAAYmD,EAAWC,EAAWf,EAAWgB,GACvH,IAAIC,EAAUH,EAAYE,EAAiB,kBAAoB,aAAe,GAC1EE,GAAgBn4N,KAAK27B,OAAOgoH,sBACxBtzF,EAAKoxF,aAAezhJ,KAAK43N,mBAAuBvnK,EAAKoxF,YAAczhJ,KAAK43N,iBAChF,GAAKvnK,EAAK/yB,QAiBL,CACDt9B,KAAK40N,YAAa,EAClB,IAAIz6F,EAAUn6H,KAAKo4N,WAAW/nK,EAAM,GACpC,GAAI8pE,EAAS,CACT,IAAIk+F,EAAuBr4N,KAAKs4N,wBAAwBjoK,EAAM,GAC1DkoK,EAA2D,IAArCv4N,KAAK27B,OAAOgoH,uBAC7B3jJ,KAAK43N,kBAA6C,IAAzBS,GAC1Br4N,KAAK43N,kBAAqBz9F,EAAUk+F,IAA0B,EAClEE,GACA/6L,EAAKz4B,SAASsN,EAAMiF,WAAY,KAAKk4F,MAAMv9F,KAAK,IAAI,OAAK,CACrD29F,SAAU,OAAS+jE,cAAep3I,OAAQ8zB,EAC1C8pE,QAASn6H,KAAKw4N,WAAWr+F,EAASk+F,GAClC/tN,UAAWwtN,EAAa,GAAMlD,EAAa,cAAgB,MAIvE,GAAI50N,KAAK27B,OAAOgoH,uBAAyB3jJ,KAAK43N,iBAC1C,IAAK,IAAI7wN,EAAI,EAAGA,EAAIspD,EAAK/yB,QAAQ52B,OAAQK,IACrCy2B,EAAOx9B,KAAK63N,YAAYxnK,EAAK/yB,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAMkmB,EAAMnrB,EAAQ,EAAGylN,EAAkB,IAAN/wN,EAASA,IAAOspD,EAAK/yB,QAAQ52B,OAAS,GAAMqxN,EAAWC,EAAWf,GAAW,GAGpL,GAAIj3N,KAAK43N,iBACA,CAAI7wN,EAAI,EAAb,IAAK,IAAW2hB,EAAM2nC,EAAK/yB,QAAQ52B,OAAQK,EAAI2hB,EAAK3hB,IAAK,CACrD+wN,EAAaA,GAAoB,IAAN/wN,EAC3B,IAAI0xN,EAAez4N,KAAK40N,WAAavkK,EAAK/yB,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,UACtEwlM,EACJY,EAAmB3xN,IAAO2hB,EAAM,GAAMqvM,EAC1Cv6L,EAAOx9B,KAAK63N,YAAYxnK,EAAK/yB,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAMkmB,EAAMnrB,EAAQ,EAAGylN,EAAYW,IAAiBC,EAAkBA,EAAkBV,EAAWf,GAAW,UA3C9KkB,GACA36L,EAAKz4B,SAASsN,EAAMiF,WAAY,KAAKk4F,MAAMv9F,KAAKjS,KAAK2yK,aAAatiH,EAAM,OAASwjH,OAAQ7zK,KAAKmzK,SAAW9gK,GAAQylN,EAAa,GAAMlD,EAAa,cAAgB,IAAOsD,EAAS7lN,EAAOrS,KAAK27B,OAAOg9L,oBAAoBtoK,EAAK9V,OAE7Nv6C,KAAK27B,OAAOgoH,qBACP3jJ,KAAK00N,OAAS10N,KAAK20N,UAAY30N,KAAK27B,OAAOioH,gBAC1CvzF,EAAKoxF,aAAezhJ,KAAK43N,mBAAuBvnK,EAAKoxF,YAAczhJ,KAAK43N,kBAC1E53N,KAAK00N,SAGL10N,KAAK20N,YAIT30N,KAAK00N,SAkCb,OAAOl3L,GAEXi3L,EAAavuN,UAAUoyN,wBAA0B,SAAUvmK,EAAK6mK,GAC5D,GAAI7mK,EAAIz0B,QACJ,IAAK,IAAIv2B,EAAI,EAAGA,EAAIgrD,EAAIz0B,QAAQ52B,OAAQK,IACpC6xN,EAAgB54N,KAAKs4N,wBAAwBvmK,EAAIz0B,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAMshN,QAGrF7mK,EAAI0vF,YACTm3E,IAEJ,OAAOA,GAEXnE,EAAavuN,UAAUsyN,WAAa,SAAUr+F,EAASk+F,GAEnD,OADAl+F,EAAWn6H,KAAK43N,iBAA0Cz9F,EAAUk+F,EAAjCA,EAC5Bl+F,GAGXs6F,EAAavuN,UAAUwrM,YAAc,SAAUr/L,GAC3C,OAAO,IAAI,OAAI,KAEnBoiN,EAAavuN,UAAUysK,aAAe,SAAUp2I,EAAQqzE,EAAUsqB,EAAS5vH,EAAWm2B,EAAU00L,GAC5F,IAAInlH,EAAM,CACN,QAAWzzE,EAAOjK,QAClB,YAAc,EACd,YAAe,eAAkBiK,EAAOkpE,gBACxC,MAAS,GACT,OAAUlpE,EACV,SAAYqzE,EACZ,QAAWsqB,EACX,UAAa5vH,EACb,MAASm2B,EACT,SAAY00L,GAKhB,QAHKnlH,EAAIkqB,SAAWlqB,EAAIkqB,QAAU,WACvBlqB,EAAIkqB,QAER,IAAI,OAAKlqB,IAQpBykH,EAAavuN,UAAUqvN,WAAa,SAAUj4L,GAI1C,IAHA,IACIu7L,EACAh4E,EAFAloG,EAAO34C,KAAK27B,OAGPn1B,EAAI,EAAGsyN,EAAOx7L,EAAQ52B,OAAQF,EAAIsyN,EAAMtyN,IAAK,CAClD,IAAI+1B,EAASe,EAAQv4B,SAASyB,EAAE8Q,WAAY,KAC5CupI,EAAMloG,EAAKogL,yBAAyBx8L,EAAOge,KAC3Cs+K,EAAat8L,EAAOjK,QAAU,GAAK,OACnC,gBAAkBtyB,KAAK02N,cAAcrwM,SAASthB,SAAS87I,EAAIvpI,WAAY,KAAM,CAAE,QAAWuhN,IAE9F74N,KAAKg5N,aAETvE,EAAavuN,UAAUsvN,cAAgB,WACnCx1N,KAAKg5N,aAOTvE,EAAavuN,UAAU8yN,UAAY,WAC/B,IAAIh3C,EAAYhiL,KAAKi2N,WACrBj2N,KAAK81N,iBAAiB9zC,GACtB,IAAI5nH,EAAQp6D,KAAKi5N,cAAgBj5N,KAAKs2N,YAAYxkN,cAAc,IAAM,QAAwBA,cAAc,IAAM,QAC5G9R,KAAKw2N,WACPS,OAAY9lN,EAChB,GAAIipD,EAAO,CACP,gBAAOA,GACPA,EAAM05B,YAAY15B,EAAMxrB,YACxBwrB,EAAM05B,YAAY15B,EAAM3vB,WAAW,IACnC,IAAIyzD,EAAWl+F,KAAK27B,OAAOtxB,cAAc,QACrC8sN,EAAgBn3N,KAAKo3N,oBAAoBH,GAC7Cj3N,KAAKw9B,KAAO25L,EAAc35L,KAC1B48B,EAAMnvC,aAAaksM,EAAcE,MAAOj9J,EAAMxrB,YAC9C5uC,KAAKw3N,eAAet5H,GACpB9jC,EAAMnvC,aAAajrB,KAAK42N,YAAY14H,GAAW9jC,EAAMxrB,YACrD5uC,KAAKk5N,cAAc9+J,GACnBp6D,KAAK27B,OAAOrc,OAAO,QAAwB,IAC3Ctf,KAAKqnG,aAAaE,oBAClBvnG,KAAK27B,OAAOw9L,sBACZn5N,KAAKo2N,uBAEL,IADA,IAAI54L,EAAO,GAAGlqB,MAAMjK,KAAK24K,EAAU75J,iBAAiB,sBAC3C1U,EAAK,EAAGi/G,EAASl1F,EAAM/pB,EAAKi/G,EAAOhsH,OAAQ+M,IAAM,CACtD,IAAI+oB,EAAMk2F,EAAOj/G,GACbo+L,EAAS,GAAGv+L,MAAMjK,KAAKmzB,EAAI3e,uBAAuB,uBAClDg0L,EAAOnrM,QACPmrM,EAAOA,EAAOnrM,OAAS,GAAGsE,UAAU0G,IAAI,0BAGhD1R,KAAK27B,OAAOrc,OAAO,QAAwB,CAAEke,KAAMx9B,KAAKw9B,OACpDx9B,KAAK27B,OAAO8sE,4BAA8B,gBAAaruC,EAAO,SAC9Dp6D,KAAK27B,OAAOrc,OAAO,QAAwB,CAAEke,KAAMx9B,KAAKw9B,KAAMhS,KAAM,CAAE8/E,UAAU,EAAOi6C,SAAS,KAEhGvlJ,KAAK27B,OAAOqrL,eAA2D,WAA1ChnN,KAAK27B,OAAOsrL,iBAAiBC,UAC1D,gBAAK1pL,GAAM,GAGnB,IAAI47L,EAAkBp5N,KAAK27B,OAAOktE,mBAAmB/2F,cAAc,8BAC9D,eAAkBsnN,KACnBA,EAAgBv4M,SAAW,IAGnC4zM,EAAavuN,UAAU4vN,iBAAmB,SAAUxpH,GAChD,IAAI/vE,EAASv8B,KAAK27B,OAAO2B,QACrB+7L,EAAa98L,EAAOs2B,MAAK,SAAUt2B,GAAU,OAAQ,eAAkBA,EAAOe,YAC9E+7L,EACA/sH,EAAIthG,UAAU0G,IAAI,mBAGlB46F,EAAIthG,UAAUC,OAAO,oBAG7BwpN,EAAavuN,UAAUgzN,cAAgB,SAAU9+J,GAC7Cp6D,KAAKi2N,WAAWnkN,cAAc,IAAM,QAAwBtH,YAAY4vD,IAE5Eq6J,EAAavuN,UAAUkyN,WAAa,SAAUrmK,EAAKkwF,GAC/C,GAAIlwF,EAAIz0B,QACJ,IAAK,IAAIv2B,EAAI,EAAG2hB,EAAMqpC,EAAIz0B,QAAQ52B,OAAQK,EAAI2hB,EAAK3hB,IAC/Ck7I,EAAMjiJ,KAAKo4N,WAAWrmK,EAAIz0B,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAM2qI,QAI/DlwF,EAAIz/B,SACJ2vH,IAGR,OAAOA,GAEXwyE,EAAavuN,UAAUkwN,qBAAuB,WAC1C,IAAIz9K,EAAO34C,KAAK27B,QACV37B,KAAK27B,OAAO0oE,iBAAoBrkG,KAAK27B,OAAOod,eAAiB/4C,KAAK27B,OAAOqd,cAAcu0D,gBAG7FvtG,KAAKqzG,UAAY,IAAI,OAAU16D,EAAKkwD,mBAAoB,CACpDywH,WAAY,gBACZ9xK,SAAU,EACV6oD,OAAQrwG,KAAKqwG,OACb4wC,UAAWjhJ,KAAKihJ,UAChBD,KAAMhhJ,KAAKghJ,KACXE,SAAUlhJ,KAAKkhJ,SACfq4E,MAAO,cACP1E,iBAAkB70N,KAAK60N,mBAE3B70N,KAAK27B,OAAOqR,GAAG,QAAgBhtC,KAAKw5N,iBAAkBx5N,QAE1Dy0N,EAAavuN,UAAUmwN,qBAAuB,WAC1C,IAAI19K,EAAO34C,KAAK27B,OAChB37B,KAAKy5N,UAAY,IAAI,OAAU9gL,EAAKkwD,mBAAoB,CACpD6wH,OAAQ,eACRtE,KAAMp1N,KAAKo1N,OAEfp1N,KAAK27B,OAAOqR,GAAG,QAAgBhtC,KAAKw5N,iBAAkBx5N,OAE1Dy0N,EAAavuN,UAAUszN,iBAAmB,WAClCx5N,KAAKy5N,YAAcz5N,KAAKy5N,UAAU5sL,aAClC7sC,KAAKy5N,UAAUvhN,UAEflY,KAAKqzG,YAAcrzG,KAAKqzG,UAAUxmE,aAClC7sC,KAAKqzG,UAAUn7F,WAGvBu8M,EAAavuN,UAAUuvN,oBAAsB,WACzC,IAAIrsN,EAAQpJ,KACR24C,EAAO34C,KAAK27B,OAChB,GAA8B,aAA1Bgd,EAAKouK,mBAAoCpuK,EAAK8uD,UAC1C9uD,EAAKiZ,cAAiBjZ,EAAK0a,gBAA+C,cAA7B1a,EAAK0B,eAAejmC,MAAwB,CAK7F,IAJA,IAAIk4F,EAAM3zD,EAAKtuC,cAAc,MAAO,CAAEC,UAAW,4BAC7CwxG,EAAenjE,EAAKtuC,cAAc,MAAO,CAAEC,UAAW,oBACtDqvN,EAAchhL,EAAKtuC,cAAc,MAAO,CAAEC,UAAW,mBACrDswB,EAAQ56B,KAAK27B,OAAO03B,gBAAkBrzD,KAAK27B,OAAOi2B,aAAe,EAAI,EAChE7qD,EAAI,EAAGA,EAAI6zB,EAAO7zB,IAAK,CAC5B,IAAI6yN,EAAcjhL,EAAKtuC,cAAc,MAAO,CAAEC,UAAW,8DACrDiqI,EAAgB,IAAV35G,EAAc56B,KAAK27B,OAAOi2B,aAAe,OAC7C,SAAiB,IAAN7qD,EAAU,OAAS,SAChCo1F,EAASxjD,EAAKtuC,cAAc,SAAU,CAAEC,UAAW,gDACnD8gE,EAAOzyB,EAAKtuC,cAAc,OAAQ,CAAEC,UAAW,mBAAqBiqI,EAAM,kBAC9Ep4C,EAAO3xF,YAAY4gE,GACnB,IAAIuuE,EAAS,IAAI,OAAO,CACpBtpI,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,KAE5DspI,EAAO7tH,SAASqwE,GAChBA,EAAO4rD,QAAU,SAAUh1I,GACnBA,EAAEzM,OAAO0E,UAAUkB,SAAS,kBACzB6G,EAAEzM,OAAO0E,UAAUkB,SAAS,kBAC/B9C,EAAMuyB,OAAOk+L,2BAGbzwN,EAAMuyB,OAAOm+L,8BAGrBF,EAAYpvN,YAAY2xF,GACxBw9H,EAAYnvN,YAAYovN,GAE5B99G,EAAatxG,YAAYmvN,GACzBrtH,EAAI9hG,YAAYsxG,GAChBnjE,EAAKxvC,QAAQ8hB,aAAaqhF,EAAKtsG,KAAK27B,OAAOxyB,QAAQ2I,cAAc,IAAM,cAGnE6mC,EAAKyvD,mBAAqBzvD,EAAK8uD,SAC/B9uD,EAAK6vD,aAAax9F,UAAU0G,IAAI,wBAI5C+iN,EAAavuN,UAAUwvN,8BAAgC,SAAUlqM,GAC7D,IAAIuuM,EAAa/5N,KAAK27B,OAAOxyB,QAAQ2I,cAAc,yBAC/B,YAAhB0Z,EAAKjM,SACDw6M,EACA,gBAAOA,GAGP/5N,KAAKy1N,wBAIVhB,EAhqBsB,G,oCClB7BlvN,EAAwC,WACxC,IAAIC,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAyBxC,EAAoC,SAAU4C,GAE9C,SAASoxN,IACL,IAAI5wN,EAAmB,OAAXR,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAQhE,OAPAoJ,EAAMD,QAAUC,EAAMuyB,OACjBtxB,cAAc,KAAM,CAAEC,UAAW,eAAgBsK,MAAO,CAAE0yI,SAAU,KAAMzyI,KAAM,kBACrFzL,EAAMksN,YAAc,IAAI,OACxBlsN,EAAM6wN,QAAU7wN,EAAMuyB,OAAOtxB,cAAc,OAAQ,CAAEC,UAAW,iBAChElB,EAAM8wN,QAAU9wN,EAAMuyB,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,0BAA2BsK,MAAO,CAAE,cAAe,UAClHxL,EAAM+wN,IAAM/wN,EAAMuyB,OAAOtxB,cAAc,OACvCjB,EAAMgxN,UAAYhxN,EAAMuyB,OAAOtxB,cAAc,QAAS,CAAEC,UAAW,mBAAoBsK,MAAO,CAAE,KAAQ,WAAY,aAAcxL,EAAMq+I,UAAUrnI,YAAY,wBACvJhX,EAqOX,OA/OA7D,EAAUy0N,EAAoBpxN,GAiB9BoxN,EAAmB9zN,UAAU43L,OAAS,WAClC,OAAO99L,KAAKm6N,IAAIhtM,aAWpB6sM,EAAmB9zN,UAAUmT,OAAS,SAAUq2F,EAAMn3E,EAAMrL,GACxD,IAAIq9B,EAAOvqD,KAAKmJ,QAAQgkB,YACpBktM,EAAcr6N,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,wCAAyCsK,MAAO,CAAE,cAAe,UACjI,OAAO5U,KAAKs6N,cAAc5qH,EAAMnlD,EAAM8vK,IAS1CL,EAAmB9zN,UAAU8U,QAAU,SAAU00F,EAAMnlD,GACnDvqD,KAAKu6N,MAAMhwK,GACX,IAAI8vK,EAAcr6N,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,wCAAyCsK,MAAO,CAAE,cAAe,UACjI,OAAO5U,KAAKs6N,cAAc5qH,EAAMnlD,EAAM8vK,IAE1CL,EAAmB9zN,UAAUq0N,MAAQ,SAAUhwK,GAC3CA,EAAK75C,UAAY,IAGrBspN,EAAmB9zN,UAAUo0N,cAAgB,SAAU5qH,EAAMnlD,EAAM8vK,GAC/D,IAKIG,EA0EAz2N,EA/EAw4B,EAASmzE,EAAKnzE,OACd0yG,EAAW,GACXwrF,EAAc,GAEd18B,EAAW/9L,KAAK89L,SASpB,GAPA,eAAWC,EAAU,CACjB,eAAgBxhK,EAAOge,IACvB,MAAS,oBAER,eAAkBhe,EAAOm+L,uBAC1BF,EAAcx6N,KAAK6pL,SAASttJ,EAAO6T,WAAY7T,IAE/B,aAAhBA,EAAOnoB,KAAqB,CAC5B,IAAI+J,EAAQoe,EAAO6T,WACd,eAAkBoqL,KACnBr8M,EAAQq8M,GAEZ,IAAIpqL,EAAapwC,KAAKi6N,QAAQ9sM,YAC9BijB,EAAW7T,EAAOwqE,gBAAkB/mG,KAAK27B,OAAO7qB,SAASqN,GACzD4/K,EAASvzL,YAAY4lC,OAEpB,CACD7T,EAAOwb,SAAW,cAClB,IAAI4iL,EAAe,eAAe36N,KAAK27B,OAAOtxB,eAAe,EAAO,CAAEy0F,SAAS,EAAOxsB,MAAO,MAC7FtyE,KAAKo6N,UAAUlpN,GAAK,YAAcqrB,EAAOge,IACzCogL,EAAa1vM,aAAajrB,KAAKo6N,UAAUjtM,YAAawtM,EAAa/rL,YAC/D5uC,KAAK27B,OAAOtrB,UACZ,eAAS,CAACsqN,GAAe,CAAC36N,KAAK27B,OAAOtrB,WAE1C0tL,EAASvzL,YAAYmwN,GACrB58B,EAAS/yL,UAAU0G,IAAI,sBAK3B,GAHA1R,KAAK46N,uBAAuBrwK,EAAMmlD,GAClC1vG,KAAKw+L,WAAWj0I,EAAMwzI,GACtBxzI,EAAK//C,YAAYxK,KAAKk6N,QAAQ/sM,aACzBntB,KAAK27B,OAAO03B,gBAAsD,cAApCrzD,KAAK27B,OAAO0e,eAAejmC,MACzDmoB,EAAO82B,iBAAmB,eAAkB92B,EAAO4b,UAClDn4C,KAAK27B,OAAO2oE,iBAAkB/nE,EAAO+nE,gBAAiB,CACxD,eAAW+1H,EAAa,CACpB,eAAgB,YAAc99L,EAAOge,MAEzCkgL,EAAcA,EAAY/zN,OAAS+zN,EAAc,KAAOz6N,KAAKynJ,UAAUrnI,YAAY,qBAAuBpgB,KAAKynJ,UAAUrnI,YAAY,qBACrImqC,EAAKv/C,UAAU0G,IAAI,eACnB,IAAImpN,EAAiB,GACrB,GAAI76N,KAAK27B,OAAO0e,eAAe/c,QAAQ52B,QAAU1G,KAAK27B,OAAO0e,eAAe/c,QAAQ52B,SAAWm0N,EAAen0N,OAE1G,IADA,IAAI0sD,EAAgBpzD,KAAK27B,OAAOqb,uBACvB3kC,EAAQ,EAAGA,EAAQrS,KAAK27B,OAAO2B,QAAQ52B,OAAQ2L,IACpD,IAAK,IAAIuoB,EAAQ,EAAGA,EAAQ56B,KAAK27B,OAAO0e,eAAe/c,QAAQ52B,OAAQk0B,IACnE,GAAI56B,KAAK27B,OAAO0e,eAAe/c,QAAQv4B,SAAS61B,EAAMtjB,WAAY,KAAK6gC,QAAU5b,EAAO4b,OAChFib,EAAc1sD,QACX61B,EAAO6b,kBAAoBp4C,KAAK27B,OAAO0e,eAAe/c,QAAQv4B,SAAS61B,EAAMtjB,WAAY,KAAK6gC,MAAQ,CAC7GkiL,EAAYrvN,UAAU0G,IAAI,cAC1BmpN,EAAe5oN,KAAKsqB,EAAO4b,OAC3B,MAKhBoS,EAAK//C,YAAY6vN,EAAYltM,aAE7BuiF,EAAKplG,WACLigD,EAAKv/C,UAAU0G,IAAIg+F,EAAKplG,WAExBiyB,EAAOu+L,kBACP,gBAAsBvwK,EAAMhuB,EAAOu+L,kBAEnC96N,KAAK27B,OAAOi2B,cAAgBr1B,EAAOq1B,eACnCq9E,EAAS51G,KAAO,OAChBohM,EAAcA,EAAY/zN,OAAS+zN,EAAc,KAAOz6N,KAAKynJ,UAAUrnI,YAAY,mBAAqBpgB,KAAKynJ,UAAUrnI,YAAY,qBAElIpgB,KAAK27B,OAAOod,eAAiBxc,EAAOwc,eAAkB/4C,KAAK27B,OAAO0oE,iBAAmB9nE,EAAO8nE,mBAC7F4qC,EAASnJ,SAAU,EACnB20F,EAAcA,EAAY/zN,OAAS+zN,EAAc,KAAOz6N,KAAKynJ,UAAUrnI,YAAY,oBAAsBpgB,KAAKynJ,UAAUrnI,YAAY,qBAEpIpgB,KAAK27B,OAAO2oE,gBAAkC,aAAhB/nE,EAAOnoB,OAAwBmoB,EAAO+T,WACpEmqL,EAAcA,EAAY/zN,OAAS+zN,EAAc,KAAOz6N,KAAKynJ,UAAUrnI,YAAY,yBAA2BpgB,KAAKynJ,UAAUrnI,YAAY,0BAE7ImqC,EAAOvqD,KAAK+6N,oBAAoBx+L,EAAQguB,GAExC,IAAIsoH,EAAU7yK,KAAK27B,OACfw5L,EAAWtiD,EAAQhuB,sBAAsBtoH,EAAO4b,OACpD,IAAK,eAAkB5b,EAAOkpE,gBAAiB,CAE3C,IAAIu1H,EAAenoD,EAAQ1pK,QAAQ+H,GAAKqrB,EAAOge,IAAM,iBACjDhO,EAAM,mBACNwlB,EAAMx1B,EACN0hK,EAAkBj+L,KAAK27B,OAAO5tB,SAA8C,kBAA3BwuB,EAAqB,eACtE0+L,EAAiBj7N,KAAK27B,OAAOs2I,eAAiBjyK,KAAK27B,OAAOs2I,cAAcksB,eACxEn+L,KAAK27B,OAAOs2I,cAAcksB,cAAcpwL,QAC5C,GAAIkwL,GAAmBg9B,EAAgB,CACnC,IAAIC,EAAS,CAAE,MAAS/F,GACxB5qK,EAAKrjC,kBAAkBxW,UAAY,GACnC6rB,EAAOsqE,mBAAPtqE,CAA2B,eAAO2+L,EAAQnpK,GAAM8gH,EAAS,iBAAkBmoD,EAAch7N,KAAK27B,OAAO,GAAK4Q,GAAM,KAAMge,EAAKrjC,mBAC3HlnB,KAAK27B,OAAOgsH,uBAGZ5jJ,EAASw4B,EAAOsqE,mBAAPtqE,CAA2B,eAAO,CAAE,MAAS44L,GAAYpjK,GAAM8gH,EAAS,iBAAkBmoD,EAAch7N,KAAK27B,OAAO,GAAK4Q,QAAMp7B,OAAWA,EAAWnR,KAAK27B,OAAO,SAC1K4uB,EAAKrjC,kBAAkBxW,UAAY,GACnC,eAAe65C,EAAKrjC,kBAAmBnjB,GAI/C,GADA/D,KAAKs1N,YAAYnwF,WAAW56E,EAAM0kF,IAC7B,eAAkB1yG,EAAOqjJ,mBAAqB,eAAkBrjJ,EAAO+oE,WAAY,CACpF,IAAInd,EAAY5rD,EAAOqjJ,iBAAmBrjJ,EAAO+oE,UACjDy4F,EAASpxL,MAAM24F,UAAYnd,EACT,UAAdA,GAAuC,SAAdA,EACzB59B,EAAKv/C,UAAU0G,IAAkB,UAAdy2E,EAAwB,eAAiB,eAEzC,WAAdA,GACL59B,EAAKv/C,UAAU0G,IAAI,iBAa3B,GAVwB,SAApB6qB,EAAO4+L,WAAyB5+L,EAAO4+L,UAAqC,SAAzBn7N,KAAK27B,OAAOw/L,SAC/D5wK,EAAKv/C,UAAU0G,IAAI,cAEO,wBAApB6qB,EAAO4+L,WAAwC5+L,EAAO4+L,UAAqC,wBAAzBn7N,KAAK27B,OAAOw/L,WAC/EtoD,EAAQm0C,gBAAwD,WAAtCn0C,EAAQo0C,iBAAiBC,UACX,SAAtCr0C,EAAQo0C,iBAAiBC,WACZ,aAAhB3qL,EAAOnoB,MACPm2C,EAAKv/C,UAAU0G,IAAI,qBAGvB+oN,EAAa,CACb,IAAIW,EAAap7N,KAAK27B,OAAOtxB,cAAc,OAAQ,CAAE6G,GAAI,eAAiBqrB,EAAOge,IAAK7pC,UAAW+pN,EAAa7lN,MAAO,CAAEjI,MAAO,kBAC9H49C,EAAK//C,YAAY4wN,GACjB7wK,EAAKh6C,aAAa,mBAAoB6qN,EAAUlqN,IAEpDq5C,EAAKh6C,aAAa,gBAAkB,eAAkBm/F,EAAKwqB,SAA0B,EAAfxqB,EAAKwqB,SAAa5iH,YACxFizC,EAAKh6C,aAAa,eAAgB,KAClC,IAAI2tL,EAAel+L,KAAK27B,OAAOs2I,eAAiBjyK,KAAK27B,OAAOs2I,cAAcksB,eACtEn+L,KAAK27B,OAAOs2I,cAAcksB,cAAcpwL,QAC5C,IAAM/N,KAAK27B,OAAO5tB,SAAW/N,KAAK27B,OAAOkpL,oBACjC3mB,GAAgBl+L,KAAK27B,OAAOs2I,cAAcksB,cAAc0mB,sBACxD,eAAkBtoL,EAAOkpE,gBAAiB,CAE9C,IAAIs/G,EAAY/kN,KAChB+kN,EAAUppL,OAAOgsH,iBAAgB,WAC7Bo9D,EAAUppL,OAAO9tB,QAAQ,QAAgB,CAAE6hG,KAAMA,EAAMnlD,KAAMA,YAIjEvqD,KAAK27B,OAAO9tB,QAAQ,QAAgB,CAAE6hG,KAAMA,EAAMnlD,KAAMA,IAK5D,OAHIvqD,KAAK27B,OAAO+sE,gBACZ,eAAwB1oG,KAAK27B,OAAQY,EAAQguB,GAE1CA,GAEXyvK,EAAmB9zN,UAAU2jL,SAAW,SAAU1xI,EAAO5b,GACrD,OAAOA,EAAOm+L,oBAAoBviL,EAAO5b,IAE7Cy9L,EAAmB9zN,UAAU60N,oBAAsB,SAAUx+L,EAAQguB,GACjE,GAAIvqD,KAAK27B,OAAO2oE,gBAAkB/nE,EAAO+nE,iBAAmB,eAAkB/nE,EAAO4b,OAAQ,CACzF,IAAIhvC,EAAWnJ,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,uBAAwBsK,MAAO,CAAE,cAAe,UACzGymN,EAAuB,GAC3B,GAAIr7N,KAAK27B,OAAO0e,eAAe/c,QAAQ52B,QAAU1G,KAAK27B,OAAO0e,eAAe/c,QAAQ52B,SAAW20N,EAAqB30N,OAChH,IAAK,IAAIK,EAAI,EAAGA,EAAI/G,KAAK27B,OAAO2B,QAAQ52B,OAAQK,IAC5C,IAAK,IAAI03B,EAAI,EAAGA,EAAIz+B,KAAK27B,OAAO0e,eAAe/c,QAAQ52B,OAAQ+3B,IAC3D,GAAIz+B,KAAK27B,OAAO0e,eAAe/c,QAAQv4B,SAAS05B,EAAEnnB,WAAY,KAAK6gC,QAAU5b,EAAO4b,MAAO,CACvFhvC,EAAQ6B,UAAU0G,IAAI,cACtB2pN,EAAqBppN,KAAKsqB,EAAO4b,OACjC,MAKhBoS,EAAKv/C,UAAU0G,IAAI,eACnB64C,EAAK//C,YAAYrB,GAErB,GAAInJ,KAAK27B,OAAOyoE,cAAe,CAC3B,IAAIk/C,EAAUtjJ,KAAK27B,OAAOtxB,cAAc,OACxCi5I,EAAQh5I,UAAYiyB,EAAO6nE,cAAgB,uBAAyB,cACpE75C,EAAK//C,YAAY84I,GAErB,OAAO/4F,GASXyvK,EAAmB9zN,UAAUs4L,WAAa,SAAUj0I,EAAMq0I,GAEtD,OADAr0I,EAAK//C,YAAYo0L,GACVr0I,GAEJyvK,EAhP4B,CAiPrC,QC1QE,EAAwC,WACxC,IAAIx0N,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAsBxC,EAA2C,SAAU4C,GAErD,SAAS0yN,IACL,IAAIlyN,EAAmB,OAAXR,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAMhE,OALAoJ,EAAMD,QAAUC,EAAMuyB,OAAOtxB,cAAc,KAAM,CAC7CC,UAAW,mCAAoCsK,MAAO,CAClD0yI,SAAU,KAAMzyI,KAAM,kBAGvBzL,EAqIX,OA7IA,EAAUkyN,EAA2B1yN,GAmBrC0yN,EAA0Bp1N,UAAUmT,OAAS,SAAUq2F,EAAMn3E,EAAMrL,GAC/D,IAAIq9B,EAAOvqD,KAAKmJ,QAAQgkB,YACpBm/E,EAAMtsG,KAAK27B,OAAOtxB,cAAc,MAAO,CACvCC,UAAW,yBACXsK,MAAO,CAAE,eAAgB86F,EAAKnzE,OAAOge,OAErChe,EAASmzE,EAAKnzE,OA0BlB,GAzBAguB,EAAK//C,YAAY8hG,GACZ,eAAkB/vE,EAAOkpE,gBAI1BzlG,KAAKw+L,WAAWlyF,EAAKtsG,KAAK27B,OAAO7qB,SAASyrB,EAAO6T,YAAa7T,EAAOwqE,gBAHrE,eAAeuF,EAAK/vE,EAAOsqE,mBAAPtqE,CAA2BA,EAAQv8B,KAAK27B,OAAQ,mBAKpE+zE,EAAKnzE,OAAOuY,SACZyV,EAAKh6C,aAAa,QAASm/F,EAAKnzE,OAAOuY,SAEnB,SAApBvY,EAAO4+L,WAAyB5+L,EAAO4+L,UAAqC,SAAzBn7N,KAAK27B,OAAOw/L,SAC/D5wK,EAAKv/C,UAAU0G,IAAI,eAEM,wBAApB6qB,EAAO4+L,WAAwC5+L,EAAO4+L,UAAqC,wBAAzBn7N,KAAK27B,OAAOw/L,WACnF5wK,EAAKv/C,UAAU0G,IAAI,qBAElB,eAAkBg+F,EAAKnzE,OAAO+oE,aAC/BgH,EAAI3/F,MAAM24F,UAAYoK,EAAKnzE,OAAO+oE,WAElCoK,EAAKnzE,OAAOu+L,kBACZ,gBAAsBvwK,EAAMmlD,EAAKnzE,OAAOu+L,kBAE5CvwK,EAAKh6C,aAAa,UAAWm/F,EAAKyqB,QAAQ7iH,YAC1CizC,EAAKh6C,aAAa,eAAgBm/F,EAAKyqB,QAAQ7iH,YAC/CizC,EAAKh6C,aAAa,eAAgB,KAC9BvQ,KAAK27B,OAAOyoE,cAAe,CAC3B,IAAIk/C,EAAUtjJ,KAAK27B,OAAOtxB,cAAc,OACxCi5I,EAAQh5I,UAAYolG,EAAKnzE,OAAO6nE,cAAgB,uBAAyB,cACzE75C,EAAK//C,YAAY84I,GAMrB,GAJI5zC,EAAKplG,WACLigD,EAAKv/C,UAAU0G,IAAIg+F,EAAKplG,WAE5BtK,KAAK27B,OAAO9tB,QAAQ,QAAgB,CAAE6hG,KAAMA,EAAMnlD,KAAMA,IACxB,SAA5B,eAAgBhuB,GAKhB,GAJAguB,EAAKv/C,UAAU0G,IAAI,gBACG,SAAlB6qB,EAAOwD,QACPwqB,EAAKv/C,UAAU0G,IAAI,sBAEF,IAAjB6qB,EAAOlqB,MACP,eAA6Bk4C,EAAsC,GAA/BvqD,KAAK27B,OAAOszE,iBAAwBjvG,KAAK27B,OAAOpwB,UAAW,YAE9F,CAGD,IAFA,IAAI8kD,EAAOrwD,KAAK27B,OAAOi0B,aACnBxkD,EAAuC,GAA/BpL,KAAK27B,OAAOszE,iBACfloG,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IAAK,CAClC,GAAIw1B,EAAOlqB,MAAQg+C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKjF,MAChD,MAEAg+C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgb,UACjClnB,GAASsB,WAAW2jD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKlM,MAAMkM,aAGnE,eAA6BizC,EAAMn/C,EAAOpL,KAAK27B,OAAOpwB,UAAW,aAGpE,GAAgC,UAA5B,eAAgBgxB,GAAqB,CAC1CguB,EAAKv/C,UAAU0G,IAAI,iBAGnB,IAFI2+C,EAAOrwD,KAAK27B,OAAOi0B,aACnBxkD,EAAwC,UAAhCpL,KAAK27B,OAAO+2K,iBAA+B1yM,KAAK27B,OAAOyyE,gBAAkB,GAAK,EACjFrnG,EAAIspD,EAAK3pD,OAAS,EAAGK,GAAK,EAAGA,IAAK,CACvC,GAAI,eAAcw1B,EAAQ8zB,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKijC,MAAQhe,EAAOlqB,MAAQg+C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKjF,MAC/G,MAEAg+C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgb,UACjClnB,GAASsB,WAAW2jD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKlM,MAAMkM,aAGnE,eAA6BizC,EAAMn/C,EAAOpL,KAAK27B,OAAOpwB,UAAW,SAC3C,UAAlBgxB,EAAOwD,QACPwqB,EAAKv/C,UAAU0G,IAAI,4BAGtB,GAAgC,UAA5B,eAAgB6qB,GAAqB,CAC1CguB,EAAKv/C,UAAU0G,IAAI,iBACf2+C,EAAOrwD,KAAK27B,OAAOi0B,aACnBxkD,EAAQ,EACRpL,KAAK27B,OAAOkvE,4BACZz/F,EAAuC,GAA/BpL,KAAK27B,OAAOszE,iBAEiB,UAAhCjvG,KAAK27B,OAAO+2K,kBACjBtnM,EAAmD,GAA3CpL,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,QAE9C,IAASK,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IACzBw1B,EAAOlqB,MAAQg+C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKjF,QACC,SAA5Cg+C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0/G,QAAqB3mE,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKg0F,UAC5C,UAA5Cj7C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0/G,SAC7B3mE,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgb,UACjClnB,GAASsB,WAAW2jD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKlM,MAAMkM,aAK3E,eAA6BizC,EAAMn/C,EAAQ,EAAGpL,KAAK27B,OAAOpwB,UAAW,QACrEH,EAAwC,UAAhCpL,KAAK27B,OAAO+2K,iBAA+B1yM,KAAK27B,OAAOyyE,gBAAkB,GAAK,EACtF,IAASrnG,EAAIspD,EAAK3pD,OAAS,EAAGK,GAAK,EAAGA,IAClC,GAAIw1B,EAAOlqB,MAAQg+C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKjF,MAAO,CACvD,GAAI,eAAckqB,EAAQ8zB,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKijC,MACvDhe,EAAOlqB,MAAQg+C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKjF,MAChD,MAE4C,UAA5Cg+C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0/G,QAAkE,UAA5C3mE,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0/G,QACpF3mE,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgb,UACjClnB,GAASsB,WAAW2jD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKlM,MAAMkM,aAK3E,eAA6BizC,EAAMn/C,EAAQ,EAAGpL,KAAK27B,OAAOpwB,UAAW,cAGrEg/C,EAAKv/C,UAAU0G,IAAI,cAEvB,OAAO64C,GAEJ+wK,EA9ImC,CA+I5C,QCrKE,EAAwC,WACxC,IAAI91N,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAoBxC,EAAoC,SAAU4C,GAE9C,SAAS2yN,IACL,IAAInyN,EAAmB,OAAXR,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAEhE,OADAoJ,EAAMD,QAAUC,EAAMuyB,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,iBACvDlB,EAeX,OAnBA,EAAUmyN,EAAoB3yN,GAc9B2yN,EAAmBr1N,UAAUmT,OAAS,SAAUq2F,EAAMn3E,GAClD,IAAIgyB,EAAOvqD,KAAKmJ,QAAQgkB,YAExB,OADA,gBAAsBo9B,EAAMmlD,EAAKxiF,YAC1Bq9B,GAEJgxK,EApB4B,CAqBrC,QCzCE,EAAwC,WACxC,IAAI/1N,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAsBxC,EAA0C,SAAU4C,GAEpD,SAAS4yN,IACL,IAAIpyN,EAAmB,OAAXR,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAKhE,OAJAoJ,EAAMqyN,QAAU,EAChBryN,EAAMD,QAAUC,EAAMuyB,OACjBtxB,cAAc,KAAM,CAAEC,UAAW,iBAClCsK,MAAO,CAAE1D,GAAI9H,EAAMuyB,OAAOxyB,QAAQ+H,GAAK,cAAeo2I,SAAU,QAC7Dl+I,EAoHX,OA3HA,EAAUoyN,EAA0B5yN,GAgBpC4yN,EAAyBt1N,UAAUmT,OAAS,SAAUq2F,EAAMn3E,GACxDv4B,KAAKmJ,QAAQ+H,GAAKlR,KAAK27B,OAAOxyB,QAAQ+H,GAAK,cAAgBlR,KAAKy7N,UAChE,IAII13N,EACA23N,EACAC,EANApxK,EAAOvqD,KAAKmJ,QAAQgkB,YACpBwrB,EAAO34C,KAAK27B,OACZY,EAASmzE,EAAKnzE,OACdq/L,EAAYr/L,EAAOwqE,aAAexqE,EAAOwqE,eAAiB,YAI9DxuE,EAAK6X,WAAas/D,EAAKnzE,OAAO6T,WAC1Bs/D,EAAKj9C,eACLipK,EAAY17N,KAAKgiB,OAAO0tF,EAAKnzE,OAAQmzE,EAAKnzE,OAAO4+I,cAAc,aAAc5iJ,EAAMm3E,EAAKnzE,UAI5F,IAFA,IAAIpe,EAAQuxF,EAAKj9C,aAAeipK,EAAYhsH,EAAKnzE,OAAOm1B,oBAAsBn5B,EAAK10B,IAC/E7D,KAAKgiB,OAAO0tF,EAAKnzE,OAAQmzE,EAAKnzE,OAAO4+I,cAAc,MAAO5iJ,EAAMm3E,EAAKnzE,SAChEkC,EAAI,EAAGA,EAAIka,EAAKyX,WAAW1pD,OAAQ+3B,IAgDxC,IA/CA,IAAIyY,EAAU,SAAUnwC,GACpB,GAAI4xC,EAAKwtG,oBAAoB,GAAGhuG,QAAUQ,EAAKyX,WAAWrrD,SAAS05B,EAAEnnB,WAAY,KAAKgmB,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAChH6gC,OAASQ,EAAKyX,WAAWrrD,SAAS05B,EAAEnnB,WAAY,KAAKgmB,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK02F,qBAAsB,CAChH,IAAI6tH,EAAeljL,EAAKyX,WAAWrrD,SAAS05B,EAAEnnB,WAAY,KACrDgmB,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK02F,qBACzC,GAA4B,kBAAjB6tH,GAA6BA,EAAaluB,SAAS,KAC1DguB,EAAiBhjL,EAAKyX,WAAWrrD,SAAS05B,EAAEnnB,WAAY,KAAKgmB,QAAQv4B,SAASgC,EAAEuQ,WAAY,KACvF02F,qBAAqB3tG,MAAM,KAAK,GAAKk4B,EAAKogB,EAAKwtG,oBAAoB,GAAGhuG,OAAOQ,EAC7EyX,WAAWrrD,SAAS05B,EAAEnnB,WAAY,KAAKgmB,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKlD,MAC5EukC,EAAKyX,WAAWrrD,SAAS05B,EAAEnnB,WAAY,KAAKgmB,QAAQv4B,SAASgC,EAAEuQ,WAAY,KACtE02F,qBAAqB3tG,MAAM,KAAK,OAExC,CACD,IAAI2zD,EAAYrb,EAAKyX,WAAWrrD,SAAS05B,EAAEnnB,WAAY,KAClDgmB,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAChCwkN,EAAU9nK,EAAS+nK,YAAY,OAAS/qH,gBACxC02C,EAAS,GACb,IAAK,eAAkBo0E,GAAU,CAC7B,IAAIE,EAAcF,EAAQ7pK,GAAG15B,EAAKy7B,EAASxC,YAAapa,EAAOzb,OAAQmgM,EAAQ/iI,SAAU2uD,GACrFtwG,EAAOzb,OAAO5tB,SAAoD,kBAAlCimD,EAASg6C,qBACzC52D,EAAOzb,OAAOgsH,iBAAgB,WACtBq0E,GAAeA,EAAYt1N,SACtB,eAAkBiyC,EAAKK,cAAcijL,iBAItC1xK,EAAK+V,WAAa,IAAM07J,EAAY,GAAGnxM,YAHvC0/B,EAAK//C,YAAYwxN,EAAY,QASrCA,GAAeA,EAAYt1N,SAKvBi1N,EAJC,eAAkBhjL,EAAKK,cAAcijL,iBAIrBD,EAAY,GAAGnxM,YAHfmxM,IASrC,MAAO,UAGX5kL,EAASp3C,KACJ+G,EAAI,EAAGA,EAAI4xC,EAAKyX,WAAWrrD,SAAS05B,EAAEnnB,WAAY,KAAKgmB,QAAQ52B,OAAQK,IAAK,CACjF,IAAI+vI,EAAU5/F,EAAQnwC,GACtB,GAAgB,UAAZ+vI,EACA,MAGZ,GAAK,eAAkBn+F,EAAKK,cAAcijL,iBAuBlCtjL,EAAKK,cAAcqY,kBACnB9G,EAAK,GAAKqxK,GAAa57N,KAAK27B,OAAO7qB,SAAS4+F,EAAKnzE,OAAO6T,YAAc,KAAOpwC,KAAK27B,OAAO7qB,SAASqN,IAC7Fw9M,EAAiB,MAAQA,EAAiB,IAG/CpxK,EAAK,GAAKqxK,GAAa57N,KAAK27B,OAAO7qB,SAAS4+F,EAAKnzE,OAAO6T,YAAc,KAAOpwC,KAAK27B,OAAO7qB,SAASqN,GAC9F,MAAQoa,EAAKqC,MAAQ,KAAOrC,EAAKqC,MAAQ,EAAI56B,KAAKynJ,UAAUrnI,YAAY,QAAUpgB,KAAKynJ,UAAUrnI,YAAY,WAC1Gu7M,EAAiB,MAAQA,EAAiB,QA9BG,CACxD,IAAI19B,EAAkBj+L,KAAK27B,OAAO5tB,SAA2D,kBAAxC4qC,EAAKK,cAA6B,gBACnFklJ,EAAel+L,KAAK27B,OAAOs2I,eAAiBjyK,KAAK27B,OAAOs2I,cAAcksB,eACtEn+L,KAAK27B,OAAOs2I,cAAcksB,cAAcpwL,QAC5C,GAAIkwL,GAAmBC,EAAc,CACjC,IAAIx2C,EAAS/uG,EAAKxvC,QAAQ+H,GAAK,kBAC/B,gBAAiBynC,EAAKK,cAAcijL,gBAApC,CAAqD1jM,EAAMv4B,KAAK27B,OAAQ,kBAAmB+rH,EAAQ,KAAM,KAAMn9F,GAC/GvqD,KAAK27B,OAAOgsH,uBAGZ5jJ,EADK/D,KAAK27B,OAAO2zB,MACR,gBAAiB3W,EAAKK,cAAcijL,gBAApC,CAAqD1jM,EAAMv4B,KAAK27B,QAGhE,gBAAiBgd,EAAKK,cAAcijL,gBAApC,CAAqD1jM,GAE7D0lK,GAAoBC,IACrB,eAAe3zI,EAAMxmD,GACjB43N,GAAkBA,EAAej1N,QAAUi1N,EAAe,GAAG9wM,aAC7D0/B,EAAK//C,YAAYmxN,EAAe,KAkB5C,OAHApxK,EAAKh6C,aAAa,UAAWm/F,EAAKyqB,QAAQ7iH,YAC1CizC,EAAKh6C,aAAa,aAAcg6C,EAAK75C,UAAY1Q,KAAKynJ,UAAUrnI,YAAY,iBAC5EmqC,EAAKh6C,aAAa,QAASg6C,EAAK1/B,aACzB0/B,GAEJixK,EA5HkC,CA6H3C,QAOEU,EAA+C,SAAUtzN,GAEzD,SAASszN,IACL,IAAI9yN,EAAmB,OAAXR,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAEhE,OADAoJ,EAAMD,QAAUC,EAAMuyB,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,mBACvDlB,EAmBX,OAvBA,EAAU8yN,EAA+BtzN,GAiBzCszN,EAA8Bh2N,UAAUmT,OAAS,SAAUq2F,EAAMn3E,GAC7D,IAAIgyB,EAAOvqD,KAAKmJ,QAAQgkB,YAGxB,OAFAo9B,EAAK75C,UAAY,SACjB65C,EAAKh6C,aAAa,UAAWm/F,EAAKyqB,QAAQ7iH,YACnCizC,GAEJ2xK,EAxBuC,CAyBhD,QCnLE,EAAwC,WACxC,IAAI12N,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAoBxC,EAAoC,SAAU4C,GAE9C,SAASuzN,IACL,OAAkB,OAAXvzN,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAgC/D,OAlCA,EAAUm8N,EAAoBvzN,GAe9BuzN,EAAmBj2N,UAAUmT,OAAS,SAAUq2F,EAAMn3E,EAAMzJ,EAAMujJ,GAC9D,IAAI9nH,EAAOvqD,KAAKmJ,QAAQgkB,YAgBxB,OAfAo9B,EAAKh6C,aAAa,iBAAkBgoB,EAAK4f,OACzCoS,EAAKh6C,aAAa,kBAAmBgoB,EAAK10B,KAC1C0mD,EAAKh6C,aAAa,gBAAiB8hK,EAAW,OAAS,SACvD9nH,EAAKh6C,aAAa,WAAY,MAC1BvQ,KAAK27B,OAAOygM,wBAA0Bp8N,KAAK27B,OAAOygM,uBAAuBC,aACzE3sH,EAAKE,SAAW,OAASN,OACzB/kD,EAAKjgD,UAAY+nK,EAAW,sCAAwC,0CAGpE9nH,EAAKjgD,UAAY+nK,EAAW,qBAAuB,uBACnD9nH,EAAK//C,YAAYxK,KAAK27B,OAAOtxB,cAAc,IAAK,CAC5CC,UAAW+nK,EAAW,4CAA8C,4CACpEz9J,MAAO,CAAE2+G,KAAM,IAAK,MAAS8+C,EAAW,WAAa,iBAGtD9nH,GAEJ4xK,EAnC4B,CAoCrC,GCxDE,EAAwC,WACxC,IAAI32N,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAmBxCs2N,EAA0C,SAAU1zN,GAEpD,SAAS0zN,IACL,IAAIlzN,EAAmB,OAAXR,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAEhE,OADAoJ,EAAMD,QAAUC,EAAMuyB,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,uBACvDlB,EAeX,OAnBA,EAAUkzN,EAA0B1zN,GAcpC0zN,EAAyBp2N,UAAUmT,OAAS,SAAUq2F,EAAMn3E,GACxD,IAAIgyB,EAAOvqD,KAAKmJ,QAAQgkB,YAExB,OADAo9B,EAAK//C,YAAYxK,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,8BAA+BoG,UAAW,MAClG65C,GAEJ+xK,EApBkC,CAqB3C,QCxCE,EAAwC,WACxC,IAAI92N,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAmBxCu2N,EAAgD,SAAU3zN,GAE1D,SAAS2zN,IACL,IAAInzN,EAAmB,OAAXR,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAEhE,OADAoJ,EAAMD,QAAUC,EAAMuyB,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,uBACvDlB,EAeX,OAnBA,EAAUmzN,EAAgC3zN,GAc1C2zN,EAA+Br2N,UAAUmT,OAAS,SAAUq2F,EAAMn3E,GAC9D,IAAIgyB,EAAOvqD,KAAKmJ,QAAQgkB,YAExB,OADAo9B,EAAK//C,YAAYxK,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,iBACxDigD,GAEJgyK,EApBwC,CAqBjD,QCxCE,EAAwC,WACxC,IAAI/2N,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAoBxC,EAA0C,SAAU4C,GAEpD,SAAS4zN,IACL,IAAIpzN,EAAmB,OAAXR,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAKhE,OAJAoJ,EAAMD,QAAUC,EAAMuyB,OAAOtxB,cAAc,KAAM,CAC7CC,UAAW,sBACXsK,MAAO,CAAE,gBAAiB,QAAS0yI,SAAU,QAE1Cl+I,EA6BX,OApCA,EAAUozN,EAA0B5zN,GAiBpC4zN,EAAyBt2N,UAAUmT,OAAS,SAAUq2F,EAAMn3E,EAAMrL,GAC9D,IAAIq9B,EAAOvqD,KAAKmJ,QAAQgkB,YAgBxB,OAfID,IAAe,eAAkBA,EAAW,WAC5Cq9B,EAAKjgD,UAAY,GACjBigD,EAAKjgD,UAAY4iB,EAAW,SAC5Bq9B,EAAK//C,YAAYxK,KAAK27B,OAAOtxB,cAAc,IAAK,CAAEC,UAAW,6CAA8CsK,MAAO,CAC1G2+G,KAAM,IAAK,MAASvzH,KAAKynJ,UAAUrnI,YAAY,iBAIvDmqC,EAAK//C,YAAYxK,KAAK27B,OAAOtxB,cAAc,IAAK,CAAEC,UAAW,+CAAgDsK,MAAO,CAC5G2+G,KAAM,IAAK,MAASvzH,KAAKynJ,UAAUrnI,YAAY,iBAGvDsvF,EAAKliE,YACL+c,EAAKv/C,UAAU0G,IAAI,wBAAyB,YAEzC64C,GAEJiyK,EArCkC,CAsC3C,QC1DE,EAAwC,WACxC,IAAIh3N,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAoBxC,EAAqC,SAAU4C,GAE/C,SAAS6zN,IACL,IAAIrzN,EAAmB,OAAXR,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAKhE,OAJAoJ,EAAMD,QAAUC,EAAMuyB,OAAOtxB,cAAc,KAAM,CAC7CC,UAAW,kCACXsK,MAAO,CAAE0yI,SAAU,KAAMzyI,KAAM,cAE5BzL,EA2BX,OAlCA,EAAUqzN,EAAqB7zN,GAiB/B6zN,EAAoBv2N,UAAUmT,OAAS,SAAUq2F,EAAMn3E,GACnD,IAAImkM,EAAc18N,KAAKmJ,QAAQgkB,YAS/B,GARAuvM,EAAYlyN,YAAYxK,KAAK27B,OAAOtxB,cAAc,MAAO,CACrDC,UAAW,6DACXsK,MAAO,CAAE,cAAe,WAExB86F,EAAKliE,aACLkvL,EAAY1xN,UAAU0G,IAAI,yBAC1BgrN,EAAY1xN,UAAU0G,IAAI,aAE1B1R,KAAK27B,OAAOovE,8BAAgC/qG,KAAK27B,OAAOkvE,4BAA6B,CACrF6xH,EAAY1xN,UAAU0G,IAAI,gBAC1B,IAAItG,EAAwC,UAAhCpL,KAAK27B,OAAO+2K,gBAA8B,EAA+C,GAA3C1yM,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,OAC5F,eAA6Bg2N,EAAatxN,EAAOpL,KAAK27B,OAAOpwB,UAA2C,UAAhCvL,KAAK27B,OAAO+2K,gBAA8B,QAAU,QAEhI,OAAOgqB,GAEJD,EAnC6B,CAoCtC,QCxDE,EAAwC,WACxC,IAAIj3N,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAqBxC,EAA2C,SAAU4C,GAErD,SAAS+zN,IACL,IAAIvzN,EAAmB,OAAXR,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAEhE,OADAoJ,EAAMD,QAAUC,EAAMuyB,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,oBACvDlB,EAoBX,OAxBA,EAAUuzN,EAA2B/zN,GAcrC+zN,EAA0Bz2N,UAAUmT,OAAS,SAAUq2F,EAAMn3E,GACzD,IAAIgyB,EAAOvqD,KAAKmJ,QAAQgkB,YAExB,GADAo9B,EAAK//C,YAAY,eAAc,MAAO,CAAEF,UAAW,iBAC/CtK,KAAK27B,OAAOovE,8BAAgC/qG,KAAK27B,OAAOkvE,4BAA6B,CACrFtgD,EAAKv/C,UAAU0G,IAAI,gBACnB,IAAItG,EAAwC,UAAhCpL,KAAK27B,OAAO+2K,gBAA8B,EAA+C,GAA3C1yM,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,OAC5F,eAA6B6jD,EAAMn/C,EAAOpL,KAAK27B,OAAOpwB,UAA2C,UAAhCvL,KAAK27B,OAAO+2K,gBAA8B,QAAU,QAEzH,OAAOnoJ,GAEJoyK,EAzBmC,CA0B5C,QCjBE,EAAwB,WAOxB,SAASC,EAAOjhM,EAAQurH,GACpBlnJ,KAAK68N,WAAY,EACjB78N,KAAK88N,QAAU,EACf98N,KAAK27B,OAASA,EACd37B,KAAKknJ,QAAUA,EACflnJ,KAAKu4B,KAAO,IAAI,OAAKoD,EAAQurH,GAC7BlnJ,KAAKmgB,KAAO+mI,EAAQmB,WAAW,gBAC/BroJ,KAAKs1N,YAAct1N,KAAKknJ,QAAQmB,WAAW,eAC3CroJ,KAAKigC,SAAWjgC,KAAKknJ,QAAQmB,WAAW,mBACxCroJ,KAAK4sC,mBAguBT,OAztBAgwL,EAAO12N,UAAUmT,OAAS,WACtB,IAAIs/B,EAAO34C,KAAK27B,OAChB37B,KAAK+8N,eAAiB/8N,KAAKigC,SAAS+8L,YAAY,OAAWnpD,QAC3D7zK,KAAKi9N,gBAAkBj9N,KAAKigC,SAAS+8L,YAAY,OAAWE,SAC5Dl9N,KAAK+8N,eAAepH,cACpB31N,KAAKi9N,gBAAgBtH,cACjBh9K,EAAKiX,aAAalpD,SAClB1G,KAAKm9N,kBAAmB,EACxBn9N,KAAK+8N,eAAe/G,cACpBh2N,KAAKi9N,gBAAgBjH,cACrBh2N,KAAKo9N,UAAS,IAElBp9N,KAAK27B,OAAOmvG,aAAalqH,WACzB5gB,KAAK27B,OAAOmvG,aAAaxiC,YACE,SAAvBtoG,KAAK27B,OAAOxwB,QACZnL,KAAK27B,OAAOmvG,aAAa3hC,aAE7BnpG,KAAKk6B,sBAQT0iM,EAAO12N,UAAU8U,QAAU,SAAUjI,GACjC,IAAI3J,EAAQpJ,UACF,IAAN+S,IAAgBA,EAAI,CAAEsjC,YAAa,YACvC,IAAIsC,EAAO34C,KAAK27B,OAChBgd,EAAKr5B,OAAOvM,EAAEsjC,YAAc,SAAUtjC,GACtC4lC,EAAK9qC,QAAQ,OAAoBkF,GAAG,SAAUyY,GAE1C,QADa,IAATA,IAAmBA,EAAO,CAAE6qB,YAAa,YACzC7qB,EAAKnX,OAAT,CAEI,GADAskC,EAAKr5B,OAAO,OAAoBkM,GACZ,gBAAhBA,EAAKpF,QAAiE,SAArChd,EAAMuyB,OAAO0e,eAAejmC,KAAiB,CAC9EhL,EAAMuyB,OAAO0e,eAAe/c,QAAQl0B,EAAMuyB,OAAOojK,aAAa6T,gBAAkBxpM,EAAMuyB,OAAOojK,aAAa+T,iBAC1G,IAAIkC,EAAY5rM,EAAMuyB,OAAO2oE,gBAAkBl7F,EAAMuyB,OAAOojK,aAAa,UAAUz6F,eAAiB,gBAAkB,iBAClHvyC,EAAM3oD,EAAMuyB,OAAOxyB,QAAQ2I,cAAc,kBAAoB1I,EAAMuyB,OAAOojK,aAAa,UAAUxkJ,IAAM,MAAMnzB,cAC7Gi2M,EAAStrK,EAAIjgD,cAAckjM,GAC1B,eAAkB5rM,EAAMuyB,OAAOojK,aAAa+T,mBAC7CuqB,EAAOryN,UAAU0G,IAAI,cAM7B,GAHoB,iBAAhB8Z,EAAKpF,QAAmE,aAArChd,EAAMuyB,OAAO0e,eAAejmC,MAA4D,UAArChL,EAAMuyB,OAAO0e,eAAejmC,OAClHhL,EAAMuyB,OAAO0e,eAAe/c,QAAUl0B,EAAMuyB,OAAOojK,aAAa+V,0BAE3C,aAArBtpL,EAAK6qB,YAA4B,CAEjC,IAAIhkC,EAAQsmC,EAAKK,cAAc1b,QAAQvzB,QAAQyhB,EAAKgmC,YACpD,IAAe,IAAXn/C,EAAc,CACdsmC,EAAK9nC,cAAc,CAAEmoC,cAAe,CAAEskL,QAAS3kL,EAAKK,cAAc1b,QAAQhrB,OAAOD,EAAO,MAAQ,GAChGsmC,EAAK9nC,cAAc,CAAEghD,aAAc,CAAEyrK,QAAS3kL,EAAKkZ,aAAav0B,QAAQhrB,OAAOD,EAAO,MAAQ,GAC9F,IAAIkqB,EAASoc,EAAK4Y,iBAAiB/lC,EAAKgmC,YACpC+rK,EAAa5kL,EAAKgtG,uBAAuBppH,EAAO4b,OACpD5b,EAAOjK,SAAY,eAAkBirM,KAAgBA,EAAWvyN,UAAUkB,SAAS,gBAtB/F,CAmCA,GARIysC,EAAK6kL,iBAAmC,gBAAhBhyM,EAAKpF,QAA4C,iBAAhBoF,EAAKpF,QACxC,cAArBoF,EAAK6qB,aAAqD,KAAtB7qB,EAAKiyM,cAAwC,QAAhBjyM,EAAKpF,UACvEuyB,EAAK2jC,gBAAgB,uBAAwB,GAE7C3jC,EAAKE,aAAeF,EAAKgY,aAAa+sK,WAAa/kL,EAAKsY,YAAYC,SAASC,WAC5D,QAAhB3lC,EAAKpF,QAAyC,SAArBoF,EAAK6qB,aAA2BsC,EAAKsY,YAAYC,SAASysK,UACpFhlL,EAAK9nC,cAAc,CAAE8/C,aAAc,CAAEG,SAAUnY,EAAKgY,aAAaG,SAAW,KAAO,GAE9D,WAArBtlC,EAAK6qB,aAA4BsC,EAAKE,YAAa,CACnD,IAAI+kL,EAAapyM,EAAK+M,KAAK7xB,OACvBk0B,EAAQ+d,EAAKgY,aAAauhH,kBAAoB0rD,EAC9C/pM,EAAkB8kB,EAAKi/H,wBAAwBlxK,UAE5CmtB,EAAkB+pM,IAAehjM,IAAW+d,EAAKgY,aAAaC,YAAc,GAAKjY,EAAKgY,aAAaG,WAAcl2B,GAAWA,GAASA,GAASgjM,KACjJjlL,EAAKklL,gBAAiB,EACtBllL,EAAK9nC,cAAc,CACf8/C,aAAc,CACVuhH,kBAAmBt3I,EAAOg2B,YAAa7hD,KAAKu2D,KAAK1qC,EAAQ+d,EAAKgY,aAAaG,aAEhF,GACHnY,EAAKsY,YAAYC,SAASghH,kBAAoBt3I,GAG7B,YAArBpP,EAAK6qB,aAA6BjtC,EAAMuyB,OAAOxB,YAAc,WAAY/wB,EAAMuyB,OAAOxB,aAG3D,WAArB3O,EAAK6qB,aAAiD,gBAArB7qB,EAAK6qB,aAAsD,YAArB7qB,EAAK6qB,cAC/EjtC,EAAMuyB,OAAOqd,cAAcqY,mBAAqBjoD,EAAMuyB,OAAOqd,cAAc1b,QAAQ52B,SAClF0C,EAAMuyB,OAAOmd,qBAAuB1vC,EAAMuyB,OAAOmiM,eACjD10N,EAAMuyB,OAAO69I,eAAeukD,gBAAgB30N,EAAMuyB,OAAOg1B,aAAaC,aAL1ExnD,EAAM6zN,gBAAgBe,mBAAmBxyM,GASzCpiB,EAAM8wB,mBAAmB1O,QAQrCoxM,EAAO12N,UAAU+3N,eAAiB,WAC9B,IAAItlL,EAAO34C,KAAK27B,OACZy5I,EAAcz8H,EAAKiX,aACvB,GAAIjX,EAAKu1D,eAAgB,CACrB,IAAIgwH,EAAmBvlL,EAAKxvC,QAAQ+H,GAAK,iBACzC,OAAgB,GAAKgtN,GAAoB,GACzC,gBAAoBA,EAAkB,kBAEtCvlL,EAAKK,cAAcijL,iBACnB,gBAAoBtjL,EAAKxvC,QAAQ+H,GAAK,kBAAmB,mBAEzDynC,EAAK6qK,aACL,gBAAoB7qK,EAAKxvC,QAAQ+H,GAAK,cAAe,eAErDynC,EAAKwlL,iBACL,gBAAoBxlL,EAAKxvC,QAAQ+H,GAAK,kBAAmB,mBAEzDynC,EAAKgY,aAAargB,UAClB,gBAAoBqI,EAAKxvC,QAAQ+H,GAAK,YAAa,gBAEvD,IAAK,IAAInK,EAAI,EAAGA,EAAIquK,EAAY1uK,OAAQK,IAChCquK,EAAYrwK,SAASgC,EAAEuQ,WAAY,KAAKg5B,WACxC,OAAgBqI,EAAKxvC,QAAQ+H,GAAKkkK,EAAYrwK,SAASgC,EAAEuQ,WAAY,KAAKijC,KAAO,GACjF,gBAAoB5B,EAAKxvC,QAAQ+H,GAAKkkK,EAAYrwK,SAASgC,EAAEuQ,WAAY,KAAKijC,IAAK,aAEnF66H,EAAYrwK,SAASgC,EAAEuQ,WAAY,KAAKmuF,gBACxC,gBAAoB9sD,EAAKxvC,QAAQ+H,GAAKkkK,EAAYrwK,SAASgC,EAAEuQ,WAAY,KAAKijC,IAAM,iBAAkB,kBAEtG66H,EAAYrwK,SAASgC,EAAEuQ,WAAY,KAAKuuF,gBACxC,gBAAoBltD,EAAKxvC,QAAQ+H,GAAKkkK,EAAYrwK,SAASgC,EAAEuQ,WAAY,KAAKijC,IAAM,iBAAkB,kBAI9G,IADA,IAAI6jL,EAAO,OACFhgM,EAAI,EAAGA,EAAIua,EAAKyX,WAAW1pD,OAAQ03B,IACxC,IAAK,IAAIK,EAAI,EAAGA,EAAIka,EAAKyX,WAAWrrD,SAASq5B,EAAE9mB,WAAY,KAAKgmB,QAAQ52B,OAAQ+3B,IAAK,CACjF,GAAIka,EAAKyX,WAAWrrD,SAASq5B,EAAE9mB,WAAY,KAAKgmB,QAAQv4B,SAAS05B,EAAEnnB,WAAY,KAAKw2F,eAAgB,CAChG,IAAI45C,EAAS/uG,EAAKxvC,QAAQ+H,GAAKynC,EAAKyX,WAAWrrD,SAASq5B,EAAE9mB,WAAY,KAAKgmB,QAAQv4B,SAAS05B,EAAEnnB,WAAY,KAAK,GAAK8mN,GAAQ,iBAC5H,gBAAoB12E,EAAQ,kBAEhC,GAAI/uG,EAAKyX,WAAWrrD,SAASq5B,EAAE9mB,WAAY,KAAKgmB,QAAQv4B,SAAS05B,EAAEnnB,WAAY,KAAKy2F,oBAAqB,CACjG25C,EAAS/uG,EAAKxvC,QAAQ+H,GAAKynC,EAAKyX,WAAWrrD,SAASq5B,EAAE9mB,WAAY,KAAKgmB,QAAQv4B,SAAS05B,EAAEnnB,WAAY,KAAK,GAAK8mN,GAAQ,sBAC5H,gBAAoB12E,EAAQ,uBAEhC,GAAI/uG,EAAKyX,WAAWrrD,SAASq5B,EAAE9mB,WAAY,KAAKgmB,QAAQv4B,SAAS05B,EAAEnnB,WAAY,KAAK02F,qBAAsB,CAClG05C,EAAS/uG,EAAKxvC,QAAQ+H,GAAKynC,EAAKyX,WAAWrrD,SAASq5B,EAAE9mB,WAAY,KAAKgmB,QAAQv4B,SAAS05B,EAAEnnB,WAAY,KAAK,GAAK8mN,GAAQ,uBAC5H,gBAAoB12E,EAAQ,2BAK5Ck1E,EAAO12N,UAAUm4N,gBAAkB,SAAUtrN,GACzC/S,KAAK27B,OAAO9tB,QAAQ,OAAuBkF,IAQ/C6pN,EAAO12N,UAAUg0B,mBAAqB,SAAU1O,GAC5C,IAAIpiB,EAAQpJ,UACC,IAATwrB,IAAmBA,EAAO,IAC9B,IAaI6O,EAbAse,EAAO34C,KAAK27B,OACZ2iM,EAAmD,YAAxC3lL,EAAKqwD,iBAAiBC,eAAoD,kBAArBz9E,EAAK6qB,aAC7C,mBAArB7qB,EAAK6qB,cAA4D,kBAArB7qB,EAAK6qB,aAAwD,mBAArB7qB,EAAK6qB,cACzFsC,EAAK4lL,qBACa,kBAArB/yM,EAAK6qB,aAAoC7qB,EAAKgzM,mBAAsBF,GACpEt+N,KAAK27B,OAAOikL,cAEZ0e,GACA3lL,EAAK8lL,YAAiC,kBAArBjzM,EAAK6qB,YAAkC7qB,EAAKkzM,YAAYC,aAAa3hM,KAC3D,mBAArBxR,EAAK6qB,YAAmC7qB,EAAKrB,eAAYhZ,GAEnEnR,KAAK27B,OAAOrc,OAAO,QAA4BkM,GAC/CxrB,KAAK68N,WAAY,EAEjB,IAAI+B,EAAW5+N,KAAK6+N,sBAEpB,GADA7+N,KAAKs1N,YAAY7vF,QAAQzlI,KAAK27B,OAAO6sE,aAAa12F,cAAc,IAAM,SAAmB,GACrF8sN,EAAU,CACV,IAAIh9B,EAAW,IAAI,OACnBvnK,EAAcr6B,KAAKmyK,SAASyvB,EAAUp2K,GAqB1C,GAnBK6O,EASDA,EAAcA,EAAYK,MAAK,SAAU3nB,GACrC,IAAIqnB,EAAQhxB,EAAMmvB,KAAKiC,gBAAgBC,gBACvC,GAAIrxB,EAAMyzN,UAAW,CACjB,IAAI3mL,EAAM,IAAI,OAEd,OADAA,EAAIS,QAAQ,CAAE5yC,OAAQ,GAAI62B,MAAO,IAC1Bsb,EAAIU,QAEf,OAAOxtC,EAAMmvB,KAAKgC,QAAQ/O,EAAM4O,OAfhCue,EAAKE,cAAgBF,EAAKvC,gBAAgB/b,YAAYF,WAAWsd,SAAWkB,EAAKgY,cAC9EhY,EAAKgY,aAAa+sK,WAAa/kL,EAAKsY,aAAetY,EAAKsY,YAAYC,UAAYvY,EAAKsY,YAAYC,SAASC,YAC7GxY,EAAKsY,YAAYC,SAASC,eAAYhgD,GAE1CkpB,EAAcr6B,KAAKu4B,KAAKgC,QAAQ/O,EAAMxrB,KAAKu4B,KAAKiC,gBAAgBC,kBAchEz6B,KAAK27B,OAAOqb,uBAAuBtwC,UAAYk4N,GAAY5+N,KAAK27B,OAAOme,eAAej2C,IAAI6C,QAAS,CACnG,IAAIo4N,EAAa,IAAI,OACrBzkM,EAAcA,EAAYK,MAAK,SAAU3nB,GAErC,OADA3J,EAAMuyB,OAAOrc,OAAO,QAA0B,CAAE+a,YAAaA,EAAat2B,OAAQgP,EAAG6jC,QAASkoL,EAAY14M,OAAQoF,IAC3GszM,EAAWloL,WAGtB52C,KAAK27B,OAAOqd,cAAcid,2BAA6Bj2D,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,SACzF2zB,EAAcA,EAAYK,MAAK,SAAU3nB,GAAK,OAAO3J,EAAM21N,qBAAqBhsN,OAEpFsnB,EAAYK,MAAK,SAAU3nB,GAAK,OAAO3J,EAAMuxB,mBAAmB5nB,EAAGyY,MAC9D6sB,OAAM,SAAUtlC,GAAK,OAAO3J,EAAM41N,mBAAmBjsN,EAAGyY,OAEjEoxM,EAAO12N,UAAUisK,SAAW,SAAU8sD,EAAUzzM,GAE5C,OADAxrB,KAAK27B,OAAOrc,OAAO,QAA0B,CAAE63B,WAAW,EAAMP,QAASqoL,EAAU74M,OAAQoF,IACpFyzM,EAASroL,SAEpBgmL,EAAO12N,UAAU24N,oBAAsB,WACnC,IAAIlmL,EAAO34C,KAAK27B,OAChB,SAAWgd,EAAK0a,gBAAkB1a,EAAK0B,eAAe/c,QAAQ52B,QACzDiyC,EAAKmB,eAAej2C,IAAU,SAAM7D,KAAKk/N,WAAWl/N,KAAK27B,OAAOqb,yBAEzE4lL,EAAO12N,UAAUg5N,WAAa,SAAU5hM,GACpC,IAAIl0B,EAAQpJ,KACZ,OAAOs9B,EAAQu1B,MAAK,SAAUd,GAC1B,IAAIotK,GAAQ,EAIZ,OAHAA,EAAQ/1N,EAAMuyB,OAAO0e,eAAe/c,QAAQu1B,MAAK,SAAU10C,GACvD,OAAO4zC,EAAIxX,MAAQp8B,EAAMo8B,UAEnB4kL,IAAS/1N,EAAMuyB,OAAOme,eAAej2C,IAAI6C,YAG3Dk2N,EAAO12N,UAAUk5N,gBAAkB,SAAU5zM,GACzC,IAAIpiB,EAAQpJ,KACZwrB,EAAK6qB,YAAc,YACnB,IAAIsC,EAAO34C,KAAK27B,OAChB,GAAIgd,EAAKE,aAAeF,EAAKgY,aAAa+sK,WAAa/kL,EAAKsY,YAAYC,SAASC,WAAaxY,EAAKsY,YAAYC,SAASysK,SAAU,CAC9H,IAAIC,EAAapyM,EAAK,WAAWmpC,aAAajuD,OAC1Ck3N,GACAjlL,EAAK9nC,cAAc,CAAE8/C,aAAc,CAAEG,SAAUnY,EAAKgY,aAAaG,SAAW8sK,KAAgB,GAGhGjlL,EAAKE,cAAgBrtB,EAAKkpC,QAAQC,aAAajuD,QAC/C8kB,EAAKkpC,QAAQE,eAAeluD,QAC5B8kB,EAAKkpC,QAAQG,eAAenuD,SAAWiyC,EAAKgY,cACzChY,EAAKgY,aAAa+sK,WAAa/kL,EAAKsY,aAAetY,EAAKsY,YAAYC,WACnEvY,EAAKvC,gBAAgB/b,YAAYF,WAAWsd,SAAWkB,EAAKsY,YAAYC,SAASC,YACrFxY,EAAKsY,YAAYC,SAASC,eAAYhgD,GAE1C,IAAIylC,EAAU52C,KAAKu4B,KAAKu8B,YAAYtpC,EAAKkpC,QAAS10D,KAAK27B,OAAO24B,0BAA0B,GAAI9oC,EAAK+pC,UAC7Fn7B,EAAQp6B,KAAKu4B,KAAKiC,gBAAgBC,gBAClCz6B,KAAKu4B,KAAK8B,YAAYF,WAAWsd,QACjCz3C,KAAKk6B,mBAAmB,CAAEmc,YAAa,cAKvCO,EAAQlc,MAAK,SAAU3nB,GACnB3J,EAAMmvB,KAAKgC,QAAQ/O,EAAM4O,GACpBM,MAAK,SAAU3nB,GAAK,OAAO3J,EAAMi2N,UAAUtsN,EAAGyY,MAC9C6sB,OAAM,SAAUtlC,GAAK,OAAO3J,EAAMk2N,UAAUvsN,EAAGyY,SAEnD6sB,OAAM,SAAUtlC,GAAK,OAAO3J,EAAMk2N,UAAUvsN,EAAGyY,OAG5DoxM,EAAO12N,UAAUm5N,UAAY,SAAUtsN,EAAGyY,GACtCxrB,KAAK26B,mBAAmB5nB,EAAGyY,IAE/BoxM,EAAO12N,UAAUo5N,UAAY,SAAUvsN,EAAGyY,GACtCxrB,KAAKg/N,mBAAmBjsN,EAAGyY,IAQ/BoxM,EAAO12N,UAAUq5N,eAAiB,WAC9Bv/N,KAAKo9N,UAAS,IAElBR,EAAO12N,UAAUk3N,SAAW,SAAUoC,GAClC,IAAI7mL,EAAO34C,KAAK27B,OACZsiE,EAAQj+F,KAAKi9N,gBAAgBzG,WAAW1kN,cAAc,QACrD,eAAkBmsF,IACnB,gBAAOA,GAEXA,EAAQj+F,KAAK27B,OAAOtxB,cAAc,OAAgB,CAAEuK,MAAO,CAAEC,KAAM,cACnE,IAAI4qN,EAAY9mL,EAAKu2D,qBAAuB,eAAkBv2D,EAAK+mL,gBAAgBC,UAAY,EAAI,GAC/FhnL,EAAKu1D,gBAAkBv1D,EAAKw1D,cAC1BsxH,EAEN,IACI3xB,EADApqK,EAAK1jC,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,aAAcsK,MAAO,CAAEC,KAAM,SAEnF,GAAI8jC,EAAKinL,oBAAqB,CAC1B,IAAIC,EAAwBlnL,EAAKxvC,QAAQ+H,GAAK,sBAC9C48L,EAAK9tM,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEuK,MAAO,CAAEmxM,SAAUptK,EAAKwtG,oBAAoBz/I,OAAS+4N,EAAY9mL,EAAKK,cAAc1b,QAAQ52B,QAAQ4Q,cACvIqhC,EAAK2W,MACLw+I,EAAGtjM,YAAYmuC,EAAKmnL,wBAALnnL,CAA8BA,EAAKxe,WAAYwe,EAAM,sBAAuBknL,OAAuB1uN,OAAWA,OAAWA,EAAWnR,KAAK27B,OAAO,SAAS,IAGxKmyK,EAAGtjM,YAAYmuC,EAAKmnL,wBAALnnL,CAA8BA,EAAKxe,WAAYwe,EAAM,sBAAuBknL,OAAuB1uN,OAAWA,OAAWA,EAAWnR,KAAK27B,OAAO,SAAS,IAExKgd,EAAK5qC,SACL/N,KAAK27B,OAAOgsH,uBAIhBmmD,EAAK9tM,KAAK27B,OAAOtxB,cAAc,KAAM,CACjCqG,UAAW1Q,KAAKmgB,KAAKC,YAAY,eACjCxL,MAAO,CAAEmxM,SAAUptK,EAAKwtG,oBAAoBz/I,OAAS+4N,EAAY9mL,EAAKK,cAAc1b,QAAQ52B,QAAQ4Q,cAGxGqhC,EAAK+vD,iBACLolG,EAAG9iM,UAAU0G,IAAI,gBACjBo8L,EAAGnhM,MAAM7B,KAAO,OAEhB6tC,EAAKiwD,YAAcjwD,EAAKxvC,QAAQ2I,cAAc,wBAC9C9R,KAAK27B,OAAOxyB,QAAQ2I,cAAc,uBAAuB9G,UAAU0G,IAAI,qBAE3EgyB,EAAGl5B,YAAYsjM,GACf7vG,EAAMzzF,YAAYk5B,GAClB1jC,KAAKi9N,gBAAgB8C,YAAY9hI,GAC7BuhI,IACAx/N,KAAK27B,OAAO9tB,QAAQ,QAAkB,IACtC7N,KAAK27B,OAAOrc,OAAO,QAAgB,CAAEke,KAAM,CAAC,IAAI,OAAI,CAAE2mL,WAAW,EAAM30G,MAAO,CAAC,IAAI,OAAK,CAAEG,YAAY,EAAMr9E,SAAS,YAG7HsqM,EAAO12N,UAAU85N,oBAAsB,WAC/BhgO,KAAK27B,OAAOi8I,wBAAwBlxK,QACpC1G,KAAKigO,iBAAiBjgO,KAAK27B,OAAOi8I,wBAAwB,KAGlEglD,EAAO12N,UAAU+5N,iBAAmB,SAAUlmD,GAO1C,IANA,IACI57J,EADAmf,EAAUt9B,KAAK27B,OAAOi0B,aAEtB8lH,EAAU,eACVk6C,EAAU,UACVr3L,EAAOwhJ,GAAUA,EAAOvgF,MAAQugF,EAAOvgF,MAAM,GAAKugF,EAClDmmD,EAAOlgO,KAAKknJ,QAAQmB,WAAW,kBAC1BthJ,EAAI,EAAG2hB,EAAM4U,EAAQ52B,OAAQK,EAAI2hB,EAAK3hB,IAAK,CAChDoX,EAAQ,eAAUmf,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6gC,OAAS,GAAI5f,GAC9D,eAAkB+E,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK,GAAKo+J,MAC5Dp4I,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0K,OAASsb,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK,GAAKo+J,IAErF,eAAkBp4I,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6oN,kBACnD,eAAkB7iM,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6oN,gBAAgB,GAAKvQ,MAC/EtyL,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6oN,gBAAgB,GAAKvQ,GAAS,GAAK5vN,KAAK27B,OAAOxyB,QAAQ+H,GAAKosB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6oN,gBAAgB,GAAKvQ,GAAS,IAElKtyL,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK86C,mBAAqB90B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKwgC,aAC7F35B,EAAQ,eAAUmf,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK8gC,iBAAmB,GAAI9a,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKwgC,WAAW,KAE3H,eAAkB35B,GAQnBmf,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKlD,KAAOkpB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKlD,MAAQ,MAPvFpU,KAAKogO,cAAe,EACf9iM,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKlD,OACrCkpB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKlD,KAAO+J,EAAMk7B,OAAUl7B,EAAM4K,WAAa,GAAK5K,EAAM6K,aAAe,GACpG7K,EAAM8K,aAAe,GAAK9K,EAAM+K,kBAAoB,EAAI,WAAa,cAAiB,IAMlG,IAAI67E,EAAiB,IAAI,OACrBznE,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0K,SAAWsb,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0K,OAAOC,UACtFqb,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0K,OAAOA,QACkB,kBAAtDsb,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0K,OAAOA,UACtDsb,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0tF,aAAaD,EAAeE,kBAAkB,eAAO,GAAI3nE,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0K,UACjIsb,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK4tF,UAAUH,EAAeI,kBAAkB7nE,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0K,UAE3D,kBAAhDsb,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAW,OAClD,gBAAatX,KAAKknJ,QAAS5pH,EAAQv4B,SAASgC,EAAEuQ,WAAY,MAEpDgmB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0K,QAAuD,WAA7Csb,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKlD,MACxFkpB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK4tF,UAAUg7H,EAAK/6H,kBAAkB,CAAEnjF,OAAQ,QAElC,aAA7Csb,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKlD,MAAwBkpB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0K,SAChGsb,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0K,OAAS,MAC7C,gBAAahiB,KAAKknJ,QAAS5pH,EAAQv4B,SAASgC,EAAEuQ,WAAY,SAWtEslN,EAAO12N,UAAUy0B,mBAAqB,SAAU5nB,EAAGyY,GAC/C,IAAIpiB,EAAQpJ,KACR24C,EAAO34C,KAAK27B,OAChB37B,KAAKi9N,gBAAkBj9N,KAAKigC,SAAS+8L,YAAY,OAAWE,SAC5Dl9N,KAAK+8N,eAAiB/8N,KAAKigC,SAAS+8L,YAAY,OAAWnpD,QAC3D9gK,EAAEstN,WAAa70M,EACf,IAAI80M,EAAmBtgO,KAAK27B,OAAO+0B,0BAA4B1wD,KAAK27B,OAAOygM,uBAAuBC,cAC7F1jL,EAAKK,cAAcqY,oBAA2C,WAArB7lC,EAAK6qB,aAAkD,SAArB7qB,EAAK6qB,aAChC,QAAjDr2C,KAAK27B,OAAOo1B,qBAAqB1a,eAA2BsC,EAAKkZ,aAAav0B,QAAQ52B,QACtFiyC,EAAK0B,eAAe/c,QAAQ52B,QAAU1G,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,QAAUiyC,EAAKmB,eAAej2C,MAE1G80C,EAAK9qC,QAAQ,OAAwBkF,GAAG,SAAUijD,GAC9C,IAAIA,EAAS3hD,OAAb,CAGA2hD,EAASjyD,OAAS,eAAkBiyD,EAASjyD,QAAU,GAAKiyD,EAASjyD,OACrE,IAAI2kB,EAAMhjB,OAAOoV,KAAKk7C,EAASjyD,QAAQ2C,OACvC,IAAI0C,EAAMuyB,OAAOkR,YAGjB,GAAM8L,EAAKiX,aAAalpD,QAAWgiB,GAAUiwB,EAAKrb,QAAQ52B,QAAUiyC,EAAKrb,QAAQ,aAAc,OAI/F,IAAIl0B,EAAMm3N,cAAc/0M,IAAU9C,EAAlC,CAgBA,GAZAtf,EAAMuyB,OAAOqvE,QAAS,EACtB5hG,EAAMuyB,OAAOrc,OAAO,QAAkB,IACtClW,EAAMuyB,OAAOrc,OAAO,QAAuB,IACvCkM,GAA6B,mBAArBA,EAAK6qB,aACbjtC,EAAMuyB,OAAOrc,OAAO,QAA6B,CAAElL,KAAM,yBAE7DhL,EAAM6zN,gBAAgBuD,gBAAkBp3N,EAAMuyB,OAAO9H,gBAAgBvgB,QACrEqlC,EAAK9kB,gBAAkBmiC,EAASjyD,OAChC40C,EAAKr5B,OAAO,QAAuC,CAAEkM,KAAMA,EAAM+M,KAAMy9B,EAASjyD,SAC5EiyD,EAASp7B,QAAU+d,EAAKE,cAAgBF,EAAKG,sBAAwBH,EAAK+X,2BAC1E/X,EAAK69J,sBAAwBxgJ,EAASp7B,QAErClS,GAAOstC,EAASp7B,OAAS+d,EAAKE,aAAertB,GAA6B,WAArBA,EAAK6qB,YAW3D,OAVIjtC,EAAMuyB,OAAOqd,cAAcqY,mBACF,aAArB7lC,EAAK6qB,aAAmD,eAArB7qB,EAAK6qB,aAC5CjtC,EAAMuyB,OAAOrc,OAAO,QAAsBkM,GAE9CmtB,EAAKklL,gBAAiB,EACtBllL,EAAKgY,aAAauhH,kBAAoBl8G,EAASp7B,MACtB,WAArBpP,EAAK6qB,cACLsC,EAAKgY,aAAaC,YAAc7hD,KAAKu2D,KAAKtP,EAASp7B,MAAQ+d,EAAKgY,aAAaG,gBAEjFnY,EAAKhrC,WA+BT,IA5BMgrC,EAAKiX,aAAalpD,SAAUgiB,IAAQtf,EAAM+zN,kBAAsB,gBAAgBxkL,KAClFA,EAAK8nL,gBACLr3N,EAAMs3N,uBAAuB1qK,KAE5B5sD,EAAMg3N,cAAgBznL,EAAKi/H,0BACxBxuK,EAAMmvB,KAAK8B,YAAYF,WAAWsd,SAAWkB,EAAKxe,YAAcwe,EAAKxe,WAAWzzB,OAChF0C,EAAM62N,iBAAiBtnL,EAAKxe,WAAW,IAGvC/wB,EAAM62N,iBAAiBtnL,EAAKi/H,wBAAwB,KAGvDxuK,EAAMuyB,OAAOotE,gBAAiB3/F,EAAMuyB,OAAOqd,cAAcid,2BACzD7sD,EAAMuyB,OAAOqd,cAAc1b,QAAQ52B,SACpCsvD,EAASjyD,OAASqF,EAAMuyB,OAAOxB,sBAAsBt0B,MAAQuD,EAAMuyB,OAAOxB,WAAa/wB,EAAMuyB,OAAO9H,kBAEnGzqB,EAAMuyB,OAAO5tB,UAAW3E,EAAMuyB,OAAO2zB,OAAW,eAAkB9jC,IAA8B,mBAArBA,EAAK6qB,aAAqC7qB,EAAK8/E,UAC3H,eAAuBliG,EAAMuyB,OAAQ,CAAC,mBAEtCvyB,EAAMuyB,OAAO7e,WAAa1T,EAAMuyB,OAAOod,eAAiB3vC,EAAMuyB,OAAOqd,cAAcijL,kBAC7E,eAAkBzwM,IAA8B,mBAArBA,EAAK6qB,cACtCjtC,EAAMuyB,OAAO2vK,gBAAgB,CAAC,kCAElCliM,EAAMuyB,OAAOrc,OAAO,QAAkB,eAAO,CAAEsb,MAAOo7B,EAASp7B,MAAO72B,OAAQiyD,EAASjyD,OAAQqsD,WAAY4F,EAAS5F,YAAc5kC,KAC7HmtB,EAAKK,cAAc1b,QAAQ52B,QAAW8kB,GAA6B,eAArBA,EAAK6qB,cAChD7qB,GAA6B,cAArBA,EAAK6qB,aACjBjtC,EAAM2zN,eAAe/D,YAErBtwM,EAAK,CACL,GAAI,gBAAgBiwB,GAAO,CACvB,IAAIloC,EAAU,UACd+a,EAAK5U,UAAY,CAAE/L,IAAKzB,EAAM6zN,gBAAgB,GAAKxsN,GAASmG,WAE3D0pN,EASDl3N,EAAMuyB,OAAOrc,OAAO,QAA4B,CAAEvM,EAAGyY,EAAMznB,OAAQgP,EAAEhP,OAAQ62B,MAAO7nB,EAAE6nB,MAAO+lM,IAAK5tN,EAAEq9C,aARhGhnD,EAAMuyB,OAAOitL,oBACbx/M,EAAM6zN,gBAAgB2D,uBAAuBp1M,GAG7CpiB,EAAM6zN,gBAAgBe,mBAAmBxyM,OAOhD,CACD,GAAIA,GAAQA,EAAKgzM,kBACb,OAEJ,IAAK7lL,EAAKiX,aAAalpD,OAGnB,OAFAiyC,EAAKxvC,QAAQuH,UAAY,QACzBmwN,MAAMz3N,EAAM+W,KAAKC,YAAY,yBAWjC,GARAhX,EAAM6zN,gBAAgB6D,eAAe,IACrC13N,EAAM6zN,gBAAgB8D,cAAc,IACpC33N,EAAMksN,YAAY7vF,QAAQr8H,EAAMuyB,OAAO6sE,aAAa12F,cAAc,IAAM,SAAmB,GAC3F6mC,EAAK8nL,gBACLr3N,EAAMm2N,iBACF5mL,EAAK8vD,6BAA+B//E,GACpCtf,EAAMuyB,OAAOrc,OAAO,QAAqB,CAAEke,KAAMmb,EAAKwsK,gBAAiB35L,KAAM,KAE7EA,EAAM,CACN,IAAIpF,GAAUoF,EAAK6qB,aAAe,IAAI/uB,cAAgB,YACtDle,EAAMuyB,OAAOrc,OAAO8G,EAAQoF,GACH,cAArBA,EAAK6qB,cACL7qB,EAAKnX,QAAS,EACdmX,EAAKgS,KAAO,GACZhS,EAAK8/E,UAAY9/E,EAAK8/E,SACtBliG,EAAMuyB,OAAO9tB,QAAQ,OAAuB2d,IAGhDpiB,EAAMuyB,OAAO8oE,SACbr7F,EAAMuyB,OAAOqlM,uBAEjB53N,EAAMuyB,OAAOokL,cAEjB32M,EAAMuyB,OAAOrc,OAAO,QAAuB,IAC3ClW,EAAM63N,YAAY73N,EAAMuyB,OAAOi8I,wBAAwBlxK,QACnD,UAAWqM,IACX3J,EAAMuyB,OAAOya,gBAAgBiZ,wBAAyB,QA5GtDjmD,EAAMuyB,OAAOrc,OAAO,QAA4B,CAAEvM,EAAGyY,EAAMznB,OAAQgP,EAAEhP,OAAQ62B,MAAO7nB,EAAE6nB,MAAO+lM,IAAK5tN,EAAEq9C,kBAJpGzX,EAAKonK,mBA2HjB6c,EAAO12N,UAAU84N,mBAAqB,SAAUjsN,EAAGyY,GAC1C,eAAkBxrB,KAAK27B,OAAO69I,iBAC/Bx5K,KAAKs1N,YAAYnwF,WAAWnlI,KAAK27B,OAAO6sE,aAAa12F,cAAc,IAAM,QAAmB,CAAE6zH,MAAM,EAAO5iH,SAAS,IACpH/iB,KAAKihO,YAAY,IAErBjhO,KAAK27B,OAAO9tB,QAAQ,OAAsB,CAAEklH,MAAOhgH,IACnD/S,KAAK27B,OAAOokL,cACZ//M,KAAK27B,OAAO8kM,gBACa,SAArBj1M,EAAK6qB,aAA+C,WAArB7qB,EAAK6qB,aACnB,cAAd7qB,EAAKlnB,OAGZtE,KAAK27B,OAAO9H,gBAAkB,GAC9B7zB,KAAKu/N,iBACAv/N,KAAK27B,OAAOotE,eACb/oG,KAAK27B,OAAOiqH,YAAYs7E,4BAE5BlhO,KAAK27B,OAAO2c,IAAI,gBAAiB,CAAEy6E,MAAOhgH,MAE9C6pN,EAAO12N,UAAU+6N,YAAc,SAAUE,GACrCnhO,KAAKs1N,YAAYnwF,WAAWnlI,KAAK27B,OAAOxyB,QAAS,CAC7Co9H,SAAU46F,EAAeA,EAAa7pN,WAAa,OAG3DslN,EAAO12N,UAAUq6N,cAAgB,SAAU/0M,GACvC,OAAOxrB,KAAK27B,OAAO+0B,0BAA4B1wD,KAAK27B,OAAOygM,uBAAuBC,aAAoC,WAArB7wM,EAAK6qB,aAE1GumL,EAAO12N,UAAUw6N,uBAAyB,SAAU3tN,GAChD/S,KAAKm9N,kBAAmB,EACxB,IAAIiE,GAAa,EACbphO,KAAK27B,OAAO2B,QAAQ52B,OAAS,IAC7B1G,KAAKqhO,aAAatuN,EAAEhP,OAAO,IAC3Bq9N,GAAa,GAEjB,gBAAephO,KAAK27B,OAAO2B,QAAS,KAAMt9B,KAAK27B,QAC3CylM,GACAphO,KAAK27B,OAAOrc,OAAO,QAAiC,IAExDtf,KAAK+8N,eAAe/G,cACpBh2N,KAAKi9N,gBAAgBjH,cACrBh2N,KAAK27B,OAAO2lM,WAAY,EACxBthO,KAAK27B,OAAOrc,OAAO,OAAgB,KAEvCs9M,EAAO12N,UAAUq7N,sBAAwB,SAAUpmK,EAAKhjB,EAAO93C,GAE3D,IADA,IAAIya,EAAOpV,OAAOoV,KAAKqgD,GACdp0D,EAAI,EAAGA,EAAI+T,EAAKpU,OAAQK,IAAK,CAClC,IAAIy6N,EAA6D,kBAA1CrmK,EAAIrgD,EAAK/V,SAASgC,EAAEuQ,WAAY,QAChD6jD,EAAIrgD,EAAK/V,SAASgC,EAAEuQ,WAAY,OAAW6jD,EAAIrgD,EAAK/V,SAASgC,EAAEuQ,WAAY,gBAAiB+G,KAC1C,GAArD3Y,OAAOoV,KAAKqgD,EAAIrgD,EAAK/V,SAASgC,EAAEuQ,WAAY,OAC5CkqN,EAAU96N,OACV1G,KAAKuhO,sBAAsBpmK,EAAIrgD,EAAK/V,SAASgC,EAAEuQ,WAAY,MAAO6gC,GAASr9B,EAAK/V,SAASgC,EAAEuQ,WAAY,KAAO,KAAMjX,IAGpHA,EAAML,KAAK88N,SAAW3kL,EAAQr9B,EAAK/V,SAASgC,EAAEuQ,WAAY,KAC1DtX,KAAK88N,aAIjBF,EAAO12N,UAAUm7N,aAAe,SAAUtnD,GACtC,IAAI1pH,EAAO,GACPoxK,EAAc,GAClBzhO,KAAKuhO,sBAAsBxnD,EAAQ,GAAI0nD,GAGvC,IAFA,IAAInkM,EAAU53B,OAAOoV,KAAK2mN,GAAaroM,QAAO,SAAUrmB,GAAK,MAA+B,WAAxB0uN,EAAY,GAAK1uN,MACjFtG,KAAI,SAAU0rC,GAAS,OAAOspL,EAAY,GAAKtpL,MAC1CpxC,EAAI,EAAG2hB,EAAM4U,EAAQ52B,OAAQK,EAAI2hB,EAAK3hB,IAC3CspD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAO,CAAE,MAASgmB,EAAQv4B,SAASgC,EAAEuQ,WAAY,MACzEtX,KAAK27B,OAAO8sE,6BACZp4C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKlM,MAAS,eAAkBilD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKlM,OAChD,IAAzCilD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKlM,OAG7CpL,KAAK27B,OAAO9qB,cAAc,CAAE,QAAWw/C,IAAQ,IAEnDusK,EAAO12N,UAAUw7N,oBAAsB,WACnC1hO,KAAKigC,SAAS0hM,YAAY,OAAW9tD,OAAQ,IAAI,EAAa7zK,KAAK27B,OAAQ37B,KAAKknJ,UAChFlnJ,KAAKigC,SAAS0hM,YAAY,OAAWzE,QAAS,IAAI,OAAcl9N,KAAK27B,OAAQ37B,KAAKknJ,UAClF,IAAIuqD,EAAazxM,KAAKknJ,QAAQmB,WAAW,uBACzCopD,EAAWnpD,gBAAgB,OAASurB,OAAQ,IAAI,EAAmB7zK,KAAK27B,OAAQ37B,KAAKknJ,UACrFuqD,EAAWnpD,gBAAgB,OAAS75F,KAAM,IAAI,OAAazuD,KAAK27B,OAAQ37B,KAAKknJ,UAC7EuqD,EAAWnpD,gBAAgB,OAASqrB,cAAe,IAAI,EAA0B3zK,KAAK27B,OAAQ37B,KAAKknJ,UACnGuqD,EAAWnpD,gBAAgB,OAASh5C,OAAQ,IAAI,EAAmBtvG,KAAK27B,OAAQ37B,KAAKknJ,UACrFuqD,EAAWnpD,gBAAgB,OAASs5E,aAAc,IAAI,EAAyB5hO,KAAK27B,OAAQ37B,KAAKknJ,UACjGuqD,EAAWnpD,gBAAgB,OAASu5E,kBAAmB,IAAI3F,EAA8Bl8N,KAAK27B,OAAQ37B,KAAKknJ,UAC3GuqD,EAAWnpD,gBAAgB,OAASw5E,OAAQ,IAAI,EAAmB9hO,KAAK27B,OAAQ37B,KAAKknJ,UACrFuqD,EAAWnpD,gBAAgB,OAAS0rB,aAAc,IAAIsoD,EAAyBt8N,KAAK27B,OAAQ37B,KAAKknJ,UACjGuqD,EAAWnpD,gBAAgB,OAASqrB,cAAe,IAAI,EAA0B3zK,KAAK27B,OAAQ37B,KAAKknJ,UACnGuqD,EAAWnpD,gBAAgB,OAASm3B,aAAc,IAAI88C,EAA+Bv8N,KAAK27B,OAAQ37B,KAAKknJ,UACvGuqD,EAAWnpD,gBAAgB,OAASqqD,aAAc,IAAI,EAA0B3yM,KAAK27B,OAAQ37B,KAAKknJ,UAClGuqD,EAAWnpD,gBAAgB,OAASs8D,aAAc,IAAI,EAAyB5kN,KAAK27B,OAAQ37B,KAAKknJ,UACjGuqD,EAAWnpD,gBAAgB,OAASj5C,mBAAoB,IAAI,EAAmBrvG,KAAK27B,OAAQ37B,KAAKknJ,UACjGuqD,EAAWnpD,gBAAgB,OAASwgE,YAAa,IAAI,EAAoB9oN,KAAK27B,OAAQ37B,KAAKknJ,WAE/F01E,EAAO12N,UAAU0mC,iBAAmB,WAChC,IAAIxjC,EAAQpJ,KACRA,KAAK27B,OAAOkR,cAGhB7sC,KAAK27B,OAAOqR,GAAG,QAAoBhtC,KAAK0hO,oBAAqB1hO,MAC7DA,KAAK27B,OAAOqR,GAAG,oBAAqBhtC,KAAK26B,mBAAoB36B,MAC7DA,KAAK27B,OAAOqR,GAAG,QAAqBhtC,KAAKgb,QAAShb,MAClDA,KAAK27B,OAAOqR,GAAG,QAAwBhtC,KAAKq+N,gBAAiBr+N,MAC7DA,KAAK27B,OAAOqR,GAAG,OAAiBhtC,KAAKo/N,gBAAiBp/N,MACtDA,KAAK27B,OAAOqR,GAAG,SAAsB,WAAc5jC,EAAMyzN,WAAY,IAAS78N,MAC9EA,KAAK27B,OAAOqR,GAAG,OAAgBhtC,KAAKggO,oBAAqBhgO,QAO7D48N,EAAO12N,UAAU64N,qBAAuB,SAAUhsN,GAC9C,IAAI3J,EAAQpJ,KACRqS,EAAQU,EAAEhP,OAAO2C,OAAS,EAC9B,GAAI2L,EAAQ,EACR,OAAOslC,QAAQhB,QAAQ5jC,GAE3B,IAAIgvN,EAAShvN,EAAEhP,OAAO,GAClBi+N,EAASjvN,EAAEhP,OAAOgB,SAASsN,EAAMiF,WAAY,KAC7CkhC,EAAY,GACZypL,EAAW,SAAUp9N,GAErB,IADA,IAAIq9N,EAAS,CAACH,EAAQC,GACbj7N,EAAI,EAAGA,EAAIm7N,EAAOx7N,OAAQK,IAC/ByxC,EAAUvmC,KAAK,IAAI,OAAU,QAAS,KAAMiwN,EAAOn9N,SAASgC,EAAEuQ,WAAY,KAAK6gC,OAAO+b,IAAI9qD,EAAM0qD,aAAa,MAAO,QAASouK,EAAOn9N,SAASgC,EAAEuQ,WAAY,KAAKzT,OAEpKgB,EAAM20C,MAAM,OAAUC,GAAGjB,KAEzBpe,EAAQ,IAAI,OAChB6nM,EAAS7nM,GACT,IAAI+nM,EAAQ,IAAI,OAAYpvN,EAAEhP,QAC1Bq+N,EAAYD,EAAMjpL,aAAa9e,GAC/BioM,EAAWriO,KAAKu4B,KAAKiC,eAAc,GACnC8nM,EAAa,GACjB,GAAItiO,KAAKu4B,KAAK45B,WAAY,CAEtB,IADA,IAAI+vK,EAAS,CAACH,EAAQC,GACbj7N,EAAI,EAAGA,EAAIm7N,EAAOx7N,OAAQK,IAC/Bu7N,EAAWrwN,KAAKjS,KAAK8zD,aAAaouK,EAAOn9N,SAASgC,EAAEuQ,WAAY,KAAK6gC,MAAO,QAAS+pL,EAAOn9N,SAASgC,EAAEuQ,WAAY,KAAKzT,MAE5Hw+N,EAAS7oL,MAAM,OAAUC,GAAG6oL,SAG5BL,EAASI,GAEb,IAAIpD,EAAW,IAAI,OAKnB,OAJAj/N,KAAKu4B,KAAKgC,QAAQ,GAAI8nM,GAAU3nM,MAAK,SAAU/zB,GAC3CyC,EAAMm5N,gBAAgBH,EAAWz7N,EAAE5C,QACnCk7N,EAAStoL,QAAQ5jC,MAClBslC,OAAM,SAAUtlC,GAAK,OAAOksN,EAAS1mL,OAAOxlC,MACxCksN,EAASroL,SAEpBgmL,EAAO12N,UAAU4tD,aAAe,SAAUjwD,EAAKy1C,EAAUn7B,GACrD,OAAIA,aAAiBE,KACV,eAAiB,CAAE85B,MAAOt0C,EAAKy1C,SAAUA,EAAUn7B,MAAOA,IAE9D,IAAI,OAAUta,EAAKy1C,EAAUn7B,IAExCy+M,EAAO12N,UAAUq8N,gBAAkB,SAAUC,EAASC,GAGlD,IAFA,IAAIj2K,EAAK,IAAI,OAAYi2K,GACrBhgK,EAAW+/J,EACNz7N,EAAI,EAAGA,EAAI07D,EAAS/7D,OAAQK,IAAK,CACtC,IAAI27N,EAASl2K,EAAGtT,cAAa,IAAI,QAC5BM,MAAM,IAAI,OAAU,QAAS,KAAMipB,EAAS19D,SAASgC,EAAEuQ,WAAY,KAAK6gC,OAAO+b,IAAIl0D,KAAK8zD,aAAa,MAAO,QAAS2O,EAAS19D,SAASgC,EAAEuQ,WAAY,KAAKzT,QAAQ,GACvK4+D,EAAS19D,SAASgC,EAAEuQ,WAAY,KAAKsjB,MAAQ8nM,EAAO9nM,MACpD,IAAI+nM,EAAYlgK,EAAS19D,SAASgC,EAAEuQ,WAAY,KAAKkiF,MACjDopI,EAAaF,EAAOlpI,MACpBmpI,EAAUzoD,YACVz3G,EAAS19D,SAASgC,EAAEuQ,WAAY,KAAKkiF,MACjCx5F,KAAKuiO,gBAAgB9/J,EAAS19D,SAASgC,EAAEuQ,WAAY,KAAKkiF,MAAOkpI,EAAOlpI,QAGhF,IADA,IAAIh8D,EAAOx9B,KAAK27B,OAAOy0B,WACd3xB,EAAI,EAAGA,EAAIjB,EAAK92B,OAAQ+3B,IAE7B,IADA,IAAIjC,EAAMgB,EAAKz4B,SAAS05B,EAAEnnB,WAAY,KAC7B8mB,EAAI,EAAGA,EAAI5B,EAAIc,QAAQ52B,OAAQ03B,IAIpC,IAHA,IAAIkyB,EAAQ9zB,EAAIc,QAAQv4B,SAASq5B,EAAE9mB,WAAY,KAAKlD,gBAAgBvO,MAC/D22B,EAAIc,QAAQv4B,SAASq5B,EAAE9mB,WAAY,KAAS,KAC7C,CAAEklB,EAAIc,QAAQv4B,SAASq5B,EAAE9mB,WAAY,KAAS,MACzCtS,EAAI,EAAGA,EAAIsrD,EAAM5pD,OAAQ1B,IAAK,CACnC,IAAInB,EAAM24B,EAAIc,QAAQv4B,SAASq5B,EAAE9mB,WAAY,KAAK6gC,MAAQ,MAAQmY,EAAMvrD,SAASC,EAAEsS,WAAY,KAAKgQ,cAChGiR,EAAOoqM,EAAUn0H,MAAQo0H,EAAW3pL,QAAUypL,EAAOlpI,MACrDqpI,EAAU7iO,KAAK27B,OACnB,GAA0C,WAAtC20B,EAAMvrD,SAASC,EAAEsS,WAAY,KAAmB,CAChD,IAAI67B,EAASwvL,EAAUn0H,MAAQo0H,EAAaF,EACxCx5K,EAAO1sB,EAAIc,QAAQv4B,SAASq5B,EAAE9mB,WAAY,KACzCwrN,gBACe,kBAAT55K,IACPA,EAAO,eAASA,EAAM98C,SAE1Bq2D,EAAS19D,SAASgC,EAAEuQ,WAAY,KAAK84C,WAAW,GAAKvsD,GAAOqlD,EAAOA,EAAK7/C,KAAKw5N,EAAS1vL,EAAQ3W,EAAIc,QAAQv4B,SAASq5B,EAAE9mB,WAAY,MAAQ,QAGzImrD,EAAS19D,SAASgC,EAAEuQ,WAAY,KAAK84C,WAAW,GAAKvsD,GAAO,OAASusD,WAAWE,EAAMvrD,SAASC,EAAEsS,WAAY,KAAKgQ,eAAeiR,EAAMiE,EAAIc,QAAQv4B,SAASq5B,EAAE9mB,WAAY,KAAK6gC,QAMnM,OAAOqqL,GAEJ5F,EAhvBgB,GCvBvB,EAAqC,WACrC,SAASmG,IACL/iO,KAAKgjO,cAAgB,GAkBzB,OAhBAD,EAAoB78N,UAAUoiJ,gBAAkB,SAAUhkJ,EAAM8P,GAC5D9P,EAAuB,kBAATA,EAAoBA,EAAO,eAAa,OAAUA,GAC5D,eAAkBtE,KAAKgjO,cAAc,GAAK1+N,MAC1CtE,KAAKgjO,cAAc,GAAK1+N,GAAQ8P,IAGxC2uN,EAAoB78N,UAAUy+M,gBAAkB,SAAUrgN,GAEtD,GADAA,EAAuB,kBAATA,EAAoBA,EAAO,eAAa,OAAUA,GAC5D,eAAkBtE,KAAKgjO,cAAc,GAAK1+N,IAE1C,KAAM,oBAAsBA,EAAO,gBAGnC,OAAOtE,KAAKgjO,cAAc,GAAK1+N,IAGhCy+N,EApB6B,G,YCApC,EAAgC,WAChC,SAASE,IACLjjO,KAAKkjO,SAAW,GA0BpB,OAxBAD,EAAe/8N,UAAUi9N,SAAW,SAAU7+N,EAAM8P,GAC5C,eAAkBpU,KAAKkjO,SAAS,GAAK5+N,MACrCtE,KAAKkjO,SAAS,GAAK5+N,GAAQ8P,IAGnC6uN,EAAe/8N,UAAUmiJ,WAAa,SAAU/jJ,GAC5C,GAAI,eAAkBtE,KAAKkjO,SAAS,GAAK5+N,IAErC,KAAM,eAAiBA,EAAO,qBAElC,OAAOtE,KAAKkjO,SAAS,GAAK5+N,IAE9B2+N,EAAe/8N,UAAUssM,wBAA0B,SAAUp+L,EAAMgvN,EAAch9M,GACzEg9M,GACAhvN,EAAK49L,yBAA2B,IAAI,OAAyB59L,EAAKunB,OAAQvnB,EAAKuhC,gBAC/EvhC,EAAK49L,yBAAyB5rL,OAASA,GAGnChS,EAAK49L,2BACL59L,EAAK49L,yBAAyBz2H,sBAC9BnnE,EAAK49L,8BAA2B7gM,IAIrC8xN,EA5BwB,GCA/B,EAAiC,WACjC,SAASI,IACLrjO,KAAKsjO,YAAc,GAkBvB,OAhBAD,EAAgBn9N,UAAUy7N,YAAc,SAAUr9N,EAAM8P,GACpD,IAAImvN,EAAQ,eAAa,OAAYj/N,GACjC,eAAkBtE,KAAKsjO,YAAY,GAAKC,MACxCvjO,KAAKsjO,YAAY,GAAKC,GAASnvN,IAGvCivN,EAAgBn9N,UAAU82N,YAAc,SAAU14N,GAC9C,IAAIi/N,EAAQ,eAAa,OAAYj/N,GACrC,GAAI,eAAkBtE,KAAKsjO,YAAY,GAAKC,IAExC,KAAM,gBAAkBA,EAAQ,gBAGhC,OAAOvjO,KAAKsjO,YAAY,GAAKC,IAG9BF,EApByB,G,wBCPhC,GAAwC,WACxC,IAAI79N,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAaxCI,GAA0C,SAAUC,EAAYC,EAAQzC,EAAK0C,GAC7E,IAA2HtE,EAAvHuE,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOb,OAAOkB,yBAAyBN,EAAQzC,GAAO0C,EACrH,GAAuB,kBAAZM,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQzC,EAAK0C,QACpH,IAAK,IAAIQ,EAAIV,EAAWK,OAAS,EAAGK,GAAK,EAAGA,KAAS9E,EAAIoE,EAAWU,MAAIJ,GAAKH,EAAI,EAAIvE,EAAE0E,GAAKH,EAAI,EAAIvE,EAAEqE,EAAQzC,EAAK8C,GAAK1E,EAAEqE,EAAQzC,KAAS8C,GAChJ,OAAOH,EAAI,GAAKG,GAAKjB,OAAOsB,eAAeV,EAAQzC,EAAK8C,GAAIA,GAM5D,GAA8B,SAAUiC,GAExC,SAAS46N,IACL,OAAkB,OAAX56N,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAuB/D,OAzBA,GAAUwjO,EAAc56N,GAIxBxC,GAAW,CACP,eAAS,KACVo9N,EAAat9N,UAAW,gBAAY,GACvCE,GAAW,CACP,eAAS,IACVo9N,EAAat9N,UAAW,iBAAa,GACxCE,GAAW,CACP,eAAS,IACVo9N,EAAat9N,UAAW,mBAAe,GAC1CE,GAAW,CACP,kBACDo9N,EAAat9N,UAAW,yBAAqB,GAChDE,GAAW,CACP,gBAAS,IACVo9N,EAAat9N,UAAW,yBAAqB,GAChDE,GAAW,CACP,gBAAS,IACVo9N,EAAat9N,UAAW,iBAAa,GACxCE,GAAW,CACP,eAAS,OACVo9N,EAAat9N,UAAW,gBAAY,GAChCs9N,EA1BsB,CA2B/B,QClDE,GAAwC,WACxC,IAAIh+N,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAaxC,GAA0C,SAAUK,EAAYC,EAAQzC,EAAK0C,GAC7E,IAA2HtE,EAAvHuE,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOb,OAAOkB,yBAAyBN,EAAQzC,GAAO0C,EACrH,GAAuB,kBAAZM,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQzC,EAAK0C,QACpH,IAAK,IAAIQ,EAAIV,EAAWK,OAAS,EAAGK,GAAK,EAAGA,KAAS9E,EAAIoE,EAAWU,MAAIJ,GAAKH,EAAI,EAAIvE,EAAE0E,GAAKH,EAAI,EAAIvE,EAAEqE,EAAQzC,EAAK8C,GAAK1E,EAAEqE,EAAQzC,KAAS8C,GAChJ,OAAOH,EAAI,GAAKG,GAAKjB,OAAOsB,eAAeV,EAAQzC,EAAK8C,GAAIA,GAM5D,GAAuC,SAAUiC,GAEjD,SAAS66N,IACL,OAAkB,OAAX76N,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAQ/D,OAVA,GAAUyjO,EAAuB76N,GAIjC,GAAW,CACP,eAAS,eACV66N,EAAsBv9N,UAAW,gBAAY,GAChD,GAAW,CACP,gBAAS,IACVu9N,EAAsBv9N,UAAW,oBAAgB,GAC7Cu9N,EAX+B,CAYxC,Q,aC7BE,GAAwB,WAOxB,SAASC,EAAO/nM,GACZ37B,KAAK27B,OAASA,EACd37B,KAAK4sC,mBAyHT,OA/GA82L,EAAOx9N,UAAUg0C,OAAS,SAAUujL,GAChC,IAAI9kL,EAAO34C,KAAK27B,OAChB8hM,EAAe,eAAkBA,GAAgB,GAAKA,EAClD,eAAgB9kL,GAChBA,EAAKr5B,OAAO,QAAqB,CAAE0/E,SAAUh/F,KAAMsjJ,QAAStjJ,KAAKk6C,OAAQqpG,KAAMk6E,IAG/EA,IAAiB9kL,EAAKmB,eAAej2C,KAGrC80C,EAAKmB,eAAej2C,IAAM,gBAAgBqf,KAAKu6M,GAAgB/wN,WAAW+wN,GAAcnmN,WAAammN,EAAanmN,WAClHqhC,EAAKhrC,YAEA3N,KAAK2jO,eACVhrL,EAAK39B,WAOb0oN,EAAOx9N,UAAU0mC,iBAAmB,WAC5B5sC,KAAK27B,OAAOkR,cAGhB7sC,KAAK27B,OAAOqR,GAAG,QAA4BhtC,KAAK2a,kBAAmB3a,MACnEA,KAAK27B,OAAOqR,GAAG,QAAuBhtC,KAAK4jO,iBAAkB5jO,MAC7DA,KAAK27B,OAAOqR,GAAG,QAAgBhtC,KAAKkY,QAASlY,MAC7CA,KAAK6jO,mBAAqB7jO,KAAKg5F,iBAAiBttF,KAAK1L,MACrDA,KAAK27B,OAAOiR,iBAAiB,OAAuB5sC,KAAK6jO,oBACzD7jO,KAAK27B,OAAOqR,GAAG,OAAoBhtC,KAAK8jO,iBAAkB9jO,QAM9D0jO,EAAOx9N,UAAUq1E,oBAAsB,WAC/Bv7E,KAAK27B,OAAOkR,cAGhB7sC,KAAK27B,OAAO8e,IAAI,QAA4Bz6C,KAAK2a,mBACjD3a,KAAK27B,OAAO8e,IAAI,QAAuBz6C,KAAK4jO,kBAC5C5jO,KAAK27B,OAAO8e,IAAI,QAAgBz6C,KAAKkY,SACrClY,KAAK27B,OAAO4/C,oBAAoB,OAAuBv7E,KAAK6jO,oBAC5D7jO,KAAK27B,OAAO8e,IAAI,OAAoBz6C,KAAK8jO,oBAQ7CJ,EAAOx9N,UAAUgS,QAAU,WACvBlY,KAAKu7E,uBAOTmoJ,EAAOx9N,UAAUyU,kBAAoB,SAAU5H,GACvCA,EAAEwM,SAAWvf,KAAKwa,kBAGjB,eAAkBzH,EAAE2N,WAAW7c,KAMhC7D,KAAK27B,OAAOrc,OAAO,QAAqB,CACpC+2B,YAAa,YAAajiC,KAAM,SANpCpU,KAAK27B,OAAOrc,OAAO,QAAqB,CACpC+2B,YAAa,YAAajiC,KAAM,OAAoBqpN,aAAcz9N,KAAK27B,OAAOme,eAAej2C,QAgBzG6/N,EAAOx9N,UAAU09N,iBAAmB,SAAU7wN,GAC1C/S,KAAK27B,OAAO9tB,QAAQ,OAAuB,eAAOkF,EAAG,CACjD0qN,aAAcz9N,KAAK27B,OAAOme,eAAej2C,IAAKwyC,YAAa,YAAajiC,KAAM,WAUtFsvN,EAAOx9N,UAAU8yF,iBAAmB,SAAUjmF,GAC1C/S,KAAK2jO,cAAkC,cAAlB5wN,EAAEsjC,aAE3BqtL,EAAOx9N,UAAU49N,iBAAmB,SAAU/wN,GACpB,cAAlBA,EAAEsjC,aACFr2C,KAAK27B,OAAO9qB,cAAc,CAAEipC,eAAgB,CAAEj2C,IAAK,MAAQ,IASnE6/N,EAAOx9N,UAAUsU,cAAgB,WAC7B,MAAO,UAEJkpN,EAlIgB,GCAvB,GAA0B,WAO1B,SAASK,EAASpoM,GACd37B,KAAKgkO,QAAU,GACfhkO,KAAKikO,YAAa,EAClBjkO,KAAK27B,OAASA,EACd37B,KAAK4sC,mBAuKT,OArKAm3L,EAAS79N,UAAU0mC,iBAAmB,WAC9B5sC,KAAK27B,OAAOkR,cAGhB7sC,KAAKkkO,YAAc,CAAC,CAAE5vN,MAAO,OAAoBgvI,QAAStjJ,KAAKmkO,cAC3D,CAAE7vN,MAAO,OAA4BgvI,QAAStjJ,KAAKokO,mBAEvD,eAAuBpkO,KAAK27B,OAAQ37B,KAAKkkO,aAAa,EAAMlkO,QAMhE+jO,EAAS79N,UAAUq1E,oBAAsB,WACjCv7E,KAAK27B,OAAOkR,aAGhB,eAAuB7sC,KAAK27B,OAAQ37B,KAAKkkO,aAAa,IAE1DH,EAAS79N,UAAUi+N,aAAe,WAC1BnkO,KAAKikO,aACLjkO,KAAKikO,YAAa,EAClBjkO,KAAKu1N,WAAWv1N,KAAKgkO,QAAShkO,KAAKqkO,YACnCrkO,KAAKqkO,WAAarkO,KAAKgkO,QAAU,KAUzCD,EAAS79N,UAAU2P,KAAO,SAAU27C,EAAY8yK,GAC5C,IAAIxpN,EAAO9a,KAAKukO,gBAAgB/yK,GAC5Bl0B,EAAUt9B,KAAK4vD,WAAW90C,EAAMwpN,GACpCtkO,KAAK27B,OAAOrc,OAAO,QAAuB,CAAEC,OAAQ,SACpD,IAAK,IAAIxY,EAAI,EAAGA,EAAIu2B,EAAQ52B,OAAQK,IAChCu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SAAU,EAElDtyB,KAAKu1N,WAAWj4L,IASpBymM,EAAS79N,UAAU0R,KAAO,SAAU45C,EAAYgzK,GAC5C,IAAI1pN,EAAO9a,KAAKukO,gBAAgB/yK,GAC5Bl0B,EAAUt9B,KAAK4vD,WAAW90C,EAAM0pN,GACpCxkO,KAAK27B,OAAOrc,OAAO,QAAuB,CAAEC,OAAQ,SACpD,IAAK,IAAIxY,EAAI,EAAGA,EAAIu2B,EAAQ52B,OAAQK,IAChCu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SAAU,EAElDtyB,KAAKu1N,WAAWj4L,IAEpBymM,EAAS79N,UAAUq+N,gBAAkB,SAAU1gO,GAC3C,IAAI4gO,EAAY,GAOhB,OALIA,EADe,kBAAR5gO,EACK,CAACA,GAGDA,EAET4gO,GAEXV,EAAS79N,UAAU0pD,WAAa,SAAU90C,EAAM4pN,GAC5C,IAAIt7N,EAAQpJ,KACRs9B,EAAU,gBAAqBxiB,GAAM,SAAUjX,GAC/C,OAAO,gBAAqBuF,EAAMuyB,OAAOymH,aAAa,SAAUhmH,GAC5D,GAAIA,EAAK,GAAKsoM,KAAc7gO,EACxB,OAAOu4B,KAGZ,MAEP,OAAOkB,GAEXymM,EAAS79N,UAAUy+N,mBAAqB,SAAUrnM,EAASsnM,GAEvD,YAD4B,IAAxBA,IAAkCA,EAAsB,KACxD,eAAgB5kO,KAAK27B,UACrB37B,KAAKgkO,QAAU1mM,EACft9B,KAAKqkO,WAAaO,EAClB5kO,KAAK27B,OAAOutH,aACL,IAIf66E,EAAS79N,UAAUk+N,iBAAmB,WAClC,GAAIpkO,KAAKikO,WACL,IAAK,IAAIl9N,EAAI,EAAGA,EAAI/G,KAAKgkO,QAAQt9N,OAAQK,IACrC/G,KAAKgkO,QAAQj/N,SAASgC,EAAEuQ,WAAY,KAAKgb,SAAWtyB,KAAKgkO,QAAQj/N,SAASgC,EAAEuQ,WAAY,KAAKgb,SAYzGyxM,EAAS79N,UAAUqvN,WAAa,SAAUj4L,EAASsnM,GAC/C,IAAIx7N,EAAQpJ,KAGZ,QAF4B,IAAxB4kO,IAAkCA,EAAsB,IAC5D5kO,KAAKikO,YAAa,EACbjkO,KAAK2kO,mBAAmBrnM,EAASsnM,GAAtC,CAGAA,EAAuBA,EAAoBl+N,OAAS,EAAKk+N,EAAsBtnM,EAC/E,IAAI9R,EAAO,CACP6qB,YAAa,cACbhiC,QAAQ,EACRipB,QAASsnM,GAETvwN,EAAS,SACTrU,KAAK27B,OAAO+0B,yBAA2B1wD,KAAK27B,OAAOod,eAChD/4C,KAAK27B,OAAOkpM,YAAY7rL,cAAc1b,QAAQ52B,OAAS,IAC1D1G,KAAK27B,OAAO69I,cAAcsrD,YAAc,IAE5C9kO,KAAK27B,OAAO9tB,QAAQ,OAAoB2d,GAAM,SAAUu5M,GACpD,IAAIC,EAAkB57N,EAAMuyB,OAAOi0B,aAEnC,GADAtyB,EAAU,eAAkBA,GAAW0nM,EAAkB1nM,EACrDynM,EAAa,GAAK1wN,GAKlB,OAJAjL,EAAMuyB,OAAOrc,OAAO,QAAqB,CAAEylN,aAAcA,SACrDznM,EAAQ52B,OAAS,IACjB42B,EAAQ,GAAGhL,SAAU,IAW7B,GAPI,gBAAgBlpB,EAAMuyB,SACtBvyB,EAAMuyB,OAAO69I,cAAcyrD,cAE3B77N,EAAMuyB,OAAO6hM,gBAAkBp0N,EAAMuyB,OAAOupM,qBAAqBx+N,SAChE0C,EAAMuyB,OAAO4qL,kBAAkBC,kBAChCp9M,EAAMuyB,OAAOytH,iBAEbhgJ,EAAMuyB,OAAO8sE,2BAA4B,CACzC,IAAI08H,EAAoB7nM,EAAQlE,QAAO,SAAUgsM,GAAQ,OAAQJ,EAAgBnyK,MAAK,SAAUwyK,GAAQ,OAAOD,EAAKjtL,QAAUktL,EAAKltL,YAC/HgtL,EAAkBz+N,QAClB0C,EAAMuyB,OAAOrc,OAAO,QAAgCge,QAIpDl0B,EAAMuyB,OAAO+sE,gBAAkBprE,EAAQ52B,QACvC0C,EAAMuyB,OAAOrc,OAAO,QAA8B,CAAEgmN,WAAW,IAEnEl8N,EAAMuyB,OAAOrc,OAAO,QAAgCge,GAExD,IAAIia,EAAS,CACTlB,YAAa,cACb/Y,QAASsnM,GAEbx7N,EAAMuyB,OAAO9tB,QAAQ,OAAuB0pC,GACP,QAAjCnuC,EAAMuyB,OAAOg0B,iBACbvmD,EAAMuyB,OAAO3gB,aAGjBhb,KAAK27B,OAAO8oE,UAAYzkG,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,QAC1D1G,KAAK27B,OAAOqlM,yBAGb+C,EAlLkB,G,0BCNzB,GAAwC,WACxC,IAAIv+N,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAaxC,GAA0C,SAAUK,EAAYC,EAAQzC,EAAK0C,GAC7E,IAA2HtE,EAAvHuE,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOb,OAAOkB,yBAAyBN,EAAQzC,GAAO0C,EACrH,GAAuB,kBAAZM,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQzC,EAAK0C,QACpH,IAAK,IAAIQ,EAAIV,EAAWK,OAAS,EAAGK,GAAK,EAAGA,KAAS9E,EAAIoE,EAAWU,MAAIJ,GAAKH,EAAI,EAAIvE,EAAE0E,GAAKH,EAAI,EAAIvE,EAAEqE,EAAQzC,EAAK8C,GAAK1E,EAAEqE,EAAQzC,KAAS8C,GAChJ,OAAOH,EAAI,GAAKG,GAAKjB,OAAOsB,eAAeV,EAAQzC,EAAK8C,GAAIA,GAS5D,GAAiC,SAAUiC,GAE3C,SAAS28N,IACL,IAAIn8N,EAAmB,OAAXR,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAEhE,OADAoJ,EAAMo8F,WAAa,GACZp8F,EA6EX,OAjFA,GAAUm8N,EAAiB38N,GAW3B28N,EAAgBr/N,UAAU8+F,aAAe,SAAU7mF,GAC/Cne,KAAKymG,SAAWtoF,GAMpBonN,EAAgBr/N,UAAU+uD,aAAe,WACrC,OAAOj1D,KAAKymG,UAOhB8+H,EAAgBr/N,UAAUkqG,YAAc,SAAUC,QAC/B,IAAXA,IAAqBA,EAAS,SACNl/F,IAAxBnR,KAAK8tG,iBACL9tG,KAAKwlG,WAAW,eAAa,OAAU,OAAS+K,UAAY,CAAEt+C,GAAI,eAAQjyD,KAAK8tG,eAAgBuC,GAC3FtX,SAAU,wBAEe5nF,IAA7BnR,KAAK+tG,sBACL/tG,KAAKwlG,WAAW,eAAa,OAAU,OAASmL,eAAiB,CAAE1+C,GAAI,eAAQjyD,KAAK+tG,oBAAqBsC,GACrGtX,SAAU,6BAEgB5nF,IAA9BnR,KAAKguG,uBACLhuG,KAAKwlG,WAAW,eAAa,OAAU,OAASwL,iBAAmB,CAAE/+C,GAAI,eAAQjyD,KAAKguG,qBAAsBqC,GACxGtX,SAAU,0BAQtBwsI,EAAgBr/N,UAAU61N,YAAc,SAAU3nN,GAC9C,OAAOpU,KAAKwlG,WAAW,eAAa,OAAUpxF,KAOlDmxN,EAAgBr/N,UAAUs/N,oBAAsB,SAAUzqN,GACtD/a,KAAK6Q,cAAckK,GAAM,IAE7B,GAAW,CACP,kBACDwqN,EAAgBr/N,UAAW,YAAQ,GACtC,GAAW,CACP,kBACDq/N,EAAgBr/N,UAAW,aAAS,GACvC,GAAW,CACP,kBACDq/N,EAAgBr/N,UAAW,kBAAc,GAC5C,GAAW,CACP,kBACDq/N,EAAgBr/N,UAAW,cAAU,GACxC,GAAW,CACP,kBACDq/N,EAAgBr/N,UAAW,sBAAkB,GAChD,GAAW,CACP,kBACDq/N,EAAgBr/N,UAAW,2BAAuB,GACrD,GAAW,CACP,kBACDq/N,EAAgBr/N,UAAW,4BAAwB,GACtD,GAAW,CACP,kBACDq/N,EAAgBr/N,UAAW,uBAAmB,GAC1Cq/N,EAlFyB,CAmFlC,QAKE,GAA8B,SAAU38N,GAExC,SAAS68N,IACL,OAAkB,OAAX78N,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAK/D,OAPA,GAAUylO,EAAc78N,GAIxB,GAAW,CACP,eAAW,GAAI,KAChB68N,EAAav/N,UAAW,eAAW,GAC/Bu/N,EARsB,CAS/B,QCpHE,GAA2B,WAQ3B,SAASC,EAAU/pM,EAAQga,GACvB31C,KAAK2lO,YAAc,GACnB3lO,KAAKoyB,UAAW,EAChBpyB,KAAK27B,OAASA,EACd37B,KAAK21C,eAAiBA,EACtB31C,KAAK4sC,mBA6ST,OAvSA84L,EAAUx/N,UAAU0mC,iBAAmB,WAC/B5sC,KAAK27B,OAAOkR,cAGhB7sC,KAAK27B,OAAOqR,GAAG,QAAqBhtC,KAAKwzM,WAAYxzM,MACrDA,KAAK27B,OAAOqR,GAAG,QAAmBhtC,KAAK4lO,eAAgB5lO,MACvDA,KAAK27B,OAAOqR,GAAG,OAAchtC,KAAKmgE,aAAcngE,MAChDA,KAAK27B,OAAOqR,GAAG,QAAgBhtC,KAAKwzM,WAAYxzM,MAChD,OAAa0R,IAAI1R,KAAK27B,OAAOxyB,QAAS,UAAWnJ,KAAKu9M,aAAcv9M,QAMxE0lO,EAAUx/N,UAAUq1E,oBAAsB,WAClCv7E,KAAK27B,OAAOkR,cAGhB7sC,KAAK27B,OAAO8e,IAAI,QAAmBz6C,KAAK4lO,gBACxC5lO,KAAK27B,OAAO8e,IAAI,QAAqBz6C,KAAKwzM,YAC1CxzM,KAAK27B,OAAO8e,IAAI,OAAcz6C,KAAKmgE,cACnCngE,KAAK27B,OAAO8e,IAAI,QAAgBz6C,KAAKwzM,YACrC,OAAavoM,OAAOjL,KAAK27B,OAAOxyB,QAAS,UAAWnJ,KAAKu9M,gBAE7DmoB,EAAUx/N,UAAUi6D,aAAe,SAAUptD,GACzC,IAAIzM,EAASyM,EAAEzM,OAEfA,EAAS,gBAAaA,EAAQ,cAElCo/N,EAAUx/N,UAAUq3M,aAAe,SAAUxqM,GACzC,IAAI3J,EAAQpJ,KACR02K,EAAO12K,KAAK27B,OACZmqH,EAAY,SAAS5iI,KAAKkoG,UAAU26B,UACpC8/E,EAAyB7lO,KAAK27B,OAAOmqM,4BAIzC,GAHkB,KAAd/yN,EAAEmG,SAAkB4sI,GAAa/yI,EAAEizI,UAAY0wB,EAAK1rE,QACpDhrG,KAAK+lO,OAELF,EAAuBn/N,QAAwB,KAAdqM,EAAEmG,WAAqB4sI,GAAa/yI,EAAEk6E,SAAa64D,GAAa/yI,EAAEizI,WAAc0wB,EAAK1rE,OAAQ,CAC9H,IAAI1kG,EAAS,eAAQkN,SAASsT,cAAe,IAAM,QACnD,IAAK9mB,KAAKgmO,oBAAsB1/N,IAAWowK,EAAK5kE,aAAavN,cAA2C,UAA3BmyE,EAAK5kE,aAAap5E,MAC3D,SAAhCg+I,EAAK6vC,kBAAkB7tL,MAAgE,SAA7Cg+I,EAAK6vC,kBAAkB0f,kBACjE,OAEJjmO,KAAK8mB,cAAgBtT,SAASsT,cAC9B,IAAIo/M,EAAM95N,OAAO+5N,QACbC,EAAMh6N,OAAOmnI,QACjBvzI,KAAKgmO,kBAAkBxgN,QACvBxS,YAAW,WACP5J,EAAM0d,cAActB,QACpBpZ,OAAO45K,SAASkgD,EAAKE,GACrBh9N,EAAMi9N,MAAMj9N,EAAM48N,kBAAkB7nN,MAAO0nN,EAAuB,GAAGplM,SAAUolM,EAAuB,GAAGS,YAAY,MACtHxgF,EAAY,IAAM,MAW7B4/E,EAAUx/N,UAAUmgO,MAAQ,SAAU9tM,EAAMkI,EAAU00L,GASlD,IARA,IAGIpjK,EACA5zC,EACAooN,EAEAl2K,EAPAqmH,EAAO12K,KAAK27B,OACZ6qM,EAAOrR,EACPsR,EAAOhmM,EAIPjD,EAAOjF,EAAKl4B,MAAM,MAEbsG,EAAI,EAAGA,EAAI62B,EAAK92B,OAAQC,IAAK,CAGlC,GAFA0pD,EAAO7yB,EAAKz4B,SAAS4B,EAAE2Q,WAAY,KAAKjX,MAAM,MAC9CmmO,EAAOrR,EACFxuN,IAAM62B,EAAK92B,OAAS,GAA0C,KAArC82B,EAAKz4B,SAAS4B,EAAE2Q,WAAY,MAAgB,gBAAYo/J,EAAKgwD,cAAcD,IAAQ,CAC7GD,IACA,MAEJ,IAAK,IAAIhgO,EAAI,EAAGA,EAAI6pD,EAAK3pD,OAAQF,IAAK,CAElC,GADA+/N,EAAU7vD,EAAKiwD,iBAAiBF,EAAMD,IACjCD,EAAS,CACVC,IACA,MAIJ,GAFAz0K,EAAM2kH,EAAK5xB,iBAAiB0hF,GAC5BroN,EAAQ4zC,EAAI20C,YAAc30C,EAAI20C,WAAJ30C,CAAgB1B,EAAKtrD,SAASyB,EAAE8Q,WAAY,MAAQ+4C,EAAKtrD,SAASyB,EAAE8Q,WAAY,KACtGy6C,EAAIwyC,eAAiBxyC,EAAIlC,eAAiBkC,EAAIzhB,SAAU,CACxD,IAAI9kB,EAAO,CACP+Q,OAAQw1B,EACRx5B,KAAMpa,EACNsiB,SAAUgmM,GAEdzmO,KAAK27B,OAAO9tB,QAAQ,OAAoB2d,GACxCi7M,EAAOj7M,EAAKiV,SACPjV,EAAKnX,QACFqiK,EAAK1tB,aACY,WAAbj3F,EAAI39C,KACJpU,KAAK27B,OAAOqtH,WAAW49E,WAAWH,EAAM10K,EAAI5Z,MAAOzrC,WAAW8e,EAAK+M,OAGnEm+I,EAAK1tB,WAAW49E,WAAWH,EAAM10K,EAAI5Z,MAAO3sB,EAAK+M,OAKjEiuM,IAEJC,IAEJ/vD,EAAKp6F,gBAAgBuqJ,mBAAmB,CAAEpmM,SAAUA,EAAUqmM,UAAW3R,GAAY,CAAE10L,SAAUgmM,EAAO,EAAGK,UAAWN,EAAO,IAC7H,IAAI92H,EAAO1vG,KAAK27B,OAAOgrM,iBAAiBF,EAAO,EAAGD,EAAO,GACrD92H,GACA,eAAUA,EAAM,CAAC,UAAW,aAAc,IAE9C1vG,KAAKgmO,kBAAkB7nN,MAAQ,IAEnCunN,EAAUx/N,UAAUstM,WAAa,WAC7BxzM,KAAKmgB,KAAOngB,KAAK21C,eAAe0yG,WAAW,gBAC3CroJ,KAAK27B,OAAO8e,IAAI,QAAqBz6C,KAAKwzM,YAC1CxzM,KAAKgmO,kBAAoBhmO,KAAK27B,OAAOtxB,cAAc,WAAY,CAC3DC,UAAW,cACXwK,OAAQ,aACRF,MAAO,CAAE0yI,SAAU,KAAM,aAActnJ,KAAKmgB,KAAKC,YAAY,gBAEjEpgB,KAAK27B,OAAOxyB,QAAQqB,YAAYxK,KAAKgmO,oBAEzCN,EAAUx/N,UAAU0/N,eAAiB,SAAU7yN,GAC1B,cAAbA,EAAEqT,OACFpmB,KAAK+lO,OAEa,mBAAbhzN,EAAEqT,QACPpmB,KAAK+lO,MAAK,IAGlBL,EAAUx/N,UAAU6gO,YAAc,SAAUC,GACxC,GAAyC,KAArC56N,OAAO66N,eAAe3vN,WAAmB,CACzCtX,KAAKgmO,kBAAkB7nN,MAAQne,KAAK2lO,YAAc,GAClD,IAAInoM,EAAOx9B,KAAK27B,OAAOurM,cACvB,GAA2C,SAAvClnO,KAAK27B,OAAO4qL,kBAAkB7tL,KAAiB,CAC/C,IAAIyuM,EAAkBnnO,KAAK27B,OAAOuoL,wBAAwB7qL,MAAK,SAAUC,EAAG7zB,GAAK,OAAO6zB,EAAI7zB,KAC5F,GAAIuhO,EAAY,CAEZ,IADA,IAAII,EAAkB,GACbrgO,EAAI,EAAGA,EAAI/G,KAAK27B,OAAOwqH,oBAAoBz/I,OAAQK,IACxDqgO,EAAgBriO,SAASgC,EAAEuQ,WAAY,KAAOtX,KAAK27B,OAC9CwqH,oBAAoBphJ,SAASgC,EAAEuQ,WAAY,KAAK84B,WAEzDpwC,KAAKqnO,YAAYD,GAAiB,EAAO,KAAMJ,GAC/ChnO,KAAK2lO,aAAe,KAExB,IAAS5+N,EAAI,EAAGA,EAAIogO,EAAgBzgO,OAAQK,IAAK,CACzCA,EAAI,IACJ/G,KAAK2lO,aAAe,MAExB,IAAI2B,EAAW,GACXzmF,EAAMsmF,EAAgBpiO,SAASgC,EAAEuQ,WAAY,MAC5C,gBAAgBtX,KAAK27B,UAAY37B,KAAK27B,OAAOmd,sBAC7C94C,KAAK27B,OAAO+0B,yBAA2B1wD,KAAK27B,OAAOygM,uBAAuBC,aAC1Er8N,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,QAAU1G,KAAK27B,OAAOqd,cAAcqY,qBACvEwvF,EAAMrjH,EAAK/wB,KAAI,SAAU5K,GAAK,OAAOA,EAAEyO,aAAa,oBAAqBvG,QAAQo9N,EAAgBpiO,SAASgC,EAAEuQ,WAAY,KAAKA,aAEjIgwN,EAASr1N,KAAKpJ,MAAMy+N,EAAU,GAAGh0N,MAAMjK,KAAKm0B,EAAKz4B,SAAS87I,EAAIvpI,WAAY,KAAK6Q,iBAAiB,6BAChGnoB,KAAKqnO,YAAYC,GAAU,EAAO,KAAMN,QAG3C,CACD,IAAI7rK,EAAMn7D,KAAKunO,oBACf,GAAIpsK,EAAIrO,OAAQ,CACZ,GAAIk6K,EAAY,CACZ,IAAI14K,EAAU,GACd,IAASvnD,EAAI,EAAGA,EAAIo0D,EAAIqsK,WAAW9gO,OAAQK,IAAK,CAC5C,IAAI0wN,EAAYz3N,KAAK27B,OAAO8rM,uBAAuBtsK,EAAIqsK,WAAWziO,SAASgC,EAAEuQ,WAAY,MACpFmgN,EAAUzsN,UAAUkB,SAAS,WAC9BoiD,EAAQr8C,KAAKwlN,GAGrBz3N,KAAKqnO,YAAY/4K,GAAS,EAAO,KAAM04K,GACvChnO,KAAK2lO,aAAe,KAExB,IAAS5+N,EAAI,EAAGA,EAAIo0D,EAAIusK,WAAWhhO,OAAQK,IAAK,CACxCA,EAAI,IACJ/G,KAAK2lO,aAAe,MAExB,IAAIn2H,EAAQ,GAAGl8F,MAAMjK,KAAKm0B,EAAK29B,EAAIusK,WAAW3iO,SAASgC,EAAEuQ,WAAY,MACjE6Q,iBAAiB,4CACrBnoB,KAAKqnO,YAAY73H,GAAO,EAAO,KAAMw3H,SAIzChnO,KAAKqnO,YAAY,GAAG/zN,MAAMjK,KAAKrJ,KAAK27B,OAAOxyB,QAAQ0U,uBAAuB,+BAA+B,EAAM,KAAMmpN,GAG7H,IAAIx7M,EAAO,CACP+M,KAAMv4B,KAAK2lO,YACXtxN,QAAQ,GAGZ,GADArU,KAAK27B,OAAO9tB,QAAQ,OAAmB2d,GACnCA,EAAKnX,OACL,OAEJrU,KAAKgmO,kBAAkB7nN,MAAQne,KAAK2lO,YAAcn6M,EAAK+M,KAClD,OAAQ6xE,UAAUtlG,MAAM,qBAIzB9E,KAAKgmO,kBAAkBj9C,kBAAkB,EAAG/oL,KAAKgmO,kBAAkB7nN,MAAMzX,QAHzE1G,KAAKgmO,kBAAkB93M,SAK3BluB,KAAKoyB,UAAW,IAGxBszM,EAAUx/N,UAAUmhO,YAAc,SAAU73H,EAAOm4H,EAAQC,EAAUZ,GAEjE,IADA,IAAI3sF,EAAgC,kBAAb7qC,EAAM,GACpB/wE,EAAI,EAAGA,EAAI+wE,EAAM9oG,OAAQ+3B,IAAK,CACnC,GAAIuoM,GAAcW,EAAQ,CACtB,IAAIE,EAAS9iO,SAASyqG,EAAMzqG,SAAS05B,EAAEnnB,WAAY,KAAKhH,aAAa,QAAwB,IAC7FtQ,KAAK2lO,aAAe3lO,KAAK27B,OAAOi0B,aAAa7qD,SAAS8iO,EAAOvwN,WAAY,KAAK84B,WAAa,KAE3FiqG,EACK7qC,EAAMzqG,SAAS05B,EAAEnnB,WAAY,KAAKtM,UAAUkB,SAAS,YACtDlM,KAAK2lO,aAAen2H,EAAMzqG,SAAS05B,EAAEnnB,WAAY,KAAKgpD,WAI1DtgE,KAAK2lO,aAAen2H,EAAMzqG,SAAS05B,EAAEnnB,WAAY,KAEjDmnB,EAAI+wE,EAAM9oG,OAAS,IACnB1G,KAAK2lO,aAAeiC,KAUhClC,EAAUx/N,UAAU6/N,KAAO,SAAUiB,GAC7BxzN,SAASs0N,sBAAsB,SAAW9nO,KAAKgmO,oBAC/ChmO,KAAK+mO,YAAYC,GACjBxzN,SAASu0N,YAAY,QACrB/nO,KAAKgmO,kBAAkBzgN,QAEvBvlB,KAAKoyB,WACLhmB,OAAO66N,eAAee,kBACtBhoO,KAAKoyB,UAAW,IASxBszM,EAAUx/N,UAAUsU,cAAgB,WAChC,MAAO,aAQXkrN,EAAUx/N,UAAUgS,QAAU,WAC1BlY,KAAKu7E,sBACDv7E,KAAKgmO,mBACL,gBAAOhmO,KAAKgmO,oBAGpBN,EAAUx/N,UAAUqhO,kBAAoB,WACpC,IAAI10D,EAAU7yK,KAAK27B,OACfw/B,EAAM,CAAErO,QAAQ,GACpB,GAAuC,SAAnC+lH,EAAQ0zC,kBAAkB7tL,KAAiB,CAC3C,IAAIuvM,EAAgBp1D,EAAQizD,4BACxBv5L,OAAM,EACNm7L,EAAa,GACb3gO,OAAI,EACR,IAAKA,EAAI,EAAGA,EAAIkhO,EAAcvhO,OAAQK,IAIlC,GAHIkhO,EAAcljO,SAASgC,EAAEuQ,WAAY,KAAKgvN,YAAY5/N,QACtDghO,EAAWz1N,KAAKg2N,EAAcljO,SAASgC,EAAEuQ,WAAY,KAAKmpB,UAE1DwnM,EAAcljO,SAASgC,EAAEuQ,WAAY,KAAKgvN,YAAY5/N,SACjD6lC,IACDA,EAAMupB,KAAKsiH,UAAU6vD,EAAcljO,SAASgC,EAAEuQ,WAAY,KAAKgvN,YAAYjtM,SAE3EkT,IAAQupB,KAAKsiH,UAAU6vD,EAAcljO,SAASgC,EAAEuQ,WAAY,KAAKgvN,YAAYjtM,SAC7E,MAIZquM,EAAWruM,MAAK,SAAUC,EAAG7zB,GAAK,OAAO6zB,EAAI7zB,KACzCsB,IAAMkhO,EAAcvhO,SACpBy0D,EAAM,CAAErO,QAAQ,EAAM46K,WAAYA,EAAYF,WAAYS,EAAc,GAAG3B,cAGnF,OAAOnrK,GAEJuqK,EA1TmB,G,aCP1B,GAAwC,WACxC,IAAIlgO,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAaxC,GAA0C,SAAUK,EAAYC,EAAQzC,EAAK0C,GAC7E,IAA2HtE,EAAvHuE,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOb,OAAOkB,yBAAyBN,EAAQzC,GAAO0C,EACrH,GAAuB,kBAAZM,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQzC,EAAK0C,QACpH,IAAK,IAAIQ,EAAIV,EAAWK,OAAS,EAAGK,GAAK,EAAGA,KAAS9E,EAAIoE,EAAWU,MAAIJ,GAAKH,EAAI,EAAIvE,EAAE0E,GAAKH,EAAI,EAAIvE,EAAEqE,EAAQzC,EAAK8C,GAAK1E,EAAEqE,EAAQzC,KAAS8C,GAChJ,OAAOH,EAAI,GAAKG,GAAKjB,OAAOsB,eAAeV,EAAQzC,EAAK8C,GAAIA,GAyC5D,GAAgC,SAAUiC,GAE1C,SAASs/N,IACL,OAAkB,OAAXt/N,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAW/D,OAbA,GAAUkoO,EAAgBt/N,GAI1B,GAAW,CACP,kBACDs/N,EAAehiO,UAAW,aAAS,GACtC,GAAW,CACP,kBACDgiO,EAAehiO,UAAW,iBAAa,GAC1C,GAAW,CACP,gBAAS,IACVgiO,EAAehiO,UAAW,mBAAe,GACrCgiO,EAdwB,CAejC,QAKE,GAA8B,SAAUt/N,GAExC,SAASu/N,IACL,OAAkB,OAAXv/N,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAQ/D,OAVA,GAAUmoO,EAAcv/N,GAIxB,GAAW,CACP,eAAW,GAAI,KAChBu/N,EAAajiO,UAAW,eAAW,GACtC,GAAW,CACP,gBAAS,IACViiO,EAAajiO,UAAW,mBAAe,GACnCiiO,EAXsB,CAY/B,QAKE,GAA2B,SAAUv/N,GAErC,SAASw/N,IACL,OAAkB,OAAXx/N,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAyC/D,OA3CA,GAAUooO,EAAWx/N,GAIrB,GAAW,CACP,kBACDw/N,EAAUliO,UAAW,aAAS,GACjC,GAAW,CACP,kBACDkiO,EAAUliO,UAAW,gBAAY,GACpC,GAAW,CACP,kBACDkiO,EAAUliO,UAAW,aAAS,GACjC,GAAW,CACP,kBACDkiO,EAAUliO,UAAW,iBAAa,GACrC,GAAW,CACP,gBAAS,IACVkiO,EAAUliO,UAAW,oBAAgB,GACxC,GAAW,CACP,kBACDkiO,EAAUliO,UAAW,iBAAa,GACrC,GAAW,CACP,eAAS,KACVkiO,EAAUliO,UAAW,yBAAqB,GAC7C,GAAW,CACP,eAAS,KACVkiO,EAAUliO,UAAW,sBAAkB,GAC1C,GAAW,CACP,kBACDkiO,EAAUliO,UAAW,YAAQ,GAChC,GAAW,CACP,kBACDkiO,EAAUliO,UAAW,mBAAe,GACvC,GAAW,CACP,kBACDkiO,EAAUliO,UAAW,WAAO,GAC/B,GAAW,CACP,kBACDkiO,EAAUliO,UAAW,oBAAgB,GACxC,GAAW,CACP,kBACDkiO,EAAUliO,UAAW,iBAAa,GAC9BkiO,EA5CmB,CA6C5B,QAKE,GAAwC,SAAUx/N,GAElD,SAASy/N,IACL,OAAkB,OAAXz/N,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAW/D,OAbA,GAAUqoO,EAAwBz/N,GAIlC,GAAW,CACP,gBAAS,IACVy/N,EAAuBniO,UAAW,mBAAe,GACpD,GAAW,CACP,eAAS,IACVmiO,EAAuBniO,UAAW,iBAAa,GAClD,GAAW,CACP,eAAS,IACVmiO,EAAuBniO,UAAW,qBAAiB,GAC/CmiO,EAdgC,CAezC,QAKE,GAAgC,SAAUz/N,GAE1C,SAAS0/N,IACL,OAAkB,OAAX1/N,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAsC/D,OAxCA,GAAUsoO,EAAgB1/N,GAI1B,GAAW,CACP,eAAW,GAAI,KAChB0/N,EAAepiO,UAAW,eAAW,GACxC,GAAW,CACP,eAAS,cACVoiO,EAAepiO,UAAW,YAAQ,GACrC,GAAW,CACP,eAAS,YACVoiO,EAAepiO,UAAW,YAAQ,GACrC,GAAW,CACP,gBAAS,IACVoiO,EAAepiO,UAAW,2BAAuB,GACpD,GAAW,CACP,eAAS,OACVoiO,EAAepiO,UAAW,0BAAsB,GACnD,GAAW,CACP,kBACDoiO,EAAepiO,UAAW,iBAAa,GAC1C,GAAW,CACP,gBAAS,IACVoiO,EAAepiO,UAAW,oBAAgB,GAC7C,GAAW,CACP,gBAAS,IACVoiO,EAAepiO,UAAW,+BAA2B,GACxD,GAAW,CACP,eAAS,KACVoiO,EAAepiO,UAAW,kBAAc,GAC3C,GAAW,CACP,eAAS,YACVoiO,EAAepiO,UAAW,wBAAoB,GACjD,GAAW,CACP,gBAAS,IACVoiO,EAAepiO,UAAW,6BAAyB,GACtD,GAAW,CACP,gBAAS,IACVoiO,EAAepiO,UAAW,6BAAyB,GAC/CoiO,EAzCwB,CA0CjC,QAKE,GAAmC,SAAU1/N,GAE7C,SAAS2/N,IACL,OAAkB,OAAX3/N,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KA6B/D,OA/BA,GAAUuoO,EAAmB3/N,GAI7B,GAAW,CACP,eAAS,QACV2/N,EAAkBriO,UAAW,YAAQ,GACxC,GAAW,CACP,eAAS,SACVqiO,EAAkBriO,UAAW,yBAAqB,GACrD,GAAW,CACP,eAAS,WACVqiO,EAAkBriO,UAAW,YAAQ,GACxC,GAAW,CACP,gBAAS,IACVqiO,EAAkBriO,UAAW,oBAAgB,GAChD,GAAW,CACP,gBAAS,IACVqiO,EAAkBriO,UAAW,wBAAoB,GACpD,GAAW,CACP,eAAS,YACVqiO,EAAkBriO,UAAW,oBAAgB,GAChD,GAAW,CACP,gBAAS,IACVqiO,EAAkBriO,UAAW,qCAAiC,GACjE,GAAW,CACP,gBAAS,IACVqiO,EAAkBriO,UAAW,oBAAgB,GAChD,GAAW,CACP,gBAAS,IACVqiO,EAAkBriO,UAAW,4BAAwB,GACjDqiO,EAhC2B,CAiCpC,QAKE,GAAgC,SAAU3/N,GAE1C,SAAS4/N,IACL,OAAkB,OAAX5/N,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAiB/D,OAnBA,GAAUwoO,EAAgB5/N,GAI1B,GAAW,CACP,eAAS,KACV4/N,EAAetiO,UAAW,cAAU,GACvC,GAAW,CACP,eAAS,KACVsiO,EAAetiO,UAAW,WAAO,GACpC,GAAW,CACP,eAAS,aACVsiO,EAAetiO,UAAW,gBAAY,GACzC,GAAW,CACP,gBAAS,IACVsiO,EAAetiO,UAAW,kBAAc,GAC3C,GAAW,CACP,gBAAS,IACVsiO,EAAetiO,UAAW,oBAAgB,GACtCsiO,EApBwB,CAqBjC,QAKE,GAAiC,SAAU5/N,GAE3C,SAAS6/N,IACL,OAAkB,OAAX7/N,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAK/D,OAPA,GAAUyoO,EAAiB7/N,GAI3B,GAAW,CACP,kBACD6/N,EAAgBviO,UAAW,gBAAY,GACnCuiO,EARyB,CASlC,QAKE,GAAkC,SAAU7/N,GAE5C,SAAS8/N,IACL,OAAkB,OAAX9/N,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAK/D,OAPA,GAAU0oO,EAAkB9/N,GAI5B,GAAW,CACP,eAAS,SACV8/N,EAAiBxiO,UAAW,gBAAY,GACpCwiO,EAR0B,CASnC,QAKE,GAAgC,SAAU9/N,GAE1C,SAAS+/N,IACL,OAAkB,OAAX//N,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAK/D,OAPA,GAAU2oO,EAAgB//N,GAI1B,GAAW,CACP,eAAS,WACV+/N,EAAeziO,UAAW,YAAQ,GAC9ByiO,EARwB,CASjC,QAKE,GAA+B,SAAU//N,GAEzC,SAASggO,IACL,OAAkB,OAAXhgO,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KA6B/D,OA/BA,GAAU4oO,EAAehgO,GAIzB,GAAW,CACP,gBAAS,IACVggO,EAAc1iO,UAAW,oBAAgB,GAC5C,GAAW,CACP,gBAAS,IACV0iO,EAAc1iO,UAAW,uBAAmB,GAC/C,GAAW,CACP,gBAAS,IACV0iO,EAAc1iO,UAAW,wBAAoB,GAChD,GAAW,CACP,gBAAS,IACV0iO,EAAc1iO,UAAW,yBAAqB,GACjD,GAAW,CACP,gBAAS,IACV0iO,EAAc1iO,UAAW,yBAAqB,GACjD,GAAW,CACP,gBAAS,IACV0iO,EAAc1iO,UAAW,iCAA6B,GACzD,GAAW,CACP,eAAS,KACV0iO,EAAc1iO,UAAW,eAAW,GACvC,GAAW,CACP,kBACD0iO,EAAc1iO,UAAW,uBAAmB,GAC/C,GAAW,CACP,gBAAS,IACV0iO,EAAc1iO,UAAW,yBAAqB,GAC1C0iO,EAhCuB,CAiChC,QAKE,GAA8B,SAAUhgO,GAExC,SAASigO,IACL,OAAkB,OAAXjgO,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAyC/D,OA3CA,GAAU6oO,EAAcjgO,GAIxB,GAAW,CACP,gBAAS,IACVigO,EAAa3iO,UAAW,mBAAe,GAC1C,GAAW,CACP,gBAAS,IACV2iO,EAAa3iO,UAAW,oBAAgB,GAC3C,GAAW,CACP,gBAAS,IACV2iO,EAAa3iO,UAAW,qBAAiB,GAC5C,GAAW,CACP,eAAS,WACV2iO,EAAa3iO,UAAW,YAAQ,GACnC,GAAW,CACP,gBAAS,IACV2iO,EAAa3iO,UAAW,2BAAuB,GAClD,GAAW,CACP,gBAAS,IACV2iO,EAAa3iO,UAAW,yBAAqB,GAChD,GAAW,CACP,gBAAS,IACV2iO,EAAa3iO,UAAW,+BAA2B,GACtD,GAAW,CACP,kBACD2iO,EAAa3iO,UAAW,gBAAY,GACvC,GAAW,CACP,kBACD2iO,EAAa3iO,UAAW,sBAAkB,GAC7C,GAAW,CACP,kBACD2iO,EAAa3iO,UAAW,sBAAkB,GAC7C,GAAW,CACP,eAAS,QACV2iO,EAAa3iO,UAAW,sBAAkB,GAC7C,GAAW,CACP,eAAS,KACV2iO,EAAa3iO,UAAW,cAAU,GACrC,GAAW,CACP,gBAAS,IACV2iO,EAAa3iO,UAAW,wBAAoB,GACxC2iO,EA5CsB,CA6C/B,QAKE,GAAkC,SAAUjgO,GAE5C,SAASkgO,IACL,OAAkB,OAAXlgO,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAK/D,OAPA,GAAU8oO,EAAkBlgO,GAI5B,GAAW,CACP,eAAS,YACVkgO,EAAiB5iO,UAAW,qBAAiB,GACzC4iO,EAR0B,CASnC,QAYE,GAAsB,SAAUlgO,GAShC,SAASmgO,EAAK7/N,EAASC,GACnB,IAAIgtF,EAAUvtF,EAAOS,KAAKrJ,KAAMkJ,EAASC,IAAYnJ,KA8FrD,OA7FAm2F,EAAQuU,sBAAuB,EAC/BvU,EAAQ6yI,cAAgB,GACxB7yI,EAAQ8yI,MAAO,EACf9yI,EAAQ+yI,iBAAmB,EAC3B/yI,EAAQgzI,qBAAsB,EAC9BhzI,EAAQizI,WAAa,EACrBjzI,EAAQkzI,gBAAkB,EAC1BlzI,EAAQmzI,UAAY,EACpBnzI,EAAQozI,YAAc,EACtBpzI,EAAQqzI,aAAe,EACvBrzI,EAAQszI,aAAe,EACvBtzI,EAAQuzI,WAAa,EACrBvzI,EAAQwzI,WAAa,EACrBxzI,EAAQyzI,kBAAoB,EAC5BzzI,EAAQ0zI,mBAAqB,EAC7B1zI,EAAQ2zI,yBAA0B,EAClC3zI,EAAQ4zI,mBAAqB,EAC7B5zI,EAAQ6zI,eAAiB,EACzB7zI,EAAQ8zI,kBAAoB,GAC5B9zI,EAAQ+zI,mBAAqB,GAC7B/zI,EAAQg0I,eAAiB,GACzBh0I,EAAQ6gG,aAAe,GACvB7gG,EAAQi0I,YAAc,GACtBj0I,EAAQk0I,aAAe,GACvBl0I,EAAQm0I,aAAe,GACvBn0I,EAAQo0I,eAAiB,GACzBp0I,EAAQq0I,iBAAmB,GAC3Br0I,EAAQs0I,kBAAoB,GAC5Bt0I,EAAQu0I,kBAAoB,GAC5Bv0I,EAAQw0I,oBAAsB,GAC9Bx0I,EAAQy0I,MAAQ,GAEhBz0I,EAAQ00I,WAAa,EACrB10I,EAAQ20I,iBAAmB,OAAU5kO,UAAU8U,QAC/Cm7E,EAAQ40I,wBAAyB,EACjC50I,EAAQ60I,eAAgB,EAExB70I,EAAQ80I,mBAAoB,EAS5B90I,EAAQ0uH,oBAAqB,EAE7B1uH,EAAQ+0I,MAAQ,GAEhB/0I,EAAQg1I,OAAS,GAEjBh1I,EAAQi1I,cAAgB,GAExBj1I,EAAQk1I,OAAS,EAEjBl1I,EAAQ6iB,WAAa,EAErB7iB,EAAQ/kC,iBAAkB,EAE1B+kC,EAAQm1I,kBAAmB,EAE3Bn1I,EAAQo1I,mBAAoB,EAE5Bp1I,EAAQqgH,sBAAwB,EAEhCrgH,EAAQ0wH,uBAAyB,GAEjC1wH,EAAQywH,uBAAyB,GAEjCzwH,EAAQq1I,mBAAoB,EAE5Br1I,EAAQwtD,qBAAuB,EAE/BxtD,EAAQ0nI,gBAAiB,EAEzB1nI,EAAQs1I,oBAAqB,EAE7Bt1I,EAAQmrI,WAAY,EAEpBnrI,EAAQu1I,uBAAwB,EAChCv1I,EAAQw1I,kBAAoB,GAE5Bx1I,EAAQgzD,qBAAkBh4I,EAE1BglF,EAAQy1I,aAAe,GAEvBz1I,EAAQ8+E,cAAe,EAEvB9+E,EAAQ01I,cAAe,EACvB11I,EAAQ21I,SAAU,EAClBC,EAAOC,OAAO,SACd,gBAAS,mBAAoB71I,EAAQ81I,qBAAsB91I,GACpDA,EAyrLX,IAAI41I,EAkdJ,OAlvMA,GAAUhD,EAAMngO,GAyGhBmjO,EAAShD,EAMTA,EAAK7iO,UAAUuU,eAAiB,WAW5B,IAVA,IAAIipD,EAAY,CAAC,eAAgB,eAC7B,iBAAkB,gBAAiB,UAAW,iBAAkB,mBAAoB,kBACpFwoK,EAAkB,CAClBv7K,aAAc,CAAC,WAAY,YAAa,oBAAqB,oBAAqB,aAClFtW,eAAgB,CAAC,OAAQ,OAAQ,sBAAuB,qBAAsB,gBAC9ErB,cAAe,CAAC,eAAgB,mBAAoB,oBAAqB,oBACrE,4BAA6B,oBACjCc,eAAgB,CAAC,SAAU,WAAY,cACvC+X,aAAc,GAAIv0B,QAAS,GAAI6uM,iBAAkB,GAAIC,eAAgB,IAEhErlO,EAAI,EAAGA,EAAI28D,EAAUh9D,OAAQK,IAElC,IADA,IAAIslO,EAAgBrsO,KAAK0jE,EAAU3+D,SAASgC,EAAEuQ,WAAY,MACjD7D,EAAK,EAAG7J,EAAKsiO,EAAgBxoK,EAAU3+D,SAASgC,EAAEuQ,WAAY,MAAO7D,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAChG,IAAI6O,EAAM1Y,EAAG6J,UACN44N,EAAc,GAAK/pN,GAGlC,IAAI4mC,EAAOlpD,KAAK2wD,aAAargB,SACzBg8L,EAAW5mO,OAAO6mO,OAAO,CAAEj8L,cAAUn/B,GAAanR,KAAK2wD,cAC3D3wD,KAAK6Q,cAAc,CAAE8/C,aAAc27K,IAAY,GAE3CtsO,KAAK8c,kBACE9c,KAAKg5C,cAAc,cAAc,mBAE5Ch5C,KAAKyrO,oBAAsB,eAAkBzrO,KAAKwsO,eAClD,IAAIC,EAAczsO,KAAK0a,aAAagpD,GAGpC,OAFA4oK,EAASh8L,SAAW4Y,EACpBlpD,KAAK6Q,cAAc,CAAE8/C,aAAc27K,IAAY,GACxCG,GAQX1D,EAAK7iO,UAAUolB,gBAAkB,WAC7BtrB,KAAK0sO,iBACL1sO,KAAK2sO,yBACL,IAAIphN,EAAU,GACd,OAAIvrB,KAAK6sC,cAGL7sC,KAAKqzD,gBACL9nC,EAAQtZ,KAAK,CACTwZ,OAAQ,SACRD,KAAM,CAACxrB,KAAMA,KAAKq6C,eAAgBr6C,KAAK21C,kBAG3C31C,KAAK4sO,kBACLrhN,EAAQtZ,KAAK,CACTwZ,OAAQ,cACRD,KAAM,CAACxrB,KAAMA,KAAK21C,kBAGtB31C,KAAK6sO,gBACLthN,EAAQtZ,KAAK,CACTwZ,OAAQ,YACRD,KAAM,CAACxrB,QAGXA,KAAK4xD,cACLrmC,EAAQtZ,KAAK,CACTwZ,OAAQ,OACRD,KAAM,CAACxrB,KAAMA,KAAK6xD,aAAc7xD,KAAK8sO,cAAe9sO,KAAK21C,kBAG7D31C,KAAK64C,aACLttB,EAAQtZ,KAAK,CACTwZ,OAAQ,QACRD,KAAM,CAACxrB,KAAMA,KAAK2wD,gBAGtB3wD,KAAKw9N,gBACLjyM,EAAQtZ,KAAK,CACTwZ,OAAQ,YACRD,KAAM,CAACxrB,KAAMA,KAAKumN,kBAAmBvmN,KAAK21C,kBAGlDpqB,EAAQtZ,KAAK,CACTwZ,OAAQ,SACRD,KAAM,CAACxrB,QAEPA,KAAKqkG,iBACL94E,EAAQtZ,KAAK,CACTwZ,OAAQ,UACRD,KAAM,CAACxrB,QAGXA,KAAKkvG,qBACL3jF,EAAQtZ,KAAK,CACTwZ,OAAQ,iBACRD,KAAM,CAACxrB,QAGXA,KAAK+4C,eACLxtB,EAAQtZ,KAAK,CACTwZ,OAAQ,QACRD,KAAM,CAACxrB,KAAMA,KAAKg5C,cAAeh5C,KAAK8sO,cAAe9sO,KAAK21C,kBAG9D31C,KAAKowD,WAAW1pD,QAChB6kB,EAAQtZ,KAAK,CAAEwZ,OAAQ,YAAaD,KAAM,CAACxrB,KAAMA,KAAK21C,kBAEtD31C,KAAK8nN,YACLv8L,EAAQtZ,KAAK,CACTwZ,OAAQ,YACRD,KAAM,CAACxrB,KAAMA,KAAK21C,mBAGtB31C,KAAKynG,SAAWznG,KAAKm+N,kBACrB5yM,EAAQtZ,KAAK,CACTwZ,OAAQ,UACRD,KAAM,CAACxrB,KAAMA,KAAK21C,mBAGtB31C,KAAK84C,sBAAwB94C,KAAKyoG,6BAClCl9E,EAAQtZ,KAAK,CACTwZ,OAAQ,gBACRD,KAAM,CAACxrB,KAAMA,KAAK21C,mBAGtB31C,KAAKyhL,oBAAsBzhL,KAAK4oG,YAAc5oG,KAAKkpO,kBAAoBlpO,KAAKqpO,kBAC5E99M,EAAQtZ,KAAK,CAAEwZ,OAAQ,SAAUD,KAAM,CAACxrB,KAAMA,KAAK21C,kBAEnD31C,KAAK+sO,gBAAgB/sO,KAAKs9B,UAC1B/R,EAAQtZ,KAAK,CACTwZ,OAAQ,gBACRD,KAAM,CAACxrB,KAAMA,KAAK21C,mBAGtB31C,KAAK8xG,aAAak7H,aAAehtO,KAAK8xG,aAAam7H,eAAiBjtO,KAAK8xG,aAAavN,eACtFh5E,EAAQtZ,KAAK,CACTwZ,OAAQ,OACRD,KAAM,CAACxrB,KAAMA,KAAK21C,kBAG1B31C,KAAKktO,sBAAsB3hN,IAhGhBA,GAmGfw9M,EAAK7iO,UAAUgnO,sBAAwB,SAAU3hN,GACzCvrB,KAAK0wD,yBACLnlC,EAAQtZ,KAAK,CACTwZ,OAAQ,iBACRD,KAAM,CAACxrB,KAAMA,KAAK21C,kBAGtB31C,KAAKg5C,cAAcqY,mBACnB9lC,EAAQtZ,KAAK,CACTwZ,OAAQ,gBACRD,KAAM,CAACxrB,KAAMA,KAAK21C,kBAGtB31C,KAAKmtO,kBACL5hN,EAAQtZ,KAAK,CACTwZ,OAAQ,cACRD,KAAM,CAACxrB,KAAMA,KAAK21C,kBAGtB31C,KAAKskG,gBACL/4E,EAAQtZ,KAAK,CACTwZ,OAAQ,aACRD,KAAM,CAACxrB,KAAMA,KAAK21C,kBAGtB31C,KAAKotO,mBACL7hN,EAAQtZ,KAAK,CACTwZ,OAAQ,gBACRD,KAAM,CAACxrB,KAAMA,KAAK21C,kBAGtB31C,KAAKqtO,oBAAoBrtO,KAAKs9B,UAC9B/R,EAAQtZ,KAAK,CAAEwZ,OAAQ,aAAcD,KAAM,CAACxrB,KAAMA,KAAK21C,kBAEvD31C,KAAK6rO,cACLtgN,EAAQtZ,KAAK,CAAEwZ,OAAQ,SAAUD,KAAM,CAACxrB,SAShD+oO,EAAK7iO,UAAUsT,UAAY,WACvBxZ,KAAK21C,eAAiB,IAAI,EAC1B31C,KAAKstO,iBACLttO,KAAKutO,sBAETxE,EAAK7iO,UAAUonO,eAAiB,WAC5BttO,KAAKwtO,WAAY,EACjBxtO,KAAK8sO,cAAgB,GACrB9sO,KAAKgpO,cAAgB,GACrBhpO,KAAKytO,SAAW,GAChBztO,KAAK+oG,eAAgB,EACrB/oG,KAAK86B,wBAAyB,EAC9B96B,KAAK0tO,uBAAwB,EAC7B1tO,KAAK22H,WAAa,GAClB32H,KAAKgrG,QAAS,EACdhrG,KAAKqkN,aAAe,OACpBrkN,KAAKokN,qBAAsB,EAC3BpkN,KAAK2tO,oBAAqB,EAC1B3tO,KAAK8qO,iBAAmB,OAAU5kO,UAAU8U,QAC5Chb,KAAKowM,gBAAkB,CACnBlkM,SAAU,WAAYmkM,SAAU,WAAYC,MAAO,QAASC,YAAa,cAAeC,mBAAoB,qBAC5GC,SAAU,WAAYC,gBAAiB,kBAAmBC,SAAU,WAAYC,WAAY,aAAcC,SAAU,WACpHC,OAAQ,SAAUC,QAAS,UAAWC,KAAM,QAEhDhxM,KAAK4tO,cAAgB,CACjBC,YAAa,wBACbC,KAAM,OACNC,MAAO,QACPC,qBAAsB,sBACtBC,cAAe,gDACfC,QAAS,wBACTC,cAAe,wBACfC,aAAc,uCACdC,eAAgB,qBAChBC,qBAAsB,uHAEtBC,IAAK,MACLC,KAAM,OACNC,OAAQ,SACRC,OAAQ,SACRC,OAAQ,SACRhuD,MAAO,QACPiuD,UAAW,aACXC,YAAa,eACbC,WAAY,cACZC,UAAW,aACXrL,OAAQ,SACRsL,cAAe,UACfC,KAAM,OACN1lG,KAAM,OACN2lG,MAAO,QACPC,mBAAoB,yCACpBC,qBAAsB,2CACtBC,WAAY,OACZC,SAAU,KACVC,aAAc,SACdC,cAAe,cACfC,aAAc,iBACdC,iBAAkB,yCAClBC,qBAAsB,mEACtBC,cAAe,0CACfC,WAAY,+CACZC,cAAe,gBACfC,WAAY,cACZC,cAAe,iBACfC,OAAQ,mBACRC,aAAc,SACdC,YAAa,QACbC,WAAY,cACZC,cAAe,sBACfC,KAAM,OACNC,SAAU,YACVC,YAAa,oBACbC,SAAU,WACVC,YAAa,mBACbC,OAAQ,OACRC,QAAS,WACTC,QAAS,QACTC,WAAY,YACZC,MAAO,QACPC,SAAU,YACVC,SAAU,YACVC,gBAAiB,qBACjBC,YAAa,eACbC,mBAAoB,wBACpBC,WAAY,gBACZC,WAAY,kBACZC,KAAM,OACNC,MAAO,uBACPC,QAAS,yBACTC,YAAa,eACbC,YAAa,iBACbC,eAAgB,oCAChBC,YAAa,8BACbC,gBAAiB,2BACjBC,YAAa,0BACbnQ,aAAc,wBACdoQ,cAAe,WACfC,kBAAmB,sBACnBC,UAAW,aACXC,WAAY,sBACZ1tI,QAAS,sBACT2tI,WAAY,sBACZC,QAAS,sBACTC,OAAQ,SACRC,UAAW,aACXC,SAAU,YACVC,aAAc,gBACdC,SAAU,YACVC,cAAe,iBACfC,eAAgB,kBAChBC,WAAY,cACZC,aAAc,gBACdC,WAAY,SACZC,UAAW,aACXC,oBAAqB,kCACrBC,OAAQ,SACRC,WAAY,OACZC,YAAa,QACbC,SAAU,mBACVC,YAAa,eACbC,MAAO,QACPC,aAAc,iBACdC,WAAY,eACZC,WAAY,eACZC,eAAgB,mBAChBC,UAAW,aACXC,QAAS,UACTC,aAAc,gBACdC,wBAAyB,kBACzBC,4BAA6B,gBAC7BC,IAAK,MACLC,GAAI,KACJC,cAAe,mBACfC,sBAAuB,sBACvBC,qBAAsB,cACtBC,sBAAuB,eACvBC,yBAA0B,kBAC1BC,eAAgB,cAChBC,qBAAsB,qBACtBC,uBAAwB,yBACxBC,SAAU,cACVC,SAAU,cACVC,aAAc,iBACdC,aAAc,iBACdC,sBAAuB,2BACvBC,sBAAuB,2BACvBC,KAAM,OACNC,kBAAmB,qCACnBC,gBAAiB,sBACjBC,sBAAuB,qCACvBC,iBAAkB,4BAClBC,aAAc,kBACdC,aAAc,oBACdC,kBAAmB,mCACnBC,WAAY,cACZC,UAAW,YACXC,cAAe,YACfC,eAAgB,aAChBC,SAAU,OACVC,SAAU,WACVC,UAAW,aAEf/1O,KAAKikB,WAAa,CACdyhI,UAAW,YACXD,QAAS,UACTuwF,WAAY,aACZC,UAAW,YACXC,UAAW,kBACXC,QAAS,gBACTC,WAAY,mBACZC,UAAW,kBACXloN,KAAM,OACNvG,IAAK,MACL8F,OAAQ,SACR4oN,SAAU,YACVC,QAAS,WACTnoN,OAAQ,SACRC,SAAU,WACVmoN,cAAe,kBACfC,gBAAiB,oBACjBC,UAAW,aACXC,YAAa,eACblpN,aAAc,gBACdD,WAAY,cACZopN,cAAe,iBACfC,YAAa,eACbC,UAAW,SACXC,UAAW,SACXhiL,OAAQ,SACRiiL,OAAQ,SACRC,GAAI,KACJtpN,MAAO,QACPupN,UAAW,aACXC,WAAY,cACZxoN,IAAK,MACLD,SAAU,YACV0oN,MAAO,QACPC,UAAW,SACXC,eAAgB,eAChBC,UAAW,aACXC,cAAe,iBACfC,eAAgB,oBASxB1O,EAAK7iO,UAAUmT,OAAS,WAYpB,GAXArZ,KAAKs4C,IAAI,CAAC,iBAAkB,kBAAmB,iBAAkB,6BACjEt4C,KAAKs1N,YAAYnwF,WAAWnlI,KAAKmJ,QAAS,CAAE0L,KAAM,SAClD,eAAc,CAAEvO,OAAQtG,KAAKmJ,QAASkH,SAAUrQ,KAAKqQ,SAAWrQ,KAAKqQ,SAAW,MAAQrQ,KAAKqK,eAC7FrK,KAAK41M,aAAe,IAAI,EAAO51M,KAAMA,KAAK21C,gBAC1C31C,KAAK03O,aAAe,IAAI,GAAO13O,MAC/BA,KAAK8qI,aAAe,IAAI,QAAO9qI,MAC/BA,KAAKsf,OAAO,QAAoB,KAC6B,IAAxDtf,KAAKo2C,gBAAgB/b,YAAYF,WAAWsd,cAAwEtmC,IAApDnR,KAAKo2C,gBAAgB/b,YAAYF,WAAW+zB,MAC1G,eAAkBluD,KAAKm6B,aAAen6B,KAAKm6B,WAAWp2B,SACzD/D,KAAKirO,mBAAoB,GAEzBjrO,KAAK+N,QAAS,CACd,IAAIyd,EAAO,CAAEq5L,mBAAoB7kN,KAAK6kN,oBACtC7kN,KAAK6N,QAAQ,QAAa2d,GACrBA,EAAKq5L,qBACN7kN,KAAK6kN,mBAAqBr5L,EAAKq5L,yBAInC7kN,KAAK6N,QAAQ,SAEjB,gBAAe7N,KAAKs9B,QAASt9B,KAAKyoG,2BAA4BzoG,MAC1DA,KAAKyoG,4BAA8BzoG,KAAK+qO,wBAA0B/qO,KAAKoiJ,cACvEpiJ,KAAKoiJ,YAAc,GACnBpiJ,KAAK23O,kBAAkB33O,KAAKs9B,UAEhCt9B,KAAK8pO,yBAA0B,EAC3B9pO,KAAK23N,mBACL33N,KAAKsf,OAAO,QAAwB,IAExCtf,KAAK43O,kBACL,gBAAe53O,KAAKs9B,SAChBt9B,KAAK0oG,iBAAmB1oG,KAAKgrO,eAC7BhrO,KAAK63O,4BAA4B73O,KAAKs9B,SAE1Ct9B,KAAK83O,iBAAiB93O,KAAKs9B,SAC3Bt9B,KAAK4vD,aACL5vD,KAAK+3O,eACL/3O,KAAKg4O,aACLh4O,KAAKsZ,aACLtZ,KAAKi4O,cACLj4O,KAAKm5N,sBACLn5N,KAAKk4O,sBACuC,YAAxCl4O,KAAKgpG,iBAAiBC,eACtBjpG,KAAK4/M,cAET5/M,KAAKsf,OAAO,QAAmB,IACa,YAAxCtf,KAAKgpG,iBAAiBC,eACtBjpG,KAAKm4O,iBAELn4O,KAAKu/F,YACLv/F,KAAK6N,QAAQ,YAGrBk7N,EAAK7iO,UAAU2xO,4BAA8B,SAAUv6M,GACnD,IAAK,IAAIv2B,EAAI,EAAGA,EAAIu2B,EAAQ52B,OAAQK,IAAK,CACrC,IAAIw1B,EAASe,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAC5CilB,EAAO,GAAK,QAAqCA,EAAOlqB,MACpDkqB,EAAOe,SACPt9B,KAAK63O,4BAA4Bt7M,EAAOe,WASpDyrM,EAAK7iO,UAAU05M,YAAc,WACpB5/M,KAAKi1K,cACN,eAAYj1K,KAAKmJ,UAQzB4/N,EAAK7iO,UAAU65M,YAAc,WACpB//M,KAAKi1K,cACN,eAAYj1K,KAAKmJ,UAGzB4/N,EAAK7iO,UAAUu4N,YAAc,SAAU2Z,EAAeC,GAClD,IAAI,eAAkBr4O,KAAKs4O,gBAAiB,eAAkBt4O,KAAKw5K,eAAnE,CAGA,IAAIz8E,EAAa/8F,KAAK6oG,mBAAmBj6D,WACrCouD,EAAch9F,KAAKwoG,aAAa55D,WAChCquD,EAAaj9F,KAAK4pG,mBACtB,GAAIyuI,EAAJ,CACI,IAAIE,EAAeF,EAAcvmO,cAAc,mBAC3C0mO,EAAezpO,KAAKyyC,MAAM+2L,EAAavrO,wBAAwB7B,OAASnL,KAAK8oG,gBAC7E2vI,EAAe,6IAEbz4O,KAAK04O,qBAAuB14O,KAAK04O,qBAAuB,eAC9DH,EAAa7nO,UAAY,GACzB,IAAK,IAAI3J,EAAI,EAAGA,EAAIyxO,EAAczxO,IAAK,CACnCwxO,EAAa7nO,WAAa+nO,EAC1B,IAAIE,EAAW,GAAGrlO,MAAMjK,KAAKkvO,EACxBpwN,iBAAiB,yFACtBwwN,EAAS,GAAG3tO,UAAU0G,IAAI,iCAC1BinO,EAAS,GAAG3tO,UAAU0G,IAAI,2CAZlC,CAoBA,KAJM1R,KAAKuL,YAAcvL,KAAK6oG,mBAAmBl8F,MAAM4wL,cAC/Cv9L,KAAKuL,YAAcvL,KAAK6oG,mBAAmBl8F,MAAM2wL,eACrDtgG,EAAYrwF,MAAMm/F,UAAY,WAE7B9rG,KAAK+oG,gBAAkB/oG,KAAK4vD,aAAalpD,OAAQ,CAClD,IAAIkyO,EAAgB57I,EAAYhwF,wBAAwB7B,OACpD0tO,EAAoC,IAAlBD,EAAsB54O,KAAK64C,YAAc74C,KAAK2wD,aAAaG,SAAW9wD,KAAK8oG,eAC3F18F,OAAOonI,YAAcolG,EACvBE,EAAkB/pO,KAAKu2D,KAAKuzK,EAAkB74O,KAAK8oG,gBAKvD,MAJ8B,aAA1B9oG,KAAK+mN,mBACL/mN,KAAK+4O,gBAAkB/4O,KAAKg5O,qBAAqBj8I,EAAY,SAEjE/8F,KAAKi5O,iBAAmBj5O,KAAKg5O,qBAAqBh8I,EAAa87I,IAInE,GADA94O,KAAKk5O,wBAAwBl5O,KAAK84C,uBAAwB94C,KAAKyoG,6BAA+B2vI,IACzFp4O,KAAKi5O,iBAAkB,CACxB,IAAIxoO,EAAUusF,GACVh9F,KAAK84C,sBAAwB94C,KAAKyoG,8BAClCh4F,EAAUA,EAAQqB,cAAc,oBAE/B,eAAkBrB,EAAQqB,cAAc,YACzC9R,KAAKi5O,iBAAmBj5O,KAAKm5O,gBAAgB1oO,EAASzQ,KAAKo5O,wBAAyBhB,IAG5F,IAAKp4O,KAAK+4O,kBAAoB/4O,KAAK0oG,gBAAmB1oG,KAAKyoG,4BAAgD,MAAlB2vI,GAAyB,CAC1G3nO,EAAUssF,EACV/8F,KAAKyoG,4BAAgD,MAAlB2vI,IACnC3nO,EAAUA,EAAQqB,cAAc,oBAEpC9R,KAAK+4O,gBAAkB/4O,KAAKm5O,gBAAgB1oO,EAASzQ,KAAKo5O,wBAAyBhB,GAEvF,GAAIn7I,GAAcA,EAAWnrF,cAAc,iBAAkB,CACzD,IAAIunO,EAAoBp8I,EAAWruD,WACnC,IAAK5uC,KAAKs5O,uBAAwB,CAC9B,IAAIC,EAAgBF,EACpBr5O,KAAKs5O,uBAAyBt5O,KAAKm5O,gBAAgBI,IAGrDv5O,KAAK84C,sBAAwBs/L,GAC/B,OAAa1mO,IAAIsrF,EAAa,SAAUh9F,KAAKw5O,iBAAkBx5O,SAGvE+oO,EAAK7iO,UAAUkzO,sBAAwB,WACnC,OAAOp5O,KAAK4vD,cAEhBm5K,EAAK7iO,UAAU8yO,qBAAuB,SAAUS,EAAa9uF,GACzD,IAAIvwF,EAAQp6D,KAAKqK,cAAc,QAAS,CAAEC,UAAW,2BACjD2zF,EAAQj+F,KAAKqK,cAAc,QAAS,CAAEC,UAAW,mBACjDkyB,EAAMx8B,KAAKqK,cAAc,KAAM,CAAEC,UAAW,qBAAsBsK,MAAO,CACrEjI,MAAO,WAAa3M,KAAK8oG,eAAiB,SAE9C4G,EAAO1vG,KAAKqK,cAAc,KAAM,CAAEC,UAAW,4BACjDolG,EAAKh/F,UAAY1Q,KAAK04O,qBACtBl8M,EAAIhyB,YAAYklG,GAChB,IAAK,IAAI3oG,EAAI,EAAGA,EAAI4jJ,EAAU5jJ,IAC1Bk3F,EAAMzzF,YAAYgyB,EAAIrP,WAAU,IAIpC,OAFAitC,EAAM5vD,YAAYyzF,GAClBw7I,EAAYjvO,YAAY4vD,GACjBA,GAEX2uK,EAAK7iO,UAAUizO,gBAAkB,SAAUhwO,EAASm0B,EAAS86M,GACzD,IAAIhxN,EAAgBje,EAChBimC,IAAS,eAAQhoB,EAAe,iBAChC3W,IAAU,eAAQ2W,EAAe,kBACjCg1C,IAAS,eAAQh1C,EAAe,iBAChC41E,EAAch9F,KAAKwoG,aAAa55D,WAChC8qM,EAA0B18I,EAAYgP,aACtC5xC,EAAQhzC,EAActV,cAAc,SACpC6nO,EAAYv/K,EAAMjtC,YACtBwsN,EAAUnpO,gBAAgB,QAC1BmpO,EAAUnpO,gBAAgB,MAC1BmpO,EAAUhtO,MAAM7C,SAAW,WAC3B6vO,EAAUhtO,MAAM6c,OAAS,IACzBmwN,EAAUhtO,MAAMvB,MAAQgvD,EAAMptD,wBAAwB5B,MAAQ,MAC1DgkC,GAAYpvC,KAAKyoG,4BAAgD,MAAlB2vI,IAC/CuB,EAAUhtO,MAAM+zB,UAAY,iBACtB05B,EAAMtoD,cAAc,SAAS9E,wBAAwB7B,OAAS,OAExEwuO,EAAUppO,aAAa,QAAS,0BAChC,IAAIqpO,EAAex/K,EAAMtoD,cAAc,YAAYqb,WAAU,GAI7D,GAHAysN,EAAappO,gBAAgB,MAC7BopO,EAAarpO,aAAa,QAAS,qBACnCopO,EAAUnvO,YAAYovO,GAClBxqM,GAAUpvC,KAAKyoG,4BAAgD,MAAlB2vI,EAAuB,CACpE,IAAI57M,EAAMx8B,KAAK65O,cAAcD,EAAct8M,GAC3C,GAAIt9B,KAAK0oG,eAEL,IADA,IAAIoxI,EAAQ,GAAGxmO,MAAMjK,KAAKmzB,EAAIrU,iBAAiB,eACtCphB,EAAI,EAAGA,EAAI+yO,EAAMpzO,OAAQK,IAC1BA,EAAI/G,KAAKqpO,iBACLrpO,KAAKqpO,gBAAkB,IAAMtiO,GAC7B+yO,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAU0G,IAAI,sBAEpDooO,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAU0G,IAAI,gBAChDooO,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAK/G,aAAa,gBAAiBxJ,EAAEuQ,YAClEwiO,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAK3K,MAAM7B,KAAQwyB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK26B,OAChFjyC,KAAKg5G,WAAc,MAEjB8gI,EAAMpzO,OAAS1G,KAAKkpO,kBAAqBniO,GAAKu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,OAC9EwiO,EAAMpzO,OAAS1G,KAAKkpO,mBAAsBniO,GAC3C+yO,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAU0G,IAAI,uBAEpDooO,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAU0G,IAAI,iBAChDooO,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAK/G,aAAa,gBAAiBxJ,EAAEuQ,YAClEwiO,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAK3K,MAAM4kB,MAASvxB,KAAKg5G,WAClD17E,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK26B,OAAU,MAI9D,IAAIolL,EAAQj9J,EAAMtoD,cAAc,SAC5B0rB,EAAO,GAAGlqB,MAAMjK,KAAKguN,EAAMlvM,iBAAiB,OAC5C4xN,EAAY1iB,EAAMlqM,YACtB4sN,EAAUvpO,gBAAgB,QAC1BupO,EAAUxpO,aAAa,QAAS,kBAChC,IAAIo6I,EAAWntH,EAAK92B,OACpB,IAASK,EAAI,EAAGA,EAAI4jJ,EAAU5jJ,IAC1BgzO,EAAUvvO,YAAYgyB,EAAIrP,WAAU,IACpC4sN,EAAUtvM,WAAW1lC,SAASgC,EAAEuQ,WAAY,KAAK3K,MAC5CxB,OAASqyB,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKtK,wBAAwB7B,OAAS,KAEpFwuO,EAAUnvO,YAAYuvO,GAE1B,IAAIC,EAAY5/K,EAAMtoD,cAAc,SAASqb,YAC7C6sN,EAAUxpO,gBAAgB,QAC1BwpO,EAAUzpO,aAAa,QAAS,kBAChC,IAAI0tF,EAAQ7jC,EAAMtoD,cAAc,SAChC,GAAIrB,GAAW2+B,EAAQ,CACnB,IAAI6qM,EAAkBj9I,EAClB2tD,EAAW57I,KAAKu2D,KAAK20K,EAAgBjtO,wBAAwB7B,OAASnL,KAAK8oG,gBAC/E,GAAI7K,EAAMnsF,cAAc,iBAAmBmsF,EAAMxzD,WAAW/jC,QAAW+J,GAAWzQ,KAAKmuG,UAAY,CAC3F3xE,EAAMx8B,KAAK65O,cAAcD,EAAct8M,GAA3C,IACI48M,EAAS19M,EAAIrP,WAAU,GAC3B+sN,EAAOlvO,UAAU0G,IAAI,YACrB,IAAS3K,EAAI,EAAGA,EAAI4jJ,EAAU5jJ,IAAK,CAC/B,IAAIozO,EAAY,EAChBH,EAAUxvO,aAAazD,EAAIozO,GAAa,IAAM,EAAID,EAAO/sN,WAAU,GAAQqP,EAAIrP,WAAU,SAG5F,CACD,IAAIitN,EAAY,gEAEZC,GADA78M,EAAO,GAAGlqB,MAAMjK,KAAK40F,EAAM91E,iBAAiBiyN,IAC/Bn8I,EAAMnsF,cAAc,8BACjCwoO,OAAkB,EACtB,GAAID,EAAY,CAEZ,GADAC,EAAkB98M,EAAKzzB,QAAQswO,GAC3Br6O,KAAK0oG,gBAAkB1oG,KAAKyoG,2BAE5B,IADIqxI,EAAQ,GAAGxmO,MAAMjK,KAAKm0B,EAAK88M,EAAkB,GAAGnyN,iBAAiB,eAC5DphB,EAAI,EAAGA,EAAI+yO,EAAMpzO,OAAQK,IAC1BA,EAAI/G,KAAKqpO,iBACTyQ,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAU0G,IAAI,gBAChDooO,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAK/G,aAAa,gBAAiBxJ,EAAEuQ,YAClEwiO,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAK3K,MAAM7B,KAAQwyB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK26B,OAASjyC,KAAKg5G,WAAc,MAE1G8gI,EAAMpzO,OAAS1G,KAAKkpO,kBAAqBniO,GAAKu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,OACnFwiO,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAU0G,IAAI,iBAChDooO,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAK/G,aAAa,gBAAiBxJ,EAAEuQ,YAClEwiO,EAAM/0O,SAASgC,EAAEuQ,WAAY,KAAK3K,MAAM4kB,MAASvxB,KAAKg5G,WAClD17E,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK26B,OAAU,MAI1DooM,EAAWrvO,UAAUkB,SAAS,cAC9BsxB,EAAKlrB,OAAOgoO,EAAiB,GAG7B98M,EAAKlrB,OAAOgoO,EAAiB,GAGrC3vF,GAAY3qJ,KAAK84C,sBAAwB94C,KAAKyoG,6BAA+B2vI,EAAgB56M,EAAK92B,OAC5FikJ,GAAYntH,EAAK92B,OAASikJ,EAAWntH,EAAK92B,OAChD,IAASK,EAAI,EAAGA,EAAI4jJ,EAAU5jJ,IAC1BizO,EAAUxvO,YAAYxK,KAAKu6O,aAAa/8M,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAK6V,WAAU,GAAOqQ,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKtK,wBAAwB7B,SAEvJ,GAAIkvO,GAAcA,EAAWrvO,UAAUkB,SAAS,gBAAkBouO,EAAkB3vF,EAAU,CAC1F,IAAI6vF,EAAiBR,EAAUvvM,WAAW1lC,SAASu1O,EAAgBhjO,WAAY,KAC/EkjO,EAAe7tO,MAAMxB,OAASnL,KAAK8oG,eAAiB,KACpD0xI,EAAexvO,UAAU0G,IAAI,SACzB2oO,EAAWrvO,UAAUkB,SAAS,aAC9BsuO,EAAexvO,UAAU0G,IAAI,cAM7C,GADAioO,EAAUnvO,YAAYwvO,GAClB59K,EAAQ,CACR,IAAIq+K,EAAQrgL,EAAMtoD,cAAc,SAC5B4oO,EAAYD,EAAMttN,YACtButN,EAAUnqO,aAAa,QAAS,kBAEhC,IADIitB,EAAO,GAAGlqB,MAAMjK,KAAKoxO,EAAMtyN,iBAAiB,OACvCphB,EAAI,EAAGA,EAAIy2B,EAAK92B,OAAQK,IAC7B2zO,EAAUlwO,YAAYxK,KAAKu6O,aAAa/8M,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAK6V,WAAU,GAAOqQ,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKtK,wBAAwB7B,SAEvJwuO,EAAUnvO,YAAYkwO,GAM1B,GAJItrM,GAAUpvC,KAAK0oG,iBAAmB1oG,KAAKyoG,6BACvCzoG,KAAK6oG,mBAAmB/2F,cAAc,IAAM,QAAwBnF,MAAM7C,SAAW,YAEzFsd,EAAc6D,aAAa0uN,EAAWvyN,EAAcwnB,YAChDn+B,KAAazQ,KAAK84C,uBAAwBs/L,GAAgB,CAC1D,IAAIuC,EAAejB,EAA0BC,EAAU3sO,wBAAwB7B,OAC/EwvO,EAAeA,EAAe,EAAI,EAAIA,EACtC,IAAI/jO,EAAYomF,EAAYpmF,WAAa+jO,EAAe39I,EAAYpmF,UAAY+jO,EAC5E36O,KAAK84C,uBACLliC,GAAa,eAAmB,eAAQwQ,EAAe,oBAAoBjc,QAE/EwuO,EAAUhtO,MAAM+zB,UAAY,iBAAmB9pB,EAAY,MAE/D,OAAO+iO,GAEX5Q,EAAK7iO,UAAUq0O,aAAe,SAAU/9M,EAAKwpL,GACzC,IAAIsY,EAAU9hM,EACd8hM,EAAQ9tN,gBAAgB,QACxB8tN,EAAQ9tN,gBAAgB,iBACxB8tN,EAAQ9tN,gBAAgB,iBACxB8tN,EAAQ9tN,gBAAgB,YACxB8tN,EAAQtzN,UAAU0G,IAAI,gBACtB4sN,EAAQ3xN,MAAMxB,OAAS66M,EAAY,KAEnC,IADA,IAAI40B,EAAY,GAAGtnO,MAAMjK,KAAKi1N,EAAQ7zL,YAC7B1jC,EAAI,EAAGA,EAAI6zO,EAAUl0O,OAAQK,IAAK,CACvC,IAAI8zO,EAAWD,EAAU71O,SAASgC,EAAEuQ,WAAY,KAC5CwjO,EAAwBD,EAASjsM,YAAcisM,EAASjsM,WAAW5jC,WAChE6vO,EAASjsM,WAAW5jC,UAAUkB,SAAS,sBAC9C2uO,EAASrqO,gBAAgB,QACzBqqO,EAASrqO,gBAAgB,YACzBqqO,EAASrqO,gBAAgB,cACrBxQ,KAAKyoG,4BAA8BoyI,EAAS7vO,UAAUkB,SAAS,mBAC/D,gBAAY,CAAC2uO,GAAW,CAAC,gBAAiB,qBAAsB,wBAChE,eAAS,CAACA,GAAW,CAAC,gBAEpB76O,KAAKyoG,6BAA+BoyI,EAAS7vO,UAAUkB,SAAS,iBAClE2uO,EAAS7vO,UAAUkB,SAAS,mBAC5B2uO,EAASrqO,gBAAgB,iBAE7BqqO,EAASrqO,gBAAgB,iBACzBqqO,EAASrqO,gBAAgB,SACzBqqO,EAASrqO,gBAAgB,kBACzBqqO,EAASrqO,gBAAgB,mBACzBqqO,EAASrqO,gBAAgB,gBACzBqqO,EAASrqO,gBAAgB,iBACzBqqO,EAAS7vO,UAAU0G,IAAI,iBACvBmpO,EAASnqO,UAAY1Q,KAAK04O,qBACtBmC,EAAS7vO,UAAUkB,SAAS,uBAAyB2uO,EAAS7vO,UAAUkB,SAAS,wBACjF2uO,EAASjsM,WAAW5jC,UAAU0G,IAAI,uBAE7BmpO,EAAS7vO,UAAUkB,SAAS,iBAAmB4uO,EACpDD,EAASjsM,WAAW5jC,UAAU0G,IAAI,0BAE7BmpO,EAAS7vO,UAAUkB,SAAS,iBACjC2uO,EAASjsM,WAAW5jC,UAAU0G,IAAI,sBAE7BmpO,EAAS7vO,UAAUkB,SAAS,kBACjC2uO,EAASnqO,UAAY,IAG7B,OAAO4tN,GAEXyK,EAAK7iO,UAAU2zO,cAAgB,SAAUkB,EAAaC,GAClD,IAAIrkB,EAAWokB,EACXz9M,EAAU09M,EACVx+M,EAAMx8B,KAAKqK,cAAc,KAAM,CAAEC,UAAW,uBAClB,aAA1BtK,KAAK+mN,mBACLvqL,EAAI7vB,MAAMxB,OAASnL,KAAK8oG,eAAiB,MAG7C,IADA,IAAIglG,EAAK9tM,KAAKqK,cAAc,KAAM,CAAEC,UAAW,4BACtCvD,EAAI,EAAGouN,EAAW,EAAGpuN,EAAI4vN,EAASlsL,WAAW/jC,OAAQK,IAAK,CAC/D,IAAIgrD,EAAM4kK,EAASlsL,WAAW1lC,SAASgC,EAAEuQ,WAAY,KACjD2jO,EAAUntC,EAAG3gL,YACjB8tN,EAAQvqO,UAAY1Q,KAAK04O,qBACnB3mL,EAAI/mD,UAAUkB,SAAS,mBAAqB6lD,EAAI/mD,UAAUkB,SAAS,oBAClE6lD,EAAI/mD,UAAUkB,SAAS,iBAqBtB6lD,EAAI/mD,UAAUkB,SAAS,kBACvB+uO,EAAQrsM,WAAW5jC,UAAU0G,IAAI,uBAE5BqgD,EAAI/mD,UAAUkB,SAAS,mBAC5B+uO,EAAQrsM,WAAW5jC,UAAU0G,IAAI,wBAE5BqgD,EAAI/mD,UAAUkB,SAAS,kBAC5B+uO,EAAQrsM,WAAW5jC,UAAU0G,IAAI,uBA3BP,aAA1B1R,KAAK+mN,kBAAmCzpL,EAAQv4B,SAASowN,EAAS79M,WAAY,MAC9E2jO,EAAQ1qO,aAAa,YAAa+sB,EAAQv4B,SAASowN,EAAS79M,WAAY,KAAK84B,WACzE9S,EAAQv4B,SAASowN,EAAS79M,WAAY,KAAK84B,WAAa9S,EAAQv4B,SAASowN,EAAS79M,WAAY,KAAK6gC,OAEjF,SAAtB4Z,EAAIplD,MAAMC,QACVquO,EAAQjwO,UAAU0G,IAAI,WAGtBupO,EAAQtuO,MAAM24F,UAAYhoE,EAAQv4B,SAASowN,EAAS79M,WAAY,MACzDgmB,EAAQv4B,SAASowN,EAAS79M,WAAY,KAAKguF,UAC9ChoE,EAAQv4B,SAASowN,EAAS79M,WAAY,KAAKguF,UAAUh+E,cACnDtnB,KAAKuL,UAAY,QAAU,OAC7B+xB,EAAQv4B,SAASowN,EAAS79M,WAAY,OAA6D,aAApDgmB,EAAQv4B,SAASowN,EAAS79M,WAAY,KAAKlD,MACvFkpB,EAAQv4B,SAASowN,EAAS79M,WAAY,KAAK4jO,oBAC9CD,EAAQrsM,WAAW5jC,UAAU0G,IAAI,2BAGzCyjN,KAaJ34L,EAAIhyB,YAAYywO,GAEpB,OAAOz+M,GAEXusM,EAAK7iO,UAAUwyO,mBAAqB,WAChC,OAAI14O,KAAKk5O,qBACE,0DAEJ,0EAEXnQ,EAAK7iO,UAAUi1O,iBAAmB,WAC9Bn7O,KAAKk5O,sBAAuB,EAE5B,IADA,IAAIP,EAAW,GAAGrlO,MAAMjK,KAAKrJ,KAAKmJ,QAAQgf,iBAAiB,iCAClDphB,EAAI,EAAGA,EAAI4xO,EAASjyO,OAAQK,IAC7B4xO,EAAS5zO,SAASgC,EAAEuQ,WAAY,MAChCqhO,EAAS5zO,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAU0G,IAAI,mBAI/Dq3N,EAAK7iO,UAAUszO,iBAAmB,SAAUzmO,GAGxC,IAFA,IAAIzM,EAASyM,EAAEzM,OACX80O,EAAa90O,EAAO6hB,iBAAiB,mBAChCphB,EAAI,EAAGA,EAAIq0O,EAAW10O,OAAQK,IAAK,CACxC,IAAI4yO,EAAYyB,EAAWr2O,SAASgC,EAAEuQ,WAAY,KAClD,GAAIqiO,EAAW,CACX,IAAIgB,EAAer0O,EAAO0lG,aAAe2tI,EAAU3sO,wBAAwB7B,OAC3EwvO,EAAeA,EAAe,EAAI,EAAIA,EACtC,IAAI/jO,EAAYtQ,EAAOsQ,WAAa+jO,EAAer0O,EAAOsQ,UAAY+jO,EAClE36O,KAAK84C,uBACLliC,GAAa,eAAmB,eAAQ+iO,EAAW,oBAAoBxuO,QAE3EwuO,EAAUhtO,MAAM+zB,UAAY,iBAAmB9pB,EAAY,SAIvEmyN,EAAK7iO,UAAUu6N,cAAgB,WAC3B,IAAK,eAAkBzgO,KAAKw5K,eAAgB,CACxC,IAAIx8E,EAAch9F,KAAKwoG,aAAa55D,WACpC,OAAa3jC,OAAO+xF,EAAa,SAAUh9F,KAAKw5O,kBAEhDx5O,KAAK+4O,iBAAmB/4O,KAAK0oG,iBAAmB1oG,KAAKyoG,6BACrDzoG,KAAK6oG,mBAAmB/2F,cAAc,IAAM,QAAwBnF,MAAM7C,SAAW,IAIzF,IAFA,IAAIsxO,EAAa,CAACp7O,KAAK+4O,gBACnB/4O,KAAKi5O,iBAAkBj5O,KAAKs5O,wBACvBvyO,EAAI,EAAGA,EAAIq0O,EAAW10O,OAAQK,IAAK,CACxC,IAAI4yO,EAAYyB,EAAWr2O,SAASgC,EAAEuQ,WAAY,KAC9CqiO,GACA,gBAAOA,GAGf35O,KAAK+4O,gBAAkB,KACvB/4O,KAAKi5O,iBAAmB,KACxBj5O,KAAKs5O,uBAAyB,MAElCvQ,EAAK7iO,UAAUiyO,eAAiB,WAC5B,IAAIn7I,EAAch9F,KAAKwoG,aAAa55D,WACpC,IAAK5uC,KAAK+oG,eAAkB/oG,KAAK4vD,aAAalpD,SAG1C1G,KAAKi5O,kBAAoBj8I,EAAYlrF,cAAc,mBAAoB,CACvE,IAAIrB,EAAUusF,EACVh9F,KAAK84C,uBACLroC,EAAUA,EAAQqB,cAAc,oBAEpC9R,KAAKq7O,4BAA4B5qO,KAGzCs4N,EAAK7iO,UAAUm1O,4BAA8B,SAAU5qO,GACnD,IAAI2pD,EAAQ3pD,EAAQqB,cAAc,8BAC9B6kN,EAAWv8J,EAAMtoD,cAAc,QAAmBqb,WAAU,GAC5DwsN,EAAYlpO,EAAQqB,cAAc,mBACtC6kN,EAASnmN,gBAAgB,MACzBmmN,EAASpmN,aAAa,QAAS,qBAC/B,IAAK,IAAIxJ,EAAI,EAAGA,EAAI4vN,EAASlsL,WAAW/jC,OAAQK,IAC5C4vN,EAASlsL,WAAW1lC,SAASgC,EAAEuQ,WAAY,KAAK9G,gBAAgB,SAEpE,gBAAOmpO,EAAU7nO,cAAc,uBAC/B6nO,EAAU1uN,aAAa0rM,EAAUgjB,EAAU/qM,YAC3C+qM,EAAUhtO,MAAMvB,MAAQgvD,EAAMptD,wBAAwB5B,MAAQ,MAElE29N,EAAK7iO,UAAUgyO,oBAAsB,WAC7Bl4O,KAAKqzD,gBAA+C,cAA7BrzD,KAAKq6C,eAAejmC,MAC3CpU,KAAK6oG,mBAAmBhrF,uBAAuB,uBAAuBnX,OACtE1G,KAAK6oG,mBAAmB79F,UAAU0G,IAAI,mBAGtC1R,KAAK6oG,mBAAmB79F,UAAUC,OAAO,oBAGjD89N,EAAK7iO,UAAU0xO,gBAAkB,WAC7B,IAAK53O,KAAKyoG,2BAA4B,CAClC,IAAI6yI,EAAOt7O,KAAK4vD,aAEhB,GADA5vD,KAAKu7O,mBAAqBv7O,KAAK21C,eAAe0yG,WAAW,oBACpD,eAAkBizF,GACnB,IAAK,IAAIjpO,EAAQ,EAAGA,EAAQipO,EAAK50O,OAAQ2L,IAChC,eAAkBipO,EAAKv2O,SAASsN,EAAMiF,WAAY,KAAKkkO,eACpD,eAAkBF,EAAKv2O,SAASsN,EAAMiF,WAAY,KAAKgb,WACpDgpN,EAAKv2O,SAASsN,EAAMiF,WAAY,KAAKgb,SAC5CtyB,KAAKy7O,gBAAgBH,EAAKv2O,SAASsN,EAAMiF,WAAY,KAAMjF,GAK3ErS,KAAK07O,4BAET3S,EAAK7iO,UAAUu1O,gBAAkB,SAAU1pL,EAAK1/C,GAC5CrS,KAAKytO,SAASx7N,KAAK8/C,GACnB/xD,KAAK4qO,MAAM74K,EAAIxX,KAAOnuC,OAAOuvO,WAAW5pL,EAAIypL,aAC5Cx7O,KAAK47O,iBAAiBvpO,EAAOrS,KAAK4qO,MAAM74K,EAAIxX,MAC5Cv6C,KAAK2rO,kBAAkB5mO,SAASsN,EAAMiF,WAAY,KAAOtX,KAAK47O,iBAAiBlwO,KAAK1L,KAAMqS,GAC1FrS,KAAK4qO,MAAM74K,EAAIxX,KAAK09L,YAAYj4O,KAAK2rO,kBAAkB5mO,SAASsN,EAAMiF,WAAY,OAOtFyxN,EAAK7iO,UAAU21O,mBAAqB,SAAU9pL,GAC1C,IAAK/xD,KAAKyoG,2BAA4B,CAElC,IADA,IAAIp2F,EAAQrS,KAAK24N,oBAAoB5mK,EAAIxX,KAChCxzC,EAAI,EAAGA,EAAI/G,KAAKytO,SAAS/mO,OAAQK,IACtC,GAAIgrD,EAAIxX,MAAQv6C,KAAKytO,SAAS1oO,SAASgC,EAAEuQ,WAAY,KAAKijC,IAEtD,YADAv6C,KAAKytO,SAASn7N,OAAOvL,EAAG,GAIhC/G,KAAKy7O,gBAAgB1pL,EAAK1/C,KASlC02N,EAAK7iO,UAAU01O,iBAAmB,SAAUp7M,EAAaztB,GACrD,IAAIg/C,EAAM/xD,KAAK4vD,aAAa7qD,SAASy7B,EAAYlpB,WAAY,KACzDtX,KAAKytO,SAAS56K,MAAK,SAAUipL,GAAe,OAAOA,EAAYvhM,MAAQwX,EAAIxX,SAC3EwX,EAAIz/B,QAAUvf,EAAEgpO,QACZ/7O,KAAK+oG,gBACL/oG,KAAKg8O,kBAAmB,EACpBjqL,EAAIz/B,QACJtyB,KAAKi8O,UAAUpmO,KAAKk8C,EAAI3hB,WAAY,cAGpCpwC,KAAKi8O,UAAUrkO,KAAKm6C,EAAI3hB,WAAY,iBAKpD24L,EAAK7iO,UAAUg2O,gBAAkB,WAC7Bl8O,KAAK+oG,eAAgB,EACrB,IAAIwwI,EAAgBv5O,KAAKmJ,QAAQ2I,cAAc,IAAM,QACjD9R,KAAKowD,WAAW1pD,QAAU1G,KAAKmJ,QAAQ6iG,aAAejnG,SAAS/E,KAAKmL,OAAOmM,WAAY,KAAOiiO,GAC9F,eAAS,CAACA,GAAgB,CAAC,oBAE/B,IAAI4C,EAAiBn8O,KAAK4vD,aAAax2B,QAAO,SAAU24B,GAAO,MAAoB,aAAbA,EAAI39C,SAC5C,IAA1B+nO,EAAez1O,QAAgBy1O,EAAez1O,QAAkD,oBAAxC1G,KAAKumN,kBAAkB61B,gBAC/Ep8O,KAAKokN,qBAAsB,GAED,aAA1BpkN,KAAK+mN,kBACD/mN,KAAKq8O,cACLr8O,KAAK6Q,cAAc,CAAEu3F,kBAAkB,EAAMi0I,aAAa,IAAS,GACnE,gBAAY,CAACr8O,KAAKmJ,SAAU,gBAGhCnJ,KAAKooG,kBAAoBpoG,KAAK8qI,cAC9B9qI,KAAK8qI,aAAa9vH,UAElBhb,KAAK0oG,gBAAkB1oG,KAAK0rO,wBAC5B1rO,KAAKqnG,aAAaE,oBAClBvnG,KAAK0rO,uBAAwB,IAGrC3C,EAAK7iO,UAAUo2O,oBAAsB,WACjC,IAAK,IAAIv1O,EAAI,EAAGA,EAAI/G,KAAKytO,SAAS/mO,OAAQK,IACtC/G,KAAK4qO,MAAM5qO,KAAKytO,SAAS1oO,SAASgC,EAAEuQ,WAAY,KAAKijC,KAChDgiM,eAAev8O,KAAK2rO,kBAAkB3rO,KAAKytO,SAAS1oO,SAASgC,EAAEuQ,WAAY,KAAKjF,SAS7F02N,EAAK7iO,UAAUs2O,iBAAmB,aASlCzT,EAAK7iO,UAAUgS,QAAU,WACrB,IAAIy1F,EAAc3tG,KAAKmJ,QACvB,GAAKwkG,EAAL,CAGA,IAAI8uI,KAAe9uI,EAAY77F,cAAc,IAAM,UAC/C67F,EAAY77F,cAAc,IAAM,SAChC2qO,GACAz8O,KAAKma,eAETna,KAAKu8O,iBACLv8O,KAAKs8O,sBACLt8O,KAAKsf,OAAO,QAAgB,IAC5Btf,KAAK08O,0BACD18O,KAAK+N,SACL/N,KAAKsrM,gBAAgB,CAAC,aAEtBtrM,KAAKsvD,OACLtvD,KAAKsrM,kBAELmxC,GACA7zO,EAAO1C,UAAUgS,QAAQ7O,KAAKrJ,MAElCA,KAAK28O,WAAWzkO,UACZlY,KAAK+N,UAAY,OAAQ6zB,OACzB5hC,KAAKmJ,QAAQuH,UAAY,IAK7B,IAHA,IAAI6a,EAAU,CAAC,eAAgB,eAAgB,gBAAiB,wBAC5D,iBAAkB,cAAe,iBAAkB,eAAgB,eAAgB,YACnF,eAAgB,cAAe,kBAAmB,eAC7CxkB,EAAI,EAAGA,EAAIwkB,EAAQ7kB,OAAQK,IAC5B/G,KAAKurB,EAAQxmB,SAASgC,EAAEuQ,WAAY,QACpCtX,KAAKurB,EAAQxmB,SAASgC,EAAEuQ,WAAY,MAAQ,MAGpDtX,KAAKmJ,QAAQuH,UAAY,GACzB,eAAU1Q,KAAKmJ,QAAS,GAAI,CAAC,QAAS,cAAe,eAAgB,YAAa,WAAY,wBAElG4/N,EAAK7iO,UAAUw2O,wBAA0B,WACrC,IAAI/uI,EAAc3tG,KAAKmJ,QAClBwkG,IAAiBA,EAAY77F,cAAc,IAAM,SAAyB67F,EAAY77F,cAAc,IAAM,WAG/G9R,KAAK8qI,aAAa5yH,UAClBlY,KAAKwsB,eAAetU,UACpBlY,KAAK4lJ,YAAY1tI,UACjBlY,KAAK48O,gBAAgB1kO,UACrBlY,KAAKshL,YAAYppK,YAQrB6wN,EAAK7iO,UAAUsU,cAAgB,WAC3B,MAAO,QAEXuuN,EAAK7iO,UAAU22O,mBAAqB,WAC5B78O,KAAK88O,gBACL98O,KAAKumN,kBAAkB0f,kBAAoB,gBAC3CjmO,KAAKmJ,QAAQ6B,UAAU0G,IAAI,gBAG3B1R,KAAKmJ,QAAQ6B,UAAUC,OAAO,gBAGtC89N,EAAK7iO,UAAU62O,YAAc,SAAUC,GAC/Bh9O,KAAKqQ,UACL,eAAS,CAACrQ,KAAKmJ,SAAUnJ,KAAKqQ,SAAShQ,MAAM,MAE7C28O,GACA,gBAAY,CAACh9O,KAAKmJ,SAAU6zO,EAAY38O,MAAM,OAWtD0oO,EAAK7iO,UAAUyU,kBAAoB,SAAUC,EAASC,GAClD,IAGIoiO,EAHAC,GAAiB,EACjBC,GAAqB,EACrBC,GAAgB,EAEhB5xN,EAAO,CAAE6qB,YAAa,WACtBgnM,EAAkB,KAClBC,EAAiB,KACrB,IAAIt9O,KAAK6sC,YAAT,CAGA7sC,KAAKs4C,IAAI,kBACLt4C,KAAKu9O,qBACLv9O,KAAK28O,WAAWhxO,QAEpB,IAAI+U,EAAahb,OAAOoV,KAAKF,GACzB8F,EAAW3W,QAAQ,YAAc,IAC7B/J,KAAKyoG,6BACLzoG,KAAKoiJ,YAAc,IAEvBpiJ,KAAKw9O,qBACLL,GAAqB,GAEzB,IAAK,IAAI1pO,EAAK,EAAGgqO,EAAe/8N,EAAYjN,EAAKgqO,EAAa/2O,OAAQ+M,IAAM,CACxE,IAAIsH,EAAO0iO,EAAahqO,GACxB,OAAQsH,GACJ,IAAK,cACD/a,KAAKsf,OAAO,QAAiB,CAAEC,OAAQ,QAAS6hB,OAAQphC,KAAK64C,cAC7DqkM,GAAiB,EACG,SAAhBl9O,KAAKmL,QACLnL,KAAK8qI,aAAa9vH,UAEtB,MACJ,IAAK,eACD,GAAIhb,KAAKyrO,mBAAoB,CACzBzrO,KAAKyrO,oBAAqB,EAC1BzrO,KAAKsf,OAAO,QAA4B,CAAEC,OAAQ,QAASmB,WAAY9F,EAAQ+1C,eAC/E,MAEJ,GAAI3wD,KAAKixD,aAAejxD,KAAKixD,YAAYysL,SAErC,YADA19O,KAAKixD,YAAYysL,UAAW,GAGhC19O,KAAKsf,OAAO,QAA4B,CAAEC,OAAQ,QAASmB,WAAY9F,EAAQ+1C,gBAC3E,eAAkB/1C,EAAQ+1C,aAAaC,cAAgB,eAAkBh2C,EAAQ+1C,aAAaG,WAC3F,eAAkBl2C,EAAQ+1C,aAAauhH,qBACtC,eAAkBr3J,EAAQ81C,eACxB/1C,EAAQ+1C,aAAaC,cAAgB/1C,EAAQ81C,aAAaC,cACpD5wD,KAAKyoG,6BAA+BzoG,KAAK84C,sBAC1C94C,KAAK2wD,aAAauhH,mBAAqBlyK,KAAK2wD,aAAaG,YACpEosL,GAAiB,GAEjBl9O,KAAKixD,aAAejxD,KAAKixD,YAAYysL,WACrC19O,KAAKixD,YAAYysL,UAAW,GAEhC,MACJ,IAAK,eACD19O,KAAKsf,OAAO,QAAiB,CAAEC,OAAQ,OAAQ6hB,OAAQphC,KAAK4xD,eAC5DsrL,GAAiB,EACjBD,GAAc,EACd,MACJ,IAAK,iBACDj9O,KAAKk4O,sBACLl4O,KAAKsf,OAAO,QAAiB,CAAEC,OAAQ,SAAU6hB,OAAQphC,KAAKqzD,iBAC9D6pL,GAAiB,EACgB,cAA7Bl9O,KAAKq6C,eAAejmC,KACpBpU,KAAKs1M,gBAGe,SAAhBt1M,KAAKmL,QACLnL,KAAK8qI,aAAa9vH,UAG1B,MACJ,IAAK,SACL,IAAK,QACDhb,KAAKsf,OAAO,QAAiB,CAAEC,OAAQ,SAAUmB,WAAY,CAAEtV,MAAOwP,EAAQxP,MAAOD,OAAQyP,EAAQzP,UACjGnL,KAAK64C,aACL74C,KAAKixD,YAAYj2C,UAErB,MACJ,IAAK,kBACDhb,KAAKs4O,aAAatf,YAClBikB,GAAc,EACd,MACJ,IAAK,sBACDj9O,KAAKsf,OAAO,QAAiB,CAAEC,OAAQ,iBAAkB6hB,OAAQphC,KAAKkvG,sBACtElvG,KAAK41M,aAAa56L,UAClBhb,KAAKs4O,aAAatf,YAClB,MACJ,IAAK,iBACDh5N,KAAKsf,OAAO,QAAiB,CAAEC,OAAQ,YAAa6hB,OAAQphC,KAAKw9N,iBACjE,MACJ,IAAK,WACDx9N,KAAK+8O,YAAYliO,EAAQxK,UACzB,MACJ,IAAK,iBACGrQ,KAAKs8E,kBACLt8E,KAAK68O,qBACL78O,KAAKs8E,gBAAgBqhK,0BAEzB,MACJ,IAAK,cACD39O,KAAK49O,cAAgB,gBAAiB59O,KAAKwjN,aAC3C05B,GAAiB,EACjB,MACJ,IAAK,sBACDl9O,KAAK69O,sBAAwB,gBAAiB79O,KAAK4/N,qBACnDsd,GAAiB,EACjB,MACJ,IAAK,iBACDl9O,KAAK89O,iBAAmB,gBAAiB99O,KAAKkuG,gBAC9CgvI,GAAiB,EACjB,MACJ,IAAK,gBACDl9O,KAAKsf,OAAO,QAAiB,CAAEC,OAAQ,QAAS6hB,OAAQphC,KAAK+4C,gBAC7D/4C,KAAKs4O,aAAatf,YAClBkkB,GAAiB,EACjBD,GAAc,EACM,SAAhBj9O,KAAKmL,QACLnL,KAAK8qI,aAAa9vH,UAEtB,MACJ,IAAK,0BACL,IAAK,YAID,GAHAkiO,GAAiB,EACjBG,EAAkBr9O,KAAKiyK,cAAgBz+J,SAAS1B,cAAc,IAAM9R,KAAKiyK,cAAc0C,UAAY,KACnG2oE,EAAiBD,EAAkBA,EAAgBpzG,cAAc,GAAK,KAClEjqI,KAAKmuG,WAAamvI,GAAkB,eAAkBA,EAAenvI,UAAUA,WAAY,CAC3F,IAAI4vI,EAAkBr4O,OAAO6mO,OAAO,GAAI+Q,EAAenvI,UAAW,CAAEA,UAAWvzF,EAAQuzF,YACvFmvI,EAAezsO,cAAc,CAAEs9F,UAAW4vI,IAAmB,GAC7D,OAAQ,eAAkBT,EAAerrE,eAAgB,CACrD,IAAI+rE,EAAgBxqO,SAAS1B,cAAc,IAAMwrO,EAAerrE,cAAc0C,UAC1EspE,EAAwBD,EAAgBA,EAAc/zG,cAAc,GAAK,KAC7E,GAAIg0G,EAAuB,CACvB,IAAIC,EAAqBx4O,OAAO6mO,OAAO,GAAI0R,EAAsB9vI,WACjE+vI,EAAmB/vI,UAAYmvI,EAAenvI,UAC9C8vI,EAAsBptO,cAAc,CAAEs9F,UAAW+vI,IAAsB,GAE3EZ,EAAiBW,GAGzBj+O,KAAKs4O,aAAatf,YAClB,MACJ,IAAK,UACDh5N,KAAKsf,OAAO,QAAiB,CAAEC,OAAQ,YACnB,SAAhBvf,KAAKmL,QACLnL,KAAK8qI,aAAa9vH,UAEtB,MACJ,IAAK,gBACDhb,KAAKsf,OAAO,QAA4B,CACpCC,OAAQ,QAASmB,WAAY9F,EAAQo+B,cACrCmlM,cAAetjO,EAAQm+B,gBAE3B,MACJ,IAAK,cACIh5C,KAAKowD,WAAW1pD,QAAU1G,KAAK+4C,eAAiB/4C,KAAKg5C,cAAc1b,QAAQ52B,SAC5Ew2O,GAAiB,GAErBl9O,KAAKsf,OAAO,QAAiB,CAAEC,OAAQ,YAAamB,WAAY9F,IAC5C,SAAhB5a,KAAKmL,QACLnL,KAAK8qI,aAAa9vH,UAEtB,MACJ,IAAK,gBACL,IAAK,aACL,IAAK,uBACL,IAAK,6BACL,IAAK,eACL,IAAK,SACDhb,KAAKs4C,IAAI,uBACT8kM,GAAgB,EAChBD,GAAqB,EACrB,MACJ,IAAK,QACIn9O,KAAKo2C,gBAAgBiZ,yBACtB6tL,GAAiB,GAErBl9O,KAAKo2C,gBAAgBiZ,wBAAyB,EAC9C,MACJ,IAAK,UACGrvD,KAAKykG,QACLzkG,KAAKghO,uBAGLhhO,KAAKo+O,uBAET,MACJ,QACIp+O,KAAKq+O,uBAAuBtjO,EAAMH,EAASuiO,IAGnDF,GACAj9O,KAAKm5N,sBAELgkB,EACIC,GAAiBp9O,KAAKyhL,oBAAsBzhL,KAAK4oG,WACjD5oG,KAAKo9O,gBAGLp9O,KAAKgb,UAGJkiO,IACLl9O,KAAKsf,OAAO,QAAqBkM,GACjC0xN,GAAiB,EACjBl9O,KAAKs+O,kBAAkB1jO,EAAQuxN,qBAGvCpD,EAAK7iO,UAAUm4O,uBAAyB,SAAUtjO,EAAMH,EAASuiO,GAC7D,OAAQpiO,GACJ,IAAK,YACD/a,KAAKu+O,YACDv+O,KAAK64C,cACL74C,KAAKmJ,QAAQ2I,cAAc,gBAAgBm4H,cAAc,GAAG1+H,UAAYqP,EAAQrP,UAChFvL,KAAKmJ,QAAQ2I,cAAc,gBAAgBm4H,cAAc,GAAGt8H,YAE5C,SAAhB3N,KAAKmL,SACLnL,KAAK8qI,aAAathC,eAAe5uF,EAAQrP,WACzCvL,KAAK8qI,aAAa3hC,cAElBnpG,KAAKynG,SAAWznG,KAAKwnG,gBACrBxnG,KAAKwnG,cAAcg3I,aAAav0G,cAAc,GAAG1+H,UAAYqP,EAAQrP,UACrEvL,KAAKwnG,cAAcg3I,aAAav0G,cAAc,GAAGt8H,YAEjD3N,KAAKmtO,kBAAoBntO,KAAKy+O,oBAC9Bz+O,KAAKy+O,kBAAkBC,iBAAiBz0G,cAAc,GAAG1+H,UAAYqP,EAAQrP,UAC7EvL,KAAKy+O,kBAAkBC,iBAAiBz0G,cAAc,GAAGt8H,YAEzD3N,KAAKskG,gBAAkBtkG,KAAK2+O,mBAAqB3+O,KAAKooG,mBACtDpoG,KAAK2+O,iBAAiBC,gBAAgB30G,cAAc,GAAG1+H,UAAYqP,EAAQrP,UAC3EvL,KAAK2+O,iBAAiBC,gBAAgB30G,cAAc,GAAGt8H,YAE1B,cAA7B3N,KAAKq6C,eAAejmC,MAAwBpU,KAAKq6C,eAAeokJ,uBAChEz+L,KAAKs1M,gBAETt1M,KAAKsf,OAAO,QAAmB,IAC/B,MACJ,IAAK,eACDtf,KAAK41M,aAAa56L,UAClB,MACJ,IAAK,gBACDhb,KAAKs4O,aAAatf,YAClBh5N,KAAK6+O,oBACL,MACJ,IAAK,YACG7+O,KAAKgmN,UACL,eAAS,CAAChmN,KAAKmJ,SAAU,qBAGzB,gBAAY,CAACnJ,KAAKmJ,SAAU,qBAEhCnJ,KAAK41M,aAAa56L,UAClBhb,KAAKs4O,aAAatf,YAClB,MACJ,IAAK,YACDh5N,KAAK8+O,kBACL,MACJ,IAAK,iBACD9+O,KAAKs4O,aAAatf,YAClBh5N,KAAKsf,OAAO,QAAiB,CAAEC,OAAQ,aAAc6hB,QAAQ,IAC7D,MACJ,IAAK,kBACDphC,KAAKsf,OAAO,QAAiB,CAAEC,OAAQ,aAAc6hB,OAAQphC,KAAK++O,kBAClE,MACJ,IAAK,mBACD/+O,KAAKsf,OAAO,QAAiB,CAAEC,OAAQ,cAAe6hB,OAAQphC,KAAKmtO,mBACnE,MACJ,IAAK,oBACDntO,KAAKsf,OAAO,QAAiB,CAAEC,OAAQ,gBAAiB6hB,OAAQphC,KAAKotO,oBACrE,MACJ,IAAK,iBACDptO,KAAKk4O,sBACLl4O,KAAKsf,OAAO,QAA4B,CAAEC,OAAQ,SAAUmB,WAAY9F,EAAQy/B,iBAChF,MACJ,IAAK,iBACDr6C,KAAKsf,OAAO,QAA4B,CAAEC,OAAQ,SAAUmB,WAAY9F,EAAQk/B,iBAChF,MACJ,IAAK,eACD95C,KAAKsf,OAAO,QAA4B,CAAEC,OAAQ,SAClD,MACJ,IAAK,oBACDvf,KAAKsf,OAAO,QAA4B,CAAEC,OAAQ,YAAamB,WAAY9F,EAAQ2rM,oBACnF,MACJ,IAAK,eACDvmN,KAAKsf,OAAO,QAA4B,CAAEC,OAAQ,OAAQmB,WAAY9F,EAAQk3F,eAC9E,MACJ,IAAK,gBACL,IAAK,mBACG9xG,KAAKgnN,cACLhnN,KAAKg/O,gBAGLh/O,KAAKi/O,iBAETj/O,KAAKsf,OAAO,QAAqB,CAAEwyL,KAAM,WAAYwzB,UAAqB,qBAATvqN,IACjE,MACJ,IAAK,aAED,IAAImkO,EAAYl/O,KAAKo2C,gBAAgBsf,WAOrC,IANI11D,KAAKw9N,iBAAkBx9N,KAAK2tO,oBAAwBuR,GAAaA,EAAUzoM,WAC3Ez2C,KAAKopJ,kBAEJ,eAAkBppJ,KAAKm6B,aAAen6B,KAAKm6B,WAAWp2B,SACvD/D,KAAKirO,mBAAoB,GAEzBvlO,OAAO0uC,eAAex5B,GAASukO,UAE/B,IADA,IAAIC,EAAYp/O,KAAKs0D,0BAA0B,GACtCvtD,EAAI,EAAG6zC,EAAQl1C,OAAOoV,KAAKF,EAAQuf,YAAapzB,EAAI6zC,EAAMl0C,OAAQK,IACvE/G,KAAKq/O,WAAW,eAASD,EAAWp/O,KAAKm6B,WAAWygB,EAAM71C,SAASgC,EAAEuQ,WAAY,OAAQtX,KAAKm6B,WAAWygB,EAAM71C,SAASgC,EAAEuQ,WAAY,YAGzI,GAAI4nO,EAAUzoM,UAAW,CAC1B,IAAI6oM,EAAW,eAAkBt/O,KAAKm6B,YAAuC,GAAzBn6B,KAAKm6B,WAAWp2B,OAChEw7O,EAASL,EAAUvwL,OAAS,GAChC,GAAI4wL,EAAM74O,SAAW1G,KAAKg5C,cAAcqY,qBAAuBiuL,EAAQ54O,SAAU44O,EAAQ,GAAGnnM,OACxF,IAASpxC,EAAI,EAAGA,EAAIw4O,EAAM74O,OAAQK,IAC9Bu4O,EAAU,OAAS3wL,MAAM2wL,EAASC,EAAMx6O,SAASgC,EAAEuQ,WAAY,KAAM4nO,EAAU9uL,YAAc,IAGrGpwD,KAAKm6B,WAAa,CACdp2B,OAAQu7O,EAAS1kN,MAAO56B,KAAKm6B,WAAWS,MACxCw1B,WAAYpwD,KAAKm6B,WAAWi2B,YAEhCpwD,KAAKo2C,gBAAgBqf,SAAS,IAC9BypL,EAAUxoM,SAAS12C,KAAKm6B,iBAGxBn6B,KAAKo2C,gBAAgBqf,SAAS,CAAElf,eAAe,IAC/Cv2C,KAAKsf,OAAO,QAA2B,IAClC69N,IACDn9O,KAAK41M,aAAa56L,UACdhb,KAAKokN,qBACLpkN,KAAKsf,OAAO,OAAkC,KAI1Dtf,KAAKw/O,gBACL,MACJ,IAAK,cAED,IAAIp5N,EAASxL,EAAQyhO,YAAc,OAAW,QAC9Cj2N,EAAO,CAACpmB,KAAKmJ,SAAU,eACvB,MACJ,IAAK,mBACInJ,KAAKy/O,4BACNz/O,KAAKqpJ,UAAUzuI,EAAQuxN,kBAE3BnsO,KAAKy/O,4BAA6B,EAClC,MACJ,IAAK,iBACDz/O,KAAKqnG,aAAaq4I,kBAClB,MACJ,IAAK,mBACD1/O,KAAKsf,OAAO,QAA4B,IACxC,MACJ,IAAK,mBACDtf,KAAK2/O,0BACL3/O,KAAKsf,OAAO,QAAsB,IAClCtf,KAAKgb,UACL,MACJ,IAAK,qBACDhb,KAAK8qI,aAAa7+B,kBAAkBrxF,EAAQ4xF,oBAC5C,QAGZu8H,EAAK7iO,UAAUo4O,kBAAoB,SAAUjsO,GACzC,IAAI8jF,EAAUn2F,KACd,IAAe,IAAXqS,EAAc,CACd,IAAIutO,EAAO,WACPzpJ,EAAQkzD,UAAUh3I,GAClB8jF,EAAQ17C,IAAI,QAAqBmlM,IAErC5/O,KAAKgtC,GAAG,QAAqB4yM,EAAM5/O,QAS3C+oO,EAAK7iO,UAAU2K,cAAgB,SAAUkK,EAAMiiC,GAC3Cp0C,EAAO1C,UAAU2K,cAAcxH,KAAKrJ,KAAM+a,EAAMiiC,GAChD,IAAI3C,EAAiB,iBACjBt/B,EAAK,GAAKs/B,IAAmBr6C,KAAK++L,cAAgB/hJ,GAClDh9C,KAAK++L,aAAa2W,iBAO1BqzB,EAAK7iO,UAAU25O,eAAiB,WAC5B,OAAO7/O,KAAKupO,aAMhBR,EAAK7iO,UAAUizN,oBAAsB,WAIjC,IAHA,IAAI2mB,EAAc,GAAGxsO,MAAMjK,KAAKrJ,KAAK6oG,mBAAmB1gF,iBAAiB,4CACrE43N,EAAa,GAAGzsO,MAAMjK,KAAKrJ,KAAK6oG,mBAAmBhrF,uBAAuB,wBAC1EwyC,EAAOrwD,KAAK4vD,aACP7oD,EAAI,EAAGA,EAAI+4O,EAAYp5O,OAAQK,IAAK,CACzC,IAAI2oG,EAAOowI,EAAY/6O,SAASgC,EAAEuQ,WAAY,MAC1CtX,KAAK+4C,eAAiB/4C,KAAKqkG,iBAAmBrkG,KAAK4xD,gBAC9CvB,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK+sF,iBAAoBh0C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKs6C,cACnFvB,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKyhC,cAIrC22D,EAAK1kG,UAAU0G,IAAI,kBAHnBg+F,EAAK1kG,UAAU0G,IAAI,oBAO/B,IAAK,IAAIkpB,EAAQ,EAAGA,EAAQmlN,EAAWr5O,OAAQk0B,IACvC56B,KAAKqkG,iBACL07I,EAAWh7O,SAAS61B,EAAMtjB,WAAY,KAAKtM,UAAU0G,IAAI,mBAIrEq3N,EAAK7iO,UAAUyxO,kBAAoB,SAAUr6M,EAAS0iN,GAClD,IAAK,IAAIj5O,EAAI,EAAG2hB,EAAM4U,EAAQ52B,OAAQK,EAAI2hB,EAAK3hB,IACvCu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,QACpCt9B,KAAK23O,kBAAkBr6M,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,SAAS,GAGpEt9B,KAAKoiJ,YAAYnwI,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,OAGzD,eAAkB0oO,IAAiBA,GACnChgP,KAAKigP,yBAGblX,EAAK7iO,UAAU29I,mBAAqB,WAChC,OAAO7jJ,KAAKyhL,oBAAsBzhL,KAAK4lN,6BAE3CmjB,EAAK7iO,UAAUwiG,aAAe,WAC1B,OAAmC,IAA5B1oG,KAAKyhL,oBAA8D,IAAlCzhL,KAAKiqO,kBAAkBvjO,QAAmD,IAAnC1G,KAAKkqO,mBAAmBxjO,QACtE,IAA7B1G,KAAKg3L,aAAatwL,QAE1BqiO,EAAK7iO,UAAUwsM,cAAgB,WAC3B,OAAO1yM,KAAKkgP,YAEhBnX,EAAK7iO,UAAU+5O,sBAAwB,WAKnC,IAJA,IAAI5vL,EAAOrwD,KAAKoiJ,YACZ+9F,EAAc,EACd3W,EAAe,EACf5lF,EAAgB5jJ,KAAKyhL,mBAChB16K,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IACzBspD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKmqI,aAC7B16I,EAAI68I,GACJvzF,EAAK/9C,OAAO6tO,EAAa,EAAG9vL,EAAK/9C,OAAOvL,EAAG,GAAG,IAC9Co5O,MAGA9vL,EAAK/9C,OAAOsxI,EAAgB4lF,EAAc,EAAGn5K,EAAK/9C,OAAOvL,EAAG,GAAG,IAC/DyiO,OAKhBT,EAAK7iO,UAAU4xO,iBAAmB,SAAUznL,GACxC,IAAK,IAAItpD,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IACzBspD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgmB,QACjCt9B,KAAK83O,iBAAiBznL,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgmB,SAElD+yB,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKmqI,YACtCzhJ,KAAK2jJ,wBAQjBolF,EAAK7iO,UAAUk6O,qBAAuB,SAAUt2O,GAC5C,IAAIumD,EAAoB,SAAbvmD,EAAsB9J,KAAKqgP,uBAAsC,UAAbv2O,EAAuB9J,KAAKsgP,wBAA0B,GACjHl1O,EAAQ,EAMZ,OALAilD,EAAKj3B,QAAO,SAAU24B,GACdA,EAAIz/B,UACJlnB,GAASrG,SAASgtD,EAAI3mD,MAAMkM,WAAY,QAGzClM,GAQX29N,EAAK7iO,UAAU0pD,WAAa,SAAU2wL,GAClC,IAAIpqJ,EAAUn2F,KACVwgP,EAASxgP,KAAKgpO,cAAcv8N,KAAI,SAAUgkG,GAAK,OAAOA,EAAIta,EAAQn9C,cAAc1b,QAAQ52B,UAAW0yB,QAAO,SAAUq3E,GAAK,OAAOA,GAAK,KACrIgwI,EAAOD,EAAO95O,SACb1G,KAAKyoG,4BAA8B,eAAkBzoG,KAAKoiJ,cAA4C,IAA5BpiJ,KAAKoiJ,YAAY17I,QAAgB65O,KAC5GvgP,KAAKoiJ,YAAc,GACnBpiJ,KAAK23O,kBAAkB33O,KAAKs9B,UAEhC,IAAIA,EAAmB,IAATmjN,EAAazgP,KAAKoiJ,YAC5BpiJ,KAAKoiJ,YAAY9uI,MAAMktO,EAAO,GAAIA,EAAOC,EAAO,GAAK,GACrD31O,EAAO,GACPymB,EAAQ,GACRmvN,EAAU,GACVC,EAAoB3gP,KAAKyoG,4BAA8BzoG,KAAK8pO,yBAAoC,IAAT2W,EACvFE,IACA3gP,KAAKkqO,mBAAqB,GAC1BlqO,KAAKiqO,kBAAoB,IAE7B,IAAK,IAAIljO,EAAI,EAAGA,EAAIu2B,EAAQ52B,OAAQK,IACmB,SAA/Cu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,QAAqB15F,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKg0F,UAC7FxgG,EAAKmH,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,MACrCqpO,GACA3gP,KAAKiqO,kBAAkBh4N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,OAGX,UAA/CgmB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,QACzCzlG,EAAMtf,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,MACtCqpO,GACA3gP,KAAKkqO,mBAAmBj4N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,OAIhEopO,EAAQzuO,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,MAWpD,OARItX,KAAKyoG,4BAA8BzoG,KAAK0oG,iBACpC1oG,KAAKiqO,kBAAkBvjO,SACvBoE,EAAO9K,KAAKiqO,mBAEZjqO,KAAKkqO,mBAAmBxjO,SACxB6qB,EAAQvxB,KAAKkqO,qBAGdp/N,EAAKw5B,OAAOo8M,GAASp8M,OAAO/S,IAQvCw3M,EAAK7iO,UAAUgvN,mCAAqC,SAAU0rB,EAAe7uL,GACzE,IAAK,IAAIhrD,EAAI,EAAGA,EAAIgrD,EAAIrrD,OAAQK,IAAK,CACjC,IAAI85O,EAAmB9uL,EAAIhtD,SAASgC,EAAEuQ,WAAY,KAClD,GAAIupO,EAAiB1oM,QAAUyoM,GAAiBC,EAAiBzwM,aAAewwM,EAAe,CAC3F5gP,KAAK8gP,cAAgBD,EACrB,MAEKA,EAAiBvjN,SACtBt9B,KAAKk1N,mCAAmC0rB,EAAeC,EAAiBvjN,SAGhF,OAAOt9B,KAAK8gP,eAMhB/X,EAAK7iO,UAAU6tK,uBAAyB,WACpC,OAAO/zK,KAAKgpO,eAMhBD,EAAK7iO,UAAUupD,SAAW,WACtB,OAAOzvD,KAAKo6B,OAMhB2uM,EAAK7iO,UAAUmwM,mBAAqB,WAChC,OAAOr2M,KAAK4tO,eAOhB7E,EAAK7iO,UAAU66O,uBAAyB,SAAUrpB,GAC9C13N,KAAKgpO,cAAgBtR,GAOzBqR,EAAK7iO,UAAUigJ,kBAAoB,WAC/B,OAAOnmJ,KAAKghP,4BAOhBjY,EAAK7iO,UAAU2iG,iBAAmB,WAC9B,OAAO7oG,KAAKs4O,aAAariB,YAS7B8S,EAAK7iO,UAAU+6O,qBAAuB,SAAU93O,GAC5CnJ,KAAKs4O,aAAaviB,SAAS5sN,IAO/B4/N,EAAK7iO,UAAUymG,gBAAkB,WAC7B,OAAO3sG,KAAKw5K,cAAcg9C,YAS9BuS,EAAK7iO,UAAUg7O,oBAAsB,SAAU/3O,GAC3CnJ,KAAKw5K,cAAc28C,SAAShtN,IAOhC4/N,EAAK7iO,UAAUsiG,WAAa,WACxB,OAAOxoG,KAAKw5K,cAAcy8C,YAS9B8S,EAAK7iO,UAAUi7O,eAAiB,SAAUh4O,GACtCnJ,KAAKw5K,cAAcu8C,SAAS5sN,IAOhC4/N,EAAK7iO,UAAUogJ,eAAiB,WAC5B,OAAOtmJ,KAAKs4O,aAAa9hB,YAS7BuS,EAAK7iO,UAAUk7O,mBAAqB,SAAUj4O,GAC1CnJ,KAAKs4O,aAAaniB,SAAShtN,IAO/B4/N,EAAK7iO,UAAU0jG,iBAAmB,WAE9B,OADA5pG,KAAKqhP,cAAgBrhP,KAAKmJ,QAAQ0U,uBAAuB,QAAqB,GACvE7d,KAAKqhP,eAOhBtY,EAAK7iO,UAAUo7O,sBAAwB,WAEnC,OADAthP,KAAKqhP,cAAgBrhP,KAAKmJ,QAAQ0U,uBAAuB,QAAqB,GACvE7d,KAAKqhP,cAAczyM,WAAWA,YAOzCm6L,EAAK7iO,UAAUq7O,SAAW,WACtB,OAAOvhP,KAAKwhP,WAShBzY,EAAK7iO,UAAUu7O,aAAe,SAAUt4O,GACpCnJ,KAAKwhP,UAAYr4O,GASrB4/N,EAAK7iO,UAAUwgO,cAAgB,SAAUr0N,GACrC,OAAIrS,KAAK84C,sBAAwB94C,KAAKg5C,cAAcqY,kBACzCrxD,KAAK89N,eAAe4I,cAAcr0N,GAGlCrS,KAAKw5K,cAAcktD,cAAcr0N,IAWhD02N,EAAK7iO,UAAUw7O,qBAAuB,SAAUrvO,GAC5C,OAAOrS,KAAKw5K,cAAcktD,cAAcr0N,IAS5C02N,EAAK7iO,UAAUy7O,oBAAsB,SAAUtvO,GAC3C,OAAOrS,KAAKw5K,cAAcktD,cAAcr0N,IAO5C02N,EAAK7iO,UAAU2wN,QAAU,WACrB,OAAO72N,KAAKw5K,cAAcooE,kBAS9B7Y,EAAK7iO,UAAU27O,yBAA2B,SAAUxvO,GAChD,OAAOrS,KAAKw5K,cAAcktD,cAAcr0N,IAS5C02N,EAAK7iO,UAAU47O,WAAa,SAAUx7O,GAClC,IAAIu2C,EAAMv2C,EACNklB,EAAO,CAAEllB,OAAQA,GACrB,IAAK,eAAkBA,IAAW,eAAkB,gBAAau2C,EAAK,wBAC/D,eAAkB,gBAAaA,EAAK,wBAAyB,CAChE,IAAI6yD,EAAO,eAAQ7yD,EAAK,IAAM,QAC9B,IAAK6yD,EAAM,CACP,IAAIkvE,EAAQ,eAAQ/hI,EAAK,IAAM,QAC/B,IAAK,eAAkB+hI,KAAWA,EAAM5zK,UAAUkB,SAAS,cAAe,CACtE,IAAI6vK,EAAS/7K,KAAKyoJ,oBAAoBm2B,EAAMtuK,aAAa,aACrDmwB,EAAW17B,SAAS65K,EAAMtuK,aAAa,QAAwB,IACnEkb,EAAO,CAAEgR,IAAKoiJ,EAAO91B,QAASizB,EAAOxjJ,KAAMkI,SAAUA,GAEzD,OAAOjV,EAEX,IAAIs7M,EAAY/hO,SAAS2qG,EAAKp/F,aAAa,QAAwB,IAC/DyxO,EAAQ,eAAQryI,EAAM,IAAM,QAChC,IAAK,eAAkBA,KAAUvuF,MAAM2lN,KAAe,eAAkBib,GAAQ,CACxEthN,EAAW17B,SAASg9O,EAAMzxO,aAAa,QAAwB,IAAnE,IACIktB,EAAOx9B,KAAKw5K,cAAcq9C,UAC1BxkN,EAAQy0N,EAAY9mO,KAAKivG,iBACzBi2G,EAAa1nL,EAAKpE,QAAO,SAAUzyB,GAAK,OAAOA,EAAE4zC,MAAQwnM,EAAMzxO,aAAa,eAC5Ew4I,EAAU,GACVvsH,OAAS,EACT72B,OAAOoV,KAAKoqM,GAAYx+M,SACxBoiJ,EAAUo8D,EAAW,GAAG3sL,KACxBgE,EAAS2oL,EAAW,GAAG11G,MAAMzqG,SAASsN,EAAMiF,WAAY,KAAKilB,QAEjE/Q,EAAO,CAAEkkF,KAAMA,EAAMo3H,UAAWA,EAAWtqM,IAAKulN,EAAOthN,SAAUA,EAAUqoH,QAASA,EAASvsH,OAAQA,EAAQj2B,OAAQA,IAG7H,OAAOklB,GAQXu9M,EAAK7iO,UAAU87O,eAAiB,WAC5B,OAAOhiP,KAAKw5K,cAAcooE,kBAQ9B7Y,EAAK7iO,UAAU+7O,mBAAqB,WAChC,OAAOjiP,KAAKw5K,cAAcooE,kBAO9B7Y,EAAK7iO,UAAUghO,YAAc,WACzB,OAAOlnO,KAAKkiP,kBAOhBnZ,EAAK7iO,UAAUg8O,eAAiB,SAAUC,GACtC,GAAI,eAAkBniP,KAAK2sG,kBAAkB76F,cAAc,SACvD,MAAO,GAEX,IAAImsF,EAAQj+F,KAAK2sG,kBAAkB76F,cAAc,QAC7C0rB,EAAO,GAAGlqB,MAAMjK,KAAK40F,EAAM53E,UAC/B,GAAIrmB,KAAK4oG,WAAY,CACjB,IAAIw5I,EAAWpiP,KAAKsmJ,iBAAiBx0I,cAAc,QAC/CuwO,EAAa,GAAG/uO,MAAMjK,KAAK+4O,EAAS/7N,UACxCmX,EAAOx9B,KAAKsiP,eAAeD,EAAY7kN,GAE3C,IAAI+kN,EAAWviP,KAAKwiP,iBAAiBhlN,EAAM2kN,GAC3C,OAAOI,GAQXxZ,EAAK7iO,UAAUo8O,eAAiB,SAAUG,EAAOC,GAC7C,IAAK,IAAI37O,EAAI,EAAG2hB,EAAMg6N,EAAMh8O,OAAQK,EAAI2hB,EAAK3hB,IACzC07O,EAAMxwO,KAAKywO,EAAM39O,SAASgC,EAAEuQ,WAAY,MAE5C,OAAOmrO,GAEX1Z,EAAK7iO,UAAUs8O,iBAAmB,SAAUhlN,EAAMmlN,GAE9C,IADA,IAAIC,EAAQ,GACH77O,EAAI,EAAG2hB,EAAM8U,EAAK92B,OAAQK,EAAI2hB,EAAK3hB,KACpCy2B,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAUkB,SAAS,SAC/CsxB,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAUkB,SAAS,iBAAkBy2O,IACvE3iP,KAAK6iP,yBACLD,EAAM79O,SAASy4B,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKhH,aAAa,iBAAkB,KAAOktB,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAGlHsrO,EAAM3wO,KAAKurB,EAAKz4B,SAASgC,EAAEuQ,WAAY,OAInD,OAAOsrO,GAQX7Z,EAAK7iO,UAAU48O,mBAAqB,WAChC,OAAO9iP,KAAK+iP,yBAQhBha,EAAK7iO,UAAU68O,sBAAwB,SAAUZ,GAC7C,OAAOniP,KAAKkiP,eAAeC,IAQ/BpZ,EAAK7iO,UAAU88O,kBAAoB,WAC/B,OAAOhjP,KAAKijP,wBAQhBla,EAAK7iO,UAAU+8O,qBAAuB,SAAUd,GAC5C,OAAOniP,KAAKkiP,eAAeC,IAQ/BpZ,EAAK7iO,UAAUg9O,uBAAyB,WACpC,OAAOljP,KAAKmjP,6BAQhBpa,EAAK7iO,UAAUi9O,0BAA4B,SAAUhB,GACjD,OAAOniP,KAAKkiP,eAAeC,IAY/BpZ,EAAK7iO,UAAUk9O,aAAe,SAAUv/O,EAAKs0C,EAAOh6B,GAChD,IAAIqxF,EAAQ,QACRs5C,EAAU,OACVu6F,EAAS,QACTC,EAAS,MACTC,EAASvjP,KAAKs0D,0BAA0B,GACxCo7C,EAAO,IAAI,OAAa1vG,KAAMA,KAAK21C,gBACnC6tM,EAAWxjP,KAAK6kJ,sBAAsB1sG,GACtC4Z,EAAM/xD,KAAKuxD,iBAAiBpZ,GAC5BsrM,EAAazjP,KAAKw5K,cAAcq9C,UAChC6sB,EAAcD,EAAWrqN,QAAO,SAAUzyB,GAC1C,OAAO,eAAS48O,EAAQ58O,EAAE4xB,QAAU10B,KACrC,GACC6/B,EAAKggN,EAAc1jP,KAAKmJ,QAAQ2I,cAAc,aAAe4xO,EAAY,GAAKJ,GAAU,KAAO,KACnG,IAAK,eAAkB5/M,GAAvB,CACyB,kBAAVvlB,IACPA,EAAQne,KAAK8Q,SAASqN,IAE1B,gBAASg6B,EAAOh6B,EAAOulO,EAAY,GAAK56F,IAEpC9oJ,KAAKouG,iBACLtjG,EAEJ,IAAIgjM,EAAK9tM,KAAK84C,qBAAuBpV,EAAGrd,SAASthB,SAASy+O,EAASlsO,WAAY,KACzEtX,KAAK2mO,iBAAiB+c,EAAY,GAAKL,GAASG,GACtD,IAAK,eAAkB11C,GAAK,CACxB,IAAI61C,EAAM,EACN3jP,KAAKg5C,cAAc1b,QAAQ52B,SAC3B88O,GAAsBxjP,KAAKg5C,cAAc1b,QAAQ52B,SAEjD1G,KAAKmuG,WAAanuG,KAAKkuG,iBACvBs1I,IAEAxjP,KAAKouG,iBACLo1I,IAEJ,IAAII,EAAOF,EAAY,GAAKl0I,GAAOg0I,EAAWG,GAC9Cj0I,EAAKm0I,UAAU/1C,EAAI81C,EAAMF,EAAY,GAAK56F,GAAU,CAAEz2I,MAAOqxO,EAAY,GAAKL,KAC1ErjP,KAAK+N,UACL+/L,EAAK9tM,KAAK84C,qBAAuBpV,EAAGrd,SAASthB,SAASy+O,EAASlsO,WAAY,KACrEtX,KAAK2mO,iBAAiB+c,EAAY,GAAKL,GAASG,IAEtDxjP,KAAKowD,WAAW1pD,OAAS,IACzB1G,KAAKsf,OAAO,QAA8B,IACtCtf,KAAKg5C,cAAc1b,QAAQ52B,OAAS,GACpC1G,KAAKsf,OAAO,QAAwB,KAIvC,eAAkBokO,IAAiB,eAAkBA,EAAY,cAClEA,EAAY,WAAW,GAAKvrM,GAASh6B,GAGzCne,KAAK6N,QAAQ,QAAsB,CAC/B6hG,KAAMo+F,EAAIvxK,OAAQw1B,EAAKx5B,KAAMmrN,EAAY,GAAK56F,KAE9C9oJ,KAAK+N,SAA2C,MAAhC+/L,EAAGx9L,aAAa,aAAuBw9L,EAAG9iM,UAAUkB,SAAS,cAC7E4hM,EAAGtoL,WAcnBujN,EAAK7iO,UAAUqgG,gCAAkC,SAAUu9I,EAAWn8F,GAClE,IAAIxxD,EAAUn2F,KACVA,KAAK+N,SAEL/N,KAAKiO,cAAc,CAAC,uBAAmBkD,GAAW,WAC9C,IAAI4yO,KAAc5tJ,EAAQgY,YAAahY,EAAQhtF,QAAQgf,iBAAiB,gBAAgBzhB,QACpF82B,EAAOumN,EAAc5tJ,EAAQwW,kBAAkBxkF,iBAAiB,UAChEguE,EAAQ+wI,cACZ/wI,EAAQ6tJ,uBAAuBxmN,EAAMumN,GACjCp8F,GACAxxD,EAAQwxD,sBAYxBohF,EAAK7iO,UAAU89O,uBAAyB,SAAUxmN,EAAMumN,EAAaz4I,GAMjE,IALA,IAAIkE,EAAQ,QACR6zI,EAAS,QACTxzI,EAAS7vG,KAAKivG,iBACdg1I,EAAc,EACdC,GAAa,EACRzlN,EAAI,EAAGA,EAAIjB,EAAK92B,OAAQ+3B,IAAK,CAClC,IAAI0lN,EAAUnkP,KAAKyoJ,oBAAoBjrH,EAAKz4B,SAAS05B,EAAEnnB,WAAY,KAAKhH,aAAa,aACrF,GAAIyzO,IAAgBI,GAAW,gBAAa3mN,EAAKz4B,SAAS05B,EAAEnnB,WAAY,KAAM,eAAgB,CAC1F,IAAIu7J,EAAU,gBAAar1I,EAAKz4B,SAAS05B,EAAEnnB,WAAY,KAAM,eAAe2yH,cAAc,GAC1Fk6G,EAAUtxE,EAAQpqB,oBAAoBjrH,EAAKz4B,SAAS05B,EAAEnnB,WAAY,KAAKhH,aAAa,aACpF2zO,EAAcpxE,EAAQ5jE,iBACtBi1I,GAAa,EAEjB,GAAIC,GAAWA,EAAQhgC,YAAc,eAAkBggC,EAAQ9xO,SAC1DmrB,EAAKz4B,SAAS05B,EAAEnnB,WAAY,KAAKtM,UAAUkB,SAAS,eACrD,IAAK,IAAInF,EAAI,EAAGA,EAAIo9O,EAAQ,GAAK30I,GAAO9oG,OAAQK,IAAK,CACjD,IAAI2oG,EAAOy0I,EAAQ,GAAK30I,GAAOzqG,SAASgC,EAAEuQ,WAAY,KACtD,GAAIo4F,EAAKo1G,WAAY,CACjB,IAAIJ,EAAe,IAAI,OAAa1kN,KAAMA,KAAK21C,gBAC3Cm4J,EAAKi2C,EAAcvmN,EAAKz4B,SAAS05B,EAAEnnB,WAAY,KAC9C+O,SAASqpF,EAAKr9F,OAAS6xO,EAAaD,EAAcp0I,IAAW7vG,KAAK2mO,iBAAiBloM,EAAG6sE,EAAWoE,EAAKr9F,MAAQtL,EAAI8oG,GACvH60G,EAAam/B,UAAU/1C,EAAIp+F,EAAMy0I,EAAQ5rN,KAAM,CAAElmB,MAAO8xO,EAAQ,GAAKd,MAIjFa,GAAa,IAOrBnb,EAAK7iO,UAAUk+O,kCAAoC,WAG/C,IAFA,IAAIL,KAAc/jP,KAAKmuG,YAAanuG,KAAKmJ,QAAQgf,iBAAiB,gBAAgBzhB,QAC9E82B,EAAOx9B,KAAK2sG,kBAAkBxkF,iBAAiB,yCAC1CphB,EAAI,EAAGA,EAAIy2B,EAAK92B,OAAQK,IAAK,CAElC,IAAI8rK,EAAU7yK,KACVmkP,EAAUnkP,KAAKyoJ,oBAAoBjrH,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKhH,aAAa,aAKrF,GAJIyzO,IAAgBI,GAAW,gBAAa3mN,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAM,iBAC1Eu7J,EAAU,gBAAar1I,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAM,eAAe2yH,cAAc,GACtFk6G,EAAUtxE,EAAQpqB,oBAAoBjrH,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKhH,aAAa,cAEpF6zO,EAAS,CACT,IAAI30I,EAAQ20I,EAAQ30I,MAAMp2E,QAAO,SAAUs2E,GAAQ,OAAOA,EAAKC,cAC3DnkF,EAAO,CAAEgkF,MAAOA,EAAOj3E,KAAM4rN,EAAQ5rN,KAAM8rN,QAASF,EAAQ5pM,KAChEs4H,EAAQvzJ,OAAO,QAA6BkM,MASxDu9M,EAAK7iO,UAAUsgG,gCAAkC,SAAUs9I,GACvD,GAAI9jP,KAAK+N,QA6BL,IA5BA,IAAIyhG,EAAQ,QACR20I,EAAUnkP,KAAKs4O,aAAa96M,KAC5BspM,EAAY9mO,KAAK+4N,yBAAyB+qB,GAC1C5sM,EAAU,SAAUzY,GACpB,IAAIixE,EAAOy0I,EAAQp/O,SAAS05B,EAAEnnB,WAAY,KAAK,GAAKk4F,GAAOzqG,SAAS+hO,EAAUxvN,WAAY,KAC1F,GAAIo4F,GAAQA,EAAKnzE,OAAOge,MAAQupM,EAAW,CACvC,IAAIQ,EAAqB,IAAI,EAAmBltM,EAAQA,EAAOzB,gBAC3Dm4J,EAAK,gBAAa12J,EAAOjuC,QAAQgf,iBAAiB,iBAAmB27N,EAAY,KAAK,GAAI,kBAC9FQ,EAAmBtpO,QAAQ00F,EAAMo+F,GACjC,IAAIz9I,EAAOjZ,EAAOya,aAAav0B,QAC3BkD,EAAc6vB,EAAKw4F,WAAU,SAAU92F,GAAO,OAAOA,EAAI5Z,QAAUu3D,EAAKnzE,OAAO4b,SACnF,IAAqB,IAAjB3X,EAAoB,CACpB,IAAI4O,EAASgI,EAAOuuG,uBAAuBj2C,EAAKnzE,OAAO4b,OACvDf,EAAOk+K,YAAY9vF,QAAQp2F,EAASihB,EAAKtrD,SAASy7B,EAAYlpB,WAAY,KAAc,UAAEgQ,eACtF+oC,EAAK3pD,OAAS,GACd0oC,EAAOt9B,cAAc,oBAAoBmZ,aAAamsB,EAAO/sC,cAAc,OAAQ,CAAEC,UAAW,eAAgBoG,WAAY8vB,EAAc,GAAGlpB,aAAe83B,EAAOt9B,cAAc,kBAErL,IAAIyjM,EAAgBnmK,EAAOt9B,cAAc,oBACoB,cAAzDu+C,EAAKtrD,SAASy7B,EAAYlpB,WAAY,KAAK6S,UAC3C,eAAUorL,EAAe,CAAC,cAAe,oBAAqB,IAG9D,eAAUA,EAAe,CAAC,eAAgB,qBAAsB,OAK5En+J,EAASp3C,KACJy+B,EAAI,EAAGA,EAAI0lN,EAAQz9O,OAAQ+3B,IAChCyY,EAAQzY,IAapBsqM,EAAK7iO,UAAUm5O,WAAa,SAAUx7O,EAAKilJ,GACvC,IAAIw6F,EAAS,MACTG,EAAazjP,KAAKw5K,cAAcq9C,UAChC0sB,EAASvjP,KAAKs0D,0BAA0B,GACxCt0D,KAAKg5C,cAAc1b,QAAQ52B,OAAS,GAAK1G,KAAKowD,WAAW1pD,OAAS,IAClE+8O,EAAaA,EAAWrqN,QAAO,SAAUoD,GAAO,OAAOA,EAAI2nL,cAE/D,IAAIu/B,EAAcD,EAAWrqN,QAAO,SAAUzyB,GAC1C,OAAO,eAAS48O,EAAQ58O,EAAE4xB,QAAU10B,KACrC,GACC0gP,EAAeb,EAAc,GAAGpwO,MAAMjK,KAAKrJ,KAAKmJ,QAAQgf,iBAAiB,aAAeu7N,EAAY,GAAKJ,GAAU,WAAQnyO,EAC/H,IAAK,eAAkBuyO,IAAgBa,EAAa79O,OAApD,CAEI,GADAg9O,EAAYhvL,QAAUo0F,EAClB9oJ,KAAK4oG,WAAY,CACjB,IAAI47I,EAASxkP,KAAKmlN,gBAAgBu+B,EAAYrxO,OAC9CrS,KAAKykP,iBAAiBD,EAAQ17F,QAG9B9oJ,KAAKykP,iBAAiBf,EAAa56F,GAEnC9oJ,KAAKowD,WAAW1pD,OAAS,IACzB1G,KAAKsf,OAAO,QAA8B,IACtCtf,KAAKg5C,cAAc1b,QAAQ52B,OAAS,GACpC1G,KAAKsf,OAAO,QAAwB,OAQpDypN,EAAK7iO,UAAUu+O,iBAAmB,SAAUC,EAAK57F,GAC7C,IAAI0oD,EAAc,IAAI,OAAYxxM,KAAK21C,eAAgB,KAAM31C,MAC7D0kP,EAAIhwL,QAAUo0F,EACd,gBAAmB47F,EAAK1kP,KAAKg3C,uBAAwB0tM,EAAIhwL,SACzD88I,EAAYx2L,QAAQ0pO,EAAK1kP,KAAK4vD,cAAc,IAUhDm5K,EAAK7iO,UAAUygO,iBAAmB,SAAUlmM,EAAUD,GAClD,IAAIuxB,EAAM/xD,KAAK8kJ,iBAAiBtkH,GAChC,OAAO,eAAwBxgC,KAAM+xD,EAAKtxB,EAAUD,IAWxDuoM,EAAK7iO,UAAUy+O,wBAA0B,SAAUlkN,EAAUD,GACzD,OAAOxgC,KAAK2mO,iBAAiBlmM,EAAUD,IAU3CuoM,EAAK7iO,UAAU0+O,4BAA8B,SAAUnkN,EAAUD,GAC7D,OAAOxgC,KAAK2mO,iBAAiBlmM,EAAUD,IAS3CuoM,EAAK7iO,UAAUuhO,uBAAyB,SAAUp1N,GAC9C,OAAOrS,KAAKsmJ,iBAAiBzoI,uBAAuB,gBAAgB9Y,SAASsN,EAAMiF,WAAY,MASnGyxN,EAAK7iO,UAAU2+O,8BAAgC,SAAUxyO,GACrD,OAAOrS,KAAKynO,uBAAuBp1N,IASvC02N,EAAK7iO,UAAU4+O,kCAAoC,SAAUzyO,GACzD,OAAOrS,KAAKynO,uBAAuBp1N,IASvC02N,EAAK7iO,UAAU6+O,iCAAmC,SAAU1yO,GACxD,OAAOrS,KAAKynO,uBAAuBp1N,IASvC02N,EAAK7iO,UAAUuiJ,oBAAsB,SAAUluG,GAC3C,IAAI/c,EAAOx9B,KAAKw5K,cAAcq9C,UAC1Br6L,EAAMx8B,KAAKglP,UAAUxnN,EAAM+c,GAC/B,OAAI,eAAkB/d,IAAQx8B,KAAK84C,sBAAwB94C,KAAKg5C,cAAc1b,QAAQ52B,OAAS,GAC3F81B,EAAMx8B,KAAKglP,UAAUhlP,KAAKkrO,MAAO3wL,GAC1B/d,GAEJA,GAEXusM,EAAK7iO,UAAU8+O,UAAY,SAAUxnN,EAAM+c,GACvC,GAAI/c,EACA,IAAK,IAAI/pB,EAAK,EAAGi/G,EAASl1F,EAAM/pB,EAAKi/G,EAAOhsH,OAAQ+M,IAAM,CACtD,IAAI+oB,EAAMk2F,EAAOj/G,GACjB,GAAI+oB,EAAI+d,MAAQA,EACZ,OAAO/d,EAInB,OAAO,MAMXusM,EAAK7iO,UAAUi/M,cAAgB,WAC3B,OAAOnlN,KAAKw5K,cAAcq9C,WAO9BkS,EAAK7iO,UAAU++O,qBAAuB,WAClC,OAAOjlP,KAAKw5K,cAAcq9C,WAO9BkS,EAAK7iO,UAAUg/O,yBAA2B,WACtC,OAAOllP,KAAKw5K,cAAcq9C,WAS9BkS,EAAK7iO,UAAUy/I,uBAAyB,SAAUxtG,GAC9C,IAAI5b,EAASv8B,KAAKuxD,iBAAiBpZ,GACnC,OAAO5b,EAASv8B,KAAKioM,qBAAqB1rK,EAAOge,UAAOppC,GAS5D43N,EAAK7iO,UAAU+hM,qBAAuB,SAAU1tJ,GAC5C,IAAIpxC,EAAUnJ,KAAK6oG,mBAAmB/2F,cAAc,iBAAmByoC,EAAM,KAC7E,OAAOpxC,EAAUA,EAAQie,mBAAgBjW,GAO7C43N,EAAK7iO,UAAU4+I,iBAAmB,SAAUzyI,GACxC,IAAIkqB,EAKJ,OAJAv8B,KAAK4vD,aAAaiD,MAAK,SAAUd,EAAKhrD,GAElC,OADAw1B,EAASw1B,EACFhrD,IAAMsL,KAEVkqB,GASXwsM,EAAK7iO,UAAUqrD,iBAAmB,SAAUpZ,GACxC,OAAO,gBAAqBn4C,KAAK4vD,cAAc,SAAUxzB,GACrD,GAAIA,EAAK+b,QAAUA,EACf,OAAO/b,KAGZ,IASP2sM,EAAK7iO,UAAU2+I,sBAAwB,SAAU1sG,GAE7C,IADA,IAAIkY,EAAOrwD,KAAK4vD,aACP7oD,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IAC7B,GAAIspD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,QAAUA,EAC3C,OAAOpxC,EAGf,OAAQ,GASZgiO,EAAK7iO,UAAUytD,eAAiB,SAAUpZ,GACtC,OAAO,gBAAqBv6C,KAAK4vD,aAAatrB,OAAOtkC,KAAKmkJ,kBAAkBnkJ,KAAKs9B,WAAW,SAAUlB,GAClG,GAAIA,EAAKme,MAAQA,EACb,OAAOne,KAGZ,IAQP2sM,EAAK7iO,UAAUi+I,kBAAoB,SAAU7mH,EAASwjN,QAC5B,IAAlBA,IAA4BA,EAAgB,IAChD,IAAK,IAAIrtO,EAAK,EAAGggD,EAAYn2B,EAAS7pB,EAAKggD,EAAU/sD,OAAQ+M,IAAM,CAC/D,IAAI8oB,EAASk3B,EAAUhgD,GACnB8oB,EAAOe,UACPwjN,EAAc7uO,KAAKsqB,GACnBv8B,KAAKmkJ,kBAAkB5nH,EAAOe,QAASwjN,IAG/C,OAAOA,GASX/X,EAAK7iO,UAAUyyN,oBAAsB,SAAUp+K,GAC3C,IAAIloC,EAAQ,gBAAqBrS,KAAK4vD,cAAc,SAAUxzB,EAAM/pB,GAChE,GAAI+pB,EAAKme,MAAQA,EACb,OAAOloC,KAGZ,GACH,OAAQ,eAAkBA,IAAkB,EAATA,GASvC02N,EAAK7iO,UAAUi/O,oBAAsB,SAAUhtM,GAC3C,OAAO,gBAAqBn4C,KAAK4vD,cAAc,SAAUxzB,GACrD,GAAIA,EAAK+b,QAAUA,EACf,OAAO/b,EAAKme,OAGjB,IASPwuL,EAAK7iO,UAAU6yN,yBAA2B,SAAUx+K,GAChD,IAAIloC,EAAQrS,KAAK24N,oBAAoBp+K,GACrC,OAAOloC,EAAQrS,KAAKivG,kBAQxB85H,EAAK7iO,UAAU+oG,eAAiB,WAC5B,IAAI58F,EAAQ,EAcZ,OAbIrS,KAAK+4C,gBACL1mC,GAASrS,KAAKg5C,cAAc1b,QAAQ52B,QAEpC1G,KAAK8nN,YACLz1M,IAEArS,KAAKouG,iBAAmB,eAAkBpuG,KAAK0/N,gBAAgBC,WAC/DttN,IAMGA,GAOX02N,EAAK7iO,UAAUk/O,oBAAsB,WAGjC,IAFA,IACI7oN,EADA8oN,EAAc,GAETt+O,EAAI,EAAG2hB,EAAM1oB,KAAK4vD,aAAalpD,OAAQK,EAAI2hB,EAAK3hB,IACrDw1B,EAASv8B,KAAK4vD,aAAa7qD,SAASgC,EAAEuQ,WAAY,KAC9CilB,EAAOjK,SACP+yN,EAAYpzO,KAAKsqB,EAAO4b,OAGhC,OAAOktM,GAQXtc,EAAK7iO,UAAUo/O,eAAiB,WAC5B,OAAOtlP,KAAK49O,eAQhB7U,EAAK7iO,UAAU45N,uBAAyB,WACpC,OAAO9/N,KAAK69O,uBAQhB9U,EAAK7iO,UAAUq/O,kBAAoB,WAC/B,OAAOvlP,KAAK89O,kBAQhB/U,EAAK7iO,UAAUy+F,gBAAkB,WAC7B,OAAO3kG,KAAK4kG,gBAQhBmkI,EAAK7iO,UAAUs/O,sBAAwB,WACnC,OAAOxlP,KAAKylP,sBAQhB1c,EAAK7iO,UAAUw/O,sBAAwB,WACnC,OAAO1lP,KAAK2lP,sBAOhB5c,EAAK7iO,UAAUouD,wBAA0B,WAErC,IADA,IAAIx5C,EAAO,GACFsjB,EAAI,EAAGA,EAAIp+B,KAAKoiJ,YAAY17I,OAAQ03B,IACrCp+B,KAAKoiJ,YAAYr9I,SAASq5B,EAAE9mB,WAAY,KAAKu4C,cAC7C/0C,EAAK7I,KAAKjS,KAAKoiJ,YAAYr9I,SAASq5B,EAAE9mB,WAAY,KAAK6gC,OAG/D,OAAOr9B,GAOXiuN,EAAK7iO,UAAU8U,QAAU,WAChBhb,KAAK6sC,cACN7sC,KAAKoxD,iBAAkB,EACvBpxD,KAAKs4O,aAAatf,YAClBh5N,KAAKk4O,sBACLl4O,KAAK41M,aAAa56L,YAQ1B+tN,EAAK7iO,UAAUovM,cAAgB,WAC3Bt1M,KAAKs4O,aAAatf,aAOtB+P,EAAK7iO,UAAU0/O,gBAAkB,WAC7B,OAAO5lP,KAAKs8E,gBAAkBt8E,KAAKs8E,gBAAgBupK,gBAAkB,IAOzE9c,EAAK7iO,UAAUg+M,sBAAwB,WACnC,OAAOlkN,KAAKs8E,gBAAkBt8E,KAAKs8E,gBAAgBwpK,mBAAqB,IAO5E/c,EAAK7iO,UAAU4/N,0BAA4B,WACvC,OAAO9lO,KAAKs8E,gBAAkBt8E,KAAKs8E,gBAAgBupJ,uBAAyB,IAQhFkD,EAAK7iO,UAAUg/N,mBAAqB,WAChC,OAAOllO,KAAKs8E,gBAAkBt8E,KAAKs8E,gBAAgB4oJ,qBAAuB,IAQ9E6D,EAAK7iO,UAAU6/O,sBAAwB,WACnC,IAAI5vJ,EAAUn2F,KACVu6C,EAAM,GAIV,OAHIv6C,KAAKs8E,iBACLt8E,KAAKs8E,gBAAgB0pK,uBAAuB5sN,QAAO,SAAUryB,GAAK,OAAOwzC,EAAItoC,KAAKkkF,EAAQvmC,aAAa7qD,SAASgC,EAAEuQ,WAAY,KAAKijC,QAEhIA,GAOXwuL,EAAK7iO,UAAUkwC,cAAgB,WAC3B,OAAOp2C,KAAK41M,aAAar9K,MAU7BwwM,EAAK7iO,UAAU+/O,YAAc,SAAUnrO,EAAMwpN,GACzCA,EAASA,GAAkB,aAC3BtkO,KAAKi8O,UAAUpmO,KAAKiF,EAAMwpN,IAU9ByE,EAAK7iO,UAAUggP,YAAc,SAAUprO,EAAM0pN,GACzCA,EAASA,GAAkB,aAC3BxkO,KAAKi8O,UAAUrkO,KAAKkD,EAAM0pN,IAM9BuE,EAAK7iO,UAAUu7K,iBAAmB,WAC9B,OAAOzhL,KAAK4jJ,cAAgB5jJ,KAAKmmP,eAAenmP,KAAKs9B,QAAS,EAAG,IAMrEyrM,EAAK7iO,UAAU49I,2BAA6B,WACxC,OAAO9jJ,KAAKkpO,kBAAoBlpO,KAAKopO,YAMzCL,EAAK7iO,UAAU0/M,0BAA4B,WACvC,OAAO5lN,KAAKqpO,iBAAmBrpO,KAAKspO,WAMxCP,EAAK7iO,UAAUkgP,uBAAyB,WACpC,OAAOpmP,KAAKwpO,cAAgBxpO,KAAKypO,cAErCV,EAAK7iO,UAAUw1O,yBAA2B,WACtC,GAAI17O,KAAK0oG,iBAAmB1oG,KAAKyoG,2BAoD7B,IAnDA,IAAI6yI,EAAOt7O,KAAK4vD,aACZy2L,GAAc,EACdC,EAAY,EACZC,EAAe,EACfC,EAAc,EACdhiC,EAAU,SAAUz9M,GACpB,IAAIgrD,EAAMupL,EAAKv2O,SAASgC,EAAEuQ,WAAY,KAItC,GAHI,eAAkBy6C,EAAI3mD,SAA0B,SAAf2mD,EAAIilE,QAAoC,UAAfjlE,EAAIilE,QAAqC,UAAfjlE,EAAIilE,QAAsBjlE,EAAIu5C,YAClHv5C,EAAI3mD,MAAQ2D,KAAKgQ,IAAI,IAAKgzC,EAAI8iF,SAAWnoI,WAAWqlD,EAAI8iF,SAASv9H,YAAc,IAEjE,SAAdy6C,EAAI3mD,QAAoC,SAAf2mD,EAAIilE,QAAoC,UAAfjlE,EAAIilE,QAAqC,UAAfjlE,EAAIilE,QAAsBjlE,EAAIu5C,UAAW,CACrH,IAAIm7I,EAAW,EACf,GAAIJ,EAAa,CACb/K,EAAKliN,QAAO,SAAUi3B,GAClB,GAAIA,EAAK/9B,UACc,SAAf+9B,EAAKjlD,OACLk7O,IAEe,SAAfj2L,EAAKjlD,OAAkB,CACvB,IAAIA,EAAS,eAAkBilD,EAAKjlD,OAChC2D,KAAKgQ,IAAI,IAAKsxC,EAAKwkF,SAAWnoI,WAAW2jD,EAAKwkF,SAASv9H,YAAc,GAD5B5K,WAAW2jD,EAAKjlD,MAAMkM,YAEnEmvO,GAAYr7O,MAIxB,IAAIs7O,EAASC,EAAOC,yBAA4C,SAAjBD,EAAOv7O,MAAmBu7O,EAAOx9O,QAAQ6D,wBAAwB5B,MAC5GsB,WAAWi6O,EAAOv7O,MAAMkM,YAC5BivO,EAAiC,SAAlBI,EAAOx7O,OAAoBu7O,EAASD,EAAaC,EAASD,EAAY,iBACjFF,EAAe,IACfA,EAAe,GAEnBC,EAAc95O,YAAY65O,EAAeD,GAAWhvO,YACpDgkO,EAAKliN,QAAO,SAAU24B,GACdA,EAAIz/B,SACAy/B,EAAI8iF,UAAYnoI,WAAWqlD,EAAI8iF,SAASv9H,YAAckvO,IACtDD,GAA8B75O,WAAWqlD,EAAI8iF,SAASv9H,YACtDgvO,QAIZD,GAAc,EAEdt0L,EAAI8iF,UAAYnoI,WAAWqlD,EAAI8iF,SAASv9H,YAAckvO,EACtDz0L,EAAI3mD,MAAQsB,WAAWqlD,EAAI8iF,SAASv9H,YAGpCy6C,EAAI3mD,MAAQm7O,EAAeD,IAInCK,EAAS3mP,KACJ+G,EAAI,EAAGA,EAAIu0O,EAAK50O,OAAQK,IAC7By9M,EAAQz9M,IAIpBgiO,EAAK7iO,UAAU2gP,yBAA2B,WACtC7mP,KAAK8mP,iBAAiB9mP,KAAKs9B,SAC3Bt9B,KAAK07O,2BACL17O,KAAK0rO,uBAAwB,GAMjC3C,EAAK7iO,UAAUwmO,eAAiB,WAC5B1sO,KAAKqpO,gBAAkBrpO,KAAKkpO,iBAAmBlpO,KAAKwpO,aAAe,EACnExpO,KAAK4pO,kBAAoB5pO,KAAK+pO,mBAAqB/pO,KAAKgqO,eAAiB,EACzEhqO,KAAKiqO,kBAAoB,GACzBjqO,KAAKkqO,mBAAqB,GAC1BlqO,KAAKmqO,eAAiB,GACtBnqO,KAAKg3L,aAAe,GACpBh3L,KAAK8mP,iBAAiB9mP,KAAKs9B,SAC3Bt9B,KAAKspO,UAAYtpO,KAAKqpO,gBACtBrpO,KAAKopO,WAAappO,KAAKkpO,iBACvBlpO,KAAKypO,aAAezpO,KAAKwpO,aAIrBxpO,KAAKqpO,kBAAoBrpO,KAAKkpO,iBAC9BlpO,KAAKkgP,WAAa,OAEblgP,KAAKkpO,mBAAqBlpO,KAAKqpO,gBACpCrpO,KAAKkgP,WAAa,QAEblgP,KAAKqpO,iBAAmBrpO,KAAKkpO,iBAClClpO,KAAKkgP,WAAa,aAEblgP,KAAK4jJ,eAAiB5jJ,KAAK4oG,WAChC5oG,KAAKkgP,WAAa,OAGlBlgP,KAAKkgP,gBAAa/uO,GAO1B43N,EAAK7iO,UAAU2kG,0BAA4B,WACvC,OAAO7qG,KAAK4pO,mBAMhBb,EAAK7iO,UAAU6kG,2BAA6B,WACxC,OAAO/qG,KAAK+pO,oBAMhBhB,EAAK7iO,UAAU6gP,uBAAyB,WACpC,OAAO/mP,KAAKgqO,gBAMhBjB,EAAK7iO,UAAUo6O,sBAAwB,WACnC,OAAOtgP,KAAKkqO,oBAMhBnB,EAAK7iO,UAAUm6O,qBAAuB,WAClC,OAAOrgP,KAAKiqO,mBAMhBlB,EAAK7iO,UAAU8gP,kBAAoB,WAC/B,OAAOhnP,KAAKmqO,gBAEhBpB,EAAK7iO,UAAU+gP,oBAAsB,SAAU3pN,GAC3C,IAAK,IAAIv2B,EAAI,EAAGA,EAAIu2B,EAAQ52B,OAAQK,IAC5Bu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,QACpCt9B,KAAKinP,oBAAoB3pN,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,SAGV,SAA/CA,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,QAAqB15F,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKg0F,WACzC,IAAhDhuE,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SACpCtyB,KAAK4pO,oBAET5pO,KAAKspO,aAE+C,UAA/ChsM,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,SACW,IAAhD15F,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SACpCtyB,KAAK+pO,qBAET/pO,KAAKopO,cAE+C,UAA/C9rM,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,SACW,IAAhD15F,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SACpCtyB,KAAK6pO,qBAET7pO,KAAK0pO,gBAG+C,IAAhDpsM,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SACpCtyB,KAAKgqO,iBAEThqO,KAAKypO,iBAKrBV,EAAK7iO,UAAUghP,mBAAqB,SAAU5pN,EAASjrB,EAAO+oK,EAAKrpH,EAAKo1L,GACpE/rE,EAAIr2K,SAASsN,EAAMiF,WAAY,KAAOy6C,EAAI3hB,WAC1C,IAAK,IAAIrpC,EAAI,EAAGA,EAAIu2B,EAAQ52B,OAAQK,IAChC,GAAIu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,QACpCjrB,GAAgB,EAChBrS,KAAKknP,mBAAmB5pN,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,QAASjrB,EAAO+oK,EAAK99I,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAM6vO,GACtH90O,GAAgB,MAEf,CACD,IAAI+0O,EAAW,GACfA,EAAWhsE,EAAI9nK,QAAQA,MAAM,EAAGjB,EAAQ,GACW,SAA/CirB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,QAAqB15F,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKg0F,UAC7FtrG,KAAKoqO,YAAYn4N,KAAKm1O,GACtBpnP,KAAKwqO,iBAAiBv4N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,OAEN,UAA/CgmB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,QACzCh3H,KAAKqqO,aAAap4N,KAAKm1O,GACvBpnP,KAAKyqO,kBAAkBx4N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,OAEP,UAA/CgmB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,QACzCh3H,KAAKsqO,aAAar4N,KAAKm1O,GACvBpnP,KAAK0qO,kBAAkBz4N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,QAG3DtX,KAAKuqO,eAAet4N,KAAKm1O,GACzBpnP,KAAK2qO,oBAAoB14N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,SAK7EyxN,EAAK7iO,UAAUmhP,WAAa,SAAUzvN,EAAM0vN,EAAOv1L,EAAKz0B,EAASsc,GAC7D,GAAImY,EAAI3hB,aAAek3M,EACf1tM,EACAmY,EAAIz0B,QAAQrrB,KAAKqrB,GAGjBy0B,EAAIz0B,QAAQrrB,KAAK,CAAEm+B,WAAYxY,EAAM0F,QAAS,UAIlD,GAAIy0B,EAAIz0B,SAAWy0B,EAAIz0B,QAAQ52B,OAC3B,IAAK,IAAIK,EAAI,EAAGA,EAAIgrD,EAAIz0B,QAAQ52B,OAAQK,IACpC/G,KAAKqnP,WAAWzvN,EAAM0vN,EAAOv1L,EAAIz0B,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAMgmB,EAASsc,IAK/FmvL,EAAK7iO,UAAUqhP,oBAAsB,SAAUC,EAAWC,EAAazwH,GAGnE,IAFA,IAAIjlE,EAAM,GACN21L,EAAW,GACN3gP,EAAI,EAAGA,GAAKygP,EAAU9gP,OAAQK,IAEnC,IADA,IAAI4gP,EAAWH,EAAUzgP,EAAI,GACpB03B,EAAI,EAAGA,EAAIkpN,EAASjhP,OAAQ+3B,IAWjC,GAVKszB,EAAIz0B,SAAiB,IAANv2B,GAKgD,IAA5D2gP,EAAS39O,QAAQ49O,EAAS5iP,SAAS05B,EAAEnnB,WAAY,QACjDtX,KAAKqnP,WAAWM,EAAS5iP,SAAS05B,EAAEnnB,WAAY,KAAMqwO,EAASlpN,EAAI,GAAIszB,GACvE21L,EAASz1O,KAAK01O,EAAS5iP,SAAS05B,EAAEnnB,WAAY,QANlDy6C,EAAM,CAAE3hB,WAAYu3M,EAAS5iP,SAAS05B,EAAEnnB,WAAY,KAAMgmB,QAAS,IACnEoqN,EAASz1O,KAAK01O,EAAS5iP,SAAS05B,EAAEnnB,WAAY,OAQ9CmnB,IAAMkpN,EAASjhP,OAAS,EAAG,CAC3B1G,KAAKqnP,WAAW,KAAMM,EAAS5iP,SAAS05B,EAAEnnB,WAAY,KAAMy6C,EAAK01L,EAAY1gP,EAAI,IAAI,GACrF,IAAI6zB,EAAQ,EACZ,MAAOA,IAAU4sN,EAAU9gP,OAAS,GAAKK,IAAMygP,EAAU9gP,OACjDihP,EAASrwO,aAAekwO,EAAUziP,SAASgC,EAAEuQ,WAAY,KAAKA,aAC9DvQ,IACA/G,KAAKqnP,WAAW,KAAMM,EAAS5iP,SAAS05B,EAAEnnB,WAAY,KAAMy6C,EAAK01L,EAAY1gP,EAAI,IAAI,IAEzF6zB,IAKD,SAAXo8F,EACAh3H,KAAKiqO,kBAAkBh4N,KAAK8/C,GAEZ,UAAXilE,EACLh3H,KAAKkqO,mBAAmBj4N,KAAK8/C,GAG7B/xD,KAAKmqO,eAAel4N,KAAK8/C,IAGjCg3K,EAAK7iO,UAAU4gP,iBAAmB,SAAUxpN,GACxC,GAAIt9B,KAAK4jJ,eAAkB5jJ,KAAK4nP,mBAA8D,IAAzC5nP,KAAK4nP,kBAAkBhkG,cAAsB,CAC9F,IAAIvzF,GAAQrwD,KAAKyoG,4BAA+BzoG,KAAKyoG,4BAA8BzoG,KAAK8pO,wBACpF9pO,KAAKyoG,4BAA8BzoG,KAAKoiJ,aAAepiJ,KAAKoiJ,YAAY17I,OAAS1G,KAAKoiJ,YAClFpiJ,KAAK4vD,aAAe5vD,KAAKs9B,QACjC,IAAKt9B,KAAK4nP,mBAAsB5nP,KAAK4nP,oBAAsB5nP,KAAK4nP,kBAAkBhkG,cAC9E,IAAK,IAAI78I,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IACzB/G,KAAK4jJ,cAAgB78I,EACrBspD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0/G,OAAS,OAEO,UAA5C3mE,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0/G,QAAkE,UAA5C3mE,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0/G,OAC7F3mE,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0/G,OAAS3mE,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0/G,OAG3E3mE,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0/G,YAAS7lH,EAK1D,IAASpK,EAAI,EAAGA,EAAIu2B,EAAQ52B,OAAQK,IAChC,GAAIu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,QAAS,CAC7Ct9B,KAAKspO,UAAY,EACjBtpO,KAAKopO,WAAa,EAClBppO,KAAKypO,aAAe,EACpBzpO,KAAK0pO,WAAa,EAClB,IAAItuD,EAAM,GACVp7K,KAAKinP,oBAAoB3pN,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,UACzDt9B,KAAKspO,WAActpO,KAAKopO,YAAeppO,KAAKypO,cAAiBzpO,KAAK0pO,YAI7D1pO,KAAKopO,YAAeppO,KAAKspO,WAActpO,KAAKypO,cAAiBzpO,KAAK0pO,YAIlE1pO,KAAKypO,cAAiBzpO,KAAKspO,WAActpO,KAAKopO,YAAeppO,KAAK0pO,YAIlE1pO,KAAK0pO,YAAe1pO,KAAKspO,WAActpO,KAAKopO,YAAeppO,KAAKypO,cAOrEzpO,KAAKqpO,iBAAmBrpO,KAAKspO,UAC7BtpO,KAAKkpO,kBAAoBlpO,KAAKopO,WAC9BppO,KAAKwpO,cAAgBxpO,KAAKypO,aAC1BzpO,KAAK2pO,YAAc3pO,KAAK0pO,WACxB1pO,KAAKspO,UAAY,EACjBtpO,KAAKopO,WAAa,EAClBppO,KAAKypO,aAAe,EACpBzpO,KAAK0pO,WAAa,EAClB1pO,KAAKoqO,YAAc,GACnBpqO,KAAKqqO,aAAe,GACpBrqO,KAAKsqO,aAAe,GACpBtqO,KAAKuqO,eAAiB,GACtBvqO,KAAKwqO,iBAAmB,GACxBxqO,KAAKyqO,kBAAoB,GACzBzqO,KAAK0qO,kBAAoB,GACzB1qO,KAAK2qO,oBAAsB,GAC3B3qO,KAAKknP,mBAAmB5pN,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,QAAS,EAAG89I,EAAK99I,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAM,CAAE84B,WAAY9S,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK84B,WAAY9S,QAAS,KACrLt9B,KAAKwqO,iBAAiB9jO,QACtB1G,KAAKunP,oBAAoBvnP,KAAKoqO,YAAapqO,KAAKwqO,iBAAkB,QAElExqO,KAAKyqO,kBAAkB/jO,QACvB1G,KAAKunP,oBAAoBvnP,KAAKqqO,aAAcrqO,KAAKyqO,kBAAmB,SAEpEzqO,KAAK0qO,kBAAkBhkO,QACvB1G,KAAKunP,oBAAoBvnP,KAAKsqO,aAActqO,KAAK0qO,kBAAmB,SAEpE1qO,KAAK2qO,oBAAoBjkO,QACzB1G,KAAKunP,oBAAoBvnP,KAAKuqO,eAAgBvqO,KAAK2qO,oBAAqB,WAE5E3qO,KAAKoqO,YAAc,GACnBpqO,KAAKqqO,aAAe,GACpBrqO,KAAKuqO,eAAiB,GACtBvqO,KAAKsqO,aAAe,GACpBtqO,KAAKwqO,iBAAmB,GACxBxqO,KAAKyqO,kBAAoB,GACzBzqO,KAAK2qO,oBAAsB,GAC3B3qO,KAAK0qO,kBAAoB,KA1CzB1qO,KAAK2pO,YAAc3pO,KAAK0pO,WACxB1pO,KAAKg3L,aAAa/kL,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,MACtDtX,KAAKwpO,cAAgBxpO,KAAKypO,aAC1BzpO,KAAKmqO,eAAel4N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,QAPxDtX,KAAKwpO,cAAgBxpO,KAAKypO,aAC1BzpO,KAAKmqO,eAAel4N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,QALxDtX,KAAKkpO,kBAAoBlpO,KAAKopO,WAC9BppO,KAAKkqO,mBAAmBj4N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,QAL5DtX,KAAKqpO,iBAAmBrpO,KAAKspO,UAC7BtpO,KAAKiqO,kBAAkBh4N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,WAyDZ,UAA/CgmB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,SACgB,IAAhD15F,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SACpCtyB,KAAK+pO,qBAET/pO,KAAKkqO,mBAAmBj4N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,MAC5DtX,KAAKkpO,oBAE+C,SAA/C5rM,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,QAAqB15F,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKg0F,WAC9C,IAAhDhuE,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SACpCtyB,KAAK4pO,oBAET5pO,KAAKiqO,kBAAkBh4N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,MAC3DtX,KAAKqpO,mBAE+C,UAA/C/rM,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,QACzCh3H,KAAKg3L,aAAa/kL,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,MACtDtX,KAAK2pO,aACL3pO,KAAKmqO,eAAel4N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,MACxDtX,KAAKwpO,kBAG+C,IAAhDlsM,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SACpCtyB,KAAKgqO,iBAEThqO,KAAKmqO,eAAel4N,KAAKqrB,EAAQv4B,SAASgC,EAAEuQ,WAAY,MACxDtX,KAAKwpO,gBAIjB,GAAIxpO,KAAKiqO,kBAAkBvjO,OAAQ,CAC3B2pD,EAAOrwD,KAAKiqO,kBAAkBjqO,KAAKiqO,kBAAkBvjO,OAAS,GAClE1G,KAAK6nP,aAAa7nP,KAAKiqO,mBACvBjqO,KAAK8nP,wBAAwBz3L,aAAgB,OAASrwD,KAAK+nP,mBAAmB/nP,KAAKiqO,mBAAqB55K,GAE5G,GAAIrwD,KAAKkqO,mBAAmBxjO,OAAQ,CAC5B2pD,EAAOrwD,KAAKkqO,mBAAmB,GACnClqO,KAAK6nP,aAAa7nP,KAAKkqO,oBACvBlqO,KAAKgoP,yBAAyB33L,aAAgB,OAASrwD,KAAKioP,qBAAqBjoP,KAAKkqO,oBAAsB75K,GAEhH,IAAKrwD,KAAKiqO,kBAAkBvjO,QAAU1G,KAAKkqO,mBAAmBxjO,SAAW1G,KAAKmpO,oBAAqB,CAC3F94K,EAAQrwD,KAAKiqO,kBAAkB3lM,OAAOtkC,KAAKmqO,gBAAiB7lM,OAAOtkC,KAAKkqO,oBAC5ElqO,KAAK6Q,cAAc,CAAEysB,QAAS+yB,IAAQ,GACtCrwD,KAAKmpO,qBAAsB,IAGnCJ,EAAK7iO,UAAU2hP,aAAe,SAAUvqN,GACpC,IAAK,IAAIv2B,EAAI,EAAGA,EAAIu2B,EAAQ52B,OAAQK,IAC5Bu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,SAAWA,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,QAAQ52B,QACxC,UAA/C42B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKyoB,QACW,SAA/CzC,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKyoB,SACpCzC,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKyoB,YAAS5uB,GAEjDnR,KAAK6nP,aAAavqN,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,UAGH,UAA/CA,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKyoB,QACW,SAA/CzC,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKyoB,SACpCzC,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKyoB,YAAS5uB,IAK7D43N,EAAK7iO,UAAUgiP,iBAAmB,SAAU3rN,EAAQ6+I,GAChD,GAAI7+I,EAAOe,SAAWf,EAAOe,QAAQ52B,OACjC,IAAK,IAAIK,EAAI,EAAGA,EAAIw1B,EAAOe,QAAQ52B,OAAQK,IACvC/G,KAAKkoP,iBAAiB3rN,EAAOe,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAM8jK,GAC9D7+I,EAAOe,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SAC3C,eAAkBiK,EAAOe,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,YAC3D,eAAkBf,EAAOe,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,SAC3Dz6F,EAAOe,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKg0F,WAC/C8vE,EAAInpK,KAAK,aAKbsqB,EAAOjK,SAAa,eAAkBiK,EAAOy6F,UAAWz6F,EAAO+uE,UAC/D8vE,EAAInpK,KAAK,SAIrB82N,EAAK7iO,UAAU6hP,mBAAqB,SAAUzqN,GAE1C,IADA,IAAIf,EACKx1B,EAAIu2B,EAAQ52B,OAAS,EAAGK,GAAK,EAAGA,IAAK,CAC1C,IAAIq0K,EAAM,GAEV,GADAp7K,KAAKkoP,iBAAiB5qN,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAM8jK,GACvD99I,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,UAAoC,IAAzB8oJ,EAAIrxK,QAAQ,QAAgB,CAC3EwyB,EAASe,EAAQv4B,SAASgC,EAAEuQ,WAAY,KACxC,OAGR,OAAOilB,GAEXwsM,EAAK7iO,UAAU+hP,qBAAuB,SAAU3qN,GAE5C,IADA,IAAIf,EACKx1B,EAAI,EAAGA,EAAIu2B,EAAQ52B,OAAQK,IAAK,CACrC,IAAIq0K,EAAM,GAEV,GADAp7K,KAAKkoP,iBAAiB5qN,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAM8jK,GACvD99I,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,UAAoC,IAAzB8oJ,EAAIrxK,QAAQ,QAAgB,CAC3EwyB,EAASe,EAAQv4B,SAASgC,EAAEuQ,WAAY,KACxC,OAGR,OAAOilB,GAEXwsM,EAAK7iO,UAAU4hP,wBAA0B,SAAUxqN,GAC/C,IAAI,eAAkBA,GAGtB,GAAIA,EAAQA,SAAWA,EAAQA,QAAQ52B,OAAQ,CAC3C42B,EAAQyC,OAAS,OACjB,IAAIswB,EAAO/yB,EAAQA,QAAQA,EAAQA,QAAQ52B,OAAS,GACpD1G,KAAK8nP,wBAAwBz3L,aAAgB,QAAUA,EAAK/yB,QAAUt9B,KAAK+nP,mBAAmBzqN,EAAQA,SAAW+yB,QAGjH/yB,EAAQyC,OAAS,QAGzBgpM,EAAK7iO,UAAU8hP,yBAA2B,SAAU1qN,GAChD,IAAI,eAAkBA,GAGtB,GAAIA,EAAQA,SAAWA,EAAQA,QAAQ52B,OAAQ,CAC3C42B,EAAQyC,OAAS,QACjB,IAAIswB,EAAO/yB,EAAQA,QAAQ,GAC3Bt9B,KAAKgoP,yBAAyB33L,aAAgB,QAAUA,EAAK/yB,QAAUt9B,KAAKioP,qBAAqB3qN,EAAQA,SAAW+yB,QAGpH/yB,EAAQyC,OAAS,SAOzBgpM,EAAK7iO,UAAUiiP,wBAA0B,WACrC,OAAOnoP,KAAKooP,+BAAiCpoP,KAAKqoP,sBAAsBroP,KAAKs9B,QAAS,IAO1FyrM,EAAK7iO,UAAUigM,gBAAkB,WAC7B,OAAOnmM,KAAK++L,aAAe/+L,KAAK++L,aAAaoH,kBAAoB,IAErE4iC,EAAK7iO,UAAUkiP,6BAA+B,WAG1C,IAFA,IAAIE,EAAuB,EACvBhrN,EAAUt9B,KAAKoiJ,YACVr7I,EAAI,EAAGA,EAAI/G,KAAK4jJ,cAAe78I,IAChCu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SACpCg2N,IAGR,GAAKtoP,KAAKqpO,iBAAmBrpO,KAAKspO,WAAetpO,KAAKkpO,kBAAoBlpO,KAAKopO,WAC3E,IAASriO,EAAI,EAAGA,EAAIu2B,EAAQ52B,OAAQK,KAC5Bu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SAA2D,SAA/CgL,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,QAClC,UAA/C15F,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0/G,QACvCsxH,IAIZ,OAAOA,GAEXvf,EAAK7iO,UAAUmiP,sBAAwB,SAAUh4L,EAAM4xF,GACnD,IAAMjiJ,KAAKqpO,kBAAoBrpO,KAAKspO,aAAgBtpO,KAAKkpO,mBAAqBlpO,KAAKopO,YAC/E,IAAK,IAAIriO,EAAI,EAAG2hB,EAAM2nC,EAAK3pD,OAAQK,EAAI2hB,EAAK3hB,IACpCspD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgmB,QACjC2kH,EAAMjiJ,KAAKqoP,sBAAsBh4L,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgmB,QAAS2kH,GAGvE5xF,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKg0F,UAAYj7C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgb,SAC9E2vH,IAKhB,OAAOA,GAEX8mF,EAAK7iO,UAAUigP,eAAiB,SAAU91L,EAAM4xF,EAAK5vI,GACjD,IAAK,IAAItL,EAAI,EAAG2hB,EAAM2nC,EAAK3pD,OAAQK,EAAI2hB,EAAK3hB,IACpCspD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgmB,QACjC2kH,EAAMjiJ,KAAKmmP,eAAe91L,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgmB,QAAS2kH,EAAK5vI,IAGrEg+C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKg0F,UAAYj5F,EAAQrS,KAAK4jJ,cAAgB,GAC1E3B,IAEJ5vI,KAGR,OAAO4vI,GASX8mF,EAAK7iO,UAAUqiP,SAAW,SAAUC,GAC5BxoP,KAAKixD,aACLjxD,KAAKixD,YAAYs3L,SAASC,IAUlCzf,EAAK7iO,UAAUmvM,sBAAwB,SAAU0c,GACzC/xN,KAAKixD,cAAgBjxD,KAAKwsO,eAC1BxsO,KAAKixD,YAAYokJ,sBAAsB0c,IAY/CgX,EAAK7iO,UAAUuiP,WAAa,SAAUj3L,EAAYrnC,EAAWu+N,GACrD1oP,KAAK2oP,YACL3oP,KAAK2oP,WAAWF,WAAWj3L,EAAYrnC,EAAWu+N,IAiC1D3f,EAAK7iO,UAAU0iP,iBAAmB,SAAUzuN,EAAYmD,GACpDt9B,KAAK+qO,wBAAyB,EAC9B/qO,KAAK6Q,cAAc,CAAEghD,aAAc,CAAEv0B,QAAS,MAAQ,GACtDt9B,KAAK6Q,cAAc,CAAEwpC,eAAgB,CAAE/c,QAAS,MAAQ,GACxDt9B,KAAK6Q,cAAc,CAAEipC,eAAgB,CAAEj2C,IAAK,MAAQ,GAChD7D,KAAK+4C,eACL/4C,KAAK6Q,cAAc,CAAEmoC,cAAe,CAAE1b,QAAS,MAAQ,GAEvDA,GAAWA,EAAQ52B,QACnB1G,KAAK6Q,cAAc,CAAEysB,QAASA,IAAW,GAEzCnD,IACI,eAAkBmD,IAClBt9B,KAAK6Q,cAAc,CAAEysB,QAAS,KAAM,GAExCt9B,KAAK6Q,cAAc,CAAEspB,WAAYA,IAAc,IAEnDn6B,KAAKo9O,gBACLp9O,KAAK+qO,wBAAyB,GAOlChC,EAAK7iO,UAAU2iP,aAAe,WACtB7oP,KAAK2oP,YACL3oP,KAAK2oP,WAAWE,gBAUxB9f,EAAK7iO,UAAU4iP,iBAAmB,SAAU3wM,GACpCn4C,KAAK2oP,YACL3oP,KAAK2oP,WAAWG,iBAAiB3wM,IAOzC4wL,EAAK7iO,UAAU6iP,iBAAmB,WAC9B/oP,KAAK6Q,cAAc,CAAEghD,aAAc,CAAEv0B,QAAS,MAAQ,GACtDt9B,KAAK6Q,cAAc,CAAEwpC,eAAgB,CAAE/c,QAAS,MAAQ,GACxDt9B,KAAK6Q,cAAc,CAAEipC,eAAgB,CAAEj2C,IAAK,MAAQ,GAChD7D,KAAK+4C,cACL/4C,KAAK6Q,cAAc,CAAEmoC,cAAe,CAAE1b,QAAS,MAAQ,GAGvDt9B,KAAKo9O,iBAmBbrU,EAAK7iO,UAAUk8L,eAAiB,SAAUn9C,EAAWgvD,EAAgB9R,EAAa3pJ,EAAWe,EAAWwZ,EAAcmgJ,EAAmBC,GACjInzM,KAAK++L,cACL/+L,KAAK++L,aAAaqD,eAAen9C,EAAWgvD,EAAgB9R,EAAa3pJ,EAAWe,EAAWwZ,EAAcmgJ,EAAmBC,IASxI41B,EAAK7iO,UAAUyvM,eAAiB,SAAU19J,GAClCj4C,KAAK++L,cACL/+L,KAAK++L,aAAa4W,eAAe19J,IAWzC8wL,EAAK7iO,UAAUggM,0BAA4B,SAAU/tJ,EAAOy+J,GACpD52M,KAAK++L,cACL/+L,KAAK++L,aAAamH,0BAA0B/tJ,EAAOy+J,IAW3DmyB,EAAK7iO,UAAUmjJ,UAAY,SAAUh3I,EAAO22O,GACpChpP,KAAKs8E,iBACLt8E,KAAKs8E,gBAAgB+sE,UAAUh3I,EAAO22O,IAU9CjgB,EAAK7iO,UAAU+iP,WAAa,SAAUvhB,GAC9B1nO,KAAKs8E,iBACLt8E,KAAKs8E,gBAAgB2sK,WAAWvhB,IAQxCqB,EAAK7iO,UAAUkjJ,eAAiB,WACxBppJ,KAAKs8E,iBACLt8E,KAAKs8E,gBAAgB8sE,kBAW7B2/E,EAAK7iO,UAAUgjP,WAAa,SAAUpiB,EAAWkiB,GACzChpP,KAAKs8E,iBACLt8E,KAAKs8E,gBAAgB4sK,WAAWpiB,EAAWkiB,IAWnDjgB,EAAK7iO,UAAU2gO,mBAAqB,SAAUr8L,EAAY6nC,GACtDryE,KAAKs8E,gBAAgBuqJ,mBAAmBr8L,EAAY6nC,IAWxD02J,EAAK7iO,UAAUg0C,OAAS,SAAUujL,GAC1Bz9N,KAAK03O,cACL13O,KAAK03O,aAAax9L,OAAOujL,IAUjCsL,EAAK7iO,UAAU0gF,MAAQ,WACf5mF,KAAKshL,aACLthL,KAAKshL,YAAY16F,SAWzBmiJ,EAAK7iO,UAAUojJ,aAAe,SAAU6/F,EAAW5wN,GAC3Cv4B,KAAKgpJ,YACLhpJ,KAAKgpJ,WAAWM,aAAa6/F,EAAW5wN,IAUhDwwM,EAAK7iO,UAAU+iJ,UAAY,WACnBjpJ,KAAKgpJ,YACLhpJ,KAAKgpJ,WAAWC,aAQxB8/E,EAAK7iO,UAAUsvD,QAAU,WACjBx1D,KAAKgpJ,YACLhpJ,KAAKgpJ,WAAWxzF,WAQxBuzK,EAAK7iO,UAAUgjJ,UAAY,WACnBlpJ,KAAKgpJ,YACLhpJ,KAAKgpJ,WAAWE,aAWxB6/E,EAAK7iO,UAAUkjP,UAAY,SAAU7wN,EAAMlmB,GACnCrS,KAAKgpJ,YACLhpJ,KAAKgpJ,WAAWogG,UAAU7wN,EAAMlmB,IASxC02N,EAAK7iO,UAAUmjP,UAAY,SAAU3lN,GAC7B1jC,KAAKgpJ,YACLhpJ,KAAKgpJ,WAAWqgG,UAAU3lN,IAWlCqlM,EAAK7iO,UAAUojP,SAAW,SAAUj3O,EAAO8lC,GACnCn4C,KAAKgpJ,YACLhpJ,KAAKgpJ,WAAWsgG,SAASj3O,EAAO8lC,IASxC4wL,EAAK7iO,UAAUqjP,SAAW,WAClBvpP,KAAKgpJ,YACLhpJ,KAAKgpJ,WAAWugG,YAYxBxgB,EAAK7iO,UAAU0gO,WAAa,SAAUnmM,EAAU0X,EAAOh6B,GAC/Cne,KAAKgpJ,YACLhpJ,KAAKgpJ,WAAW49E,WAAWnmM,EAAU0X,EAAOh6B,IAapD4qN,EAAK7iO,UAAUsjP,UAAY,SAAUn3O,EAAOkmB,GACpCv4B,KAAKgpJ,YACLhpJ,KAAKgpJ,WAAWwgG,UAAUn3O,EAAOkmB,IAQzCwwM,EAAK7iO,UAAUujP,gBAAkB,WAC7B,OAAIzpP,KAAKgpJ,WACEhpJ,KAAKgpJ,WAAWygG,kBAEpB,IAUX1gB,EAAK7iO,UAAUwjP,mBAAqB,SAAUlwJ,EAAOk+C,GAC7C13I,KAAKwnG,eACLxnG,KAAKwnG,cAAciwC,YAAYj+C,EAAOk+C,IAS9CqxF,EAAK7iO,UAAU6/N,KAAO,SAAUiB,GACxBhnO,KAAK48O,iBACL58O,KAAK48O,gBAAgB7W,KAAKiB,IAOlC+B,EAAK7iO,UAAUyjP,kBAAoB,WAC/B,IAAIxzJ,EAAUn2F,KACd,GAAKA,KAAKsmJ,iBAAiBx0I,cAAc,kBAGnC9R,KAAKg5C,cAAc1b,QAAQ52B,QAAW1G,KAAK8nN,YAAe9nN,KAAKouG,mBACjEpuG,KAAKsmJ,iBAAiBx0I,cAAc,gBAAgBxB,aAAa,oBAChEtQ,KAAK2sG,kBAFV,CAKA,IAAIi9I,EAAc5pP,KAAKsmJ,iBAAiBx0I,cAAc,gBAAgBsV,cAAchY,YAChFy6O,EAAY,GAAGv2O,MAAMjK,KAAKrJ,KAAKsmJ,iBAAiBx0I,cAAc,QAAmB24B,YACjFq/M,EAAa,GAAGx2O,MAAMjK,KAAKrJ,KAAK2sG,kBAAkB76F,cAAc,QAAmB24B,YACnFs/M,EAAWH,EAAc,GACzB7iP,EAA6B,UAAzB/G,KAAK0yM,gBAA8B1yM,KAAKg5C,cAAc1b,QAAQ52B,OAAS1G,KAAK4vD,aAAalpD,OAAS,EACtGsjP,EAAehqP,KAAKmJ,QAAQiG,YAC5B66O,EAAa,SAAU53O,EAAOjH,GAC9B,GAAI,gBAAkB+qF,GAAU,CAC5B,IAAI+zJ,GAAY9+O,EAAQ4+O,EAAe,KAAKrrN,QAAQ,GAAK,IACzDkrN,EAAU9kP,SAASsN,EAAMiF,WAAY,KAAK3K,MAAMvB,MAAQ8+O,EACxDJ,EAAW/kP,SAASsN,EAAMiF,WAAY,KAAK3K,MAAMvB,MAAQ8+O,OAGzDL,EAAU9kP,SAASsN,EAAMiF,WAAY,KAAK3K,MAAMvB,MAAQA,EAAQ,KAChE0+O,EAAW/kP,SAASsN,EAAMiF,WAAY,KAAK3K,MAAMvB,MAAQA,EAAQ,KAErE+qF,EAAQ72E,OAAO,QAA2B,CAAEjN,MAAOA,EAAOjH,MAAOA,KAEjE2+O,GAAY,IACZH,EAAe,GAAKG,GAEpBH,EAAc,IACdA,EAAc,IAEd5pP,KAAKyoG,4BAA8BzoG,KAAKshO,WAActhO,KAAKs9B,QAAQ52B,SAAW1G,KAAKg5C,cAAc1b,QAAQ52B,UACzGkjP,EAAc,IAElB,MAAO7iP,EAAI/G,KAAKg5C,cAAc1b,QAAQ52B,OAClCujP,EAAWljP,EAAG6iP,GACd7iP,IAEA/G,KAAK8nN,aACLmiC,EAAWljP,EAAG6iP,GACd7iP,KAEA/G,KAAKouG,iBACL67I,EAAWljP,EAAG6iP,GAElB5pP,KAAKshO,WAAY,EACjBthO,KAAKsmJ,iBAAiBx0I,cAAc,gBAAgBvB,aAAa,kBAAmB,UAMxFw4N,EAAK7iO,UAAUikP,iBAAmB,WAS9B,GARI,gBAAkBnqP,QAClBA,KAAKsmJ,iBAAiBx0I,cAAc,gBAAgBtB,gBAAgB,mBACpExQ,KAAKqnG,aAAaE,oBAClBvnG,KAAK2pP,oBACD3pP,KAAKykG,SACLzkG,KAAKghO,yBAGO,SAAfhhO,KAAKoL,OAA4C,kBAAhBpL,KAAU,QAA+C,IAA7BA,KAAKoL,MAAMrB,QAAQ,OAC9E/J,KAAK4vD,aAAax2B,QAAO,SAAU24B,GAAO,QAASA,EAAI3mD,OAAuB,SAAd2mD,EAAI3mD,QAAqB2mD,EAAI8iF,YAAanuI,OAAS,EAAG,CACzH,IAAI0jP,EAAapqP,KAAKqnG,aAAagjJ,cAAcrqP,KAAK4vD,cACtD5vD,KAAKqnG,aAAaijJ,yBAAyBF,GAE3CpqP,KAAK0oG,gBAAkB1oG,KAAKyoG,4BAA8BzoG,KAAKqnG,cAC/DrnG,KAAKqnG,aAAakjJ,yBAElBvqP,KAAKgnN,eAAoD,YAAnChnN,KAAKinN,iBAAiBC,UAC5ClnN,KAAKsf,OAAO,QAAwB,IAEpCtf,KAAK4oG,YAAc5oG,KAAK8qI,cACxB9qI,KAAK8qI,aAAaz+B,yBAO1B08H,EAAK7iO,UAAUkoG,cAAgB,WAC3B,OAAOpuG,KAAKkvG,sBAAwBlvG,KAAK0/N,gBAAgBC,UAU7DoJ,EAAK7iO,UAAUi/I,eAAiB,SAAUV,EAAWC,GAC7C1kJ,KAAKwqP,eACLxqP,KAAKwqP,cAAcrlG,eAAeV,EAAWC,IAYrDqkF,EAAK7iO,UAAUm/I,qBAAuB,SAAUj2F,EAAWD,GACnDnvD,KAAKwqP,eACLxqP,KAAKwqP,cAAcnlG,qBAAqBj2F,EAAWD,IAY3D45K,EAAK7iO,UAAUo/I,2BAA6B,SAAUL,EAAW91F,GACzDnvD,KAAKwqP,eACLxqP,KAAKwqP,cAAcllG,2BAA2BL,EAAW91F,IAWjE45K,EAAK7iO,UAAU4oD,YAAc,SAAU27L,EAAat7L,GAC5CnvD,KAAK0qP,sBACL1qP,KAAK0qP,qBAAqB57L,YAAY27L,EAAat7L,IAQ3D45K,EAAK7iO,UAAUykP,kBAAoB,SAAU53O,GACzC/S,KAAKsf,OAAO,oBAAqBvM,IAOrCg2N,EAAK7iO,UAAU0kP,aAAe,SAAUxpN,GACpC,IAAIq1L,EAAcz2N,KAAKsmJ,iBACnBukG,EAAe7qP,KAAK2sG,kBACpBgsE,EAAa89C,EAAYtuM,iBAAiB,uCAC1CqV,EAAOx9B,KAAK62N,UACZi0B,EAAW1pN,EAAS,OAAS,GACjC,gBAAkBq1L,EAAY3kN,cAAc,QAAmB24B,WAAW,GAAI,CAAE,QAAWqgN,IAC3F,gBAAkBD,EAAa/4O,cAAc,QAAmB24B,WAAW,GAAI,CAAE,QAAWqgN,IAC5F,IAAK,IAAI/jP,EAAI,EAAGA,EAAI/G,KAAK62N,UAAUnwN,OAAQK,IAAK,CAC5C,IAAI81C,EAAMrf,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAK4P,kBACvCka,EACA,eAAS,CAACyb,GAAM,UAGhB,gBAAY,CAACA,GAAM,CAAC,WAG5B,IAAK,IAAIpe,EAAI,EAAGA,EAAIg4L,EAAYtuM,iBAAiB,uCAAuCzhB,OAAQ+3B,IAAK,CAC7Foe,EAAM87H,EAAW5zK,SAAS05B,EAAEnnB,WAAY,KACxC8pB,EACA,eAAS,CAACyb,GAAM,UAGhB,gBAAY,CAACA,GAAM,CAAC,aA4BhCksL,EAAK7iO,UAAU6kP,eAAiB,SAAUC,GAClChrP,KAAKirP,cACLjrP,KAAKirP,aAAaF,eAAeC,IAOzCjiB,EAAK7iO,UAAU86N,qBAAuB,WAClC,KAAKhhO,KAAKooG,kBAA8C,aAA1BpoG,KAAK+mN,kBAC3B/mN,KAAKokG,eAA8C,SAA7BpkG,KAAKkrP,eAAexyN,MADlD,CAOA,IAHA,IAAI4E,EAAUt9B,KAAK4vD,aACf6mK,EAAcz2N,KAAKsmJ,iBACnB6kG,EAAa,EACRpkP,EAAI,EAAGA,EAAIu2B,EAAQ52B,OAAQK,IAChC,GAAIu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgb,QAAS,CAC7C,GAAItyB,KAAKg5C,cAAc1b,QAAQ52B,QACxB1G,KAAKg5C,cAAc1b,QAAQvzB,QAAQuzB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6gC,QAAU,EAAG,CACvF,IAAI0xM,EAAY,GAAGv2O,MAAMjK,KAAKotN,EAAY3kN,cAAc,YACnDqW,iBAAiB,oEACtB,GAA4D,SAAxD0hO,EAAU9kP,SAASgC,EAAEuQ,WAAY,KAAK3K,MAAMC,QAC5C,SAGR,IAAI0wB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKlM,MAGnC,CACD+/O,EAAa,EACb,MAJAA,GAAcz+O,WAAW4wB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKlM,MAAMkM,YAQ/E,GAAI6zO,EAAY,CACZ,IAAIC,EAAkBprP,KAAK4mP,wBACvByE,EAAOrrP,KAAKsrP,UAAUF,GACtBP,EAAe7qP,KAAK2sG,kBACxB,GAAI3sG,KAAKg5C,cAAc1b,QAAQ52B,QAAU1G,KAAK8nN,YAAc9nN,KAAKouG,gBAC7D,KAAIw7I,EAAc5pP,KAAKurP,mBAAmBH,GACtCI,EAAwB5B,EAAYtyO,WAAa+zO,EACjDI,EAAkB,GAAGn4O,MAAMjK,KAAKotN,EAAY3kN,cAAc,YACzDqW,iBAAiB,sDAClBujO,EAAmB,GAAGp4O,MAAMjK,KAAKwhP,EAAa/4O,cAAc,YAC3DqW,iBAAiB,sDACtB,IAASphB,EAAI,EAAGA,EAAI0kP,EAAgB/kP,OAAQK,IACxC0kP,EAAgB1mP,SAASgC,EAAEuQ,WAAY,KAAK3K,MAAMg/O,YAAY,QAASH,GACvEE,EAAiB3mP,SAASgC,EAAEuQ,WAAY,KAAK3K,MAAMg/O,YAAY,QAASH,GACxEL,GAAcvB,GAGjBwB,GAAmBD,EAAa,MAC5BC,GAAmBD,EAAaN,EAAazjO,cAAcjY,eAC3D,eAAkB07O,EAAa/4O,cAAc,gBAK9C,eAAS,CAAC2kN,EAAao0B,GAAe,CAAC,mBAJvC,eAAS,CAACp0B,GAAc,CAAC,kBACzB,gBAAY,CAACo0B,GAAe,CAAC,oBAMrC,IAAIe,EAAuBT,EAAW7zO,WAAa+zO,EACnD50B,EAAY9pN,MAAMg/O,YAAY,QAASC,GACvCf,EAAal+O,MAAMg/O,YAAY,QAASC,QAGxC5rP,KAAKo+O,yBAGbrV,EAAK7iO,UAAUk4O,qBAAuB,WAClC,KAAKp+O,KAAKooG,kBAA8C,aAA1BpoG,KAAK+mN,kBAC3B/mN,KAAKokG,eAA8C,SAA7BpkG,KAAKkrP,eAAexyN,MADlD,CAIA,IAAI+9L,EAAcz2N,KAAKsmJ,iBACnBukG,EAAe7qP,KAAK2sG,kBAIxB,GAHA,gBAAY,CAAC8pH,EAAao0B,GAAe,CAAC,kBAC1Cp0B,EAAY9pN,MAAMmlI,eAAe,SACjC+4G,EAAal+O,MAAMmlI,eAAe,SAC9B9xI,KAAKg5C,cAAc1b,QAAQ52B,QAAU1G,KAAK8nN,YAAc9nN,KAAKouG,gBAAiB,CAC9E,IAAIg9I,EAAkBprP,KAAK4mP,wBACvBiF,EAA0B7rP,KAAKurP,mBAAmBH,GAAiB9zO,WAAatX,KAAKsrP,UAAUF,GAC/FK,EAAkB,GAAGn4O,MAAMjK,KAAKotN,EAAY3kN,cAAc,YACzDqW,iBAAiB,sDACtBsjO,EAAgBnsJ,SAAQ,SAAUn2F,GAC9BA,EAAQwD,MAAMg/O,YAAY,QAASE,MAEvCp1B,EAAY3kN,cAAc,gBAAgBtB,gBAAgB,mBAC1DxQ,KAAK2pP,uBAGb5gB,EAAK7iO,UAAUolP,UAAY,SAAUF,GACjC,OAAOA,EAAkB,IAAM,MAEnCriB,EAAK7iO,UAAUqlP,mBAAqB,SAAUH,GAC1C,OAAOA,EAAkB1+O,YAAY,GAAK1M,KAAKmJ,QAAQiG,YAAc,KAAKuvB,QAAQ,IAAM,IAE5FoqM,EAAK7iO,UAAU0gP,sBAAwB,WACnC,OAAO5mP,KAAK4vD,aAAa,GAAGxkD,MAAMkM,WAAWvN,QAAQ,MAAQ,GASjEg/N,EAAK7iO,UAAU4lP,oBAAsB,SAAUhgP,EAAGzJ,EAAGiE,GAC7CtG,KAAK+rP,qBACL/rP,KAAK+rP,oBAAoBC,oBAAoBlgP,EAAGzJ,EAAGiE,IAG3DyiO,EAAK7iO,UAAUqnO,mBAAqB,WAChCvtO,KAAK21C,eAAewtL,SAAS,eAAgBnjO,KAAKqnG,aAAe,IAAI,OAAmBrnG,OACxFA,KAAK21C,eAAewtL,SAAS,sBAAuB,IAAI,GACxDnjO,KAAK21C,eAAewtL,SAAS,kBAAmB,IAAI,GACpDnjO,KAAK21C,eAAewtL,SAAS,eAAgBnjO,KAAKu+L,UAAY,IAAI,OAAKv+L,KAAKwa,gBAAiBxa,KAAK4tO,cAAe5tO,KAAKkgB,SACtHlgB,KAAK21C,eAAewtL,SAAS,iBAAkBnjO,KAAKisP,sBAAwB,IAAI,OAAejsP,KAAKkgB,SACpGlgB,KAAK21C,eAAewtL,SAAS,kBAAmBnjO,KAAKi8O,UAAY,IAAI,GAASj8O,OAC9EA,KAAK21C,eAAewtL,SAAS,cAAenjO,KAAKs1N,YAAc,IAAI,QACnEt1N,KAAK21C,eAAewtL,SAAS,QAASnjO,KAAK4lJ,YAAc,IAAI,OAAc5lJ,QAE/E+oO,EAAK7iO,UAAU6xO,aAAe,WAC1B,IAEI1/E,EACA55H,EAHAytN,EAAQlsP,KAAKg5C,cAAc1b,QAC3B6uN,EAAQnsP,KAAK6xD,aAAav0B,QAG9B,GAAIt9B,KAAK+4C,cAiCL,IAhCA,IAAIqzM,EAAU,SAAUrlP,EAAG2hB,GACvB+V,EAAI,EACJ,IAAK,IAAI4tN,EAAOF,EAAMzlP,OAAQ+3B,EAAI4tN,EAAM5tN,IACpC,GAAI0tN,EAAMpnP,SAAS05B,EAAEnnB,WAAY,KAAK6gC,QAAU+zM,EAAMnnP,SAASgC,EAAEuQ,WAAY,KAAM,CAC/E+gJ,GAAO,EACP,MAcR,GAXKA,EAIGi0F,EAAO16L,aACP06L,EAAOxf,cAAc76N,KAAKk6O,EAAMpnP,SAAS05B,EAAEnnB,WAAY,KAAK6gC,OAG5Dg0M,EAAMpnP,SAAS05B,EAAEnnB,WAAY,KAAK6S,UAAY,YAPlDgiO,EAAMl6O,KAAK,CAAEkmC,MAAO+zM,EAAMnnP,SAASgC,EAAEuQ,WAAY,KAAM6S,UAAW,YAAaoiO,aAAa,KAU3FD,EAAOtzM,cAAcwzM,kBAAmB,CACzC,IAAIjwN,EAAS+vN,EAAO7jJ,2BAChB6jJ,EAAOhvN,QAAQlE,QAAO,SAAU5yB,GAAK,OAAOA,EAAE2xC,QAAU+zM,EAAMnnP,SAASgC,EAAEuQ,WAAY,QAAS,GAC5Fg1O,EAAO/6L,iBAAiB26L,EAAMnnP,SAASgC,EAAEuQ,WAAY,MACvDilB,EACAA,EAAOjK,SAAU,EAGjBg6N,EAAOh0M,IAAI,iBAAkB,CAAEp7B,WAAY,QAASs0C,WAAY06L,EAAMnnP,SAASgC,EAAEuQ,WAAY,SAIrGg1O,EAAStsP,KACJ+G,EAAI,EAAG2hB,EAAMwjO,EAAMxlP,OAAQK,EAAI2hB,EAAK3hB,IACzCqlP,EAAQrlP,EAAG2hB,GAGnB,IAAKwjO,EAAMxlP,OACP,IAASK,EAAI,EAAGA,EAAIolP,EAAMzlP,OAAQK,IAC9B/G,KAAK8sO,cAAc76N,KAAKk6O,EAAMpnP,SAASgC,EAAEuQ,WAAY,KAAK6gC,OASlE,GANAn4C,KAAK49O,cAAgB,gBAAiB59O,KAAKwjN,aAC3CxjN,KAAK69O,sBAAwB,gBAAiB79O,KAAK4/N,qBACnD5/N,KAAK89O,iBAAmB,gBAAiB99O,KAAKkuG,gBAC9CluG,KAAK4kG,eAAiB,gBAAiB5kG,KAAK8xG,aAAaxhE,UACzDtwC,KAAKylP,qBAAuB,gBAAiBzlP,KAAK8xG,aAAarM,gBAC/DzlG,KAAK2lP,qBAAuB,gBAAiB3lP,KAAK8xG,aAAahE,iBAC1D,eAAkB9tG,KAAKiyK,eAAgB,CACxC,IAAI9zJ,EAAQ,eAAkBne,KAAKiyK,cAAc6C,qBAAuB,YACpE90K,KAAKiyK,cAAc6C,oBACvB90K,KAAKo6B,MAAMof,MAAMx5C,KAAKguD,YAAa,QAAS7vC,GAAO,GAEvDne,KAAKysP,qBAET1jB,EAAK7iO,UAAUumP,kBAAoB,WAC3BzsP,KAAKqtO,oBAAoBrtO,KAAK4vD,eAC9B5vD,KAAKsf,OAAO,QAA6Btf,KAAKg3C,yBAGtD+xL,EAAK7iO,UAAUy5O,wBAA0B,WACP,aAA1B3/O,KAAK+mN,iBACL/mN,KAAKmJ,QAAQ6B,UAAU0G,IAAI,oBAG3B1R,KAAKmJ,QAAQ6B,UAAUC,OAAO,qBAGtC89N,EAAK7iO,UAAU8xO,WAAa,WACxB,IAAIpuO,EACJ5J,KAAKu+O,YACyB,aAA1Bv+O,KAAK+mN,kBACL/mN,KAAKmJ,QAAQ6B,UAAU0G,IAAI,oBAE3B1R,KAAKq8O,aACLr8O,KAAKmJ,QAAQ6B,UAAU0G,IAAI,eAE3B,OAAQ6D,UACRvV,KAAKmJ,QAAQ6B,UAAU0G,IAAI,YAE3B1R,KAAKgmN,WACLhmN,KAAKmJ,QAAQ6B,UAAU0G,IAAI,qBAE3B1R,KAAKqQ,YAC+B,IAAhCrQ,KAAKqQ,SAAStG,QAAQ,MACrBH,EAAK5J,KAAKmJ,QAAQ6B,WAAW0G,IAAI7I,MAAMe,EAAI5J,KAAKqQ,SAAShQ,MAAM,MAGhEL,KAAKmJ,QAAQ6B,UAAU0G,IAAI1R,KAAKqQ,WAIpCrQ,KAAKkvG,qBAAuBlvG,KAAK0/N,gBAAgBC,UAAkC,YAAtB,OAAQh+L,KAAKr9B,MAC1EtE,KAAKmJ,QAAQ6B,UAAU0G,IAAI,uBAE/B,eAAU1R,KAAKmJ,QAAS,CAAC,eAAgB,aAAc,IACvD,IAAIujP,EAAkB1sP,KAAK21C,eAAe0yG,WAAW,mBACrDroJ,KAAKs4O,aAAeoU,EAAgB1vB,YAAY,OAAWnpD,QAC3D7zK,KAAKw5K,cAAgBkzE,EAAgB1vB,YAAY,OAAWE,SAC5Dl9N,KAAKshL,YAAc,IAAI,QAAMthL,KAAMA,KAAK8qI,cACxC9qI,KAAK48O,gBAAkB,IAAI,GAAU58O,KAAMA,KAAK21C,gBAChD31C,KAAK41M,aAAav8L,SAClBrZ,KAAKw8O,mBACLx8O,KAAK2sP,yBACL3sP,KAAKqnG,aAAaE,oBAClBvnG,KAAK8+O,kBACL9+O,KAAKg/O,gBACLh/O,KAAKqxC,gBACLrxC,KAAK68O,sBAET9T,EAAK7iO,UAAU0mP,UAAY,WACvB5sP,KAAK8qI,aAAalqH,WAClB5gB,KAAK8qI,aAAaxiC,YACE,SAAhBtoG,KAAKmL,QACLnL,KAAK8qI,aAAa3hC,cAG1B4/H,EAAK7iO,UAAUq4O,UAAY,WACnBv+O,KAAKuL,UACLvL,KAAKmJ,QAAQ6B,UAAU0G,IAAI,SAG3B1R,KAAKmJ,QAAQ6B,UAAUC,OAAO,UAGtC89N,EAAK7iO,UAAUymP,uBAAyB,WACpC,IAAI9gO,EAAQ7rB,KAAKqK,cAAc,MAAO,CAAEC,UAAW,cAAewK,OAAQ,kBACtErE,EAAUzQ,KAAKqK,cAAc,MAAO,CAAEC,UAAW,OAAkBsK,MAAO,CAAEiM,SAAU,QAC1F,eAAO,CAACpQ,EAASzQ,KAAKqK,cAAc,MAAO,CAAEC,UAAW,qBAAuBuhB,GAC/Epb,EAAQjG,YAAYxK,KAAKqK,cAAc,SACvC,eAAO,CAACoG,EAASzQ,KAAKqK,cAAc,MAAO,CAAEC,UAAW,uBAAyBuhB,GACjF7rB,KAAKmJ,QAAQqB,YAAYqhB,IAE7Bk9M,EAAK7iO,UAAU44O,gBAAkB,WAE7B,OADA,eAAU9+O,KAAKmJ,QAAS,GAAI,CAAC,kBAAmB,oBAAqB,cAAe,gBAC5EnJ,KAAK6sP,WACT,IAAK,aACD7sP,KAAKmJ,QAAQ6B,UAAU0G,IAAI,qBAC3B,MACJ,IAAK,WACD1R,KAAKmJ,QAAQ6B,UAAU0G,IAAI,mBAC3B,MACJ,IAAK,OACD1R,KAAKmJ,QAAQ6B,UAAU0G,IAAI,eAC3B,MACJ,IAAK,OACD1R,KAAKmJ,QAAQ6B,UAAU0G,IAAI,eAC3B,MAER1R,KAAK6+O,qBAET9V,EAAK7iO,UAAU24O,kBAAoB,WAC3B7+O,KAAKokG,eACgB,aAAnBpkG,KAAK6sP,WAA+C,SAAnB7sP,KAAK6sP,UACxC7sP,KAAKmJ,QAAQ6B,UAAU0G,IAAI,kBAG3B1R,KAAKmJ,QAAQ6B,UAAUC,OAAO,mBAStC89N,EAAK7iO,UAAU84O,cAAgB,WAC3B,GAAIh/O,KAAKgnN,cAAe,CACpB,IAAIruC,EAAa,GAAGrlK,MAAMjK,KAAKrJ,KAAKmJ,QAAQ0U,uBAAuB,mBACnE,OAAQ7d,KAAKinN,iBAAiBC,UAC1B,IAAK,SACD,gBAAKlnN,KAAKmJ,SAAS,GACnB,gBAAKnJ,KAAKwoG,cAAc,GACxB,gBAAKmwE,GAAY,GACjB,MACJ,IAAK,UACD,gBAAK34K,KAAKwoG,cAAc,GACxB,gBAAKxoG,KAAKmJ,SAAS,GACnB,gBAAKwvK,GAAY,GACjB,MACJ,QACI,gBAAK34K,KAAKmJ,SAAS,GACnB,gBAAKnJ,KAAKwoG,cAAc,GACxB,gBAAKmwE,GAAY,GAEc,YAAnC34K,KAAKinN,iBAAiBC,UACtBlnN,KAAKsf,OAAO,QAAwB,MAUhDypN,EAAK7iO,UAAU+4O,eAAiB,WAC5B,gBAAKj/O,KAAKmJ,SAAS,GACnB,IAAIwvK,EAAa,GAAGrlK,MAAMjK,KAAKrJ,KAAKmJ,QAAQ0U,uBAAuB,mBACnE,gBAAK86J,GAAY,GACjB,gBAAK34K,KAAKwoG,cAAc,GACe,YAAnCxoG,KAAKinN,iBAAiBC,UACtBlnN,KAAKsf,OAAO,QAAwB,KAS5CypN,EAAK7iO,UAAUmrC,cAAgB,WAC3BrxC,KAAK28O,WAAa,IAAI,OAAQ,CAC1B3uO,QAAS,SACTyC,QAAS,GACTJ,SAAUrQ,KAAKqQ,SAAWrQ,KAAKqQ,SAAW,MAC3CrQ,KAAKmJ,UAKZ4/N,EAAK7iO,UAAUk3O,cAAgB,YACvBp9O,KAAK84C,sBAAwB94C,KAAK0wD,2BAClC1wD,KAAK2wD,aAAaC,YAAc,GAEpC5wD,KAAK8qO,oBAET/B,EAAK7iO,UAAU4mP,iBAAmB,SAAU3jP,GACxC,IAAIstN,EAAcz2N,KAAKsmJ,iBACnBymG,EAAe/sP,KAAKooG,kBAA8C,aAA1BpoG,KAAK+mN,iBAAkC,gBAAkB,eACjGimC,EAAShtP,KAAK+2N,YAAYN,EAAas2B,EAAc,UACrDE,EAASjtP,KAAK+2N,YAAYN,EAAas2B,EAAc,WACrD3yL,EAAQjxD,EAAQ6B,UAAUkB,SAAS,gBAAkB8gP,EAASC,EAC9DpwM,EAAM1zC,EAAQ6B,UAAUkB,SAAS,gBAAkB,KAAO,KAC9DkuD,EAAMtoD,cAAc+qC,GAAKvyC,UAAYnB,EAAQmB,UAC7C8vD,EAAMtoD,cAAc+qC,GAAKnsC,UAAYvH,EAAQuH,UAC7C,IAAItF,EAAQgvD,EAAMtoD,cAAc+qC,GAAK7vC,wBAAwB5B,MAG7D,OAFAoI,SAAS6B,KAAKy+E,YAAYk5J,GAC1Bx5O,SAAS6B,KAAKy+E,YAAYm5J,MACrB7hP,EAAQjC,EAAQ6D,wBAAwB5B,QAAUjC,EAAQ6B,UAAUkB,SAAS,sBAC7ElM,KAAKooG,kBAA8C,aAA1BpoG,KAAK+mN,kBAC3B37M,EAAiD,IAAxCjC,EAAQ6D,wBAAwB5B,OAAiC,SAAhBpL,KAAKmL,OAAoB,GAAK,KAKpG49N,EAAK7iO,UAAUknC,iBAAmB,SAAUr6B,GACxC,GAAI/S,KAAKu9O,oBAAqB,CAC1B,IAAIp0O,EAAU,gBAAa4J,EAAEzM,OAAQ,qBACjCtG,KAAKktP,cAAgB/jP,GAAsB,aAAX4J,EAAEqB,MAClCpU,KAAK28O,WAAWhxO,QAEpB,IAAI2J,EAAUvC,EAAEzM,OAAOgP,QACnB63O,EAAY,CAAC,IAAK,SAAU,SAChC,GAAIhkP,GAAsB,aAAX4J,EAAEqB,QAAyB,OAAQmB,WAA4C,IAAhC43O,EAAUpjP,QAAQuL,KACxEtV,KAAK8sP,iBAAiB3jP,GAAU,CAChC,IAAI4oD,EAAM/xD,KAAK4vD,aAAa7qD,SAASoE,EAAQmH,aAAa,QAAwB,KAC9EsrN,EAAY7pK,EAAIoyC,kBAAoB,YAAc,YAClD49E,EAAa/hL,KAAKqK,cAAc,OACpC,GAAIlB,EAAQ0U,uBAAuB,gBAAgBnX,OAAQ,CACvD,IAAI0mP,EAAejkP,EAAQ0U,uBAAuB,gBAAgB,GAClEkkK,EAAW,GAAK65C,GAAa57N,KAAK8Q,SAASs8O,EAAa9sL,WACxDtgE,KAAK28O,WAAWlsO,QAAUsxK,OAG1BA,EAAW,GAAK65C,GAAa57N,KAAK8Q,SAAS3H,EAAQm3D,WACnDtgE,KAAK28O,WAAWlsO,QAAUsxK,EAE9B/hL,KAAKktP,YAAc/jP,EACfnJ,KAAK4Q,sBACL5Q,KAAK28O,WAAW/rO,qBAAsB,GAEtCmhD,EAAIoyC,oBACJnkG,KAAK28O,WAAW5rO,iBAAkB,GAEtC/Q,KAAK28O,WAAW,QAAQxzO,MAKxC4/N,EAAK7iO,UAAUq3O,kBAAoB,WAC/B,IAAIltL,EAAOrwD,KAAK4vD,aAChB,GAAsB,wBAAlB5vD,KAAKm7N,SACL,OAAO,EAEX,IAAK,IAAIp0N,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IAC7B,GAAkD,wBAA9CspD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6jN,SACjC,OAAO,EAGf,OAAO,GAEX4N,EAAK7iO,UAAUkT,cAAgB,WACvBpZ,KAAKu9O,qBACLv9O,KAAK28O,WAAWhxO,SAYxBo9N,EAAK7iO,UAAU6wN,YAAc,SAAU38J,EAAOizL,EAAKj5O,GAC/C,IAAIk5O,EAAattP,KAAKqK,cAAc,OACpCijP,EAAWhjP,UAAYtK,KAAKmJ,QAAQmB,UACpCgjP,EAAW3gP,MAAMowE,QAAU,4DAC3B,IAAIwwK,EAAWvtP,KAAKqK,cAAc,OAClCkjP,EAASjjP,UAAY+iP,EACrB,IAAIG,EAAUxtP,KAAKqK,cAAc,SACjCmjP,EAAQljP,UAAY8vD,EAAM9vD,UAC1BkjP,EAAQ7gP,MAAMowE,QAAU,iCACxB,IAAIlgC,EAAgB,WAATzoC,EAAqB,KAAO,KACnCq5O,EAAOztP,KAAKqK,cAAc,KAAM,CAAEuK,MAAO,CAAEC,KAAM,SACjD64O,EAAO1tP,KAAKqK,cAAcwyC,GAM9B,OALA4wM,EAAKjjP,YAAYkjP,GACjBF,EAAQhjP,YAAYijP,GACpBF,EAAS/iP,YAAYgjP,GACrBF,EAAW9iP,YAAY+iP,GACvB/5O,SAAS6B,KAAK7K,YAAY8iP,GACnBA,GAEXvkB,EAAK7iO,UAAUynP,aAAe,SAAU56O,GACnB,QAAbA,EAAEqT,QAAiC,aAAbrT,EAAEqT,QACxBpmB,KAAK28O,WAAWhxO,SASxBo9N,EAAK7iO,UAAUoT,WAAa,WACxB,OAAa5H,IAAI1R,KAAKmJ,QAAS,QAASnJ,KAAK4tP,kBAAmB5tP,MAChE,OAAa0R,IAAI1R,KAAKmJ,QAAS,WAAYnJ,KAAK4tP,kBAAmB5tP,MACnE,OAAa0R,IAAI1R,KAAKmJ,QAAS,WAAYnJ,KAAKy/F,gBAAiBz/F,MACjE,OAAa0R,IAAI1R,KAAKmJ,QAAS,WAAYnJ,KAAK6tP,gBAAiB7tP,MACjE,OAAa0R,IAAI1R,KAAKmJ,QAAS,UAAWnJ,KAAKohJ,gBAAiBphJ,MAEhE,OAAa0R,IAAItF,OAAQ,SAAUpM,KAAKmqP,iBAAkBnqP,MACtDA,KAAKkrI,gBACLlrI,KAAKmJ,QAAQ0X,UAAsC,IAA3B7gB,KAAKmJ,QAAQ0X,SAAkB,EAAI7gB,KAAKmJ,QAAQ0X,UAE5E7gB,KAAKwsB,eAAiB,IAAI,OAAexsB,KAAKmJ,QAAS,CACnDib,UAAWpkB,KAAKqrI,iBAAiB3/H,KAAK1L,MACtCikB,WAAYjkB,KAAKikB,WACjBE,UAAW,YAEf,OAAazS,IAAI1R,KAAKwoG,aAAathF,kBAAmB,SAAUlnB,KAAKoZ,cAAepZ,MACpF,OAAa0R,IAAI1R,KAAKmJ,QAAS,YAAanJ,KAAKotC,iBAAkBptC,MACnE,OAAa0R,IAAI1R,KAAKmJ,QAAS,WAAYnJ,KAAKotC,iBAAkBptC,MAClE,OAAa0R,IAAI1R,KAAKwoG,aAAc,aAAcxoG,KAAK8tP,SAAU9tP,MACjE,OAAa0R,IAAI8B,SAAS6B,KAAM,UAAWrV,KAAK4lO,eAAgB5lO,OAQpE+oO,EAAK7iO,UAAUiU,aAAe,WAC1B,OAAalP,OAAOjL,KAAKmJ,QAAS,QAASnJ,KAAK4tP,mBAChD,OAAa3iP,OAAOjL,KAAKmJ,QAAS,WAAYnJ,KAAK4tP,mBACnD,OAAa3iP,OAAOjL,KAAKmJ,QAAS,WAAYnJ,KAAKy/F,iBACnD,OAAax0F,OAAOjL,KAAKmJ,QAAS,WAAYnJ,KAAK6tP,iBACnD,OAAa5iP,OAAOjL,KAAKwoG,aAAathF,kBAAmB,SAAUlnB,KAAKoZ,eACxE,OAAanO,OAAOjL,KAAKmJ,QAAS,YAAanJ,KAAKotC,kBACpD,OAAaniC,OAAOjL,KAAKmJ,QAAS,WAAYnJ,KAAKotC,kBACnD,OAAaniC,OAAOjL,KAAKmJ,QAAS,UAAWnJ,KAAKohJ,iBAClD,OAAan2I,OAAOjL,KAAKwoG,aAAc,aAAcxoG,KAAK8tP,UAC1D,OAAa7iP,OAAOuI,SAAS6B,KAAM,UAAWrV,KAAK4lO,gBAEnD,OAAa36N,OAAOmB,OAAQ,SAAUpM,KAAKmqP,mBAM/CphB,EAAK7iO,UAAU+xO,YAAc,WACrBj4O,KAAK6sC,cAGT7sC,KAAKgtC,GAAG,QAAkBhtC,KAAK4sP,UAAW5sP,MAC1CA,KAAKgtC,GAAG,QAAqBhtC,KAAK2pP,kBAAmB3pP,MACrDA,KAAKgtC,GAAG,QAAwBhtC,KAAK2pP,kBAAmB3pP,MACxDA,KAAKgtC,GAAG,QAA8BhtC,KAAK+tP,sBAAuB/tP,MAClEA,KAAKgtC,GAAG,QAAiChtC,KAAK6mP,yBAA0B7mP,MACxEA,KAAKguP,kBAAoBhuP,KAAKk8O,gBAAgBxwO,KAAK1L,MACnDA,KAAK4sC,iBAAiB,QAAkB5sC,KAAKguP,mBAC7ChuP,KAAKgtC,GAAG,QAAmBhtC,KAAK2tP,aAAc3tP,QAMlD+oO,EAAK7iO,UAAUq2O,eAAiB,WACxBv8O,KAAK6sC,cAGT7sC,KAAKy6C,IAAI,QAAkBz6C,KAAK4sP,WAChC5sP,KAAKy6C,IAAI,QAAqBz6C,KAAK2pP,mBACnC3pP,KAAKy6C,IAAI,QAAwBz6C,KAAK2pP,mBACtC3pP,KAAKgtC,GAAG,QAA8BhtC,KAAK+tP,sBAAuB/tP,MAClEA,KAAKgtC,GAAG,QAAiChtC,KAAK6mP,yBAA0B7mP,MACxEA,KAAKu7E,oBAAoB,QAAkBv7E,KAAKguP,mBAChDhuP,KAAKy6C,IAAI,QAAmBz6C,KAAK2tP,gBASrC5kB,EAAK7iO,UAAU0xK,sBAAwB,WACnC,OAAI,gBAAgB53K,MACT,eAAkBA,KAAK6zB,gBAAgBolB,SAC1Cj5C,KAAK6zB,gBAAkB7zB,KAAK6zB,gBAAgBolB,QAEhDj5C,KAAKg5C,cAAcqY,kBACZrxD,KAAK6zB,gBAER7zB,KAAK+4C,eAAiB/4C,KAAKg5C,cAAc1b,QAAQ52B,QAAU1G,KAAK6zB,gBAAgBntB,QACjF1G,KAAK6zB,gBAAgBolB,QAAWj5C,KAAK6zB,gBAAgBolB,QACtDj5C,KAAK6zB,iBAEfk1M,EAAK7iO,UAAU0nP,kBAAoB,SAAU76O,GACzC,KAAI/S,KAAK+jP,YAAYhxO,IAAO,gBAAaA,EAAEzM,OAAQ,gBAAkByM,EAAE8F,SACnE7Y,KAAKmJ,QAAQ0U,uBAAuB,qBAAqBnX,QAAU1G,KAAKiuP,UAAUl7O,OAG/E/S,KAAKkvG,sBAAwB,gBAAan8F,EAAEzM,OAAQ,SAClC,OAArByM,EAAEzM,OAAOgP,WAAyBtV,KAAK+4C,eAAiB/4C,KAAKqkG,kBAC7D,gBAAatxF,EAAEzM,OAAQ,mBAAqByM,EAAE8F,SAFlD,CAKI,gBAAa9F,EAAEzM,OAAQ,iBAAmBtG,KAAKkvG,sBAC7C,eAAD,CAAcn8F,EAAEzM,OAAQ,oBAAwByM,EAAEzM,SACK,IAAxD,CAAC,IAAK,SAAU,SAASyD,QAAQgJ,EAAEzM,OAAOgP,UAC1CvC,EAAE6F,iBAEN,IAAI4S,EAAOxrB,KAAK8hP,WAAW/uO,EAAEzM,QACzB+N,EAAS,SACbmX,EAAK,GAAKnX,IAAU,EACpB,IAAI8vM,GAAY,EACZzgL,EAAK,eAAQ3wB,EAAEzM,OAAQ,MAC3B,GAAIo9B,GAAMA,EAAGpzB,aAAa,YAAa,CACnC,IAAIyrK,EAAS/7K,KAAKyoJ,oBAAoB/kH,EAAGpzB,aAAa,aACtD6zM,IAAYpoC,GAASA,EAAOooC,UAE5BA,GACAnkN,KAAK6N,QAAQ,QAAoB2d,GAErCxrB,KAAKsf,OAAO,OAAcvM,KAE9Bg2N,EAAK7iO,UAAU+nP,UAAY,SAAUl7O,GACjC,IAAI2wB,EAAK,gBAAa3wB,EAAEzM,OAAQ,QAC5B0kG,EAAoC,UAA3BhrG,KAAK8xG,aAAap5E,MAC3B14B,KAAKgrG,QAAUtnE,IAAOA,EAAG14B,UAAUkB,SAAS,SAAuBw3B,EAAG14B,UAAUkB,SAAS,SAC7F,OAAQ,gBAAa6G,EAAEzM,OAAQ,sBAAwB0kG,GAAW,gBAAaj4F,EAAEzM,OAAQ,SACrF,gBAAayM,EAAEzM,OAAQ,QAAkB0E,UAAUkB,SAAS,uBAEpE68N,EAAK7iO,UAAU2nP,gBAAkB,SAAU96O,GACvC,IAAI2jK,EAAO,gBAAa3jK,EAAEzM,OAAQ,UAClC,IAAI,eAAkBowK,IAASA,EAAKxlK,KAAOlR,KAAKmJ,QAAQ+H,KAAM,eAAQ6B,EAAEzM,OAAQ,qBAAhF,CAGA,IAAI4nP,GAAU,EACVxqN,EAAK,eAAQ3wB,EAAEzM,OAAQ,MAC3B,GAAIo9B,GAAMA,EAAGpzB,aAAa,YAAa,CACnC,IAAIyrK,EAAS/7K,KAAKyoJ,oBAAoB/kH,EAAGpzB,aAAa,aACtD49O,IAAUnyE,GAASA,EAAOooC,UAE9B,IAAI34L,EAAOxrB,KAAK8hP,WAAW/uO,EAAEzM,QAC7BklB,EAAKllB,OAASyM,EAAEzM,OACZ4nP,GACAluP,KAAK6N,QAAQ,QAA0B2d,GAE3CxrB,KAAKsf,OAAO,QAAiBvM,KAEjCg2N,EAAK7iO,UAAUu5F,gBAAkB,SAAU1sF,GACvC,IAAI/S,KAAK+jP,YAAYhxO,GAArB,CAGK,gBAAaA,EAAEzM,OAAQ,YACxBtG,KAAKmJ,QAAQ2I,cAAc,gBAAgBnF,MAAMC,QAAU,QAE/D,IAAIuhP,EAAcnuP,KAAKmJ,QAAQ2I,cAAc,0BACzCq8O,IAAgBA,EAAY/mO,cAAcpc,UAAUkB,SAAS,eAC7DiiP,EAAYnjP,UAAU0G,IAAI,UAE9B,IAAI6G,EAAgBxF,EAAEwF,cAClB61O,EAAW71O,EAAgBA,EAAcjI,aAAa,aAAe,KACnEiI,IAAmB,gBAAaA,EAAe,aAC/C,eAAkB61O,IAChB,KAAgBr7O,EAAEzM,OAAOgK,aAAa,eACtCtQ,KAAKquP,WAAYruP,KAAKgrG,QAAW,OAAQz1F,WACd,UAA3BvV,KAAK8xG,aAAap5E,OAAwB,gBAAangB,EAAe,UAAY,gBAAaA,EAAe,WAC9G,gBAAaA,EAAe,gCAAmC,gBAAaA,EAAe,mBACvF,gBAAaA,EAAe,eAAmBA,GAC/C,eAAkB,gBAAaA,EAAe,oBAClDvY,KAAKgpJ,WAAWugG,WAChBvpP,KAAKsf,OAAO,QAAwB,KAET,WAA3Btf,KAAK8xG,aAAap5E,MAClB14B,KAAKgpJ,WAAWslG,oBAGxBtuP,KAAKquP,UAAW,IAEpBtlB,EAAK7iO,UAAU69O,YAAc,SAAUhxO,GACnC,IAAI46F,EAAc,gBAAa56F,EAAEzM,OAAQ,UACzC,SAAKqnG,GAAeA,EAAYz8F,KAAOlR,KAAKmJ,QAAQ+H,IAAQ,gBAAa6B,EAAEzM,OAAQ,qBAC/E,eAAkBqnG,KAU1Bo7H,EAAK7iO,UAAU+lO,qBAAuB,SAAUsiB,GAC5C,IAAIh2N,EAAOv4B,KAAKwuP,eAChB,IAAM,eAAkBj2N,IAAmB,KAATA,IAAkB,eAAkBg2N,GAAgB,CAClF,IAAInuK,EAAW,eAAkBmuK,GAAiCz4L,KAAKjgC,MAAM0C,GAA3Bg2N,EAC9CvuP,KAAK84C,sBAAwBsnC,EAAQzvB,eACrCyvB,EAAQzvB,aAAaC,YAAc,GAEvC,IAAI91C,EAAOpV,OAAOoV,KAAKslE,GACvBpgF,KAAKqgF,qBAAsB,EAC3B,IAAK,IAAI5sE,EAAK,EAAG6sE,EAASxlE,EAAMrH,EAAK6sE,EAAO55E,OAAQ+M,IAAM,CACtD,IAAI5P,EAAMy8E,EAAO7sE,GACc,kBAAnBzT,KAAK,GAAK6D,IAAuB,eAAkB7D,KAAK,GAAK6D,IAarE7D,KAAK,GAAK6D,GAAOu8E,EAAQ,GAAKv8E,GAZ1BgC,MAAMi2B,QAAQ97B,KAAK,GAAK6D,KAAiB,YAARA,GACjC7D,KAAK0sO,iBACL,gBAAe1sO,KAAK,GAAK6D,IACzB7D,KAAKyuP,aAAaruK,EAAQ,GAAKv8E,GAAM7D,KAAK,GAAK6D,IAC/C7D,KAAKgrO,eAAgB,EACrBhrO,KAAK,GAAK6D,GAAOu8E,EAAQ,GAAKv8E,IAG9B,eAAO7D,KAAK,GAAK6D,GAAMu8E,EAAQ,GAAKv8E,IAOhD7D,KAAKqgF,qBAAsB,IAGnC0oJ,EAAK7iO,UAAUuoP,aAAe,SAAUC,EAAcpxN,GAsBlD,IArBA,IAAIqxN,EAAgBD,EAChBhmJ,EAAe1oG,KAAK0oG,eACpBkmJ,EAAU,SAAU7nP,GACpB,IAAI8nP,EAAWvxN,EAAQlE,QAAO,SAAU01N,GAAQ,OAAOpmJ,EACnDomJ,EAAKz8O,QAAUs8O,EAAc5pP,SAASgC,EAAEuQ,WAAY,KAAK,GAAK,QAC9Dw3O,EAAKz8O,QAAUs8O,EAAc5pP,SAASgC,EAAEuQ,WAAY,KAAKjF,SAAU,GAClE,eAAkBw8O,KACfnmJ,IACAmmJ,EAAW,eAAO,GAAIA,EAAU,IAAI,GACpCA,EAAS73H,OAAS23H,EAAc5pP,SAASgC,EAAEuQ,WAAY,KAAK0/G,QAE5D63H,EAASvxN,SAAWuxN,EAASvxN,QAAQ52B,QACrCqoP,EAAON,aAAaE,EAAc5pP,SAASgC,EAAEuQ,WAAY,KAAKgmB,QAASuxN,EAASvxN,SAChFqxN,EAAc5pP,SAASgC,EAAEuQ,WAAY,KAAO,eAAOu3O,EAAUF,EAAc5pP,SAASgC,EAAEuQ,WAAY,KAAM,IAAI,IAG5Gq3O,EAAc5pP,SAASgC,EAAEuQ,WAAY,KAAO,eAAOu3O,EAAUF,EAAc5pP,SAASgC,EAAEuQ,WAAY,KAAM,IAAI,KAIpHy3O,EAAS/uP,KACJ+G,EAAI,EAAGA,EAAI4nP,EAAcjoP,OAAQK,IACtC6nP,EAAQ7nP,IAOhBgiO,EAAK7iO,UAAU4hN,SAAW,WACtB,OAAQ,eAAkB9nN,KAAKkuG,kBAAoB,eAAkBluG,KAAKmuG,YAE9E46H,EAAK7iO,UAAU6mO,gBAAkB,SAAUzvM,GACvC,IAAI64D,EAAUn2F,KACd,OAAOs9B,EAAQu1B,MAAK,SAAUd,GAC1B,OAAIA,EAAIz0B,QACG64D,EAAQ42I,gBAAgBh7K,EAAIz0B,YAE7By0B,EAAIszC,WAAYtzC,EAAIwzC,sBAGtCwjI,EAAK7iO,UAAUmnO,oBAAsB,SAAU/vM,GAC3C,IAAI64D,EAAUn2F,KACd,OAAOs9B,EAAQu1B,MAAK,SAAUd,GAC1B,OAAIA,EAAIz0B,QACG64D,EAAQk3I,oBAAoBt7K,EAAIz0B,YAEjCy0B,EAAI53B,aAAc43B,EAAI3Z,qBAGxC2wL,EAAK7iO,UAAUk7I,gBAAkB,SAAUruI,GACvC,IAAIi8O,EAAW,eAAOj8O,EAAG,CAAEsB,QAAQ,IACnCrU,KAAK6N,QAAQ,aAAcmhP,IACH,IAApBA,EAAS36O,QACTtB,EAAEk8O,4BAGVlmB,EAAK7iO,UAAU0/N,eAAiB,SAAU7yN,GACtC,GAAIA,EAAEq7E,OAAQ,CAgBV,GAfkB,KAAdr7E,EAAEmG,UACElZ,KAAKipO,MACLjpO,KAAKsf,OAAO,QAAsB,CAAEhZ,OAAQyM,EAAEzM,OAAQ4oP,UAAU,IAChElvP,KAAKipO,MAAO,IAGRjpO,KAAK4lJ,aAAe5lJ,KAAK4lJ,YAAYK,aAAejmJ,KAAK4lJ,YAAYK,YAAY98I,UACjF,gBAAY,CAACnJ,KAAK4lJ,YAAYK,YAAY98I,QAASnJ,KAAK4lJ,YAAYK,YAAYkpG,gBAAiB,CAAC,YAAa,YAC/GnvP,KAAK4lJ,YAAYK,YAAY98I,QAAQ0X,UAAY,GAEhD7gB,KAAKmJ,QAAQ6B,UAAUkB,SAAS,gBACjClM,KAAKmJ,QAAQqc,UAIP,KAAdzS,EAAEmG,QAAgB,CAClB,IAAI0sI,EAAc5lJ,KAAK4lJ,YACvB,GAAIA,EAAa,CACb,IAAK5lJ,KAAK6zB,gBAAgBntB,OACtB,OAEJk/I,EAAYwpG,eACZxpG,EAAYypG,cAGF,KAAdt8O,EAAEmG,UACFlZ,KAAKipO,MAAO,GAEE,KAAdl2N,EAAEmG,SAAkBlZ,KAAKipO,OACzBjpO,KAAKsf,OAAO,QAAsB,CAAEhZ,OAAQyM,EAAEzM,OAAQ4oP,UAAU,IAChElvP,KAAKipO,MAAO,GAGF,KAAdl2N,EAAEmG,SACFlZ,KAAKsf,OAAO,QAAwBvM,IAG5Cg2N,EAAK7iO,UAAUmlI,iBAAmB,SAAUt4H,GACpC/S,KAAK+jP,YAAYhxO,IAChB/S,KAAKgrG,QAAuB,WAAbj4F,EAAEqT,QAAoC,UAAbrT,EAAEqT,QAAmC,eAAbrT,EAAEqT,QAC/C,QAAbrT,EAAEqT,QAAiC,aAAbrT,EAAEqT,SAI/BpmB,KAAKquP,UAAW,EAEhBruP,KAAKkrI,gBACY,cAAbn4H,EAAEqT,SACFrT,EAAE6F,iBACF5Y,KAAK4mF,SAET5mF,KAAKsf,OAAO,QAAmBvM,MAQvCg2N,EAAK7iO,UAAU07K,mBAAqB,SAAUr2J,GAC1CvrB,KAAKsvP,gBAAkB/jO,GAE3Bw9M,EAAK7iO,UAAUs3O,mBAAqB,WAChC,gBAAex9O,KAAKs9B,QAASt9B,KAAKyoG,2BAA4BzoG,MAC9D,gBAAeA,KAAKs9B,SACpBt9B,KAAKysP,oBACLzsP,KAAKsf,OAAO,OAAgB,KAEhCypN,EAAK7iO,UAAU6nP,sBAAwB,SAAU5yL,GACzCA,GAAOA,EAAImqK,WACXtlO,KAAKuvP,iBACLvvP,KAAKsf,OAAO,QAA8B,KAG1Ctf,KAAKuvP,kBAQbxmB,EAAK7iO,UAAU8wC,qBAAuB,WAClC,OAAOh3C,KAAK4vD,aAAax2B,QAAO,SAAU24B,GACtC,OAAOA,EAAIK,sBAOnB22K,EAAK7iO,UAAU4iG,aAAe,WAC1B,OAAO9oG,KAAKgmN,UAAYhmN,KAAKgmN,UAAY,eAAahmN,KAAKmJ,UAO/D4/N,EAAK7iO,UAAUqpP,eAAiB,WAU5B,GATAvvP,KAAKmpO,qBAAsB,EAC3BnpO,KAAK0sO,iBACL1sO,KAAK07O,2BACD17O,KAAK0oG,iBACL1oG,KAAK0qG,sBAAuB,GAEhC1qG,KAAKw9O,qBACLx9O,KAAK83O,iBAAiB93O,KAAK4vD,cAC3B5vD,KAAKgb,UACDhb,KAAK0oG,gBAAkB1oG,KAAKyoG,2BAA4B,CACxD,IAAI39F,EAAO9K,KAAKwoG,aAAa12F,cAAc,uBAAuB2E,WAClEzW,KAAK6oG,mBAAmB/2F,cAAc,IAAM,QAAwB2E,WAAa3L,EACjF9K,KAAKwoG,aAAa12F,cAAc,IAAM,QAAkB2E,WAAa3L,IAY7Ei+N,EAAK7iO,UAAUspP,YAAc,SAAUp1E,EAAuBxD,EAE9DC,EAAUE,GACN,GAAI/2K,KAAKyvP,aAAezvP,KAAKyvP,YAAY/oP,OAAQ,CAC7C,IAAIgpP,EAAU1vP,KAAKyvP,YAAYn8O,QAC/B,OAAOtT,KAAK2vP,yBAAyBD,EAASt1E,EAAuBxD,EAAkBC,EAAUE,GAGjG,OAAO/2K,KAAK4vP,kBACR5vP,KAAK4vP,kBAAkBt9H,IAAItyH,KAAMo6K,EAAuBxD,EAAkBC,GAAU,EAAOE,GAAU,MAYjHgyD,EAAK7iO,UAAU2pP,UAAY,SAAUz1E,EAErCxD,EAAkBC,EAAUE,GACxB,OAAO/2K,KAAK4vP,kBACR5vP,KAAK4vP,kBAAkBt9H,IAAItyH,KAAMo6K,EAAuBxD,EAAkBC,GAAU,EAAME,GAAU,MAY5GgyD,EAAK7iO,UAAU4pP,UAAY,SAAUC,EAAqBn5E,EAAkBo5E,EAAQj5E,GAChF,GAAI/2K,KAAKyvP,aAAezvP,KAAKyvP,YAAY/oP,OAAQ,CAC7C,IAAIgpP,EAAU1vP,KAAKyvP,YAAYn8O,QAC/B,OAAOtT,KAAKiwP,uBAAuBP,EAASK,EAAqBn5E,EAAkBo5E,EAAQj5E,GAG3F,OAAO/2K,KAAKkwP,gBAAkBlwP,KAAKkwP,gBAAgB59H,IAAItyH,KAAM+vP,EAAqBn5E,EAAkBo5E,EAAQj5E,GAAU,MAG9HgyD,EAAK7iO,UAAU+pP,uBAAyB,SAAUP,EAASK,EAAqBn5E,EAEhFo5E,EAAQj5E,GACJ,IAAI3tK,EAAQpJ,KACZ,GAAuB,IAAnB0vP,EAAQhpP,OAAc,CACtB,IAAIypP,EAAgBT,EAAQ1gI,QAExBohI,EAAsB58O,SAASw7B,eAAemhN,GAAelmH,cAAc,GAC3EomH,EAAgBD,EAAoBF,gBACpCE,EAAoBF,gBAAgB59H,IAAI89H,EAAqBL,EAAqBn5E,EAAkBo5E,EAAQj5E,GAC1Gp/H,QAAQhB,UACd,OAAO05M,EAAc31N,MAAK,SAAU41N,GAEhC,OADA15E,EAAsC,IAAnB84E,EAAQhpP,OACpB0C,EAAM6mP,uBAAuBP,EAASK,EAAqBn5E,EAAkB05E,EAAqBv5E,MAGjH,OAAO,MAEXgyD,EAAK7iO,UAAUypP,yBAA2B,SAAUD,EAASt1E,EAAuBxD,EAEpFC,EAAUE,GACN,IAAI3tK,EAAQpJ,KACZ,GAAuB,IAAnB0vP,EAAQhpP,OAAc,CACtB,IAAIypP,EAAgBT,EAAQ1gI,QAExBohI,EAAsB58O,SAASw7B,eAAemhN,GAAelmH,cAAc,GAC3EomH,EAAgBD,EAAoBR,kBACpCQ,EAAoBR,kBAAkBt9H,IAAI89H,EAAqBh2E,EAAuBxD,EAAkBC,GAAU,EAAOE,GAAU,KACvI,OAAOs5E,EAAc31N,MAAK,SAAU41N,GAEhC,OADA15E,EAAsC,IAAnB84E,EAAQhpP,OACpB0C,EAAMumP,yBAAyBD,EAASt1E,EAAuBxD,EAAkB05E,EAAqBv5E,MAGrH,OAAO,MASXgyD,EAAK7iO,UAAUqqP,YAAc,SAAU/+L,GAC/BxxD,KAAK6kO,aACL7kO,KAAK6kO,YAAY0rB,YAAY/+L,IAQrCu3K,EAAK7iO,UAAUsqP,eAAiB,WACxBxwP,KAAK6kO,aACL7kO,KAAK6kO,YAAY4rB,aAQzB1nB,EAAK7iO,UAAUwqP,iBAAmB,WAC1B1wP,KAAK6kO,aACL7kO,KAAK6kO,YAAY8rB,eAmBzB5nB,EAAK7iO,UAAU0qP,cAAgB,WACvB5wP,KAAK6kO,aACL7kO,KAAK6kO,YAAY+rB,iBAYzB7nB,EAAK7iO,UAAU2qP,cAAgB,SAAUr/L,GACjCxxD,KAAK6kO,aACL7kO,KAAK6kO,YAAYgsB,cAAcr/L,IAWvCu3K,EAAK7iO,UAAU4qP,kBAAoB,SAAUhlP,EAAGzJ,GACxCrC,KAAK+rP,qBACL/rP,KAAK+rP,oBAAoB+E,kBAAkBhlP,EAAGzJ,IAGtD0mO,EAAK7iO,UAAUs5O,cAAgB,WAC3B,IAAIrpJ,EAAUn2F,KACVgb,EAAU,WACVm7E,EAAQ20C,aAAa9vH,UACrBm7E,EAAQ17C,IAAI,QAAqBz/B,IAErChb,KAAKgtC,GAAG,QAAqBhyB,EAAShb,OAkB1C+oO,EAAK7iO,UAAU6qP,kBAAoB,WAC3B/wP,KAAKw0K,iBACLx0K,KAAKw0K,gBAAgBm8E,eAmB7B5nB,EAAK7iO,UAAU8qP,gBAAkB,WACzBhxP,KAAKw0K,iBACLx0K,KAAKw0K,gBAAgBi8E,aAQ7B1nB,EAAK7iO,UAAU+qP,mBAAqB,WAC5BjxP,KAAKs8E,iBACLt8E,KAAKs8E,gBAAgB20K,sBAQ7BloB,EAAK7iO,UAAUgrP,kBAAoB,WAC3BlxP,KAAKs8E,iBACLt8E,KAAKs8E,gBAAgB40K,qBAU7BnoB,EAAK7iO,UAAUirP,YAAc,SAAUC,GAC/BpxP,KAAKs8E,iBACLt8E,KAAKs8E,gBAAgB60K,YAAYC,IAWzCroB,EAAK7iO,UAAUmrP,kBAAoB,SAAU7mN,EAAY6nC,GACjDryE,KAAKs8E,iBACLt8E,KAAKs8E,gBAAgB+0K,kBAAkB7mN,EAAY6nC,IAO3D02J,EAAK7iO,UAAUorP,kBAAoB,WAC/B,OAAOtxP,KAAKy+O,mBAAqBz+O,KAAKy+O,kBAAkBvrG,QAO5D61F,EAAK7iO,UAAUqrP,qBAAuB,SAAUhyO,GAC5C,OAAOvf,KAAK0hL,qBAAqB33K,QAAQwV,IAAW,GAWxDwpN,EAAK7iO,UAAUolM,gBAAkB,SAAUkmD,EAAen/O,GACtDrS,KAAKiO,cAAcujP,EAAen/O,IAStC02N,EAAK7iO,UAAUoyC,IAAM,SAAUlkC,EAAMoX,GAEjCxrB,KAAKyxP,aAAezxP,KAAKyxP,aAAan5M,IAAIlkC,EAAMoX,QAAQ,GAO5Du9M,EAAK7iO,UAAUwrP,iBAAmB,SAAUvoP,GACpCnJ,KAAKmJ,QAAQ6B,UAAUkB,SAAS,aAChC/C,EAAQ6B,UAAU0G,IAAI,aAO9Bq3N,EAAK7iO,UAAUyrP,mBAAqB,WAChC,IAAIC,EAAkB5xP,KAAKmlN,gBAAgBnlN,KAAK62N,UAAUnwN,OAAS,GAAG6xB,KACtE,OAAOq5N,GAOX7oB,EAAK7iO,UAAU2rP,WAAa,WACxB,IAAIphP,EAAUzQ,KAAKwoG,aAAa12F,cAAc,IAAM,QAChDrB,EAAQu7F,cAAgBv7F,EAAQvB,eAChClP,KAAK8qI,aAAathC,gBAClB/4F,EAAQ9D,MAAMm/F,UAAY,SAUlCi9H,EAAK7iO,UAAU4rP,wBAA0B,SAAU3zO,GAC/C,IAAIolO,EAASvjP,KAAKs0D,0BAA0B,GAC5Cn2C,EAAyB,kBAAVA,EAAqBA,EAAM,GAAKolO,GAAUplO,EAEzD,IADA,IAAIqf,EAAOx9B,KAAKmlN,gBACPp+M,EAAI,EAAGA,EAAIy2B,EAAK92B,OAAQK,IAC7B,IAAIy2B,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKy6O,cAAev0N,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAK2wM,aAArF,CAGA,IAAI+pC,EAAUx0N,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKihB,KAAK,GAAKgrN,GAIzD,GAHIA,EAAOljP,MAAM,KAAKqG,OAAS,IAC3BsrP,EAAU,gBAA4BzO,EAAQ/lN,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKihB,OAE/Ey5N,IAAY7zO,EACZ,OAAOqf,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKjF,MAGhD,OAAQ,GAQZ02N,EAAK7iO,UAAU0tD,6BAA+B,SAAUzb,EAAOsa,GAC3D,IAAIl2B,EACJv8B,KAAKoiJ,YAAc,GACnBpiJ,KAAK23O,kBAAkB33O,KAAKs9B,SAE5B,IADA,IAAI4uN,EAAQlsP,KAAKoiJ,YACRr7I,EAAI,EAAGA,EAAImlP,EAAMxlP,OAAQK,IAC9B,IAAM0rD,GAAgBta,IAAU+zM,EAAMnnP,SAASgC,EAAEuQ,WAAY,KAAK6gC,OAC7Dsa,GAAgBy5L,EAAMnnP,SAASgC,EAAEuQ,WAAY,KAAK86C,mBAC/Cja,IAAU+zM,EAAMnnP,SAASgC,EAAEuQ,WAAY,KAAK8gC,gBAAkB,CAClE7b,EAAS2vN,EAAMnnP,SAASgC,EAAEuQ,WAAY,KACtC,MAGR,OAAOilB,GAQXwsM,EAAK7iO,UAAU+tD,2BAA6B,SAAU1Z,GAClD,IAAIhe,EACJv8B,KAAKoiJ,YAAc,GACnBpiJ,KAAK23O,kBAAkB33O,KAAKs9B,SAE5B,IADA,IAAI4uN,EAAQlsP,KAAKoiJ,YACRr7I,EAAI,EAAGA,EAAImlP,EAAMxlP,OAAQK,IAC1BwzC,IAAQ2xM,EAAMnnP,SAASgC,EAAEuQ,WAAY,KAAKijC,MAC1Che,EAAS2vN,EAAMnnP,SAASgC,EAAEuQ,WAAY,MAG9C,OAAOilB,GAOXwsM,EAAK7iO,UAAUuwM,mBAAqB,WAChC,GAAKz2M,KAAKqzD,gBAAkBrzD,KAAKq6C,eAAe/c,QAAQ52B,QAAW1G,KAAK85C,eAAej2C,IAAI6C,OAAQ,CAC/F,IAAI0zB,EAAQp6B,KAAK41M,aAAar9K,KAAKiC,eAAc,GACjD,OAAIx6B,KAAKm6B,YAAcn6B,KAAK41M,aAAar9K,KAAK45B,YAAcnyD,KAAKm6B,sBAAsB,OAC5En6B,KAAK41M,aAAar9K,KAAKgC,QAAQv6B,KAAKm6B,WAAYC,GAGnDp6B,KAAKm6B,sBAAsB,OACpBn6B,KAAKm6B,WAAW+e,aAAa9e,GAG7B,IAAI,OAAYp6B,KAAKm6B,WAAYC,GAAO8e,aAAa9e,GAIxE,MAAO,IAEX2uM,EAAK7iO,UAAU+rP,aAAe,WAC1B,IAAI7nJ,EAAY,OAAQA,UAAU9iF,cAClC,MAAO,6BAA6BpE,KAAKknF,IAS7C2+H,EAAK7iO,UAAU4nP,SAAW,SAAU/6O,GAC5B/S,KAAKiyP,iBACA,OAAOlrG,OAMRr0I,aAAa,OAAOq0I,OACpB,OAAOA,MAAQ,KACf/mJ,KAAK6tP,gBAAgB96O,GACrB/S,KAAKsf,OAAO,QAAkBvM,IAR9B,OAAOg0I,MAAQ/zI,YAAW,WACtB,OAAO+zI,MAAQ,OAChB,OAefgiF,EAAK7iO,UAAUgsP,UAAY,SAAUh/F,GACjC,MAAO,GAAKA,EAASlzJ,KAAKqrO,UAO9BtC,EAAK7iO,UAAUisP,mBAAqB,SAAU53M,GAC1C,IAAI63M,EACA50N,EAAO,GACP60N,EAAU,GAAG/+O,MAAMjK,KAAKrJ,KAAKwoG,aAAa12F,cAAc,QAAgBuU,UACxErmB,KAAK4oG,YACLprE,EAAO,GAAGlqB,MAAMjK,KAAKrJ,KAAK6oG,mBAAmB/2F,cAAc,QAAgBuU,UAC3EmX,EAAOA,EAAK8G,OAAO+tN,IAGnB70N,EAAO60N,EAEX,IAAK,IAAI5+O,EAAK,EAAGsqK,EAASvgJ,EAAM/pB,EAAKsqK,EAAOr3K,OAAQ+M,IAAM,CACtD,IAAI+oB,EAAMuhJ,EAAOtqK,GACjB,GAAI+oB,EAAIlsB,aAAa,cAAgBiqC,EAAK,CACtC63M,EAAS51N,EACT,OAGR,OAAO41N,GAOXrpB,EAAK7iO,UAAUosP,iBAAmB,WAE9B,IADA,IAAIjiM,EAAO,GACF58C,EAAK,EAAG7J,EAAK5J,KAAKoiJ,YAAa3uI,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC1D,IAAIs+C,EAAMnoD,EAAG6J,IACO,IAAhBs+C,EAAIz/B,SACJ+9B,EAAKp+C,KAAK8/C,GAGlB,OAAO1B,GAQX04K,EAAK7iO,UAAUqsP,gCAAkC,SAAUC,GACvD,GAAIxyP,KAAK64C,cACA74C,KAAKgnN,eAAoD,WAAnChnN,KAAKinN,iBAAiBC,WAA4BlnN,KAAKgnN,eAAgB,CAC9F,IAAIyrC,EAAW,GACuB,IAAlCD,EAAgBzoP,QAAQ,OACxByoP,EAAkBztP,SAASytP,EAAiB,IAAM,IAAMxyP,KAAKmJ,QAAQ+F,cAEzE,IAAIwjP,EAAmB1yP,KAAK2yP,sBAAwB3yP,KAAK8oG,eACzD,GAAI0pJ,EAAkBE,EAAkB,CACpC,IAAI9Z,EAAgB,EACpBA,EAAgB4Z,EAAkBxyP,KAAK2yP,sBACvCF,EAAY7Z,EAAgB54O,KAAK8oG,eAErC,GAAI2pJ,EAAW,EACX,OAAO1jP,KAAKyyC,MAAMixM,GAI9B,OAAO,GAEX1pB,EAAK7iO,UAAUysP,oBAAsB,WACjC,IAAIxnP,EAAS,EAgBb,GAfK,eAAkBnL,KAAK6oG,mBAAmB35F,gBAC3C/D,GAAUnL,KAAK6oG,mBAAmB35F,cAElClP,KAAKynG,UAAY,eAAkBznG,KAAKmJ,QAAQ2I,cAAc,cAAc5C,gBAC5E/D,GAAUnL,KAAKmJ,QAAQ2I,cAAc,cAAc5C,cAEnDlP,KAAK64C,cAAgB,eAAkB74C,KAAKmJ,QAAQ2I,cAAc,gBAAgB5C,gBAClF/D,GAAUnL,KAAKmJ,QAAQ2I,cAAc,gBAAgB5C,cAErDlP,KAAKotO,oBAAsB,eAAkBptO,KAAKmJ,QAAQ2I,cAAc,mBAAmB5C,gBAC3F/D,GAAUnL,KAAKmJ,QAAQ2I,cAAc,mBAAmB5C,cAExDlP,KAAK+4C,eAAiB/4C,KAAKg5C,cAAcu0D,eAAiB,eAAkBvtG,KAAKmJ,QAAQ2I,cAAc,oBAAoB5C,gBAC3H/D,GAAUnL,KAAKmJ,QAAQ2I,cAAc,oBAAoB5C,cAEzDlP,KAAKowD,WAAW1pD,OAAS,IAAM,eAAkB1G,KAAKmJ,QAAQ2I,cAAc,iBAAiB5C,cAC7F,IAAK,IAAInI,EAAI,EAAGA,EAAI/G,KAAKmJ,QAAQ0U,uBAAuB,gBAAgBnX,OAAQK,IAC5EoE,GAAUnL,KAAKmJ,QAAQ0U,uBAAuB,gBAAgB9Y,SAASgC,EAAEuQ,WAAY,KAAKpI,aAGlG,OAAO/D,GAUX49N,EAAK7iO,UAAU0sP,iBAAmB,SAAUC,EAAYC,GACpD,OAAO,OAAS1iM,WAAWyiM,EAAWz+O,KAAKkT,eAAewrO,EAAaD,EAAW16M,QAStF4wL,EAAK7iO,UAAU6sP,kBAAoB,SAAU7kM,GACzCluD,KAAKmnM,SAAU,EACfnnM,KAAKgzP,WAAW9kM,IASpB66K,EAAK7iO,UAAU+sP,gBAAkB,SAAU/kM,GACvCluD,KAAKmnM,SAAU,EACfnnM,KAAKgzP,WAAW9kM,IASpB66K,EAAK7iO,UAAUgtP,gBAAkB,SAAUhlM,GACvCluD,KAAKmnM,SAAU,EACfnnM,KAAKgzP,WAAW9kM,IAOpB66K,EAAK7iO,UAAU8sP,WAAa,SAAU9kM,GAElC,IAAIwoH,EAAO12K,KACPo6B,EAAQs8I,EAAKtgI,gBAAgB5b,eAAc,GAC3Cwb,GAAQ,IAAI,QAAa6f,aAAa,IAAI,OAAY,CAAE3H,IAAK,KAAO9zB,GACpEq2B,EAAUqF,KAAKjgC,MAAMmgB,EAAMzd,MAE3BuiD,EAAYhlB,KAAKjgC,MAAM71B,KAAK0a,aAAa,CAAC,gBAAiB,cAAe,eAAgB,eAAgB,iBAAkB,mBAAoB,aAChJ,iBAAkB,gBAAiB,UAAW,SAAU,oBACxDy4O,EAAU,CAAC,QAAS,aAAc,OAAQ,SAAU,UAAW,kBAAmB,kBAClF,WAAY,QAAS,QAAS,YAAa,kBAAmB,WAClEr4K,EAAUzgC,eAAe/c,QAAUmzB,EAAQjX,MAC3CshC,EAAUhhC,eAAe7B,OAASwY,EAAQvW,QAAUuW,EAAQvW,OAAO,GAAG,WAAa,GACnF4gC,EAAUjpB,aAAav0B,QAAUmzB,EAAQ2iM,OACzCt4K,EAAUx9C,QAAUt9B,KAAKqzP,cAAcv4K,EAAUx9C,QAAS61N,GAC1D,IAAIjsL,EAAOlnE,KAAKqK,cAAc,OAAQ,CAAE6G,GAAI,aAAc4D,OAAQ,kBAC9Dw+O,EAAYtzP,KAAKqK,cAAc,QAAS,CAAE6G,GAAI,YAAa0D,MAAO,CAAEtQ,KAAM,eAC9EgvP,EAAUn1O,MAAQ23C,KAAKsiH,UAAUt9F,GACjC5T,EAAKsrH,OAAS,OACdtrH,EAAK9gD,OAAS8nC,EACdgZ,EAAK18D,YAAY8oP,GACjB9/O,SAAS6B,KAAK7K,YAAY08D,GAC1BA,EAAKqsL,SACLrsL,EAAKj8D,UAQT89N,EAAK7iO,UAAUmtP,cAAgB,SAAU/1N,EAAS61N,GAC9C,IAAK,IAAIpsP,EAAI,EAAGA,EAAIu2B,EAAQ52B,OAAQK,IAAK,CACrC,IAAIw1B,EAASv8B,KAAK2zD,eAAer2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKijC,KACrEjd,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK84B,WAAa7T,EAAO6T,WACnD,eAAkB7T,EAAO+T,YAC1BhT,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKg5B,SAAW,QAE/ChT,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0K,SACpCsb,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0K,OAAS,eAAgBhiB,KAAK8xC,UAAUxU,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK0K,QAASsb,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKlD,KAAMpU,KAAKmnM,QAAS,SAEjL7pK,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,SACpCt9B,KAAKqzP,cAAc/1N,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKgmB,QAAS61N,GAGpE,IADA,IAAIr4O,EAAOpV,OAAOoV,KAAKwiB,EAAQv4B,SAASgC,EAAEuQ,WAAY,MAC7CmnB,EAAI,EAAGA,EAAI3jB,EAAKpU,OAAQ+3B,IACzB00N,EAAQppP,QAAQ+Q,EAAK/V,SAAS05B,EAAEnnB,WAAY,MAAQ,UAC7CgmB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKwD,EAAK/V,SAAS05B,EAAEnnB,WAAY,MAInF,OAAOgmB,GAEXyrM,EAAK7iO,UAAU4rC,UAAY,SAAU9vB,GACjC,MAA2B,kBAAb,EAAyB,eAAkBA,EAAOA,QAC5CA,EAAOC,SAAvBD,EAAOA,OAA2BA,GAM1C+mN,EAAK7iO,UAAU28O,uBAAyB,WACpC,IAAI2Q,EAAa,aACjB,OAAiC,IAA1BxzP,KAAK,GAAKwzP,IAOrBzqB,EAAK7iO,UAAUutP,eAAiB,SAAU5vP,EAAKilJ,GAC3C,IAAIt9H,EAAO,CACP6qB,YAAa,OAAQ9d,KAAMuwH,GAE/B9oJ,KAAK4/M,cACL5/M,KAAKsf,OAAO,QAAmBkM,GAC/BxrB,KAAKgb,WAMT+tN,EAAK7iO,UAAU4wC,kBAAoB,WAC/B92C,KAAK2N,WACL,IAAI+lP,EAAa1zP,KAAKo2C,gBAAgBuf,yBAClC+9L,EAAWj9M,WACXz2C,KAAKo2C,gBAAgBI,uBAAuB,IAC5Ck9M,EAAWh9M,aAGX12C,KAAKo2C,gBAAgBI,uBAAuB,CAAED,eAAe,KACzDv2C,KAAKw5K,eAAiBx5K,KAAKs4O,eAC3Bt4O,KAAK41M,aAAav8L,WAS9B0vN,EAAK7iO,UAAUytP,uBAAyB,SAAUx7M,GAC9C,IAAI/I,EAASpvC,KAAK2lJ,uBAAuBxtG,GACzC,GAAI/I,EAAQ,CACR,IAAI9oC,EAAS8oC,EAAOt9B,cAAc,oBAC9B8hP,EAAY5zP,KAAKmJ,QAAQ2I,cAAc,mBAC3C,GAAIxL,GAAUstP,EAAW,CACrB,IAAIh7C,EAAU54M,KAAKmJ,QAAQ6D,wBACvB6rM,EAAUvyM,EAAO0G,wBACjB4mP,IACKA,EAAUxkP,YAAcypM,EAAQtnL,MAASqnL,EAAQrnL,MAClDqiO,EAAUjnP,MAAM7B,MAAS+tM,EAAQtnL,MAAQqiO,EAAUxkP,YAAewpM,EAAQ9tM,MAAMwM,WAAa,KAG7Fs8O,EAAUjnP,MAAM7B,MAAQ+tM,EAAQtnL,MAAQqnL,EAAQ9tM,MAAMwM,WAAa,SAYvFyxN,EAAK7iO,UAAUyhJ,gBAAkB,SAAUksG,GACvC,IAAI31D,EAAel+L,KAAKiyK,eAAiBjyK,KAAKiyK,cAAcksB,eAAiBn+L,KAAKiyK,cAAcksB,cAAcpwL,QAC9G,GAAImwL,GAAgBl+L,KAAK,WACrBA,KAAKiyK,cAAcksB,cAAc,WAAan+L,KAAKiyK,cAAcksB,cAAc,WAC1E75J,OAAOtkC,KAAK,YACjBA,KAAKiyK,cAAcksB,cAAcx2C,gBAAgBksG,GACjD7zP,KAAK,gBAAamR,MAEjB,CACD,IAAI69H,EAAU,UACdhvI,KAAKsf,OAAO,sBAAuBtf,KAAK,GAAKgvI,IAC7ChvI,KAAKsR,qBAAqBuiP,KASlC9qB,EAAK7iO,UAAU4tP,YAAc,SAAUp/L,GACnC10D,KAAK+zP,kBAAkBr/L,IAQ3Bq0K,EAAK7iO,UAAU8tP,iBAAmB,SAAUt/L,GACxC10D,KAAKi0P,sBAAsBv/L,IAE/Bq0K,EAAK7iO,UAAU+tP,sBAAwB,SAAUv/L,GAC7C,IAAIyhC,EAAUn2F,KACd,GAAKA,KAAKk0P,gBAUN,IAFA,IAAIC,EAAa,CAAC,OAAuB,OAAyB,QAC9DC,EAAWp0P,KAAKs0D,0BAA0B,GACrCvtD,EAAI,EAAGA,EAAIotP,EAAWztP,OAAQK,IAC/B2tD,EAAQy/L,EAAWpvP,SAASgC,EAAEuQ,WAAY,OAC1C,eAAetX,KAAM00D,EAASy/L,EAAWpvP,SAASgC,EAAEuQ,WAAY,KAAM88O,QAX9Ep0P,KAAKk0P,gBAAkBxuP,OAAO6mO,OAAO,CAAE53K,aAAc,GAAIE,eAAgB,GAAID,eAAgB,IAAMF,GACnG1hD,YAAW,WACPmjF,EAAQ49J,kBAAkB59J,EAAQ+9J,iBAClC/9J,EAAQ+9J,gBAAkB,OAC3Bl0P,KAAK4rO,eAYhB7C,EAAK7iO,UAAU6tP,kBAAoB,SAAUr/L,GACzC,IAAIyhC,EAAUn2F,KACVo0P,EAAWp0P,KAAKs0D,0BAA0B,GAC9CI,EAAUhvD,OAAO6mO,OAAO,CAAE53K,aAAc,GAAIE,eAAgB,GAAID,eAAgB,IAAMF,GACtF,IAAI9d,EAAU52C,KAAKo2C,gBAAgB0e,YAAYJ,EAAS0/L,EAAU,GAAIp0P,KAAKo2C,gBAAgB5b,gBAAgBC,iBACvGz6B,KAAKo2C,gBAAgB+b,WACrBvb,EAAQlc,MAAK,WACTy7D,EAAQk+J,gBAIZr0P,KAAKq0P,cAGbtrB,EAAK7iO,UAAUmuP,WAAa,WACxB,IAAIl+J,EAAUn2F,KACVs0P,EAAYx+L,KAAKjgC,MAAMigC,KAAKsiH,UAAUp4K,KAAK43K,0BAC3Cr9I,EAAUv6B,KAAKo2C,gBAAgB7b,QAAQ,GAAIv6B,KAAKo2C,gBAAgB5b,gBAAgBC,iBACpFF,EAAQG,MAAK,SAAU3nB,GACnBojF,EAAQo+J,YAAYxhP,EAAEhP,OAAQuwP,EAAWvhP,EAAE6nB,WAGnDmuM,EAAK7iO,UAAUsuP,iBAAmB,SAAUh4N,GACxC,IAAIkH,EAAK1jC,KAAKmyP,mBAAmB31N,EAAI+d,KACrC,gBAAO7W,IAEXqlM,EAAK7iO,UAAUquP,YAAc,SAAUxwP,EAAQuwP,EAAW15N,GAatD,IAZA,IAWmB65N,EAXft+J,EAAUn2F,KACV+7K,EAAS/7K,KAAKmlN,gBACdivC,EAAWp0P,KAAKs0D,0BAA0B,GAC1CogM,EAAU,SAAU3tP,GACfhD,EAAOq1B,QAAO,SAAUrmB,GAAK,OAAOA,EAAE,GAAKqhP,KAAcr4E,EAAOh3K,SAASgC,EAAEuQ,WAAY,KAAKihB,KAAK,GAAK67N,MAAc1tP,SACrHiuP,EAAOH,iBAAiBz4E,EAAOh3K,SAASgC,EAAEuQ,WAAY,MACtDykK,EAAOzpK,OAAOvL,EAAG,GACjBA,KAEJ0tP,EAAU1tP,GAEV4tP,EAAS30P,KACJ+G,EAAI,EAAGA,EAAIg1K,EAAOr1K,OAAQK,IAC/B2tP,EAAQ3tP,GACRA,EAAI0tP,EAER,IAAIG,EAAU,SAAU7tP,GACpB,IAAI8tP,EACJP,EAAUl7N,QAAO,SAAUrmB,GACnBA,EAAE,GAAKqhP,KAAcrwP,EAAOgB,SAASgC,EAAEuQ,WAAY,KAAK,GAAK88O,KACzDrhP,IAAMhP,EAAOgB,SAASgC,EAAEuQ,WAAY,MACpC6+E,EAAQkpJ,WAAWt7O,EAAOgB,SAASgC,EAAEuQ,WAAY,KAAK,GAAK88O,GAAWrwP,EAAOgB,SAASgC,EAAEuQ,WAAY,MAExGu9O,GAAa,MAGhBA,GACDC,EAAOC,iBAAiBhxP,EAAOgB,SAASgC,EAAEuQ,WAAY,KAAMvQ,IAGhE+tP,EAAS90P,KACb,IAAS+G,EAAI,EAAGA,EAAIhD,EAAO2C,OAAQK,IAC/B6tP,EAAQ7tP,GAEZ/G,KAAK6zB,gBAAkB9vB,EACvB,IAAIy5B,EAAO,GAAGlqB,MAAMjK,KAAKrJ,KAAK2sG,kBAAkB9uF,uBAAuB,SACvE,gBAAc7d,KAAMA,KAAKmlN,gBAAiB3nL,GAC1C,gBAAex9B,MACXA,KAAK64C,aACL74C,KAAKsf,OAAO,QAA4B,CAAEC,OAAQ,QAASmB,WAAY,CAAEwxJ,kBAAmBt3I,MAGpGmuM,EAAK7iO,UAAU6uP,iBAAmB,SAAUx8N,EAAMlmB,GAC9C,IAAImqB,EAAM,IAAI,OAAYx8B,KAAK21C,eAAgB,KAAM31C,MACjDymB,EAAQ,IAAI,QAAkBzmB,MAC9Bg1P,EAAYvuO,EAAM4nF,aAAa,CAAC91E,IAChCmL,EAAKlH,EAAInjB,OAAO27O,EAAU,GAAIh1P,KAAK4vD,cACvC5vD,KAAKi1P,aAAaD,EAAU,GAAI3iP,GAChC,IAAI4rF,EAAQj+F,KAAK2sG,kBAAkB76F,cAAc,QACjD,GAAImsF,EAAMnsF,cAAc,eAAgB,CACpC,IAAIsrN,EAAWn/H,EAAMnsF,cAAc,eACnCsrN,EAASjiJ,WAAW2Y,YAAYspI,GAC5Bp9N,KAAK4oG,YAAc5oG,KAAKmJ,QAAQ2I,cAAc,uBAC9C9R,KAAKmJ,QAAQ2I,cAAc,sBAAsB9G,UAAUC,OAAO,qBAItEgzF,EADAj+F,KAAK4oG,YAAcv2F,EAAQrS,KAAK4oG,WACxB5oG,KAAK6oG,mBAAmB/2F,cAAc,QAGtC9R,KAAKwoG,aAAa12F,cAAc,QAE5CmsF,EAAQj+F,KAAKwoG,aAAa12F,cAAc,QACxCmsF,EAAMzzF,YAAYk5B,IAEtBqlM,EAAK7iO,UAAU+uP,aAAe,SAAUz4N,EAAKnqB,GACzCrS,KAAKmlN,gBAAgB7yM,OAAOD,EAAO,EAAGmqB,IAM1CusM,EAAK7iO,UAAUgvP,gCAAkC,WAE7C,IADA,IAAI13N,EAAOx9B,KAAKmlN,gBACPp+M,EAAI,EAAG2hB,EAAM8U,EAAK92B,OAAQK,EAAI2hB,EAAK3hB,KACnCy2B,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAK6sM,WAAa3mL,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKm4F,iBACG,SAAhFzvG,KAAKmyP,mBAAmB30N,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKijC,KAAK5tC,MAAMC,QACvE4wB,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SAAU,EAG3CkL,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKgb,SAAU,GAWvDy2M,EAAK7iO,UAAU4K,SAAW,SAAUqN,GAChC,OAAIne,KAAK4Q,oBACE,OAAmBE,SAASqN,GAEhCA,GAOX4qN,EAAK7iO,UAAUivP,UAAY,SAAUhqP,GAUjC,OAFIA,EAPCunC,OAAO0iN,UAAUjqP,KAAoC,IAAzBA,EAAOpB,QAAQ,KAGtC2oC,OAAO0iN,UAAUjqP,IAA2B,SAAhBnL,KAAKmL,OAI9BnL,KAAKmL,OAHLpG,SAASoG,EAAQ,IAHjBpG,SAASoG,EAAQ,IAAM,IAAMnL,KAAKmJ,QAAQ+F,aAQhD/D,GAOX49N,EAAK7iO,UAAUmvP,sBAAwB,WACnC,OAAOr1P,KAAKw5K,cAAcy8C,YAO9B8S,EAAK7iO,UAAUovP,qBAAuB,WAClC,OAAOt1P,KAAKs4O,aAAariB,YAO7B8S,EAAK7iO,UAAUqvP,sBAAwB,WACnC,OAAOv1P,KAAK6oG,mBAAmB/2F,cAAc,SAOjDi3N,EAAK7iO,UAAUsvP,uBAAyB,WACpC,OAAOx1P,KAAKwoG,aAAa12F,cAAc,SAO3Ci3N,EAAK7iO,UAAUuvP,qBAAuB,WAClC,OAAOz1P,KAAK6oG,mBAAmB/2F,cAAc,SAOjDi3N,EAAK7iO,UAAUwvP,0BAA4B,WACvC,OAAO11P,KAAKwoG,aAAa12F,cAAc,SAO3Ci3N,EAAK7iO,UAAUyvP,0BAA4B,WACvC,OAAO31P,KAAK6oG,mBAAmB/2F,cAAc,SAOjDi3N,EAAK7iO,UAAU0vP,2BAA6B,WACxC,OAAO51P,KAAKwoG,aAAa12F,cAAc,SAO3Ci3N,EAAK7iO,UAAU4zN,2BAA6B,SAAU+7B,GAC9C71P,KAAK++L,cACL/+L,KAAK++L,aAAagT,iBAAiB8jD,GAAsC,aAA1B71P,KAAK+mN,mBAQ5DgiB,EAAK7iO,UAAU2zN,yBAA2B,SAAUg8B,GAC5C71P,KAAK2oP,YACL3oP,KAAK2oP,WAAWmN,eAAeD,GAAsC,aAA1B71P,KAAK+mN,mBAQxDgiB,EAAK7iO,UAAU6vP,kCAAoC,SAAUF,GACrD71P,KAAK+rP,qBACL/rP,KAAK+rP,oBAAoBiK,wBAAwBH,GAAsC,aAA1B71P,KAAK+mN,mBAQ1EgiB,EAAK7iO,UAAU+vP,yBAA2B,WAClCj2P,KAAKooG,kBACLpoG,KAAK85N,4BAA2B,IAQxCiP,EAAK7iO,UAAUgwP,uBAAyB,WAChCl2P,KAAKooG,kBACLpoG,KAAK65N,0BAAyB,IAQtCkP,EAAK7iO,UAAU86O,yBAA2B,SAAUmV,GAGhD,IAFA,IAAI9lM,EAAO,GACP+lM,EAAWD,EAAsBn2P,KAAK4vD,aAAe5vD,KAAKoiJ,YACrD3uI,EAAK,EAAG4iP,EAAaD,EAAU3iP,EAAK4iP,EAAW3vP,OAAQ+M,IAAM,CAClE,IAAIs+C,EAAMskM,EAAW5iP,GACjBs+C,EAAIz/B,SACJ+9B,EAAKp+C,KAAK8/C,GAGlB,OAAO1B,GAEX04K,EAAK7iO,UAAUymO,uBAAyB,WAChC3sO,KAAK0wD,yBAA2B1wD,KAAKg5C,cAAc1b,QAAQ52B,SAAW1G,KAAKg5C,cAAcid,4BACrFj2D,KAAKg5C,cAAcqY,mBACvBrxD,KAAK6Q,cAAc,CAAEmoC,cAAe,CAAEid,2BAA2B,KAAU,IAInF,GAAW,CACP,eAAS,KACV8yK,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,iBAAa,GAChC,GAAW,CACP,eAAS,KACV6iO,EAAK7iO,UAAW,eAAW,GAC9B,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,oBAAgB,GACnC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,mBAAe,GAClC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,0BAAsB,GACzC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,2BAAuB,GAC1C,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,eAAQ,GAAI,KACb6iO,EAAK7iO,UAAW,wBAAoB,GACvC,GAAW,CACP,eAAQ,GAAI,KACb6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,mBAAe,GAClC,GAAW,CACP,eAAQ,GAAI,KACb6iO,EAAK7iO,UAAW,oBAAgB,GACnC,GAAW,CACP,eAAQ,GAAI,KACb6iO,EAAK7iO,UAAW,wBAAoB,GACvC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,4BAAwB,GAC3C,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,4BAAwB,GAC3C,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,kCAA8B,GACjD,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,+BAA2B,GAC9C,GAAW,CACP,eAAQ,GAAI,KACb6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,oBAAgB,GACnC,GAAW,CACP,eAAS,aACV6iO,EAAK7iO,UAAW,gBAAY,GAC/B,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,yBAAqB,GACxC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,wBAAoB,GACvC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,eAAQ,GAAI,KACb6iO,EAAK7iO,UAAW,oBAAgB,GACnC,GAAW,CACP,eAAQ,GAAI,KACb6iO,EAAK7iO,UAAW,8BAA0B,GAC7C,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,gBAAU,IACX6iO,EAAK7iO,UAAW,wBAAoB,GACvC,GAAW,CACP,eAAQ,GAAI,KACb6iO,EAAK7iO,UAAW,yBAAqB,GACxC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,eAAS,eACV6iO,EAAK7iO,UAAW,wBAAoB,GACvC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,wBAAoB,GACvC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,2BAAuB,GAC1C,GAAW,CACP,eAAQ,GAAI,KACb6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,eAAQ,GAAI,KACb6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,2BAAuB,GAC1C,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,eAAW,GAC9B,GAAW,CACP,eAAQ,GAAI,KACb6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,eAAQ,GAAI,KACb6iO,EAAK7iO,UAAW,oBAAgB,GACnC,GAAW,CACP,eAAW,GAAI,KAChB6iO,EAAK7iO,UAAW,kBAAc,GACjC,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,yBAAqB,GACxC,GAAW,CACP,eAAQ,GAAI,KACb6iO,EAAK7iO,UAAW,6BAAyB,GAC5C,GAAW,CACP,gBAAS,IACV6iO,EAAK7iO,UAAW,yBAAqB,GACxC,GAAW,CACP,eAAS,SACV6iO,EAAK7iO,UAAW,cAAU,GAC7B,GAAW,CACP,eAAS,SACV6iO,EAAK7iO,UAAW,aAAS,GAC5B,GAAW,CACP,eAAS,YACV6iO,EAAK7iO,UAAW,iBAAa,GAChC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,mBAAe,GAClC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,2BAAuB,GAC1C,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,iBAAa,GAChC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,mBAAe,GAClC,GAAW,CACP,eAAS,aACV6iO,EAAK7iO,UAAW,iBAAa,GAChC,GAAW,CACP,eAAS,aACV6iO,EAAK7iO,UAAW,0BAAsB,GACzC,GAAW,CACP,eAAS,KACV6iO,EAAK7iO,UAAW,kBAAc,GACjC,GAAW,CACP,eAAS,OACV6iO,EAAK7iO,UAAW,iBAAa,GAChC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,aAAS,GAC5B,GAAW,CACP,eAAS,QACV6iO,EAAK7iO,UAAW,oBAAgB,GACnC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,mBAAe,GAClC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,eAAW,GAC9B,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,wBAAoB,GACvC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,eAAS,IACV6iO,EAAK7iO,UAAW,kBAAc,GACjC,GAAW,CACP,eAAS,IACV6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,eAAS,KACV6iO,EAAK7iO,UAAW,gBAAY,GAC/B,GAAW,CACP,eAAS,QACV6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,eAAS,KACV6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,eAAS,KACV6iO,EAAK7iO,UAAW,kCAA8B,GACjD,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,eAAW,GAC9B,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,iBAAa,GAChC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,YAAQ,GAC3B,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,oBAAgB,GACnC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,mBAAe,GAClC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,iBAAa,GAChC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,yBAAqB,GACxC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,mBAAe,GAClC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,oBAAgB,GACnC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,mBAAe,GAClC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,oBAAgB,GACnC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,yBAAqB,GACxC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,wBAAoB,GACvC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,kBAAc,GACjC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,kBAAc,GACjC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,qBAAiB,GACpC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,mBAAe,GAClC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,wBAAoB,GACvC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,8BAA0B,GAC7C,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,iCAA6B,GAChD,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,mCAA+B,GAClD,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,6BAAyB,GAC5C,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,4BAAwB,GAC3C,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,0BAAsB,GACzC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,gCAA4B,GAC/C,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,yBAAqB,GACxC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,2BAAuB,GAC1C,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,yBAAqB,GACxC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,0BAAsB,GACzC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,oBAAgB,GACnC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,eAAW,GAC9B,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,eAAW,GAC9B,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,oBAAgB,GACnC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,+BAA2B,GAC9C,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,gCAA4B,GAC/C,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,gBAAY,GAC/B,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,mBAAe,GAClC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,mBAAe,GAClC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,yBAAqB,GACxC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,iBAAa,GAChC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,oBAAgB,GACnC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,gBAAY,GAC/B,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,gBAAY,GAC/B,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,iBAAa,GAChC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,mBAAe,GAClC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,gBAAY,GAC/B,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,kBAAc,GACjC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,kBAAc,GACjC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,wBAAoB,GACvC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,kBAAc,GACjC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,mBAAe,GAClC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,sBAAkB,GACrC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,6BAAyB,GAC5C,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,uBAAmB,GACtC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,yBAAqB,GACxC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,0BAAsB,GACzC,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,2BAAuB,GAC1C,GAAW,CACP,kBACD6iO,EAAK7iO,UAAW,6BAAyB,GAC5C6iO,EAAOgD,EAAS,GAAW,CACvB,QACDhD,GACIA,EAnvMc,CAovMvB,S,oCC/pNF,8DAAIxjO,EAAwC,WACxC,IAAIC,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAaxCI,EAA0C,SAAUC,EAAYC,EAAQzC,EAAK0C,GAC7E,IAA2HtE,EAAvHuE,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOb,OAAOkB,yBAAyBN,EAAQzC,GAAO0C,EACrH,GAAuB,kBAAZM,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQzC,EAAK0C,QACpH,IAAK,IAAIQ,EAAIV,EAAWK,OAAS,EAAGK,GAAK,EAAGA,KAAS9E,EAAIoE,EAAWU,MAAIJ,GAAKH,EAAI,EAAIvE,EAAE0E,GAAKH,EAAI,EAAIvE,EAAEqE,EAAQzC,EAAK8C,GAAK1E,EAAEqE,EAAQzC,KAAS8C,GAChJ,OAAOH,EAAI,GAAKG,GAAKjB,OAAOsB,eAAeV,EAAQzC,EAAK8C,GAAIA,GAM5D2vP,EAAQ,UACRl/L,EAAW,sBACXm/L,EAAQ,UACRC,EAAgB,SAChBh4J,EAAQ,UACRC,EAAS,qBACTg4J,EAAc,iBACdC,EAAsB,gBACtBlvP,EAAM,QACNk3F,EAAU,qBACVniF,EAAgB,CAAC,QAAS,QAAS,QAAS,WAAY,WAAY,OAAQ,QAAS,MAYrFo6O,EAA0B,SAAU/tP,GASpC,SAAS+tP,EAASztP,EAASC,GACvB,IAAIC,EAAQR,EAAOS,KAAKrJ,KAAMkJ,EAASC,IAAYnJ,KAKnD,OAJAoJ,EAAM+T,WAAY,EAClB/T,EAAMwtP,cAAe,EACrBxtP,EAAMytP,gBAAiB,EACvBztP,EAAM0tP,YAAa,EACZ1tP,EAqkBX,OAnlBA7D,EAAUoxP,EAAU/tP,GAgBpB+tP,EAASzwP,UAAU6wP,YAAc,SAAU/gN,EAAOghN,GAC9C,IACI92J,EACA+2J,EAAYj3P,KAAK4/F,aAAa/hF,uBAAuB04O,GAAO,GAC5D,UACAr2J,EAAalgG,KAAK4/F,aAAa/hF,uBAAuB4gF,GAAQ,IAEpD,UAAVzoD,GACIihN,IACAA,EAAUjsP,UAAUC,OAAOurP,GAC3BS,EAAUjsP,UAAU0G,IAAI4kP,IAExBp2J,IACAA,EAAWl1F,UAAUC,OAAOyrP,GAC5Bx2J,EAAWl1F,UAAU0G,IAAI+kP,IAEjB,OACZz2P,KAAKmJ,QAAQ21F,SAAU,GAClB9+F,KAAKmJ,QAAQ8lN,UAAY,eAAQjvN,KAAKmJ,QAAS,SAAW,eAAQnJ,KAAKmJ,QAAS,QAAQ6B,UAAUkB,SAAS,qBAAuBlM,KAAK82P,aAAeE,GACvJh3P,KAAKmJ,QAAQ21F,SAAU,EACvB9+F,KAAK82P,YAAa,IAEb92P,KAAKmJ,QAAQ8lN,UAAY,eAAQjvN,KAAKmJ,QAAS,SAAW,eAAQnJ,KAAKmJ,QAAS,QAAQ6B,UAAUkB,SAAS,sBAChHlM,KAAK82P,YAAa,IAGP,YAAV9gN,GACDihN,GACA,gBAAY,CAACA,GAAY,CAACX,EAAOE,IAEjCt2J,GACA,gBAAY,CAACA,GAAa,CAACu2J,EAAaC,IAEhC,QACZ12P,KAAKmJ,QAAQ21F,SAAU,GAClB9+F,KAAKmJ,QAAQ8lN,UAAY,eAAQjvN,KAAKmJ,QAAS,SAAW,eAAQnJ,KAAKmJ,QAAS,QAAQ6B,UAAUkB,SAAS,qBAAuBlM,KAAK82P,aAAeE,GACvJh3P,KAAKmJ,QAAQ21F,SAAU,EACvB9+F,KAAK82P,YAAa,IAEb92P,KAAKmJ,QAAQ8lN,UAAY,eAAQjvN,KAAKmJ,QAAS,SAAW,eAAQnJ,KAAKmJ,QAAS,QAAQ6B,UAAUkB,SAAS,sBAChHlM,KAAK82P,YAAa,KAIlBG,IACAA,EAAUjsP,UAAUC,OAAOqrP,GAC3BW,EAAUjsP,UAAU0G,IAAI8kP,IAExBt2J,IACAA,EAAWl1F,UAAUC,OAAOwrP,GAC5Bv2J,EAAWl1F,UAAU0G,IAAIglP,IAEjB,QACZ12P,KAAKmJ,QAAQ+tP,eAAgB,EAC7Bl3P,KAAKk3P,eAAgB,IAG7BP,EAASzwP,UAAUi6D,aAAe,SAAU7rD,GACxC,GAA6B,UAAzBA,EAAMhO,OAAOgP,SAAuBtV,KAAK62P,eAKzC,OAJI72P,KAAKsvD,OACLtvD,KAAK+2P,YAAY/2P,KAAK8+F,QAAU,QAAU,gBAE9C9+F,KAAK62P,gBAAiB,GAGG,SAAzBviP,EAAMhO,OAAOgP,SAA+C,UAAzBhB,EAAMhO,OAAOgP,UAChDtV,KAAK62P,gBAAiB,GAEtB72P,KAAK42P,eACL52P,KAAKy/F,kBACLz/F,KAAK42P,cAAe,GAEpB52P,KAAKk3P,eACLl3P,KAAK+2P,YAAY/2P,KAAK8+F,QAAU,QAAU,WAC1C9+F,KAAKk3P,eAAgB,EACrBl3P,KAAKmJ,QAAQ+tP,eAAgB,GAExBl3P,KAAK8+F,SACV9+F,KAAK+2P,YAAY,WACjB/2P,KAAK8+F,SAAU,IAGf9+F,KAAK+2P,YAAY,SACjB/2P,KAAK8+F,SAAU,GAEnB,IAAIq4J,EAAkB,CAAEr4J,QAAS9+F,KAAKo3P,qBAAoB,GAAQ9iP,MAAOA,GACzEtU,KAAK6N,QAAQ,SAAUspP,GACvB7iP,EAAMoQ,mBAOViyO,EAASzwP,UAAUgS,QAAU,WACzB,IAAI9O,EAAQpJ,KACRq/F,EAAUr/F,KAAK4/F,aACnBh3F,EAAO1C,UAAUgS,QAAQ7O,KAAKrJ,MAC1BA,KAAKq/F,UACLA,EAAUr/F,KAAKq/F,QACVr/F,KAAK8d,UACN9d,KAAK6gF,eAEY,UAAjB7gF,KAAKsV,SACDtV,KAAK4/F,cAAgBP,EAAQlkB,YAC7BkkB,EAAQlkB,WAAWlwD,aAAajrB,KAAKmJ,QAASk2F,GAElD,eAAOA,GACPr/F,KAAKmJ,QAAQ21F,SAAU,EACnB9+F,KAAKk3P,gBACLl3P,KAAKmJ,QAAQ+tP,eAAgB,GAEjC,CAAC,OAAQ,QAAS,YAAY53J,SAAQ,SAAUz7F,GAC5CuF,EAAMD,QAAQqH,gBAAgB3M,QAIlC,CAAC,SAASy7F,SAAQ,SAAUz7F,GACxBw7F,EAAQ7uF,gBAAgB3M,MAE5Bw7F,EAAQ3uF,UAAY,GACpB1Q,KAAKmJ,QAAUk2F,EACXr/F,KAAKu/F,aACL,CAAC,YAAa,aAAc,SAASD,SAAQ,SAAUz7F,GACnDuF,EAAMD,QAAQ6B,UAAU0G,IAAI7N,MAEhC,gBAAS,gBAAiB,CAAC7D,MAAOA,KAAKmJ,aAKvDwtP,EAASzwP,UAAUs5F,aAAe,WAC9Bx/F,KAAKmd,WAAY,GAErBw5O,EAASzwP,UAAUu5F,gBAAkB,WACjC,IAAIJ,EAAUr/F,KAAK4/F,aACfP,GACAA,EAAQr0F,UAAUC,OAAO,WAE7BjL,KAAKmd,WAAY,GAQrBw5O,EAASzwP,UAAUsU,cAAgB,WAC/B,MAAO,YAQXm8O,EAASzwP,UAAUuU,eAAiB,WAChC,OAAOza,KAAK0a,aAAa,CAAC,UAAW,mBAEzCi8O,EAASzwP,UAAU05F,WAAa,WAC5B,OAAI5/F,KAAKmJ,SAAWnJ,KAAKmJ,QAAQie,cACtBpnB,KAAKmJ,QAAQie,cAAcA,cAG3B,MAGfuvO,EAASzwP,UAAUw5F,SAAW,WAC1B,OAAI1/F,KAAKmJ,QACEnJ,KAAKmJ,QAAQie,cAGb,MAGfuvO,EAASzwP,UAAUwD,WAAa,WACxB,eAAkB1J,KAAK8/F,uBACvB9/F,KAAK8/F,oBAAsB9/F,KAAK8+F,SAEhC9+F,KAAKsE,MACLtE,KAAKmJ,QAAQoH,aAAa,OAAQvQ,KAAKsE,MAEvCtE,KAAKme,QACLne,KAAKmJ,QAAQoH,aAAa,QAASvQ,KAAKme,OACpCne,KAAKsvD,OAA+B,mBAAftvD,KAAKme,QAAsC,IAAfne,KAAKme,OACtDne,KAAK6Q,cAAc,CAAE,SAAW,IAAQ,IAG5C7Q,KAAK8+F,SACL9+F,KAAK+2P,YAAY,SAAS,GAE1B/2P,KAAKk3P,eACLl3P,KAAK+2P,cAEL/2P,KAAK8d,UACL9d,KAAKigG,eAGb02J,EAASzwP,UAAU65F,YAAc,WAC7B,IAAIV,EAAUr/F,KAAKmJ,QAAQie,cACtBi4E,EAAQr0F,UAAUkB,SAASwyF,KAC5BW,EAAUr/F,KAAKqK,cAAc,MAAO,CAChCC,UAAWo0F,IAEf1+F,KAAKmJ,QAAQgyE,WAAWlwD,aAAao0E,EAASr/F,KAAKmJ,UAEvD,IAAImpE,EAAQtyE,KAAKqK,cAAc,QAAS,CAAEuK,MAAO,CAAEurF,IAAKngG,KAAKmJ,QAAQ+H,MACjE+lP,EAAYj3P,KAAKqK,cAAc,OAAQ,CAAEC,UAAW,WAAaisP,IAYrE,GAXAl3J,EAAQr0F,UAAU0G,IAAI,aAClB1R,KAAKuL,WACL8zF,EAAQr0F,UAAU0G,IAAIlK,GAEtBxH,KAAKqQ,UACL,eAAS,CAACgvF,GAAUr/F,KAAKqQ,SAASkQ,QAAQ,OAAQ,KAAKpO,OAAO9R,MAAM,MAExEg/F,EAAQ70F,YAAY8nE,GACpBA,EAAM9nE,YAAYxK,KAAKmJ,SACvB,eAAenJ,KAAMsyE,GACrBA,EAAM9nE,YAAYysP,GACd,QAAiB,CACjB,IAAI/2J,EAAalgG,KAAKqK,cAAc,OAAQ,CAAEC,UAAWm0F,IAC9B,WAAvBz+F,KAAK0rE,cACL4G,EAAM9nE,YAAY01F,GAGlB5tB,EAAMrnD,aAAai1E,EAAY+2J,GAEnC,gBAAa/2J,EAAY,CAAEn3F,SAAU,IAAKixD,gBAAgB,IAE1Dh6D,KAAKsyE,OACLtyE,KAAKogG,QAAQpgG,KAAKsyE,QAG1BqkL,EAASzwP,UAAUm6F,aAAe,WAC1BrgG,KAAKmd,WACLnd,KAAK4/F,aAAa50F,UAAU0G,IAAI,YAGxCilP,EAASzwP,UAAUo6F,sBAAwB,SAAUvtF,GACjD/S,KAAK42P,cAAe,EACpB,IAAI12J,EAAalgG,KAAK4/F,aAAa/hF,uBAAuB4gF,GAAQ,GAClE,eAAmB1rF,EAAGmtF,IAE1By2J,EAASzwP,UAAUq6F,uBAAyB,SAAUxtF,GAClD,IAAImtF,EAAalgG,KAAK0/F,WAAW7hF,uBAAuB4gF,GAAQ,GAChE,GAAIyB,EAAY,CAEZ,IADA,IAAIM,EAAaN,EAAW/3E,iBAAiB,qBACpCphB,EAAIy5F,EAAW95F,OAAS,EAAGK,EAAI,EAAGA,IACvCm5F,EAAWpM,YAAYoM,EAAWz1D,WAAW1jC,IAEjD,eAAmBgM,EAAGmtF,KAG9By2J,EAASzwP,UAAUu6F,oBAAsB,SAAU1tF,GAC/C/S,KAAK42P,cAAe,EACpB,IAAI12J,EAAalgG,KAAK4/F,aAAa/hF,uBAAuB4gF,GAAQ,GAClE,GAAIyB,EAAY,CAEZ,IADA,IAAIM,EAAaN,EAAW/3E,iBAAiB,qBACpCphB,EAAI,EAAGA,EAAIy5F,EAAW95F,OAAS,EAAGK,IACvCm5F,EAAWpM,YAAYoM,EAAWz1D,WAAW1jC,IAEjD,eAAmBgM,EAAGmtF,KAY9By2J,EAASzwP,UAAUyU,kBAAoB,SAAUC,EAASC,GAEtD,IADA,IAAIwkF,EAAUr/F,KAAK4/F,aACVnsF,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAKF,GAAUnH,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC9D,IAAIsH,EAAOnR,EAAG6J,GACd,OAAQsH,GACJ,IAAK,UACD/a,KAAKk3P,eAAgB,EACrBl3P,KAAKmJ,QAAQ+tP,eAAgB,EAC7Bl3P,KAAK+2P,YAAYn8O,EAAQkkF,QAAU,QAAU,WAC7C,MACJ,IAAK,gBACGlkF,EAAQs8O,cACRl3P,KAAK+2P,eAGL/2P,KAAKmJ,QAAQ+tP,eAAgB,EAC7Bl3P,KAAK+2P,YAAY/2P,KAAK8+F,QAAU,QAAU,YAE9C,MACJ,IAAK,WACGlkF,EAAQkD,UACR9d,KAAKigG,cACLjgG,KAAKq/F,QAAUr/F,KAAK4/F,aACpB5/F,KAAK6gF,iBAGL7gF,KAAKmJ,QAAQ2U,UAAW,EACxBuhF,EAAQr0F,UAAUC,OAAOmsD,GACzBioC,EAAQ9uF,aAAa,gBAAiB,SACtCvQ,KAAKsZ,cAET,MACJ,IAAK,WACGuB,EAAQxK,UACR,gBAAY,CAACgvF,GAAUxkF,EAAQxK,SAAShQ,MAAM,MAE9Cua,EAAQvK,UACR,eAAS,CAACgvF,GAAUzkF,EAAQvK,SAASkQ,QAAQ,OAAQ,KAAKpO,OAAO9R,MAAM,MAE3E,MACJ,IAAK,YACGua,EAAQrP,UACR8zF,EAAQr0F,UAAU0G,IAAIlK,GAGtB63F,EAAQr0F,UAAUC,OAAOzD,GAE7B,MACJ,IAAK,QACDxH,KAAKogG,QAAQxlF,EAAQ03D,OACrB,MACJ,IAAK,gBACD,IAAIA,EAAQ+sB,EAAQxhF,uBAAuB2gF,GAAO,GAC9C64J,EAAYh4J,EAAQyB,qBAAqB,SAAS,GACtD,eAAOxuB,GACuB,UAA1B13D,EAAQ8wD,cACR2rL,EAAU7sP,YAAY8nE,GAGtB+kL,EAAUpsO,aAAaqnD,EAAO+sB,EAAQxhF,uBAAuB04O,GAAO,IAExE,MAEJ,IAAK,OACDv2P,KAAKmJ,QAAQoH,aAAa,OAAQqK,EAAQtW,MAC1C,MACJ,IAAK,QACD,GAAItE,KAAKsvD,OAAkC,kBAAlB10C,EAAQuD,MAC7B,MAEJne,KAAKmJ,QAAQoH,aAAa,QAASqK,EAAQuD,OAC3C,MACJ,IAAK,iBACDne,KAAKyf,+BACL,SAUhBk3O,EAASzwP,UAAUsT,UAAY,WAC3B,IAAIrQ,EAAUnJ,KAAKmJ,QACnBnJ,KAAKsV,QAAUtV,KAAKmJ,QAAQmM,QAC5BnM,EAAU,eAAkBnJ,KAAKqK,cAAe,eAAgB,WAAYlB,EAASu1F,EAAS,YAC9F1+F,KAAKmJ,QAAUA,EAC2B,aAAtCnJ,KAAKmJ,QAAQmH,aAAa,SAC1BtQ,KAAKmJ,QAAQoH,aAAa,OAAQ,YAEjCvQ,KAAKmJ,QAAQ+H,KACdlR,KAAKmJ,QAAQ+H,GAAK,eAAY,KAAOlR,KAAKwa,mBASlDm8O,EAASzwP,UAAUmT,OAAS,WACxBrZ,KAAK+/F,cACL//F,KAAK0J,aACA1J,KAAK8d,UACN9d,KAAKsZ,aAETtZ,KAAKyf,+BACLzf,KAAKo3P,qBAAoB,GACzBp3P,KAAKuZ,iBACLvZ,KAAKq/F,QAAUr/F,KAAK4/F,cAExB+2J,EAASzwP,UAAU+5F,YAAc,WAC7B,IAAIZ,EAAUr/F,KAAK4/F,aACnB5/F,KAAKmJ,QAAQ2U,UAAW,EACxBuhF,EAAQr0F,UAAU0G,IAAI0lD,GACtBioC,EAAQ9uF,aAAa,gBAAiB,SAG1ComP,EAASzwP,UAAUk6F,QAAU,SAAUxoE,GACnC,IAAIynE,EAAUr/F,KAAK4/F,aACnB,GAAKP,EAAL,CAGA,IAAI/sB,EAAQ+sB,EAAQxhF,uBAAuB2gF,GAAO,GAClD,GAAIlsB,EACAA,EAAMznD,YAAc+M,MAEnB,CACDA,EAAQ53B,KAAwB,oBAAI,OAAmB8Q,SAAS8mB,GAAQA,EACxE06C,EAAQtyE,KAAKqK,cAAc,OAAQ,CAAEC,UAAWk0F,EAAO9tF,UAAWknB,IAClE,IAAIy/N,EAAYh4J,EAAQyB,qBAAqB,SAAS,GAC3B,WAAvB9gG,KAAK0rE,cACL2rL,EAAUpsO,aAAaqnD,EAAO+sB,EAAQxhF,uBAAuB04O,GAAO,IAGpEc,EAAU7sP,YAAY8nE,MAIlCqkL,EAASzwP,UAAUmhE,cAAgB,SAAUt0D,GACzCA,EAAE2R,mBAENiyO,EAASzwP,UAAUihE,iBAAmB,WAClCnnE,KAAK8+F,QAAU9+F,KAAK8/F,oBACpB9/F,KAAKmJ,QAAQ21F,QAAU9+F,KAAK8/F,qBAEhC62J,EAASzwP,UAAU26E,aAAe,WAC9B,IAAIwe,EAAUr/F,KAAKq/F,QACnB,OAAap0F,OAAOo0F,EAAS,QAASr/F,KAAKmgE,cAC3C,OAAal1D,OAAOjL,KAAKmJ,QAAS,QAASnJ,KAAKqgG,cAChD,OAAap1F,OAAOjL,KAAKmJ,QAAS,QAASnJ,KAAKw/F,cAChD,OAAav0F,OAAOjL,KAAKmJ,QAAS,WAAYnJ,KAAKy/F,iBACnD,IAAIntB,EAAQ+sB,EAAQyB,qBAAqB,SAAS,GAClD,OAAa71F,OAAOqnE,EAAO,YAAatyE,KAAKsgG,uBAC7C,OAAar1F,OAAOqnE,EAAO,UAAWtyE,KAAKygG,qBAC3C,OAAax1F,OAAOqnE,EAAO,aAActyE,KAAKugG,wBAC9C,IAAI+2J,EAAW,eAAQt3P,KAAKmJ,QAAS,QACjCmuP,GACA,OAAarsP,OAAOqsP,EAAU,QAASt3P,KAAKmnE,kBAE3B,iBAAjBnnE,KAAKsV,SACL,OAAarK,OAAOjL,KAAKmJ,QAAS,SAAUnJ,KAAKqnE,gBAGzDsvL,EAASzwP,UAAUoT,WAAa,WAC5B,IAAI+lF,EAAUr/F,KAAK4/F,aACnB,OAAaluF,IAAI2tF,EAAS,QAASr/F,KAAKmgE,aAAcngE,MACtD,OAAa0R,IAAI1R,KAAKmJ,QAAS,QAASnJ,KAAKqgG,aAAcrgG,MAC3D,OAAa0R,IAAI1R,KAAKmJ,QAAS,QAASnJ,KAAKw/F,aAAcx/F,MAC3D,OAAa0R,IAAI1R,KAAKmJ,QAAS,WAAYnJ,KAAKy/F,gBAAiBz/F,MACjE,IAAIsyE,EAAQ+sB,EAAQyB,qBAAqB,SAAS,GAClD,OAAapvF,IAAI4gE,EAAO,YAAatyE,KAAKsgG,sBAAuBtgG,MACjE,OAAa0R,IAAI4gE,EAAO,UAAWtyE,KAAKygG,oBAAqBzgG,MAC7D,OAAa0R,IAAI4gE,EAAO,aAActyE,KAAKugG,uBAAwBvgG,MACnE,IAAIs3P,EAAW,eAAQt3P,KAAKmJ,QAAS,QACjCmuP,GACA,OAAa5lP,IAAI4lP,EAAU,QAASt3P,KAAKmnE,iBAAkBnnE,MAE1C,iBAAjBA,KAAKsV,SACL,OAAa5D,IAAI1R,KAAKmJ,QAAS,SAAUnJ,KAAKqnE,cAAernE,OAGrE22P,EAASzwP,UAAUkxP,oBAAsB,SAAUj0I,GAC/C,GAAInjH,KAAKsvD,OAA+B,kBAAftvD,KAAKme,MAAoB,CAC9C,IAAIA,EAAQne,KAAKmJ,QAAQgV,MACzB,GAAIA,GAASne,KAAKme,MAAO,CACrB,IAAIglG,EAQC,CACD,IAAI9wG,EAAQrS,KAAKme,MAAMpU,QAAQoU,GAY/B,OAXIne,KAAK8+F,QACDzsF,EAAQ,GACRrS,KAAKme,MAAMlM,KAAKkM,GAIhB9L,GAAS,GACTrS,KAAKme,MAAM7L,OAAOD,EAAO,GAI1BrS,KAAKme,MApBZ,IAAK,IAAIpX,EAAI,EAAGA,EAAI/G,KAAKme,MAAMzX,OAAQK,IAC/BoX,IAAUne,KAAKme,MAAMpX,KACrB/G,KAAK+2P,YAAY,SACjB/2P,KAAK6Q,cAAc,CAAE,SAAW,IAAQ,KAqB5D,OAAO7Q,KAAK82P,WAAa92P,KAAKmJ,QAAQ21F,SAAW9+F,KAAKmJ,QAAQ21F,SAElE63J,EAASzwP,UAAUuZ,6BAA+B,WAC9C,IAAK,eAAkBzf,KAAKylB,gBACxB,IAAK,IAAIhS,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAK9a,KAAKylB,gBAAiBhS,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC1E,IAAI5P,EAAM+F,EAAG6J,GACT4rF,EAAUr/F,KAAK4/F,aACnB,GAAIrjF,EAAcxS,QAAQlG,IAAQ,EAC9B,GAAY,UAARA,EACA,eAAS,CAACw7F,GAAUr/F,KAAKylB,eAAe,GAAK5hB,GAAKxD,MAAM,WAEvD,GAAY,UAARwD,EACLw7F,EAAQ9uF,aAAa1M,EAAK7D,KAAKylB,eAAe,GAAK5hB,SAElD,GAAY,UAARA,EAAiB,CACtB,IAAIozP,EAAYj3P,KAAK4/F,aAAa/hF,uBAAuB04O,GAAO,GAChEU,EAAU1mP,aAAa1M,EAAK7D,KAAKylB,eAAe,GAAK5hB,QAExC,aAARA,GACiC,SAAlC7D,KAAKylB,eAAe,GAAK5hB,IACzB7D,KAAKigG,cAETjgG,KAAKmJ,QAAQoH,aAAa1M,EAAK7D,KAAKylB,eAAe,GAAK5hB,KAGxD7D,KAAKmJ,QAAQoH,aAAa1M,EAAK7D,KAAKylB,eAAe,GAAK5hB,SAI5Dw7F,EAAQ9uF,aAAa1M,EAAK7D,KAAKylB,eAAe,GAAK5hB,MAYnE8yP,EAASzwP,UAAUyoF,MAAQ,WACvB3uF,KAAKmJ,QAAQwlF,SASjBgoK,EAASzwP,UAAUwmB,QAAU,WACzB1sB,KAAKmJ,QAAQqc,SAEjBpf,EAAW,CACP,kBACDuwP,EAASzwP,UAAW,cAAU,GACjCE,EAAW,CACP,kBACDuwP,EAASzwP,UAAW,eAAW,GAClCE,EAAW,CACP,gBAAS,IACVuwP,EAASzwP,UAAW,eAAW,GAClCE,EAAW,CACP,eAAS,KACVuwP,EAASzwP,UAAW,gBAAY,GACnCE,EAAW,CACP,gBAAS,IACVuwP,EAASzwP,UAAW,gBAAY,GACnCE,EAAW,CACP,gBAAS,IACVuwP,EAASzwP,UAAW,qBAAiB,GACxCE,EAAW,CACP,eAAS,KACVuwP,EAASzwP,UAAW,aAAS,GAChCE,EAAW,CACP,eAAS,UACVuwP,EAASzwP,UAAW,qBAAiB,GACxCE,EAAW,CACP,eAAS,KACVuwP,EAASzwP,UAAW,YAAQ,GAC/BE,EAAW,CACP,eAAS,KACVuwP,EAASzwP,UAAW,aAAS,GAChCE,EAAW,CACP,gBAAS,IACVuwP,EAASzwP,UAAW,2BAAuB,GAC9CE,EAAW,CACP,eAAS,KACVuwP,EAASzwP,UAAW,sBAAkB,GACzCywP,EAAWvwP,EAAW,CAClB,QACDuwP,GACIA,EAplBkB,CAqlB3B,S,wBC9nBA,SAAU72P,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAI4wB,EACI,2FACJC,EACI,oFACJJ,EACI,yKACJD,EAAc,CACV,SACA,SACA,SACA,QACA,QACA,SACA,SACA,SACA,SACA,QACA,QACA,SAGJ8mO,EAAKt3P,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,uFAAuFC,MAC3F,KAEJC,YACI,iEAAiED,MAC7D,KAERqwB,YAAaA,EACbE,iBAAkBF,EAClBG,kBAAmBA,EACnBC,uBAAwBA,EACxBL,YAAaA,EACbM,gBAAiBN,EACjBO,iBAAkBP,EAClBlwB,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,qCAAqCH,MAAM,KAC1DI,YAAa,uBAAuBJ,MAAM,KAC1C4wB,oBAAoB,EACpBvwB,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEVC,SAAU,CACNC,QAAS,qBACTC,QAAS,gBACTC,SAAU,cACVC,QAAS,cACTC,SAAU,sBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,YACNC,EAAG,oBACHC,GAAI,cACJC,EAAG,aACHC,GAAI,aACJC,EAAG,YACHC,GAAI,YACJC,EAAG,UACHC,GAAI,WACJivB,EAAG,cACHC,GAAI,cACJjvB,EAAG,UACHC,GAAI,UACJC,EAAG,QACHC,GAAI,UAERgB,uBAAwB,eACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GAIJ,IAAK,IACD,OAAO3B,GAAqB,IAAXA,EAAe,KAAO,IAG3C,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,KAG3C,IAAK,IACL,IAAK,IACD,OAAOA,GAAqB,IAAXA,EAAe,KAAO,OAGnDpB,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO80P,M,sBC5GT,SAAUz3P,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIgsC,EAAa,SAAUxoC,GACnB,OAAa,IAANA,EACD,EACM,IAANA,EACA,EACM,IAANA,EACA,EACAA,EAAI,KAAO,GAAKA,EAAI,KAAO,GAC3B,EACAA,EAAI,KAAO,GACX,EACA,GAEVyoC,EAAU,CACNvqC,EAAG,CACC,eACA,cACA,CAAC,UAAW,WACZ,UACA,WACA,YAEJE,EAAG,CACC,eACA,cACA,CAAC,UAAW,WACZ,WACA,WACA,YAEJE,EAAG,CACC,cACA,aACA,CAAC,SAAU,UACX,WACA,UACA,WAEJE,EAAG,CACC,aACA,WACA,CAAC,QAAS,SACV,UACA,WACA,UAEJE,EAAG,CACC,aACA,WACA,CAAC,QAAS,SACV,UACA,UACA,UAEJE,EAAG,CACC,aACA,WACA,CAAC,QAAS,SACV,WACA,WACA,WAGR8pC,EAAY,SAAUC,GAClB,OAAO,SAAUzoC,EAAQC,EAAeyoC,EAAQvoC,GAC5C,IAAIwoC,EAAIL,EAAWtoC,GACf4oC,EAAML,EAAQE,GAAGH,EAAWtoC,IAIhC,OAHU,IAAN2oC,IACAC,EAAMA,EAAI3oC,EAAgB,EAAI,IAE3B2oC,EAAIhsB,QAAQ,MAAO5c,KAGlCvD,EAAS,CACL,QACA,QACA,OACA,QACA,MACA,OACA,SACA,MACA,SACA,SACA,SACA,UAGJo3P,EAAOv3P,EAAOE,aAAa,QAAS,CACpCC,OAAQA,EACRE,YAAaF,EACbG,SAAU,sDAAsDF,MAAM,KACtEG,cAAe,wCAAwCH,MAAM,KAC7DI,YAAa,gBAAgBJ,MAAM,KACnC4wB,oBAAoB,EACpBvwB,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,cACJC,IAAK,oBACLC,KAAM,0BAEV4B,cAAe,MACfwC,KAAM,SAAUP,GACZ,MAAO,MAAQA,GAEnB9B,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,GACA,IAEA,KAGf7B,SAAU,CACNC,QAAS,wBACTC,QAAS,uBACTC,SAAU,uBACVC,QAAS,sBACTC,SAAU,uBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,SACRC,KAAM,SACNC,EAAGwqC,EAAU,KACbvqC,GAAIuqC,EAAU,KACdtqC,EAAGsqC,EAAU,KACbrqC,GAAIqqC,EAAU,KACdpqC,EAAGoqC,EAAU,KACbnqC,GAAImqC,EAAU,KACdlqC,EAAGkqC,EAAU,KACbjqC,GAAIiqC,EAAU,KACdhqC,EAAGgqC,EAAU,KACb/pC,GAAI+pC,EAAU,KACd9pC,EAAG8pC,EAAU,KACb7pC,GAAI6pC,EAAU,MAElBO,WAAY,SAAUL,GAClB,OAAOA,EAAO9rB,QAAQ,KAAM,MAEhChe,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAO+0P,M,kCCpKX,8DAAIjyP,EAAwC,WACxC,IAAIC,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAaxCI,EAA0C,SAAUC,EAAYC,EAAQzC,EAAK0C,GAC7E,IAA2HtE,EAAvHuE,EAAIC,UAAUC,OAAQC,EAAIH,EAAI,EAAIF,EAAkB,OAATC,EAAgBA,EAAOb,OAAOkB,yBAAyBN,EAAQzC,GAAO0C,EACrH,GAAuB,kBAAZM,SAAoD,oBAArBA,QAAQC,SAAyBH,EAAIE,QAAQC,SAAST,EAAYC,EAAQzC,EAAK0C,QACpH,IAAK,IAAIQ,EAAIV,EAAWK,OAAS,EAAGK,GAAK,EAAGA,KAAS9E,EAAIoE,EAAWU,MAAIJ,GAAKH,EAAI,EAAIvE,EAAE0E,GAAKH,EAAI,EAAIvE,EAAEqE,EAAQzC,EAAK8C,GAAK1E,EAAEqE,EAAQzC,KAAS8C,GAChJ,OAAOH,EAAI,GAAKG,GAAKjB,OAAOsB,eAAeV,EAAQzC,EAAK8C,GAAIA,GAQ5DY,EAAO,8BACPkwP,EAAW,qBACXC,EAAS,YACTC,EAAW,cACX97O,EAAQ,UACR+7O,EAAY,YACZC,EAAY,YACZC,EAAY,IAAI5jN,OAAO,gBACvB6jN,EAAmB,IACnBC,EAAY,mBACZ18O,EAAU,YACV28O,EAAgB,gBAChBC,EAAgB,mBAChBt0E,EAAoB,CAAC,QAAS,QAAS,SACvCu0E,EAAmB,EAanBC,EAAgC,SAAUxvP,GAQ1C,SAASwvP,EAAelvP,EAASC,GAC7B,IAAIC,EAAQR,EAAOS,KAAKrJ,KAAMkJ,EAASC,IAAYnJ,KAMnD,OALAoJ,EAAMkmD,OAAQ,EACdlmD,EAAM2T,eAAgB,EACtB3T,EAAM0T,WAAY,EAClB1T,EAAMivP,iBAAkB,EACxBjvP,EAAMkvP,eAAiBpvP,EAChBE,EAizCX,OA/zCA7D,EAAU6yP,EAAgBxvP,GAgB1BwvP,EAAelyP,UAAUsT,UAAY,WACjCxZ,KAAKu4P,eAAgB,EACrBv4P,KAAKw4P,iBAAmB,IAExBx4P,KAAKy4P,UAAY,IAAIvkN,OAAO,gBAC5Bl0C,KAAK04P,UAAW,EAChB,IAAIC,EAAa,eAAS,gBAAiB34P,KAAKmJ,SAKhD,GAJAnJ,KAAKqmJ,aAAermJ,KAAKmJ,QAAQgkB,WAAU,GAC3C,gBAAY,CAACntB,KAAKqmJ,cAAe,CAAC/qI,EAAS08O,EAAW,UACtDh4P,KAAK44P,eAAiB,KACtB54P,KAAK64P,QAAU,eAAQ74P,KAAKmJ,QAAS,QACR,uBAAzBnJ,KAAKmJ,QAAQmM,QAAkC,CAC/CtV,KAAK44P,eAAiB54P,KAAKmJ,QAAQmM,QACnC,IAAIzQ,EAAQ7E,KAAKqK,cAAc,SAC3BgI,EAAQ,EACZ,IAAKA,EAAOA,EAAQrS,KAAKmJ,QAAQ+jB,WAAWxmB,OAAQ2L,IAAS,CACzD,IAAIymP,EAAgB94P,KAAKmJ,QAAQ+jB,WAAW7a,GAAO0mP,SAC7B,OAAlBD,GAA4C,UAAlBA,GAC1Bj0P,EAAM0L,aAAavQ,KAAKmJ,QAAQ+jB,WAAW7a,GAAO0mP,SAAU/4P,KAAKmJ,QAAQ+jB,WAAW7a,GAAOwjF,WAC3FhxF,EAAM6L,UAAY1Q,KAAKmJ,QAAQuH,WAER,UAAlBooP,GACLj0P,EAAM0L,aAAauoP,EAAe94P,KAAKmJ,QAAQmB,UAAUjK,MAAM,KAAK+4B,QAAO,SAAUgD,GAAQ,OAA+B,IAAxBA,EAAKryB,QAAQ,UAAiBmI,KAAK,MAG3IlS,KAAKmJ,QAAQokB,aAAa,SAC1BvtB,KAAKmJ,QAAQqH,gBAAgB,QAEjCxQ,KAAKmJ,QAAQ6B,UAAUC,OAAO,YAAa,oBAC3CjL,KAAKmJ,QAAQqB,YAAY3F,GACzB7E,KAAKmJ,QAAUtE,EACf,gBAAS,gBAAiB8zP,EAAY34P,KAAKmJ,SAE/C,eAAWnJ,KAAKmJ,QAAS,CAAE,KAAQ,aAAc,SAAY,IAAK,aAAgB,QAClF,IAAI+8K,EAAa,CACb8yE,eAAgB,kBAAmBC,eAAgB,kBAAmBv5O,YAAa1f,KAAK0f,aAE5F1f,KAAKmgB,KAAO,IAAI,OAAK,iBAAkB+lK,EAAYlmL,KAAKkgB,QACX,KAAzClgB,KAAKmgB,KAAKC,YAAY,gBACtBpgB,KAAK6Q,cAAc,CAAE6O,YAAa1f,KAAK0f,aAAe1f,KAAKmgB,KAAKC,YAAY,iBAAkB,GAE7FpgB,KAAKmJ,QAAQokB,aAAa,OAC3BvtB,KAAKmJ,QAAQoH,aAAa,KAAM,eAAY,mBAEhDvQ,KAAKgwL,cAAe,EACpBhwL,KAAK0mL,WAAa,KAClB1mL,KAAK6yN,UAAY,KACjB7yN,KAAKk5P,YAAc,GACnBl5P,KAAKm5P,kBACLn5P,KAAKo5P,kBACLp5P,KAAK0rL,UAAY1rL,KAAKme,MACtBne,KAAKq5P,0BACLr5P,KAAKimL,iBAAgB,GACjBjmL,KAAK64P,UACL74P,KAAKmlL,cAAgBnlL,KAAKme,OAE9Bne,KAAKoqL,iBACLpqL,KAAKs5P,eACoB,OAArBt5P,KAAK0f,aACL1f,KAAKu5P,qBASbnB,EAAelyP,UAAUmT,OAAS,WACa,UAAvCrZ,KAAKmJ,QAAQmM,QAAQgS,gBACrBtnB,KAAKw5P,gBACDx5P,KAAKy5P,gBACLz5P,KAAK05P,kBAET15P,KAAK25P,gBAAgB35P,KAAKoL,OACrBpL,KAAKoV,UAAUpK,UAAUkB,SAAS,kBACnClM,KAAKoV,UAAUpK,UAAU0G,IAAI,iBAEjC1R,KAAK45P,YAA2B,OAAf55P,KAAKme,OAAkBgD,MAAMnhB,KAAKme,OAC/C,KAAOne,KAAKqhB,WAAarhB,KAAKs5E,UAAUt5E,KAAKme,OAASne,KAAKme,OAC/Dne,KAAKsZ,aACc,OAAftZ,KAAKme,OAAmBgD,MAAMnhB,KAAKme,QAC/Bne,KAAK65P,UACL75P,KAAK6Q,cAAc,CAAEsN,MAAOne,KAAK85P,YAAY95P,KAAKme,MAAOne,KAAK65P,YAAa,IAG/E75P,KAAKmJ,QAAQmH,aAAa,UAAYtQ,KAAKme,SAC3Cne,KAAKmJ,QAAQoH,aAAa,QAASvQ,KAAKmJ,QAAQgV,OAChDne,KAAK+5P,YAAYxpP,aAAa,QAASvQ,KAAK+5P,YAAY57O,QAE5Dne,KAAKg6P,iBAAmBh6P,KAAKmJ,QAAQgV,MACjCne,KAAKmJ,QAAQokB,aAAa,aAC1BvtB,KAAKmJ,QAAQoH,aAAa,WAAY,UAErC,eAAkB,eAAQvQ,KAAKmJ,QAAS,cAAgB,eAAQnJ,KAAKmJ,QAAS,YAAY2U,WAC3F9d,KAAK+d,SAAU,GAEnB/d,KAAKuZ,mBAGb6+O,EAAelyP,UAAU+/K,gBAAkB,SAAUllK,GAGjD,IAFA,IAAImM,EAAanM,EAAY,eAAkB/gB,KAAKylB,gBAAkB,GAAK/f,OAAOoV,KAAK9a,KAAKylB,gBACxF,CAAC,QAAS,MAAO,MAAO,OAAQ,WAAY,WAAY,QAAS,OAAQ,eACpEhS,EAAK,EAAG0b,EAAejC,EAAYzZ,EAAK0b,EAAazoB,OAAQ+M,IAAM,CACxE,IAAIsH,EAAOoU,EAAa1b,GACxB,IAAK,eAAkBzT,KAAKmJ,QAAQmH,aAAayK,IAC7C,OAAQA,GACJ,IAAK,WACD,GAAK,eAAkB/a,KAAKs4P,sBAAuDnnP,IAAnCnR,KAAKs4P,eAAe,YAA8Bv3O,EAAW,CACzG,IAAIhD,EAA8C,aAApC/d,KAAKmJ,QAAQmH,aAAayK,IAA4D,KAApC/a,KAAKmJ,QAAQmH,aAAayK,IAC/C,SAApC/a,KAAKmJ,QAAQmH,aAAayK,GACjC/a,KAAK6Q,cAAc,CAAEkN,QAASA,IAAYgD,GAE9C,MACJ,IAAK,WACD,GAAK,eAAkB/gB,KAAKs4P,sBAAwDnnP,IAApCnR,KAAKs4P,eAAe,aAA+Bv3O,EAAW,CAC1G,IAAI7B,EAA+C,aAApClf,KAAKmJ,QAAQmH,aAAayK,IAA4D,KAApC/a,KAAKmJ,QAAQmH,aAAayK,IAChD,SAApC/a,KAAKmJ,QAAQmH,aAAayK,GACjC/a,KAAK6Q,cAAc,CAAEqO,SAAUA,IAAa6B,GAEhD,MACJ,IAAK,eACI,eAAkB/gB,KAAKs4P,sBAA2DnnP,IAAvCnR,KAAKs4P,eAAe,gBAAkCv3O,IAClG/gB,KAAK6Q,cAAc,CAAE6O,YAAa1f,KAAKmJ,QAAQuW,cAAgBqB,GAEnE,MACJ,IAAK,QACD,GAAK,eAAkB/gB,KAAKs4P,sBAAqDnnP,IAAjCnR,KAAKs4P,eAAe,UAA4Bv3O,EAAW,CACvG,IAAIk5O,EAAYj6P,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKmJ,QAAQmH,aAAayK,IACzF/a,KAAK6Q,cAAc,gBAASkK,EAAMk/O,EAAW,KAAMl5O,GAEvD,MACJ,IAAK,MACD,GAAK,eAAkB/gB,KAAKs4P,sBAAmDnnP,IAA/BnR,KAAKs4P,eAAe,QAA0Bv3O,EAAW,CACrG,IAAIsrK,EAAWrsL,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKmJ,QAAQmH,aAAayK,IACvE,OAAbsxK,GAAsBlrK,MAAMkrK,IAC5BrsL,KAAK6Q,cAAc,gBAASkK,EAAMsxK,EAAU,KAAMtrK,GAG1D,MACJ,IAAK,MACD,GAAK,eAAkB/gB,KAAKs4P,sBAAmDnnP,IAA/BnR,KAAKs4P,eAAe,QAA0Bv3O,EAAW,CACrG,IAAIqrK,EAAWpsL,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKmJ,QAAQmH,aAAayK,IACvE,OAAbqxK,GAAsBjrK,MAAMirK,IAC5BpsL,KAAK6Q,cAAc,gBAASkK,EAAMqxK,EAAU,KAAMrrK,GAG1D,MACJ,IAAK,OACD,GAAK,eAAkB/gB,KAAKs4P,sBAAoDnnP,IAAhCnR,KAAKs4P,eAAe,SAA2Bv3O,EAAW,CACtG,IAAIm5O,EAAYl6P,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKmJ,QAAQmH,aAAayK,IACvE,OAAdm/O,GAAuB/4O,MAAM+4O,IAC7Bl6P,KAAK6Q,cAAc,gBAASkK,EAAMm/O,EAAW,KAAMn5O,GAG3D,MACJ,IAAK,QACD/gB,KAAK0mL,WAAa1mL,KAAKmJ,QAAQmH,aAAayK,GAC5C,MACJ,IAAK,OACD/a,KAAK6yN,UAAY7yN,KAAKmJ,QAAQmH,aAAayK,GAC3C,MACJ,QAEQ,IAAIoD,EAAQne,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKmJ,QAAQmH,aAAayK,KACtE,OAAVoD,IAAmBgD,MAAMhD,IAAqB,UAATpD,IACtC/a,KAAK6Q,cAAc,gBAASkK,EAAMoD,EAAO,KAAK,GAGtD,SAKpBi6O,EAAelyP,UAAUqzP,kBAAoB,WACzCv5P,KAAK6Q,cAAc,CAAE6O,YAAa1f,KAAKmgB,KAAKC,YAAY,iBAAkB,IAE9Eg4O,EAAelyP,UAAUkzP,gBAAkB,WACvCp5P,KAAKg/F,SAAW,IAAI,OAAqBh/F,KAAKkgB,SAElDk4O,EAAelyP,UAAUizP,gBAAkB,WACvCn5P,KAAKk5P,YAAYl3O,OAAShiB,KAAKgiB,OACI,OAA/B,eAAS,WAAYhiB,QACrB,gBAAS,WAAYA,KAAKy0H,SAAUz0H,KAAKk5P,aACzCl5P,KAAK6Q,cAAc,CAAEspP,aAAcn6P,KAAKy0H,WAAY,KAI5D2jI,EAAelyP,UAAUszP,cAAgB,WACrC,IAAIY,EAAuBp6P,KAAKqQ,SAC3B,eAAkBrQ,KAAKqQ,WAA+B,KAAlBrQ,KAAKqQ,WAC1C+pP,EAAuBp6P,KAAKq6P,yBAAyBr6P,KAAKqQ,WAE9D,IAAIiqP,EAAW,OAAM96O,YAAY,CAC7BrW,QAASnJ,KAAKmJ,QACdqU,eAAgBxd,KAAKwd,eACrBkD,WAAY,CACRxB,SAAUlf,KAAKkf,SACfQ,YAAa1f,KAAK0f,YAClBrP,SAAU+pP,EACV7uP,UAAWvL,KAAKuL,UAChBoV,gBAAiB3gB,KAAK2gB,gBACtB5C,QAAS/d,KAAK+d,UAEnB/d,KAAKqK,eACRrK,KAAK2d,aAAe28O,EACpBt6P,KAAKoV,UAAYklP,EAASllP,UAC1BpV,KAAKoV,UAAU7E,aAAa,QAAShJ,EAAO,IAAMvH,KAAKoV,UAAU9E,aAAa,UAC9EtQ,KAAKu6P,0BACDv6P,KAAKkf,UACL,eAAWlf,KAAKmJ,QAAS,CAAE,gBAAiB,SAEhDnJ,KAAK+5P,YAAe/5P,KAAKqK,cAAc,QAAS,CAAEuK,MAAO,CAAER,KAAM,OACzD,eAAkB,OAAQ,aAAc,SAAU,MAAS8jP,KACnEl4P,KAAK6yN,UAA+B,OAAnB7yN,KAAK6yN,UAAqB7yN,KAAK6yN,UAAY7yN,KAAKmJ,QAAQ+H,GACzElR,KAAKmJ,QAAQqH,gBAAgB,QACzBxQ,KAAK8c,WAAqC,uBAAxB9c,KAAK44P,gBAA2C54P,KAAKqmJ,aAAan1I,GAAGxK,OAAS,EAChG,eAAW1G,KAAK+5P,YAAa,CAAE,KAAQ/5P,KAAKqmJ,aAAan1I,KAGzD,eAAWlR,KAAK+5P,YAAa,CAAE,KAAQ/5P,KAAK6yN,YAEhD7yN,KAAKoV,UAAU6V,aAAajrB,KAAK+5P,YAAa/5P,KAAKoV,UAAUq1B,WAAW,IACxEzqC,KAAKw6P,qBAAoB,GACD,OAApBx6P,KAAK0mL,YACL,eAAW1mL,KAAKoV,UAAW,CAAE,MAASpV,KAAK0mL,cAGnD0xE,EAAelyP,UAAUs0P,oBAAsB,SAAUz5O,GACrD,IAAI+N,EAAO,GACX,GAAK/N,EAMD+N,EAAO9uB,KAAKylB,oBALZ,IAAK,IAAI6T,EAAI,EAAGA,EAAIt5B,KAAKmJ,QAAQ+jB,WAAWxmB,OAAQ4yB,IAChDxK,EAAK9uB,KAAKmJ,QAAQ+jB,WAAWoM,GAAGh1B,MAAQtE,KAAKmJ,QAAQmH,aAAatQ,KAAKmJ,QAAQ+jB,WAAWoM,GAAGh1B,MAMrG,IAAK,IAAImP,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAKgU,GAAOrb,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC3D,IAAI5P,EAAM+F,EAAG6J,GACe,IAAxB5P,EAAIkG,QAAQ,SACZ/J,KAAK+5P,YAAYxpP,aAAa1M,EAAKirB,EAAK,GAAKjrB,MAIzDu0P,EAAelyP,UAAUmzP,wBAA0B,WAC/C,IAAK,eAAkBr5P,KAAKylB,gBACxB,IAAK,IAAIhS,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAK9a,KAAKylB,gBAAiBhS,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC1E,IAAIgnP,EAAM7wP,EAAG6J,GACTmwK,EAAkB75K,QAAQ0wP,GAAO,GACjCz6P,KAAKmJ,QAAQoH,aAAakqP,EAAKz6P,KAAKylB,eAAe,GAAKg1O,MAKxErC,EAAelyP,UAAU4f,eAAiB,SAAU40O,EAAUC,GAC1D,OAAM10O,YAAYjmB,KAAKq6P,yBAAyBK,GAAW,CAAC16P,KAAKoV,WAAYpV,KAAKq6P,yBAAyBM,KAE/GvC,EAAelyP,UAAUm0P,yBAA2B,SAAUO,GAC1D,IAAI72P,EAAS62P,EAIb,OAHK,eAAkBA,IAA0C,KAArBA,IACxC72P,EAAU62P,EAAiBr6O,QAAQ,OAAQ,KAAMpO,QAE9CpO,GAEXq0P,EAAelyP,UAAUq0P,wBAA0B,WAC/C,IAAK,eAAkBv6P,KAAKylB,gBACxB,IAAK,IAAIhS,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAK9a,KAAKylB,gBAAiBhS,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC1E,IAAIgnP,EAAM7wP,EAAG6J,GACb,GAAImwK,EAAkB75K,QAAQ0wP,IAAQ,EAClC,GAAY,UAARA,EAAiB,CACjB,IAAII,EAAoB76P,KAAKq6P,yBAAyBr6P,KAAKylB,eAAe,GAAKg1O,IACrD,KAAtBI,GACA,eAAS,CAAC76P,KAAKoV,WAAYylP,EAAkBx6P,MAAM,WAGtD,GAAY,UAARo6P,EAAiB,CACtB,IAAIK,EAAe96P,KAAKoV,UAAU9E,aAAamqP,GAC/CK,EAAgB,eAAkBA,GAC9B96P,KAAKylB,eAAe,GAAKg1O,GADsBK,EAAe96P,KAAKylB,eAAe,GAAKg1O,GAE3Fz6P,KAAKoV,UAAU7E,aAAakqP,EAAKK,QAGjC96P,KAAKoV,UAAU7E,aAAakqP,EAAKz6P,KAAKylB,eAAe,GAAKg1O,MAM9ErC,EAAelyP,UAAUyzP,gBAAkB,SAAUvuP,GAC5C,eAAkBA,KACE,kBAAVA,EACPpL,KAAKoV,UAAUzI,MAAMvB,MAAQ,eAAWA,GAElB,kBAAVA,IACZpL,KAAKoV,UAAUzI,MAAMvB,MAASA,EAAMtG,MAAM,WAAc,EAAW,cAAD,CAAYsG,MAK1FgtP,EAAelyP,UAAUwzP,gBAAkB,WACvC15P,KAAK+6P,SAAW,OAAM3+J,WAAWq7J,EAAW,IAAME,EAAU33P,KAAKoV,UAAWpV,KAAKqK,eACjF,eAAWrK,KAAK+6P,SAAU,CACtB,MAAS/6P,KAAKmgB,KAAKC,YAAY,oBAEnCpgB,KAAKg7P,OAAS,OAAM5+J,WAAWq7J,EAAW,IAAMC,EAAQ13P,KAAKoV,UAAWpV,KAAKqK,eAC7E,eAAWrK,KAAKg7P,OAAQ,CACpB,MAASh7P,KAAKmgB,KAAKC,YAAY,oBAEnCpgB,KAAKi7P,qBAET7C,EAAelyP,UAAUkkL,eAAiB,YACV,kBAAdpqL,KAAQ,KAAmBmhB,MAAMnhB,KAAKkiB,OAChDliB,KAAK6Q,cAAc,CAAEqR,KAAOwwB,OAAgB,YAAK,IAEzB,kBAAd1yC,KAAQ,KAAmBmhB,MAAMnhB,KAAK+e,OAChD/e,KAAK6Q,cAAc,CAAEkO,IAAK2zB,OAAOC,YAAa,GAE5B,OAAlB3yC,KAAK65P,WACD75P,KAAKkiB,OAAUwwB,OAAgB,WAC/B1yC,KAAK6Q,cAAc,CAAEqR,IAAKliB,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKk7P,eAAel7P,KAAK65P,SAAU75P,KAAKkiB,QAAS,GAE1HliB,KAAK+e,MAAS2zB,OAAgB,WAC9B1yC,KAAK6Q,cAAc,CAAEkO,IAAK/e,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKk7P,eAAel7P,KAAK65P,SAAU75P,KAAK+e,QAAS,IAGlI/e,KAAK6Q,cAAc,CAAEqR,IAAKliB,KAAKkiB,IAAMliB,KAAK+e,IAAM/e,KAAK+e,IAAM/e,KAAKkiB,MAAO,GACnEliB,KAAKkiB,OAAUwwB,OAAgB,WAC/B,eAAW1yC,KAAKmJ,QAAS,CAAE,gBAAiBnJ,KAAKkiB,IAAI5K,aAErDtX,KAAK+e,MAAS2zB,OAAgB,WAC9B,eAAW1yC,KAAKmJ,QAAS,CAAE,gBAAiBnJ,KAAK+e,IAAIzH,cAG7D8gP,EAAelyP,UAAUg1P,eAAiB,SAAUrB,EAAU17O,GAC1D,OAAOne,KAAKg/F,SAASxqD,gBAAgB,CACjC2mN,sBAAuBtB,EACvBuB,sBAAuBvB,EAAUplN,aAAa,GAF3Cz0C,CAGJme,IAEPi6O,EAAelyP,UAAUozP,aAAe,WACd,OAAlBt5P,KAAK65P,UACL75P,KAAK6Q,cAAc,CAAEsuI,KAAMn/I,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKk7P,eAAel7P,KAAK65P,SAAU75P,KAAKm/I,SAAU,IAGpIi5G,EAAelyP,UAAUkgB,OAAS,SAAUi1O,EAAW/mP,GACnDtU,KAAKs7P,YAAa,EAClB,IAAIn9O,EAAQne,KAAKmd,UAAYnd,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKmJ,QAAQgV,OAASne,KAAKme,MACvGne,KAAK45P,YAAY55P,KAAKu7P,cAAcp9O,EAAOne,KAAKm/I,KAAMk8G,IACtDr7P,KAAKw7P,iBAAiBlnP,IAE1B8jP,EAAelyP,UAAUu1P,gBAAkB,WACnCz7P,KAAKgwL,aACL,gBAAY,CAAChwL,KAAKoV,WAAYyG,GAG9B,eAAS,CAAC7b,KAAKoV,WAAYyG,GAE/B,eAAW7b,KAAKmJ,QAAS,CAAE,eAAgBnJ,KAAKgwL,aAAe,QAAU,UAE7EooE,EAAelyP,UAAUye,eAAiB,WAClC3kB,KAAK2gB,iBACL,OAAajP,IAAI1R,KAAK2d,aAAaiG,YAAa,uBAAwB5jB,KAAK6jB,aAAc7jB,OAGnGo4P,EAAelyP,UAAU2d,aAAe,SAAU9Q,GAC9CA,EAAE6F,iBACI5Y,KAAK2d,aAAaiG,YAAY5Y,UAAUkB,SAAS,uBAAyBlM,KAAK2d,aAAavI,UAAUpK,UAAUkB,SAAS,mBAC3HlM,KAAKkO,MAAM6E,GAEf/S,KAAKs7P,YAAa,EAClBt7P,KAAKw7P,iBAAiBzoP,IAG1BqlP,EAAelyP,UAAUgI,MAAQ,SAAUoG,GACvCtU,KAAK6Q,cAAc,CAAEsN,MAAO,OAAQ,GACpCne,KAAK07P,gBAAgB,IACrB17P,KAAK+5P,YAAY57O,MAAQ,GACzB,IAAI2F,EAAc,eAAQ9jB,KAAKmJ,QAAS,QACxC,GAAI2a,EAAa,CACb,IAAI3a,EAAUnJ,KAAKmJ,QAAQ02F,mBACvB96E,EAAavR,SAASwR,YAAY,iBACtCD,EAAWE,UAAU,SAAS,GAAO,GACrC9b,EAAQ+b,cAAcH,KAG9BqzO,EAAelyP,UAAU6d,iBAAmB,WACX,uBAAzB/jB,KAAKmJ,QAAQmM,QACbtV,KAAK8qL,YAAY,MAGjB9qL,KAAK8qL,YAAY9qL,KAAKmlL,gBAG9BizE,EAAelyP,UAAUy1P,cAAgB,WAChC,eAAkB37P,KAAK+6P,WACxB,eAAW/6P,KAAK+6P,SAAU,CACtB,MAAS/6P,KAAKmgB,KAAKC,YAAY,kBAC/B,aAAcpgB,KAAKmgB,KAAKC,YAAY,oBAGvC,eAAkBpgB,KAAKg7P,SACxB,eAAWh7P,KAAKg7P,OAAQ,CACpB,MAASh7P,KAAKmgB,KAAKC,YAAY,kBAC/B,aAAcpgB,KAAKmgB,KAAKC,YAAY,qBAIhDg4O,EAAelyP,UAAUoT,WAAa,WAClC,OAAa5H,IAAI1R,KAAKmJ,QAAS,QAASnJ,KAAKw/F,aAAcx/F,MAC3D,OAAa0R,IAAI1R,KAAKmJ,QAAS,OAAQnJ,KAAKy/F,gBAAiBz/F,MAC7D,OAAa0R,IAAI1R,KAAKmJ,QAAS,UAAWnJ,KAAK4lO,eAAgB5lO,MAC/D,OAAa0R,IAAI1R,KAAKmJ,QAAS,QAASnJ,KAAKqgG,aAAcrgG,MAC3D,OAAa0R,IAAI1R,KAAKmJ,QAAS,QAASnJ,KAAKojB,aAAcpjB,MAC3D,OAAa0R,IAAI1R,KAAKmJ,QAAS,WAAYnJ,KAAKohJ,gBAAiBphJ,MACjE,OAAa0R,IAAI1R,KAAKmJ,QAAS,SAAUnJ,KAAKqnE,cAAernE,MAC7D,OAAa0R,IAAI1R,KAAKmJ,QAAS,QAASnJ,KAAKu9M,aAAcv9M,MACvDA,KAAK+d,UACL/d,KAAK2kB,iBACD3kB,KAAK64P,SACL,OAAannP,IAAI1R,KAAK64P,QAAS,QAAS74P,KAAK+jB,iBAAkB/jB,QAI3Eo4P,EAAelyP,UAAU+0P,kBAAoB,WAEzC,OAAavpP,IAAI1R,KAAKg7P,OAAQ,OAAQrpP,gBAAiB3R,KAAK47P,mBAAoB57P,MAChF,OAAa0R,IAAI1R,KAAK+6P,SAAU,OAAQppP,gBAAiB3R,KAAK47P,mBAAoB57P,MAClF,OAAa0R,IAAI1R,KAAKg7P,OAAQ,OAAQhhP,cAAeha,KAAK67P,iBAAkB77P,MAC5E,OAAa0R,IAAI1R,KAAK+6P,SAAU,OAAQ/gP,cAAeha,KAAK67P,iBAAkB77P,MAC9E,OAAa0R,IAAI1R,KAAKg7P,OAAQ,OAAQ7tN,eAAgBntC,KAAK87P,mBAAoB97P,MAC/E,OAAa0R,IAAI1R,KAAK+6P,SAAU,OAAQ5tN,eAAgBntC,KAAK87P,mBAAoB97P,OAErFo4P,EAAelyP,UAAUiU,aAAe,WACpC,OAAalP,OAAOjL,KAAKmJ,QAAS,QAASnJ,KAAKw/F,cAChD,OAAav0F,OAAOjL,KAAKmJ,QAAS,OAAQnJ,KAAKy/F,iBAC/C,OAAax0F,OAAOjL,KAAKmJ,QAAS,QAASnJ,KAAKqgG,cAChD,OAAap1F,OAAOjL,KAAKmJ,QAAS,QAASnJ,KAAKojB,cAChD,OAAanY,OAAOjL,KAAKmJ,QAAS,UAAWnJ,KAAK4lO,gBAClD,OAAa36N,OAAOjL,KAAKmJ,QAAS,WAAYnJ,KAAKohJ,iBACnD,OAAan2I,OAAOjL,KAAKmJ,QAAS,SAAUnJ,KAAKqnE,eACjD,OAAap8D,OAAOjL,KAAKmJ,QAAS,QAASnJ,KAAKu9M,cAC5Cv9M,KAAK64P,SACL,OAAa5tP,OAAOjL,KAAK64P,QAAS,QAAS74P,KAAK+jB,mBAGxDq0O,EAAelyP,UAAU61P,oBAAsB,WAE3C,OAAa9wP,OAAOjL,KAAKg7P,OAAQ,OAAQrpP,gBAAiB3R,KAAK47P,oBAC/D,OAAa3wP,OAAOjL,KAAK+6P,SAAU,OAAQppP,gBAAiB3R,KAAK47P,oBACjE,OAAa3wP,OAAOjL,KAAKg7P,OAAQ,OAAQhhP,cAAeha,KAAK67P,kBAC7D,OAAa5wP,OAAOjL,KAAK+6P,SAAU,OAAQ/gP,cAAeha,KAAK67P,kBAC/D,OAAa5wP,OAAOjL,KAAKg7P,OAAQ,OAAQ7tN,eAAgBntC,KAAK87P,oBAC9D,OAAa7wP,OAAOjL,KAAK+6P,SAAU,OAAQ5tN,eAAgBntC,KAAK87P,qBAEpE1D,EAAelyP,UAAUmhE,cAAgB,SAAU/yD,GAC/CA,EAAMoQ,kBACD1kB,KAAKmJ,QAAQgV,MAAMzX,QACpB1G,KAAK6Q,cAAc,CAAEsN,MAAO,OAAQ,GAExC,IAAI69O,EAAch8P,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKmJ,QAAQgV,OAC9Ene,KAAK8qL,YAAYkxE,EAAa1nP,IAElC8jP,EAAelyP,UAAUs1P,iBAAmB,SAAUlnP,GAElD,GADAtU,KAAKkvM,WAAc,eAAkBlvM,KAAKkvM,aAAe/tL,MAAMnhB,KAAKkvM,YAAe,KAAOlvM,KAAKkvM,WAC3FlvM,KAAK0rL,YAAc1rL,KAAKme,OAASne,KAAK0rL,YAAc1rL,KAAKkvM,WAAY,CACrE,IAAInjL,EAAY,GAChB/rB,KAAKm3P,gBAAkB,CAAEh5O,MAAOne,KAAKme,MAAOioB,cAAepmC,KAAK0rL,UAAWn3K,aAAcvU,KAAKs7P,WAC1FW,cAAej8P,KAAKs7P,WAAYhnP,MAAOA,GACvCA,IACAtU,KAAKm3P,gBAAgB7iP,MAAQA,QAEEnD,IAA/BnR,KAAKm3P,gBAAgB7iP,QACrBtU,KAAKm3P,gBAAgB5iP,cAAe,EACpCvU,KAAKm3P,gBAAgB8E,eAAgB,GAEzC,gBAAMlwO,EAAW/rB,KAAKm3P,iBACtBn3P,KAAK0rL,UAAY1rL,KAAKme,MACtBne,KAAKs7P,YAAa,EAClBt7P,KAAKg6P,iBAAmBh6P,KAAKmJ,QAAQgV,MACrCne,KAAK+c,eAAgB,EACrB/c,KAAK6N,QAAQ,SAAUke,KAG/BqsO,EAAelyP,UAAUq3M,aAAe,WACpC,IAAIn0M,EAAQpJ,KACZ,GAAKA,KAAK+d,UAAW/d,KAAKkf,SAA1B,CAGA,IAAIg9O,EAAel8P,KAAKmJ,QAAQgV,MAChCnL,YAAW,WACF5J,EAAM+yP,eAAej5O,KAAK9Z,EAAMD,QAAQgV,QACzC/U,EAAMsyP,gBAAgBQ,QAIlC9D,EAAelyP,UAAUk2P,eAAiB,WACtC,IAAIhzP,EAAQpJ,KACRq8P,IAAQjxI,UAAU26B,UAAY,mBAAmB7iI,KAAKkoG,UAAU26B,UACpE/yI,YAAW,WACP,GAAI5J,EAAMD,QAAQmd,eAAiB,EAAG,CAClC,IAAIg2O,EAAalzP,EAAMD,QAAQmd,eAC3Bi2O,EAAUnzP,EAAMD,QAAQmd,eAAiB,EACzCqB,EAAQ,EACR60O,EAAWpzP,EAAMD,QAAQgV,MAAM9d,MAAM,IACrCo8P,EAAgB,eAAiBrzP,EAAM8W,QACvCs4O,EAAmB,eAAS,UAAWiE,GACvCC,EAAgBlE,EAAiB59J,WAAW,GACX,MAAjCxxF,EAAMD,QAAQgV,MAAMo+O,IAAoBnzP,EAAMD,QAAQmd,eAAiB,IAAM+1O,GACzE,eAAkBjzP,EAAMuzP,SACxBvzP,EAAMD,QAAQgV,MAAQ/U,EAAMD,QAAQgV,MAAMhM,OAEzB,IAAZoqP,EACLnzP,EAAMD,QAAQgV,MAAQ/U,EAAMuzP,QAEX,IAAZJ,IACLnzP,EAAMD,QAAQgV,MAAQ/U,EAAMD,QAAQgV,MAAMhM,QAE9C/I,EAAMD,QAAQ4/K,kBAAkBwzE,EAASA,IAEpCp7O,MAAMzU,WAAWtD,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,MACD,KAAxEld,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,GAAGs0E,WAAW,IAC5D4hK,EAASzyP,QAAQX,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,MACrEk2O,EAASI,YAAYxzP,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,KACxEld,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,GAAGs0E,WAAW,KAAO8hK,GACxEtzP,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,GAAGs0E,WAAW,KAAO8hK,KACxEtzP,EAAMD,QAAQgV,MAAQ/U,EAAMD,QAAQgV,MAAMk9G,UAAU,EAAGkhI,GACnDnzP,EAAMD,QAAQgV,MAAMk9G,UAAUihI,EAAYlzP,EAAMD,QAAQgV,MAAMzX,QAClE0C,EAAMD,QAAQ4/K,kBAAkBwzE,EAASA,GACrCp7O,MAAMzU,WAAWtD,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,MAAQld,EAAMD,QAAQmd,eAAiB,GACxGld,EAAMD,QAAQgV,MAAMzX,QACvB0C,EAAMgzP,kBAITj7O,MAAMzU,WAAWtD,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,MAAQld,EAAMD,QAAQmd,eAAiB,GACxC,KAAxEld,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,GAAGs0E,WAAW,KAC5D4hK,EAASzyP,QAAQX,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,MACrEk2O,EAASI,YAAYxzP,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,KACxEld,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,GAAGs0E,WAAW,KAAO8hK,GACxEtzP,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,GAAGs0E,WAAW,KAAO8hK,KACxEtzP,EAAMD,QAAQ4/K,kBAAkBwzE,EAASA,GACzCnzP,EAAMmxI,QAAUnxI,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,gBAClDld,EAAMyzP,kBAAmB,EACzBzzP,EAAMgzP,mBAGiB,IAA3BhzP,EAAMyzP,kBAA6BzzP,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,kBAAoBld,EAAMmxI,SAC/Fp5H,MAAMzU,WAAWtD,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,OACpEld,EAAMD,QAAQ4/K,kBAAkB3/K,EAAMD,QAAQmd,eAAiB,EAAGld,EAAMD,QAAQmd,eAAiB,GACjGld,EAAMyzP,kBAAmB,EACzBzzP,EAAMmxI,QAAU,MAEe,KAA/BnxI,EAAMD,QAAQgV,MAAMhM,QACpB/I,EAAMD,QAAQ4/K,kBAAkBphK,EAAOA,GAEvCve,EAAMD,QAAQmd,eAAiB,IAC8C,KAAxEld,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,GAAGs0E,WAAW,IAAcxxF,EAAMD,QAAQmd,eAAiB,IAC3G,eAAkBld,EAAMuzP,SAExBvzP,EAAMD,QAAQgV,MAAQ/U,EAAMD,QAAQgV,MAGpC/U,EAAMD,QAAQgV,MAAQ/U,EAAMuzP,QAEhCvzP,EAAMD,QAAQ4/K,kBAAkB3/K,EAAMD,QAAQmd,eAAgBld,EAAMD,QAAQmd,iBAE5Eld,EAAMD,QAAQgV,MAAM/U,EAAMD,QAAQmd,eAAiB,KAAOkyO,GAAuC,IAAnBpvP,EAAMywP,UAAkBzwP,EAAM0zP,wBAC5G1zP,EAAMD,QAAQgV,MAAQ/U,EAAMD,QAAQgV,MAAMk9G,UAAU,EAAGkhI,GACnDnzP,EAAMD,QAAQgV,MAAMk9G,UAAUihI,EAAYlzP,EAAMD,QAAQgV,MAAMzX,UAG1E0C,EAAMuzP,QAAUvzP,EAAMD,QAAQgV,WAI1Ci6O,EAAelyP,UAAUm6F,aAAe,WACpC,GAAKrgG,KAAK+d,UAAW/d,KAAKkf,SAA1B,CAGA,IAAIm9O,IAAQjxI,UAAU26B,UAAY,mBAAmB7iI,KAAKkoG,UAAU26B,WAC/Ds2G,GAAO,OAAQ9mP,UAChBvV,KAAKo8P,iBAET,IAAIW,EAAa/8P,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKmJ,QAAQgV,OAC7E4+O,EAA4B,OAAfA,GAAuB57O,MAAM47O,GAAc,KAAOA,EAC/D/8P,KAAK+5P,YAAY57O,MAAQ4+O,GAA6B,IAAfA,EAAmBA,EAAWzlP,WAAa,KAClF,IAAIwM,EAAc,eAAQ9jB,KAAKmJ,QAAS,QACxC,GAAI2a,EAAa,CACb,IAAI3a,EAAUnJ,KAAKmJ,QAAQ02F,mBACvB96E,EAAavR,SAASwR,YAAY,iBACtCD,EAAWE,UAAU,SAAS,GAAO,GACrC9b,EAAQ+b,cAAcH,MAG9BqzO,EAAelyP,UAAUkd,aAAe,SAAU9O,GAE9C,IAAI0oP,EAAoBh9P,KACxB,GAAKA,KAAK+d,UAAW/d,KAAKkf,SAA1B,CAGA,IAAIm9O,IAAQjxI,UAAU26B,UAAY,mBAAmB7iI,KAAKkoG,UAAU26B,UAChEk3G,EAAU7xI,UAAUhhB,UAAU9iF,cAAcvd,QAAQ,YAAc,EAKtE,IAJKkzP,GAAWZ,IAAQ,OAAQ9mP,UAC5BvV,KAAKo8P,iBAGLp8P,KAAK8c,WACF9c,KAAKmJ,QAAQgV,QAAU,eAAS,UAAW,eAAiBne,KAAKkgB,UACjElgB,KAAKmJ,QAAQgV,QAAU,eAAS,YAAa,eAAiBne,KAAKkgB,SAAU,CAChF,IAAIg9O,EAAcl9P,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKmJ,QAAQgV,OAC9E++O,EAAc/7O,MAAM+7O,GAAe,KAAOA,EAC1CF,EAAkBG,YAAY,CAAEh/O,MAAO++O,IACvCl9P,KAAK+c,eAAgB,EAEzB,GAAI/c,KAAKsvD,MAAO,CACZ,IAAIkzK,EAAUxiO,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKmJ,QAAQgV,OACtE6b,EAAWh6B,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKg6P,kBAE/DoD,EAAe,IAAIlpN,OAAO,aAC1BkpN,EAAal6O,KAAKljB,KAAKmJ,QAAQgV,UAAoD,IAAxCne,KAAKg6P,iBAAiBjwP,QAAQ,OAAuD,IAAxC/J,KAAKg6P,iBAAiBjwP,QAAQ,OAAsE,MAAtD/J,KAAKmJ,QAAQgV,MAAMne,KAAKmJ,QAAQgV,MAAMzX,OAAS,MACrL87N,EAAUxiO,KAAKme,OAEnB,IAAI4N,EAAY,CACZzX,MAAOA,EACP6J,MAAoB,OAAZqkN,GAAoBrhN,MAAMqhN,GAAW,KAAOA,EACpDp8L,cAA6B,OAAbpM,GAAqB7Y,MAAM6Y,GAAY,KAAOA,GAElEh6B,KAAK+c,eAAgB,EACrB/c,KAAKg6P,iBAAmBh6P,KAAKmJ,QAAQgV,MACrCne,KAAK6N,QAAQ,QAASke,MAG9BqsO,EAAelyP,UAAU0/N,eAAiB,SAAUtxN,GAChD,IAAKtU,KAAKkf,SACN,OAAQ5K,EAAM4E,SACV,KAAK,GACD5E,EAAMsE,iBACN5Y,KAAKomB,OAAOwxO,EAAWtjP,GACvB,MACJ,KAAK,GACDA,EAAMsE,iBACN5Y,KAAKomB,OAAOyxO,EAAWvjP,GACvB,MACJ,QAAS,QAIrB8jP,EAAelyP,UAAUq1P,cAAgB,SAAUp9O,EAAOghI,EAAMk8G,IAC9C,OAAVl9O,GAAkBgD,MAAMhD,MACxBA,EAAQ,GAEZ,IAAIk/O,EAAehC,IAAczD,EAAYz5O,EAAQghI,EAAOhhI,EAAQghI,EAEpE,OADAk+G,EAAer9P,KAAKs9P,gBAAgBn/O,EAAOghI,EAAMk+G,GAC1Cr9P,KAAKqhB,WAAarhB,KAAKs5E,UAAU+jL,GAAgBA,GAE5DjF,EAAelyP,UAAUo3P,gBAAkB,SAAUn/O,EAAOghI,EAAMp7I,GAC9D,IAAIw5P,EAAW,IAAIrpN,OAAO,YACtBspN,EAAaD,EAASr6O,KAAK/E,EAAM7G,YACjCmmP,EAAYF,EAASr6O,KAAKi8H,EAAK7nI,YACnC,GAAIkmP,GAAcC,EAAW,CACzB,IAAIC,EAAaF,EAAaD,EAASl6P,KAAK8a,EAAM7G,YAAY,GAAG5Q,OAAS,EACtEi3P,EAAYF,EAAYF,EAASl6P,KAAK87I,EAAK7nI,YAAY,GAAG5Q,OAAS,EACnEqY,EAAMhQ,KAAKgQ,IAAI2+O,EAAYC,GAC/B,OAAe39P,KAAK49P,WAAW75P,EAAQgb,GAE3C,OAAOhb,GAEXq0P,EAAelyP,UAAU03P,WAAa,SAAU75P,EAAQ85P,GACpDA,EAAYA,GAAa,EACzB,IAAIC,EAAS/uP,KAAKmoE,IAAI,GAAI2mL,GAC1B,OAAO95P,GAAU+5P,EAAiB/uP,KAAKC,MAAMjL,GAAU+5P,GAE3D1F,EAAelyP,UAAU4kL,YAAc,SAAU3sK,EAAO7J,GAChDA,IACAtU,KAAKs7P,YAAa,GAER,OAAVn9O,GAAmBgD,MAAMhD,IACrBne,KAAK65P,WACL17O,EAAQne,KAAK85P,YAAY37O,EAAOne,KAAK65P,WAG7C75P,KAAKkvM,WAAa/wL,EAClBne,KAAK45P,YAAsB,OAAVz7O,GAAkBgD,MAAMhD,GAAS,KAAOne,KAAKqhB,WAAarhB,KAAKs5E,UAAUn7D,GAASA,GAE9Fne,KAAKq4P,iBACNr4P,KAAKw7P,iBAAiBlnP,IAG9B8jP,EAAelyP,UAAU63P,eAAiB,SAAUhjP,EAAMijP,GACtD,gBAASjjP,EAAMijP,EAASh+P,KAAKk5P,aAC7Bl5P,KAAK8qL,YAAY9qL,KAAKme,QAE1Bi6O,EAAelyP,UAAU0zP,YAAc,SAAUz7O,GAC7C,GAAMA,GAAmB,IAAVA,EAIV,CACD,IAAI8/O,EAAmBj+P,KAAKk+P,oBAAoB//O,GAChDne,KAAK6Q,cAAc,CAAEsN,MAAOne,KAAK85P,YAAY37O,EAAO8/O,KAAqB,QALzE9/O,EAAQ,KACRne,KAAK6Q,cAAc,CAAEsN,MAAOA,IAAS,GAMzCne,KAAKm+P,aACAn+P,KAAKqhB,YACNrhB,KAAK2oL,iBAGbyvE,EAAelyP,UAAUi4P,WAAa,WAClC,GAAIn+P,KAAKme,OAAwB,IAAfne,KAAKme,MAAa,CAChC,IAAIA,EAAQne,KAAKo+P,eACb9wE,EAAettL,KAAKmd,UAAYgB,EAAQne,KAAKg/F,SAASxqD,gBAAgBx0C,KAAKk5P,YAAnCl5P,CAAgDA,KAAKme,OACjGne,KAAK07P,gBAAgBpuE,GACrB,eAAWttL,KAAKmJ,QAAS,CAAE,gBAAiBgV,IAC5Cne,KAAK+5P,YAAY57O,MAAQne,KAAKme,MAAM7G,WACjB,OAAftX,KAAKme,OAAkBne,KAAKq+P,yBAC5Br+P,KAAK+5P,YAAY57O,MAAQne,KAAK+5P,YAAY57O,MAAMoC,QAAQ,IAAKvgB,KAAKq+P,8BAItEr+P,KAAK07P,gBAAgB,IACrB17P,KAAKmJ,QAAQqH,gBAAgB,iBAC7BxQ,KAAK+5P,YAAY57O,MAAQ,MAGjCi6O,EAAelyP,UAAUw1P,gBAAkB,SAAUp5O,EAAKnZ,GACtD,OAAMmc,SAAShD,EAAMnZ,GAAoBnJ,KAAKmJ,QAAUnJ,KAAKwd,eAAgBxd,KAAK2gB,kBAEtFy3O,EAAelyP,UAAUyiL,cAAgB,WACrC3oL,KAAKgwL,cAAe,GAChBhwL,KAAKme,OAAwB,IAAfne,KAAKme,SACnBne,KAAKgwL,eAAiBhwL,KAAKme,MAAQne,KAAK+e,KAAO/e,KAAKme,MAAQne,KAAKkiB,MAErEliB,KAAKy7P,mBAETrD,EAAelyP,UAAUg4P,oBAAsB,SAAU//O,GACrD,IAAI8/O,EAEAK,EAAY,IAAIpqN,OAAO,qBACvBpxB,EAAc3E,EAAM7G,WACxB,GAAIgnP,EAAUp7O,KAAKJ,GAAc,CAC7B,IAAI/e,EAASu6P,EAAUj7P,KAAKyf,GACvB,eAAkB/e,KACnB+e,EAAc3E,EAAMwgB,QAAQ5vB,KAAKmT,IAAInd,SAAShB,EAAO,GAAI,IAAK,MAGtE,IAAIw6P,EAAcz7O,EAAYziB,MAAM,KAAK,GAKzC,OAJA49P,EAAoBM,GAAgBA,EAAY73P,OAAa63P,EAAY73P,OAAhB,EACnC,OAAlB1G,KAAK65P,WACLoE,EAAmBA,EAAmBj+P,KAAK65P,SAAWoE,EAAmBj+P,KAAK65P,UAE3EoE,GAEX7F,EAAelyP,UAAUk4P,aAAe,WACpC,IAAIH,EAAmBj+P,KAAKk+P,oBAAoBl+P,KAAKme,OACrD,OAAOne,KAAKg/F,SAASxqD,gBAAgB,CACjC2mN,sBAAuB8C,EACvB7C,sBAAuB6C,EAAkBxpN,aAAa,GAFnDz0C,CAGJA,KAAKme,QAEZi6O,EAAelyP,UAAUozE,UAAY,SAAUn7D,GAC3C,OAAIA,EAAQne,KAAK+e,IACN/e,KAAK+e,IAEZZ,EAAQne,KAAKkiB,IACNliB,KAAKkiB,IAET/D,GAEXi6O,EAAelyP,UAAU4zP,YAAc,SAAU37O,EAAO0/O,GACpD,IAAI95P,EAASoa,EACT07O,EAAWgE,GAAa,EACxB56J,EAAUl/F,EAAOuT,WAAWjX,MAAM,KACtC0D,EAASgL,KAAKC,MAAM0jC,OAAOuwD,EAAQ,GAAK,KAAOA,EAAQ,GAAMvwD,OAAOuwD,EAAQ,IAAM42J,EAAYA,KAC9F,IAAI2E,EAAUz6P,EAAOuT,WAAWjX,MAAM,KAEtC,OADA0D,EAAS2uC,OAAO8rN,EAAQ,GAAK,KAAOA,EAAQ,GAAM9rN,OAAO8rN,EAAQ,IAAM3E,GAAaA,IAC7EnnN,OAAO3uC,EAAO46B,QAAQk7N,KAEjCzB,EAAelyP,UAAU4mC,YAAc,SAAUx4B,GAE7C,OADAA,EAAMsE,kBACC,GAEXw/O,EAAelyP,UAAUk7I,gBAAkB,SAAU9sI,GACjD,IAAKtU,KAAK+d,SAAW/d,KAAKkf,SACtB,OAAO,EAEX,IAAK,OAAQ3J,UAAqC,SAAzB,OAAQosB,KAAK88N,SAAwC,KAAlBnqP,EAAM4E,QAAgB,CAC9E,IAAI8iP,EAAch8P,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKmJ,QAAQgV,OAE9E,OADAne,KAAK8qL,YAAYkxE,EAAa1nP,IACvB,EAEX,GAAoB,IAAhBA,EAAM02E,OAAe12E,EAAM0xI,SAAW1xI,EAAM24E,SAA6B,IAAlB34E,EAAM4E,SAAmC,KAAlB5E,EAAM4E,QACpF,OAAO,EAEX,IAAIwlP,EAAc77M,OAAOC,aAAaxuC,EAAM02E,OACxCwtK,EAAmB,eAAS,UAAW,eAAiBx4P,KAAKkgB,SAC7Dy+O,EAA0C,kBAAfrqP,EAAMgQ,MAA4Bo6O,IAAgBlG,EAE7EmG,IACAD,EAAclG,GAElB,IAAI5gO,EAAO53B,KAAKmJ,QAAQgV,MAExB,GADAyZ,EAAOA,EAAKyjG,UAAU,EAAGr7H,KAAKmJ,QAAQmd,gBAAkBo4O,EAAc9mO,EAAKyjG,UAAUr7H,KAAKmJ,QAAQod,cAC7FvmB,KAAKm8P,eAAej5O,KAAK0U,GAKzB,CAED,GAAI+mO,EAA0B,CAC1B,IAAIh3O,EAAQ3nB,KAAKmJ,QAAQmd,eAAiB,EAC1CtmB,KAAKmJ,QAAQgV,MAAQyZ,EACrB53B,KAAKmJ,QAAQ4/K,kBAAkBphK,EAAOA,GACtCrT,EAAMsE,iBACNtE,EAAMoQ,kBAEV,OAAO,EAXP,OAFApQ,EAAMsE,iBACNtE,EAAMoQ,mBACC,GAcf0zO,EAAelyP,UAAUi2P,aAAe,WACpC,IAAIM,EAAgB,eAAiBz8P,KAAKkgB,QACtCs4O,EAAmB,eAAS,UAAWiE,GACvCmC,EAAe,IAInB,OAHIpG,IAAqBT,IACrBS,EAAmB,KAAOA,GAER,IAAlBx4P,KAAK65P,UAAkB75P,KAAK88P,sBACrBhF,GAEP93P,KAAK65P,UAAY75P,KAAK88P,wBACtB8B,EAAe,MAAQ5+P,KAAK65P,SAAW,KAGpC,IAAI3lN,OAAO,gBAAkBskN,EAAmB,MAAQoG,EAC3D,QAAUpG,EAAmB,MAAQoG,EAAe,WAE5DxG,EAAelyP,UAAU24P,WAAa,SAAUvqP,GAE5C,IAAIozB,EADJpzB,EAAMsE,iBAGN,IAAIkmP,EAAWxqP,EACXwqP,EAASC,WACTr3N,EAAQo3N,EAASC,WAAa,IAEzBD,EAASltD,SACdlqK,GAASo3N,EAASltD,OAAS,GAE3BlqK,EAAQ,EACR1nC,KAAKomB,OAAOwxO,EAAWtjP,GAElBozB,EAAQ,GACb1nC,KAAKomB,OAAOyxO,EAAWvjP,GAE3BtU,KAAK8sC,YAAYx4B,IAErB8jP,EAAelyP,UAAUs5F,aAAe,SAAUlrF,GAC9C,IAAIlL,EAAQpJ,KAIZ,GAHA0S,aAAaylP,GACbn4P,KAAKg/P,eAAiB,CAAE1qP,MAAOA,EAAO6J,MAAOne,KAAKme,MAAO/I,UAAWpV,KAAKoV,WACzEpV,KAAK6N,QAAQ,QAAS7N,KAAKg/P,gBACtBh/P,KAAK+d,UAAW/d,KAAKkf,SAA1B,CAMA,GAHAlf,KAAKmd,WAAY,EACjB,gBAAY,CAACnd,KAAKoV,WAAYyG,GAC9B7b,KAAK0rL,UAAY1rL,KAAKme,MACjBne,KAAKme,OAAwB,IAAfne,KAAKme,MAAc,CAClC,IAAI8gP,EAAgBj/P,KAAKo+P,eAEzB,GADAp+P,KAAK07P,gBAAgBuD,IAChBj/P,KAAKu4P,cACN,GAAK,OAAQhjP,UAAqC,SAAzB,OAAQosB,KAAK88N,QAGjC,CACD,IAAIz1P,EAAS,OAAQuM,UAAY,OAAQ4iG,MAAS,IAAM,EACxDggJ,EAAmBnlP,YAAW,WAC1B5J,EAAMD,QAAQ4/K,kBAAkB,EAAGk2E,EAAcv4P,UAClDsC,QANHhJ,KAAKmJ,QAAQ4/K,kBAAkB,EAAGk2E,EAAcv4P,QAUvD,OAAQ6O,UACT,OAAa7D,IAAI1R,KAAKmJ,QAAS,4BAA6BnJ,KAAK6+P,WAAY7+P,QAGrFo4P,EAAelyP,UAAUu5F,gBAAkB,SAAUnrF,GACjD,IAAIlL,EAAQpJ,KAGZ,GAFAA,KAAKk/P,cAAgB,CAAE5qP,MAAOA,EAAO6J,MAAOne,KAAKme,MAAO/I,UAAWpV,KAAKoV,WACxEpV,KAAK6N,QAAQ,OAAQ7N,KAAKk/P,eACrBl/P,KAAK+d,UAAW/d,KAAKkf,SAA1B,CAGA,GAAIlf,KAAKu4P,eAEL,GADAjkP,EAAMsE,iBACF,OAAQrD,SAAU,CAClB,IAAI8nH,EAAUr9H,KAAKmJ,QAAQgV,MAC3Bne,KAAKmJ,QAAQqc,QACbxlB,KAAKu4P,eAAgB,EACrB,IAAI1qH,EAAQ7tI,KAAKmJ,QACjB6J,YAAW,WACP5J,EAAMsyP,gBAAgBr+H,EAASwQ,KAChC,UAGN,CACD7tI,KAAKmd,WAAY,EACZnd,KAAKmJ,QAAQgV,MAAMzX,QACpB1G,KAAK6Q,cAAc,CAAEsN,MAAO,OAAQ,GAExC,IAAI69O,EAAch8P,KAAKg/F,SAAS2+F,gBAAgB,CAAE37K,OAAQ,KAAxChiB,CAA+CA,KAAKmJ,QAAQgV,OAC9Ene,KAAK8qL,YAAYkxE,GACZ,OAAQzmP,UACT,OAAatK,OAAOjL,KAAKmJ,QAAS,4BAA6BnJ,KAAK6+P,YAG5E,IAAI/6O,EAAc,eAAQ9jB,KAAKmJ,QAAS,QACxC,GAAI2a,EAAa,CACb,IAAI3a,EAAUnJ,KAAKmJ,QAAQ02F,mBACvBs/J,EAAa3rP,SAASwR,YAAY,cACtCm6O,EAAWl6O,UAAU,YAAY,GAAO,GACxC9b,EAAQ+b,cAAci6O,MAG9B/G,EAAelyP,UAAU01P,mBAAqB,SAAUtnP,GACpD,IAAIlL,EAAQpJ,KAKZ,GAJIA,KAAKmd,YACLnd,KAAKu4P,eAAgB,EACrBjkP,EAAMsE,kBAEL5Y,KAAKo/P,eAAe9qP,GAAzB,CAIatU,KAAKo/P,eAAe9qP,GAAjC,IACIhO,EAASgO,EAAM4G,cACfkL,EAAU9f,EAAO0E,UAAUkB,SAASwrP,GAAWE,EAAYC,EAC/D,OAAanmP,IAAIpL,EAAQ,aAActG,KAAKq/P,aAAcr/P,MAC1DA,KAAKs/P,QAAUzgH,aAAY,WACvBz1I,EAAMsvP,UAAW,EACjBtvP,EAAMgd,OAAOA,EAAQ9R,KACtB,KACH,OAAa5C,IAAI8B,SAAU,UAAWxT,KAAKq/P,aAAcr/P,QAE7Do4P,EAAelyP,UAAU41P,mBAAqB,SAAUxnP,GACpD,IAAIhO,EACJ,GAAmB,cAAfgO,EAAMF,KAAsB,CAC5B,IAAImrP,EAAajrP,EAAMuE,QACvBvS,EAASi5P,EAAW74P,QAAU8M,SAASgsP,iBAAiBD,EAAW,GAAGzmP,MAAOymP,EAAW,GAAGxmP,YAG3FzS,EAASkN,SAASgsP,iBAAiBlrP,EAAMo4E,QAASp4E,EAAMq4E,SAEtDrmF,EAAO0E,UAAUkB,SAASurP,IAC5Bh5G,cAAcz+I,KAAKs/P,UAG3BlH,EAAelyP,UAAU21P,iBAAmB,SAAUvnP,GAWlD,GAVAtU,KAAK0rL,UAAY1rL,KAAKme,MAClBne,KAAKu4P,gBACLv4P,KAAKmJ,QAAQqc,QACR,OAAQjQ,WACTvV,KAAKu4P,eAAgB,IAGxB,OAAQhjP,UACTjB,EAAMsE,iBAEL5Y,KAAKo/P,eAAe9qP,GAAzB,CAGA,IAAIhO,EAASgO,EAAM4G,cACfkL,EAAU9f,EAAO0E,UAAUkB,SAASwrP,GAAWE,EAAYC,EAC/D,OAAa5sP,OAAO3E,EAAQ,aAActG,KAAKq/P,cAC1Cr/P,KAAK04P,UACN14P,KAAKomB,OAAOA,EAAQ9R,GAExBtU,KAAK04P,UAAW,EAChB,OAAaztP,OAAOuI,SAAU,UAAWxT,KAAKq/P,cAC9C,IAAIv7O,EAAc,eAAQ9jB,KAAKmJ,QAAS,QACxC,GAAI2a,EAAa,CACb,IAAI3a,EAAUnJ,KAAKmJ,QAAQ02F,mBACvB96E,EAAavR,SAASwR,YAAY,iBACtCD,EAAWE,UAAU,SAAS,GAAO,GACrC9b,EAAQ+b,cAAcH,MAG9BqzO,EAAelyP,UAAUk5P,eAAiB,SAAU9qP,GAChD,QAAKA,EAAM02E,OAAyB,IAAhB12E,EAAM02E,OAAiB12E,EAAM6nF,QAA2B,IAAjB7nF,EAAM6nF,SACzDn8F,KAAK+d,SAAW/d,KAAKkf,YAG7Bu/H,cAAcz+I,KAAKs/P,UACZ,IAEXlH,EAAelyP,UAAUu5P,qBAAuB,WAC5C,OAAMxvO,eAAejwB,KAAK2d,cAC1B,IAAIo8O,EAAc/5P,KAAK+5P,YACvB/5P,KAAK+5P,YAAY9uP,SACjB,OAAMilB,YAAYlwB,KAAKmJ,QAASnJ,KAAKwd,eAAgBxd,KAAK0f,YAAa1f,KAAKqK,eAC5ErK,KAAKoV,UAAU6V,aAAa8uO,EAAa/5P,KAAKoV,UAAUq1B,WAAW,KAEvE2tN,EAAelyP,UAAUm5P,aAAe,SAAU/qP,GAC9CA,EAAMoQ,kBACN+5H,cAAcz+I,KAAKs/P,SACnBt/P,KAAK04P,UAAW,EACZ14P,KAAKg7P,QACL,OAAa/vP,OAAOjL,KAAKg7P,OAAQ,aAAch7P,KAAKq/P,cAEpDr/P,KAAK+6P,UACL,OAAa9vP,OAAOjL,KAAK+6P,SAAU,aAAc/6P,KAAKq/P,eAU9DjH,EAAelyP,UAAU29G,UAAY,SAAUs7B,QAC9B,IAATA,IAAmBA,EAAOn/I,KAAKm/I,MACnCn/I,KAAKs7P,YAAa,EAClBt7P,KAAK45P,YAAY55P,KAAKu7P,cAAcv7P,KAAKme,MAAOghI,EAAMy4G,IACtD53P,KAAKw7P,oBASTpD,EAAelyP,UAAUw5P,UAAY,SAAUvgH,QAC9B,IAATA,IAAmBA,EAAOn/I,KAAKm/I,MACnCn/I,KAAKs7P,YAAa,EAClBt7P,KAAK45P,YAAY55P,KAAKu7P,cAAcv7P,KAAKme,MAAOghI,EAAM04G,IACtD73P,KAAKw7P,oBASTpD,EAAelyP,UAAUgS,QAAU,WAC/BlY,KAAKma,eACL,eAAOna,KAAK+5P,aACR/5P,KAAKy5P,iBACLz5P,KAAK+7P,sBACL,eAAO/7P,KAAKg7P,QACZ,eAAOh7P,KAAK+6P,WAKhB,IAHA,IAAI4E,EAAY,CAAC,kBAAmB,OAAQ,eAAgB,gBACxD,gBAAiB,iBAAkB,aAAc,oBAAqB,WACtE,gBAAiB,gBAAiB,gBAAiB,gBAC9C54P,EAAI,EAAGA,EAAI44P,EAAUj5P,OAAQK,IAClC/G,KAAKmJ,QAAQqH,gBAAgBmvP,EAAU54P,IAE3C/G,KAAKmJ,QAAQ6B,UAAUC,OAAO,WAC9BjL,KAAKoV,UAAU6X,sBAAsB,WAAYjtB,KAAKmJ,SACtD,eAAOnJ,KAAKoV,WACZpV,KAAKg7P,OAAS,KACdh7P,KAAK+6P,SAAW,KAChB/6P,KAAKoV,UAAY,KACjBpV,KAAK+5P,YAAc,KACnB/5P,KAAKm3P,gBAAkB,KACvBn3P,KAAKk/P,cAAgB,KACrBl/P,KAAKg/P,eAAiB,KACtBh/P,KAAK2d,aAAe,KACpB,OAAMzF,UACNtP,EAAO1C,UAAUgS,QAAQ7O,KAAKrJ,OAOlCo4P,EAAelyP,UAAU0jL,QAAU,WAC/B,OAAO5pL,KAAKmJ,QAAQgV,OAQxBi6O,EAAelyP,UAAUwmB,QAAU,WAC3BlZ,SAASsT,gBAAkB9mB,KAAKmJ,SAAWnJ,KAAK+d,UAChD/d,KAAKmJ,QAAQqc,QACb,eAAS,CAACxlB,KAAKoV,WAAY,CAAC6iP,MAQpCG,EAAelyP,UAAUshB,SAAW,WAC5BhU,SAASsT,gBAAkB9mB,KAAKmJ,SAAWnJ,KAAK+d,UAChD/d,KAAKmJ,QAAQoc,OACb,gBAAY,CAACvlB,KAAKoV,WAAY,CAAC6iP,MASvCG,EAAelyP,UAAUuU,eAAiB,WACtC,IAAIipD,EAAY,CAAC,SACjB,OAAO1jE,KAAK0a,aAAagpD,IAW7B00L,EAAelyP,UAAUyU,kBAAoB,SAAUC,EAASC,GAC5D,IAAK,IAAIpH,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAKF,GAAUnH,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC9D,IAAIsH,EAAOnR,EAAG6J,GACd,OAAQsH,GACJ,IAAK,QACD/a,KAAK25P,gBAAgB/+O,EAAQxP,OAC7B,OAAMqS,eAAezd,KAAKmJ,QAASnJ,KAAKoV,WACxC,MACJ,IAAK,WACDpV,KAAK8lB,eAAelL,EAAQvK,SAAUwK,EAAQxK,UAC9C,MACJ,IAAK,UACD,OAAMwf,WAAWjV,EAAQmD,QAAS/d,KAAKmJ,SACvCnJ,KAAK2kB,iBACL,MACJ,IAAK,YACD,OAAMoL,aAAanV,EAAQrP,UAAW,CAACvL,KAAKoV,YAC5C,MACJ,IAAK,WACD,OAAMwa,YAAYhV,EAAQsE,SAAUlf,KAAKmJ,SACrCnJ,KAAKkf,SACL,eAAWlf,KAAKmJ,QAAS,CAAE,gBAAiB,SAG5CnJ,KAAKmJ,QAAQqH,gBAAgB,iBAEjC,MACJ,IAAK,iBACDxQ,KAAKq5P,0BACLr5P,KAAKu6P,0BACLv6P,KAAKw6P,qBAAoB,GACzBx6P,KAAKimL,iBAAgB,GACrB,OAAM25E,kBAAkB5/P,KAAKoV,UAAWpV,KAAKmJ,SAC7C,MACJ,IAAK,cACD,OAAMwmB,eAAe/U,EAAQ8E,YAAa1f,KAAKmJ,SAC/C,OAAMsU,eAAezd,KAAKmJ,QAASnJ,KAAKoV,WACxC,MACJ,IAAK,OACDpV,KAAKm/I,KAAOvkI,EAAQukI,KACpBn/I,KAAKs5P,eACL,MACJ,IAAK,iBACDt5P,KAAK6/P,iBAAiBjlP,GACtB,MACJ,IAAK,kBACD5a,KAAK8/P,kBAAkBllP,GACvB,MACJ,IAAK,iBACD5a,KAAKwd,eAAiB5C,EAAQ4C,eAC9Bxd,KAAKy/P,uBACL,MACJ,IAAK,QACDz/P,KAAKq4P,iBAAmBr4P,KAAK8c,WAAa9c,KAAKsvD,QAAUtvD,KAAK+c,cAC9D/c,KAAK8qL,YAAYlwK,EAAQuD,OACrBne,KAAKq4P,kBACLr4P,KAAK+c,eAAgB,EACrB/c,KAAKq4P,iBAAkB,GAE3B,MACJ,IAAK,MACL,IAAK,MACD,gBAASt9O,EAAM,eAASA,EAAMH,GAAU5a,MACxCA,KAAKoqL,iBACLpqL,KAAK8qL,YAAY9qL,KAAKme,OACtB,MACJ,IAAK,aACDne,KAAKqhB,WAAazG,EAAQyG,WAC1BrhB,KAAK8qL,YAAY9qL,KAAKme,OACtBne,KAAK2oL,gBACL,MACJ,IAAK,SACD3oL,KAAKo5P,kBACLp5P,KAAKmgB,KAAK2P,UAAU9vB,KAAKkgB,QACzBlgB,KAAK27P,gBACL37P,KAAKu5P,oBACL,OAAM5pO,eAAe3vB,KAAK0f,YAAa1f,KAAKmJ,SAC5CnJ,KAAK8qL,YAAY9qL,KAAKme,OACtB,MACJ,IAAK,WAEG,IAAI6/O,EAAU,eAASjjP,EAAMH,GAC7B5a,KAAK6Q,cAAc,CAAEspP,aAAc6D,IAAW,GAC9Ch+P,KAAK+9P,eAAehjP,EAAMijP,GAE9B,MACJ,IAAK,eAEG,IAAI+B,EAAY,eAAShlP,EAAMH,GAC/B5a,KAAK6Q,cAAc,CAAE4jH,SAAUsrI,IAAa,GAC5C//P,KAAK+9P,eAAe,WAAYgC,GAEpC,MACJ,IAAK,SACD,gBAAShlP,EAAM,eAASA,EAAMH,GAAU5a,MACxCA,KAAKm5P,kBACLn5P,KAAK8qL,YAAY9qL,KAAKme,OACtB,MACJ,IAAK,WACDne,KAAK65P,SAAWj/O,EAAQi/O,SACxB75P,KAAK8qL,YAAY9qL,KAAKme,UAItCi6O,EAAelyP,UAAU45P,kBAAoB,SAAUllP,GACnD,OAAMoV,eAAepV,EAAQ+F,gBAAiB3gB,KAAKmJ,QAASnJ,KAAK2d,kBAAcxM,EAAWnR,KAAKqK,eAC/FrK,KAAK2kB,kBAETyzO,EAAelyP,UAAU25P,iBAAmB,SAAUjlP,GAC9CA,EAAQ6+O,eACRz5P,KAAK05P,mBAGL,eAAO15P,KAAKg7P,QACZ,eAAOh7P,KAAK+6P,YASpB3C,EAAelyP,UAAUsU,cAAgB,WACrC,MAAO,kBAEXpU,EAAW,CACP,eAAS,KACVgyP,EAAelyP,UAAW,gBAAY,GACzCE,EAAW,CACP,eAAS,OACVgyP,EAAelyP,UAAW,aAAS,GACtCE,EAAW,CACP,gBAAWssC,OAAgB,YAC5B0lN,EAAelyP,UAAW,WAAO,GACpCE,EAAW,CACP,eAASssC,OAAOC,YACjBylN,EAAelyP,UAAW,WAAO,GACpCE,EAAW,CACP,eAAS,IACVgyP,EAAelyP,UAAW,YAAQ,GACrCE,EAAW,CACP,eAAS,OACVgyP,EAAelyP,UAAW,aAAS,GACtCE,EAAW,CACP,eAAS,OACVgyP,EAAelyP,UAAW,mBAAe,GAC5CE,EAAW,CACP,eAAS,KACVgyP,EAAelyP,UAAW,sBAAkB,GAC/CE,EAAW,CACP,gBAAS,IACVgyP,EAAelyP,UAAW,sBAAkB,GAC/CE,EAAW,CACP,gBAAS,IACVgyP,EAAelyP,UAAW,gBAAY,GACzCE,EAAW,CACP,gBAAS,IACVgyP,EAAelyP,UAAW,eAAW,GACxCE,EAAW,CACP,gBAAS,IACVgyP,EAAelyP,UAAW,uBAAmB,GAChDE,EAAW,CACP,gBAAS,IACVgyP,EAAelyP,UAAW,yBAAqB,GAClDE,EAAW,CACP,eAAS,OACVgyP,EAAelyP,UAAW,cAAU,GACvCE,EAAW,CACP,eAAS,OACVgyP,EAAelyP,UAAW,gBAAY,GACzCE,EAAW,CACP,eAAS,OACVgyP,EAAelyP,UAAW,gBAAY,GACzCE,EAAW,CACP,eAAS,OACVgyP,EAAelyP,UAAW,oBAAgB,GAC7CE,EAAW,CACP,gBAAS,IACVgyP,EAAelyP,UAAW,kBAAc,GAC3CE,EAAW,CACP,gBAAS,IACVgyP,EAAelyP,UAAW,6BAAyB,GACtDE,EAAW,CACP,eAAS,UACVgyP,EAAelyP,UAAW,sBAAkB,GAC/CE,EAAW,CACP,kBACDgyP,EAAelyP,UAAW,eAAW,GACxCE,EAAW,CACP,kBACDgyP,EAAelyP,UAAW,iBAAa,GAC1CE,EAAW,CACP,kBACDgyP,EAAelyP,UAAW,cAAU,GACvCE,EAAW,CACP,kBACDgyP,EAAelyP,UAAW,aAAS,GACtCE,EAAW,CACP,kBACDgyP,EAAelyP,UAAW,YAAQ,GACrCkyP,EAAiBhyP,EAAW,CACxB,QACDgyP,GACIA,EAh0CwB,CAi0CjC,S,kCCr3CF,0KAiBI4H,EAAoC,WAOpC,SAASA,EAAmBrkO,GACxB37B,KAAKigQ,gBAAiB,EACtBjgQ,KAAKqqM,kBAAoB,GACzBrqM,KAAKkgQ,gBAAkB,IAAI,OAE3BlgQ,KAAKmgQ,aAAc,EACnBngQ,KAAKg/B,OAAS,GACdh/B,KAAK+/N,aAAc,EACnB//N,KAAKogQ,0BAA2B,EAChCpgQ,KAAKqgQ,mBAAoB,EAEzBrgQ,KAAKsgQ,qBAAsB,EAC3BtgQ,KAAKugQ,yBAA0B,EAC/BvgQ,KAAKwgQ,2BAA6B,GAClCxgQ,KAAKygQ,+BAAgC,EACrCzgQ,KAAK0gQ,gBAAkB,EACvB1gQ,KAAK2gQ,yBAA2B,EAChC3gQ,KAAK4gQ,4BAA8B,GACnC5gQ,KAAK6gQ,mBAAqB,GAC1B7gQ,KAAK8gQ,kBAAoB,EACzB9gQ,KAAK+gQ,wBAAyB,EAC9B/gQ,KAAKghQ,+BAAgC,EACrChhQ,KAAKihQ,kCAAmC,EACxCjhQ,KAAKkhQ,iCAAmC,GACxClhQ,KAAK27B,OAASA,EACd37B,KAAKkR,GAAKlR,KAAK27B,OAAOxyB,QAAQ+H,GAC9BlR,KAAK+kG,eAAiB,IAAI,OAAe/kG,KAAK27B,OAAOzb,QACrDlgB,KAAKmhQ,SAAW,eAAenhQ,KAAK27B,OAAOtxB,eAAe,EAAO,CAAEy0F,SAAS,EAAMxsB,MAAO,MACzFtyE,KAAKohQ,UAAY,eAAephQ,KAAK27B,OAAOtxB,eAAe,EAAO,CAAEy0F,SAAS,EAAOxsB,MAAO,MAC3FtyE,KAAKmhQ,SAASl2O,aAAajrB,KAAK27B,OAAOtxB,cAAc,QAAS,CAC1DC,UAAW,eAAgBsK,MAAO,CAAER,KAAM,cAC1CpU,KAAKmhQ,SAASvyN,YAClB5uC,KAAKohQ,UAAUn2O,aAAajrB,KAAK27B,OAAOtxB,cAAc,QAAS,CAC3DC,UAAW,eAAgBsK,MAAO,CAAE,KAAQ,cAC5C5U,KAAKohQ,UAAUxyN,YACnB5uC,KAAKohQ,UAAUtvP,cAAc,YAAY9G,UAAU0G,IAAI,aACnD1R,KAAK27B,OAAOpwB,WACZ,eAAS,CAACvL,KAAKmhQ,SAAUnhQ,KAAKohQ,WAAY,CAAC,UAE3CphQ,KAAK27B,OAAOtrB,YAC+B,IAAvCrQ,KAAK27B,OAAOtrB,SAAStG,QAAQ,KAC7B,eAAS,CAAC/J,KAAKmhQ,SAAUnhQ,KAAKohQ,WAAYphQ,KAAK27B,OAAOtrB,SAAShQ,MAAM,MAGrE,eAAS,CAACL,KAAKmhQ,SAAUnhQ,KAAKohQ,WAAY,CAACphQ,KAAK27B,OAAOtrB,YAwtDnE,OAhtDA2vP,EAAmB95P,UAAUgS,QAAU,WACnClY,KAAKkkM,eAET87D,EAAmB95P,UAAUoT,WAAa,WACtC,OAAa5H,IAAI1R,KAAKwmM,IAAK,QAASxmM,KAAKmgE,aAAcngE,MACvD,OAAa0R,IAAI1R,KAAKwmM,IAAK,QAASxmM,KAAKyjB,aAAczjB,MACvDA,KAAKqhQ,cAAgB,eAASrhQ,KAAKshQ,eAAgB,KACnD,IAAIlzH,EAAOpuI,KAAK8/L,UAAU32L,QAAQ2I,cAAc,kBAC5Cs8H,IACA,OAAa18H,IAAI08H,EAAM,QAASpuI,KAAKqhQ,cAAerhQ,MACpD,OAAa0R,IAAI08H,EAAM,QAASpuI,KAAKqhQ,cAAerhQ,QAG5DggQ,EAAmB95P,UAAU26E,aAAe,WACxC,OAAa51E,OAAOjL,KAAKwmM,IAAK,QAASxmM,KAAKmgE,cAC5C,OAAal1D,OAAOjL,KAAKwmM,IAAK,QAASxmM,KAAKyjB,cAC5C,IAAI2qH,EAAOpuI,KAAK8/L,UAAU32L,QAAQ2I,cAAc,kBAC5Cs8H,IACA,OAAanjI,OAAOmjI,EAAM,QAASpuI,KAAKqhQ,eACxC,OAAap2P,OAAOmjI,EAAM,QAASpuI,KAAKqhQ,iBAGhDrB,EAAmB95P,UAAUknM,iBAAmB,SAAU5hL,EAAMkhL,EAAOD,GACnE,IAAIrjM,EAAQpJ,KACRm0D,EAAa,GACb84I,EAAmB,GACnB7yK,EAAQp6B,KAAKkgQ,gBAAgBxwM,QACjC1vD,KAAKkJ,QAAQqzB,OAAOpC,WAChBud,aAAatd,EAAMof,MAAMizJ,IAAa/xK,MAAK,SAAU3nB,GACrD3J,EAAMF,QAAQqzB,OAAOub,WAAa/kC,EAAEhP,OACpCqF,EAAMuyB,OAAOrc,OAAO,QAAsB,CAAEk5B,UAAW2b,EAAY53B,OAAQnzB,EAAMF,QAAQqzB,SACzF/Q,EAAK0hL,YAAc/4I,EAAW3b,UAAUI,WAExC,IADA,IAAI2oN,EAAQptM,EAAW3b,UAAUI,WACxB7xC,EAAI,EAAGA,EAAIw6P,EAAM76P,OAAQK,IAC9BkmM,EAAiBh7L,KAAK,CAClBkmC,MAAOopN,EAAMx8P,SAASgC,EAAEuQ,WAAY,KAAK6gC,MACzCK,UAAW,KACXe,UAAWgoN,EAAMx8P,SAASgC,EAAEuQ,WAAY,KAAK6iC,WAC7C4Y,aAAcwuM,EAAMx8P,SAASgC,EAAEuQ,WAAY,KAAKy7C,aAChDzZ,SAAUioN,EAAMx8P,SAASgC,EAAEuQ,WAAY,KAAKgiC,SAC5Cn7B,MAAOojP,EAAMx8P,SAASgC,EAAEuQ,WAAY,KAAK6G,MACzC/J,KAAMhL,EAAMF,QAAQkL,OAG5BoX,EAAKyhL,iBAAmBA,EAAiBvmM,OAASumM,EAC9CP,EAAMtzK,QAAO,SAAU24B,GAAO,OAAOA,EAAI5Z,MAAQ/uC,EAAMF,QAAQivC,SACnE/uC,EAAMF,QAAQo6I,QAAQ93H,OAG9Bw0O,EAAmB95P,UAAUs7P,cAAgB,SAAUh2O,EAAMrN,GACzD,IAAIm7B,EAAWt5C,KAAKkJ,QAAQipD,SACM,WAA7BnyD,KAAKkJ,QAAQqzB,OAAOnoB,KAAoB,WAAa,QAAYpU,KAAKkJ,QAAQqzB,OAAOnoB,KAAO,WAAa,QAC1GqtP,EAAkB,IAAI,OAAUzhQ,KAAKkJ,QAAQqzB,OAAO6b,gBAAiBkB,EAAUn7B,GAAO,EAAMne,KAAKkJ,QAAQ6pD,cAC7G/yD,KAAKotM,iBAAiB5hL,EAAM,CAACA,EAAKyhL,kBAAmBw0D,IAEzDzB,EAAmB95P,UAAUw7P,eAAiB,SAAU3uP,GACpD,IAAIzM,EAASyM,EAAEzM,OACXA,EAAO0E,UAAUkB,SAAS,mBAC1BlM,KAAK2hQ,OAAOxjP,MAAQ7X,EAAO0E,UAAUkB,SAAS,oBAAsB,GAAKlM,KAAK2hQ,OAAOxjP,MACjFne,KAAKogQ,yBACLpgQ,KAAK27B,OAAOrc,OAAO,kBAAmB,CAAEhL,MAAOvB,IAG/C/S,KAAK4hQ,oBAET5hQ,KAAK6hQ,mBACL7hQ,KAAK2hQ,OAAOn8O,UAGpBw6O,EAAmB95P,UAAUo7P,eAAiB,SAAUvuP,IAChD,eAAkBA,KAAiB,YAAVA,EAAElP,KAA+B,cAAVkP,EAAElP,KAAiC,QAAVkP,EAAElP,KAA6B,QAAVkP,EAAElP,KAAiBkP,EAAEm2L,YAC9G,eAAkBlpM,KAAK27B,OAAOqtE,mBAAoE,YAA/ChpG,KAAK27B,OAAOqtE,iBAAiBC,eACjFjpG,KAAK27B,OAAO8iM,iBAAYttN,EAAWnR,KAAK8/L,UAAU32L,SAElDnJ,KAAKogQ,yBACLpgQ,KAAK27B,OAAOrc,OAAO,kBAAmB,CAAEhL,MAAOvB,IAG/C/S,KAAK4hQ,oBAET5hQ,KAAK6hQ,qBAGb7B,EAAmB95P,UAAU27P,iBAAmB,WACxC7hQ,KAAK2hQ,OAAOxjP,MAAMzX,QAClB,eAAU1G,KAAK8hQ,MAAO,CAAC,oBAAqB,CAAC,kBACxC,eAAkBtuP,SAAS6B,KAAKvD,cAAc,uBAC/C0B,SAAS6B,KAAKvD,cAAc,qBAAqBvB,aAAa,QAASvQ,KAAKu+L,UAAUn+K,YAAY,YAItG,eAAUpgB,KAAK8hQ,MAAO,CAAC,iBAAkB,CAAC,qBACrC,eAAkBtuP,SAAS6B,KAAKvD,cAAc,kCAC/C0B,SAAS6B,KAAKvD,cAAc,gCAAgCvB,aAAa,QAASvQ,KAAKu+L,UAAUn+K,YAAY,aAUzH4/O,EAAmB95P,UAAUg8E,kBAAoB,SAAUr+E,GACvD,OAAO7D,KAAKu+L,UAAUn+K,YAAYvc,IAEtCm8P,EAAmB95P,UAAU67P,iBAAmB,WAC5C,IAAI5nO,EAAan6B,KAAKkJ,QAAQixB,WAC1BoS,EAAM,SACV,KAAMpS,aAAsB,QACxB,IAAK,IAAIpzB,EAAI,EAAGA,EAAIozB,EAAWzzB,OAAQK,IAEnC,UAAWozB,IAAeoS,EAAK,CAC3B,IAAI4uB,EAAM,GACVA,EAAIn7D,KAAKkJ,QAAQivC,OAAShe,EAAWp1B,SAASgC,EAAEuQ,WAAY,KAC5D6iB,EAAWp1B,SAASgC,EAAEuQ,WAAY,KAAO6jD,IAKzD6kM,EAAmB95P,UAAUmgM,YAAc,SAAUn9L,GACjDlJ,KAAKkJ,QAAUA,EACflJ,KAAKqqM,kBAAoBnhM,EAAQikM,iBAAmB,GACpDntM,KAAKkJ,QAAQixB,WAAajxB,EAAQixB,WAClCn6B,KAAKkJ,QAAQmxB,YAAcnxB,EAAQmxB,YAAcnxB,EAAQmxB,YAAcnxB,EAAQixB,WAC/En6B,KAAK+hQ,mBACL/hQ,KAAKkJ,QAAQkL,KAAOlL,EAAQkL,KAC5BpU,KAAKkJ,QAAQ8Y,OAAS9Y,EAAQ8Y,QAAU,GACxChiB,KAAKkJ,QAAQ6pD,aAAe7pD,EAAQ6pD,eAAgB,EACpD/yD,KAAKkJ,QAAQ4hM,gBAAkB5hM,EAAQ4hM,iBAAmB9qM,KAAK27B,OAAO0e,eAAe/c,QACrFt9B,KAAKkJ,QAAQkxB,MAAQlxB,EAAQkxB,OAAS,IAAI,OAC1Cp6B,KAAKkJ,QAAQotM,mBAAqBptM,EAAQotM,qBAAsB,EAChEt2M,KAAKkJ,QAAQqxC,IAAMrxC,EAAQqzB,OAAOge,IAClCv6C,KAAKkJ,QAAQi7F,kBAAoBj7F,EAAQqzB,OAAO4nE,oBAAqB,EACrEnkG,KAAKg/B,OAAS,GACdh/B,KAAKu+L,UAAYr1L,EAAQq1L,UACzBv+L,KAAK25C,WAAazwC,EAAQ4hM,gBAAgBpkM,OAC1C1G,KAAKqgQ,qBAAoBrgQ,KAAK27B,OAAO0e,iBAAkBr6C,KAAK27B,OAAO0e,eAAeqW,yBAClF1wD,KAAKgiQ,8BAAgChiQ,KAAKqgQ,mBAAqBrgQ,KAAKqqM,kBAAkBrqM,KAAKkJ,QAAQqzB,OAAO4b,OAASn4C,KAAKqqM,kBAAkBrqM,KAAKkJ,QAAQqzB,OAAO4b,OAAO7kC,QAAU,IAEnL0sP,EAAmB95P,UAAUogM,iBAAmB,SAAUp9L,GAOtD,GANAlJ,KAAKwmM,IAAMxmM,KAAK27B,OAAOtxB,cAAc,MAAO,CACxC6G,GAAIlR,KAAKkR,GAAKlR,KAAKkJ,QAAQkL,KAAO,YAClCQ,MAAO,CAAE2lC,IAAKv6C,KAAKkJ,QAAQqzB,OAAOge,KAClCjwC,UAAW,oCAEftK,KAAKymM,KAAOzmM,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,uBACrDpB,EAAQgtM,cAAe,CACxBl2M,KAAK2hQ,OAAS3hQ,KAAK27B,OAAOtxB,cAAc,QAAS,CAC7C6G,GAAIlR,KAAKkR,GAAK,aACd5G,UAAW,kBAEftK,KAAK8hQ,MAAQ9hQ,KAAK27B,OAAOtxB,cAAc,OAAQ,CAC3CC,UAAW,yDAA0DsK,MAAO,CACxER,KAAM,OAAQo/B,MAAOxzC,KAAKkiF,kBAAkB,aAGpDliF,KAAKiiQ,UAAYjiQ,KAAK27B,OAAOtxB,cAAc,OAAQ,CAAEC,UAAW,yBAChEtK,KAAKiiQ,UAAUz3P,YAAYxK,KAAK2hQ,QAChC3hQ,KAAKymM,KAAKj8L,YAAYxK,KAAKiiQ,WAC3B,IAAIC,EAAY,CACZ/4P,QAASnJ,KAAK2hQ,OAAQnkP,eAAgB,QAASkD,WAAY,CACvDhB,YAAa1f,KAAKkiF,kBAAkB,UACpC7xE,SAAUrQ,KAAK27B,OAAOtrB,WAG9B,OAAMmP,YAAY0iP,EAAWliQ,KAAK27B,OAAOtxB,eACzCrK,KAAKiiQ,UAAUnwP,cAAc,kBAAkBtH,YAAYxK,KAAK8hQ,OASpE,OAPA9hQ,KAAKmiQ,QAAUniQ,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,cAC7DtK,KAAKylM,KAAOzlM,KAAK27B,OAAOtxB,cAAc,MAAO,CACzC6G,GAAIlR,KAAKkR,GAAKlR,KAAKkJ,QAAQkL,KAAO,gBAClC9J,UAAW,4BAEftK,KAAKmiQ,QAAQ33P,YAAYxK,KAAKylM,MAC9BzlM,KAAKymM,KAAKj8L,YAAYxK,KAAKmiQ,SACpBniQ,KAAKymM,MAEhBu5D,EAAmB95P,UAAU0kM,WAAa,SAAU1hM,GAChD,IAAIsiB,EAAO,CACP6qB,YAAa,QACbmb,WAAYxxD,KAAKkJ,QAAQivC,MAAOgsJ,WAAYnkM,KAAKkJ,QAAQkL,KAAMC,QAAQ,GAEvE+vL,EAAc,cAGlB,GAFA54K,EAAK,GAAK44K,GAAepkM,KACzBA,KAAK27B,OAAOrc,OAAO,OAAsBkM,GACrCA,EAAKnX,OACLnL,EAAQmL,OAASmX,EAAKnX,WAD1B,CAIArU,KAAK8/L,UAAY,IAAI,OAAO,CACxBxtK,SAAS,EAAO7hB,QAASzQ,KAAKymM,KAC9B96L,MAAO3L,KAAKkkM,YAAYx4L,KAAK1L,MAC7BuL,UAAWvL,KAAK27B,OAAOpwB,UACvBH,OAAS,eAAkB,gBAAalC,EAAQ5C,OAAQ,cACjDtG,KAAK27B,OAAOxyB,QAAQ6B,UAAUkB,SAAS,YAAc,IAAM,IAClE5F,OAAQtG,KAAK27B,OAAOxyB,QAAS6pG,kBAAmB,CAAElqG,OAAQ,QAC1D8U,QAAS,CAAC,CACF+wE,MAAO3uF,KAAKumM,SAAS76L,KAAK1L,MAC1B0kM,YAAa,CACTj0L,QAASzQ,KAAKkiF,kBAAkBliF,KAAKmnM,QAAU,WAAa,gBAC5D92L,SAAUrQ,KAAK27B,OAAOtrB,SAAW,aAAoBrQ,KAAK27B,OAAOtrB,SAAW,YAC5Es0L,WAAW,IAGnB,CACIh2G,MAAO3uF,KAAKumM,SAAS76L,KAAK1L,MAC1B0kM,YAAa,CAAEr0L,SAAUrQ,KAAK27B,OAAOtrB,SAAW,UAAiBrQ,KAAK27B,OAAOtrB,SAAW,SACpFI,QAASzQ,KAAKkiF,kBAAkBliF,KAAKmnM,QAAU,eAAiB,kBAE5EprJ,QAAS/7C,KAAKykM,cAAc/4L,KAAK1L,MACjCwL,KAAMxL,KAAKkzG,WAAWxnG,KAAK1L,MAC3BqQ,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,KAE5D,IAAI6oI,EAAmB,mBACvBl5I,KAAK8/L,UAAU,GAAK5mD,IAAoB,EACxCl5I,KAAKoiQ,uBAAuBl5P,GAC5B,IAAIm5P,EAAcriQ,KAAK27B,OAAO0e,gBAAsD,aAApCr6C,KAAK27B,OAAO0e,eAAejmC,KACvEpU,KAAKkiF,kBAAkB,4BAA8BliF,KAAKkiF,kBAAkB,yBAEhF,GADAliF,KAAKwmM,IAAIj2L,aAAa,aAAc8xP,GAChCn5P,EAAQ6+L,mBAAoB,CAC5B,IAAIxD,EAAgB/wL,SAAS1B,cAAc,4DAC3CyyL,EAAc/5L,YAAYxK,KAAKwmM,UAG/BxmM,KAAK27B,OAAOxyB,QAAQqB,YAAYxK,KAAKwmM,KAEzCxmM,KAAK8/L,UAAUh0K,SAAS9rB,KAAKwmM,KAC7BxmM,KAAK8/L,UAAU32L,QAAQwD,MAAMmmI,UAAY5pI,EAAQ6+L,mBAAqB,OAAS/nM,KAAKkJ,QAAQiC,OAAS,KACrGnL,KAAK8/L,UAAUjqL,OACf,IAAIpF,EAAUzQ,KAAK8/L,UAAU32L,QAAQ2I,cAAc,kBACnDrB,EAAQjG,YAAYxK,KAAKymM,MACzBzmM,KAAKsZ,aACA,eAAkBtZ,KAAK27B,OAAOqtE,mBAAoE,YAA/ChpG,KAAK27B,OAAOqtE,iBAAiBC,eAC7EjpG,KAAKqgQ,kBAGJrgQ,KAAKqgQ,mBAAqBrgQ,KAAK27B,OAAO0e,gBAAkE,YAAhDr6C,KAAK27B,OAAO0e,eAAe2uD,iBACxFhpG,KAAKsiQ,YAGDtiQ,KAAKqgQ,oBACLrgQ,KAAKylM,KAAK94L,MAAM0jI,UAAYrwI,KAAKuiQ,cAAcviQ,KAAKylM,MAAQ,MAEhE,eAAc,CAAEn/L,OAAQtG,KAAKmiQ,QAAS9xP,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,MAAQrQ,KAAK27B,OAAOtxB,eAClH,eAAYrK,KAAKmiQ,UAVjBniQ,KAAK27B,OAAO8iM,iBAAYttN,EAAWnR,KAAK8/L,UAAU32L,SAYtDnJ,KAAK0lM,eAETs6D,EAAmB95P,UAAUk8P,uBAAyB,SAAUl5P,GACxDA,EAAQ6+L,qBACR/nM,KAAK8/L,UAAUliL,QAAU,CAAC,IAC1B5d,KAAK8/L,UAAUh2L,SAAW,CAAEuB,EAAG,GAAIC,EAAG,IACtCtL,KAAK8/L,UAAUx5L,OAASkN,SAAS1B,cAAc,oDAC/C9R,KAAK8/L,UAAU10L,MAAQ,SAG/B40P,EAAmB95P,UAAUu+L,cAAgB,SAAU1xL,GAC/C/S,KAAKkJ,QAAQ6+L,mBACb/nM,KAAK8/L,UAAU32L,QAAQwD,MAAM7B,KAAO,MAG/B,OAAQyK,SAITvV,KAAK8/L,UAAUh2L,SAAW,CAAEuB,EAAG,SAAUC,EAAG,UAH5C,eAAqBtL,KAAKkJ,QAAQ5C,OAAQtG,KAAK8/L,WAMnD9/L,KAAKkJ,QAAQqzB,OAAO+nE,gBACpBtkG,KAAK27B,OAAOrc,OAAO,QAA4BvM,IAGvDitP,EAAmB95P,UAAU89L,WAAa,SAAU96L,GAChDlJ,KAAKqmM,YAAYn9L,GACjBlJ,KAAKsmM,iBAAiBp9L,GACtBlJ,KAAK4qM,WAAW1hM,IAEpB82P,EAAmB95P,UAAUg+L,YAAc,WAIvC,GAHIlkM,KAAKqgQ,mBAAqBrgQ,KAAKwgQ,2BAA2B95P,SAAW1G,KAAKkJ,QAAQipD,WAClFnyD,KAAKkJ,QAAQixB,WAAWA,WAAW+0B,KAAOlvD,KAAKwgQ,4BAE/CxgQ,KAAK8/L,YAAc9/L,KAAK8/L,UAAUjzJ,YAAa,CAC/C7sC,KAAKwiQ,UAAW,EAChB,IAAIC,EAAoBziQ,KAAKkJ,QAAQo0B,QAAQlE,QAAO,SAAU24B,GAAO,OAAOA,EAAI+0C,2BAE5E2zC,EAAqBz6I,KAAK27B,OAAO8+G,mBACjCgoH,EAAkB/7P,SAAW,eAAkB+zI,IAAuBA,EAAmBioH,oBACzF1iQ,KAAK27B,OAAO2vK,gBAAgB,CAAC,wBAE5BtrM,KAAK27B,OAAO5tB,SAAW/N,KAAK27B,OAAO2zB,aAA0Cn+C,IAAhCnR,KAAK27B,OAAO2vK,iBAC1D,eAAuBtrM,KAAK27B,OAAQ,CAAC,uBAEzC37B,KAAK27B,OAAOrc,OAAO,QAAwB,CAAE64B,MAAOn4C,KAAKkJ,QAAQivC,QACjEn4C,KAAK8/L,UAAU5nL,UACflY,KAAK6gF,eACL,gBAAO7gF,KAAKwmM,KACZxmM,KAAKwmM,IAAM,KACXxmM,KAAK27B,OAAOrc,OAAO,QAA0B,MAQrD0gP,EAAmB95P,UAAU4gM,YAAc,SAAU/0I,GAEjD,IAAIvmC,EAAO,CAAEwzE,SAAUh/F,KAAMsjJ,QAAStjJ,KAAK8mM,YAAazyL,QAAQ,GAChErU,KAAK27B,OAAOrc,OAAO,QAAoBkM,GACnCA,EAAKnX,QAGTrU,KAAKkJ,QAAQo6I,QAAQ,CAAEl9H,OAAQ,eAAgB+xB,MAAO4Z,EAAMA,EAAI5Z,MAAQn4C,KAAKkJ,QAAQivC,SAEzF6nN,EAAmB95P,UAAUqgM,SAAW,SAAUxzL,GAC9C,GAAI/S,KAAKmgQ,YAAa,CAClB,GAAwC,UAAnCptP,EAAEzM,OAAOgP,QAAQgS,eAA6BvU,EAAEzM,OAAO0E,UAAUkB,SAAS,kBAC7D,KAAd6G,EAAEmG,QACGlZ,KAAKogQ,0BACNpgQ,KAAK+mM,qBAGR,CACD,IAAInvK,EAAO7kB,EAAEzM,OAAOsoC,WAAW/jB,YAAYvD,cACvCtnB,KAAKkiF,kBAAkBliF,KAAKmnM,QAAU,WAAa,gBAAgB7/K,gBAAkBsQ,EAChF53B,KAAKogQ,0BACNpgQ,KAAK+mM,iBAGJ/mM,KAAKkiF,kBAAkB,eAAe56D,gBAAkBsQ,GAC7D53B,KAAK8mM,cAGb9mM,KAAKkkM,mBAEAnxL,EAAEzM,QAAUyM,EAAEzM,OAAOsoC,YAC1B77B,EAAEzM,OAAOsoC,WAAW/jB,YAAYvD,gBAAkBtnB,KAAKkiF,kBAAkB,gBAAgB56D,cACzFtnB,KAAKkkM,cAEqC,UAAnCnxL,EAAEzM,OAAOgP,QAAQgS,gBACxBtnB,KAAK8mM,cACL9mM,KAAKkkM,eAELlkM,KAAKkJ,QAAQqzB,OAAO+nE,gBACpBtkG,KAAK27B,OAAOrc,OAAO,OAAmC,KAO9D0gP,EAAmB95P,UAAU6gM,eAAiB,WAC1C,IAAI39L,EAAQpJ,KACRA,KAAKqgQ,oBACLrgQ,KAAKylM,KAAK/0L,UAAY,GACtB,eAAe1Q,KAAKylM,KAAMzlM,KAAK6gQ,mBAAmBvtP,UAEtD,IAQIqvP,EARA7jK,EAAU,GAAGxrF,MAAMjK,KAAKrJ,KAAKylM,KAAKt9K,iBAAiB,mDACnD29D,EAAQgZ,EACRihG,EAAO,QACP6iE,EAAW5iQ,KAAK8/L,UAAU32L,QAAQ2I,cAAc,mBAChD8wP,IACA5iQ,KAAKkJ,QAAQowC,SAAWymJ,EAAO6iE,EAAS34H,cAAc,GAAG9rH,OAE7Dne,KAAKgzM,eAA2C,aAA1BhzM,KAAKkJ,QAAQowC,SAE9Bt5C,KAAKkJ,QAAQgtM,gBACdysD,EAAc3iQ,KAAKiiQ,UAAUnwP,cAAc,mBAE/C,IAYIqM,EACAmE,EACA5b,EACA2+L,EAfAw9D,EAAU7iQ,KAAKkJ,QAAQotM,mBACvBwsD,EAAW,CACX3qN,MAAOn4C,KAAKkJ,QAAQivC,MAAOK,UAAWx4C,KAAKgzM,eAAiB,MAAQ,KAAMz4J,IAAKv6C,KAAKkJ,QAAQqxC,IAC5FjB,SAAUymJ,EAAM3rL,KAAMpU,KAAKkJ,QAAQkL,KAAMmlC,UAAWspN,EAAS9vM,aAAc/yD,KAAKkJ,QAAQ6pD,cAExFgwM,EAAa/iQ,KAAKgjQ,WAAalkK,EAAQp4F,QAAU1G,KAAKgjQ,SAAWlkK,EAAQp4F,OAASo4F,EAAQp4F,OAC1Fq8P,GAAcJ,GAAqC,KAAtBA,EAAYxkP,QACzC4hL,EAAO//L,KAAKgzM,eAAiB,QAAU,WACvCl0G,EAAU,GAAGxrF,MAAMjK,KAAKrJ,KAAKylM,KAAKt9K,iBAAiB,iCACnD26O,EAAStqN,UAAYx4C,KAAKgzM,eAAiB,KAAO,MAClD8vD,EAASxpN,SAAWymJ,GAMxB,IAAIkjE,EAAO,GACX,GAAKnkK,EAAQp4F,SAAW1G,KAAKgjQ,UAAaL,GAAeA,EAAYxkP,OAA+B,KAAtBwkP,EAAYxkP,OACnFne,KAAKqgQ,kBAAmB,CAC3B,GAAKrgQ,KAAKqgQ,kBAgBDrgQ,KAAKqgQ,mBACVrgQ,KAAKkjQ,uBAAuBD,QAhB5B,IAAK,IAAIl8P,EAAI,EAAGA,EAAI+3F,EAAQp4F,OAAQK,IAChCoX,EAAQne,KAAKg/B,OAAO,gBAAa8/D,EAAQ/5F,SAASgC,EAAEuQ,WAAY,KAAM,YAAYhH,aAAa,QAC/F+0L,EAAO,eAAO,GAAI,CAAElnL,MAAOA,GAAS2kP,GAChC3kP,IAAUA,EAAM7G,WAAW5Q,SAC3B2+L,EAAK/rJ,SAAWypN,EAAa,WAAa,SAEhC,KAAV5kP,GAAgB,eAAkBA,GAClC8kP,EAAOA,EAAK3+N,OAAO07N,EAAmBmD,4BAA4BL,IAGlEG,EAAKhxP,KAAKozL,GAEdrlM,KAAKojQ,sBAAsB/9D,GAMR,SAAtBrlM,KAAKkJ,QAAQkL,MAAyC,aAAtBpU,KAAKkJ,QAAQkL,OAAwB0xE,EAAMp/E,SAC5EA,EAASo/E,EAAMp/E,OAAS,EACxB4b,EAAMtiB,KAAKg/B,OAAO,gBAAa8mD,EAAM/gF,SAAS2B,EAAO4Q,WAAY,KAAM,YAAYhH,aAAa,QAC5F,eAAkBgS,IAAQygP,GAC1BE,EAAKhxP,KAAK,CACNkmC,MAAO2qN,EAAS3qN,MAAOoB,UAAWupN,EAASvpN,UAAWD,SAAU,QAChEd,UAAW,MAAOr6B,MAAO,QAIrC,IAAIklP,EAAmBrjQ,KAAKqgQ,kBAAoBrgQ,KAAKymM,KAAK30L,cAAc,kBACpE9R,KAAKylM,KAAK3zL,cAAc,kBAC5B,GAAIuxP,GAAoBA,EAAiBr4P,UAAUkB,SAAS,WAAY,CACpE,IAAIo3P,EAAsBtjQ,KAAKqqM,kBAAkBrqM,KAAKkJ,QAAQivC,OAC9D,IAAImrN,EAcA,OALA,IARA,IAAIpsN,EAAU,SAAUzY,GACfwkO,EAAKpwM,MAAK,SAAUt6B,GACrB,OAAOA,EACFpa,QAAUmlP,EAAoBv+P,SAAS05B,EAAEnnB,WAAY,KAAK6G,UAE/D8kP,EAAKhxP,KAAKqxP,EAAoBv+P,SAAS05B,EAAEnnB,WAAY,OAGpDmnB,EAAI,EAAGA,EAAI6kO,EAAoB58P,OAAQ+3B,IAC5CyY,EAAQzY,GAOpB,GAAKz+B,KAAKqgQ,mBAGL,GAAI4C,EAAKv8P,OACV1G,KAAKujQ,eAAeN,QAEnB,GAAIjjQ,KAAKymM,KAAK30L,cAAc,gBAAgB9G,UAAUkB,SAAS,aAAe+2P,EAAKv8P,OAAQ,CAC5F,IAAI88P,EAAgBxjQ,KAAKkJ,QAAQ4hM,gBAAgBj4I,MAAK,SAAU10C,GAC5D,OAAO/U,EAAMF,QAAQivC,QAAUh6B,EAAMg6B,SAErCqrN,GACAxjQ,KAAK8mM,oBAVT9mM,KAAKujQ,eAAeN,OAcvB,CACGO,EAAgBxjQ,KAAKkJ,QAAQ4hM,gBAAgBj4I,MAAK,SAAU10C,GAC5D,OAAO/U,EAAMF,QAAQivC,QAAUh6B,EAAMg6B,SAErCqrN,GACAxjQ,KAAK8mM,gBAIjBk5D,EAAmB95P,UAAUg9P,uBAAyB,SAAUD,GAC5D,IAAI9kP,EACJ,GAAIne,KAAKkhQ,iCAAiCx6P,OACtC,IAAK,IAAIK,EAAI,EAAGA,EAAI/G,KAAKkhQ,iCAAiCx6P,OAAQK,IAAK,CACnE,IAAI08P,EAAOzjQ,KAAKkhQ,iCAAiCn6P,GAEjD,GADAoX,EAAQslP,EAAKtlP,MAAQ,GACP,KAAVA,GAAgB,eAAkBA,GAAQ,CAC1C,IAAIulP,EAAgB,CAAElrN,UAAWirN,EAAKjrN,UAAWL,MAAOsrN,EAAKtrN,MAAO/jC,KAAMqvP,EAAKrvP,KAAMmmC,IAAKkpN,EAAKlpN,IAAKjB,SAAUmqN,EAAKnqN,SAC/GC,UAAWkqN,EAAKlqN,UAAWwZ,aAAc0wM,EAAK1wM,cAClDkwM,EAAKhxP,KAAKpJ,MAAMo6P,EAAMjD,EAAmBmD,4BAA4BO,SAGrET,EAAKhxP,KAAKjS,KAAKkhQ,iCAAiCn6P,IAEpD/G,KAAKojQ,sBAAsBpjQ,KAAKkhQ,iCAAiCn6P,IAGzE,IAAK/G,KAAKghQ,+BAAuD,KAAtBhhQ,KAAK2hQ,OAAOxjP,QAAmBne,KAAKkJ,QAAQwtM,6BAA8BusD,EAAKv8P,QACtH,IAASK,EAAI,EAAGA,EAAI/G,KAAKgiQ,8BAA8Bt7P,OAAQK,IAC3Dk8P,EAAKU,QAAQ3jQ,KAAKgiQ,8BAA8Bj7P,IAChD/G,KAAKojQ,sBAAsBpjQ,KAAKqqM,kBAAkBrqM,KAAKkJ,QAAQivC,OAAOpxC,IAGpD,KAAtB/G,KAAK2hQ,OAAOxjP,OAAkBne,KAAKghQ,gCAAiChhQ,KAAK+gQ,yBACzE/gQ,KAAK4jQ,mBAAmB,aAAe,KACvCX,EAAKU,QAAQ3jQ,KAAK4jQ,oBAClB5jQ,KAAKojQ,sBAAsBpjQ,KAAK4jQ,sBAGxC5D,EAAmB95P,UAAUk9P,sBAAwB,SAAU5qN,GAC3D,IAAIhtB,EAAO,CACPwzE,SAAUh/F,KAAMsjJ,QAAStjJ,KAAK+mM,eAAgBxjD,KAAM/qG,EAAUL,MAAOqrG,KAAMhrG,EAAUA,UAAWm0J,KAAMn0J,EAAUc,SAChHszJ,KAAMp0J,EAAUe,UAAWszJ,KAAMr0J,EAAUua,aAAc+5I,KAAMt0J,EAAUr6B,MAAO9J,QAAQ,GAE5FrU,KAAK27B,OAAOrc,OAAO,QAAoBkM,GACnCA,EAAKnX,QAMb2rP,EAAmBmD,4BAA8B,SAAUL,GACvD,IAAIG,EAAO,GAeX,MAdsB,WAAlBH,EAAS1uP,MACT6uP,EAAKhxP,KAAK,CACNkmC,MAAO2qN,EAAS3qN,MAAO4a,aAAc+vM,EAAS/vM,aAAcxZ,UAAWupN,EAASvpN,UAChFD,SAAUwpN,EAASxpN,SAAUd,UAAWsqN,EAAStqN,UAAWr6B,MAAO,KAG3E8kP,EAAKhxP,KAAK,CACNkmC,MAAO2qN,EAAS3qN,MAChBoB,UAAWupN,EAASvpN,UAAWD,SAAUwpN,EAASxpN,SAAUd,UAAWsqN,EAAStqN,UAAWr6B,MAAO,OAEtG8kP,EAAKhxP,KAAK,CACNkmC,MAAO2qN,EAAS3qN,MAAOoB,UAAWupN,EAASvpN,UAAWD,SAAUwpN,EAASxpN,SACzEd,UAAWsqN,EAAStqN,UAAWr6B,WAAOhN,IAEnC8xP,GAIXjD,EAAmB95P,UAAUq9P,eAAiB,SAAU72D,GACpD,IACIl0J,EADAqrN,EAAWn3D,EAAM,GAErB,IAAK,eAAkBm3D,GAAW,CAC9BrrN,EAAYqrN,EAAS32D,YAAc22D,EAAS32D,YACxC,IAAI,OAAU22D,EAAS1rN,MAAO0rN,EAASvqN,SAAUuqN,EAAS1lP,OAAQ0lP,EAAStqN,UAAWsqN,EAAS9wM,cACnG,IAAK,IAAIt0B,EAAI,EAAGA,EAAIiuK,EAAMhmM,OAAQ+3B,IAC9B+Z,OAA8DrnC,IAAlDu7L,EAAM3nM,SAAS05B,EAAEnnB,WAAY,KAAK41L,YAC1C10J,EAAUk0J,EAAM3nM,SAAS05B,EAAEnnB,WAAY,KAAKkhC,WAAWk0J,EAAM3nM,SAAS05B,EAAEnnB,WAAY,KAAK41L,aACzF10J,EAAUk0J,EAAM3nM,SAAS05B,EAAEnnB,WAAY,KAAKkhC,WAAWk0J,EAAM3nM,SAAS05B,EAAEnnB,WAAY,KAAK6gC,MAAOu0J,EAAM3nM,SAAS05B,EAAEnnB,WAAY,KAAKgiC,SAAUozJ,EAAM3nM,SAAS05B,EAAEnnB,WAAY,KAAK6G,OAAQuuL,EAAM3nM,SAAS05B,EAAEnnB,WAAY,KAAKiiC,UAAWmzJ,EAAM3nM,SAAS05B,EAAEnnB,WAAY,KAAKy7C,cAE7Q,IAAIvnC,EAAO,CACPpF,OAAQ,YAAa6mL,iBAAkBP,EAAOv0J,MAAOn4C,KAAKkJ,QAAQivC,MAClE+0J,YAAa,OAAUzzJ,GAAGjB,IAE9Bx4C,KAAKkJ,QAAQo6I,QAAQ93H,KAG7Bw0O,EAAmB95P,UAAUksD,gBAAkB,SAAUL,GACrD,QAAOA,EAAIK,iBAAkBL,EAAIK,mBAErC4tM,EAAmB95P,UAAU07P,kBAAoB,WAC7C,IAAIx4P,EAAQpJ,KACRsiB,EAAMtiB,KAAK2hQ,OAAOxjP,MAClBoe,EAASv8B,KAAKkJ,QAAQqzB,OACtBnC,EAAQp6B,KAAKoyD,gBAAgB71B,GAAUv8B,KAAKkgQ,gBAAgBxwM,QAAU1vD,KAAKkJ,QAAQkxB,MAAMs1B,QACzFo0M,EAAe9jQ,KAAKkJ,QAAQkxB,MAAMs1B,QAClC+zM,EAAOrpO,EAAMq2B,QAAQr3B,QAAO,SAAUrmB,GAAK,OAAOA,GAAc,YAATA,EAAEk/C,MAAqB,GAClF73B,EAAMq2B,QAAU,GAChBqzM,EAAarzM,QAAU,GACvB,IAAIszM,EAAgC,WAAtB/jQ,KAAKkJ,QAAQkL,MAAqB1H,WAAW4V,GAAQ5V,WAAW4V,GAAOA,EACjFg3B,EAAWt5C,KAAKkJ,QAAQipD,SACD,WAAtBnyD,KAAKkJ,QAAQkL,KAAoB,WAAa,QAAYpU,KAAKkJ,QAAQkL,KAAO,WAAa,QAC5FmlC,GAAY,EACZwZ,EAAe/yD,KAAKkJ,QAAQ6pD,aAC5B5a,EAAQn4C,KAAKoyD,gBAAgB71B,GAAUA,EAAO6b,gBAAkB7b,EAAO4b,MAC3E4rN,EAAqB,KAAXA,QAA4B5yP,IAAX4yP,OAAwB5yP,EAAY4yP,EAC/D,IAKIC,EALAf,EAAO,GACPH,EAAW,CACX3qN,MAAOA,EAAOK,UAAW,KAAM+B,IAAKv6C,KAAKkJ,QAAQqxC,IACjDjB,SAAU,QAASllC,KAAMpU,KAAKkJ,QAAQkL,KAAMmlC,UAAWA,EAAWwZ,aAAcA,GAGhF71C,EAAald,KAAKkJ,QAAQmxB,YAAY2f,QAAQx/B,cAsBlD,GArB0B,YAAtBxa,KAAKkJ,QAAQkL,YACEjD,IAAX4yP,IACsF,IAAtF/jQ,KAAKkiF,kBAAkB,cAAc56D,cAAcvd,QAAQg6P,EAAOz8O,eAClEy8O,EAAS,YAEO5yP,IAAX4yP,IACkF,IAAvF/jQ,KAAKkiF,kBAAkB,eAAe56D,cAAcvd,QAAQg6P,EAAOz8O,iBACnEy8O,EAAS,cAEE5yP,IAAX4yP,IACsF,IAAtF/jQ,KAAKkiF,kBAAkB,cAAc56D,cAAcvd,QAAQg6P,EAAOz8O,gBAAyBpK,GAEjFA,IAAV6mP,GAAiE,QAEjD5yP,IAAX4yP,IACkF,IAAvF/jQ,KAAKkiF,kBAAkB,eAAe56D,cAAcvd,QAAQg6P,EAAOz8O,gBAAyBpK,IAElFA,IAAV6mP,GAAiE,GAErEzqN,EAAW,UAEY,SAAtBt5C,KAAKkJ,QAAQkL,MAAyC,aAAtBpU,KAAKkJ,QAAQkL,MAA6C,aAAtBpU,KAAKkJ,QAAQkL,OAAwBpU,KAAKkJ,QAAQ8Y,OAAQ,CAC/H,IAAIyT,EAAO,IAAI,OACXzT,EAA0C,kBAAzBhiB,KAAKkJ,QAAc,OAAiBlJ,KAAKkJ,QAAQ8Y,OAClEhiB,KAAKkJ,QAAQ8Y,OAAOA,OAEpB+hP,EADA/hP,GACSyT,EAAK7S,UAAUN,EAAK,CAAEN,OAAQA,KAG9B,IAAI3D,KAAKiE,GAEI,aAAtBtiB,KAAKkJ,QAAQkL,OACb2vP,EAASA,EAAOllP,cAAgB,IAAM,gBAAQklP,EAAOjlM,WAAa,GAAK,IAAM,gBAAQilM,EAAOplM,YAGpG3+D,KAAKugQ,yBAA0B,EAC/BvgQ,KAAK6gQ,mBAAqB,GAC1B7gQ,KAAK+gQ,wBAAyB,EAC9B/gQ,KAAKghQ,+BAAgC,EACrChhQ,KAAKihQ,kCAAmC,EACxCjhQ,KAAK0gQ,gBAAkB,EACvB1gQ,KAAK8gQ,kBAAoB,EACzB9gQ,KAAKkhQ,iCAAmC,GACd,KAAtBlhQ,KAAK2hQ,OAAOxjP,OACZne,KAAKgiQ,8BAAgChiQ,KAAKqgQ,mBAAqBrgQ,KAAKqqM,kBAAkBrqM,KAAKkJ,QAAQqzB,OAAO4b,OAASn4C,KAAKqqM,kBAAkBrqM,KAAKkJ,QAAQqzB,OAAO4b,OAAO7kC,QAAU,GAC/KtT,KAAKkJ,QAAQqtM,qBAAuBv2M,KAAKkJ,QAAQqtM,sBAGjDv2M,KAAKgiQ,8BAAgC,GAEzChiQ,KAAKikQ,YAAY7pO,GACjB,IAAI5O,EAAO,CACP6qB,YAAa,QACb+tJ,YAAapkM,KAAMwxD,WAAYrZ,EAAO5b,OAAQA,EAC9C+c,SAAUA,EAAUC,UAAWA,EAAWwZ,aAAcA,EAAcmxM,kBAAmB,KACzF9pO,MAAOA,EAAOjc,MAAO4lP,GAErB/jQ,KAAKqgQ,mBAAqBrgQ,KAAK27B,OAAO0e,eAAe8pN,aACrD34O,EAAK04O,kBAAoBlkQ,KAAK27B,OAAO0e,eAAe8pN,YAExDnkQ,KAAK27B,OAAO9tB,QAAQ,OAAoB2d,GAAM,SAAU44O,GAIpD,GAFAA,EAAW9qN,SAAW8qN,EAAW9qN,SACjC0qN,EAAW,IAAI,OAAU7rN,EAAOisN,EAAW9qN,SAAU9tB,EAAKrN,MAAOimP,EAAW7qN,UAAW6qN,EAAWrxM,cACvE,SAAvB3pD,EAAMF,QAAQkL,MAA0C,aAAvBhL,EAAMF,QAAQkL,MAA8C,aAAvBhL,EAAMF,QAAQkL,KAAqB,CACzGklC,EAAW,QACX,IAAI2oJ,EAAY,CACZ9pJ,MAAOA,EAAOmB,SAAUA,EAAUn7B,MAAO4lP,EAAQxqN,UAAWA,EAC5DwZ,aAAcA,GAEb,eAAkBgxM,KACnBC,EAAW,eAAiB/hE,EAAW74L,EAAMF,QAAQkL,OAG7D,GAAIkO,GAAsB,kBAARA,GAAoBlZ,EAAMo5P,UACxCp5P,EAAM84E,kBAAkB,UAAU56D,cAAcvd,QAAQuY,EAAIgF,gBAAkB,EAAG,CACjF27O,EAAOA,EAAK3+N,OAAO07N,EAAmBmD,4BAA4BL,IAClE,IAAIuB,EAAmBrE,EAAmBsE,kBAAkBrB,GAC5DoB,EAAiBzrN,WAAW3mC,KAAK+xP,GACjCA,EAAWK,EACXjqO,EAAMof,MAAM6qN,QAEP/hP,EAAI5b,QACTs9P,EAAY,eAAkBP,GAA+BO,EAAvBA,EAAS9vM,IAAIuvM,EAAK1wP,GACxDqnB,EAAMof,MAAMwqN,IAEN,eAAkBP,KACxBO,EAAWP,EAAK1wP,EAChBqnB,EAAMof,MAAMiqN,EAAK1wP,IAErB3J,EAAMw6P,mBAAqBI,EAC3BI,EAAWF,kBAAqB,eAAkBE,EAAWF,mBAAoD,IAA/BE,EAAWF,kBACzF96P,EAAMi3P,mBAAqBj3P,EAAMuyB,OAAO0e,eAAe8pN,aAAeC,EAAWF,oBACjF96P,EAAMuyB,OAAO0e,eAAe8pN,WAAa34O,EAAK04O,mBAElD,IAAI/vM,EAAa,GAGjB,GAFA,eAAY/qD,EAAM+4P,SAClB/4P,EAAM22N,aAAc,EAChB32N,EAAMgpD,gBAAgB71B,IAAWja,EAAI5b,OAAQ,CAC7C,IAAIssK,EAAW,WAAYz2I,EAAOpC,WAAc,IAAI,OAAYoC,EAAOpC,WAAWp2B,QAC9Ew4B,EAAOpC,WAEX64I,EAAQt7H,aAAatd,GAAOM,MAAK,SAAU3nB,GACvC,IAAI+kC,EAAa1uC,EAAMF,QAAQqzB,OAAOub,WACtC1uC,EAAMF,QAAQqzB,OAAOub,WAAa/kC,EAAEhP,OACpCqF,EAAMuyB,OAAOrc,OAAO,QAAsB,CAAEk5B,UAAW2b,EAAY53B,OAAQA,IACvE43B,EAAW3b,UAAUI,WAAWlyC,OAChCo9P,EAAatqN,MAAM2a,EAAW3b,WAG9BpvC,EAAM22N,aAAc,EAExB32N,EAAMF,QAAQqzB,OAAOub,WAAaA,EAC9B1uC,EAAMi3P,mBACNj3P,EAAMk3P,sBAAsB,eAAkBl3P,EAAMm7P,UACpDn7P,EAAMo7P,0BAA0BV,GAChCA,EAAarpO,iBAGbqpO,EAAa/sK,KAAKqtK,EAAWF,mBAEjC96P,EAAM8wC,OAAOkqN,EAAYN,WAIzB16P,EAAMi3P,mBAAqBj3P,EAAMuyB,OAAO0e,eAAe8pN,YACvD/6P,EAAMk3P,sBAAsB,eAAkBl3P,EAAMm7P,UACpDn7P,EAAMo7P,0BAA0BpqO,GAChCA,EAAMK,iBAGNL,EAAM28D,KAAKqtK,EAAWF,mBAE1B96P,EAAM8wC,OAAOkqN,EAAYhqO,OAIrC4lO,EAAmB95P,UAAUg0C,OAAS,SAAU1uB,EAAM4O,GAC9Cp6B,KAAK27B,OAAOxB,YAAc,WAAYn6B,KAAK27B,OAAOxB,WAClDn6B,KAAKykQ,YAAYj5O,EAAM4O,GAGvBp6B,KAAK0kQ,cAActqO,IAG3B4lO,EAAmB95P,UAAUy+P,qBAAuB,SAAUrnO,EAAS2iO,GAMnE,IALA,IAAIrnN,EAAaonN,EAAmBlsM,aAAax2B,EAAS2iO,GACtDttM,EAAgB,GAChBwB,EAAa,GACbywM,OAA8CzzP,IAArCnR,KAAK27B,OAAOqb,qBACrBoc,EAAgBwxM,EAAS5kQ,KAAK27B,OAAOqb,uBAAyB,GACzDvjC,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAK89B,GAAanlC,EAAK7J,EAAGlD,OAAQ+M,IAAM,CACjE,IAAIsH,EAAOnR,EAAG6J,GACVs+C,OAAM,EACN6yM,IAAW5kQ,KAAK27B,OAAO41B,iBAAiBx2C,KACxCg3C,EAAM,eAA2Bh3C,EAAMq4C,IAEvCrB,GACA/xD,KAAK27B,OAAOrc,OAAO,QAAsB,CAAEk5B,UAAW2b,EAAY53B,OAAQw1B,IACtEoC,EAAW3b,UAAUI,WAAWlyC,QAChCisD,EAAc1gD,KAAK,OAAUwnC,GAAG0a,EAAW3b,UAAUI,cAIzD+Z,EAAc1gD,KAAK2mC,EAAW,GAAK79B,IAG3C,OAAO43C,EAAcjsD,QAAU,OAAUwtD,IAAIvB,IAEjDqtM,EAAmB95P,UAAUupD,SAAW,WACpC,OAAOzvD,KAAK27B,OAAO8zB,SAAWzvD,KAAK27B,OAAO8zB,WAAWC,QAAU,IAAI,QAEvEswM,EAAmB95P,UAAUw/L,WAAa,WACtC,IAAIt8L,EAAQpJ,KACZA,KAAK6kQ,aAAc,EACnB,IAAIzqO,EAAQp6B,KAAKyvD,WACjBr1B,EAAMK,gBACNz6B,KAAKikQ,YAAY7pO,GACjB,IAAI5O,EAAO,CACP6qB,YAAa,QAA4Bjc,MAAOA,EAAO8pO,kBAAmB,MAE1E9/D,EAAc,cAClB54K,EAAK,GAAK44K,GAAepkM,KACrBA,KAAKqgQ,mBAAqBrgQ,KAAK27B,OAAO0e,eAAe8pN,aACrD34O,EAAK04O,kBAAoBlkQ,KAAK27B,OAAO0e,eAAe8pN,YAExDnkQ,KAAK27B,OAAO9tB,QAAQ,OAAoB2d,GAAM,SAAUA,GACpDA,EAAK04O,kBAAqB,eAAkB14O,EAAK04O,mBAA8C,IAAzB14O,EAAK04O,kBACvE96P,EAAMi3P,mBAAqBj3P,EAAMuyB,OAAO0e,eAAe8pN,aAAe34O,EAAK04O,oBAC3E96P,EAAMuyB,OAAO0e,eAAe8pN,WAAa34O,EAAK04O,mBAE7C96P,EAAMi3P,mBACPjmO,EAAM28D,KAAKvrE,EAAK04O,mBAEf14O,EAAK4O,MAAM0qO,UAAUp+P,SAAU0C,EAAMi3P,oBACtCj3P,EAAMy7P,aAAc,EACpBz7P,EAAM27P,cAAc3qO,IAEpBhxB,EAAMi3P,oBACNj3P,EAAMk3P,sBAAsB,eAAkBl3P,EAAMm7P,UACpDn7P,EAAMo7P,0BAA0BpqO,IAEhChxB,EAAMuyB,OAAOxB,YAAc,WAAY/wB,EAAMuyB,OAAOxB,WACpD/wB,EAAMq7P,YAAYj5O,EAAM4O,GAGxBhxB,EAAM23L,qBAAqB3mK,GAAO,OAI9C4lO,EAAmB95P,UAAU+9P,YAAc,SAAU7pO,GACjD,IACIxwB,EADAR,EAAQpJ,KAERglQ,EAAiB,OAAS5rN,SAASp5C,KAAKkJ,QAAQ4hM,gBAAiB,SAOrE,GANIk6D,EAAej7P,QAAQ/J,KAAKkJ,QAAQqzB,OAAO4b,SAAW,IACtD6sN,EAAiBA,EAAe1gO,OAAOtkC,KAAKkJ,QAAQqzB,OAAO4b,QAE1Dn4C,KAAKqgQ,mBACNjmO,EAAMgf,SAAS4rN,GAEfhlQ,KAAKqgQ,oBAAsBrgQ,KAAKkJ,QAAQipD,UAAkC,KAAtBnyD,KAAK2hQ,OAAOxjP,MAChEne,KAAKkJ,QAAQixB,WAAan6B,KAAKkJ,QAAQixB,sBAAsB,OACzDn6B,KAAKkJ,QAAQixB,WAAa,IAAI,OAAYn6B,KAAKkJ,QAAQixB,YAC3Dn6B,KAAKwgQ,2BAA6BxgQ,KAAKkJ,QAAQixB,WAAWA,WAAW+0B,KAAK57C,QAC1EtT,KAAKkJ,QAAQixB,WAAWA,WAAW+0B,KAAO,OAAS9V,UAAUxvC,EAAK5J,KAAKkJ,QAAQytM,4BAA4BryK,OAAOz7B,MAAMe,EAAI5J,KAAKwgQ,4BAA6BxgQ,KAAKkJ,QAAQqzB,OAAO4b,OAAO,GACrLn4C,KAAKoyD,gBAAgBpyD,KAAKkJ,QAAQqzB,UAClCv8B,KAAKkJ,QAAQqzB,OAAOpC,WAAan6B,KAAKkJ,QAAQqzB,OAAOpC,sBAAsB,OACvEn6B,KAAKkJ,QAAQqzB,OAAOpC,WAAa,IAAI,OAAYn6B,KAAKkJ,QAAQqzB,OAAOpC,YACzEn6B,KAAKkJ,QAAQixB,WAAWA,WAAW+0B,KAAOlvD,KAAKkJ,QAAQixB,WAAWA,WAAW+0B,KAAKziD,KAAI,SAAU2vB,EAAMr1B,GAClG,OAAOrB,OAAO6mO,OAAO,GAAInwM,EAAMhzB,EAAMF,QAAQqzB,OAAOpC,WAAWA,WAAW+0B,KAAKnoD,aAItF,GAAI/G,KAAKqgQ,mBAAqBrgQ,KAAKkJ,QAAQipD,SAAU,CACtD/3B,EAAMlM,OAAOluB,KAAKkJ,QAAQqzB,OAAO4b,OACjC/d,EAAMk4B,OAAOtyD,KAAKkJ,QAAQqzB,OAAO4b,MAAO,aACxC,IAAIj7B,EAAald,KAAKkJ,QAAQmxB,YAAY2f,QAAQx/B,cAC9C0C,GAAcA,MAAkC,mBAAjBA,KAAsD,kBAAjBA,KAChD,sBAAjBA,KAAyD,mBAAjBA,KAAsD,iBAAjBA,MAChFkd,EAAMgf,SAAS4rN,GAGvB,OAAO5qO,GAEX4lO,EAAmB95P,UAAUu+P,YAAc,SAAUj5O,EAAM4O,GACvD,IAAIhxB,EAAQpJ,KACR2hM,EAAS,eAAan2K,EAAM4O,GAChCp6B,KAAK27B,OAAO9tB,QAAQ,QAAwB8zL,EAAO3rJ,OACnD,IAAIE,EAAMyrJ,EAAOC,SACjB1rJ,EAAIU,QAAQlc,MAAK,SAAU3nB,GACvB3J,EAAM67P,YAAYlyP,OAG1BitP,EAAmB95P,UAAUg/P,kCAAoC,WAC7D,OAAaj6P,OAAOjL,KAAKylM,KAAM,SAAUzlM,KAAKmlQ,wBAElDnF,EAAmB95P,UAAUk/P,gCAAkC,SAAUryP,GACrE,IAAI3J,EAAQpJ,KACZ,OAAa0R,IAAI1R,KAAKylM,KAAM,SAAUzlM,KAAKmlQ,sBAAuBnlQ,MAClE,IAAIsG,EAAStG,KAAKylM,KACdn/L,EAAO+f,SAAS3f,OAAS,IAAMJ,EAAOsQ,WAAatQ,EAAO0lG,aAAe1lG,EAAO+I,cAAgB/I,EAAOsQ,WAAa,IACpH5W,KAAKmlQ,wBAET,OAAOp+G,MAAQ/zI,YAAW,WAAc5J,EAAM+2D,aAAaptD,GAAI,OAAOg0I,MAAQ,OAAS,IAE3Fi5G,EAAmB95P,UAAUq8P,cAAgB,SAAUp5P,GACnD,IAAIk8P,EAAU,eAAc,MAAO,CAAE/6P,UAAW,WAAYwK,OAAQ,uBACpEuwP,EAAQ30P,UAAY,4FACpBvH,EAAQqB,YAAY66P,GACpB,IAAI/5N,EAAO+5N,EAAQr4P,wBACnB7D,EAAQ2qF,YAAYuxK,GACpB,IAAI77E,EAAaz6K,KAAKC,MAAMs8B,EAAKngC,QACjC,OAAOq+K,GAEXw2E,EAAmB95P,UAAUwyO,mBAAqB,WAC9C,MAAO,0EAEXsnB,EAAmB95P,UAAUo8P,SAAW,WACpC,IACIgD,EADA9sB,EAAe,EAEf+sB,EAAWvlQ,KAAK27B,OAAOtxB,cAAc,MAAO,CAAE6G,GAAIlR,KAAKkR,GAAKlR,KAAKkJ,QAAQkL,KAAO,oBAChF9J,UAAW,qDAAsDwK,OAAQ,iBACzE0wP,EAAcxlQ,KAAKylM,KAEvB,GADAzlM,KAAKylQ,aACDD,EAAa,CACb,IAAIr5P,EAAgBE,iBAAiBm5P,GACjCr6P,EAASq6P,EAAYn/O,SAAS3f,OAAS3B,SAASoH,EAAchB,QAC9D4D,KAAKyyC,MAAMz8C,SAASoH,EAAchB,OAAO9K,MAAM,MAAM,KAAO,EAC5DqlQ,GAAkB1lQ,KAAKmnM,SAAYq+D,EAAYn/O,SAAS3f,QAAW1G,KAAKwmM,IAAIx7L,UAAUkB,SAAS,iBAC1FG,iBAAiBrM,KAAKwmM,IAAI10L,cAAc,mBAAmB4zP,gBAAhE,GACJH,EAAS54P,MAAMowE,QAAU,UAAY5wE,EAAcf,MAAQ,iBAAmBe,EAAc2iI,UAAY,aACpG3jI,EAAS,eAAiBgB,EAAc88D,OAAS,mBAAqB98D,EAAcw5P,YAAc,mBAChGx5P,EAAcykC,YAAc,mBAAqBzkC,EAAcswE,YAAc,2CAC/EipL,EAAkB,IACtB,IAAIj8E,EAAWzpL,KAAKuiQ,cAAciD,GAClChtB,EAAezpO,KAAKyyC,MAAMr2C,EAASs+K,GACnC+uD,EAAegtB,EAAYn/O,SAAS3f,OAAS8xO,EAAegtB,EAAYn/O,SAAS3f,OAAS8xO,EAC1F8sB,EAAiB77E,EAAW,KAEhC,IAAIgvD,EAAe,kEAAoE6sB,EAApE,uFAEbtlQ,KAAK04O,qBAAuB14O,KAAK04O,qBAAuB,eAE9D,GADA6sB,EAAS70P,UAAY,IAChB80P,EAAYn/O,SAAS3f,OAAQ,CAC9B1G,KAAKmiQ,QAAQyD,mBAAmB,cAAentB,GAC/C,IAAIE,EAAW,GAAGrlO,MAAMjK,KAAKrJ,KAAKmiQ,QAAQ/6O,cACrCe,iBAAiB,yFACtBwwN,EAAS,GAAG3tO,UAAU0G,IAAI,iCAC1BinO,EAAS,GAAG3tO,UAAU0G,IAAI,sCAE9B1R,KAAKmiQ,QAAQl3O,aAAas6O,EAAUvlQ,KAAKylM,MACzC,IAAK,IAAI1+L,EAAI,EAAGyxO,GAAgBzxO,EAAIyxO,EAAczxO,IAAK,CACnDw+P,EAAS70P,WAAa+nO,EAClBE,EAAW,GAAGrlO,MAAMjK,KAAKk8P,EACxBp9O,iBAAiB,yFACtBwwN,EAAS,GAAG3tO,UAAU0G,IAAI,iCAC1BinO,EAAS,GAAG3tO,UAAU0G,IAAI,sCAE1B1R,KAAKylM,OACL8/D,EAAS3uP,UAAY5W,KAAKylM,KAAK7uL,YAGvCopP,EAAmB95P,UAAUu/P,WAAa,WACtC,IAAII,EAAY7lQ,KAAK8/L,UAAU32L,QAAQgf,iBAAiB,kBACxD,GAAI09O,EAAUn/P,OACV,IAAK,IAAIK,EAAI,EAAGA,EAAI8+P,EAAUn/P,OAAQK,IAClC,gBAAO8+P,EAAU9+P,IAGzB,IAAI++P,EAAa9lQ,KAAK8/L,UAAU32L,QAAQ2I,cAAc,8BAClDg0P,GACA,gBAAO9lQ,KAAK8/L,UAAU32L,QAAQ2I,cAAc,gCAGpDkuP,EAAmB95P,UAAUi/P,sBAAwB,WACjD,IAAI7+P,EAAStG,KAAKylM,KACdn/L,EAAOsQ,WAAatQ,EAAO0lG,aAAe1lG,EAAO+I,eAAiBrP,KAAKygQ,+BACpEzgQ,KAAK6gQ,mBAAmBn6P,QAAW1G,KAAK0gQ,gBAAkB1gQ,KAAK27B,OAAO0e,eAAe8pN,YACrFnkQ,KAAKylM,KAAKp/K,SAAS3f,SAAmD,EAAxC1G,KAAK27B,OAAO0e,eAAe8pN,cACvDnkQ,KAAK8gQ,mBAAqB9gQ,KAAK8gQ,kBAAqB9gQ,KAAK0gQ,gBAAkB1gQ,KAAK27B,OAAO0e,eAAe8pN,aAC3GnkQ,KAAKwkQ,4BACLxkQ,KAAK4gQ,4BAA8B,QAE9Bt6P,EAAOsQ,WAAatQ,EAAO0lG,aAAe1lG,EAAO+I,eAAiBrP,KAAKygQ,+BACzEzgQ,KAAK6gQ,mBAAmBn6P,OAAU1G,KAAK0gQ,gBAAkB1gQ,KAAK27B,OAAO0e,eAAe8pN,YACpFnkQ,KAAKylM,KAAKp/K,SAAS3f,SAAmD,EAAxC1G,KAAK27B,OAAO0e,eAAe8pN,YAC5DnkQ,KAAK+lQ,uBAAwB,GAAGzyP,MAAMjK,KAAKrJ,KAAKylM,KAAKp/K,UAAW/T,OAAO,EAAGtS,KAAK27B,OAAO0e,eAAe8pN,aACrGnkQ,KAAK0gQ,iBAAwD,SAArC1gQ,KAAK4gQ,4BAAyC5gQ,KAAK27B,OAAO0e,eAAe8pN,WACpD,EAAxCnkQ,KAAK27B,OAAO0e,eAAe8pN,WAChC,eAAenkQ,KAAKylM,KAAMzlM,KAAK6gQ,mBAAmBvtP,MAAMtT,KAAK0gQ,gBAAiB1gQ,KAAK27B,OAAO0e,eAAe8pN,WAAankQ,KAAK0gQ,kBAC3H1gQ,KAAK4gQ,4BAA8B,QAET,IAArBt6P,EAAOsQ,YAAoB5W,KAAKsgQ,sBAAwBtgQ,KAAKugQ,yBAA2BvgQ,KAAK0gQ,iBAC/F1gQ,KAAK6gQ,mBAAmBn6P,QAAU1G,KAAK6gQ,mBAAmBn6P,OAAiD,EAAxC1G,KAAK27B,OAAO0e,eAAe8pN,YAC9FnkQ,KAAKylM,KAAKp/K,SAAS3f,SAAmD,EAAxC1G,KAAK27B,OAAO0e,eAAe8pN,YAC5DnkQ,KAAK+lQ,uBAAwB,GAAGzyP,MAAMjK,KAAKrJ,KAAKylM,KAAKp/K,UAAW/T,OAAgD,EAAxCtS,KAAK27B,OAAO0e,eAAe8pN,WAAiBnkQ,KAAK27B,OAAO0e,eAAe8pN,aAC/InkQ,KAAK0gQ,iBAAwD,OAArC1gQ,KAAK4gQ,4BAAuC5gQ,KAAK27B,OAAO0e,eAAe8pN,WAClD,EAAxCnkQ,KAAK27B,OAAO0e,eAAe8pN,WAChCnkQ,KAAKgmQ,uBAAuB,GAAG1yP,MAAMjK,KAAKrJ,KAAK6gQ,mBAAmBvtP,MAAMtT,KAAK0gQ,gBAAiB1gQ,KAAK0gQ,gBAAkB1gQ,KAAK27B,OAAO0e,eAAe8pN,cAChJnkQ,KAAKylM,KAAK7uL,UAAY5W,KAAK2gQ,yBAC3B3gQ,KAAK4gQ,4BAA8B,MAET,IAArBt6P,EAAOsQ,YAAoB5W,KAAKsgQ,sBAAwBtgQ,KAAKugQ,yBAA2BvgQ,KAAK0gQ,iBAC/F1gQ,KAAK6gQ,mBAAmBn6P,QAAU1G,KAAKylM,KAAKp/K,SAAS3f,OAAiD,EAAxC1G,KAAK27B,OAAO0e,eAAe8pN,aAC5FnkQ,KAAK+lQ,uBAAwB,GAAGzyP,MAAMjK,KAAKrJ,KAAKylM,KAAKp/K,UAAW/T,OAAgD,EAAxCtS,KAAK27B,OAAO0e,eAAe8pN,WAAiBnkQ,KAAK8gQ,kBAAoB9gQ,KAAK27B,OAAO0e,eAAe8pN,aACxKnkQ,KAAK0gQ,iBAAmB3xP,KAAKyyC,MAAMxhD,KAAK8gQ,kBAAoB9gQ,KAAK27B,OAAO0e,eAAe8pN,YAAc,GACjGnkQ,KAAK27B,OAAO0e,eAAe8pN,WAC/BnkQ,KAAKgmQ,uBAAuB,GAAG1yP,MAAMjK,KAAKrJ,KAAK6gQ,mBAAmBvtP,MAAMtT,KAAK0gQ,gBAAiB1gQ,KAAK0gQ,gBAAkB1gQ,KAAK27B,OAAO0e,eAAe8pN,cAChJnkQ,KAAKylM,KAAK7uL,UAAY5W,KAAK2gQ,yBAC3B3gQ,KAAK4gQ,4BAA8B,OAG3CZ,EAAmB95P,UAAU6/P,uBAAyB,SAAUE,GAC5D,IAAK,IAAIl/P,EAAI,EAAGA,EAAIk/P,EAAWv/P,OAAQK,IACnC,gBAAOk/P,EAAWl/P,KAG1Bi5P,EAAmB95P,UAAU8/P,uBAAyB,SAAUE,GAC5D,IAAK,IAAIn/P,EAAI,EAAGA,EAAIm/P,EAAWx/P,OAAQK,IACnC/G,KAAKylM,KAAKx6K,aAAai7O,EAAWn/P,GAAI/G,KAAKylM,KAAKp/K,SAAStf,KAGjEi5P,EAAmB95P,UAAUs+P,0BAA4B,SAAUpqO,GAC/D,IAAIhxB,EAAQpJ,MACPA,KAAKsgQ,qBAAuBtgQ,KAAK27B,OAAO0e,gBAAkE,YAAhDr6C,KAAK27B,OAAO0e,eAAe2uD,iBACtFh2F,YAAW,WACH5J,EAAMq3P,+BACNr3P,EAAMk5P,aAEX,KAEGtiQ,KAAKsgQ,sBACX,eAAc,CAAEh6P,OAAQtG,KAAKmiQ,QAAS9xP,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,MAAQrQ,KAAK27B,OAAOtxB,eAClH,eAAYrK,KAAKmiQ,UAErB,IAAI3xM,EAAQ,KACZ,GAAIxwD,KAAKmmQ,eAAiBnmQ,KAAKmmQ,cAAc11M,SAAWzwD,KAAKmmQ,cAAc11M,QAAQ/pD,OAC/E,IAAK,IAAIK,EAAI,EAAGA,EAAI/G,KAAKmmQ,cAAc11M,QAAQ/pD,OAAQK,IACD,WAA9C/G,KAAKmmQ,cAAc11M,QAAQ1pD,GAAG,GAAKypD,IACc,WAA9CxwD,KAAKmmQ,cAAc11M,QAAQ1pD,GAAG,GAAKypD,KACtCxwD,KAAKmmQ,cAAc11M,QAAQn+C,OAAOvL,EAAG,GACrCA,KAIZ,IAAIq/P,IAAahsO,EACjBA,EAAQA,GAAgBp6B,KAAKmmQ,cACzBnmQ,KAAKsgQ,qBAAuBtgQ,KAAKugQ,wBACjCvgQ,KAAK0gQ,gBAAkB,EAGvB1gQ,KAAK0gQ,iBAAmB1gQ,KAAK27B,OAAO0e,eAAe8pN,WAEvD/pO,EAAM88D,KAAKl3F,KAAK0gQ,iBACZ1gQ,KAAKsgQ,qBAAuBtgQ,KAAKugQ,yBACjCnmO,EAAM28D,KAA6C,EAAxC/2F,KAAK27B,OAAO0e,eAAe8pN,YACtCnkQ,KAAK0gQ,iBAA2D,EAAxC1gQ,KAAK27B,OAAO0e,eAAe8pN,YAGnD/pO,EAAM28D,KAAK/2F,KAAK27B,OAAO0e,eAAe8pN,YAErCiC,IACDpmQ,KAAK+gM,qBAAqB3mK,GAC1Bp6B,KAAKygQ,+BAAgC,IAG7CT,EAAmB95P,UAAU66L,qBAAuB,SAAU3mK,EAAOozM,GACjE,IAAIpkO,EAAQpJ,KACZA,KAAKkJ,QAAQixB,WAAan6B,KAAKkJ,QAAQixB,sBAAsB,OACzDn6B,KAAKkJ,QAAQixB,WAAa,IAAI,OAAYn6B,KAAKkJ,QAAQixB,YAC3D,IAAI8c,EAAa,GACbovN,EAAW,GACf,GAAIrmQ,KAAKoyD,gBAAgBpyD,KAAKkJ,QAAQqzB,SAAWixM,EAAW,CACxD,IAAIx6D,EAAW,WAAYhzK,KAAKkJ,QAAQqzB,OAAOpC,WAC3C,IAAI,OAAYn6B,KAAKkJ,QAAQqzB,OAAOpC,WAAWp2B,QAC/C/D,KAAKkJ,QAAQqzB,OAAOpC,WACxBn6B,KAAKkgQ,gBAAgB3oN,OAASnd,EAAMmd,OACpCN,EAAWhlC,KAAK+gK,EAAQt7H,aAAa13C,KAAKkgQ,kBAC1CmG,EAASp0P,MAAK,SAAUsmB,GAAQ,OAAOnvB,EAAMirD,eAAiB97B,KAclE,GAZIv4B,KAAKqgQ,oBACLrgQ,KAAKmmQ,cAAgB/rO,EAAMs1B,QACvB1vD,KAAKsgQ,qBACLtgQ,KAAKylM,KAAKz6L,UAAU0G,IAAI,6BACxB,OAAaA,IAAI1R,KAAKylM,KAAM,SAAUzlM,KAAKmlQ,sBAAuBnlQ,MAClE,OAAa0R,IAAI1R,KAAKylM,KAAM,UAAWzlM,KAAKolQ,gCAAiCplQ,MAC7E,OAAa0R,IAAI1R,KAAKylM,KAAM,YAAazlM,KAAKklQ,kCAAmCllQ,OAE5EA,KAAKugQ,0BACVvgQ,KAAKylM,KAAK/0L,UAAY,KAG1B1Q,KAAKqgQ,mBAAqBrgQ,KAAKsgQ,sBAAwBtgQ,KAAKkJ,QAAQipD,SAAU,CAC9E,IAAIha,EAAQn4C,KAAKoyD,gBAAgBpyD,KAAKkJ,QAAQqzB,QAAUv8B,KAAKkJ,QAAQkvC,gBACjEp4C,KAAKkJ,QAAQqzB,OAAO4b,MACxBn4C,KAAKkJ,QAAQixB,WAAWud,cAAa,IAAI,QAAQ4a,OAAOna,EAAO,OAASiuD,cAAc1rE,MAAK,SAAU3nB,GACjG3J,EAAMF,QAAQixB,WAAWA,WAAW+0B,KAAOn8C,EAAEhP,OAC7CqF,EAAMk9P,uBAAuBlsO,EAAO6c,EAAYovN,WAIpDrmQ,KAAKsmQ,uBAAuBlsO,EAAO6c,EAAYovN,IAGvDrG,EAAmB95P,UAAUogQ,uBAAyB,SAAUlsO,EAAO6c,EAAYovN,GAC/E,IAAIj9P,EAAQpJ,KACZi3C,EAAWhlC,KAAKjS,KAAKkJ,QAAQixB,WAAWud,aAAatd,IACrDisO,EAASp0P,KAAKjS,KAAKilQ,YAAYv5P,KAAK1L,OACpC,IAAI+G,EAAI,EACR4wC,QAAQC,IAAIX,GAAYvc,MAAK,SAAU3nB,GACnC3J,EAAMq3P,+BAAgCr3P,EAAMi3P,mBAA4Bj3P,EAAMq3P,8BAC9E,IAAK,IAAIhiO,EAAI,EAAGA,EAAI1rB,EAAErM,OAAQ+3B,IAC1Br1B,EAAM03P,kBAAoB13P,EAAMi3P,oBAAsBj3P,EAAM03P,kBAAoB/tP,EAAE0rB,GAAG7D,MAAQxxB,EAAM03P,kBACnGuF,EAASt/P,KAAKgM,EAAEhO,SAAS05B,EAAEnnB,WAAY,KAAKvT,WAEjDs0C,OAAM,WACDjvC,EAAMi3P,mBAAqBj3P,EAAMuyB,OAAO0e,gBAAmE,YAAjDjxC,EAAMuyB,OAAO0e,eAAe2uD,kBACtF5/F,EAAMuyB,OAAO8iM,iBAAYttN,EAAW/H,EAAM02L,UAAU32L,aAIhE62P,EAAmB95P,UAAU++P,YAAc,SAAUlyP,GACjD,GAAK/S,KAAKsgQ,sBAAuBtgQ,KAAK8gQ,qBAAuB9gQ,KAAK0gQ,iBAAmB1gQ,KAAK8gQ,oBAClF9gQ,KAAKugQ,yBAA0C,IAAbxtP,EAAErM,QAD5C,CAIA1G,KAAKukQ,SAAWxxP,EAChB,IAAIwzP,EAAQ,CAAEpsO,WAAYn6B,KAAKukQ,SAAU7sN,cAAc,EAAMS,MAAOn4C,KAAKkJ,QAAQivC,OAEjF,GADAn4C,KAAK27B,OAAOrc,OAAO,OAA+BinP,GAC9CA,EAAM7uN,aAAc,CACpB,IAAItd,EAAQ,IAAI,OACXp6B,KAAK6kQ,cACN7kQ,KAAKigQ,gBAAiB,EACtBjgQ,KAAK+kQ,cAAc3qO,GACnBp6B,KAAKigQ,gBAAiB,GAG1B,IAAIl8P,EAAS,IAAI,OAAYwiQ,EAAMpsO,YAAY+e,aAAa9e,GACxD23B,EAAM/xD,KAAKkJ,QAAQqzB,OACvBv8B,KAAKkhM,aAAe8+D,EAAmB7+D,YAAYp9L,EAAQ/D,KAAKkJ,QAAQivC,MAAO4Z,EAAK/xD,KAAKq0D,eAAgBr0D,MAAMi5C,SAAW,GAE9H,IAAI1gB,EAAOguO,EAAM7uN,aAAe13C,KAAKkhM,aAAeqlE,EAAMpsO,WAC1Dn6B,KAAKwmQ,kBAAkB,MAAM,EAAMjuO,EAAMguO,GACrCvmQ,KAAK2hQ,SAAY3hQ,KAAKqgQ,mBAAqBrgQ,KAAKsgQ,sBAAyBtgQ,KAAKqgQ,oBAC9ErgQ,KAAK2hQ,OAAOn8O,SAEZxlB,KAAKsgQ,qBAAuBtgQ,KAAKugQ,2BACjCvgQ,KAAKsgQ,qBAAsB,EAC3BtgQ,KAAKugQ,yBAA0B,GAEnC,IAAI/0O,EAAO,CACP6qB,YAAa,QACbmb,WAAYxxD,KAAKkJ,QAAQivC,MAAOgsJ,WAAYnkM,KAAKkJ,QAAQkL,MAEzDgwL,EAAc,cAClB54K,EAAK,GAAK44K,GAAepkM,KACzBA,KAAK27B,OAAOrc,OAAO,OAAyBkM,GACxCxrB,KAAKogQ,0BACL,eAAYpgQ,KAAKmiQ,WAGzBnC,EAAmB95P,UAAU6+P,cAAgB,SAAU3qO,GACnD,GAAIp6B,KAAK27B,OAAOme,gBAAkB95C,KAAK27B,OAAOme,eAAej2C,IAAI6C,OAAQ,CACrE,IAAIqzC,EAAY/5C,KAAK27B,OAAOme,eACxB7B,EAAS8B,EAAU9B,OAAOvxC,OAASqzC,EAAU9B,OAASj4C,KAAKkJ,QAAQo0B,QAAQ7wB,KAAI,SAAU6/B,GAAK,OAAOA,EAAE6L,SAC3G/d,EAAM8f,OAAOH,EAAUl2C,IAAKo0C,EAAQ8B,EAAUT,SAAUS,EAAUI,WAAYJ,EAAUgZ,cAE5F,GAAK/yD,KAAKkJ,QAAQ4hM,gBAAsB,OAAG,CAEvC,IADA,IAAIz6I,EAAO,GACFtpD,EAAI,EAAGA,EAAI/G,KAAKkJ,QAAQ4hM,gBAAgBpkM,OAAQK,IAAK,CAC1D,IAAIqzC,EAAep6C,KAAKkJ,QAAQ4hM,gBAAgB/lM,SAASgC,EAAEuQ,WAAY,KACnEtX,KAAKkJ,QAAQqxC,KACbH,EAAaG,IAAMH,EAAaG,KAAOv6C,KAAK27B,OAAO41B,iBAAiBnX,EAAajC,OAAOoC,IACpFH,EAAaG,MAAQv6C,KAAKkJ,QAAQqxC,KAClC8V,EAAKp+C,KAAKjS,KAAKkJ,QAAQ4hM,gBAAgB/lM,SAASgC,EAAEuQ,WAAY,OAI9D8iC,EAAajC,QAAUn4C,KAAKkJ,QAAQivC,OACpCkY,EAAKp+C,KAAKjS,KAAKkJ,QAAQ4hM,gBAAgB/lM,SAASgC,EAAEuQ,WAAY,MAI1E,IAAIkhC,EAAYx4C,KAAK2kQ,qBAAqBt0M,EAAMrwD,KAAKigQ,gBACjDznN,GACApe,EAAMof,MAAMhB,KAIxBwnN,EAAmB95P,UAAUsgQ,kBAAoB,SAAUpsO,EAAOozM,EAAWrzM,EAAY3O,GACrF,eAAYxrB,KAAKmiQ,SAKjBniQ,KAAKigQ,gBAAiB,EACtBjgQ,KAAKymQ,eACLzmQ,KAAKigQ,gBAAiB,EACtB,IAAIsG,EAAQ,CAAEpsO,WAAYn6B,KAAKukQ,SAAUnE,0BAA0B,EAAO7jO,OAAQv8B,KAAKkJ,QAAQqzB,OAC3FpzB,QAASnJ,KAAKylM,KAAMrxL,KAAMpU,KAAKkJ,QAAQkL,KAAM4N,OAAQhiB,KAAKkJ,QAAQkL,KAAMulI,OAAQ35I,KAAKkJ,QAAQ6+L,mBAAqB,KAC9G/nM,KAAK8/L,UAAUnmD,OAAO,GAAIsoH,UAAWjiQ,KAAKiiQ,WAClDjiQ,KAAK27B,OAAOrc,OAAO,OAAqCinP,GACxDvmQ,KAAKogQ,yBAA2BmG,EAAMnG,yBACjCpgQ,KAAKogQ,yBAGDpgQ,KAAKqgQ,mBAAqBrgQ,KAAK27B,OAAO0e,gBAAkE,YAAhDr6C,KAAK27B,OAAO0e,eAAe2uD,kBACxFhpG,KAAKylQ,aAHLzlQ,KAAK0mQ,kBAAkBvsO,EAAYqzM,EAAWhiN,IAMtDw0O,EAAmB95P,UAAUw+P,cAAgB,SAAUtqO,GACnDp6B,KAAK+gM,qBAAqB3mK,IAE9B4lO,EAAmB95P,UAAUugQ,aAAe,WACxCzmQ,KAAK+D,OAAS,GACd,IAAIy0C,EAAYx4C,KAAKqgQ,mBAAqBrgQ,KAAKqqM,kBAAkBrqM,KAAKkJ,QAAQivC,OAC1En4C,KAAK2kQ,qBAAqB3kQ,KAAKqqM,kBAAkBrqM,KAAKkJ,QAAQivC,OAAQn4C,KAAKigQ,gBAC3EjgQ,KAAK2kQ,qBAAqB3kQ,KAAKkJ,QAAQ4hM,gBAAiB9qM,KAAKigQ,gBAC7D7lO,EAAQ,IAAI,OACZoe,GACApe,EAAMof,MAAMhB,GAEhBx4C,KAAK27B,OAAOrc,OAAO,OAAoC,CAAE8a,MAAOA,IAEhE,IADA,IAAIr2B,EAAS,IAAI,OAAY/D,KAAKukQ,UAAUrrN,aAAa9e,GAChD3mB,EAAK,EAAGkzP,EAAW5iQ,EAAQ0P,EAAKkzP,EAASjgQ,OAAQ+M,IAAM,CAC5D,IAAImzP,EAAMD,EAASlzP,GACnBzT,KAAK+D,OAAO,eAAU/D,KAAKkJ,QAAQivC,MAAOyuN,KAAQ,IAG1D5G,EAAmB95P,UAAUi6D,aAAe,SAAUptD,GAClD,IAAInJ,EACC,eAAkB,OAAOm9I,QAC1Br0I,aAAa,OAAOq0I,OAExB,IAAIzgJ,EAASyM,EAAEzM,OACf,GAAK,eAAkBtG,KAAK27B,OAAOqtE,mBAAoE,YAA/ChpG,KAAK27B,OAAOqtE,iBAAiBC,gBAC9E,gBAAa3iG,EAAQ,iBAD5B,CAIA,IAAI8nI,EAAO,gBAAa9nI,EAAQ,sBAIhC,GAHI,gBAAaA,EAAQ,gBACrBtG,KAAK0hQ,eAAe3uP,GAEpBq7H,IAASpuI,KAAKogQ,yBAA0B,CACxC,IAAIyG,EAAYz4H,EAAKt8H,cAAc,gBACnC,GAAI+0P,EACA7mQ,KAAK8mQ,iBAAiBD,EAAU77P,UAAUkB,SAAS,iBAInD,GADA,gBAAekiI,EAAKhnH,eAChBpnB,KAAKqgQ,oBAAsBjyH,EAAKhnH,cAActV,cAAc,kBAAmB,CAC/E9R,KAAKihQ,kCAAmC,EACxC,IAAI4B,EAAU7iQ,KAAKkJ,QAAQotM,mBACvBlrI,EAAOgjE,EAAKhnH,cAActV,cAAc,YACxCjN,EAAQumE,EAAK27L,gBACbhnE,EAAOl7L,EAAMi6F,QAAU,QAAU,WACjC2kK,EAAO5+P,EAAMi6F,QAAU,KAAO,MAC9BgkK,EAAW,CAAE3qN,MAAOn4C,KAAKkJ,QAAQivC,MAAOK,UAAWirN,EAAMlpN,IAAKv6C,KAAKkJ,QAAQqxC,IAC3EjB,SAAUymJ,EAAM3rL,KAAMpU,KAAKkJ,QAAQkL,KAAMmlC,UAAWspN,EAAS9vM,aAAc/yD,KAAKkJ,QAAQ6pD,cAExF50C,EAAQne,KAAKg/B,OAAO,gBAAan6B,EAAO,YAAYyL,aAAa,QAErE,GADAtQ,KAAKgnQ,+BAA+BlE,EAAU3kP,GAC1Cne,KAAKqgQ,oBAAsBrgQ,KAAKkJ,QAAQipD,UAAYnyD,KAAKkJ,QAAQqtM,sBAC9Dv2M,KAAKgiQ,8BAA8Bt7P,OAAQ,CAC9C,IAAI8xC,EAAYx4C,KAAK2kQ,sBAAsB/6P,EAAK5J,KAAKkJ,QAAQ4hM,iBAAiBxmK,OAAOz7B,MAAMe,EAAI5J,KAAKkhQ,mCAAmC,GACnI9mO,EAAQ,IAAI,OACZoe,GACApe,EAAMof,MAAMhB,GAEhB,IAAIz0C,EAAS,IAAI,OAAY/D,KAAKwgQ,4BAA4BtnN,aAAa9e,GACvEp6B,KAAKkJ,QAAQqtM,uBAAyBxyM,EAAO2C,SAC7C1G,KAAKkJ,QAAQqtM,qBAAuBxyM,EAAO2C,SAE1C1G,KAAKkJ,QAAQqtM,sBAAwBv2M,KAAKgiQ,8BAA8Bt7P,SACzE1G,KAAKgiQ,8BAAgC,KAGzChiQ,KAAKgiQ,8BAA8Bt7P,QAAW1G,KAAKkJ,QAAQqtM,uBAAyBv2M,KAAK8gQ,mBACrF9gQ,KAAKkJ,QAAQqtM,uBACjBv2M,KAAKgiQ,8BAAgC,IAIjDhiQ,KAAKinQ,0BACL74H,EAAKt8H,cAAc,iBAAiB0T,QAExCxlB,KAAKknQ,SAAS,gBAAa94H,EAAM,eAErC4xH,EAAmB95P,UAAU8gQ,+BAAiC,SAAUlE,EAAU3kP,GAC9E,IAAK,IAAIpX,EAAI,EAAGA,EAAI/G,KAAKkhQ,iCAAiCx6P,OAAQK,IAAK,CACnE,IAAIogQ,EAAUnnQ,KAAKkhQ,iCAAiCn6P,GACpD,GAAIogQ,EAAQhpP,MAAQ,KAAOA,EAAQ,KAA4B,UAArBgpP,EAAQ7tN,UAA6C,aAArB6tN,EAAQ7tN,UAA0B,CACxGt5C,KAAKkhQ,iCAAiC5uP,OAAOvL,EAAG,GAChD,QAGoB,OAAvB+7P,EAAStqN,WAAwBx4C,KAAKghQ,+BAAkChhQ,KAAK+gQ,0BACnD,QAAvB+B,EAAStqN,WAAyBx4C,KAAKghQ,gCAAiChhQ,KAAK+gQ,0BACjF/gQ,KAAKkhQ,iCAAiCjvP,KAAK,eAAO,GAAI,CAAEkM,MAAOA,GAAS2kP,IAC7C,OAAvBA,EAAStqN,UACTx4C,KAAKkJ,QAAQqtM,uBAGbv2M,KAAKkJ,QAAQqtM,yBAQzBypD,EAAmB95P,UAAUkhQ,gBAAkB,SAAUr0P,EAAGi2L,GACxD,IAAI96E,EAAuB,YAAVn7G,EAAElP,IAAqBmlM,EAAkBj/L,QAAQyJ,SAASsT,eAAiB,EACtFkiL,EAAkBj/L,QAAQyJ,SAASsT,eAAiB,EACtD+qK,EAAcmX,GAAoB96E,EAAY86E,EAAkBtiM,QAAUsiM,EAAkBtiM,QAEhG,GAAImrL,EAAa,CACbA,EAAYrsK,QACZ,IAAIlf,EAASurL,EAAY7mL,UAAUkB,SAAS,gBAAkB,gBAAa2lL,EAAa,YAAcA,EACtG7xL,KAAKknQ,SAAS5gQ,KAGtB05P,EAAmB95P,UAAUud,aAAe,SAAU1Q,GAIlD,IAHe,QAAVA,EAAElP,KAAiBkP,EAAEm2L,UAAuB,QAAVn2L,EAAElP,MAA6B,YAAVkP,EAAElP,KAA+B,cAAVkP,EAAElP,OAAyBkP,EAAEq7E,SAC5GpuF,KAAKknQ,SAAS,gBAAan0P,EAAEzM,OAAQ,cAE1B,YAAVyM,EAAElP,KAA+B,cAAVkP,EAAElP,OAAyBkP,EAAEq7E,QAA8C,aAApCpuF,KAAK27B,OAAO0e,eAAejmC,KAAqB,CAC/GrB,EAAE6F,iBACF,IAAIowL,EAAoBnjM,MAAM+oK,KAAK5uK,KAAKwmM,IAAIr+K,iBAAiB,mDAC7DnoB,KAAKonQ,gBAAgBr0P,EAAGi2L,KAGhCg3D,EAAmB95P,UAAUghQ,SAAW,SAAU94H,GAC9C,IAAIi7D,EAAWrpM,KAAKwmM,IAAI10L,cAAc,eAClCu3L,GACAA,EAASr+L,UAAUC,OAAO,cAE1BmjI,GAAQA,IAASi7D,GACjBj7D,EAAKpjI,UAAU0G,IAAI,eAG3BsuP,EAAmB95P,UAAU4gQ,gBAAkB,SAAUhoK,GACjD9+F,KAAKqgQ,oBACLrgQ,KAAKghQ,+BAAgC,EACrChhQ,KAAK+gQ,uBAAyBjiK,EAC9B9+F,KAAKgiQ,8BAAgC,GACrChiQ,KAAKkhQ,iCAAmC,IAM5C,IAJA,IAAImG,EAASrnQ,KAAKqgQ,kBACdrgQ,KAAK6gQ,mBAAmBp0P,KAAI,SAAU2uK,GAClC,OAAOA,EAAItpK,cAAc,eACxB,GAAGwB,MAAMjK,KAAKrJ,KAAKylM,KAAKt9K,iBAAiB,iCACzC1U,EAAK,EAAG6zP,EAAWD,EAAQ5zP,EAAK6zP,EAAS5gQ,OAAQ+M,IAAM,CAC5D,IAAIgyL,EAAO6hE,EAAS7zP,GACpB,gBAAqBgyL,EAAM3mG,GAC3B,gBAAW2mG,EAAKshE,gBAAiBjoK,KAGzCkhK,EAAmB95P,UAAUgtG,WAAa,WAClClzG,KAAK27B,OAAOxyB,QAAQ6B,UAAUkB,SAAS,cACvClM,KAAK8/L,UAAU32L,QAAQ2I,cAAc,kBAAkB9G,UAAUC,OAAO,iBACnEjL,KAAKkJ,QAAQ6+L,oBACd/nM,KAAK8/L,UAAU32L,QAAQ2I,cAAc,UAAU0T,UAI3Dw6O,EAAmB95P,UAAUqhQ,eAAiB,SAAUppP,EAAO2gF,EAASvmE,GACpE,IAAI61G,EAAOtvC,EAAU9+F,KAAKmhQ,SAASh0O,WAAU,GACzCntB,KAAKohQ,UAAUj0O,WAAU,GAC7B,gBAAWihH,EAAKt8H,cAAc,SAAUgtF,GACxC,IAAIxsB,EAAQ87D,EAAKt8H,cAAc,YAC3B01P,EAAY,eAAgB,GAAIjvO,EAAM,CAAEgE,OAAQv8B,KAAKkJ,QAAQqzB,OAAQZ,OAAQ37B,KAAK27B,SAClF2kC,EAAYtgE,KAAKkJ,QAAQi7F,kBAAoB,cAAgB,YACjE7xB,EAAM,GAAKhS,IAAc,eAAkBniD,IAAUA,EAAM7G,WAAW5Q,OAClE1G,KAAK27B,OAAO/qB,oBAAsB,OAAmBE,SAASqN,GAASA,EAAQne,KAAKkiF,kBAAkB,UAC1G,IAAIulL,EAAc,eAAO,QAUzB,GATAn1L,EAAM/hE,aAAa,KAAMk3P,EAAc,aACvCr5H,EAAKt8H,cAAc,SAASvB,aAAa,kBAAmB+hE,EAAMphE,IAC9DohE,EAAM5hE,YAAc1Q,KAAKkiF,kBAAkB,YAC3CliF,KAAKwiQ,UAAW,GAEC,mBAAVrkP,IACPm0D,EAAM5hE,WAAsB,IAAVyN,EAAiBne,KAAKkiF,kBAAkB,cAAgBliF,KAAKkiF,kBAAkB,gBAErG,eAAS,CAAC5P,GAAQ,CAAC,yBACftyE,KAAKkJ,QAAQonC,UAAY/X,EAAKv4B,KAAKkJ,QAAQqzB,OAAO4b,SAAWn4C,KAAKkiF,kBAAkB,cACjF3pD,EAAKv4B,KAAKkJ,QAAQqzB,OAAO4b,SAAWn4C,KAAKkiF,kBAAkB,uBAAwB,CACtF5P,EAAM5hE,UAAY,GAClB,IAAIutL,EAAkBj+L,KAAK27B,OAAO5tB,SAAW/N,KAAKkJ,QAAQqzB,OAAOnD,QACL,kBAA7Cp5B,KAAKkJ,QAAQqzB,OAAOnD,OAAmB,aAElD8kK,EAAel+L,KAAK27B,OAAOs2I,eAAiBjyK,KAAK27B,OAAOs2I,cAAcksB,eAEtEn+L,KAAK27B,OAAOs2I,cAAcksB,cAAcpwL,QACxCkwL,GAAmBC,GACnBl+L,KAAKkJ,QAAQonC,SAASk3N,EAAWxnQ,KAAK27B,OAAQ,qBAAsB,KAAM,KAAM,KAAM22C,GACtFtyE,KAAK27B,OAAOgsH,mBAGZ,eAAer1E,EAAOtyE,KAAKkJ,QAAQonC,SAASk3N,EAAWxnQ,KAAK27B,OAAQ,uBAG5E,OAAOyyG,GAEX4xH,EAAmB95P,UAAU+gQ,wBAA0B,WACnD,IASIvwH,EATAuL,EAAMjiJ,KAAKqgQ,kBAAoBrgQ,KAAK6gQ,mBAAmBn6P,OAAS1G,KAAKylM,KAAKp/K,SAAS3f,OAAS,EAC5F4D,EAAY,GACZwT,GAAW,EACXswH,EAAOpuI,KAAKqgQ,kBAAoBrgQ,KAAKymM,KAAK30L,cAAc,gBAAkB9R,KAAKylM,KAAK3zL,cAAc,gBAClGq0H,EAAWnmI,KAAKqgQ,kBAAoBrgQ,KAAK6gQ,mBAAmBznO,QAAO,SAAUgiJ,GAAO,OAAOA,EAAItpK,cAAc,eAAgBpL,OAC7H1G,KAAKylM,KAAKt9K,iBAAiB,kDAAkDzhB,OAC7E1G,KAAKylM,KAAK3zL,cAAc,oBACxBmwI,GAAO,GAGNjiJ,KAAKkJ,QAAQ6+L,qBACdrxD,EAAM12I,KAAK8/L,UAAUnmD,OAAO,GAC5BjD,EAAI54H,UAAW,GAEnB,IAAIjZ,EAAQupI,EAAK24H,gBACjB,gBAAWliQ,GAAO,GAClBA,EAAMqyP,eAAgB,GAClBl3P,KAAKqgQ,mBAA2C,KAAtBrgQ,KAAK2hQ,OAAOxjP,OAAiBne,KAAKkJ,QAAQwtM,4BAA+B12M,KAAKihQ,kCACnGjhQ,KAAKghQ,gCAAmChhQ,KAAK+gQ,wBAA2B56H,IAAe8b,IAAQ9b,GAAY8b,IAAQ9b,EAGnHnmI,KAAKqgQ,mBAAqBrgQ,KAAK6gQ,mBAAmBn6P,OAAS1G,KAAK8gQ,mBAClE9gQ,KAAKgiQ,8BAA8Bt7P,UAAYy/H,GAAY8b,IAAQ9b,IAAanmI,KAAK+gQ,yBACnF56H,EAID8b,GAAOjiJ,KAAKgiQ,8BAA8Bt7P,OAH1Cy/H,GAAYnmI,KAAKgiQ,8BAA8Bt7P,QALnDy/H,EAAW,EAWX8b,IAAQ9b,GACJnmI,KAAKqgQ,oBACLrgQ,KAAK+gQ,wBAAyB,EAC9B/gQ,KAAKghQ,+BAAgC,EACrChhQ,KAAKkhQ,iCAAmC,IAE5C52P,EAAY,CAAC,WACb,gBAAWzF,GAAO,IAEbshI,GACL77H,EAAY,CAAC,UACbzF,EAAMqyP,eAAgB,IAGlBl3P,KAAKqgQ,oBACLrgQ,KAAK+gQ,wBAAyB,EAC9B/gQ,KAAKghQ,+BAAgC,EACrChhQ,KAAKkhQ,iCAAmC,IAE5C52P,EAAY,CAAC,aACbwT,GAAW,EACP44H,IACAA,EAAI54H,UAAW,IAGnB44H,IACA12I,KAAKmgQ,aAAezpH,EAAI54H,SACxB44H,EAAI/oI,YAER,gBAAY,CAACygI,GAAO,CAAC,UAAW,SAAU,cAC1C,eAAS,CAACA,GAAO9jI,GACjBtK,KAAK27B,OAAOrc,OAAO,QAAiC,CAAExB,SAAUA,KAEpEkiP,EAAmB95P,UAAUwgQ,kBAAoB,SAAUnuO,EAAMi1M,EAAW+4B,GACxE,IAAI38P,EAAIC,EAAIwyB,EAERq6G,EADA2wH,EAASrnQ,KAAK27B,OAAOtxB,cAAc,OAEnCyT,GAAW,EACV9d,KAAKkJ,QAAQ6+L,qBACdrxD,EAAM12I,KAAK8/L,UAAUnmD,OAAO,IAEhC,IAAI+tH,GAAe,EACf7jQ,EAAM,UACL0iQ,EAAM7uN,eACP7zC,EAAM0iQ,EAAMpuN,OAEhB,IAAK,IAAIpxC,EAAI,EAAGA,EAAIwxB,EAAK7xB,OAAQK,IAAK,CAClC,IAAIub,EAAM,eAASze,EAAK00B,EAAKxzB,SAASgC,EAAEuQ,WAAY,OACxC,KAARgL,GAAc,eAAkBA,MAChColP,GAA4B,GASpC,GANK1nQ,KAAKqgQ,oBACNrgQ,KAAKgjQ,UAA4B,IAAjB0E,EAAqBnvO,EAAK7xB,OAASghQ,EAAcnvO,EAAK7xB,QAEtE1G,KAAKqgQ,mBAAqBrgQ,KAAK27B,OAAO0e,gBAAkE,YAAhDr6C,KAAK27B,OAAO0e,eAAe2uD,kBACnFhpG,KAAKylQ,aAELltO,EAAK7xB,SAAW1G,KAAK+/N,YAAa,CAClC,IAAI4nC,EAAiB3nQ,KAAKkiF,kBAAkB,aACxC2zI,EAAW71N,KAAKylM,KAAK3zL,cAAc,qBACnC+jN,GACAA,EAAS7qN,UAAUC,OAAO,oBAE9B,IAAIkhM,EAAWnsM,KAAKunQ,eAAeI,GAAgB,GAAQ/9P,EAAK,GAAIA,EAAG5J,KAAKkJ,QAAQivC,OAASwvN,EAAgB/9P,IAS7G,GARI5J,KAAK27B,OAAOtrB,YAC+B,IAAvCrQ,KAAK27B,OAAOtrB,SAAStG,QAAQ,KAC7B,eAAS,CAACoiM,GAAWnsM,KAAK27B,OAAOtrB,SAAShQ,MAAM,MAGhD,eAAS,CAAC8rM,GAAW,CAACnsM,KAAK27B,OAAOtrB,YAGtCrQ,KAAKsgQ,sBAAwBtgQ,KAAKqgQ,kBAAmB,CACrD,IAAIwG,EAAY,eAAmB,eAAO,QAAS16D,EAAU,YAC7D06D,EAAU/0P,cAAc,YAAY9G,UAAU0G,IAAI,eAC9C1R,KAAKqgQ,kBACLrgQ,KAAKymM,KAAKx7K,aAAa47O,EAAW7mQ,KAAKmiQ,SAGvCkF,EAAO78P,YAAYq8P,QAGlB7mQ,KAAKymM,KAAK30L,cAAc,4BAC7B9R,KAAKymM,KAAK30L,cAAc,0BAA0Bi1P,gBAAgBjpP,UAAW,EAC7E9d,KAAKymM,KAAK30L,cAAc,0BAA0BsV,cAAcpc,UAAUC,OAAO,wBAErF,IAAIutC,EAAY,IAAI,OAAU,QAAS,QAASx4C,KAAKkJ,QAAQivC,OACzDn4C,KAAKkJ,QAAQkvC,kBACbI,EAAYA,EAAUiB,GAAG,QAAS,QAASz5C,KAAKkJ,QAAQkvC,kBAE5D,IAAIwvN,EAAgB,IAAI,OAAY5nQ,KAAKkJ,QAAQ4hM,iBAAiB5xJ,cAAa,IAAI,QAAQM,MAAMhB,IAAY9xC,OAC7G,GAAI1G,KAAK2hQ,OAAOxjP,MAAO,CACnB,IAAI0pP,EAAoB7nQ,KAAKunQ,eAAevnQ,KAAKkiF,kBAAkB,wBAAwB,GAAQr4E,EAAK,GACpGA,EAAG7J,KAAKkJ,QAAQivC,OAASn4C,KAAKkiF,kBAAkB,uBAChDr4E,IASJ,GARI7J,KAAK27B,OAAOtrB,YAC+B,IAAvCrQ,KAAK27B,OAAOtrB,SAAStG,QAAQ,KAC7B,eAAS,CAAC89P,GAAoB7nQ,KAAK27B,OAAOtrB,SAAShQ,MAAM,MAGzD,eAAS,CAACwnQ,GAAoB,CAAC7nQ,KAAK27B,OAAOtrB,YAG9CrQ,KAAKqgQ,oBAAuB,eAAkBrgQ,KAAKymM,KAAKpgL,SAAS,KAC3B,oCAApCrmB,KAAKymM,KAAKpgL,SAAS,GAAGi6C,YAAsDtgE,KAAKqgQ,kBAAmB,CACvG,IAAIyH,EAAmB,eAAmB,eAAO,QAASD,EAAmB,YAE7E,GADAC,EAAiBh2P,cAAc,YAAY9G,UAAU0G,IAAI,iBACrD1R,KAAKqgQ,kBAAmB,CACxBrgQ,KAAKymM,KAAKx7K,aAAa68O,EAAkB9nQ,KAAKmiQ,SAC9C,IAAI4F,EAAmB/nQ,KAAKmiQ,QAAQrwP,cAAc,mBAC9Ck2P,EAAej5P,KAAKu2D,KAAKwiM,EAAiB96P,wBAAwB7B,QACtE48P,EAAiBp7P,MAAMxB,OAAUpG,SAASsH,iBAAiB07P,GAAkB58P,OAAO9K,MAAM,MAAM,IAAM2nQ,EAChG,KACND,EAAiBp7P,MAAMmiI,UAAYi5H,EAAiBp7P,MAAMxB,YAG1Dk8P,EAAO78P,YAAYs9P,QAGlB9nQ,KAAKymM,KAAK30L,cAAc,8BAC7B9R,KAAKymM,KAAK30L,cAAc,4BAA4Bi1P,gBAAgBjpP,UAAW,EAC/E9d,KAAKymM,KAAK30L,cAAc,4BAA4BsV,cAAcpc,UAAUC,OAAO,6BAGtF,GAAIjL,KAAKqgQ,oBAAsB,eAAkBrgQ,KAAKymM,KAAKpgL,SAAS,KAC9B,oCAApCrmB,KAAKymM,KAAKpgL,SAAS,GAAGi6C,UAAiD,CACtEynM,EAAmB/nQ,KAAKmiQ,QAAQrwP,cAAc,mBAAlD,IACIm2P,EAAiBl5P,KAAKu2D,KAAKtlE,KAAKymM,KAAKpgL,SAAS,GAAGrZ,wBAAwB7B,QAC7E48P,EAAiBp7P,MAAMxB,OAAUpG,SAASsH,iBAAiB07P,GAAkB58P,OAAO9K,MAAM,MAAM,IAAM4nQ,EAChG,KACNF,EAAiBp7P,MAAMmiI,UAAYi5H,EAAiBp7P,MAAMxB,OAC1D,gBAAOnL,KAAKymM,KAAKpgL,SAAS,IAE9B,IAAI6hP,OAAW,EACf,IAASnhQ,EAAI,EAAGA,EAAIwxB,EAAK7xB,OAAQK,IAAK,CAClC,IAAIwzC,EAAM,eAAO,QACjBv6C,KAAKg/B,OAAO,GAAKub,GAAO,eAAS12C,EAAK00B,EAAKxzB,SAASgC,EAAEuQ,WAAY,MAClE,IAAI6G,EAAQ,eAASne,KAAKkJ,QAAQivC,MAAO5f,EAAKxzB,SAASgC,EAAEuQ,WAAY,MACjEtX,KAAKkJ,QAAQu9F,WACbtoF,EAAQne,KAAK+kG,eAAe5vC,OAAOh3C,EAAOne,KAAKkJ,QAAQu9F,WAE3D,IAAI0hK,EAAS,CAAEhqP,MAAOA,EAAOoe,OAAQv8B,KAAKkJ,QAAQqzB,OAAQhE,KAAMA,EAAKxzB,SAASgC,EAAEuQ,WAAY,MAG5F,GAFAtX,KAAK27B,OAAOrc,OAAO,QAAwB6oP,GAC3ChqP,EAAQgqP,EAAOhqP,MACA,KAAVA,GAAgB,eAAkBA,GAAS,CAC5C,GAAI+pP,EACA,SAEJA,GAAW,EAEXloQ,KAAKqgQ,mBACLrgQ,KAAKooQ,wCAAwCjqP,EAAOne,KAAKgiQ,+BAE7D,IAAI/yD,EAAWjvM,KAAKghQ,8BAChBhhQ,KAAKunQ,eAAeppP,EAAOne,KAAK+gQ,uBAAwB,eAAS,UAAWxoO,EAAKxxB,KACjF/G,KAAKunQ,eAAeppP,EAAOne,KAAKqoQ,gBAAgBT,EAAe5nQ,KAAKg/B,OAAO,GAAKub,IAAO,eAAS,UAAWhiB,EAAKxxB,KACpHsgQ,EAAO78P,YAAY,eAAmB+vC,EAAK00J,EAAU,aACjDjvM,KAAKqgQ,oBACLgH,EAAOiB,UAAU37P,MAAMxB,OAASnL,KAAKuiQ,cAAcviQ,KAAKylM,MAAQ,MAGxE,IAAI7uL,EAAY5W,KAAKylM,KAAK7uL,WACrB5W,KAAKqgQ,mBAAqBrgQ,KAAKugQ,wBAChCvgQ,KAAKylM,KAAK/0L,UAAY,GAEjB1Q,KAAKqgQ,mBAAqBrgQ,KAAKylM,KAAKp/K,SAAS3f,QAClD1G,KAAK+lQ,uBAAwB,GAAGzyP,MAAMjK,KAAKrJ,KAAKylM,KAAKp/K,UAAW/T,OAAO,EAAGtS,KAAK27B,OAAO0e,eAAe8pN,aAErGnkQ,KAAKqgQ,qBACJhkO,EAAKr8B,KAAK6gQ,oBAAoB5uP,KAAKpJ,MAAMwzB,EAAI,GAAG/oB,MAAMjK,KAAKg+P,EAAOhhP,WACnErmB,KAAKgjQ,UAA4B,IAAjB0E,EAAqB1nQ,KAAK6gQ,mBAAmBn6P,OAASghQ,EAAc1nQ,KAAK6gQ,mBAAmBn6P,QAE5G1G,KAAKgiQ,8BAA8Bt7P,SAAW1G,KAAK6gQ,mBAAmBn6P,QAAU1G,KAAK8gQ,oBACjF9gQ,KAAKkJ,QAAQwtM,4BAA+B12M,KAAKkJ,QAAQqtM,uBAAyBv2M,KAAK8gQ,mBACxF9gQ,KAAKkJ,QAAQwtM,8BAChB12M,KAAKgiQ,8BAAgC,IAEzC,eAAehiQ,KAAKylM,KAAM,GAAGnyL,MAAMjK,KAAKg+P,EAAOhhP,WAC3CrmB,KAAKqgQ,oBAAsBrgQ,KAAK2gQ,2BAChC3gQ,KAAK2gQ,yBAA2B5xP,KAAKC,MAAM4H,EAAY5W,KAAKylM,KAAK7uL,YAErE5W,KAAKinQ,0BACAjnQ,KAAKqgQ,kBAQFviP,IADA44H,EAAI54H,UANJ44H,IACAA,EAAI54H,UAAW,GAEnBA,GAAW,OAWd,CAGD,GAFAupP,EAAO78P,YAAYxK,KAAK27B,OAAOtxB,cAAc,OAAQ,CAAEqG,UAAW1Q,KAAKkiF,kBAAkB,eACzFliF,KAAKylM,KAAK/0L,UAAY,GAClB1Q,KAAKqgQ,kBAAmB,CACpBwG,EAAY7mQ,KAAKymM,KAAK30L,cAAc,0BACxC,GAAI+0P,EAAW,CACX,IAAI0B,EAAkB1B,EAAUz/O,cAAcA,cAC1Cy/O,EAAU77P,UAAUkB,SAAS,WAC7B,gBAAeq8P,GAEV1B,EAAU77P,UAAUkB,SAAS,YAClC,gBAAeq8P,GACf1B,EAAU77P,UAAUC,OAAO,UAC3B,gBAAes9P,IAEnB1B,EAAUE,gBAAgBjpP,UAAW,EACrC+oP,EAAUz/O,cAAcpc,UAAU0G,IAAI,uBAE1C,IAAI2xP,EAAmBrjQ,KAAKymM,KAAK30L,cAAc,4BAC/C,GAAIuxP,EAAkB,CAClB,IAAImF,EAAyBnF,EAAiBj8O,cAAcA,cACxDi8O,EAAiBr4P,UAAUkB,SAAS,YACpC,gBAAes8P,GAEnBnF,EAAiB0D,gBAAgBjpP,UAAW,EAC5CulP,EAAiBj8O,cAAcpc,UAAU0G,IAAI,wBAGrD1R,KAAKylM,KAAKj7L,YAAYxK,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,sBACpE,eAAetK,KAAKylM,KAAKp/K,SAAS,GAAI,GAAG/S,MAAMjK,KAAKg+P,EAAOhhP,WACvDqwH,IACAA,EAAI54H,UAAW,GAEnBA,GAAW,EACX9d,KAAKmgQ,aAAeriP,EAEpB44H,GAAOn+G,EAAK7xB,SACZ1G,KAAKmgQ,aAAezpH,EAAI54H,SACxB44H,EAAI/oI,YAER,IAAI6d,EAAO,CAAE6qB,YAAa,QAA4Blc,WAAYn6B,KAAK+/N,YAAc,GAAKxnM,GACtF6rK,EAAc,cAClB54K,EAAK,GAAK44K,GAAepkM,KACzBA,KAAK27B,OAAOrc,OAAO,OAAyBkM,GAC5CxrB,KAAK27B,OAAOrc,OAAO,QAAiC,CAAExB,SAAUA,IAC5D9d,KAAKqgQ,mBAAqBrgQ,KAAKsgQ,sBAC/BtgQ,KAAKylM,KAAK94L,MAAM0jI,UAAY,OAEhC,eAAYrwI,KAAKmiQ,UAErBnC,EAAmB95P,UAAUkiQ,wCAA0C,SAAUjqP,EAAOsqP,GACpF,IAAK,IAAIhqO,EAAI,EAAGA,EAAIgqO,EAAc/hQ,OAAQ+3B,IAAK,CAC3C,IAAIglO,EAAOgF,EAAchqO,GACrBtgB,IAAUslP,EAAKtlP,OAA4B,UAAlBslP,EAAKnqN,UAA0C,aAAlBmqN,EAAKnqN,WAC3Dt5C,KAAKkhQ,iCAAiCjvP,KAAKw2P,EAAchqO,IACzDgqO,EAAcn2P,OAAOmsB,EAAG,GACxBA,OAIZuhO,EAAmB95P,UAAUmiQ,gBAAkB,SAAUT,EAAezpP,GACpE,GAAKne,KAAK25C,YAAeiuN,EAGpB,CACD,IAAIc,IAAa1oQ,KAAK2hQ,OAAOxjP,OAAene,KAAK+D,OAAO,GAAKoa,GAC7D,OAAIne,KAAKqgQ,kBACEqI,EAG0B,aAA1B1oQ,KAAKkJ,QAAQowC,UAA2BovN,EAAaA,EARhE,OAAO,GAYf1I,EAAmB7+D,YAAc,SAAUjyI,EAAM/W,EAAO5b,EAAQ83B,EAAgBs0M,GAC5E,IAEIxqP,EAFAuK,EAAMwmC,EAAKxoD,OACX3C,EAAS,GAET6kQ,EAAU,UACVt6C,EAAS,GACT77J,KAAel2B,IAAUA,EAAO61B,kBAAkB71B,EAAO61B,kBAC7D,MAAO1pC,IAAO,CAEV,GADAvK,EAAQ+wC,EAAKnqD,SAAS2jB,EAAIpR,WAAY,KAClCilB,GAA0B,aAAhBA,EAAOnoB,MAAoD,kBAAtB+J,EAAM,GAAKg6B,IAAuBh6B,EAAM,GAAKg6B,GAAQ,CACpG,IAAIijI,EAAMj9J,EAAM,GAAKg6B,GAAO93C,MAAM,WAClC8d,EAAM,GAAKg6B,GAAS,IAAI95B,KAAKtZ,SAASq2K,EAAI,GAAI,IAAKr2K,SAASq2K,EAAI,GAAI,IAAM,EAAGr2K,SAASq2K,EAAI,GAAI,KAElGj9J,EAAQ,eAAUg6B,EAAOh6B,GACzB,IAAI0qP,EAAuC,kBAAV1qP,GAAyB,cAAD,CAAmBwqP,IAEtE,cAAD,CAAmBA,EAAehtO,SAAc,cAAD,CAAmBgtO,EAAehtO,OAAO0e,iBAEvF,cAAD,CAAmBsuN,EAAehtO,OAAO0e,eAAe+mJ,uBAAgDjjL,EAAtBA,EAAMmJ,cAC7F,KAAMuhP,KAAsBv6C,GAAS,CACjC,IAAInzJ,EAAM,GAGV,GAFAA,EAAI,GAAKytM,GAAWzqP,EACpBmwM,EAAO,GAAKu6C,IAAsB,EAC9Bp2M,EAAc,CACd,IAAIq2M,EAAiB,eAAevsO,EAAQ,GAAIpe,EAAOk2C,GAAgB,GACvE,gBAAS,QAAuBy0M,EAAgB55M,EAAKnqD,SAAS2jB,EAAIpR,WAAY,MAC9E6G,EAAQ,eAASoe,EAAO6b,gBAAiB0wN,GAE7C,gBAAS3wN,EAAO,eAAkBh6B,GAAS,KAAOA,EAAOg9C,GACzD,gBAAS,UAAWjM,EAAKnqD,SAAS2jB,EAAIpR,WAAY,KAAM6jD,GACxDp3D,EAAOkO,KAAKkpD,IAGpB,OAAO,OAASxM,MAAM,OAASt1B,KAAKt1B,EAAQo0C,EAAO,OAASiuD,aAAc,YAE9E45J,EAAmBlsM,aAAe,SAAUx2B,EAAS2iO,GAIjD,IAHA,IAAI5vM,EAAO,OAASjX,SAAS9b,EAAS,SAAS,IAAS,GACpD2V,EAAa,GACbwwN,EAAO,GACF18P,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IAC7BksC,EAAa,IAAI,OAAY3V,GAAS4b,cAAa,IAAI,QAAQM,MAAM,QAAS,QAAS6W,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,QAC9F,IAAtBlF,EAAWvsC,SACX+8P,EAAKpzM,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,OAAS6nN,EAAmBsE,kBAAkBrxN,EAAYgtN,IAGxG,OAAOwD,GAEXzD,EAAmBsE,kBAAoB,SAAUj0M,EAAM4vM,GACnD,IACIznN,EADA9vB,EAAM2nC,EAAOA,EAAK3pD,OAAS,EAE3BqiQ,EAAU,KACVh/N,EAAQi2N,EAAmBgJ,iBAAiB34M,EAAK,IACrDtmB,EAAMgpB,cAAgB,eAAkBhpB,EAAMgpB,eAAgBhpB,EAAMgpB,aAEhEva,EADe,SAAfzO,EAAM31B,MAAkC,aAAf21B,EAAM31B,MAAsC,aAAf21B,EAAM31B,KAChD,eAAiB21B,EAAOA,EAAM31B,KAAM6rP,GAGpCl2N,EAAMmjK,YAAcnjK,EAAMmjK,YAClC,IAAI,OAAUnjK,EAAMoO,MAAOpO,EAAMuP,SAAUvP,EAAM5rB,OAAQ6hP,EAAmBiJ,aAAal/N,GAAQA,EAAMgpB,cAE/G,IAAK,IAAIjtD,EAAI,EAAGA,EAAI4iB,EAAK5iB,IACrBuqD,EAAKtrD,SAASe,EAAEwR,WAAY,KAAO0oP,EAAmBgJ,iBAAiB34M,EAAKtrD,SAASe,EAAEwR,WAAY,MAC/FoR,EAAM,GAAK5iB,EAAI,IAA6B,OAAtBuqD,EAAKvqD,GAAG0yC,WAAgD,OAA1B6X,EAAKvqD,EAAI,GAAG0yC,WACtC,QAAtB6X,EAAKvqD,GAAG0yC,WAAiD,QAA1B6X,EAAKvqD,EAAI,GAAG0yC,WAC1B,SAAjB6X,EAAKvqD,GAAGsO,MAAoC,aAAjBi8C,EAAKvqD,GAAGsO,MAAwC,aAAjBi8C,EAAKvqD,GAAGsO,KAClEokC,EAAUI,WAAW3mC,KAAK,eAAiBo+C,EAAKtrD,SAASe,EAAEwR,WAAY,KAAM+4C,EAAKvqD,GAAGsO,KAAM6rP,IAG3FznN,EAAUI,WAAW3mC,KAAK,IAAI,OAAUo+C,EAAKvqD,GAAGqyC,MAAOkY,EAAKtrD,SAASe,EAAEwR,WAAY,KAAKgiC,SAAU+W,EAAKtrD,SAASe,EAAEwR,WAAY,KAAK6G,OAAQ6hP,EAAmBiJ,aAAa54M,EAAKtrD,SAASe,EAAEwR,WAAY,MAAO+4C,EAAKtrD,SAASe,EAAEwR,WAAY,KAAKy7C,eAM3Ova,EAFa,SAAjB6X,EAAKvqD,GAAGsO,MAAoC,aAAjBi8C,EAAKvqD,GAAGsO,MAAwC,aAAjBi8C,EAAKvqD,GAAGsO,KACf,QAA/Ci8C,EAAKtrD,SAASe,EAAEwR,WAAY,KAAKkhC,WAAqE,UAA9C6X,EAAKtrD,SAASe,EAAEwR,WAAY,KAAKgiC,SAC7Ed,EAAU,GAAKuwN,GAAS,eAAiB14M,EAAKtrD,SAASe,EAAEwR,WAAY,KAAM+4C,EAAKtrD,SAASe,EAAEwR,WAAY,KAAKlD,KAAM6rP,GAAiB5vM,EAAKtrD,SAASe,EAAEwR,WAAY,KAAKlD,KAAMi8C,EAAKtrD,SAASe,EAAEwR,WAAY,KAAKy7C,cAG3Mva,EAAW6X,EAAKtrD,SAASe,EAAEwR,WAAY,KAAc,WAAG,eAAiB+4C,EAAKtrD,SAASe,EAAEwR,WAAY,KAAM+4C,EAAKtrD,SAASe,EAAEwR,WAAY,KAAKlD,KAAM6rP,GAAiB5vM,EAAKtrD,SAASe,EAAEwR,WAAY,KAAKlD,KAAMi8C,EAAKtrD,SAASe,EAAEwR,WAAY,KAAKy7C,cAI/O1C,EAAKtrD,SAASe,EAAEwR,WAAY,KAAK41L,YACzC10J,EAAU6X,EAAKtrD,SAASe,EAAEwR,WAAY,KACjCkhC,WAAW6X,EAAKtrD,SAASe,EAAEwR,WAAY,KAAK41L,aACjD10J,EAAW6X,EAAKtrD,SAASe,EAAEwR,WAAY,KAAc,WAAG+4C,EAAKtrD,SAASe,EAAEwR,WAAY,KAAK6gC,MAAOkY,EAAKtrD,SAASe,EAAEwR,WAAY,KAAKgiC,SAAU+W,EAAKtrD,SAASe,EAAEwR,WAAY,KAAK6G,OAAQ6hP,EAAmBiJ,aAAa54M,EAAKtrD,SAASe,EAAEwR,WAAY,MAAO+4C,EAAKtrD,SAASe,EAAEwR,WAAY,KAAKy7C,cAIxS,OAAOva,GAAa,MAExBwnN,EAAmBiJ,aAAe,SAAU7vO,GACxC,OAAI,eAAkBA,EAAOmgB,aACL,WAAhBngB,EAAOhlB,MAAqB,eAAkBglB,EAAOhlB,OAAmC,kBAAlBglB,EAAY,OAQ/EA,EAAOmgB,WAGtBymN,EAAmBgJ,iBAAmB,SAAU5vO,GAI5C,OAHqB,SAAhBA,EAAOhlB,MAAmC,aAAhBglB,EAAOhlB,MAAuC,aAAhBglB,EAAOhlB,MAAuBglB,EAAOjb,iBAAiBE,QAC/G+a,EAAOhlB,KAAOglB,EAAOhlB,MAAQ,QAE1BglB,GAEJ4mO,EA3wD4B,I,sBCbrC,SAAUlgQ,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;IAAIipQ,EAAKjpQ,EAAOE,aAAa,KAAM,CAC/BC,OAAQ,8IAA8IC,MAClJ,KAEJC,YAAa,iDAAiDD,MAAM,KACpEE,SAAU,+CAA+CF,MAAM,KAC/DG,cAAe,8BAA8BH,MAAM,KACnDI,YAAa,uBAAuBJ,MAAM,KAC1CK,eAAgB,CACZC,GAAI,QACJC,IAAK,WACLC,EAAG,aACHC,GAAI,2BACJC,IAAK,wCACLC,KAAM,8CAEVC,SAAU,CACNC,QAAS,eACTC,QAAS,iBACTC,SAAU,qBACVC,QAAS,iBACTC,SAAU,yBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,UACRC,KAAM,aACNC,EAAG,kBACHC,GAAI,aACJC,EAAG,eACHC,GAAI,YACJC,EAAG,aACHC,GAAI,UACJC,EAAG,aACHC,GAAI,UACJC,EAAG,aACHC,GAAI,UACJC,EAAG,YACHC,GAAI,UAERC,KAAM,CACFC,IAAK,EACLC,IAAK,KAIb,OAAOymQ,M,kCC3DX,8GAYIC,EAA8B,WAC9B,SAASA,EAAaxtO,EAAQurH,GAC1BlnJ,KAAKynJ,UAAYP,EAAQmB,WAAW,gBACpCroJ,KAAKoyH,UAAY80B,EAAQmB,WAAW,kBACpCroJ,KAAK27B,OAASA,EACd37B,KAAKmJ,QAAUnJ,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,OAAkBsK,MAAO,CAAEC,KAAM,WAAYyyI,SAAU,QACnHtnJ,KAAKopQ,UAAYppQ,KAAK27B,OAAOtxB,cAAc,QAAS,CAAEC,UAAW,gBAAiBsK,MAAO,CAAE,KAAQ,WAAY,aAAc5U,KAAKynJ,UAAUrnI,YAAY,gBA8S5J,OAvSA+oP,EAAajjQ,UAAU43L,OAAS,WAC5B,MAAO,IAWXqrE,EAAajjQ,UAAU8b,OAAS,SAAUua,EAAQpe,EAAOoa,GACrD,IAAK,eAAkBgE,EAAOva,QAAS,CAInC,GAHoB,WAAhBua,EAAOnoB,MAAqB+M,MAAMpc,SAASoZ,EAAO,OAClDA,EAAQ,MAEQ,aAAhBoe,EAAOnoB,MAAwC,kBAAV+J,GAAsBA,EAAO,CAClE,IAAIi9J,EAAMj9J,EAAM9d,MAAM,WACtB8d,EAAQ,IAAIE,KAAKtZ,SAASq2K,EAAI,GAAI,IAAKr2K,SAASq2K,EAAI,GAAI,IAAM,EAAGr2K,SAASq2K,EAAI,GAAI,KAEtFj9J,EAAQne,KAAKoyH,UAAUj9D,OAAOh3C,EAAOoe,EAAO04B,gBAEhD,OAAO,eAAkB92C,GAAS,GAAKA,EAAM7G,YAGjD6xP,EAAajjQ,UAAUmjQ,SAAW,SAAU9+M,EAAMmlD,EAAMn3E,EAAMrL,EAAYo8O,EAAOt+J,GAC7E,IAAIphG,EACA7F,EACJ,GAAI2rG,EAAKnzE,OAAO+T,SAAU,CACtB,IAAI2tJ,EAAkBj+L,KAAK27B,OAAO5tB,SAA6C,kBAA1B2hG,EAAKnzE,OAAe,UAAkBmzE,EAAKnzE,OAAO+T,SAASpqC,YAAewpG,EAAKnzE,OAAO+T,SAAkB,UAAEi5N,YAC3JrrE,EAAel+L,KAAK27B,OAAOs2I,eAAiBjyK,KAAK27B,OAAOs2I,cAAcksB,eACtEn+L,KAAK27B,OAAOs2I,cAAcksB,cAAcpwL,QACxCy7P,EAAa,CAAC,SACdhC,EAAY,eAAgB,GAAIjvO,GAAO3uB,EAAK,GAAIA,EAAG,SAAkB0/P,EAAO1/P,EAAG2yB,OAASmzE,EAAKnzE,OAAQ3yB,IACrG6/P,EAAazpQ,KAAK27B,OAAOxyB,QAAQ+H,GAAKw+F,EAAKnzE,OAAOge,IAClDhO,EAAM,mBACV,GAAI0xJ,GAAmBC,EAAc,CACjC,IAAIg9B,EAAS,CAAE,MAAShuM,EAAWs8O,EAAW,KAC9C95J,EAAKnzE,OAAOqqE,mBAAZ8I,CAAgC,eAAOwrH,EAAQssC,GAAYxnQ,KAAK27B,OAAQ,iBAAkB8tO,EAAYzpQ,KAAK27B,OAAO,GAAK4Q,GAAM,KAAMge,QAGnIxmD,EAAS2rG,EAAKnzE,OAAOqqE,mBAAZ8I,CAAgC,eAAO,CAAE,MAASxiF,EAAWs8O,EAAW,KAAOhC,GAAYxnQ,KAAK27B,OAAQ,WAAY8tO,EAAYzpQ,KAAK27B,OAAO,GAAK4Q,QAAMp7B,OAAWA,EAAWnR,KAAK27B,OAAO,SAStM,OAPKsiK,GAAoBC,GACrB,eAAe3zI,EAAMxmD,GAEzB/D,KAAK27B,OAAOrc,OAAO,kBAAmB,CAAEgxB,SAAUvsC,IAClDA,EAAS,KACTwmD,EAAKh6C,aAAa,aAAcg6C,EAAK+V,UAAYtgE,KAAKynJ,UAAUrnI,YAAY,gBACxEpgB,KAAKynJ,UAAUrnI,YAAY,gBAAkBsvF,EAAKnzE,OAAO6T,aACtD,EAEX,OAAO,GAUX+4N,EAAajjQ,UAAUwjQ,gBAAkB,SAAUntO,EAAQpe,EAAOoa,GAC9D,IAAK,eAAkBgE,EAAO61F,WAC1B,GAAI,eAAuB71F,EAAO61F,UAAW,YAAa,CACtD,IAAIA,EAAY71F,EAAO61F,UACvBj0G,GAAQ,IAAIi0G,GAAYy3D,SAASttJ,EAAQhE,QAGzCpa,EADiC,oBAArBoe,EAAO61F,UACX71F,EAAO61F,UAAU71F,EAAQhE,GAGzBgE,EAAO61F,UAAUy3D,SAASttJ,EAAQhE,GAGlD,OAAOpa,GAYXgrP,EAAajjQ,UAAUmT,OAAS,SAAUq2F,EAAMn3E,EAAMrL,EAAYmlJ,EAAUrnE,GACxE,OAAOhrG,KAAK2pQ,YAAYj6J,EAAMn3E,EAAMrL,EAAY89E,IAWpDm+J,EAAajjQ,UAAU29O,UAAY,SAAU/1C,EAAIp+F,EAAMn3E,EAAMrL,GACzD,IAAI89E,EAA2C,UAAlChrG,KAAK27B,OAAOm2E,aAAap5E,MAAoBo1K,EAAG9iM,UAAUkB,SAAS,qBAChF,GAAIlM,KAAK27B,OAAO5tB,QAAS,CACrB,IAAI+4N,EAAYh5B,EAAGg5B,UACfprD,EAAYoyB,EAAG1mL,cACnB,gBAAO0mL,GACP,IAAI87D,EAAQ5pQ,KAAK2pQ,YAAYj6J,EAAMn3E,EAAMrL,EAAY89E,GACrDhrG,KAAK6pQ,gBAAgBD,EAAO97D,GACxBpyB,EAAUlsE,MAAM9oG,SAAWogO,EAAY,EACvCprD,EAAUzwJ,aAAa2+O,EAAOluF,EAAUlsE,MAAMzqG,SAAS+hO,EAAUxvN,WAAY,MAG7EokK,EAAUlxK,YAAYo/P,OAGzB,CACD,IAAIr/M,EAAOvqD,KAAK2pQ,YAAYj6J,EAAMn3E,EAAMrL,EAAY89E,GACpD8iG,EAAGp9L,UAAY,GACf,IAAIo5P,EAAgBv/M,EAAKj6C,aAAa,cACtCw5P,GAAgBh8D,EAAGv9L,aAAa,aAAcu5P,GAE9C,IADA,IAAIrnM,EAAW,GAAGnvD,MAAMjK,KAAKkhD,EAAK9f,YACzBh3B,EAAK,EAAG26L,EAAa3rI,EAAUhvD,EAAK26L,EAAW1nM,OAAQ+M,IAAM,CAClE,IAAI26H,EAAOggE,EAAW36L,GACtBq6L,EAAGtjM,YAAY4jI,MAK3B+6H,EAAajjQ,UAAU2jQ,gBAAkB,SAAUvjQ,EAAQ6tC,GAEvD,IAIIrlB,EAJAla,EAAQu/B,EAAOjnB,WAEfnmB,EAAI6N,EAAMlO,OAGd,MAAOK,IACH+nB,EAAOla,EAAM7P,SAASgC,EAAEuQ,WAAY,KACpChR,EAAOiK,aAAaue,EAAKxqB,KAAMwqB,EAAK3Q,QAG5CgrP,EAAajjQ,UAAUyjQ,YAAc,SAAUj6J,EAAMn3E,EAAMrL,EAAY89E,GACnE,IAAIphG,EAGA0/P,EAFA/+M,EAAOvqD,KAAKmJ,QAAQgkB,YACpBoP,EAASmzE,EAAKnzE,OAEdmzE,EAAKj9C,eACL62M,EAAQ55J,EAAKr7C,eAAe,KAAOzqD,EAAK,GAAIA,EAAG2yB,EAAO6b,iBAAmB7b,EAAOva,OAAS,KAAO,GAAIpY,IAGxG,IAAIg1L,EAAY5+L,KAAK89L,SACjB3/K,EAAQuxF,EAAKj9C,aAAezyD,KAAK6pL,SAASttJ,EAAO6b,gBAAiBkxN,EAAO/sO,GACzEv8B,KAAK6pL,SAASttJ,EAAO4b,MAAO5f,EAAMgE,GAItC,GAHqB,SAAhBA,EAAOnoB,MAAmC,aAAhBmoB,EAAOnoB,MAAyB,eAAkB+J,KAC7EA,EAAQ,IAAIE,KAAKF,IAED,aAAhBoe,EAAOnoB,OAAwB,eAAkB+J,IAA2B,kBAAVA,EAAoB,CACtF,IAAIi9J,EAAMj9J,EAAM9d,MAAM,WACtB8d,EAAQ,IAAIE,KAAKtZ,SAASq2K,EAAI,GAAI,IAAKr2K,SAASq2K,EAAI,GAAI,IAAM,EAAGr2K,SAASq2K,EAAI,GAAI,KAItF,GAFAj9J,EAAQne,KAAKgiB,OAAOua,EAAQpe,EAAOoa,GACnCqmK,EAAYzgL,EAAM7G,WACE,YAAhBilB,EAAOnoB,OAAuBmoB,EAAO2+M,kBAAmB,CACxD,IAAI6uB,EAAuB,SAAV5rP,GAA8B,UAAVA,EAAqB,KAAiB,SAAVA,EAAmB,OAAS,QAC7FygL,EAAYmrE,EAAY/pQ,KAAKynJ,UAAUrnI,YAAY2pP,GAAanrE,EAEpE,IAAIorE,EAAgBhqQ,KAAK0pQ,gBAAgBntO,EAAQpe,EAAOoa,GAExD,GADAqmK,EAAa,eAAkBriK,EAAO61F,WAAgFwsE,EAAnE,eAAkBorE,GAAiB,GAAKA,EAAc1yP,WACrGtX,KAAKqpQ,SAAS9+M,EAAMmlD,EAAMn3E,EAAMrL,EAAYo8O,EAAOt+J,IAA2B,aAAhBzuE,EAAOnoB,KACrEpU,KAAKw+L,WAAWj0I,EAAMvqD,KAAK27B,OAAO7qB,SAAS8tL,GAAYriK,EAAOwqE,aAAexqE,EAAOwqE,eAAiB,kBAEpG,GAAoB,aAAhBxqE,EAAOnoB,KAAqB,CACjCm2C,EAAKv/C,UAAU0G,IAAI,QAEfyM,IADAne,KAAK27B,OAAO4qL,kBAAkBC,kBACZ,SAAVroM,EAKZ,IAAI8rP,EAAY,eAAejqQ,KAAK27B,OAAOtxB,eAAe,EAAO,CAAEy0F,QAAS3gF,EAAOm0D,MAAO,MACtFtyE,KAAK27B,OAAOtrB,UACZ,eAAS,CAAC45P,GAAY,CAACjqQ,KAAK27B,OAAOtrB,WAEvCrQ,KAAKopQ,UAAUl4P,GAAK,YAAcw+F,EAAKw6J,MACvCD,EAAUh/O,aAAajrB,KAAKopQ,UAAUj8O,YAAa88O,EAAUr7N,YAC7D2b,EAAK//C,YAAYy/P,GAMrB,GAJiC,UAA7BjqQ,KAAK27B,OAAO0oL,cAA4BrkN,KAAK27B,OAAOmd,uBACpD42D,EAAKliE,YAAa,GAEtBxtC,KAAK6nJ,cAAct9F,EAAMmlD,EAAMxiF,GACX,YAAhBqP,EAAOnoB,MAAsBmoB,EAAO2+M,kBAAmB,CACvD,IAAIp8I,EAAU39E,MAAMpc,SAASoZ,EAAM7G,WAAY,KAAiB,SAAV6G,EAAmBpZ,SAASoZ,EAAM7G,WAAY,IAAM,EACtG2yP,EAAY,eAAejqQ,KAAK27B,OAAOtxB,eAAe,EAAO,CAAEy0F,QAASA,EAASxsB,MAAO,MAC5F/nB,EAAK75C,UAAY,GACjB65C,EAAKv/C,UAAU0G,IAAI,qBACnBu4P,EAAUj/P,UAAU0G,IAAI,uBACpB1R,KAAK27B,OAAOtrB,UACZ,eAAS,CAAC45P,GAAY,CAACjqQ,KAAK27B,OAAOtrB,WAEvCk6C,EAAK//C,YAAYy/P,GAErB,GAAI1/M,EAAKv/C,UAAUkB,SAAS,mBAAqBqsB,EAAK10B,IAAK,CACvD,IAAI02C,EAAMgQ,EAAKj6C,aAAa,gBAC5BisB,EAASv8B,KAAK27B,OAAOg4B,eAAepZ,GACpCgQ,EAAKh6C,aAAa,aAAcquL,EAAY5+L,KAAKynJ,UAAUrnI,YAAY,gBAAkBsvF,EAAKnzE,OAAO6T,YAKzG,OAHIpwC,KAAK27B,OAAO+sE,kBAAoBnwE,GAASA,IAASA,EAAK10B,MACvD,eAAwB7D,KAAK27B,OAAQY,EAAQguB,GAE1CA,GAUX4+M,EAAajjQ,UAAUs4L,WAAa,SAAUj0I,EAAMq0I,EAAW7lG,GAG3D,YAFiB,IAAbA,IAAuBA,EAAW,aACtCxuC,EAAK,GAAKwuC,GAAY6lG,EACfr0I,GASX4+M,EAAajjQ,UAAU2hJ,cAAgB,SAAUt9F,EAAMmlD,EAAMxiF,GACzD,IAAIqP,EAASmzE,EAAKnzE,OAClBv8B,KAAK46N,uBAAuBrwK,EAAMmlD,EAAsB,aAAhBnzE,EAAOnoB,MAC/C,gBAAsBm2C,EAAMr9B,GAC5B,gBAAsBq9B,EAAMmlD,EAAKxiF,YAC7BqP,EAAOu+L,kBACP,gBAAsBvwK,EAAMhuB,EAAOu+L,kBAEF,aAAjC96N,KAAK27B,OAAOorL,kBACZ,gBAAsBx8J,EAAM,CAAE,YAAahuB,EAAO6T,aAElD7T,EAAO+oE,YACP/6C,EAAK59C,MAAM24F,UAAY/oE,EAAO+oE,WAEV,SAApB/oE,EAAO4+L,WAAyB5+L,EAAO4+L,UAAqC,SAAzBn7N,KAAK27B,OAAOw/L,SAC/D5wK,EAAKv/C,UAAU0G,IAAI,cAEM,wBAApB6qB,EAAO4+L,WAAwC5+L,EAAO4+L,UAAqC,wBAAzBn7N,KAAK27B,OAAOw/L,UAC9En7N,KAAK27B,OAAOqrL,gBAA4D,YAA1ChnN,KAAK27B,OAAOsrL,iBAAiBC,UACf,SAA1ClnN,KAAK27B,OAAOsrL,iBAAiBC,YAChB,aAAhB3qL,EAAOnoB,MACPm2C,EAAKv/C,UAAU0G,IAAI,sBAI/By3P,EAAajjQ,UAAU00N,uBAAyB,SAAUrwK,EAAMmlD,EAAMy6J,GAClE,IAAIr7O,EAAO,GACP/T,EAAO,CAAE,SAAY,QACrBgtM,EAAU,GACVr4G,EAAKyqB,UACLrrG,EAAKqrG,QAAUzqB,EAAKyqB,SAEpBzqB,EAAKwqB,UACLprG,EAAKorG,QAAUxqB,EAAKwqB,SAEpBxqB,EAAKo1G,YACLiD,EAAQ91M,KAAK,kBAEby9F,EAAKliE,aACLu6K,EAAQ91M,KAAKpJ,MAAMk/M,EAAS,CAAC,wBAAyB,aAClDoiD,GACA5/M,EAAKz4C,cAAc,YAAY9G,UAAU0G,IAAI,YAGjDg+F,EAAK+0G,kBACLsD,EAAQ91M,KAAKpJ,MAAMk/M,EAAS,CAAC,sBAE7Br4G,EAAKE,WAAa,OAASikE,QAC3B/kJ,EAAK/T,EAAKqvP,UAAY16J,EAAKylH,SAC3BrmM,EAAK,QAAyB4gF,EAAKylH,SAAW,GAExC,eAAkBzlH,EAAKr9F,SAC7Byc,EAAK/T,EAAKqvP,UAAY16J,EAAKr9F,MAC3Byc,EAAK,QAAyB4gF,EAAKr9F,MAAQ,GAE1Cq9F,EAAKp9E,SACNy1L,EAAQ91M,KAAK,UAEjB6c,EAAKygF,MAAQw4G,EACb,gBAAsBx9J,EAAMz7B,IAEhCq6O,EAAajjQ,UAAU2jL,SAAW,SAAU1xI,EAAO5f,EAAMgE,GACrD,OAAOA,EAAO4+I,cAAchjI,EAAO5f,EAAMgE,IAEtC4sO,EApTsB,I,yHCJ7B,EAAkC,WAMlC,SAASkB,EAAiB1uO,GACtB37B,KAAK27B,OAASA,EA0JlB,OAxJA0uO,EAAiBnkQ,UAAUokQ,OAAS,SAAU7nM,EAAUj3C,GAEpD,IAAIyyE,EAQJ,GATAj+F,KAAKgrG,QAAS,EAGV/M,EADAj+F,KAAK27B,OAAOitE,YAA0D,QAA5C5oG,KAAK27B,OAAOm2E,aAAay4J,eAC3CvqQ,KAAK27B,OAAO2qH,iBAAiBx0I,cAAc,QAG3C9R,KAAK27B,OAAOgxE,kBAAkB76F,cAAc,QAExD0Z,EAAKgR,IAAMx8B,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,qBACpDtK,KAAK27B,OAAOgxE,kBAAkB76F,cAAc,eAAgB,CAC5D,IAAIsrN,EAAWp9N,KAAK27B,OAAOgxE,kBAAkB76F,cAAc,eAC3DsrN,EAASjiJ,WAAW2Y,YAAYspI,GAC5Bp9N,KAAK27B,OAAOitE,YAAc5oG,KAAK27B,OAAOxyB,QAAQ2I,cAAc,uBAC5D9R,KAAK27B,OAAOxyB,QAAQ2I,cAAc,sBAAsB9G,UAAUC,OAAO,qBAGjC,QAA5CjL,KAAK27B,OAAOm2E,aAAay4J,eACzBtsK,EAAMhzE,aAAaO,EAAKgR,IAAKyhE,EAAMrvD,YAGnCqvD,EAAMzzF,YAAYghB,EAAKgR,KAE3BhR,EAAKgR,IAAIhyB,YAAYxK,KAAKwqQ,eAAe/nM,GAAU,OAAOtxD,EAAWqa,GAAM,IAC3ExrB,KAAK27B,OAAOqtH,WAAWyhH,aAAaj/O,EAAKgR,IAAKhR,IAElD6+O,EAAiBnkQ,UAAUmvD,OAAS,SAAUoN,EAAUj3C,GACpDxrB,KAAKgrG,QAAS,EACd,IAAI0/J,EAAY,GAAGp3P,MAAMjK,KAAKmiB,EAAKgR,IAAIrU,iBAAiB,iBACxDqD,EAAKgR,IAAI9rB,UAAY,GACrB8a,EAAKgR,IAAIhyB,YAAYxK,KAAKwqQ,eAAe/nM,GAAU,EAAMioM,EAAWl/O,GAAM,IAC1EA,EAAKgR,IAAIxxB,UAAU0G,IAAI,QACvB1R,KAAK27B,OAAOqtH,WAAWyhH,aAAaj/O,EAAKgR,IAAKhR,IAGlD6+O,EAAiBnkQ,UAAUskQ,eAAiB,SAAU/nM,EAAUuoC,EAAQ0/J,EAAWl/O,EAAM8/E,GACrF,IAAI3yD,EAAO34C,KAAK27B,OACZgvO,EAAO,EACP7iD,EAAY,eAAkBnvK,EAAKu1D,iBAAoB,eAAkBv1D,EAAKw1D,WAAiB,EAAJ,EAC3Fx1D,EAAKI,gBACL4xN,EAAOhyN,EAAKK,cAAc1b,QAAQ52B,QAEtC,IAAIonM,EAAK9tM,KAAK27B,OAAOtxB,cAAc,KAAM,CACrCC,UAAW,0BACXsK,MAAO,CACHmxM,SAAUptK,EAAKqoM,yBAAyBhhP,KAAK27B,OAAO8sE,4BAA4B/hG,OAC5E1G,KAAK27B,OAAOszE,kBAAkB33F,cAGtC4vD,EAAO17C,EAAK07C,KACZlnE,KAAK27B,OAAOtxB,cAAc,OAAQ,CAAE6G,GAAIynC,EAAKxvC,QAAQ+H,GAAK,WAAY5G,UAAW,eACrF,GAAItK,KAAK27B,OAAOm2E,aAAaxhE,SAGzB,OAFAtwC,KAAK4qQ,eAAe1jM,EAAM17C,EAAKs9H,QAASx9C,GACxCwiG,EAAGtjM,YAAY08D,GACR4mI,EAEX,IAAI1zI,EAAQp6D,KAAK27B,OAAOtxB,cAAc,QAAS,CAAEC,UAAW,wBAAyBsK,MAAO,CAAEsiN,YAAa,OAAQriN,KAAM,UACzHulD,EAAM5vD,YAAYmuC,EAAKg0D,kBAAkB76F,cAAc,QAAmBqb,WAAU,IACpF,IAAI8wE,EAAQj+F,KAAK27B,OAAOtxB,cAAc,OAAgB,CAAEuK,MAAO,CAAEC,KAAM,cACnE6uB,EAAK1jC,KAAK27B,OAAOtxB,cAAc,MAC/BtD,EAAI,EACJ+gN,GACApkL,EAAGzY,aAAajrB,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,wBAA0Bo5B,EAAGkL,YAE1F+J,EAAKy1D,iBACL1qE,EAAGl5B,YAAYxK,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,sBAEhE,MAAOvD,EAAI4jQ,EACPjnO,EAAGl5B,YAAYxK,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,kBAC5DvD,IAEJ,IAEImoM,EAFArtM,EAAI,EACRkF,EAAI,EAEJ,IAAIspD,EAAO7kC,EAAKq/O,uBAAyB7qQ,KAAK27B,OAAOymH,YAAczpG,EAAKiX,aACxE,MAAQo7C,GAAUnpG,EAAI6oQ,EAAUhkQ,QAAUK,EAAIspD,EAAK3pD,QAAWK,EAAIspD,EAAK3pD,OAAQ,CAC3E,IAAI0kE,EAAO4/B,EAAS0/J,EAAU3lQ,SAASlD,EAAEyV,WAAY,KAAKhH,aAAa,WAAa,KAChFyhD,EAAM1B,EAAKtrD,SAASgC,EAAEuQ,WAAY,KACtC43L,EAAczsI,EAAS1Q,EAAIxX,KAAMp8B,MACjC,IAAI2sP,EAAO9qQ,KAAK27B,OAAOtxB,cAAc,KAAM,CACvCC,UAAW,OAAkBsK,MAAO,CAAEjI,MAAO,eAAiBolD,EAAIuzC,UAAYvzC,EAAIuzC,UAAY,IAAK,QAAWl6B,GAAc,MAE5HrZ,EAAIz/B,SACJw4O,EAAKtgQ,YAAYi4D,EAAS1Q,EAAIxX,MACO,aAAjCv6C,KAAK27B,OAAOorL,mBACZ,gBAAsB+jD,EAAM,CAAE,YAAa/4M,EAAI3hB,aACrC,IAANrpC,GACA+jQ,EAAK9/P,UAAU0G,IAAI,0BAGN,gBAAjBqgD,EAAIha,SACJ+yN,EAAK9/P,UAAU0G,IAAI,eAEdqgD,EAAIszC,UAAYtzC,EAAIwzC,mBACzB,eAAS,CAACulK,GAAO,kBAIrBA,EAAK9/P,UAAU0G,IAAI,UAEnB1R,KAAK27B,OAAO+sE,iBACZ,eAAwB1oG,KAAK27B,OAAQo2B,EAAK+4M,GACtC9qQ,KAAK27B,OAAO8sE,6BACO,SAAf12C,EAAIilE,QAAsB,eAAkBjlE,EAAI9f,QAG5B,UAAf8f,EAAIilE,QAAuB,eAAkBjlE,EAAI9f,QAGlC,UAAf8f,EAAIilE,SACT8zI,EAAKn+P,MAAM7B,KAAQ9K,KAAK27B,OAAOykN,qBAAqB,QAAUpgP,KAAK27B,OAAOq9E,WAAc,KACxF8xJ,EAAKn+P,MAAM4kB,MAASvxB,KAAK27B,OAAOykN,qBAAqB,SAAWpgP,KAAK27B,OAAOq9E,WAAc,MAJ1F8xJ,EAAKn+P,MAAM4kB,MAASwgC,EAAI9f,OAASjyC,KAAK27B,OAAOq9E,WAAc,KAH3D8xJ,EAAKn+P,MAAM7B,KAAQinD,EAAI9f,OAASjyC,KAAK27B,OAAOq9E,WAAc,OAWtE8xJ,EAAKv6P,aAAa,aAAc2+L,EAAalvM,KAAK27B,OAAO4iK,UAAUn+K,YAAY,gBAAkB2xC,EAAI3hB,YACrG1M,EAAGl5B,YAAYsgQ,GACf/jQ,EAAIqkE,EAAOrkE,EAAIhC,SAASqmE,EAAM,IAAMrkE,EAAI,EACxClF,IAOJ,OALA,eAAqB6hC,GACrBu6D,EAAMzzF,YAAYk5B,GAClB02B,EAAM5vD,YAAYyzF,GAClB/2B,EAAK18D,YAAY4vD,GACjB0zI,EAAGtjM,YAAY08D,GACR4mI,GAEXu8D,EAAiBnkQ,UAAUq1E,oBAAsB,aAGjD8uL,EAAiBnkQ,UAAU0kQ,eAAiB,SAAU1jM,EAAM3uC,EAAM+yE,GAC9D,IACIk8J,EAAY,eAAO,GAAIjvO,EAAM,CAAE2zE,OAAQlsG,KAAKgrG,OAAQM,SAAUA,IAAY,GAC1Ey/J,EAAiB/qQ,KAAK27B,OAAOxyB,QAAQ+H,GAAK,uBAC1ClR,KAAK27B,OAAO5tB,SAA0D,kBAAvC/N,KAAK27B,OAAOm2E,aAAqB,UAChE9xG,KAAK27B,OAAOgpE,iBAAZ3kG,CAA8BwnQ,EAAWxnQ,KAAK27B,OAAQ,uBAAwBovO,EAAgB,KAAM,KAAM7jM,GAC1GlnE,KAAK27B,OAAOgsH,mBAGZ,eAAezgF,EAAMlnE,KAAK27B,OAAOgpE,iBAAZ3kG,CAA8BwnQ,EAAWxnQ,KAAK27B,OAAQ,uBAAwBovO,KAapGV,EAjK0B,GCDjC,EAAiC,WAMjC,SAASW,EAAgBrvO,GACrB37B,KAAK27B,OAASA,EAiClB,OA/BAqvO,EAAgB9kQ,UAAUmvD,OAAS,SAAUoN,EAAUj3C,GACnD,GAAIxrB,KAAK27B,OAAO5tB,SAAWyd,EAAKy/O,cAAgBz/O,EAAKy/O,aAAa36N,SAAU,CACxE,IAAIorI,EAAYlwJ,EAAKkkF,KAAKtoF,cACtB8jP,EAAQ1/O,EAAKkkF,KAAKviF,WAAU,GAChCuuJ,EAAUzwJ,aAAaigP,EAAO1/O,EAAKkkF,MACnCw7J,EAAM1lP,QACNgG,EAAKkkF,KAAKzkG,SACVugB,EAAKkkF,KAAOw7J,EAEhB1/O,EAAKkkF,KAAKn/F,aAAa,aAAcib,EAAKkkF,KAAKh/F,UAAY1Q,KAAK27B,OAAO4iK,UAAUn+K,YAAY,gBAAkBoL,EAAKy/O,aAAa9yN,OACjI3sB,EAAKkkF,KAAKh/F,UAAY,GACtB8a,EAAKkkF,KAAKllG,YAAYxK,KAAKwqQ,eAAe/nM,EAAUj3C,IACpDA,EAAKkkF,KAAK1kG,UAAU0G,IAAI,qBACxB,eAAU8Z,EAAKgR,IAAK,CAAC,OAAoB,cAAe,KAE5DwuO,EAAgB9kQ,UAAUskQ,eAAiB,SAAU/nM,EAAUj3C,GAC3D,IAAImtB,EAAO34C,KAAK27B,OACZurC,EAAOlnE,KAAK27B,OACXtxB,cAAc,OAAQ,CAAE6G,GAAIynC,EAAKxvC,QAAQ+H,GAAK,WAAY5G,UAAW,eAQ1E,OAPA48D,EAAK18D,YAAYi4D,EAASj3C,EAAKy/O,aAAa1wN,MACT,gBAA/B/uB,EAAKy/O,aAAalzN,UAClBvsB,EAAKkkF,KAAK1kG,UAAU0G,IAAI,cAEvB8Z,EAAKy/O,aAAalzN,UACnBvsB,EAAKkkF,KAAK1kG,UAAU0G,IAAI,cAErBw1D,GAEX8jM,EAAgB9kQ,UAAUq1E,oBAAsB,aAGzCyvL,EAxCyB,G,oCCKhC,EAAkC,WAOlC,SAASG,EAAiBxvO,EAAQga,GAC9B31C,KAAK27B,OAASA,EACd37B,KAAK21C,eAAiBA,EAClB31C,KAAK27B,OAAOkR,cAGhB7sC,KAAK27B,OAAOqR,GAAG,QAAsBhtC,KAAKkY,QAASlY,MACnDA,KAAK27B,OAAOqR,GAAG,QAAgBhtC,KAAKkY,QAASlY,OA8MjD,OA5MAmrQ,EAAiBjlQ,UAAUklQ,aAAe,WACtCprQ,KAAKmgB,KAAOngB,KAAK21C,eAAe0yG,WAAW,iBAE/C8iH,EAAiBjlQ,UAAUokQ,OAAS,SAAU7nM,EAAUj3C,GACpDxrB,KAAKgrG,QAAS,EACdhrG,KAAKqrQ,aAAa5oM,EAAUj3C,IAEhC2/O,EAAiBjlQ,UAAUmvD,OAAS,SAAUoN,EAAUj3C,GACpDxrB,KAAKgrG,QAAS,EACdhrG,KAAKqrQ,aAAa5oM,EAAUj3C,IAEhC2/O,EAAiBjlQ,UAAUolQ,mBAAqB,SAAU9/O,GACtD,IAEI4jB,EAFAhmC,EAAQpJ,KACR24C,EAAO34C,KAAK27B,OAEhB,GAAI37B,KAAK27B,OAAOysE,iBAAkB,CAC9B,IAAImjK,EAAwB,IAAI,OAAyBvrQ,KAAK27B,OAAQ37B,KAAK21C,gBAE3E,OADA41N,EAAsBnlP,OAASpmB,KAAKgrG,OAAS,OAAuBA,OAAS,OAAuBkB,MAC7Fq/J,EAAsBC,4BAAuBr6P,EAAWqa,GAgBnE,OAZQ4jB,EADAuJ,EAAKm5D,aAAarM,eACT,gBAAsB,WAC3B,OAAOr8F,EAAMqiQ,6BAA6B,iBAAkBjgP,GAAMiB,aAIjEzsB,KAAKgrG,OACDhrG,KAAKmgB,KAAKC,YAAY,iBAAmBoL,EAAKkgP,gBAAgB,GAG9D1rQ,KAAKmgB,KAAKC,YAAY,gBAGhCgvB,GAEX+7N,EAAiBjlQ,UAAUmlQ,aAAe,SAAU5oM,EAAUj3C,GAC1D,IAAIpiB,EAAQpJ,KACR24C,EAAO34C,KAAK27B,OAChB37B,KAAKyrM,OAASzrM,KAAK27B,OAAOtxB,cAAc,MAAO,CAAE6G,GAAIynC,EAAKxvC,QAAQ+H,GAAK,sBAAuB4D,OAAQ,gBAClG6jC,EAAKyvD,kBACLpoG,KAAKyrM,OAAOzgM,UAAU0G,IAAI,uBAE9BinC,EAAKxvC,QAAQqB,YAAYxK,KAAKyrM,QAC9BzrM,KAAKorQ,eACLprQ,KAAKyrM,OAAOl7L,aAAa,aAAcvQ,KAAKmgB,KAAKC,YAAY,eAG7DpgB,KAAK8/L,UAAY,IAAI,OAAO,eAAO,CAC/B1wJ,OAAQpvC,KAAKsrQ,mBAAmB9/O,GAAOq5K,SAAS,EAAMvyK,SAAS,EAC/DjiB,SAAUrQ,KAAK27B,OAAOtrB,SAAW,iBAAwBrQ,KAAK27B,OAAOtrB,SAAW,gBAChFI,QAASzQ,KAAKwqQ,eAAe/nM,EAAUj3C,GACvCynF,eAAe,EACf04J,eAAe,EAEfhgQ,MAAO3L,KAAKmzG,YAAYznG,KAAK1L,MAC7B+7C,QAAS/7C,KAAKykM,cAAc/4L,KAAK1L,MACjCwkM,eAAe,EAAMp5L,MAAOutC,EAAKm5D,aAAaxhE,SAAW,OAAS,QAClEhqC,OAAQklB,EAAKllB,OAASklB,EAAKllB,OAASkN,SAAS6B,KAAM29F,kBAAmB,CAAElqG,OAAQ,QAChFglG,eAAgBn1D,EAAKm5D,aAAahE,eAAiB,gBAAsB,WACrE,OAAO1kG,EAAMqiQ,6BAA6B,iBAAkBjgP,GAAMiB,aACjE,KACL7O,QAAS,CAAC,CACF+wE,MAAO3uF,KAAKumM,SAAS76L,KAAK1L,MAC1B0kM,YAAa,CAAEj0L,QAASzQ,KAAKmgB,KAAKC,YAAY,cAC1C/P,SAAUrQ,KAAK27B,OAAOtrB,SAAW,aAAoBrQ,KAAK27B,OAAOtrB,SAAW,YAC5Es0L,WAAW,IAEnB,CAAEh2G,MAAO3uF,KAAKumM,SAAS76L,KAAK1L,MACxB0kM,YAAa,CACTr0L,SAAUrQ,KAAK27B,OAAOtrB,SAAW,UAAiBrQ,KAAK27B,OAAOtrB,SAAW,SACzEI,QAASzQ,KAAKmgB,KAAKC,YAAY,oBAE5Cu4B,EAAKm5D,aAAa25F,QAAU9yJ,EAAKm5D,aAAa25F,OAAOl0J,QAAgB,KACxE/rB,EAAKigL,OAASzrM,KAAK8/L,UACnB,IAAI5mD,EAAmB,mBACvBl5I,KAAK8/L,UAAU,GAAK5mD,IAAoB,EACxCl5I,KAAK4kM,yBACL5kM,KAAK8/L,UAAUh0K,SAAS9rB,KAAKyrM,QAC7B,eAAiBzrM,KAAK27B,OAAOxyB,QAASnJ,KAAK8/L,UAAU32L,QAAQie,eACzDuxB,EAAKyvD,kBACLpoG,KAAK8/L,UAAUjqL,MAAK,IAG5Bs1P,EAAiBjlQ,UAAUu+L,cAAgB,WACvC,eAAgBzkM,KAAK27B,SAEzBwvO,EAAiBjlQ,UAAU0+L,uBAAyB,WAChD,IAAIx7L,EAAQpJ,KACRA,KAAK27B,OAAOysE,mBACRpoG,KAAK27B,OAAOiwO,oBACZ5rQ,KAAK8/L,UAAUx5L,OAAStG,KAAK27B,OAAOiwO,mBAExC5rQ,KAAK8/L,UAAUliL,QAAU,CAAC,IAC1B5d,KAAK8/L,UAAU7sF,eAAgB,EAC/BjzG,KAAK8/L,UAAUxtK,SAAU,EACzBtyB,KAAK8/L,UAAU10L,MAAQ,OACvBpL,KAAK8/L,UAAUt0L,KAAO,WAClBpC,EAAM02L,UAAU32L,QAAQwD,MAAMmmI,UAAY,UAItDq4H,EAAiBjlQ,UAAUqgM,SAAW,SAAUxzL,GACxC/S,KAAKmgB,KAAKC,YAAY,gBAAgBkH,gBAAkBvU,EAAEzM,OAAOg6D,UAAUnuD,OAAOmV,cAClFtnB,KAAKmzG,cAGLnzG,KAAK27B,OAAO65B,WAGpB21M,EAAiBjlQ,UAAUitG,YAAc,WACrCnzG,KAAK27B,OAAOutH,aAGhBiiH,EAAiBjlQ,UAAUgS,QAAU,SAAUsT,GAE3C,IADA,IAAIqgP,EAAsB,CAAC,WAAY,iBAAkB,kBAChD9kQ,EAAI,EAAGA,EAAI8kQ,EAAoBnlQ,OAAQK,IAC5C,GAAI/G,KAAK27B,OAAOm2E,aAAa+5J,EAAoB9mQ,SAASgC,EAAEuQ,WAAY,MAAO,CAC3E,IAAIw0P,EAAeD,EAAoB9mQ,SAASgC,EAAEuQ,WAAY,KAAKsO,OAAO,GAAGy1C,cACvEwwM,EAAoB9mQ,SAASgC,EAAEuQ,WAAY,KAAKhE,MAAM,GACxDy3P,EAAiB/qQ,KAAK27B,OAAOxyB,QAAQ+H,GAAK,eAAiB46P,EAC/D,gBAAqBf,EAAgBe,EAAc9rQ,KAAK27B,OAAOm2E,cAGvE9xG,KAAK27B,OAAOrc,OAAO,QAAoB,IACvCtf,KAAK27B,OAAOqvE,QAAS,EACrBhrG,KAAK27B,OAAOrc,OAAO,QAAuB,IACtCtf,KAAKyrM,SAAWzrM,KAAK8/L,UAAUjzJ,cAC/B7sC,KAAK8/L,UAAU5nL,UACf,gBAAOlY,KAAKyrM,UAGpB0/D,EAAiBjlQ,UAAUulQ,6BAA+B,SAAUM,EAAYvgP,GAC5E,IAAIwgP,EAAUhsQ,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,WAAayhQ,IACrEvE,EAAY,eAAO,GAAIh8O,EAAKs9H,QAAS,CAAE58C,OAAQlsG,KAAKgrG,SAAU,GAC9Dy+J,EAAazpQ,KAAK27B,OAAOxyB,QAAQ+H,GAAK,eAAiB66P,EAI3D,OAHA,eAAeC,GAAyB,mBAAfD,EAAkC/rQ,KAAK27B,OAAO6pN,wBACnExlP,KAAK27B,OAAO+pN,yBAAyB8hB,EAAWxnQ,KAAK27B,OAAQ,eAAiBowO,EAAYtC,IAC9F,gBAAqBA,EAAYsC,EAAY/rQ,KAAK27B,OAAOm2E,cAClDk6J,GAEXb,EAAiBjlQ,UAAUskQ,eAAiB,SAAU/nM,EAAUj3C,GAC5D,IAAIpiB,EAAQpJ,KACR24C,EAAO34C,KAAK27B,OACZ2wE,EAAMtsG,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAWtK,KAAKgrG,OAAS,OAAqB,kBACvF9jC,EAAO17C,EAAK07C,KACZlnE,KAAK27B,OAAOtxB,cAAc,OAAQ,CAAE6G,GAAIynC,EAAKxvC,QAAQ+H,GAAK,WAAY5G,UAAW,eACrF,GAAItK,KAAK27B,OAAOm2E,aAAaxhE,SAAU,CACnC,IAAIy6N,EAAiB/qQ,KAAK27B,OAAOxyB,QAAQ+H,GAAK,uBAC1Cs2P,EAAY,eAAO,GAAIh8O,EAAKs9H,QAAS,CAAE58C,OAAQlsG,KAAKgrG,SAAU,GAC9DizF,EAAkBj+L,KAAK27B,OAAO5tB,SAA0D,kBAAvC/N,KAAK27B,OAAOm2E,aAAqB,SAClFosF,EAAel+L,KAAK27B,OAAOs2I,eAAiBjyK,KAAK27B,OAAOs2I,cAAcksB,eACtEn+L,KAAK27B,OAAOs2I,cAAcksB,cAAcpwL,QACxCkwL,GAAmBC,GACnBl+L,KAAK27B,OAAOgpE,iBAAZ3kG,CAA8BwnQ,EAAWxnQ,KAAK27B,OAAQ,uBAAwBovO,EAAgB,KAAM,KAAM7jM,GAC1GlnE,KAAK27B,OAAOgsH,mBAGZ,eAAezgF,EAAMlnE,KAAK27B,OAAOgpE,iBAAZ3kG,CAA8BwnQ,EAAWxnQ,KAAK27B,OAAQ,uBAAwBovO,IAEvG,IAAIkB,EAAW,WAEX,IADA,IAAI3uO,EAAUl0B,EAAMuyB,OAAOi0B,aAClB7oD,EAAI,EAAGA,EAAIu2B,EAAQ52B,OAAQK,IAC5Bu2B,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6oN,kBACpC/2N,EAAMuyB,OAAOqtH,WAAWkjH,QAAQ5+M,MAAMhwB,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6gC,OACtE7a,EAAQv4B,SAASgC,EAAEuQ,WAAY,KAAK6oN,kBAMpD,OAFA,gBAAqB4qC,EAAgB,WAAY/qQ,KAAK27B,OAAOm2E,cAAc,EAAMm6J,GACjF3/J,EAAI9hG,YAAY08D,GACTolC,EAKX,IAHA,IAAIlyC,EAAQp6D,KAAK27B,OAAOtxB,cAAc,QAAS,CAAEC,UAAW,OAAgBsK,MAAO,CAAEsiN,YAAa,MAAOriN,KAAM,UAC3GopF,EAAQj+F,KAAK27B,OAAOtxB,cAAc,OAAgB,CAAEuK,MAAO,CAAEC,KAAM,cACnEw7C,EAAO1X,EAAKiX,aACP7oD,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IAC7B,KAAI/G,KAAK27B,OAAOqtH,WAAWmjH,qBAAqB97M,EAAKtrD,SAASgC,EAAEuQ,WAAY,OAAS+4C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK+tF,UAC/Gh1C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKiuF,kBAA8D,aAA1Cl1C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKlD,MAD7F,CAIA,IAAIsvB,EAAK1jC,KAAK27B,OAAOtxB,cAAc,KAAM,CAAEuK,MAAO,CAAEC,KAAM,SACtDu3P,EAAWpsQ,KAAK27B,OAAOtxB,cAAc,KAAM,CAC3CC,UAAW,OAAkBsK,MAAO,CAChCjI,MAAO,eAAiB3M,KAAK27B,OAAOpwB,UAAY,QAAU,QAAU,kBAG5Ek3D,EAASpS,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKijC,KAAKvvC,UAAUC,OAAO,WAChEmhQ,EAAS5hQ,YAAYi4D,EAASpS,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKijC,MAC/D7W,EAAGl5B,YAAY4hQ,GACfnuK,EAAMzzF,YAAYk5B,GAKtB,OAHA02B,EAAM5vD,YAAYyzF,GAClB/2B,EAAK18D,YAAY4vD,GACjBkyC,EAAI9hG,YAAY08D,GACTolC,GAEX6+J,EAAiBjlQ,UAAUq1E,oBAAsB,WACzCv7E,KAAK27B,OAAOkR,cAGhB7sC,KAAK27B,OAAO8e,IAAI,QAAsBz6C,KAAKkY,SAC3ClY,KAAK27B,OAAO8e,IAAI,QAAgBz6C,KAAKkY,WAElCizP,EA5N0B,G,YCGjC,EAA4B,WAO5B,SAASkB,EAAW1wO,EAAQga,GAExB31C,KAAK+3C,SAAW,CACZ,OAAU,EACV,OAAU,EAAkB,MAAS,EAAiB,OAAU,GAEpE/3C,KAAK27B,OAASA,EACd37B,KAAK21C,eAAiBA,EACtB31C,KAAKigC,SAAW,IAAIjgC,KAAK+3C,SAAS/3C,KAAK27B,OAAOm2E,aAAap5E,MAAMiD,EAAQga,GACzE31C,KAAKwlB,MAAQmwB,EAAe0yG,WAAW,SA2K3C,OAzKAgkH,EAAWnmQ,UAAUokQ,OAAS,SAAU9+O,GACpCxrB,KAAKigC,SAASqqO,OAAOtqQ,KAAKssQ,gBAAgB9gP,GAAOA,GACjDxrB,KAAKusQ,cAAc/gP,IAEvB6gP,EAAWnmQ,UAAUmvD,OAAS,SAAU7pC,GACpCxrB,KAAKigC,SAASo1B,OAAOr1D,KAAKssQ,gBAAgB9gP,GAAOA,GACjD,IAAIq/O,EAAyBr/O,EAAKq/O,uBAC7BA,IACD7qQ,KAAK27B,OAAOrc,OAAO,OAAwBkM,GAC3CxrB,KAAKusQ,cAAc/gP,KAG3B6gP,EAAWnmQ,UAAUqmQ,cAAgB,SAAU/gP,GAS3C,IARA,IACIrO,EACAuyF,EAFA/2D,EAAO34C,KAAK27B,OAIZurC,EAAkC,WAA3BvuB,EAAKm5D,aAAap5E,KACzB,gBAAO,IAAMigB,EAAKxvC,QAAQ+H,GAAK,kCAAmCsC,UAClEmlC,EAAKxvC,QAAQ0U,uBAAuB,cAAc,GAClDwyC,EAAkC,UAA3B1X,EAAKm5D,aAAap5E,KAAmBigB,EAAKiX,aAAe,CAACjX,EAAK4Y,iBAAiB/lC,EAAKgmC,aACvF/9C,EAAK,EAAGuwI,EAAS3zF,EAAM58C,EAAKuwI,EAAOt9I,OAAQ+M,IAAM,CACtD,IAAIs+C,EAAMiyF,EAAOvwI,GACjB,IAAIzT,KAAK27B,OAAOm2E,aAAaxhE,UAAa,eAAkByhB,EAAI5Z,QAWhE,IAAIn4C,KAAK27B,OAAOqtH,WAAWmjH,qBAAqBp6M,KAAQA,EAAIszC,SAA5D,CAIStzC,EAAIopH,cAAcppH,EAAI5Z,MAAO3sB,EAAKs9H,QAAS/2F,GACpD29C,EAAOxoC,EAAKp1D,cAAc,iBAAmBigD,EAAIxX,IAAM,KACvD,IAAI2O,EAAO6I,EAAI/Z,KAAK+K,MACf,eAAkB2sD,KACC,kBAATxmD,GACPA,EAAO,eAAUA,EAAM98C,QACvB88C,EAAK,CACD4/F,QAASt9H,EAAKs9H,QAAS3/I,QAASumG,EAAMnzE,OAAQw1B,EAAK1b,YAAa7qB,EAAK6qB,YAAa7Z,IAAKhR,EAAKgR,IAC5F63B,eAAgBtC,EAAIK,mBAAqB,eAAUL,EAAI5Z,MAAO3sB,EAAK6oC,mBAIvEtC,EAAI/Z,KAAK+K,MAAM,CACX+lG,QAASt9H,EAAKs9H,QAAS3/I,QAASumG,EAAMnzE,OAAQw1B,EAAK1b,YAAa7qB,EAAK6qB,YAAa7Z,IAAKhR,EAAKgR,IAC5F63B,eAAgBtC,EAAIK,mBAAqB,eAAUL,EAAI5Z,MAAO3sB,EAAK6oC,kBAGtEl3C,GAAcuyF,EAAKp/F,aAAa,aAAgB,gBAAao/F,EAAM,yBACpE1vG,KAAKwsQ,aAAa98J,EAAMlkF,EAAKpX,MAC7B+I,GAAY,SAlCpB,CACI,IAAI4mM,EAAW,eAAO,GAAIv4L,GAC1Bu4L,EAAS56M,QAAU+9D,EAAKp1D,cAAc,SAAW,eAAkBigD,EAAI5Z,OAAS,KAClD,kBAAnB4Z,EAAI/Z,KAAK+K,MAChB,eAAUgP,EAAI/Z,KAAK+K,MAAO32C,OAA1B,CAAkC23M,GAGlChyJ,EAAI/Z,KAAK+K,MAAMghK,MAiC/BsoD,EAAWnmQ,UAAUsmQ,aAAe,SAAUp+H,EAAMh6H,GAChD,IAAIuzM,EAAS3nN,KAAK27B,OAAOxyB,QAAQ2I,cAAc,uBAI/C,IAHK,eAAkB61M,IAAWA,EAAO9nH,oBACrC8nH,EAAO9nH,mBAAmB70F,UAAU0G,IAAI,WAEN,UAAlC1R,KAAK27B,OAAOm2E,aAAap5E,KACzB14B,KAAKwlB,MAAMqgI,QAAQ,CAAEv/I,OAAQ,eAAQ8nI,EAAM,QAAS,OAEnD,CACD,IAAIq+H,GAAWzsQ,KAAK27B,OAAOmd,uBAAwB94C,KAAK27B,OAAO8sE,4BAAiE,WAAlCzoG,KAAK27B,OAAOm2E,aAAap5E,KACnH+zO,IAAazsQ,KAAK27B,OAAOmd,sBAAwB94C,KAAK27B,OAAO8sE,6BAA2E,WAA5CzoG,KAAK27B,OAAOm2E,aAAay4J,gBAClH,gBAAan8H,EAAM,QACtBA,EAAK5oH,QAIL4oH,EAAK5oH,MAAM,CAAEknP,eAAe,IAGhCt+H,EAAKpjI,UAAUkB,SAAS,kBACxBkiI,EAAK26C,kBAAkB36C,EAAKjwH,MAAMzX,OAAQ0nI,EAAKjwH,MAAMzX,SAG7D2lQ,EAAWnmQ,UAAUomQ,gBAAkB,SAAU9gP,GAC7C,IAAImtB,EAAO34C,KAAK27B,OACZ8mC,EAAW,GACXpS,EAAkC,UAA3B1X,EAAKm5D,aAAap5E,KAAmBigB,EAAKiX,aAAe,CAACjX,EAAK4Y,iBAAiB/lC,EAAKgmC,aAIhG,GAHIhmC,EAAKq/O,yBACLx6M,EAAOrwD,KAAK27B,OAAOymH,aAEnBpiJ,KAAK27B,OAAOm2E,aAAaxhE,SACzB,MAAO,GAEX,IAAK,IAAIvpC,EAAI,EAAG2hB,EAAM2nC,EAAK3pD,OAAQK,EAAI2hB,EAAK3hB,IAAK,CAC7C,IAAIgrD,EAAM1B,EAAKtrD,SAASgC,EAAEuQ,WAAY,KACtC,GAAIy6C,EAAIszC,UAAYtzC,EAAIwzC,iBAAxB,CACI,IAAIg/G,EAAmBvkN,KAAK21C,eAAe0yG,WAAW,uBAClD5hI,EAAQ,IAAI,OAAkBzmB,KAAK27B,QACnC+oL,EAAeH,EAAiBI,gBAAgB,OAASz8D,eACzD14C,EAAQ/oF,EAAM4nF,aAAa7iF,EAAKs9H,SAAS,GAAGt5C,MAC5CE,EAAOF,EAAMp2E,QAAO,SAAUs2E,GAAQ,OAAOA,EAAKw6J,SAClDp8D,EAAK4W,EAAarrM,OAAOq2F,EAAK3qG,SAASgC,EAAEuQ,WAAY,KAAMkU,EAAKs9H,QAAS,CAAE,MAASt9H,EAAKgR,IAAMhR,EAAKgR,IAAIlsB,aAAa,QAAyB,GAAKtQ,KAAK27B,OAAOmd,sBAC/JwzD,EAAMwhG,EAAG5mL,kBACbolF,EAAI/7F,aAAa,YAAau9L,EAAGx9L,aAAa,cAC9CmyD,EAAS1Q,EAAIxX,KAAO+xD,MATxB,CAYA,GAAiB,aAAbv6C,EAAI39C,MAAuBoX,EAAKs9H,QAAQ/2F,EAAI5Z,iBAAkB95B,KAAM,CACpE,IAAI48G,EAAYzvG,EAAKs9H,QAAQ/2F,EAAI5Z,OACjC3sB,EAAKs9H,QAAQ/2F,EAAI5Z,OAAS8iF,EAAUp8G,cAAgB,IAAM,gBAAQo8G,EAAUn8D,WAAa,GAAK,IAAM,gBAAQm8D,EAAUt8D,WAE1H,IAAIxgD,EAAS4zC,EAAIopH,cAAcppH,EAAI5Z,MAAO3sB,EAAKs9H,QAAS/2F,GACpD46M,EAAQ,CAAEpwO,OAAQw1B,EAAK5zC,MAAOA,EAAO/J,KAAMoX,EAAK6qB,YAAa9d,KAAM/M,EAAKs9H,SACxE5/F,EAAO6I,EAAI/Z,KAAK7xC,OAChBtB,OAAQ,EACZ,GAAIktD,EAAI6zC,aAAc,CAClB/gG,EAAQ7E,KAAK27B,OAAOtxB,cAAc,OAAQ,CAAEuK,MAAO,CAAE,eAAgBm9C,EAAIxX,OACzE,IAAImtG,EAAS1nJ,KAAK27B,OAAOxyB,QAAQ+H,GAAK6gD,EAAIxX,IAAM,eAC5ChI,EAAW,eAAgB,GAAI/mB,EAAKs9H,QAAS,CAAEvsH,OAAQw1B,IACvDksI,EAAkBj+L,KAAK27B,OAAO5tB,SAAyC,kBAAtBgkD,EAAgB,aACjEmsI,EAAel+L,KAAK27B,OAAOs2I,eAAiBjyK,KAAK27B,OAAOs2I,cAAcksB,eACtEn+L,KAAK27B,OAAOs2I,cAAcksB,cAAcpwL,QAC5C,GAAIkwL,GAAmBC,EACnBnsI,EAAI4yC,iBAAJ5yC,CAAsB,eAAO,CAAE,MAASvmC,EAAKiV,UAAY8R,GAAWvyC,KAAK27B,OAAQ,eAAgB+rH,EAAQ,KAAM,KAAM7iJ,GACrH7E,KAAK27B,OAAOgsH,sBAEX,CACD,IAAIr3G,EAAWyhB,EAAI4yC,iBAAJ5yC,CAAsB,eAAO,CAAE,MAASvmC,EAAKiV,UAAY8R,GAAWvyC,KAAK27B,OAAQ,eAAgB+rH,GAChH,eAAe7iJ,EAAOyrC,QAGzB,CAQD,GAPoB,kBAAT4Y,GACPA,EAAO,eAAUA,EAAM98C,QACvBvH,EAAQqkD,EAAKyjN,IAGb9nQ,EAAQktD,EAAI/Z,KAAK7xC,OAAOwmQ,GAEP,kBAAV9nQ,EAAoB,CACvBynG,EAAMtsG,KAAK27B,OAAOtxB,cAAc,OACpCiiG,EAAI57F,UAAY7L,EAChBA,EAAQynG,EAAI19D,WAEhB,IAAIg+N,EAA4B,UAAlB/nQ,EAAMyQ,SAAuBzQ,EAAMsjB,iBAAiB,SAASzhB,OACvEskM,EAAmB,eAAkBj5I,EAAI5Z,OAC7C,eAAWy0N,EAAU/nQ,EAAMiN,cAAc,SAAWjN,EAAO,CACvDP,KAAM0mM,EAAkB,eAAgBj5I,EAAIxX,IAC5CrpC,GAAIynC,EAAKxvC,QAAQ+H,GAAK85L,IAE1B,eAAUnmM,EAAO,CAAC,UAAW,WAAY,IACnB,UAAlBktD,EAAIuzC,WACJzgG,EAAMmG,UAAU0G,IAAI,cAEnBqgD,EAAIlC,cAAgBkC,EAAI86M,aAAoC,cAArBrhP,EAAK6qB,aAC5C0b,EAAI86M,YAAmC,QAArBrhP,EAAK6qB,cACxBxxC,EAAM0L,aAAa,WAAY,IAGvCkyD,EAAS1Q,EAAIxX,KAAO11C,GAExB,OAAO49D,GAEX4pM,EAAWnmQ,UAAUgS,QAAU,WAC3BlY,KAAKigC,SAASs7C,uBAEX8wL,EA3LoB,G,YCT3B,EAA8B,WAC9B,SAASS,EAAanxO,GAClB37B,KAAK27B,OAASA,EAgBlB,OAdAmxO,EAAa5mQ,UAAUC,OAAS,SAAUqlB,GACtC,OAAO,eAAkBxrB,KAAK27B,OAAQnQ,EAAK+Q,OAAQ,UAAW,CAAEnoB,KAAM,UAE1E04P,EAAa5mQ,UAAU+gH,KAAO,SAAU99G,GACpC,OAAOA,EAAQ8gI,cAAc,GAAG9rH,OAEpC2uP,EAAa5mQ,UAAUgS,QAAU,WACzBlY,KAAKm7D,MAAQn7D,KAAKm7D,IAAItuB,cAClB7sC,KAAK+sQ,oBACL/sQ,KAAK+sQ,qBAET/sQ,KAAKm7D,IAAIjjD,YAGV40P,EAlBsB,GCN7BvnQ,EAAwC,WACxC,IAAIC,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAwBxC,EAAiC,SAAU4C,GAE3C,SAASokQ,IACL,IAAI5jQ,EAAmB,OAAXR,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAEhE,OADAoJ,EAAM6jQ,cAAgB,CAAC,wBAAyB,YACzC7jQ,EAgEX,OApEA7D,EAAUynQ,EAAiBpkQ,GAM3BokQ,EAAgB9mQ,UAAUC,OAAS,SAAUqlB,GACzC,IAAIumC,EAAMvmC,EAAK+Q,OACX2wO,EAAa,qBAKjB,MAJiB,aAAbn7M,EAAI39C,OACJ84P,EAAa,yCAEjBltQ,KAAK+sQ,mBAAqB/sQ,KAAKu7E,oBACxB,eAAkBv7E,KAAK27B,OAAQnQ,EAAK+Q,OAAQ2wO,EAAY,CAAE94P,KAAM,WAAY+J,MAAOqN,EAAKrN,SAEnG6uP,EAAgB9mQ,UAAU+gH,KAAO,SAAU99G,GACvC,OAAOA,EAAQ21F,SAEnBkuK,EAAgB9mQ,UAAU68C,MAAQ,SAAUv3B,GACxC,IAAI2hP,EACAC,EAOJ,GANK,eAAkB5hP,EAAKgR,OACxB2wO,EAAe3hP,EAAKgR,IAAI1qB,cAAc,wBAEtC,eAAU0Z,EAAK+Q,OAAO4b,MAAO3sB,EAAKs9H,WAClCskH,EAAWt3M,KAAKjgC,MAAM,eAAUrK,EAAK+Q,OAAO4b,MAAO3sB,EAAKs9H,SAASxxI,WAAWgQ,iBAE3E,eAAkB6lP,IAAsC,aAArB3hP,EAAK+Q,OAAOnoB,KAAqB,CAGrE,GAFApU,KAAK+3C,SAAW/3C,KAAK27B,OAAOm2E,aAAap5E,KACzC14B,KAAKqtQ,QAAU7hP,EAAKgR,IACK,QAArBhR,EAAK6qB,YAAuB,CAC5B,IAAI7Z,EAAMx8B,KAAK27B,OAAO8sH,oBAAoBj9H,EAAKgR,IAAIlsB,aAAa,aAChE88P,IAAW5wO,GAAMA,EAAIgR,WAEzB,OAAuB3kC,WAAM,EAAQ,CAAC,GAAGyK,MAAMjK,KAAKmiB,EAAKgR,IAAI3e,uBAAuB,SAAoBuvP,GAAU9oO,OAAOtkC,KAAKitQ,gBAElIjtQ,KAAKm7D,IAAM,IAAI,OAAS,eAAO,CAC3BmX,MAAyC,WAAlCtyE,KAAK27B,OAAOm2E,aAAap5E,KAAoB,IAAMlN,EAAK+Q,OAAO6T,WACtE0uD,QAASsuK,EACTtvP,UAAW,gBAAW0N,EAAK+Q,OAAQ/Q,EAAK6qB,YAAa7qB,EAAKriB,SAAUoC,UAAWvL,KAAK27B,OAAOpwB,UAC3F8E,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,IACzDmb,EAAK+Q,OAAOyb,KAAKT,SACpBv3C,KAAK4sC,mBACL5sC,KAAKm7D,IAAIrvC,SAASN,EAAKriB,UAE3B6jQ,EAAgB9mQ,UAAU0mC,iBAAmB,WACzC5sC,KAAKstQ,SAAWttQ,KAAKutQ,eAAe7hQ,KAAK1L,MACzCA,KAAKm7D,IAAIvuB,iBAAiB,OAAiB5sC,KAAKstQ,WAEpDN,EAAgB9mQ,UAAUq1E,oBAAsB,WACxCv7E,KAAKm7D,IAAItuB,aAGb7sC,KAAKm7D,IAAIogB,oBAAoB,OAAiBv7E,KAAKstQ,WAEvDN,EAAgB9mQ,UAAUqnQ,eAAiB,SAAU/hP,GACjD,GAAIxrB,KAAKqtQ,SAA6B,WAAlBrtQ,KAAK+3C,SAAuB,CAC5C,IAAIrmC,GAAM,EACL8Z,EAAKszE,SAINptF,GAAM,EACN1R,KAAKqtQ,QAAQ98P,aAAa,gBAAiBmB,EAAI4F,aAJ/CtX,KAAKqtQ,QAAQ78P,gBAAgB,iBAMjC,OAAuB3H,WAAM,EAAQ,CAAC,GAAGyK,MAAMjK,KAAKrJ,KAAKqtQ,QAAQxvP,uBAAuB,SAAoBnM,GAAK4yB,OAAOtkC,KAAKitQ,kBAG9HD,EArEyB,CAsElC,G,gDC9FE,EAAwC,WACxC,IAAIxnQ,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GA0BxC,EAAkC,SAAU4C,GAE5C,SAAS4kQ,EAAiB7xO,GACtB,IAAIvyB,EAEJR,EAAOS,KAAKrJ,OAASA,KAIrB,OAHAoJ,EAAMuyB,OAASA,EACfvyB,EAAMivJ,MAAO,EACbjvJ,EAAM2jQ,mBAAqB3jQ,EAAMmyE,oBAC1BnyE,EAuGX,OA/GA,EAAUokQ,EAAkB5kQ,GAU5B4kQ,EAAiBtnQ,UAAU68C,MAAQ,SAAUv3B,GACzC,IAAIiiP,EAA6C,WAAlCztQ,KAAK27B,OAAOm2E,aAAap5E,KACxC14B,KAAKu8B,OAAS/Q,EAAK+Q,OACnB,IAAIknO,EAAO,IAAI,OAAUj4O,EAAK+Q,OAAO4b,MAAO,WAAY,MAAM,GAAM,GAChEZ,EAAS,GACb,GAAI/rB,EAAK+Q,OAAOyb,KAAKT,OAEjB,IADA,IAAIz8B,EAAOpV,OAAOoV,KAAK0Q,EAAK+Q,OAAOyb,KAAKT,QAC/BxwC,EAAI,EAAGA,EAAI+T,EAAKpU,OAAQK,IAC7BwwC,EAAOz8B,EAAK/V,SAASgC,EAAEuQ,WAAY,MAA6C,UAArCwD,EAAK/V,SAASgC,EAAEuQ,WAAY,KACnEkU,EAAK+Q,OAAOyb,KAAKT,OAAOz8B,EAAK/V,SAASgC,EAAEuQ,WAAY,MAAMo4C,QAC1DlkC,EAAK+Q,OAAOyb,KAAKT,OAAOz8B,EAAK/V,SAASgC,EAAEuQ,WAAY,MAGhEtX,KAAKm7D,IAAM,IAAI,OAAa,eAAO,CAC/BhhC,WAAYn6B,KAAK27B,OAAOxB,sBAAsB,OAC1Cn6B,KAAK27B,OAAOxB,WAAa,IAAI,OAAYn6B,KAAK27B,OAAOxB,YACzDC,OAAO,IAAI,QAAQof,MAAMiqN,GAAMv1O,OAAO1C,EAAK+Q,OAAO4b,OAAQp6B,QAAS,gBAAWyN,EAAK+Q,OAAQ/Q,EAAK6qB,YAAa7qB,EAAKriB,SAClH8uC,OAAQ,CAAE95B,MAAOqN,EAAK+Q,OAAO4b,OAC7Bh6B,MAAO,eAAUqN,EAAK+Q,OAAO4b,MAAO3sB,EAAKs9H,SACzCv9I,UAAWvL,KAAK27B,OAAOpwB,UACvBmU,YAAa+tP,EAAW,GAAKjiP,EAAK+Q,OAAO6T,WAAYy3I,YAAa,QAClErqK,eAAgBiwP,EAAW,QAAU,SACrCnsE,UAAW,YACXjxL,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,KACxD1E,MAAO3L,KAAK0tQ,cAAchiQ,KAAK1L,OAChCu3C,IACCv3C,KAAK27B,OAAOmd,uBACRvB,EAAOpd,WACPn6B,KAAKm7D,IAAIhhC,WAAaod,EAAOpd,WAG7Bn6B,KAAKm7D,IAAIhhC,WAAa3O,EAAK+Q,OAAO61B,kBAAoB,CAAC5mC,EAAK6oC,eAAe,IAAM,CAAC7oC,EAAKs9H,UAG/F9oJ,KAAK4sC,mBACL5sC,KAAKm7D,IAAI/gC,MAAMmd,OAASv3C,KAAK27B,OAAOvB,MAAMmd,OAC1Cv3C,KAAKm7D,IAAIrvC,SAASN,EAAKriB,SAEvBqiB,EAAKriB,QAAQoH,aAAa,OAAQ,eAAkBib,EAAK+Q,OAAO4b,SAEpEq1N,EAAiBtnQ,UAAUwnQ,cAAgB,SAAUliP,GAC7CA,EAAKlX,OAA+B,WAAtBkX,EAAKlX,MAAM8R,SACzBpmB,KAAK27B,OAAOqtH,WAAW2kH,qBAAsB,IAGrDH,EAAiBtnQ,UAAU0mC,iBAAmB,WAC1C5sC,KAAK4tQ,UAAY5tQ,KAAK6tQ,gBAAgBniQ,KAAK1L,MAC3CA,KAAKu/L,OAASv/L,KAAKw/L,aAAa9zL,KAAK1L,MACrCA,KAAK8tQ,aAAe9tQ,KAAK+tQ,mBAAmBriQ,KAAK1L,MACjDA,KAAK6iM,WAAa7iM,KAAKguQ,iBAAiBtiQ,KAAK1L,MAC7CA,KAAKm7D,IAAIvuB,iBAAiB,OAAiB5sC,KAAK4tQ,WAChD5tQ,KAAKm7D,IAAIvuB,iBAAiB,OAAkB5sC,KAAKu/L,QACjDv/L,KAAKm7D,IAAIvuB,iBAAiB,OAAqB5sC,KAAK8tQ,cACpD9tQ,KAAKm7D,IAAIvuB,iBAAiB,OAAuB5sC,KAAK6iM,aAE1D2qE,EAAiBtnQ,UAAUq1E,oBAAsB,WACzCv7E,KAAKm7D,IAAItuB,cAGb7sC,KAAKm7D,IAAIogB,oBAAoB,OAAiBv7E,KAAK4tQ,WACnD5tQ,KAAKm7D,IAAIogB,oBAAoB,OAAkBv7E,KAAKu/L,QACpDv/L,KAAKm7D,IAAIogB,oBAAoB,OAAqBv7E,KAAK8tQ,cACvD9tQ,KAAKm7D,IAAIogB,oBAAoB,OAAuBv7E,KAAK6iM,cAG7D2qE,EAAiBtnQ,UAAU2nQ,gBAAkB,SAAU96P,GACnD/S,KAAKq4J,MAAO,GAEhBm1G,EAAiBtnQ,UAAU6nQ,mBAAqB,WACxC/tQ,KAAK27B,OAAOmd,uBACR94C,KAAKu8B,OAAOyb,KAAKT,QAAUv3C,KAAKu8B,OAAOyb,KAAKT,OAAOpd,WACnDn6B,KAAKm7D,IAAIhhC,WAAan6B,KAAKu8B,OAAOyb,KAAKT,OAAOpd,WAG9Cn6B,KAAKm7D,IAAIhhC,WAAcn6B,KAAKu8B,OAAO61B,kBAE7BpyD,KAAKu8B,OAAOpC,sBAAsB,OAChCn6B,KAAKu8B,OAAOpC,WAAa,IAAI,OAAYn6B,KAAKu8B,OAAOpC,YAHLn6B,KAAK27B,OAAOxB,sBAAsB,OACtFn6B,KAAK27B,OAAOxB,WAAa,IAAI,OAAYn6B,KAAK27B,OAAOxB,cAMrEqzO,EAAiBtnQ,UAAU8nQ,iBAAmB,SAAUj7P,GACpDA,EAAEhP,OAAS,OAASq1C,SAASrmC,EAAEhP,OAAQ/D,KAAKm7D,IAAIljB,OAAO95B,OAAO,IAC1Dne,KAAKq4J,OAAQr4J,KAAKu8B,OAAOpC,YAAgBn6B,KAAKu8B,OAAOyb,KAAKT,QAC1Dv3C,KAAKu8B,OAAOyb,KAAKT,OAAOuuD,eACpB,WAAY9lG,KAAKu8B,OAAOpC,WACxBn6B,KAAKu8B,OAAOpC,WAAWp2B,OAASgP,EAAEhP,OAE7B/D,KAAKu8B,OAAOpC,sBAAsB,SACvCn6B,KAAKu8B,OAAOpC,WAAWA,WAAW+0B,KAAOn8C,EAAEhP,SAGnD/D,KAAKq4J,MAAO,GAEhBm1G,EAAiBtnQ,UAAUs5L,aAAe,SAAUh0K,GAChD,IAAIyiP,EAAa,gBAAajuQ,KAAKm7D,IAAIhyD,QAAS,YAChD,GAAsC,WAAlCnJ,KAAK27B,OAAOm2E,aAAap5E,OAAsB,eAAkBu1O,GAAa,CAC9E,IAAIpuE,EAAS,gBAAO,IAAMouE,EAAW/8P,GAAIsC,UAAUy2H,cAAc,GACjEz+G,EAAKK,MAAM1iB,QAAQwD,MAAM6c,QAAUq2K,EAAOr2K,OAAS,GAAGlS,aAGvDk2P,EAhH0B,CAiHnC,G,YCnIE,EAAiC,WACjC,SAASU,EAAgBvyO,GACrB37B,KAAK27B,OAASA,EAwClB,OAtCAuyO,EAAgBhoQ,UAAUs8L,gBAAkB,SAAUh3K,GAClD,GAAqB,KAAjBA,EAAKtS,SAAmC,IAAjBsS,EAAKtS,QAAe,CAC3C,IAAIzG,EAAMe,SAASwR,YAAY,cAC/BvS,EAAIwS,UAAU,UAAU,GAAO,GAE/BjlB,KAAKklB,cAAczS,KAG3By7P,EAAgBhoQ,UAAUC,OAAS,SAAUqlB,GAEzC,OADAxrB,KAAKmuQ,UAAY,IAAI,OAAqBnuQ,KAAK27B,OAAOzb,QAC/C,eAAkBlgB,KAAK27B,OAAQnQ,EAAK+Q,OAAQ,UAAW,KAGlE2xO,EAAgBhoQ,UAAU+gH,KAAO,SAAU99G,GACvC,OAAOnJ,KAAKm7D,IAAIh9C,OAEpB+vP,EAAgBhoQ,UAAU68C,MAAQ,SAAUv3B,GACxC,IAAIumC,EAAMvmC,EAAK+Q,OACXkxO,EAA6C,WAAlCztQ,KAAK27B,OAAOm2E,aAAap5E,KACxC14B,KAAKm7D,IAAM,IAAI,OAAe,eAAO,CACjCh9C,MAAOzR,WAAW,eAAU8e,EAAK+Q,OAAO4b,MAAO3sB,EAAKs9H,UACpDv9I,UAAWvL,KAAK27B,OAAOpwB,UACvBmU,YAAa+tP,EAAW,GAAKjiP,EAAK+Q,OAAO6T,WACzCryB,QAAS,gBAAWyN,EAAK+Q,OAAQ/Q,EAAK6qB,YAAa7qB,EAAKriB,SACxDqU,eAAkD,WAAlCxd,KAAK27B,OAAOm2E,aAAap5E,KAAoB,QAAU,SACvExY,OAAQlgB,KAAK27B,OAAOzb,OACpB7P,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,MACzD0hD,EAAI/Z,KAAKT,SACZ/rB,EAAKriB,QAAQoH,aAAa,OAAQ,eAAkBib,EAAK+Q,OAAO4b,QAChEn4C,KAAKm7D,IAAIrvC,SAASN,EAAKriB,SACvBnJ,KAAKm7D,IAAIhyD,QAAQyjC,iBAAiB,UAAW5sC,KAAKwiM,kBAEtD0rE,EAAgBhoQ,UAAUgS,QAAU,WAC5BlY,KAAKm7D,MAAQn7D,KAAKm7D,IAAItuB,cACtB7sC,KAAKm7D,IAAIhyD,QAAQoyE,oBAAoB,UAAWv7E,KAAKwiM,iBACrDxiM,KAAKm7D,IAAIjjD,YAGVg2P,EA1CyB,G,YCRhC,EAAwC,WACxC,IAAI1oQ,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAsBxC,EAAiC,SAAU4C,GAE3C,SAASwlQ,IACL,OAAkB,OAAXxlQ,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAsC/D,OAxCA,EAAUouQ,EAAiBxlQ,GAI3BwlQ,EAAgBloQ,UAAUC,OAAS,SAAUqlB,GACzC,IAAIsD,EAAO,CACP1a,KAAM,OAAQ+J,MAAQ,eAAkBqN,EAAKrN,OAAsB,GAAbqN,EAAKrN,MAAYxR,MAAO,cAAgB6e,EAAK+Q,OAAO+oE,WAE9G,OAAO,eAAkBtlG,KAAK27B,OAAQnQ,EAAK+Q,OAAQ,gCAAiCzN,IAExFs/O,EAAgBloQ,UAAU+gH,KAAO,SAAU99G,GACvC,OAAOA,EAAQgV,OAEnBiwP,EAAgBloQ,UAAU68C,MAAQ,SAAUv3B,GACxC,IAAIumC,EAAMvmC,EAAK+Q,OACXkxO,EAA6C,WAAlCztQ,KAAK27B,OAAOm2E,aAAap5E,KACxC14B,KAAKm7D,IAAM,IAAI,OAAQ,eAAO,CAC1BhyD,QAASqiB,EAAKriB,QAASqU,eAAkD,WAAlCxd,KAAK27B,OAAOm2E,aAAap5E,KAAoB,QAAU,SAC9FntB,UAAWvL,KAAK27B,OAAOpwB,UAAWwS,QAAS,gBAAWyN,EAAK+Q,OAAQ/Q,EAAK6qB,YAAa7qB,EAAKriB,SAC1FuW,YAAa+tP,EAAW,GAAKjiP,EAAK+Q,OAAO6T,WACzC//B,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,IACzD0hD,EAAI/Z,KAAKT,SACZv3C,KAAKm7D,IAAIrvC,SAASN,EAAKriB,SACe,UAAlCnJ,KAAK27B,OAAOm2E,aAAap5E,MACzB14B,KAAKm7D,IAAIhyD,QAAQyjC,iBAAiB,UAAW5sC,KAAKwiM,kBAG1D4rE,EAAgBloQ,UAAUs8L,gBAAkB,SAAUh3K,GAClD,GAAiB,UAAbA,EAAK3nB,KAAgC,QAAb2nB,EAAK3nB,IAAe,CAC5C,IAAI4O,EAAM,IAAI47P,MAAM,SAAU,CAAEC,SAAS,EAAOC,YAAY,IAE5DvuQ,KAAKklB,cAAczS,KAG3B27P,EAAgBloQ,UAAUgS,QAAU,WAC5BlY,KAAKm7D,MAAQn7D,KAAKm7D,IAAItuB,cACtB7sC,KAAKm7D,IAAIhyD,QAAQoyE,oBAAoB,UAAWv7E,KAAKwiM,iBACrDxiM,KAAKm7D,IAAIjjD,YAGVk2P,EAzCyB,CA0ClC,G,YCnDE,EAA4B,WAC5B,SAASI,EAAW7yO,EAAQga,EAAgB1V,GACxCjgC,KAAKwrB,KAAO,GACZxrB,KAAKyuQ,mBAAqB,GAC1BzuQ,KAAK27B,OAASA,EACd37B,KAAKigC,SAAWA,EAChBjgC,KAAK21C,eAAiBA,EACtB31C,KAAK4sC,mBA8lBT,OA5lBA4hO,EAAWtoQ,UAAUi6D,aAAe,SAAUptD,GAC1C,IAAIzM,EAASyM,EAAEzM,OACXqyC,EAAO34C,KAAK27B,QACT,gBAAar1B,EAAQ,SACxB,gBAAa,gBAAaA,EAAQ,QAAuB,UAAU4K,KAAOynC,EAAKxvC,QAAQ+H,IAASynC,EAAKiwD,YAClG,gBAAatiG,EAAQ,WAA8B,gBAAaA,EAAQ,sBAC3EtG,KAAKygC,SAAW,gBAAan6B,EAAQ,QAC/BvB,SAASuB,EAAO8gB,cAAc9W,aAAa,QAAwB,KAAO,EAC5EqoC,EAAKqyD,QACLryD,EAAKqwG,WAAWxzF,YAI5Bg5M,EAAWtoQ,UAAU2nP,gBAAkB,SAAU96O,GACzC,gBAAaA,EAAEzM,OAAQ,SAAqBtG,KAAK27B,OAAOm2E,aAAa48J,qBACrE1uQ,KAAK27B,OAAOqtH,WAAWC,UAAU,gBAAal2I,EAAEzM,OAAQ,UAUhEkoQ,EAAWtoQ,UAAUyoQ,aAAe,SAAU57P,GAC1C/S,KAAK27B,OAAOqvE,QAAS,EACrB,IAAI5kF,EAAS,SACb,OAAQrT,EAAEsjC,aACN,IAAK,QACKr2C,KAAK27B,OAAOyoL,qBAA8D,aAAvCpkN,KAAK27B,OAAO4qL,kBAAkBnyM,OAC9DpU,KAAK27B,OAAOgyM,oBACM,SAAnB56N,EAAE,GAAKqT,IACPpmB,KAAK27B,OAAO0tH,UAAUt2I,EAAE,UAGhC/S,KAAK27B,OAAO9tB,QAAQ,OAAuB,eAAOkF,EAAG,CACjDsjC,YAAa,OACbjiC,KAAM,UAEV,MACJ,IAAK,SACDpU,KAAK27B,OAAO9tB,QAAQ,OAAuB,eAAOkF,EAAG,CACjDsjC,YAAa,SACbjiC,KAAM,UAELpU,KAAK27B,OAAOyoL,qBACbpkN,KAAK27B,OAAO0tH,UAAUrpJ,KAAK4uQ,cAE/B,QAGZJ,EAAWtoQ,UAAU2oQ,YAAc,SAAUC,EAAY/yF,EAAQgzF,GAG7D,IAFA,IAAIC,EAAchvQ,KAAK27B,OAAO24B,0BAC1B26M,EAAmB,GACdloQ,EAAI,EAAGA,EAAIioQ,EAAYtoQ,OAAQK,IACpCkoQ,EAAiBh9P,KAAK,eAAU+8P,EAAYjqQ,SAASgC,EAAEuQ,WAAY,KAAMw3P,IAE7E,IAAItjP,EAAO,CACP0jP,WAAYF,EAAatD,gBAAiBuD,EAAkB54N,YAAa,YACzEyyG,QAASgmH,EAAYruO,SAAUzgC,KAAKygC,SAAUrsB,KAAM,OAAQC,QAAQ,EACpEggD,eAAgB0nH,GAAUA,EAAO1nH,eAAgB/tD,YAAQ6K,EAAW49P,SAAUA,GAElF,OAAOvjP,GAEXgjP,EAAWtoQ,UAAU+iJ,UAAY,SAAUvlH,GACvC,IAAIt6B,EAAQpJ,KACR24C,EAAO34C,KAAK27B,OAEhB,GADA37B,KAAKygC,SAAWzgC,KAAK4uQ,aAAe7pQ,SAAS2+B,EAAGpzB,aAAa,QAAwB,IACjFqoC,EAAKG,sBAAwBH,EAAK8vD,4BAA8B9vD,EAAK+X,wBAAyB,CAC9F,IAAIqJ,EAAW,yBAA2B/5D,KAAKygC,SAAW,KACtD0uO,EAAanvQ,KAAK27B,OAAOxyB,QAAQ2I,cAAcioD,GACnD,IAAKo1M,EACD,OAGR,IAAIp8P,EAAI,CAAEwlB,UAAMpnB,EAAWkB,MAAOrS,KAAKygC,SAAUsuO,UAAU,GAE3D,GADA/uQ,KAAK27B,OAAOrc,OAAO,QAAqCvM,GACpD,gBAAgB4lC,GAAO,CACvB,IAAIy2N,EAAOz2N,EAAK8vG,oBAAoB/kH,EAAGpzB,aAAa,aACpDtQ,KAAKs1D,aAAe85M,EAAK72O,UAEpBv4B,KAAK27B,OAAOmd,sBAAwB94C,KAAK27B,OAAO8sE,4BACpDzoG,KAAK27B,OAAO+0B,0BAA4B1wD,KAAKs1D,aAC9Ct1D,KAAKs1D,aAAeviD,EAAEwlB,KAEhBv4B,KAAK27B,OAAOmd,uBAClB94C,KAAKs1D,aAAe,eAAO,GAAI,GAAI3c,EAAKi/H,wBAAwB53K,KAAKygC,WAAW,IAEpF,IAAIquO,EAAa,eAAO,GAAI,GAAI/7P,EAAEwlB,MAAQv4B,KAAKs1D,cAAc,GAC7Dt1D,KAAKu6C,IAAM7W,EAAGpzB,aAAa,YAC3B,IAAIyrK,EAASpjI,EAAK8vG,oBAAoBzoJ,KAAKu6C,KACvC/uB,EAAOxrB,KAAK6uQ,YAAYC,EAAY/yF,EAAQhpK,EAAEg8P,UAClDvjP,EAAKgR,IAAMkH,EACNlY,EAAKujP,SAYN/uQ,KAAKqvQ,kBAAkB7jP,EAAMkY,IAX7B1jC,KAAK27B,OAAOrc,OAAO,QAAoC,CAAEi7B,IAAKv6C,KAAKu6C,IAAK+0N,SAAUtvQ,KAAKs1D,aAAci6M,YAAavvQ,KAAK6uQ,YAAYnjQ,KAAK1L,MAAOigC,SAAUjgC,KAAKigC,WAC9J0Y,EAAK9qC,QAAQ,OAAkB2d,GAAM,SAAUgkP,GAC3CA,EAAcp7P,KAAO,cACrBukC,EAAK9qC,QAAQ,OAAoB2hQ,GAAe,SAAUC,GACjDA,EAASp7P,QACVjL,EAAMimQ,kBAAkBI,EAAU/rO,WAStD8qO,EAAWtoQ,UAAUmpQ,kBAAoB,SAAUI,EAAU/rO,GACzD,IAAIiV,EAAO34C,KAAK27B,OAChBgd,EAAKqyD,QAAS,EACdykK,EAASjzO,IAAMizO,EAASjzO,IAAMizO,EAASjzO,IAAMkH,EACd,WAA3BiV,EAAKm5D,aAAap5E,MAClBigB,EAAKywG,iBAEsB,WAA3BzwG,EAAKm5D,aAAap5E,MAAqBigB,EAAK2jC,kBAC5C3jC,EAAK2jC,gBAAgB8kI,cAAe,EACpCquD,EAASjzO,IAAIxxB,UAAU0G,IAAI,iBAE/B1R,KAAKigC,SAASo1B,OAAOo6M,GACrBzvQ,KAAKu6C,IAAM7W,EAAGpzB,aAAa,YAC3BqoC,EAAKqwG,WAAW0mH,sBAChBD,EAASr7P,KAAO,iBAChBukC,EAAK9qC,QAAQ,OAAuB4hQ,GAChC92N,EAAKm5D,aAAaxhE,UAClBqI,EAAKqwG,WAAW0mH,yBAAoBv+P,EAAWs+P,EAASvoM,KAAK+iE,cAAc,GAAG38E,OAElFttD,KAAKwrB,KAAOikP,EACRzvQ,KAAK27B,OAAOqrL,eACZhnN,KAAK27B,OAAOrc,OAAO,QAAqB,CAAEwyL,KAAM,cAGxD08D,EAAWtoQ,UAAUsjP,UAAY,SAAUn3O,EAAOkmB,GAC9C,IAAInvB,EAAQpJ,KACR24C,EAAO34C,KAAK27B,OAChB37B,KAAK4uQ,aAAev8P,EACpB,IAAImZ,EAAO,CACP6qB,YAAa,OAAQjwB,OAAQ,OAAQhS,KAAM,OAAoBmkB,KAAMA,EAAMlkB,QAAQ,EACnFihD,aAAc3c,EAAKi/H,wBAAwB7yK,SAASsN,EAAMiF,WAAY,KACtEklB,IAAKmc,EAAK+tL,cAAcr0N,IAG5B,GADAsmC,EAAKinK,cACDjnK,EAAK+X,wBAAyB,CAC9B1wD,KAAKu6C,IAAM/uB,EAAKgR,IAAIlsB,aAAa,YACjC,IAAIsoE,EAAU7zE,SAASymB,EAAKgR,IAAIlsB,aAAa,iBAAkB,IAC/DtQ,KAAK27B,OAAOrc,OAAO,QAAoC,CAAEjN,MAAOumE,IAEpEjgC,EAAKr5B,OAAO,QAAmBkM,GAC3BA,EAAKorB,QACLprB,EAAKorB,QAAQlc,MAAK,WAAc,OAAOie,EAAK39B,aAAcq9B,OAAM,SAAUtlC,GAAK,OAAO3J,EAAMumQ,OAAO58P,MAG9F4lC,EAAK+X,yBACN/X,EAAK39B,WAIjBwzP,EAAWtoQ,UAAUooP,iBAAmB,WACpC,IAAI31M,EAAO34C,KAAK27B,OACZm3L,EAAUn6K,EAAKqwG,WAAWslG,mBAC1BshB,EAAiB,CACjBN,SAAUtvQ,KAAKs1D,aAAcw9J,SAAS,EAAM+8C,QAAS7vQ,KAAK4uQ,aAAckB,OAAQ9vQ,KAAK+vQ,eAGzF,OADAp3N,EAAKr5B,OAAO,QAA4BswP,GAChC98C,GAAW88C,EAAe98C,SAEtC07C,EAAWtoQ,UAAUsvD,QAAU,WAC3B,IAAIpsD,EAAQpJ,KACR24C,EAAO34C,KAAK27B,OAChB,GAAK37B,KAAK27B,OAAOqvE,QAAWhrG,KAAKsuP,mBAAjC,CAGA,IAAIwgB,EAAa,eAAO,GAAI,GAAI9uQ,KAAKs1D,cAAc,GAC/C9pC,EAAO,eAAOxrB,KAAKwrB,KAAM,CACzB6qB,YAAa,OAAQjiC,KAAM,OAAoBmkB,KAAMu2O,EAAYz6P,QAAQ,EACzEihD,aAAct1D,KAAKs1D,aAAcouL,YAAa/qM,EAAKwzL,iBAAkB93K,eAAgB,KAErF27M,EAAmC,WAA3Br3N,EAAKm5D,aAAap5E,KAC1Bu3O,EAAa,gBAAO,IAAMt3N,EAAKxvC,QAAQ+H,GAAK,sBAAuBsC,UACnE08P,EAAUF,EAAQC,EAAWn+P,cAAc,eAAiB6mC,EAAKxvC,QAAQ0U,uBAAuB,cAAc,GAC9G0a,EAAO,CACP43O,YAAa,eAAO,GAAI,GAAInwQ,KAAKs1D,cAAc,GAAO42C,OAAO,EAAO6iK,UAAU,EAAOv5M,SAAS,GAElGx1D,KAAK27B,OAAOrc,OAAO,QAAuBiZ,IACrCv4B,KAAK27B,OAAOmd,sBAAwB94C,KAAK27B,OAAO8sE,4BAA8BzoG,KAAK27B,OAAO+0B,0BACtD,WAAlC1wD,KAAK27B,OAAOm2E,aAAap5E,MAAqBhzB,OAAOoV,KAAKyd,EAAK43O,aAAazpQ,OAC3E1G,KAAK27B,OAAOqvE,SACZhrG,KAAKyuQ,mBAAqBK,EAAatjP,EAAK+M,KAAOA,EAAK43O,aAI5DrB,EAAan2N,EAAKqwG,WAAWonH,qBAAqBF,EAASpB,GAE/D,IAAIuB,EAAY,GAAG/8P,MAAMjK,KAAKsvC,EAAKxvC,QAAQ0U,uBAAuB,SAAqBnX,OAIvF,GAHK6xB,EAAK2zE,QAASxmG,OAAOoV,KAAK9a,KAAKyuQ,oBAAoB/nQ,QAAW2pQ,IAC/DA,EAAY,GAEZL,EAAQC,EAAWpyP,uBAAuB,QAAoBnX,OAAS2pQ,EACvE7kP,EAAKpF,OAAS,OACduyB,EAAK9qC,QAAQ,OAAoB2d,GAAM,SAAU8kP,GACzCA,EAAYj8P,SAGoC,YAAhDjL,EAAMuyB,OAAOqtE,iBAAiBC,eAC9BtwD,EAAKinK,cAE2C,YAAhDx2M,EAAMuyB,OAAOqtE,iBAAiBC,eAC9B7/F,EAAMuyB,OAAO8iM,cAEjB9lL,EAAKr5B,OAAO,QAAmBgxP,YAUnC,GANA9kP,EAAKpF,OAAS,MACdoF,EAAKk4N,YAAc,EACnBl4N,EAAKnZ,MAAQrS,KAAK+vQ,cAClBp3N,EAAKr5B,OAAO,QAAiC,IAC7Cq5B,EAAKr5B,OAAO,QAAqBkM,GACjCxrB,KAAK+vQ,cAAgB,KACjBvkP,EAAKnX,OACL,SAIZm6P,EAAWtoQ,UAAUqqQ,gBAAkB,WACnC,IAAI53N,EAAO34C,KAAK27B,OAChBgd,EAAKqwG,WAAWwnH,iBAChB73N,EAAKqwG,WAAWynH,cAChBzwQ,KAAK27B,OAAOrc,OAAO,QAAsB,KAE7CkvP,EAAWtoQ,UAAUwqQ,YAAc,SAAUllP,GACzC,IAAIpiB,EAAQpJ,KACRwrB,EAAKorB,QACLprB,EAAKorB,QAAQlc,MAAK,SAAU3nB,GAAK,OAAO3J,EAAMunQ,OAAO59P,EAAGyY,MAAU6sB,OAAM,SAAUtlC,GAAK,OAAO3J,EAAMumQ,OAAO58P,MAG3G/S,KAAK4wQ,YAAYplP,EAAK+M,KAAM/M,IAGpCgjP,EAAWtoQ,UAAUyqQ,OAAS,SAAU59P,EAAGyY,GACvCxrB,KAAK4wQ,YAAY79P,EAAGyY,IAExBgjP,EAAWtoQ,UAAUypQ,OAAS,SAAU58P,GACpC/S,KAAK6wQ,YAAY99P,IAErBy7P,EAAWtoQ,UAAU4qQ,sBAAwB,SAAUv4O,GAC9Cv4B,KAAK27B,OAAOmd,sBAAyB94C,KAAK27B,OAAO+0B,0BAClD1wD,KAAK27B,OAAOi8I,wBAAwB53K,KAAK4uQ,cAAgBr2O,IAGjEi2O,EAAWtoQ,UAAU6qQ,eAAiB,SAAUvlP,GACxCxrB,KAAK27B,OAAOqtH,WAAWkjH,UAAYlsQ,KAAK27B,OAAOqtH,WAAWkjH,QAAQr/N,cAClE7sC,KAAKuwQ,kBACLvwQ,KAAKgxQ,iBACiC,WAAlChxQ,KAAK27B,OAAOm2E,aAAap5E,MAAqC,QAAhBlN,EAAKpF,QACnDpmB,KAAK27B,OAAO2gD,iBACZt8E,KAAK27B,OAAOxyB,QAAQ2I,cAAc,iBAAiB9G,UAAUC,OAAO,kBAIhFujQ,EAAWtoQ,UAAU0qQ,YAAc,SAAU79P,EAAGyY,GAC5C,IAAK,eAAkBzY,MAAQA,aAAalN,OAAQ,CAChD,IAAIijJ,EAAU,UACdt9H,EAAK+M,KAAO,eAAO,GAAI,eAAO,GAAI/M,EAAK,GAAKs9H,GAAUt9H,EAAK+M,MAAOxlB,GAatE,GAXA/S,KAAK+wQ,eAAevlP,GACpBxrB,KAAK27B,OAAO9tB,QAAQ,OAAwB2d,GAC5CA,EAAKpX,KAAO,OACZpU,KAAK27B,OAAOqvE,QAAS,EACrBhrG,KAAKyjN,WAAWj4L,EAAK+M,MACrBv4B,KAAK27B,OAAOrc,OAAO,QAAiCkM,GACpDxrB,KAAK27B,OAAOqtH,WAAWyhH,aAAaj/O,EAAKgR,KACzCx8B,KAAK27B,OAAOqtH,WAAWioH,WAAY,EACnCjxQ,KAAK8wQ,sBAAsBtlP,EAAK+M,MAChCv4B,KAAKs9J,iBACLt9J,KAAK4uQ,aAAe,KAChB5uQ,KAAK27B,OAAOod,eAAiB/4C,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,QAC5D1G,KAAK27B,OAAOqd,cAAcwzM,kBAAmB,CA4BhD,IA3BA,IAAI0kB,EAAU1lP,EAAKgR,IACfgB,EAAOx9B,KAAK27B,OAAOwpL,gBACnBgsD,EAAaD,EAAQ5gQ,aAAa,YAClC8gQ,EAAkBpxQ,KAAK27B,OAAO8sH,oBAAoB0oH,GAClDj6N,EAAU,SAAUnwC,GAEpB,IAAIwgN,EAAUnwK,EACd5Z,EAAOA,EAAKpE,QAAO,SAAUb,GACzB,IAAI8/H,EAAO9/H,EAAK4rL,WAAa5rL,IAAS64O,EACtC,GAAI/4G,EAAM,CAMN,IALA,IAAIg5G,EAAgB9pD,EAAQ5rL,OAAOqd,cAAc1b,QAAQv4B,SAASgC,EAAEuQ,WAAY,KAAKjX,MAAM,KAEvFixQ,EAAY/4O,EAAKA,KAAK84O,EAAc,IAEpCE,EAAY/lP,EAAK+M,KAAK84O,EAAc,IAC/B5yO,EAAI,EAAGA,EAAI4yO,EAAc3qQ,OAAQ+3B,IACtC6yO,EAAYA,EAAUD,EAAc5yO,IACpC8yO,EAAYA,EAAUF,EAAc5yO,IAExC,OAAO45H,GAAQi5G,IAAcC,EAG7B,OAAOl5G,MAIfjhH,EAASp3C,KACJ+G,EAAI,EAAGA,EAAI/G,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,OAAQK,IAC1DmwC,EAAQnwC,GAEZ,IAAIyqQ,EAAgBh0O,EAAK,GACpB,eAAkB4zO,IAAqB,eAAkBI,IAC1DJ,EAAgB3iK,YAAc+iK,EAAc/iK,UAGvCzuG,KAAK27B,OAAOy0B,WAAW1pD,QAC5B1G,KAAK27B,OAAO8hJ,gBAAgBziK,QAAQwQ,EAAK+M,KAAMv4B,KAAK27B,OAAOqd,cAAcqY,kBAAoB7lC,EAAKgR,SAAMrrB,GAHxGnR,KAAK27B,OAAO,eAAe81O,kBAAkBL,EAAiBI,QAM7DxxQ,KAAK27B,OAAOy0B,WAAW1pD,QAC5B1G,KAAK27B,OAAO8hJ,gBAAgBziK,QAAQwQ,EAAK+M,KAAMv4B,KAAK27B,OAAOqd,cAAcqY,kBAAoB7lC,EAAKgR,SAAMrrB,GAE5GnR,KAAK27B,OAAO9tB,QAAQ,OAAuB2d,KACrCxrB,KAAK27B,OAAOyoL,qBAA8D,aAAvCpkN,KAAK27B,OAAO4qL,kBAAkBnyM,OAC9DpU,KAAK27B,OAAOgyM,qBAAwB3tO,KAAK27B,OAAO4qL,kBAAkBmrD,eACjC,WAAlC1xQ,KAAK27B,OAAOm2E,aAAap5E,MACzB14B,KAAK27B,OAAO0tH,UAAUrpJ,KAAKygC,UAAY,EAAIzgC,KAAKygC,SAAWzgC,KAAK4uQ,cAGpE5uQ,KAAK27B,OAAOy0B,WAAW1pD,QAAU1G,KAAK27B,OAAOqd,cAAcqY,mBAAqBrxD,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,SAC9G1G,KAAK27B,OAAOkpM,YAAY8sC,4BAA2B,GAAMjrQ,QACtD1G,KAAK27B,OAAOkpM,YAAY8sC,4BAA2B,GAAOjrQ,UAGrE1G,KAAK27B,OAAO8kM,gBACZzgO,KAAK27B,OAAOokL,gBAEhByuD,EAAWtoQ,UAAU0rQ,UAAY,YACxB5xQ,KAAK6xQ,UAAY7xQ,KAAK27B,OAAOqvE,QAC9BhrG,KAAKgxQ,iBAELhxQ,KAAK6xQ,WACL7xQ,KAAK6xQ,SAAS5mQ,SACdjL,KAAK6xQ,SAAW,KAChB7xQ,KAAK8xQ,YAAY9mQ,UAAUC,OAAO,gBAElCjL,KAAK+xQ,cACL/xQ,KAAK+xQ,YAAY9mQ,SACbjL,KAAKgyQ,QACLhyQ,KAAKgyQ,OAAOhnQ,UAAUC,OAAO,iBAIzCujQ,EAAWtoQ,UAAUo3J,eAAiB,WAClC,IAAIjtG,EAAOrwD,KAAK27B,OAAOi0B,aACnB5vD,KAAK27B,OAAOm2E,aAAaxhE,UAA8C,WAAlCtwC,KAAK27B,OAAOm2E,aAAap5E,MAC9D,gBAAqB14B,KAAK27B,OAAOxyB,QAAQ+H,GAAK,uBAAwB,WAAYlR,KAAK27B,OAAOm2E,cAElG,IAAK,IAAI/qG,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IAAK,CAClC,IAAIgrD,EAAM1B,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAClCy6C,EAAIzhB,UACJ,gBAAqBtwC,KAAK27B,OAAOxyB,QAAQ+H,GAAK6gD,EAAIxX,IAAK,WAAYwX,GAAK,GAExEA,EAAI6zC,cACJ,gBAAqB5lG,KAAK27B,OAAOxyB,QAAQ+H,GAAK6gD,EAAIxX,IAAM,eAAgB,eAAgBwX,KAIpGy8M,EAAWtoQ,UAAU2qQ,YAAc,SAAU99P,GACzC/S,KAAK27B,OAAO8kM,gBACZzgO,KAAK27B,OAAO9tB,QAAQ,OAAsB,CAAGklH,MAAOhgH,IACpD/S,KAAK27B,OAAOokL,cACZ//M,KAAK27B,OAAO2c,IAAI,gBAAiB,CAAEy6E,MAAOhgH,KAE9Cy7P,EAAWtoQ,UAAU+rQ,YAAc,WAC/B,IAAIj3P,GAAU,EACVwiF,EAAYx9F,KAAK27B,OAAOxyB,QAAQ2I,cAAc,eAKlD,OAJK9R,KAAK27B,OAAOmd,uBAAwB94C,KAAK27B,OAAOygM,uBAAuBC,aACnC,WAAlCr8N,KAAK27B,OAAOm2E,aAAap5E,MAAsB8kE,IAClDxiF,GAAU,GAEPA,GAEXwzP,EAAWtoQ,UAAUu9M,WAAa,SAAUlrL,GACxC,IAAIiE,EAAM,IAAI,OAAYx8B,KAAK21C,eAAgB,KAAM31C,KAAK27B,QACtDogJ,EAAS/7K,KAAK27B,OAAO8sH,oBAAoBzoJ,KAAKu6C,KAClD,GAAIwhI,EAAQ,CACRA,EAAOrnH,QAAUn8B,EACjBv4B,KAAK27B,OAAOrc,OAAO,QAA4B,CAAEiZ,KAAMA,IACvD,gBAAmBwjJ,EAAQ/7K,KAAK27B,OAAOqb,uBAAwB+kI,EAAOrnH,SAClE10D,KAAKiyQ,eACLz1O,EAAIxhB,QAAQ+gK,EAAQ/7K,KAAK27B,OAAOi0B,cAAc,GAGlD,IADA,IAAIlsB,EAAK,GAAGpwB,MAAMjK,KAAKrJ,KAAK27B,OAAOxyB,QAAQgf,iBAAiB,mBAAqB4zJ,EAAO1pK,MAAQ,OACvFtL,EAAI,EAAGA,EAAI28B,EAAGh9B,OAAQK,IAE3B,GADA,eAAqB28B,EAAG3+B,SAASgC,EAAEuQ,WAAY,MAC3CtX,KAAK27B,OAAO8sE,4BACZ/kE,EAAG3+B,SAASgC,EAAEuQ,WAAY,KAAK6Q,iBAAiB,+CAA+CzhB,OAG/F,IAFA,IAAI2pD,EAAOrwD,KAAK27B,OAAOi0B,aACnBsiN,EAAiB,GAAG5+P,MAAMjK,KAAKq6B,EAAG3+B,SAASgC,EAAEuQ,WAAY,KAAK6Q,iBAAiB,+CAC1EsW,EAAI,EAAGA,EAAIyzO,EAAexrQ,OAAQ+3B,IACvC,GAAIyzO,EAAentQ,SAAS05B,EAAEnnB,WAAY,KAAKtM,UAAUkB,SAAS,gBAC9DgmQ,EAAentQ,SAAS05B,EAAEnnB,WAAY,KAAK3K,MAAM7B,KAAQulD,EAAKtrD,SAAS05B,EAAEnnB,WAAY,KAAK26B,OAASjyC,KAAK27B,OAAOq9E,WAAc,UAE5H,GAAIk5J,EAAentQ,SAAS05B,EAAEnnB,WAAY,KAAKtM,UAAUkB,SAAS,iBAAkB,CACrF,IAAI20I,EAAM97I,SAASmtQ,EAAentQ,SAAS05B,EAAEnnB,WAAY,KAAKhH,aAAa,iBAAkB,IAC7F4hQ,EAAentQ,SAAS05B,EAAEnnB,WAAY,KAAK3K,MAAM4kB,MAAU8+B,EAAKtrD,SAAS87I,EAAIvpI,WAAY,KAAK26B,OAASjyC,KAAK27B,OAAOq9E,WAAe,UAGlIk5J,EAAentQ,SAAS05B,EAAEnnB,WAAY,KAAK3K,MAAM7B,KAAQ9K,KAAK27B,OAAOykN,qBAAqB,QACtFpgP,KAAK27B,OAAOq9E,WAAc,KAC9Bk5J,EAAentQ,SAAS05B,EAAEnnB,WAAY,KAAK3K,MAAM4kB,MAASvxB,KAAK27B,OAAOykN,qBAAqB,SACvFpgP,KAAK27B,OAAOq9E,WAAc,OAOtDw1J,EAAWtoQ,UAAUgjJ,UAAY,WAC7B,IAAI9/I,EAAQpJ,KACZ,GAAKA,KAAK27B,OAAOqvE,OAAjB,CAGA,IAAIryD,EAAO34C,KAAK27B,OACZnQ,EAAO,eAAOxrB,KAAKwrB,KAAM,CACzB6qB,YAAa,SAAUjiC,KAAM,OAAoBC,QAAQ,EAAOkkB,KAAMv4B,KAAKs1D,aAAcouL,YAAa/qM,EAAKwzL,mBAE/GxzL,EAAKr5B,OAAO,QAAgCkM,GAC5CxrB,KAAKs9J,iBACL3kH,EAAK9qC,QAAQ,OAAoB2d,GAAM,SAAU2mP,GAC7C,IAAIA,EAAc99P,OAAlB,CAGuC,WAAnCjL,EAAMuyB,OAAOm2E,aAAap5E,MAC1BtvB,EAAMuyB,OAAOrc,OAAO,QAAsB,IAE9Cq5B,EAAKqyD,QAAS,EACd5hG,EAAM4nQ,iBACNmB,EAAc/9P,KAAO,OACU,WAA3BukC,EAAKm5D,aAAap5E,MAClBtvB,EAAMq6M,WAAW0uD,EAAc55O,MAEnC,IAAI65O,EAAaz5N,EAAKK,cAAcqY,mBAAqB1Y,EAAKK,cAAc1b,QAAQ52B,SAC5EiyC,EAAKg0D,kBAAkB76F,cAAc,iBACxC6mC,EAAKg0D,kBAAkB76F,cAAc,kBACrC6mC,EAAKg0D,kBAAkB76F,cAAc,aAAgBsgQ,GACtDz5N,EAAKi9J,aAAawnB,WAES,WAA3BzkL,EAAKm5D,aAAap5E,MAClBigB,EAAK0wG,UAAUjgJ,EAAMq3B,UAEzBkY,EAAK9qC,QAAQ,OAAuBskQ,SAG5C3D,EAAWtoQ,UAAUkjP,UAAY,SAAU7wN,EAAMlmB,GAC7C,IAAIjJ,EAAQpJ,KACR24C,EAAO34C,KAAK27B,OAEhB,GADA37B,KAAK+vQ,cAAgB19P,EAAS,eAAkBA,GAAiB,EAARA,EACrDkmB,EACAogB,EAAKr5B,OAAO,QAAqB,CAC7B+2B,YAAa,OAAQjiC,KAAM,OAAoBmkB,KAAMA,EAAMmrN,YAAa,EAAGt9N,OAAQ,MAAO/T,MAAOA,SAIzG,IAAIsmC,EAAKqyD,OAAT,CAGAhrG,KAAKs1D,aAAe,GACpBt1D,KAAKu6C,IAAM,GACX,IAAI8V,EAAO1X,EAAKiX,aACZk5F,EAAU,CAAEqnH,YAAa,GAAIpB,UAAU,GAC3C/uQ,KAAK27B,OAAOrc,OAAO,QAAuBwpI,GAC1C,IAAK,IAAI/hJ,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IACzB+hJ,EAAQimH,UAGR1+M,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,QACa,WAA1CkY,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKlD,OACjCi8C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKukB,aAAe77B,KAAK27B,OAAO7qB,SAASu/C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKukB,eAE1G,OAASvW,SAAS+qC,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,MAAOkY,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKukB,aAAc77B,KAAKs1D,eAGtH,IAAI9pC,EAAO,CACPnX,QAAQ,EAAOggD,eAAgB,GAC/Bhe,YAAa,MAAO9d,KAAMv4B,KAAKs1D,aAAclhD,KAAM,OAAoB/B,MAAOA,EAC9Ey2I,QAAS9oJ,KAAKs1D,aAAchvD,YAAQ6K,EAAW49P,SAAUjmH,EAAQimH,WAEhE/uQ,KAAK27B,OAAOmd,sBAAwB94C,KAAK27B,OAAO8sE,4BAA8BzoG,KAAK27B,OAAOygM,uBAAuBC,cAC/G32N,OAAOoV,KAAKguI,EAAQqnH,aAAazpQ,SACpC8kB,EAAK+M,KAAO/M,EAAKs9H,QAAUA,EAAQqnH,aAElC3kP,EAAKujP,SAUN/uQ,KAAKqyQ,iBAAiB7mP,IATtBxrB,KAAK27B,OAAOrc,OAAO,QAAoC,CAAEi7B,IAAKv6C,KAAKu6C,IAAK+0N,SAAUtvQ,KAAKs1D,aAAci6M,YAAavvQ,KAAK6uQ,YAAYnjQ,KAAK1L,MAAOigC,SAAUjgC,KAAKigC,WAC9J0Y,EAAK9qC,QAAQ,OAAoB2d,GAAM,SAAU8mP,GACzCA,EAAQj+P,QAGZjL,EAAMipQ,iBAAiBC,SAOnC9D,EAAWtoQ,UAAUmsQ,iBAAmB,SAAUC,GAC9C,IAAI35N,EAAO34C,KAAK27B,OAChBgd,EAAKqyD,QAAS,EACiB,WAA3BryD,EAAKm5D,aAAap5E,MAClBigB,EAAKywG,iBAETppJ,KAAKigC,SAASqqO,OAAOgI,GACrB35N,EAAKqwG,WAAW0mH,sBAChB4C,EAAQl+P,KAAO,OACfk+P,EAAQ91O,IAAMmc,EAAKxvC,QAAQ2I,cAAc,IAAM,QAC/C6mC,EAAK9qC,QAAQ,OAAuBykQ,GAChC35N,EAAKm5D,aAAaxhE,UAClBqI,EAAKqwG,WAAW0mH,yBAAoBv+P,EAAWmhQ,EAAQprM,KAAK+iE,cAAc,GAAG38E,OAEjFttD,KAAKwrB,KAAO8mP,GAEhB9D,EAAWtoQ,UAAUojJ,aAAe,SAAU6/F,EAAW5wN,GAErD,GADAv4B,KAAK4uQ,aAAe5uQ,KAAK27B,OAAOwwM,iBAC5B5zM,EAAM,CACNA,EAAQA,aAAgB1yB,MAAS0yB,EAAO,CAACA,GACzC,IAAIogB,EAAO34C,KAAK27B,OACZ42O,EAAU7sQ,OAAOoV,KAAKyd,GAAM7xB,OAChCyiP,EAAYA,GAAanpP,KAAK27B,OAAO24B,0BAA0B,GAW/D,IAVA,IAAIkwJ,EAAU,SAAUz9M,GACpB,IAAI6C,EACA4oQ,EACAC,EAAY95N,EAAK9kB,gBAAgBg/B,MAAK,SAAUknH,GAEhD,OADAy4F,EAAYz4F,EACLxhJ,EAAKxzB,SAASgC,EAAEuQ,WAAY,OAAS,eAAU6xO,EAAWpvE,IAAWxhJ,EAAKxzB,SAASgC,EAAEuQ,WAAY,OAASyiK,KAErHxhJ,EAAKxzB,SAASgC,EAAEuQ,WAAY,KAAOm7P,EAAYD,EAAYj6O,EAAKxzB,SAASgC,EAAEuQ,WAAY,KAAK,GAAK6xO,GAC7F5wN,EAAKxzB,SAASgC,EAAEuQ,WAAY,MAAQ1N,EAAK,GAAIA,EAAGu/O,GAAa5wN,EAAKxzB,SAASgC,EAAEuQ,WAAY,KAAM1N,IAE9F7C,EAAI,EAAGA,EAAIwrQ,EAASxrQ,IACzBy9M,EAAQz9M,GAGhB,IAAIykB,EAAO,CACP6qB,YAAa,SAAUjiC,KAAM,OAAoBigD,eAAgB,GACjE97B,KAAMA,GAAcv4B,KAAK27B,OAAOupM,qBAAsBxhM,GAAI1jC,KAAK27B,OAAOiqN,kBAAmBvxO,QAAQ,GAMrG,GAJK,eAAkBrU,KAAK27B,OAAOwtH,mBAC/B39H,EAAK+M,KAAK,GACNv4B,KAAK27B,OAAO8sH,oBAAoBzoJ,KAAK27B,OAAO+qM,cAAc1mO,KAAK27B,OAAOwtH,iBAAiB74I,aAAa,aAAaioB,OAEpHv4B,KAAK27B,OAAOmd,sBAAwB94C,KAAK27B,OAAO8sE,6BAA+Bj9E,EAAK+M,KAAK7xB,OAAS,EAAG,CACtG,IAAI6zC,EAAMv6C,KAAK27B,OAAOiqN,kBAAkB,GAAGt1O,aAAa,YACxDkb,EAAK+M,KAAO,CAACv4B,KAAK27B,OAAO8sH,oBAAoBluG,GAAKhiB,MAEtDv4B,KAAK27B,OAAOrc,OAAO,QAAqBkM,IAE5CgjP,EAAWtoQ,UAAU8qQ,eAAiB,WAIlC,IAHA,IAAIr4N,EAAO34C,KAAK27B,OACZ+2O,EAAc,GAAGp/P,MAAMjK,KAAKsvC,EAAKxvC,QAAQ0U,uBAAuB,SAChE80P,EAAe,GAAGr/P,MAAMjK,KAAKsvC,EAAKxvC,QAAQ0U,uBAAuB,SAC5D9W,EAAI,EAAGA,EAAI2rQ,EAAYhsQ,OAAQK,IACpC,gBAAO2rQ,EAAY3tQ,SAASgC,EAAEuQ,WAAY,MAE9C,IAASvQ,EAAI,EAAGA,EAAI4rQ,EAAajsQ,OAAQK,IACrC4rQ,EAAa5tQ,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAUC,OAAO,SAOlEujQ,EAAWtoQ,UAAU0mC,iBAAmB,WAChC5sC,KAAK27B,OAAOkR,cAGhB7sC,KAAKkkO,YAAc,CAAC,CAAE5vN,MAAO,QAAmBgvI,QAAStjJ,KAAK0wQ,aAC1D,CAAEp8P,MAAO,QAAkBgvI,QAAStjJ,KAAK6tP,iBACzC,CAAEv5O,MAAO,OAAcgvI,QAAStjJ,KAAKmgE,cACrC,CAAE7rD,MAAO,QAAoBgvI,QAAStjJ,KAAK+wQ,gBAC3C,CAAEz8P,MAAO,QAAiBgvI,QAAStjJ,KAAK6tP,iBACxC,CAAEv5O,MAAO,QAAuBgvI,QAAStjJ,KAAK2uQ,cAC9C,CAAEr6P,MAAO,QAAqBgvI,QAAStjJ,KAAK2uQ,cAC5C,CAAEr6P,MAAO,QAAsBgvI,QAAStjJ,KAAKkpJ,WAC7C,CAAE50I,MAAO,QAAoBgvI,QAAStjJ,KAAK4xQ,YAC/C,eAAuB5xQ,KAAK27B,OAAQ37B,KAAKkkO,aAAa,EAAMlkO,QAMhEwuQ,EAAWtoQ,UAAUq1E,oBAAsB,WACnCv7E,KAAK27B,OAAOkR,aAGhB,eAAuB7sC,KAAK27B,OAAQ37B,KAAKkkO,aAAa,IAM1DsqC,EAAWtoQ,UAAUgS,QAAU,WAC3BlY,KAAKu7E,sBACLv7E,KAAKigC,SAAS/nB,WAEXs2P,EArmBoB,GCb3B,EAAwC,WACxC,IAAIhpQ,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAmBxC4sQ,EAA4B,SAAUhqQ,GAEtC,SAASgqQ,EAAWj3O,EAAQga,EAAgB1V,GACxC,IAAI72B,EAAQR,EAAOS,KAAKrJ,KAAM27B,EAAQga,IAAmB31C,KAIzD,OAHAoJ,EAAMuyB,OAASA,EACfvyB,EAAMusC,eAAiBA,EACvBvsC,EAAM62B,SAAWA,EACV72B,EAoBX,OA1BA,EAAUwpQ,EAAYhqQ,GAQtBgqQ,EAAW1sQ,UAAUgjJ,UAAY,WAC7BtgJ,EAAO1C,UAAUgjJ,UAAU7/I,KAAKrJ,OAEpC4yQ,EAAW1sQ,UAAUkjP,UAAY,SAAU7wN,EAAMlmB,GAC7CzJ,EAAO1C,UAAUkjP,UAAU//O,KAAKrJ,KAAMu4B,EAAMlmB,IAEhDugQ,EAAW1sQ,UAAUsvD,QAAU,WAC3B5sD,EAAO1C,UAAUsvD,QAAQnsD,KAAKrJ,OAElC4yQ,EAAW1sQ,UAAUsjP,UAAY,SAAUn3O,EAAOkmB,GAC9C3vB,EAAO1C,UAAUsjP,UAAUngP,KAAKrJ,KAAMqS,EAAOkmB,IAEjDq6O,EAAW1sQ,UAAUojJ,aAAe,SAAU6/F,EAAW5wN,GACrD3vB,EAAO1C,UAAUojJ,aAAajgJ,KAAKrJ,KAAMmpP,EAAW5wN,IAExDq6O,EAAW1sQ,UAAU+iJ,UAAY,SAAUvlH,GACvC96B,EAAO1C,UAAU+iJ,UAAU5/I,KAAKrJ,KAAM0jC,IAEnCkvO,EA3BoB,CA4B7B,G,oCC5BE,EAA2B,WAC3B,SAASC,EAAUl3O,EAAQga,EAAgB1V,GACvCjgC,KAAK8yQ,YAAc,GACnB9yQ,KAAK+yQ,aAAe,GACpB/yQ,KAAKgzQ,UAAY,GACjBhzQ,KAAKizQ,UAAW,EAChBjzQ,KAAKkzQ,iBAAkB,EACvBlzQ,KAAKy7B,eAAgB,EACrBz7B,KAAKmzQ,iBAAmB,GAExBnzQ,KAAKozQ,aAAc,EACnBpzQ,KAAKqzQ,qBAAsB,EAC3BrzQ,KAAK27B,OAASA,EACd37B,KAAK21C,eAAiBA,EACtB31C,KAAKigC,SAAWA,EAChBjgC,KAAKwlB,MAAQmwB,EAAe0yG,WAAW,SACvCroJ,KAAK4sC,mBA0iCT,OApiCAimO,EAAU3sQ,UAAU0mC,iBAAmB,WAC/B5sC,KAAK27B,OAAOkR,cAGhB7sC,KAAKkkO,YAAc,CAAC,CAAE5vN,MAAO,OAAcgvI,QAAStjJ,KAAKmgE,cACrD,CAAE7rD,MAAO,QAAiBgvI,QAAStjJ,KAAK6tP,iBACxC,CAAEv5O,MAAO,OAA0BgvI,QAAStjJ,KAAKszQ,qBACjD,CAAEh/P,MAAO,OAAoBgvI,QAAStjJ,KAAKuzQ,eAC3C,CAAEj/P,MAAO,QAAkBgvI,QAAStjJ,KAAK6tP,iBACzC,CAAEv5O,MAAO,QAAmBgvI,QAAStjJ,KAAK4lO,gBAC1C,CAAEtxN,MAAO,QAAwBgvI,QAAStjJ,KAAKwzQ,iBAC/C,CAAEl/P,MAAO,QAAgBgvI,QAAStjJ,KAAKkY,UAC3C,eAAuBlY,KAAK27B,OAAQ37B,KAAKkkO,aAAa,EAAMlkO,MAC5D,OAAa0R,IAAI1R,KAAK27B,OAAOxyB,QAAS,YAAanJ,KAAKi9G,iBAAkBj9G,MAC1EA,KAAKguP,kBAAoBhuP,KAAKyzQ,UAAU/nQ,KAAK1L,MAC7CA,KAAK0zQ,oBAAsB1zQ,KAAK2zQ,YAAYjoQ,KAAK1L,MACjDA,KAAK27B,OAAOiR,iBAAiB,QAAkB5sC,KAAKguP,mBACpDhuP,KAAK27B,OAAOiR,iBAAiB,OAAoB5sC,KAAK0zQ,uBAM1Db,EAAU3sQ,UAAUq1E,oBAAsB,WAClCv7E,KAAK27B,OAAOkR,cAGhB,eAAuB7sC,KAAK27B,OAAQ37B,KAAKkkO,aAAa,GACtD,OAAaj5N,OAAOjL,KAAK27B,OAAOxyB,QAAS,YAAanJ,KAAKi9G,kBAC3Dj9G,KAAK27B,OAAO4/C,oBAAoB,QAAkBv7E,KAAKguP,mBACvDhuP,KAAK27B,OAAO4/C,oBAAoB,OAAoBv7E,KAAK0zQ,uBAE7Db,EAAU3sQ,UAAUytQ,YAAc,WAC9B3zQ,KAAK27B,OAAOiqH,YAAYguH,gBAE5Bf,EAAU3sQ,UAAUutQ,UAAY,WAC5BzzQ,KAAK27B,OAAOrc,OAAO,QAAuB,KAM9CuzP,EAAU3sQ,UAAUgS,QAAU,WAC1BlY,KAAKu7E,uBAETs3L,EAAU3sQ,UAAU+2G,iBAAmB,SAAUlqG,GACxC,eAAkB/S,KAAK27B,OAAOxyB,QAAQ2I,cAAc,gBAIrD9R,KAAK6zQ,sBAAmB1iQ,EAHxBnR,KAAK6zQ,iBAAmB9gQ,EAAEzM,QAMlCusQ,EAAU3sQ,UAAUi6D,aAAe,SAAUptD,GACpC,gBAAaA,EAAEzM,OAAQtG,KAAK27B,OAAOxyB,QAAQ+H,GAAK,QAAQ,MACpDlR,KAAK27B,OAAOqvE,QAAU,eAAQhrG,KAAKknE,KAAM,QAAU,eAAQn0D,EAAEzM,OAAQ,OACnE,eAAkBtG,KAAK6zQ,mBAAqB7zQ,KAAK6zQ,mBAAqB9gQ,EAAEzM,UAC3EtG,KAAKupP,WACLvpP,KAAKwzQ,mBAEL,gBAAazgQ,EAAEzM,OAAQ,UAAsBtG,KAAK27B,OAAOqvE,QACzDhrG,KAAK8zQ,WAAW/gQ,EAAEzM,UAI9BusQ,EAAU3sQ,UAAU2nP,gBAAkB,SAAU96O,GAC5C,IAAIzM,EAAS,gBAAayM,EAAEzM,OAAQ,QAChCo9B,EAAK,gBAAa3wB,EAAEzM,OAAQ,QAC5Bm6B,EAAWiD,GAAM3+B,SAAS2+B,EAAGpzB,aAAa,QAAwB,IAClE6kN,EAAW7uN,GAAUvB,SAASuB,EAAOgK,aAAa,QAAwB,IACzE,eAAkBhK,IAAY,eAAkBm6B,IAActf,MAAMg0M,IACjE7uN,EAAO8gB,cAAcpc,UAAUkB,SAAS,UAC5ClM,KAAK27B,OAAOi0B,aAAa7qD,SAASowN,EAAS79M,WAAY,KAAKitF,cAC5DvkG,KAAKspP,SAAS7oN,EAAUzgC,KAAK27B,OAAOi0B,aAAa7qD,SAASowN,EAAS79M,WAAY,KAAK6gC,MAAOn4C,KAAK+zQ,SAAStzO,KAGjHoyO,EAAU3sQ,UAAUotQ,oBAAsB,SAAUvgQ,GAC5C/S,KAAK27B,OAAOqvE,QAAUhrG,KAAKg0Q,oBAC1BjhQ,EAAEkhQ,SAAY,CAAC,MAAO,WAAY,QAAS,cAAclqQ,QAAQgJ,EAAEmhQ,QAAQ9tP,SAAW,KACvFrT,EAAEsB,QAAS,EACPtB,EAAEkhQ,QACFlhQ,EAAEohQ,UAAUv7P,iBAGZ7F,EAAEmhQ,QAAQt7P,mBAItBi6P,EAAU3sQ,UAAUqtQ,cAAgB,SAAUxgQ,GAC1C,IAAI7E,IAAU6E,EAAEqC,UAAUg/P,YAAcrhQ,EAAEqC,UAAUu6F,eAAiB3vG,KAAK27B,OAAOitE,YAAc71F,EAAEqC,UAAUq1F,UAM3G,GALIzqG,KAAK27B,OAAOiqH,YAAYyuH,SACxBr0Q,KAAKqzQ,oBAAsBrzQ,KAAK27B,OAAOiqH,YAAYyuH,OAAOC,OAAO9xC,QAAQlrN,aAAetX,KAAKu0Q,4BACxFj9P,WACLtX,KAAKw0Q,YAAc,GAAGlhQ,MAAMjK,KAAKrJ,KAAK27B,OAAOiqH,YAAYyuH,OAAO79C,WAAWh5L,MAAMzzB,QAAQ,eAAQgJ,EAAE5J,QAAS,QAE3G4J,EAAE0hQ,QAASvmQ,EAAhB,CAMA,IAAItE,EAAKmJ,EAAEqC,UAAUsiN,QAASj3L,EAAW72B,EAAG,GAAIk9N,EAAYl9N,EAAG,GAC3DsiE,EAAcn5D,EAAE5J,QAAQmH,aAAa,iBAAmBvL,SAASgO,EAAE5J,QAAQmH,aAAa,kBAAoBw2N,EAC5G56J,IAAgB46J,IAChBA,EAAY56J,GAEZlsE,KAAK27B,OAAOitE,YAAc71F,EAAEqC,UAAUg/P,YACtC3zO,IAAczgC,KAAK27B,OAAO6sE,aAAa12F,cAAc,gBAAkB,EAAI9R,KAAK27B,OAAOitE,YACnF5oG,KAAK27B,OAAOktE,mBAAmB1gF,iBAAiB,kBAAkBzhB,QAE1E,IAAIskG,EAAShrG,KAAK27B,OAAOqvE,OACzB,IAAKhrG,KAAK27B,OAAOxyB,QAAQ0U,uBAAuB,gBAAgBnX,OAE5D,OADAskG,EAASA,IAAWhrG,KAAKg0Q,kBACjBjhQ,EAAEmhQ,QAAQ9tP,QACd,IAAK,MACL,IAAK,WAED,IAAIypF,EAAS7vG,KAAK27B,OAAOyyE,iBAAmBpuG,KAAK27B,OAAOmsL,WAAa,EACjE9nN,KAAK27B,OAAOyyE,iBAAmBpuG,KAAK27B,OAAOmsL,WAAa,EAAI,EAE5D/1J,EAAM/xD,KAAK27B,OAAOi0B,aAAak3K,EAAYj3H,GAC3C99C,IAAQ/xD,KAAK27B,OAAOqvE,QACpBhrG,KAAKspP,SAAS7oN,EAAUsxB,EAAI5Z,QAE5B6yD,GAAUhrG,KAAK27B,OAAO+4O,uBACtB10Q,KAAK20Q,kBAAkBl0O,EAAUqmM,GAErC,MACJ,IAAK,QACL,IAAK,aACD/zN,EAAEmhQ,QAAQt7P,iBAEV,IAAI4S,EAAO,CAAEnX,QAAQ,EAAO6/P,QAASnhQ,EAAEmhQ,SACvCl0Q,KAAK27B,OAAOrc,OAAO,sBAAuBkM,IACrCA,EAAKnX,QAAU22F,GAChBhrG,KAAKspP,SAAS7oN,EAAUzgC,KAAK8yQ,YAAYv2O,OAAO4b,OAEpD,MACJ,IAAK,KACDn4C,KAAK20Q,kBAAkBl0O,EAAUqmM,GACjC9mO,KAAKwlB,MAAMA,QACX,YA7CHxlB,KAAK27B,OAAOqvE,QAAU98F,GACvBlO,KAAKupP,YAgDjBspB,EAAU3sQ,UAAU6tQ,SAAW,SAAU1hQ,GACrC,OAAOrS,KAAK27B,OAAOurM,cAAcniO,SAASsN,EAAMiF,WAAY,KAAKtM,UAAUkB,SAAS,kBAExF2mQ,EAAU3sQ,UAAUyuQ,kBAAoB,SAAUtxB,EAAQx7B,GACtD7nN,KAAK8yQ,YAAYryO,SAAW4iN,EAC5BrjP,KAAK8yQ,YAAYhsC,UAAYjf,EAC7B7nN,KAAKspP,SAASjG,EAAQrjP,KAAK27B,OAAOi0B,aAAa7qD,SAAS8iN,EAAQvwM,WAAY,KAAK6gC,MAAOn4C,KAAK+zQ,SAAS1wB,KAE1GwvB,EAAU3sQ,UAAUgjJ,UAAY,WAC5B,IAAIvwG,EAAO34C,KAAK27B,OACZ6B,EAAOx9B,KAAK27B,OAAOwpL,gBACnBtyK,EAAW,CAAEx+B,QAAQ,EAAO8vN,aAAcnkO,KAAKypP,mBAEnD,GADA9wM,EAAKr5B,OAAO,OAA0BuzB,IAClCA,EAASx+B,OAAb,CAGIskC,EAAKqyD,QACLhrG,KAAKupP,UAAS,GAElBvpP,KAAK40Q,SAAU,EACfj8N,EAAKywG,iBACL,IAAK,IAAIriJ,EAAI,EAAGA,EAAIy2B,EAAK92B,OAAQK,IAAK,CAClC,IAAI8tQ,GAAW,EACXC,EAAUt3O,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKw9P,QAC/CD,EAAW70Q,KAAK+0Q,0BAA0Bv3O,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAMw9P,GACxED,GACAr3O,EAAKlrB,OAAOvL,EAAG,GAEf8tQ,GACA9tQ,IAGH4xC,EAAKg0D,kBAAkB76F,cAAc,aACtC6mC,EAAKi9J,aAAa2pB,iBAEtB,IAAI/zM,EAAO,CACP6qB,YAAa,cAAe7Y,KAAMx9B,KAAK27B,OAAOwpL,iBAElDxsK,EAAKr5B,OAAO,OAAoB,CAC5Bke,KAAMx9B,KAAK27B,OAAOwpL,gBAAgBz+M,OAAS1G,KAAK27B,OAAOwpL,gBACnD,CAAC,IAAI,OAAI,CAAEhB,WAAW,EAAM30G,MAAO,CAAC,IAAI,OAAK,CAAEG,YAAY,EAAMr9E,SAAS,UAElFqmB,EAAK0wG,UAAUrpJ,KAAK8yQ,YAAYryO,UAChCzgC,KAAKg1Q,gBACLr8N,EAAKr5B,OAAO,QAAuB,IACnCtf,KAAK27B,OAAOrc,OAAO,QAAuB,IAC1CkM,EAAO,CAAE6qB,YAAa,cAAe7Y,KAAMx9B,KAAK27B,OAAOwpL,iBACvDxsK,EAAK9qC,QAAQ,OAAoB2d,KAErCqnP,EAAU3sQ,UAAU6uQ,0BAA4B,SAAUv4O,EAAKs4O,GAC3D,IAAIn8N,EAAO34C,KAAK27B,OACZ61K,EAAc,IAAI,OAAYxxM,KAAK21C,eAAgB,KAAM31C,KAAK27B,QAC9Ds5O,GAAqB,EACzB,GAAIH,EAAS,CACTt4O,EAAIs4O,QAAUA,EACd,IAAIpxO,EAAKiV,EAAKw5M,mBAAmB31N,EAAI+d,KACrC,GAAI7W,IACIA,EAAG14B,UAAUkB,SAAS,kBACtB,gBAAOw3B,GACPuxO,GAAqB,IAGrB,gBAAmBz4O,EAAKx8B,KAAK27B,OAAOqb,uBAAwBxa,EAAIjE,aACzDiE,EAAIk4B,eACJl4B,EAAIwb,KACXxb,EAAIs4O,SAAU,EACd,eAAUpxO,EAAI,GAAI,CAAC,cAAe,gBAClC8tK,EAAYx2L,QAAQwhB,EAAKmc,EAAKiX,cAAc,IAE5C5vD,KAAK27B,OAAOy0B,WAAW1pD,OAAS,GAAG,CACnC,IAAI0N,EAAO,OACP2jC,EAAW,GACfA,EAAS,GAAK3jC,GAAQ,SACtBpU,KAAK27B,OAAOrc,OAAO,QAA8By4B,GAC7C/3C,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,OAAS,GAC3C1G,KAAK27B,OAAOrc,OAAO,QAAwBy4B,IAK3D,OAAOk9N,GAEXpC,EAAU3sQ,UAAUojJ,aAAe,SAAU6/F,EAAW5wN,GACpDv4B,KAAKupP,WACDvpP,KAAKg0Q,mBACLh0Q,KAAKupP,UAAS,GAElBvpP,KAAK40Q,SAAU,EACf50Q,KAAKk1Q,WAAW/rB,EAAW5wN,GACvBv4B,KAAK27B,OAAOy0B,WAAW1pD,OAAS,IAChC1G,KAAK27B,OAAOrc,OAAO,QAA8B,IAC7Ctf,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,OAAS,GAC3C1G,KAAK27B,OAAOrc,OAAO,QAAwB,MAIvDuzP,EAAU3sQ,UAAUkjP,UAAY,SAAU7wN,GACtCv4B,KAAKm1Q,WAAW58O,IAEpBs6O,EAAU3sQ,UAAUsvD,QAAU,WACtBx1D,KAAK27B,OAAOqvE,QAAUhrG,KAAKg0Q,mBAG/Bh0Q,KAAKo1Q,aAETvC,EAAU3sQ,UAAU8tQ,gBAAkB,WAClC,OAAOh0Q,KAAK27B,OAAOqtH,WAAWkjH,UAAYlsQ,KAAK27B,OAAOqtH,WAAWkjH,QAAQ97C,YAE7EyiD,EAAU3sQ,UAAUkvQ,UAAY,WAC5B,IAAIz8N,EAAO34C,KAAK27B,OACZi5B,EAAiB,iBACrB,GAAIjc,EAAKyrK,oBAAqB,CAC1B,IAAIixD,EAAc18N,EAAKxvC,QAAQ2I,cAAc,qBAAqBsV,cAC9DiuP,EAAYrqQ,UAAUkB,SAAS,wBAC/BysC,EAAKgY,aAAauhH,kBAAoBv5H,EAAK9kB,gBAAgBntB,QAC3D,gBAAY,CAAC2uQ,GAAc,CAAC,wBAIpC,GADAr1Q,KAAKupP,aACD5wM,EAAKqyD,QAAUhrG,KAAKwzQ,mBAAqB76N,EAAKqyD,QAAlD,CAGA,IAAIt2C,EAAU10D,KAAKypP,kBACwB,aAAvCzpP,KAAK27B,OAAO4qL,kBAAkBnyM,MAAuBsgD,EAAQ,GAAKE,GAAgBluD,QAClF1G,KAAK27B,OAAO4qL,kBAAkBC,mBAC9B9xJ,EAAQ,GAAKE,GAAkB50D,KAAKs1Q,mBACpCt1Q,KAAKs1Q,mBAAqB,IAE9B,IAAI//M,EAAW,CACXV,eAAgB70D,KAAK27B,OAAOwpL,gBACvB/rL,QAAO,SAAUoD,GAAO,OAAOA,EAAIs4O,UAAoD,IAAzC,CAAC,MAAO,UAAU/qQ,QAAQyyB,EAAIwb,SAC5EvrC,KAAI,SAAU+vB,GAAO,OAAOA,EAAIjE,SAErC/M,EAAO,CAAE24M,aAAczvK,EAASrgD,QAAQ,GAC5CskC,EAAK9qC,QAAQ,OAAwB2d,GAAM,SAAU+pP,GAC7CA,EAAoBlhQ,SAGxBskC,EAAKinK,cACLjnK,EAAKr5B,OAAO,OAAiB,CAAEo1C,QAASA,EAASa,SAAUA,UAGnEs9M,EAAU3sQ,UAAUujP,gBAAkB,WAOlC,IANA,IAAI/0L,EAAU,CACVC,aAAc,GACdC,eAAgB,GAChBC,eAAgB,IAEhBr3B,EAAOx9B,KAAK27B,OAAOwpL,gBACd1xM,EAAK,EAAGi/G,EAASl1F,EAAM/pB,EAAKi/G,EAAOhsH,OAAQ+M,IAAM,CACtD,IAAI+oB,EAAMk2F,EAAOj/G,GACjB,GAAI+oB,EAAIs4O,QACJ,OAAQt4O,EAAIwb,MACR,IAAK,MACD0c,EAAQC,aAAa1iD,KAAKuqB,EAAIk4B,SAC9B,MACJ,IAAK,SACDA,EAAQE,eAAe3iD,KAAKuqB,EAAIjE,MAChC,MACJ,QACIm8B,EAAQG,eAAe5iD,KAAKuqB,EAAIk4B,UAIhD,OAAOA,GAOXm+M,EAAU3sQ,UAAUsvQ,uBAAyB,SAAUj7N,GAGnD,IAFA,IAAI/c,EAAOx9B,KAAK27B,OAAOwpL,gBACnBp+M,EAAI,EACC2hB,EAAM8U,EAAK92B,OAAQK,EAAI2hB,EAAK3hB,IACjC,GAAIy2B,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKijC,MAAQA,EACzC,MAGR/c,EAAKlrB,OAAOvL,EAAG,IAQnB8rQ,EAAU3sQ,UAAU+uP,aAAe,SAAUz4N,GACzC,IAAImc,EAAO34C,KAAK27B,OACZuvH,EAA6C,QAArCvyG,EAAKm5D,aAAay4J,eAC1BkL,EAAWj5O,EAAIkzB,QACfw7F,EACAvyG,EAAKwsK,gBAAgBw+C,QAAQ8R,GAG7B98N,EAAKwsK,gBAAgBlzM,KAAKwjQ,IAIlC5C,EAAU3sQ,UAAUgvQ,WAAa,SAAU/rB,EAAW5wN,GAClD,IAAInvB,EAAQpJ,KACZA,KAAKs1Q,mBAAqB,GAC1B,IAAI38N,EAAO34C,KAAK27B,OACZtpB,EAAQsmC,EAAKwzL,iBACbrqD,EAAenpI,EAAKitM,kBACpBp6N,EAAO,CACP0jP,WAAYlvQ,KAAK27B,OAAO24B,0BACxB7zB,SAAUpuB,EACVy2I,QAASvwH,GAAcogB,EAAKusL,qBAAqB,GACjD7wN,QAAQ,GAGRmX,EAAKgR,IADLjE,EACWogB,EAAKqwG,WAAW0sH,aAAe/8N,EAAKw5M,mBAAmBx5M,EAAKqwG,WAAW0sH,cAC5E/8N,EAAKk+K,UAAUl+K,EAAKi/H,wBAAwB7tK,QAAQwuB,IAG/CupJ,EAAa,GAEvBt2J,EAAKgR,KAIVmc,EAAK9qC,QAAQ,OAA0B2d,GAAM,SAAUmqP,GACnD,IAAIA,EAAsBthQ,OAA1B,CAOA,GAJAjL,EAAMksQ,mBAAqB38N,EAAKusL,qBAChCvsL,EAAKywG,iBACLusH,EAAsBn5O,IAAMm5O,EAAsBn5O,IAC9Cm5O,EAAsBn5O,IAAMjE,EAAOogB,EAAKk+K,UAAU9xN,SAASsN,EAAMiF,WAAY,KAAOwqK,EAAa,GACzE,IAAxBA,EAAap7K,QAAgB6xB,EAAM,CACnC,IAAIgiB,EAAMo7N,EAAsBn5O,IAAIlsB,aAAa,YAEjD,GADAiqC,EAAMhiB,GAAQnvB,EAAMuyB,OAAOqtH,WAAW0sH,aAAen7N,EAAMnxC,EAAMuyB,OAAOqtH,WAAW0sH,aAAen7N,EAC9Fo7N,EAAsBn5O,IAAIxxB,UAAUkB,SAAS,iBAC7C9C,EAAMosQ,uBAAuBj7N,GAC7B,gBAAOo7N,EAAsBn5O,SAE5B,CACD,IAAIu/I,EAASpjI,EAAK8vG,oBAAoBluG,GACtCwhI,EAAO+4F,SAAU,EACjB/4F,EAAO/jI,KAAO,SACd,eAAU29N,EAAsBn5O,IAAK,CAAC,cAAe,eAAgB,IACjEmc,EAAKiwD,YAAcv2F,EAAQsmC,EAAKiwD,YAAcjwD,EAAKuuL,cAAcxgO,QAAUiyC,EAAKiwD,YAChFjwD,EAAK2tG,iBAAiBx0I,cAAc,QAAgBtH,YAAYmuC,EAAK+tL,cAAc/tL,EAAKiwD,WAAa,WAGtG+sK,EAAsBn5O,QAE5B,CACGjE,IACAlmB,EAAQtN,SAAS4wQ,EAAsBn5O,IAAIlsB,aAAa,QAAwB,KAEpF,IAAK,IAAIvJ,EAAI,EAAGA,EAAI+6K,EAAap7K,OAAQK,IAAK,CAC1C,IAAI6uQ,EAAW9zF,EAAa/8K,SAASgC,EAAEuQ,WAAY,KAAKhH,aAAa,YACrE,GAAIwxK,EAAa/8K,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAUkB,SAAS,iBAC5D9C,EAAMosQ,uBAAuBI,GAC7B,gBAAO9zF,EAAa/8K,SAASgC,EAAEuQ,WAAY,UAE1C,CACD,eAAUwqK,EAAa/8K,SAASgC,EAAEuQ,WAAY,KAAM,CAAC,cAAe,eAAgB,IACpF,IAAIosO,EAAc/qM,EAAK8vG,oBAAoBmtH,GAC3ClyB,EAAYoxB,SAAU,EACtBpxB,EAAY1rM,KAAO,gBACZ8pI,EAAa/8K,SAASgC,EAAEuQ,WAAY,KACvCqhC,EAAKiwD,YAAcv2F,EAAQsmC,EAAKiwD,YAAcjwD,EAAKuuL,cAAcxgO,QAAUiyC,EAAKiwD,YAChFjwD,EAAK2tG,iBAAiBx0I,cAAc,QAAgBtH,YAAYmuC,EAAK+tL,cAAc/tL,EAAKiwD,WAAa,MAKrHx/F,EAAM4rQ,gBACFz8O,IACAogB,EAAKqwG,WAAW0sH,kBAAevkQ,GAE9BwnC,EAAKyrK,qBACNzrK,EAAK0wG,UAAUh3I,GAEnBsmC,EAAK9qC,QAAQ,OAAoB8nQ,GACjCh9N,EAAKr5B,OAAO,OAAoB,CAAEke,KAAMp0B,EAAMuyB,OAAOwpL,kBACrDxsK,EAAKr5B,OAAO,QAAuB,SAG3CuzP,EAAU3sQ,UAAU8uQ,cAAgB,WAIhC,IAHA,IAAIr8N,EAAO34C,KAAK27B,OACZ6B,EAAOmb,EAAKupM,gBAAe,GAC3B2zB,EAAcl9N,EAAKwsK,gBAAgB/rL,QAAO,SAAUoD,GAAO,OAAQA,EAAIu1N,eAClEhrP,EAAI,EAAG03B,EAAI,EAAG/V,EAAM8U,EAAK92B,OAAQK,EAAI2hB,EAAK3hB,IAC3Cy2B,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAUkB,SAAS,UAAkBsxB,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAKtM,UAAUkB,SAAS,gBAC1HsxB,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAK/G,aAAa,OAAuBkuB,EAAEnnB,YACvEkmB,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAK/G,aAAa,QAAwBkuB,EAAI,GAAGnnB,YAC7Eu+P,EAAY9wQ,SAASgC,EAAEuQ,WAAY,KAAKjF,MAAQosB,EAChDA,MAGAjB,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAK9G,gBAAgB,QACjDgtB,EAAKz4B,SAASgC,EAAEuQ,WAAY,KAAK9G,gBAAgB,QACjDqlQ,EAAY9wQ,SAASgC,EAAEuQ,WAAY,KAAKjF,OAAS,IAI7DwgQ,EAAU3sQ,UAAUivQ,WAAa,SAAU58O,GACvC,IAAInvB,EAAQpJ,KACR24C,EAAO34C,KAAK27B,OAChB,GAAKgd,EAAKm5D,aAAak7H,YAAvB,CAUA,GAJIr0L,EAAKqyD,SACLhrG,KAAKupP,WACLvpP,KAAK27B,OAAOrc,OAAO,QAAwB,KAE3Ctf,KAAKy7B,cAAe,CAEpB,IADA,IAAIq6O,EAAiBn9N,EAAKwtG,oBACjBp/I,EAAI,EAAGA,EAAI+uQ,EAAepvQ,OAAQK,IACvC,GAAI+uQ,EAAe/wQ,SAASgC,EAAEuQ,WAAY,KAAK6oN,iBAC3C21C,EAAe/wQ,SAASgC,EAAEuQ,WAAY,KAAK6oN,gBAAgB,YAAa,CACxE,IAAIhlK,EAAM,CAAEhjB,MAAQ29N,EAAe/wQ,SAASgC,EAAEuQ,WAAY,KAAK,SAAUhE,QAASu0M,QAAS9gN,GAC3F/G,KAAKmzQ,iBAAiBlhQ,KAAKkpD,GAGnCn7D,KAAKy7B,eAAgB,EAEzBz7B,KAAK27B,OAAOxyB,QAAQ6B,UAAU0G,IAAI,aAClC,IAAIqkQ,EAAcx9O,GAAcv4B,KAAKg2Q,iBACjCxqP,EAAO,CACPuqP,YAAaA,EACb7G,WAAYv2N,EAAK2b,0BACjBjgD,QAAQ,GAEZskC,EAAK9qC,QAAQ,OAAuB2d,GAAM,SAAUyqP,GAChD,IAAIA,EAAmB5hQ,OAAvB,CAGAjL,EAAMwrQ,SAAU,EAChBj8N,EAAKywG,iBACL,IAKIr3F,EACA1/C,EANAmqB,EAAM,IAAI,OAAYpzB,EAAMusC,eAAgB,KAAMvsC,EAAMuyB,QACxDlV,EAAQ,IAAI,OAAkBrd,EAAMuyB,QACpCq5N,EAAYvuO,EAAM4nF,aAAa,CAAC4nK,EAAmBF,cACnDryO,EAAKlH,EAAInjB,OAAO27O,EAAU,GAAIr8M,EAAKiX,cACvC,eAAqBlsB,GAGrB,IAAK,IAAI38B,EAAI,EAAGA,EAAIqC,EAAMuyB,OAAOqd,cAAc1b,QAAQ52B,OAAQK,IAC3D28B,EAAGzY,aAAa7hB,EAAMuyB,OAAOtxB,cAAc,KAAM,CAAEC,UAAW,iBAAmBo5B,EAAGkL,YACpFomN,EAAU,GAAGxlJ,MAAMm0J,QAAQ,IAAI,OAAK,CAAE/zJ,SAAU,OAASN,UAE7D,IAAIrR,EAAQtlD,EAAKg0D,kBAAkB76F,cAAc,QAEjD,GADA4xB,EAAG14B,UAAU0G,IAAI,iBACbusF,EAAMnsF,cAAc,eAAgB,CACpC,IAAIsrN,EAAWn/H,EAAMnsF,cAAc,eACnCsrN,EAASjiJ,WAAW2Y,YAAYspI,GAC5BzkL,EAAKiwD,YAAcjwD,EAAKxvC,QAAQ2I,cAAc,uBAC9C6mC,EAAKxvC,QAAQ2I,cAAc,sBAAsB9G,UAAUC,OAAO,qBAItEgzF,EADAtlD,EAAKiwD,YAAmD,QAArCjwD,EAAKm5D,aAAay4J,eAC7B5xN,EAAK2tG,iBAAiBx0I,cAAc,QAGpC6mC,EAAKg0D,kBAAkB76F,cAAc,QAEA,QAA7C1I,EAAMuyB,OAAOm2E,aAAay4J,eAC1BtsK,EAAMhzE,aAAayY,EAAIu6D,EAAMrvD,YAG7BqvD,EAAMzzF,YAAYk5B,GAEtB,eAAS,GAAGpwB,MAAMjK,KAAKq6B,EAAG7lB,uBAAuB,SAAoB,CAAC,gBACtEm3O,EAAU,GAAG8f,SAAU,EACvB9f,EAAU,GAAGtgM,QAAU,eAAO,GAAI,GAAIsgM,EAAU,GAAGz8N,MAAM,GACzDy8N,EAAU,GAAGh9M,KAAO,MACpB5uC,EAAM6rP,aAAaD,EAAU,IAC7B5rP,EAAM4rQ,gBACN5rQ,EAAMoc,MAAM0wP,iBACZv9N,EAAKr5B,OAAO,OAAiB,CAAEke,KAAMp0B,EAAMuyB,OAAOwpL,kBAClD,IAAIzwJ,EAAUtrD,EAAMqgP,kBAChB0sB,EAAS/sQ,EAAMgtQ,iBAC8B,QAA7ChtQ,EAAMuyB,OAAOm2E,aAAay4J,eAC1B5xN,EAAK0wG,UAAU,GAGf1wG,EAAK0wG,UAAU8sH,GAEd59O,IACDlmB,EAAQjJ,EAAMitQ,qBAAqB,GAAG,GACtCtkN,EAAMpZ,EAAKiX,aAAa7qD,SAASsN,EAAMiF,WAAY,KACF,QAA7ClO,EAAMuyB,OAAOm2E,aAAay4J,eAC1BnhQ,EAAMkgP,SAAS,EAAGv3L,EAAI5Z,OAAO,GAG7B/uC,EAAMkgP,SAAS6sB,EAAQpkN,EAAI5Z,OAAO,IAGtC/uC,EAAMuyB,OAAOy0B,WAAW1pD,OAAS,IAAM6xB,GAAQm8B,EAAQ,QAAuBhuD,SAC9E0C,EAAMuyB,OAAOrc,OAAO,QAA8B,IAEtD,IAAIinP,EAAQ,CACRwP,YAAaE,EAAmBF,YAAav5O,IAAKkH,EAClDunO,aAAcl5M,EAAKvxB,YAAanuB,EAAO68P,WAAY+G,EAAmB/G,WACtEx/J,KAAO,eAAkBr9F,QAAoDlB,EAA3CuyB,EAAG8rE,MAAMzqG,SAASsN,EAAMiF,WAAY,MAE1EqhC,EAAK9qC,QAAQ,OAAiB04P,YAnG1B5tN,EAAKqyD,QACLhrG,KAAKupP,YAqGjBspB,EAAU3sQ,UAAUmwQ,qBAAuB,SAAU71O,EAAa0rE,EAAOoqK,GAIrE,IAHA,IAEIC,EAFAlmN,EAAOrwD,KAAK27B,OAAOi0B,aACnByiB,EAAWhiB,EAAK3pD,OAEXK,EAAIy5B,EAAaz5B,EAAIsrE,EAAUtrE,IAKpC,GAJAwvQ,IAAaD,GAAY,eAAkBjmN,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6oN,iBAIxEj0H,KAAW77C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKg5B,UAAY+f,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,QACtFkY,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKitF,cAAgBl0C,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgb,WACnF+9B,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKu1P,aAAcx8M,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKu4C,gBAAkB0mN,EACpG,OAAOxvQ,EAGf,OAAQ,GAEZ8rQ,EAAU3sQ,UAAU8vQ,eAAiB,WAIjC,IAHA,IAAIr9N,EAAO34C,KAAK27B,OACZpD,EAAO,GACPi+O,EAAU,CAAE,OAAU,EAAG,OAAU,KAAM,SAAW,EAAO,KAAQ,KAAM,SAAY,MAChF/iQ,EAAK,EAAG7J,EAAM+uC,EAAgB,YAAGllC,EAAK7J,EAAGlD,OAAQ+M,IAAM,CAC5D,IAAIs+C,EAAMnoD,EAAG6J,GACTs+C,EAAI5Z,OACJ,gBAAS4Z,EAAI5Z,MAAOzyC,OAAOoV,KAAKi3C,GAAKhoD,QAAQ,iBAAmB,EAAIgoD,EAAIl2B,aAAe26O,EAAQzkN,EAAI39C,MAAOmkB,GAGlH,OAAOA,GAEXs6O,EAAU3sQ,UAAU4tQ,WAAa,SAAUxtQ,GACvC,IAAIqkQ,EAAO,EACP3qQ,KAAK27B,OAAOod,gBACZ4xN,EAAO3qQ,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,QAE7C1G,KAAK8yQ,YAAYhsC,UAAYxgO,EAAOwgO,UAAY6jC,EAChD3qQ,KAAK8yQ,YAAYryO,SAAW17B,SAASuB,EAAOgK,aAAa,SAAU,KAEvEuiQ,EAAU3sQ,UAAUojP,SAAW,SAAUj3O,EAAO8lC,EAAO+zD,GACnD,IAAIvzD,EAAO34C,KAAK27B,OACZo2B,EAAMpZ,EAAK4Y,iBAAiBpZ,GAChCn4C,KAAKqS,MAAQA,EACbrS,KAAKm4C,MAAQA,EACbn4C,KAAKksG,MAAQA,EACb,IAAI+hJ,EAAYt1M,EAAKqyD,UAAYhrG,KAAK8yQ,YAAYv2O,OAAO4b,QAAUA,GAC3Dn4C,KAAK8yQ,YAAYryO,WAAapuB,GAASrS,KAAK27B,OAAOurM,cAAcxgO,OAAS,IAAM2L,GAASrS,KAAKqzQ,qBAClG16N,EAAKm5D,aAAavN,gBACb0pJ,IAAcl8L,EAAIwyC,eAAkBxyC,EAAIwyC,cAAgB5rD,EAAKitG,YAAYyuH,QACvE17N,EAAKitG,YAAYyuH,OAAO79C,WAAWh5L,KAAKx9B,KAAKw0Q,cAC7C77N,EAAKitG,YAAYyuH,OAAO79C,WAAWh5L,KAAKx9B,KAAKw0Q,aAAaxpQ,UAAUkB,SAAS,kBAChFlM,KAAKy2Q,eAAepkQ,EAAO8lC,EAAO+zD,GAE7B+hJ,IACLjuP,KAAKizQ,UAAW,EAChBjzQ,KAAKupP,cAIjBspB,EAAU3sQ,UAAUuwQ,eAAiB,SAAUpkQ,EAAO8lC,EAAO+zD,GACzD,IAAI9iG,EAAQpJ,KACR24C,EAAO34C,KAAK27B,OACZo2B,EAAMpZ,EAAK4Y,iBAAiBpZ,GAC5Br9B,EAAO69B,EAAK2b,0BAChB,IAAI3b,EAAKqyD,OAAT,CAGA,IAAI89C,EAAU,eAAO,GAAI,GAAI9oJ,KAAK02Q,eAAerkQ,IAAQ,GACrDmqB,EAAMmc,EAAKuuL,cAAcniO,SAASsN,EAAMiF,WAAY,KAExD,GADAwxI,EAAU,eAAO,GAAI,GAAI9oJ,KAAK02Q,eAAerkQ,IAAQ,GAChDyI,EAAK,KAAOi3C,EAAI5Z,QAAU3b,EAAIxxB,UAAUkB,SAAS,kBAAqB6lD,EAAIz0B,SAC1Ey0B,EAAIlC,cAAgBkC,EAAI86M,YAAe96M,EAAIszC,SAC5CrlG,KAAK27B,OAAO+4O,sBAAuB,MAFvC,CAKA10Q,KAAK27B,OAAO+4O,sBAAuB,EACnC10Q,KAAK27B,OAAOxyB,QAAQ6B,UAAU0G,IAAI,aAClC,IAAIqqK,EAASpjI,EAAK8vG,oBAAoBjsH,EAAIlsB,aAAa,aACnDk/F,EAAQ,GAAGl8F,MAAMzK,MAAM2zB,EAAIgzE,OAC3BhkF,EAAO,CACPgmC,WAAYO,EAAI5Z,MAAOsa,cAAe,eAAkBV,EAAI3Z,iBAC5D82N,WAAYp0P,EAAMguI,QAASA,EAC3Bq3E,gBAAiB,eAAO,GAAIpuK,EAAIouK,gBAAkBpuK,EAAIouK,gBAAkB,IACxEhiN,MAAO,eAAU4zC,EAAI5Z,MAAO2wG,GAC5B10I,KAAO83F,EAAiB,MAAT,OAAgB73F,QAAQ,EACvCggD,eAAgB0nH,GAAUA,EAAO1nH,gBAErC7oC,EAAKkkF,KAAOF,EAAMxvG,KAAK22Q,YAAYnnK,EAAOxvG,KAAK42Q,WAAW7kN,EAAIxX,OAC9D/uB,EAAKgR,IAAMA,EACXhR,EAAKy/O,aAAel5M,EACfvmC,EAAKkkF,MAGV/2D,EAAK9qC,QAAQ,OAAiB2d,GAAM,SAAUqrP,GACtCA,EAAaxiQ,SAGjBwiQ,EAAannK,KAAOmnK,EAAannK,KAAOmnK,EAAannK,KAAOF,EAAMpmG,EAAMutQ,YAAYnnK,EAAOpmG,EAAMwtQ,WAAW7kN,EAAIxX,OAChHs8N,EAAar6O,IAAMq6O,EAAar6O,IAAMq6O,EAAar6O,IAAMA,EACzDq6O,EAAa5L,aAAe4L,EAAa5L,aAAe4L,EAAa5L,aAAel5M,EAEpF3oD,EAAM0pQ,YAAc,CAChBhqH,QAASA,EAASvsH,OAAQw1B,EAAK5zC,MAAO04P,EAAa14P,MAAOs0C,aAAcokN,EAAapkN,aAAchyB,SAAUpuB,EAC7Gy0N,UAAW/hO,SAAS8xQ,EAAannK,KAAKp/F,aAAa,QAAwB,IAC3E+jD,eAAgBwiN,EAAaxiN,gBAE7BwiN,EAAannK,KAAK1kG,UAAUkB,SAAS,iBACrC9C,EAAM0tQ,WAAY,EAClBD,EAAannK,KAAK1kG,UAAUC,OAAO,gBAEvC0tC,EAAKqyD,QAAS,EACdryD,EAAKywG,iBACAzwG,EAAKyrK,qBAAwBzrK,EAAKg1L,oBACnCh1L,EAAK0wG,UAAUjgJ,EAAM0pQ,YAAYryO,UAAU,GAE/Cr3B,EAAM62B,SAASo1B,OAAOwhN,GACtBztQ,EAAMuyB,OAAOrc,OAAO,OAA8Bu3P,GAClDztQ,EAAM89D,KAAO,gBAAO,IAAMvuB,EAAKxvC,QAAQ+H,GAAK,WAAYynC,EAAKxvC,SAC7DwvC,EAAKqwG,WAAW0mH,oBAAoB,CAAC39M,IACrC3oD,EAAMuyB,OAAOxyB,QAAQ2I,cAAc,gBAAgBnF,MAAMC,QAAU,cAG3EimQ,EAAU3sQ,UAAU0gO,WAAa,SAAUnmM,EAAU0X,EAAOh6B,GACxD,IAAIw6B,EAAO34C,KAAK27B,OACZo2B,EAAMpZ,EAAK4Y,iBAAiBpZ,GAC5B9lC,EAAQsmC,EAAKksG,sBAAsB1sG,GACvC,GAAI4Z,IAAQA,EAAIlC,cAAgBkC,EAAIwyC,aAAc,CAC9C,IAAIumK,EAAO,eAAwB9qQ,KAAK27B,OAAQo2B,EAAKtxB,EAAUpuB,GAC3D0kQ,EAAWp+N,EAAK8vG,oBAAoBqiH,EAAK1jP,cAAc9W,aAAa,aACxE,GAAIqoC,EAAKqyD,SACH+rK,EAASriN,YAAev2C,aAAiBE,OAAS04P,EAASx+O,KAAK,GAAK4f,KAAWh6B,GAC5EA,aAAiBE,MAAS,IAAIA,KAAK04P,EAASx+O,KAAK,GAAK4f,IAAQ7gC,aAAe,IAAI+G,KAAKF,GAAO7G,aAClGy/P,EAASriN,YAAev2C,aAAiBE,OAAS04P,EAASriN,QAAQ,GAAKvc,KAAWh6B,GAC9EA,aAAiBE,MAAS,IAAIA,KAAK04P,EAASriN,QAAQ,GAAKvc,IAAQ7gC,aAAe,IAAI+G,KAAKF,GAAO7G,YAAe,CACrHtX,KAAK6jP,UAAUinB,EAAM/4M,EAAKglN,EAAU54P,GACpC,IAAI+/K,EAAel+L,KAAK27B,OAAOs2I,eAAiBjyK,KAAK27B,OAAOs2I,cAAcksB,eACtEn+L,KAAK27B,OAAOs2I,cAAcksB,cAAcpwL,QAC5C,IAAM/N,KAAK27B,OAAO5tB,SAAW/N,KAAK27B,OAAOkpL,oBAAwB3mB,GAC7Dl+L,KAAK27B,OAAOs2I,cAAcksB,cAAc0mB,qBAAwB9yJ,EAAIzhB,SAAU,CAC9E,IAAIy0K,EAAY/kN,KACZg3Q,EAAeh3Q,KAAKi3Q,WACxBlyD,EAAUppL,OAAOgsH,iBAAgB,WAC7Bo9D,EAAUppL,OAAO9tB,QAAQ,QAAsB,CAC3C6hG,KAAMsnK,GAAgBlM,EAAMvuO,OAAQw1B,EAAKx5B,KAAMw+O,EAASriN,kBAI1D10D,KAAK27B,OAAO5tB,SAAWmwL,IAAiBnsI,EAAIzhB,UAClDtwC,KAAK27B,OAAOgsH,kBACZ3nJ,KAAK27B,OAAO9tB,QAAQ,QAAsB,CACtC6hG,KAAM1vG,KAAKi3Q,YAAcnM,EAAMvuO,OAAQw1B,EAAKx5B,KAAMw+O,EAASriN,WAI/D10D,KAAK27B,OAAO9tB,QAAQ,QAAsB,CACtC6hG,KAAM1vG,KAAKi3Q,YAAcnM,EAAMvuO,OAAQw1B,EAAKx5B,KAAMw+O,EAASriN,aAM/Em+M,EAAU3sQ,UAAUgxQ,WAAa,SAAUn7F,EAAQ5jI,EAAOh6B,GAUtD,GATK49J,EAAOrnH,UACRqnH,EAAOrnH,QAAU,eAAO,GAAI,GAAIqnH,EAAOxjJ,MAAM,IAE5C,eAAkB4f,KACE,kBAAVh6B,IACPA,EAAQne,KAAK27B,OAAO7qB,SAASqN,IAEjC,OAASmH,SAAS6yB,EAAOh6B,EAAO49J,EAAOrnH,UAEvCqnH,EAAOxjJ,KAAK,GAAK4f,KAAWh6B,EAAO,CACnC,IAAI/J,EAAOpU,KAAK27B,OAAO41B,iBAAiBpZ,GAAO/jC,KACjC,SAATA,GAA4B,aAATA,EAChB,IAAIiK,KAAK09J,EAAOxjJ,KAAK,GAAK4f,IAAQ7gC,aAAe,IAAI+G,KAAKF,GAAO7G,aACjEykK,EAAO+4F,SAAU,GAIrB/4F,EAAO+4F,SAAU,IAI7BjC,EAAU3sQ,UAAUsjP,UAAY,SAAUn3O,EAAOkmB,GAE7C,IADA,IAAIzd,EAAOpV,OAAOoV,KAAKyd,GACd9kB,EAAK,EAAG6sE,EAASxlE,EAAMrH,EAAK6sE,EAAO55E,OAAQ+M,IAAM,CACtD,IAAIs+C,EAAMuuB,EAAO7sE,GACjBzT,KAAK4mO,WAAWv0N,EAAO0/C,EAAKx5B,EAAK,GAAKw5B,MAG9C8gN,EAAU3sQ,UAAU0wQ,WAAa,SAAUr8N,GACvC,IAAIisL,EAAOxmO,KAAK27B,OAAOg9L,oBAAoBp+K,GAAOv6C,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,OAOpF,OANK,eAAkB1G,KAAK27B,OAAOuyE,iBAAoB,eAAkBluG,KAAK27B,OAAOwyE,YACjFq4H,IAEAxmO,KAAK27B,OAAOyyE,iBACZo4H,IAEGA,GAEXqsC,EAAU3sQ,UAAU29O,UAAY,SAAU/1C,EAAIvxK,EAAQw/I,EAAQ59J,GAC1D,IAAIuxF,EAAO,IAAI,OAAa1vG,KAAK27B,OAAQ37B,KAAK21C,gBAC9Cx3B,EAAwB,WAAhBoe,EAAOnoB,MAAsB,eAAkB+J,GAA6BA,EAApBzR,WAAWyR,GACvE49J,IACA/7K,KAAKk3Q,WAAWn7F,EAAQx/I,EAAO4b,MAAOh6B,GACtC,gBAAmB49J,EAAQ/7K,KAAK27B,OAAOqb,uBAAwB+kI,EAAOrnH,UAE1E,IACIttC,EACA0/M,EAFAqwC,EAAUp7F,EAASA,EAAOvsE,WAAQr+F,EAGlCnR,KAAK27B,OAAO5tB,UACZqZ,EAAgB0mL,EAAG1mL,cACnB0/M,EAAYh5B,EAAGg5B,WAEnB,IAAIz0N,EAAQ,EACR0pK,GACArsE,EAAKm0I,UAAU/1C,EAAIqpE,EAAQn3Q,KAAK42Q,WAAWr6O,EAAOge,KAAOloC,GAAQ0pK,EAAOrnH,QAAS,CAAE,MAAS10D,KAAK42Q,WAAWr6O,EAAOge,OAEnHv6C,KAAK27B,OAAO5tB,SACZ/N,KAAKi3Q,WAAa7vP,EAAcooF,MAAMzqG,SAAS+hO,EAAUxvN,WAAY,KACrE8P,EAAcooF,MAAMzqG,SAAS+hO,EAAUxvN,WAAY,KAAKtM,UAAU0G,IAAI,gBAGtEo8L,EAAG9iM,UAAU0G,IAAI,eAErBo8L,EAAG9iM,UAAU0G,IAAI,eACjB1R,KAAK27B,OAAOrc,OAAO,QAAuB,KAE9CuzP,EAAU3sQ,UAAUywQ,YAAc,SAAUnnK,EAAOn9F,GAC/C,IAAIm0N,EAAO,EACPxmO,KAAK27B,OAAOod,eAAiB/4C,KAAK27B,OAAOqd,cAAc1b,UACvDkpM,EAAOxmO,KAAK27B,OAAOqd,cAAc1b,QAAQ52B,QAExC,eAAkB1G,KAAK27B,OAAOuyE,iBAAoB,eAAkBluG,KAAK27B,OAAOwyE,YACjFq4H,IAEAxmO,KAAK27B,OAAOyyE,iBACZo4H,IAEJ,IAAK,IAAI3kO,EAAI,EAAGA,EAAI2tG,EAAM9oG,OAAQ7E,IAAK,CACnC,IAAIszN,EAAWpwN,SAASyqG,EAAMzqG,SAASlD,EAAEyV,WAAY,KAAKhH,aAAa,QAAwB,IAC/F,GAAI6kN,IAAa9iN,EAAQm0N,EACrB,OAAO3kO,EAGf,OAAQ,GAEZgxQ,EAAU3sQ,UAAUstQ,gBAAkB,WAClC,IAAI76N,EAAO34C,KAAK27B,OACZy7O,EAAez+N,EAAKxvC,QAAQgf,iBAAiB,kBAC7CkvP,EAAyC,IAAxBD,EAAa1wQ,OAClC,GAAI2wQ,GAAkBr3Q,KAAK40Q,UAAYj8N,EAAKqyD,OAAQ,CAEhD,IADA,IAAImrK,EAASn2Q,KAAKo2Q,iBACTrvQ,EAAI/G,KAAK8yQ,YAAYhsC,UAAW//N,EAAI4xC,EAAKiX,aAAalpD,OAAQK,IAAK,CACxE,GAAI4xC,EAAKqyD,OACL,OAEJ,IAAI34F,EAAQrS,KAAKq2Q,qBAAqBr2Q,KAAK8yQ,YAAYhsC,UAAY,GAAG,GAAM,GACxE/0K,EAAMpZ,EAAKiX,aAAa7qD,SAASsN,EAAMiF,WAAY,KACvD,GAAIy6C,EAAK,CACL,GAAgD,WAA5C/xD,KAAK27B,OAAOm2E,aAAay4J,eACzBvqQ,KAAKspP,SAAS6sB,EAAQpkN,EAAI5Z,OAAO,OAEhC,CACD,IAAI3sB,EAAO,CAAEnZ,MAAO,EAAGkqB,OAAQw1B,GAC/B/xD,KAAK27B,OAAOrc,OAAO,QAAsBkM,GACzCxrB,KAAKspP,SAAS99N,EAAKnZ,MAAO0/C,EAAI5Z,OAAO,GAEzCn4C,KAAKupP,YAGR5wM,EAAKqyD,SACNhrG,KAAK40Q,SAAU,QAGlB,IAAKyC,GAAkBr3Q,KAAK40Q,UAAYj8N,EAAKqyD,OAAQ,CAEtD,GAAyC,WAArCryD,EAAKm5D,aAAay4J,eAA6B,CAC/C,IAAI71M,EAAU10D,KAAKypP,kBACN9wM,EAAKi/H,wBAAwBlxK,OAASguD,EAAQ,QAAyBhuD,OAExF,IAASK,EAAI,EAAGA,EAAIqwQ,EAAa1wQ,OAAQK,IAAK,CAC1C,GAAK4xC,EAAKqyD,OAcN,MAbA,IAAK,IAAIvsE,EAAI,EAAGA,EAAIz+B,KAAKmzQ,iBAAiBzsQ,OAAQ+3B,IAAK,CACnD,GAAIka,EAAKqyD,OACL,MAE2J,KAAtJosK,EAAaryQ,SAASgC,EAAEuQ,WAAY,KAAK6Q,iBAAiB,mBAAmBnoB,KAAKmzQ,iBAAiBpuQ,SAAS05B,EAAEnnB,WAAY,KAAKuwM,SAASn3M,YAC7I1Q,KAAKspP,SAASvkP,SAASqyQ,EAAaryQ,SAASgC,EAAEuQ,WAAY,KAAKhH,aAAa,iBAAkB,IAAKtQ,KAAKmzQ,iBAAiBpuQ,SAAS05B,EAAEnnB,WAAY,KAAK6gC,OAClJn4C,KAAKg0Q,mBACLh0Q,KAAKupP,aASpB5wM,EAAKqyD,SACNhrG,KAAK40Q,SAAU,KAI3B/B,EAAU3sQ,UAAUoxQ,eAAiB,WACjC,IAAI9rP,EAAOxrB,KAAKu3Q,mBAChB/rP,EAAKrN,MAAQqN,EAAK4a,eACd5a,EAAKrN,OAAUne,KAAK8yQ,YAAYv2O,OAAO4jM,iBACvCngO,KAAKw3Q,gBAAgBhsP,EAAMA,EAAKkkF,KAAKtoF,cAAeoE,EAAK+Q,QAAQ,EAAjEv8B,CAAuEwrB,IAG/EqnP,EAAU3sQ,UAAUqxQ,iBAAmB,WACnC,IAAI5+N,EAAO34C,KAAK27B,OAChB37B,KAAK27B,OAAOxyB,QAAQ6B,UAAUC,OAAO,aACrC,IAAIsxB,EAASv8B,KAAK8yQ,YAAYv2O,OAC1B4+B,EAAM,GACVA,EAAI5+B,EAAO4b,OAAS,eAAU5b,EAAO4b,MAAOn4C,KAAK8yQ,YAAYhqH,SAC7D,IAAIgmH,EAAan2N,EAAKqwG,WAAWonH,qBAAqBpwQ,KAAKknE,KAAM/L,GAC7Ds8M,EAAkB,eAAO,GAAI3I,GACjCA,EAAa,eAAO,GAAIA,EAAY9uQ,KAAK8yQ,YAAYhqH,SACrD,IAAI3qI,EAAQ,eAAUoe,EAAO4b,MAAOs/N,GAC/B,eAAkBl7O,EAAO4b,QAAW,gBAAYh6B,IACjD,gBAASoe,EAAO4b,MAAOh6B,EAAO2wP,GAElC,IAAItjP,EAAO,CACPgmC,WAAYj1B,EAAO4b,MACnBh6B,MAAO,eAAUoe,EAAO4b,MAAO22N,GAC/BhmH,QAAS9oJ,KAAK8yQ,YAAYhqH,QAC1BvsH,OAAQA,EACR6J,cAAepmC,KAAK8yQ,YAAY30P,MAChCs0C,aAAczyD,KAAK8yQ,YAAYrgN,aAC/Bp+C,QAAQ,GAIZ,OAFAmX,EAAKkkF,KAAO1vG,KAAKknE,KAAK9/C,cACtBoE,EAAKy/O,aAAe1uO,EACb/Q,GAEXqnP,EAAU3sQ,UAAUqjP,SAAW,SAAUmuB,GACrC,IAAI13Q,KAAKkzQ,iBAAoBlzQ,KAAKknE,KAAlC,CAGA,IAAIvuB,EAAO34C,KAAK27B,OAChB,GAAK+7O,GAAiB/+N,EAAKqyD,SAAUhrG,KAAKg0Q,kBAA1C,CAGAh0Q,KAAKkzQ,iBAAkB,EACvB,IAAI1nP,EAAOxrB,KAAKu3Q,mBACZ7zO,EAAKlY,EAAKkkF,KAAKtoF,cACf2qC,EAAMvmC,EAAK+Q,OACf/Q,EAAKkkF,KAAKl/F,gBAAgB,cACrBknQ,EAKD13Q,KAAKw3Q,gBAAgBhsP,EAAMkY,EAAIquB,EAA/B/xD,CAAoCwrB,IAJpCmtB,EAAK9qC,QAAQ,OAAiB2d,EAAMxrB,KAAKw3Q,gBAAgBhsP,EAAMkY,EAAIquB,IACnEpZ,EAAKr5B,OAAO,OAAkB,CAAE4sP,QAASlsQ,KAAKknE,WAMtD2rM,EAAU3sQ,UAAUsxQ,gBAAkB,SAAUG,EAAcj0O,EAAInH,EAAQq7O,GACtE,IAAIxuQ,EAAQpJ,KACZ,OAAO,SAAU23Q,GACb,IAAIh/N,EAAOvvC,EAAMuyB,OAIjB,GAHAg8O,EAAajoK,KAAOioK,EAAajoK,KAAOioK,EAAajoK,KAAOtmG,EAAM89D,KAAK9/C,cACvEuwP,EAAa1M,aAAe0M,EAAa1M,aAAe0M,EAAa1M,aAAe1uO,EAEhFo7O,EAAatjQ,QAEb,GADAjL,EAAM8pQ,iBAAkB,EACpB9pQ,EAAM6pQ,SAAU,CAEhB,GADA7pQ,EAAM6pQ,UAAW,EACb7pQ,EAAM0pQ,YAAYryO,WAAar3B,EAAMiJ,OAASjJ,EAAM0pQ,YAAYv2O,OAAO4b,QAAU/uC,EAAM+uC,MACvF,OAEJ/uC,EAAMqtQ,eAAertQ,EAAMiJ,MAAOjJ,EAAM+uC,MAAO/uC,EAAM8iG,YAP7D,CAWAvzD,EAAKqwG,WAAWwnH,eAAe,CAACj0O,IAChCoc,EAAKqyD,QAAS,EACdryD,EAAKqwG,WAAWynH,cAChBrnQ,EAAMuyB,OAAOrc,OAAO,QAAuB,IAC3C,IAAIy8J,EAASpjI,EAAK8vG,oBAAoB/kH,EAAGpzB,aAAa,aAatD,GAZAlH,EAAMy6O,UAAU8zB,EAAajoK,KAAMnzE,EAAQw/I,EAAQ47F,EAAax5P,OAC5D/U,EAAMuyB,OAAO5tB,UACb4pQ,EAAajoK,KAAOtmG,EAAM6tQ,YAE9B,gBAAY,CAACvzO,GAAK,CAAC,OAAoB,eACvC,gBAAY,CAACi0O,EAAajoK,MAAO,CAAC,oBAAqB,iBAClD,eAAkBioK,EAAax5P,QAAUw5P,EAAax5P,MAAM7G,cAC3D,eAAkBlO,EAAM0pQ,YAAY30P,OAAmC,GAA1B/U,EAAM0pQ,YAAY30P,OAAY7G,aAAelO,EAAM0tQ,WAC9F,eAAkBa,EAAax5P,QAAU,eAAkB49J,EAAOxjJ,KAAKgE,EAAO4b,SAC9E,eAAkB/uC,EAAM0pQ,YAAY30P,SAAWw5P,EAAajoK,KAAKtoF,cAAcpc,UAAUkB,SAAS,mBACtGyrQ,EAAajoK,KAAK1kG,UAAUC,OAAO,eAEnC,eAAkB2sQ,GAAmB,CACrC,IAAI35E,EAAkBtlJ,EAAK5qC,SAAWwuB,EAAO+T,UAAyC,kBAArB/T,EAAe,SAC5E2hK,EAAevlJ,EAAKs5H,eAAiBt5H,EAAKs5H,cAAcksB,eACrDxlJ,EAAKs5H,cAAcksB,cAAcpwL,QACpCkwL,GAAmBC,EACfvlJ,EAAKksK,mBACLlsK,EAAKgvG,iBAAgB,WACjBhvG,EAAK9qC,QAAQ,OAAkB8pQ,OAInCh/N,EAAKgvG,kBACLhvG,EAAK9qC,QAAQ,OAAkB8pQ,IAInCh/N,EAAK9qC,QAAQ,OAAkB8pQ,GAiBvC,GAdAh/N,EAAKr5B,OAAO,QAAuB,IACnClW,EAAM0tQ,WAAY,EACd1tQ,EAAMuyB,OAAOy0B,WAAW1pD,OAAS,IAC3B0C,EAAMuyB,OAAO5tB,SAAW3E,EAAMuyB,OAAO2zB,OACvClmD,EAAMuyB,OAAOrc,OAAO,QAA8B,IAElDlW,EAAMuyB,OAAOqd,cAAc1b,QAAQ52B,OAAS,IAAM0C,EAAM2qQ,SAAS3qQ,EAAM0pQ,YAAYryO,WACnFr3B,EAAMuyB,OAAOrc,OAAO,QAAwB,KAE5ClW,EAAMuyB,OAAO5tB,SAAW3E,EAAMuyB,OAAO2zB,QACrClmD,EAAMuyB,OAAOrc,OAAO,QAA8B,KAG1DlW,EAAM8pQ,iBAAkB,EACpB9pQ,EAAM6pQ,SAAU,CAEhB,GADA7pQ,EAAM6pQ,UAAW,EACb7pQ,EAAM0pQ,YAAYryO,WAAar3B,EAAMiJ,OAASjJ,EAAM0pQ,YAAYv2O,OAAO4b,QAAU/uC,EAAM+uC,OAAS/uC,EAAMiqQ,oBACtG,OAEJ,IAAIthN,EAAMpZ,EAAK4Y,iBAAiBnoD,EAAM+uC,OAClC4Z,IAAQA,EAAIwyC,eAAkBxyC,EAAIwyC,cAAgB5rD,EAAKitG,YAAYyuH,QAChE17N,EAAKitG,YAAYyuH,OAAO79C,WAAWh5L,KAAKp0B,EAAMorQ,cAC9C77N,EAAKitG,YAAYyuH,OAAO79C,WAAWh5L,KAAKp0B,EAAMorQ,aAAaxpQ,UAAUkB,SAAS,mBACjF9C,EAAMqtQ,eAAertQ,EAAMiJ,MAAOjJ,EAAM+uC,MAAO/uC,EAAM8iG,OAGzD0rK,GACAj/N,EAAKr5B,OAAO,QAAqB,OAI7CuzP,EAAU3sQ,UAAUquQ,0BAA4B,WAC5C,IAAIsD,EAAwB,GACxBl/N,EAAO34C,KAAK27B,OACZm8O,EAAkBn/N,EAAKitG,YAAYyuH,OAAO79C,WAAW1kN,cAAc,sBACvE,GAAIgmQ,EAAiB,CACjB,IAAIp0O,EAAKo0O,EAAgB1wP,cACrBqZ,EAAW,GAAGntB,MAAMjK,KAAKrJ,KAAK27B,OAAOiqH,YAAYyuH,OAAO79C,WAAWh5L,MAAMzzB,QAAQ25B,GACjFojM,EAAY,GAAGxzN,MAAMjK,KAAKq6B,EAAG8rE,OAAOzlG,QAAQ+tQ,GAChDD,EAAwB,CAACp3O,EAAUqmM,GAEvC,OAAO+wC,GAEXhF,EAAU3sQ,UAAUwwQ,eAAiB,SAAUrkQ,GAC3C,IAAImqB,EAAMx8B,KAAK27B,OAAO8sH,oBAAoBzoJ,KAAK27B,OAAOurM,cAAcniO,SAASsN,EAAMiF,WAAY,KAAKhH,aAAa,aACjH,OAAOksB,EAAIk4B,QAAUl4B,EAAIk4B,QAAUl4B,EAAIjE,MAE3Cs6O,EAAU3sQ,UAAU0/N,eAAiB,SAAU7yN,GAC3C,GAAI/S,KAAKozQ,cAA8B,QAAbrgQ,EAAEqT,QAAiC,aAAbrT,EAAEqT,SAA0BpmB,KAAK27B,OAAOqvE,OAAS,CAC7F,IAAIryD,EAAO34C,KAAK27B,OACZw6O,EAASn2Q,KAAKo2Q,iBACde,EAAU,gBAAapkQ,EAAEzM,OAAQ,QACrC,GAAItG,KAAKozQ,aAAgB+D,IAAYn3Q,KAAK27B,OAAO5tB,QAAU,CACvD,IAAI2hG,OAAO,EAIX,GAHIynK,IACAznK,EAAOynK,EAAQrlQ,cAAc,aAE7B9R,KAAKozQ,aAAe1jK,EAAM,CAC1B,IAAIomK,EAAiB91Q,KAAK27B,OAAOwqH,oBAC7B3lH,EAA2B,QAAbztB,EAAEqT,OAAmB0vP,EAAepvQ,OAAS,EAAI,GAC/D1G,KAAKozQ,aACF0C,EAAe/wQ,SAASy7B,EAAYlpB,WAAY,KAAK6gC,QAAUu3D,EAAKp/F,aAAa,MAAMgD,MAAMtT,KAAK27B,OAAOxyB,QAAQ+H,GAAGxK,WACnH1G,KAAK8yQ,YAAYryO,WAAa01O,GAAuB,QAAbpjQ,EAAEqT,QACD,QAArCuyB,EAAKm5D,aAAay4J,gBAClB5xN,EAAKm5D,aAAay4J,eAAiB,SACnCvqQ,KAAKopP,YACLzwM,EAAKm5D,aAAay4J,eAAiB,OAGnCvqQ,KAAKopP,YAETppP,KAAKozQ,aAAc,GAGnBpzQ,KAAKupP,gBAW7BspB,EAAU3sQ,UAAU6xQ,qBAAuB,WACnC/3Q,KAAKg0Q,oBACLh0Q,KAAK27B,OAAOrc,OAAO,QAAoB,IACvCtf,KAAK27B,OAAOqvE,QAAS,EACrBhrG,KAAKizQ,UAAW,EAChBjzQ,KAAK6zQ,sBAAmB1iQ,EACxBnR,KAAK82Q,WAAY,IAGzBjE,EAAU3sQ,UAAUkwQ,eAAiB,WACjC,IAAI1hN,EAAU10D,KAAKypP,kBACnB,OAAOzpP,KAAK27B,OAAOi8I,wBAAwBlxK,OAASguD,EAAQ,QAAuBhuD,OAC/EguD,EAAQ,QAAyBhuD,OAAS,GAE3CmsQ,EA1jCmB,GCnB1B,EAAwC,WACxC,IAAIrtQ,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAmBxCyvO,EAA4B,SAAU7sO,GAEtC,SAAS6sO,EAAW95M,EAAQga,EAAgB1V,GACxC,IAAI72B,EAEJR,EAAOS,KAAKrJ,KAAM27B,EAAQga,IAAmB31C,KAI7C,OAHAoJ,EAAMuyB,OAASA,EACfvyB,EAAMusC,eAAiBA,EACvBvsC,EAAM62B,SAAWA,EACV72B,EAwBX,OAhCA,EAAUqsO,EAAY7sO,GAUtB6sO,EAAWvvO,UAAUgjJ,UAAY,WAE7BtgJ,EAAO1C,UAAUgjJ,UAAU7/I,KAAKrJ,OAEpCy1O,EAAWvvO,UAAUkjP,UAAY,SAAU7wN,EAAMlmB,GAE7CzJ,EAAO1C,UAAUkjP,UAAU//O,KAAKrJ,KAAMu4B,EAAMlmB,IAEhDojO,EAAWvvO,UAAUsvD,QAAU,WAE3B5sD,EAAO1C,UAAUsvD,QAAQnsD,KAAKrJ,OAElCy1O,EAAWvvO,UAAUsjP,UAAY,SAAUn3O,EAAOkmB,GAC9C3vB,EAAO1C,UAAUsjP,UAAUngP,KAAKrJ,KAAMqS,EAAOkmB,IAEjDk9M,EAAWvvO,UAAUojJ,aAAe,SAAU6/F,EAAW5wN,GAErD3vB,EAAO1C,UAAUojJ,aAAajgJ,KAAKrJ,KAAMmpP,EAAW5wN,IAExDk9M,EAAWvvO,UAAU+iJ,UAAY,SAAUvlH,GACvC96B,EAAO1C,UAAU+iJ,UAAU5/I,KAAKrJ,KAAM0jC,IAEnC+xM,EAjCoB,CAkC7B,G,wBCpDEuiC,EAAY,YACZC,EAAa,aACbC,EAAU,UACVC,EAAY,YACZC,EAAM,MACNC,EAAW,WACXC,EAAM,MACNC,EAAO,OACP,EAAgC,WAChC,SAASC,EAAe78O,GACpB37B,KAAKy4Q,KAAO,GACZz4Q,KAAK04Q,gBAAkB,CACnBvoP,IAAK,MACLC,MAAO,QACPC,KAAM,OACNvtB,KAAM,OACNE,OAAQ,SACRstB,OAAQ,SACRC,aAAc,mBAElBvwB,KAAK24Q,WAAa,GAClB34Q,KAAK44Q,gBAAkB,aACvB54Q,KAAK64Q,WAAY,EACjB74Q,KAAK84Q,aAAc,EACnB94Q,KAAK+4Q,YAAa,EAClB/4Q,KAAKg5Q,YAAa,EAClBh5Q,KAAKi5Q,cAAe,EACpBj5Q,KAAKk5Q,eAAgB,EACrBl5Q,KAAKm5Q,oBAAqB,EAC1Bn5Q,KAAKo5Q,eAAiB,GACtBp5Q,KAAKq5Q,gBAAkB,GACvBr5Q,KAAKs5Q,cAAe,EACpBt5Q,KAAKu5Q,YAAa,EAClBv5Q,KAAKmmL,YAAa,EAClBnmL,KAAKw5Q,WAAY,EACjBx5Q,KAAKod,QAAS,EACdpd,KAAK+uL,YAAc,6HACnB/uL,KAAKy5Q,YAAa,EAClBz5Q,KAAK05Q,aAAc,EACnB15Q,KAAK25Q,aAAc,EACnB35Q,KAAK45Q,YAAa,EAClB55Q,KAAK65Q,aAAc,EACnB75Q,KAAK85Q,YAAa,EAClB95Q,KAAK+5Q,eAAgB,EACrB/5Q,KAAKg6Q,aAAe,EACpBh6Q,KAAKi6Q,eAAiB,EACtBj6Q,KAAKk6Q,cAAgB,EACrBl6Q,KAAKm6Q,gBAAkB,EACvBn6Q,KAAKo6Q,gBAAkB,EACvBp6Q,KAAK27B,OAASA,EACd37B,KAAKq6Q,WAAar6Q,KAAKs6Q,oBACvBt6Q,KAAKu6Q,cAAqC,MAArBv6Q,KAAK27B,OAAOxd,MAAgB,IAAIE,MAAMre,KAAK27B,OAAOxd,OAAS,IAAIE,KACpFre,KAAKu6Q,cAAc94M,SAAS,GAC5BzhE,KAAKu6Q,cAAczxP,SAAS,GAC5B9oB,KAAKu6Q,cAAcnzM,WAAW,GAC9BpnE,KAAKu6Q,cAAczhN,WAAW,GAC9B94D,KAAK6f,aAAe,IAAIxB,KAAKre,KAAKu6Q,cAAc17P,cAAe7e,KAAKu6Q,cAAcz7M,WAAY9+D,KAAKu6Q,cAAc57M,UAAW3+D,KAAKu6Q,cAAcxxP,WAAY/oB,KAAKu6Q,cAAcvxP,aAAchpB,KAAKu6Q,cAActxP,cAC/MjpB,KAAKu7E,sBACLv7E,KAAK4sC,mBAixBT,OA/wBA4rO,EAAetyQ,UAAUsU,cAAgB,WACrC,MAAO,kBAEXg+P,EAAetyQ,UAAU0mC,iBAAmB,WACpC5sC,KAAK27B,OAAOkR,cAGhB7sC,KAAK27B,OAAOqR,GAAG,aAAchtC,KAAKgrL,WAAYhrL,MAC9CA,KAAK27B,OAAOqR,GAAG,mBAAoBhtC,KAAKw6Q,oBAAqBx6Q,MAC7DA,KAAK27B,OAAOqR,GAAG,eAAgBhtC,KAAKy6Q,iBAAkBz6Q,MACtDA,KAAK27B,OAAOqR,GAAG,iBAAkBhtC,KAAK06Q,mBAAoB16Q,MAC1DA,KAAK27B,OAAOqR,GAAG,eAAgBhtC,KAAKusL,aAAcvsL,QAEtDw4Q,EAAetyQ,UAAUq1E,oBAAsB,WACvCv7E,KAAK27B,OAAOkR,cAGhB7sC,KAAK27B,OAAO8e,IAAI,aAAcz6C,KAAKgrL,YACnChrL,KAAK27B,OAAO8e,IAAI,mBAAoBz6C,KAAKw6Q,qBACzCx6Q,KAAK27B,OAAO8e,IAAI,eAAgBz6C,KAAKy6Q,kBACrCz6Q,KAAK27B,OAAO8e,IAAI,iBAAkBz6C,KAAK06Q,oBACvC16Q,KAAK27B,OAAO8e,IAAI,eAAgBz6C,KAAKusL,gBAEzCisF,EAAetyQ,UAAU8kL,WAAa,SAAUytF,GAC5Cz4Q,KAAK64Q,UAAY74Q,KAAK84Q,YAAc94Q,KAAK+4Q,WAAa/4Q,KAAKg5Q,WAAah5Q,KAAKi5Q,aAAej5Q,KAAKk5Q,eAAgB,EACjHl5Q,KAAKq6Q,WAAar6Q,KAAKs6Q,oBACnBt6Q,KAAK27B,OAAOg/O,gBAAgBxqP,MAC5BnwB,KAAK04Q,gBAAgB,OAAS14Q,KAAK27B,OAAOg/O,gBAAgBxqP,KAE1DnwB,KAAK27B,OAAOg/O,gBAAgBvqP,QAC5BpwB,KAAK04Q,gBAAgB,SAAW14Q,KAAK27B,OAAOg/O,gBAAgBvqP,OAE5DpwB,KAAK27B,OAAOg/O,gBAAgBtqP,OAC5BrwB,KAAK04Q,gBAAgB,QAAU14Q,KAAK27B,OAAOg/O,gBAAgBtqP,MAE3DrwB,KAAK27B,OAAOg/O,gBAAgB73Q,OAC5B9C,KAAK04Q,gBAAgB,QAAU14Q,KAAK27B,OAAOg/O,gBAAgB73Q,MAE3D9C,KAAK27B,OAAOg/O,gBAAgB33Q,SAC5BhD,KAAK04Q,gBAAgB,UAAY14Q,KAAK27B,OAAOg/O,gBAAgB33Q,QAE7DhD,KAAK27B,OAAOg/O,gBAAgBrqP,SAC5BtwB,KAAK04Q,gBAAgB,UAAY14Q,KAAK27B,OAAOg/O,gBAAgBrqP,QAE7DtwB,KAAK27B,OAAOg/O,gBAAgBpqP,eAC5BvwB,KAAK04Q,gBAAgB,gBAAkB14Q,KAAK27B,OAAOg/O,gBAAgBpqP,aAAajZ,YAEpFtX,KAAK46Q,uBACL,IAAI1rE,EAAalvM,KAAKq6Q,WAAW95P,QAAQvgB,KAAK+uL,YAAa/uL,KAAK66Q,eAChE76Q,KAAKs5Q,cAAe,EACpBt5Q,KAAK24Q,WAAa34Q,KAAKq6Q,WAAW95P,QAAQvgB,KAAK+uL,YAAa/uL,KAAK66Q,eACjE76Q,KAAKs5Q,cAAe,EACpBt5Q,KAAK86Q,mBAAqB96Q,KAAK24Q,WAC/B34Q,KAAKy4Q,KAAOz4Q,KAAKomC,cAAgB8oK,EACjClvM,KAAK27B,OAAO9e,gBAAkB7c,KAAKy4Q,KAC/Bz4Q,KAAK27B,OAAOxd,QACZne,KAAKw5Q,WAAY,EACjBx5Q,KAAKod,OAASq7P,EAAKr7P,OACnBpd,KAAK+6Q,oBAGbvC,EAAetyQ,UAAU00Q,qBAAuB,WAC5C56Q,KAAKmgB,KAAO,IAAI,OAAKngB,KAAK27B,OAAOze,WAAYld,KAAK04Q,gBAAiB14Q,KAAK27B,OAAOzb,QAC/ElgB,KAAKg7Q,aAAet1Q,OAAOoV,KAAK9a,KAAK04Q,iBACrC,IAAK,IAAI3xQ,EAAI,EAAGA,EAAI/G,KAAKg7Q,aAAat0Q,OAAQK,IAC1C/G,KAAK04Q,gBAAgB14Q,KAAKg7Q,aAAaj0Q,GAAGuQ,YACtCtX,KAAKmgB,KAAKC,YAAYpgB,KAAKg7Q,aAAaj0Q,GAAGuQ,aAGvDkhQ,EAAetyQ,UAAUs0Q,oBAAsB,WAC3C,IAAI7yP,EAAQ3nB,KAAK27B,OAAOje,aAAa4I,eACN,eAA3BtmB,KAAK27B,OAAOze,YACRyK,IAAU3nB,KAAK24Q,WAAWjyQ,QAAU1G,KAAKy4Q,OAASz4Q,KAAK27B,OAAOje,aAAaS,QAC3EwJ,EAAQ,GAGhB,IAAK,IAAI5gB,EAAI4gB,EAAO8W,EAAI9W,EAAQ,EAAG5gB,EAAI/G,KAAK24Q,WAAWjyQ,QAAU+3B,GAAK,EAAG13B,IAAK03B,IAAK,CAC/E,GAAI13B,EAAI/G,KAAK24Q,WAAWjyQ,SAAgE,IAAtD1G,KAAK44Q,gBAAgB7uQ,QAAQ/J,KAAK24Q,WAAW5xQ,IAE3E,YADA/G,KAAK45F,aAAa55F,KAAK24Q,WAAW5xQ,IAGtC,GAAI03B,GAAK,IAA2D,IAAtDz+B,KAAK44Q,gBAAgB7uQ,QAAQ/J,KAAK24Q,WAAWl6O,IAEvD,YADAz+B,KAAK45F,aAAa55F,KAAK24Q,WAAWl6O,MAK9C+5O,EAAetyQ,UAAU60Q,gBAAkB,WACvC/6Q,KAAKu6Q,cAAgB,IAAIl8P,MAAMre,KAAK27B,OAAOxd,OAC3Cne,KAAK64Q,UAAY74Q,KAAK84Q,YAAc94Q,KAAK+4Q,WAAa/4Q,KAAKg5Q,WAAah5Q,KAAKi5Q,aAAej5Q,KAAKk5Q,eAAgB,EACjHl5Q,KAAK8qL,cACA9qL,KAAKod,QACNpd,KAAKw6Q,uBAGbhC,EAAetyQ,UAAU0zF,aAAe,SAAUqhL,GAG9C,IAFA,IAAItzP,GAAS,EACTC,EAAM,EACD7gB,EAAI,EAAGA,EAAI/G,KAAK24Q,WAAWjyQ,OAAQK,IACpC/G,KAAK24Q,WAAW5xQ,KAAOk0Q,IACvBrzP,EAAM7gB,EAAI,GACK,IAAX4gB,IACAA,EAAQ5gB,IAIhB4gB,EAAQ,IACRA,EAAQ,GAEZ3nB,KAAK27B,OAAOje,aAAaqrK,kBAAkBphK,EAAOC,IAEtD4wP,EAAetyQ,UAAUw0Q,mBAAqB,SAAUlvP,GAEpD,GADAxrB,KAAKg6Q,aAAeh6Q,KAAKi6Q,eAAiBj6Q,KAAKk6Q,cAAgBl6Q,KAAKm6Q,gBAAkBn6Q,KAAKo6Q,gBAAkB,EAC1F,WAAf5uP,EAAKzY,EAAElP,IAAX,CAIA,IAAM2nB,EAAKzY,EAAEq7E,SAAW5iE,EAAKzY,EAAEk6E,UAAazhE,EAAKzY,EAAElP,MAAQm0Q,GAAaxsP,EAAKzY,EAAElP,MAAQo0Q,GAChFzsP,EAAKzY,EAAElP,MAAQw0Q,GAAY7sP,EAAKzY,EAAElP,MAAQu0Q,GAAO5sP,EAAKzY,EAAEqT,SAAWiyP,GACtE7sP,EAAKzY,EAAElP,MAAQy0Q,GAAO9sP,EAAKzY,EAAElP,MAAQ00Q,GAAO,CAC5C,IAAI5wP,EAAQ3nB,KAAK27B,OAAOje,aAAa4I,eACjCsB,EAAM5nB,KAAK27B,OAAOje,aAAa6I,aAC/BsB,EAAW7nB,KAAK27B,OAAOje,aAAaS,MAAMzX,OAC9C,GAAe,IAAVihB,GAAeC,IAAQC,IAAc2D,EAAKzY,EAAElP,MAAQu0Q,GAAO5sP,EAAKzY,EAAEqT,SAAWiyP,GAAW,CACzF,IAAIhmQ,EAAQmZ,EAAKzY,EAAEqT,SAAWiyP,EAAWzwP,EAAM,EAC/C5nB,KAAK27B,OAAOje,aAAa4I,eAAiBtmB,KAAK27B,OAAOje,aAAa6I,aAAelU,EAEtF,GAAImZ,EAAKzY,EAAElP,MAAQy0Q,GAAO9sP,EAAKzY,EAAElP,MAAQ00Q,EAAM,CAC3C,IAAI5hM,EAAQnrD,EAAKzY,EAAElP,MAAQy0Q,EAAMzwP,EAAW,EAC5C7nB,KAAK27B,OAAOje,aAAa4I,eAAiBtmB,KAAK27B,OAAOje,aAAa6I,aAAeowD,EAEtF32E,KAAKk7Q,kBAAkB1vP,EAAKzY,EAAElP,MAAQm0Q,GAAaxsP,EAAKzY,EAAEqT,SAAWiyP,GAAY7sP,EAAKzY,EAAElP,MAAQy0Q,GAEpG,IAAM9sP,EAAKzY,EAAEq7E,SAAW5iE,EAAKzY,EAAEk6E,UAAazhE,EAAKzY,EAAElP,MAAQq0Q,GAAW1sP,EAAKzY,EAAElP,MAAQs0Q,GAAY,CACzFxwP,EAAQ3nB,KAAK27B,OAAOje,aAAa4I,eAArC,IACI60P,EAAa,IAC6C,IAA1Dn7Q,KAAK44Q,gBAAgB7uQ,QAAQ/J,KAAK24Q,WAAWhxP,MAC7CwzP,EAAan7Q,KAAK24Q,WAAWhxP,IAEjC3nB,KAAKo7Q,eAAe5vP,EAAKzY,EAAElP,MAAQs0Q,GACnC,IAAIjpE,EAAalvM,KAAKq6Q,WAAW95P,QAAQvgB,KAAK+uL,YAAa/uL,KAAK66Q,eAChE76Q,KAAKs5Q,cAAe,EACpBt5Q,KAAK24Q,WAAa34Q,KAAKq6Q,WAAW95P,QAAQvgB,KAAK+uL,YAAa/uL,KAAK66Q,eACjE76Q,KAAKs5Q,cAAe,EACpBt5Q,KAAK86Q,mBAAqB96Q,KAAK24Q,WAC/B34Q,KAAKomC,cAAgB8oK,EACrBlvM,KAAK27B,OAAOje,aAAaS,MAAQ+wL,EACjC,IAAK,IAAInoM,EAAI,EAAGA,EAAI/G,KAAK24Q,WAAWjyQ,OAAQK,IACxC,GAAIo0Q,IAAen7Q,KAAK24Q,WAAW5xQ,GAAI,CACnC4gB,EAAQ5gB,EACR,MAGR/G,KAAK27B,OAAOje,aAAa4I,eAAiBqB,EAC1C3nB,KAAKw6Q,4BAxCLx6Q,KAAK25Q,aAAc,GA2C3BnB,EAAetyQ,UAAUm1Q,UAAY,WACjC,IAAIA,EAAYr7Q,KAAK27B,OAAOxe,WAAand,KAAKw5Q,UAC9C,OAAO6B,GAEX7C,EAAetyQ,UAAUo1Q,gBAAkB,WACvC,IAAI3zP,EAAQ3nB,KAAK27B,OAAOje,aAAa4I,eACjC4oL,EAAalvM,KAAK27B,OAAOje,aAAaS,MACtCo9P,EAAcv7Q,KAAKomC,cAAci1F,UAAU,EAAG1zG,EAAQ3nB,KAAKomC,cAAc1/B,OAASwoM,EAAWxoM,QAC7F80Q,EAAStsE,EAAW7zE,UAAU,EAAG1zG,GACjC8zP,EAAe,IAAIp9P,MAAMre,KAAKu6Q,eAC9Bt8M,EAAU,IAAI5/C,KAAKo9P,EAAa58P,cAAe48P,EAAa38M,WAAa,EAAG,GAAGH,UACnF,GAAoC,IAAhC48M,EAAYxxQ,QAAQyxQ,KAAoC,IAAlBA,EAAO90Q,QAC7C1G,KAAK86Q,mBAAmBU,EAAO90Q,OAAS,KAAO1G,KAAK86Q,mBAAmBU,EAAO90Q,SAAU,CACxF,IAAK,IAAIK,EAAIy0Q,EAAO90Q,OAAQK,EAAIw0Q,EAAY70Q,OAAQK,IACb,KAA/B/G,KAAK86Q,mBAAmB/zQ,IAAa/G,KAAK44Q,gBAAgB7uQ,QAAQ/J,KAAK86Q,mBAAmB/zQ,KAAO,IACjG/G,KAAKy5Q,WAAaz5Q,KAAK07Q,eAAe17Q,KAAK86Q,mBAAmB/zQ,IAAI,IAG1E,GAAI/G,KAAKy5Q,WACL,OAGR,OAAQz5Q,KAAK86Q,mBAAmBnzP,EAAQ,IACpC,IAAK,IAEG,IAAIY,GAAQvoB,KAAK64Q,WAAa4C,EAAa98M,UAAUrnD,WAAW5Q,OAAS,IACpE1G,KAAKq7Q,YAAuC,GAAzBI,EAAa98M,UAAiB,GAAK55D,SAASy2Q,EAAO7zP,EAAQ,GAAI,IAIvF,GAHA3nB,KAAK45Q,WAAoC,MAAtB4B,EAAO7zP,EAAQ,GAClC3nB,KAAK27B,OAAOxe,WAAYnd,KAAK27B,OAAOxe,WAAoBnd,KAAK27B,OAAOxe,UACpEnd,KAAKw5Q,WAAYx5Q,KAAKw5Q,WAAoBx5Q,KAAKw5Q,UAC3Cr4P,MAAMoH,GACN,OAEJ,IAASxhB,EAAI,EAAGwhB,EAAO01C,EAASl3D,IAC5BwhB,EAAOxjB,SAASwjB,EAAKjR,WAAWhE,MAAM,GAAI,IAE9C,GAAIiV,GAAQ,EAAG,CAIX,GAHAkzP,EAAa/5M,QAAQn5C,GACrBvoB,KAAKmmL,WAAwC,IAA3B59J,EAAKjR,WAAW5Q,OAClC1G,KAAK6f,aAAe,IAAIxB,KAAKo9P,EAAa58P,cAAe48P,EAAa38M,WAAY28M,EAAa98M,WAC3F88M,EAAa38M,aAAe9+D,KAAKu6Q,cAAcz7M,WAC/C,OAEJ9+D,KAAK64Q,WAAY,EACjB74Q,KAAKg6Q,aAAeh6Q,KAAKg6Q,aAAe,OAGxCh6Q,KAAK64Q,WAAY,EACjB74Q,KAAKg6Q,aAAeh6Q,KAAK45Q,WAAa55Q,KAAKg6Q,aAAe,EAAIh6Q,KAAKg6Q,aAEvE,MAER,IAAK,IAEG,IAAI5pP,OAAQ,EAUZ,GARIA,EADAqrP,EAAa38M,WAAWxnD,WAAW5Q,OAAS,IAAM1G,KAAKq7Q,aAC9Cr7Q,KAAK84Q,YAA8C,IAA/B2C,EAAa38M,WAAa,GAAU,GAAK/5D,SAASy2Q,EAAO7zP,EAAQ,GAAI,IAG1F5iB,SAASy2Q,EAAO7zP,EAAQ,GAAI,IAExC3nB,KAAK27B,OAAOxe,WAAYnd,KAAK27B,OAAOxe,WAAoBnd,KAAK27B,OAAOxe,UACpEnd,KAAKw5Q,WAAYx5Q,KAAKw5Q,WAAoBx5Q,KAAKw5Q,UAC/Cx5Q,KAAK65Q,YAAqC,MAAtB2B,EAAO7zP,EAAQ,GAC9BxG,MAAMiP,GAwCN,CACD,IAAIurP,EAAe37Q,KAAK47Q,iBAAiB,4BACrCC,EAAan2Q,OAAOoV,KAAK6gQ,GAC7B37Q,KAAKo5Q,gBAAkBoC,EAAO7zP,EAAQ,GAAGL,cACzC,MAAOtnB,KAAKo5Q,eAAe1yQ,OAAS,EAAG,CAC/BK,EAAI,EACR,IADA,IACS0M,EAAK,EAAGqoQ,EAAeD,EAAYpoQ,EAAKqoQ,EAAap1Q,OAAQ+M,IAAM,CAC3DqoQ,EAAaroQ,GAC1B,GAAkE,IAA9DkoQ,EAAY50Q,GAAGugB,cAAcvd,QAAQ/J,KAAKo5Q,gBAI1C,OAHAqC,EAAah6M,SAAS16D,EAAI,GAC1B/G,KAAK84Q,aAAc,OACnB94Q,KAAKu6Q,cAAgBkB,GAGzB10Q,IAEJ/G,KAAKo5Q,eAAiBp5Q,KAAKo5Q,eAAe/9I,UAAU,EAAGr7H,KAAKo5Q,eAAe1yQ,aAxDhE,CACf,MAAO0pB,EAAQ,GACXA,EAAQrrB,SAASqrB,EAAM9Y,WAAWhE,MAAM,GAAI,IAEhD,GAAI8c,GAAS,EAAG,CAkBZ,GAjBAqrP,EAAah6M,SAASrxC,EAAQ,GAC1BA,GAAS,IAAe,GAATA,EACXpwB,KAAK+5Q,eAA0B,GAAT3pP,GACtBpwB,KAAKmmL,WAAyC,IAA5B/1J,EAAM9Y,WAAW5Q,OACnC1G,KAAK+5Q,eAAgB,GAGrB/5Q,KAAKmmL,WAAyC,IAA5B/1J,EAAM9Y,WAAW5Q,OAIvC1G,KAAKmmL,WAAyC,IAA5B/1J,EAAM9Y,WAAW5Q,OAEnC+0Q,EAAa38M,aAAe1uC,EAAQ,IACpCqrP,EAAa/5M,QAAQ,GACrB+5M,EAAah6M,SAASrxC,EAAQ,IAE9BpwB,KAAK64Q,UAAW,CAChB,IAAIkD,EAAkB,IAAI19P,KAAKre,KAAK6f,aAAahB,cAAe7e,KAAK6f,aAAai/C,WAAa,EAAG,GAAGH,UACjGq9M,EAAiB,IAAI39P,KAAKo9P,EAAa58P,cAAe48P,EAAa38M,WAAa,EAAG,GAAGH,UACtF3+D,KAAK6f,aAAa8+C,YAAco9M,GAAmBC,GAAkBD,GACrEN,EAAa/5M,QAAQs6M,GAG7Bh8Q,KAAK6f,aAAe,IAAIxB,KAAKo9P,EAAa58P,cAAe48P,EAAa38M,WAAY28M,EAAa98M,WAC/F3+D,KAAK84Q,aAAc,EACnB94Q,KAAKi6Q,eAAiBj6Q,KAAKi6Q,eAAiB,OAG5CwB,EAAah6M,SAAS,GACtBzhE,KAAK+5Q,eAAgB,EACrB/5Q,KAAK84Q,aAAc,EACnB94Q,KAAKi6Q,eAAiBj6Q,KAAK65Q,YAAc75Q,KAAKi6Q,eAAiB,EAAIj6Q,KAAKi6Q,eAsBhF,MAER,IAAK,IAEG,IAAI5pP,GAAQrwB,KAAK+4Q,YAAe0C,EAAa58P,cAAcvH,WAAW5Q,OAAS,IACvE1G,KAAK05Q,YAA4C,GAA7B+B,EAAa58P,cAAqB,GAAK9Z,SAASy2Q,EAAO7zP,EAAQ,GAAI,IAC3Fs0P,GAAaj8Q,KAAKq6Q,WAAWv1Q,MAAM,OAAS,IAAI4B,OAGpD,GAFA1G,KAAK05Q,aAAc,EACnB15Q,KAAK85Q,WAAoC,MAAtB0B,EAAO7zP,EAAQ,GAC9BxG,MAAMkP,GACN,OAEJ,MAAOA,EAAO,KACVA,EAAOtrB,SAASsrB,EAAK/Y,WAAWhE,MAAM,GAAI,IAE1C+c,EAAO,EACPrwB,KAAK+4Q,YAAa,GAGlB0C,EAAa5yP,YAAYwH,GACrBA,EAAK/Y,WAAW5Q,SAAWu1Q,IAC3Bj8Q,KAAKmmL,YAAa,GAEtBnmL,KAAK6f,aAAe,IAAIxB,KAAKo9P,EAAa58P,cAAe48P,EAAa38M,WAAY28M,EAAa98M,WAC/F3+D,KAAK+4Q,YAAa,GAEtB,MAER,IAAK,IAKD,GAJA/4Q,KAAK8C,MAAQ9C,KAAKg5Q,aAAeyC,EAAa1yP,WAAa,IAAM,IAAIzR,WAAW5Q,OAAS,IACjF1G,KAAKq7Q,YAAqD,IAAtCI,EAAa1yP,WAAa,IAAM,IAAW,GAAKhkB,SAASy2Q,EAAO7zP,EAAQ,GAAI,IACxG3nB,KAAK27B,OAAOxe,WAAYnd,KAAK27B,OAAOxe,WAAoBnd,KAAK27B,OAAOxe,UACpEnd,KAAKw5Q,WAAYx5Q,KAAKw5Q,WAAoBx5Q,KAAKw5Q,UAC3Cr4P,MAAMnhB,KAAK8C,MACX,OAEJ,MAAO9C,KAAK8C,KAAO,GACf9C,KAAK8C,KAAOiC,SAAS/E,KAAK8C,KAAKwU,WAAWhE,MAAM,GAAI,IAExDmoQ,EAAa3yP,SAAoD,GAA3C/Z,KAAKyyC,MAAMi6N,EAAa1yP,WAAa,IAAY/oB,KAAK8C,KAAO,IACnF9C,KAAKmmL,WAA6C,IAAhCnmL,KAAK8C,KAAKwU,WAAW5Q,OACvC1G,KAAKg5Q,YAAa,EAClBh5Q,KAAKk6Q,cAAgBl6Q,KAAKk6Q,cAAgB,EAC1C,MACJ,IAAK,IAKD,GAJAl6Q,KAAK8C,MAAQ9C,KAAKg5Q,YAAcyC,EAAa1yP,WAAWzR,WAAW5Q,OAAS,IACvE1G,KAAKq7Q,YAAwC,GAA1BI,EAAa1yP,WAAkB,GAAKhkB,SAASy2Q,EAAO7zP,EAAQ,GAAI,IACxF3nB,KAAK27B,OAAOxe,WAAYnd,KAAK27B,OAAOxe,WAAoBnd,KAAK27B,OAAOxe,UACpEnd,KAAKw5Q,WAAYx5Q,KAAKw5Q,WAAoBx5Q,KAAKw5Q,UAC3Cr4P,MAAMnhB,KAAK8C,MACX,OAEJ,IAASiE,EAAI,EAAG/G,KAAK8C,KAAO,GAAIiE,IAC5B/G,KAAK8C,KAAOiC,SAAS/E,KAAK8C,KAAKwU,WAAWhE,MAAM,GAAI,IAExDmoQ,EAAa3yP,SAAS9oB,KAAK8C,MAC3B9C,KAAKmmL,WAA6C,IAAhCnmL,KAAK8C,KAAKwU,WAAW5Q,OACvC1G,KAAKg5Q,YAAa,EAClBh5Q,KAAKk6Q,cAAgBl6Q,KAAKk6Q,cAAgB,EAC1C,MACJ,IAAK,IAEG,IAAIv2O,GAAW3jC,KAAKi5Q,cAAgBwC,EAAazyP,aAAa1R,WAAW5Q,OAAS,IAC1E1G,KAAKq7Q,YAA0C,GAA5BI,EAAazyP,aAAoB,GAAKjkB,SAASy2Q,EAAO7zP,EAAQ,GAAI,IAG7F,GAFA3nB,KAAK27B,OAAOxe,WAAYnd,KAAK27B,OAAOxe,WAAoBnd,KAAK27B,OAAOxe,UACpEnd,KAAKw5Q,WAAYx5Q,KAAKw5Q,WAAoBx5Q,KAAKw5Q,UAC3Cr4P,MAAMwiB,GACN,OAEJ,IAAS58B,EAAI,EAAG48B,EAAU,GAAI58B,IAC1B48B,EAAU5+B,SAAS4+B,EAAQrsB,WAAWhE,MAAM,GAAI,IAEpDmoQ,EAAar0M,WAAWzjC,GACxB3jC,KAAKmmL,WAA2C,IAA9BxiJ,EAAQrsB,WAAW5Q,OACrC1G,KAAKi5Q,cAAe,EACpBj5Q,KAAKm6Q,gBAAkBn6Q,KAAKm6Q,gBAAkB,EAC9C,MAER,IAAK,IAEG,IAAIjoF,GAAWlyL,KAAKk5Q,eAAiBuC,EAAaxyP,aAAa3R,WAAW5Q,OAAS,IAC9E1G,KAAKq7Q,YAA0C,GAA5BI,EAAaxyP,aAAoB,GAAKlkB,SAASy2Q,EAAO7zP,EAAQ,GAAI,IAG1F,GAFA3nB,KAAK27B,OAAOxe,WAAYnd,KAAK27B,OAAOxe,WAAoBnd,KAAK27B,OAAOxe,UACpEnd,KAAKw5Q,WAAYx5Q,KAAKw5Q,WAAoBx5Q,KAAKw5Q,UAC3Cr4P,MAAM+wK,GACN,OAEJ,IAASnrL,EAAI,EAAGmrL,EAAU,GAAInrL,IAC1BmrL,EAAUntL,SAASmtL,EAAQ56K,WAAWhE,MAAM,GAAI,IAEpDmoQ,EAAa3iN,WAAWo5H,GACxBlyL,KAAKmmL,WAA2C,IAA9B+L,EAAQ56K,WAAW5Q,OACrC1G,KAAKk5Q,eAAgB,EACrBl5Q,KAAKo6Q,gBAAkBp6Q,KAAKo6Q,gBAAkB,EAC9C,MAER,IAAK,IAEGp6Q,KAAKq5Q,iBAAmBmC,EAAO7zP,EAAQ,GAAGL,cAE1C,IAAI40P,EAAgBl8Q,KAAK47Q,iBAAiB,0BACtCO,EAAaz2Q,OAAOoV,KAAKohQ,GAC7B,IAASn1Q,EAAI,EAAG/G,KAAKq5Q,gBAAgB3yQ,OAAS,EAAGK,KACoC,IAA5Em1Q,EAAaC,EAAW,IAAI70P,cAAcvd,QAAQ/J,KAAKq5Q,kBACrDoC,EAAa1yP,YAAc,IACI,IADImzP,EAAaC,EAAW,IAAI70P,cAClEvd,QAAQ/J,KAAKq5Q,kBAA0BoC,EAAa1yP,WAAa,MACjE0yP,EAAa3yP,UAAU2yP,EAAa1yP,WAAa,IAAM,IACvD/oB,KAAKu6Q,cAAgBkB,GAEzBz7Q,KAAKq5Q,gBAAkBr5Q,KAAKq5Q,gBAAgBh+I,UAAU,EAAGr7H,KAAKq5Q,gBAAgB3yQ,QAElF,MAER,QACI,MAER1G,KAAKu6Q,cAAgBkB,GAGzBjD,EAAetyQ,UAAU20Q,YAAc,WAEnC,IAAIhoF,EAAQ7yL,KACZ,SAAS8yL,EAAqBC,GAC1B,IAAIhvL,EAeA0uL,EACAnqK,EAdA8zP,EAAkBvpF,EAAM+oF,iBAAiB,iCACzCS,EAAoB32Q,OAAOoV,KAAKshQ,GAEhCE,EAAYzpF,EAAM+oF,iBAAiB,0BACnCW,EAAa72Q,OAAOoV,KAAKwhQ,GAEzBE,EAAc3pF,EAAM+oF,iBAAiB,4BACrCa,EAAe/2Q,OAAOoV,KAAK0hQ,GAC3BE,EAAoB7pF,EAAM+oF,iBAAiB,mCAC3Ce,EAAa9pF,EAAM+oF,iBAAiB,4BAEpCM,EAAgBrpF,EAAM+oF,iBAAiB,0BACvCO,EAAaz2Q,OAAOoV,KAAKohQ,GAG7B,OAAQnpF,GACJ,IAAK,MACL,IAAK,OACL,IAAK,IACDhvL,EAAS8uL,EAAMgmF,UAAYhmF,EAAM0nF,cAAc57M,UAAUrnD,WAAau7K,EAAM6lF,gBAAgB,OAAOphQ,WACnGvT,EAAS8uL,EAAM+pF,UAAU/pF,EAAM+mF,WAAY/mF,EAAMgmF,UAAW90Q,GACjC,IAAvB8uL,EAAMmnF,eACNnnF,EAAM1M,YAAa,EACnB0M,EAAMmnF,aAAe,GAEzB,MACJ,IAAK,KACDj2Q,EAAS8uL,EAAMgmF,UAAYhmF,EAAMgqF,SAAShqF,EAAM0nF,cAAc57M,UAAW,GAAKk0H,EAAM6lF,gBAAgB,OAAOphQ,WAC3GvT,EAAS8uL,EAAM+pF,UAAU/pF,EAAM+mF,WAAY/mF,EAAMgmF,UAAW90Q,GACjC,IAAvB8uL,EAAMmnF,eACNnnF,EAAM1M,YAAa,EACnB0M,EAAMmnF,aAAe,GAEzB,MACJ,IAAK,IACL,IAAK,KACL,IAAK,MACDj2Q,EAAS8uL,EAAMgmF,WAAahmF,EAAMimF,aAAejmF,EAAMkmF,WAAaqD,EAAgBC,EAAkBxpF,EAAM0nF,cAAclhO,WAAW/hC,WAAau7K,EAAM6lF,gBAAgB,gBAAgBphQ,WACxL,MACJ,IAAK,OACDvT,EAAS8uL,EAAMgmF,WAAahmF,EAAMimF,aAAejmF,EAAMkmF,WAAauD,EAASC,EAAW1pF,EAAM0nF,cAAclhO,WAAW/hC,WAAau7K,EAAM6lF,gBAAgB,gBAAgBphQ,WAC1K,MACJ,IAAK,QACDvT,EAAS8uL,EAAMgmF,WAAahmF,EAAMimF,aAAejmF,EAAMkmF,WAAayD,EAAWC,EAAa5pF,EAAM0nF,cAAclhO,WAAW/hC,WAAau7K,EAAM6lF,gBAAgB,gBAAgBphQ,WAC9K,MACJ,IAAK,IACDvT,EAAS8uL,EAAMimF,aAAejmF,EAAM0nF,cAAcz7M,WAAa,GAAGxnD,WAAau7K,EAAM6lF,gBAAgB,SAASphQ,WAC9GvT,EAAS8uL,EAAM+pF,UAAU/pF,EAAMgnF,YAAahnF,EAAMimF,YAAa/0Q,GAClC,IAAzB8uL,EAAMonF,iBACNpnF,EAAM1M,YAAa,EACnB0M,EAAMonF,eAAiB,GAE3B,MACJ,IAAK,KACDl2Q,EAAS8uL,EAAMimF,YAAcjmF,EAAMgqF,SAAShqF,EAAM0nF,cAAcz7M,WAAa,EAAG,GAAK+zH,EAAM6lF,gBAAgB,SAASphQ,WACpHvT,EAAS8uL,EAAM+pF,UAAU/pF,EAAMgnF,YAAahnF,EAAMimF,YAAa/0Q,GAClC,IAAzB8uL,EAAMonF,iBACNpnF,EAAM1M,YAAa,EACnB0M,EAAMonF,eAAiB,GAE3B,MACJ,IAAK,MACDl2Q,EAAS8uL,EAAMimF,YAAc4D,EAAiB7pF,EAAM0nF,cAAcz7M,WAAa,GAAK+zH,EAAM6lF,gBAAgB,SAASphQ,WACnH,MACJ,IAAK,OACDvT,EAAS8uL,EAAMimF,YAAc6D,EAAU9pF,EAAM0nF,cAAcz7M,WAAa,GAAK+zH,EAAM6lF,gBAAgB,SAASphQ,WAC5G,MACJ,IAAK,KACDvT,EAAS8uL,EAAMkmF,WAAalmF,EAAMgqF,SAAShqF,EAAM0nF,cAAc17P,cAAgB,IAAK,GAAKg0K,EAAM6lF,gBAAgB,QAAQphQ,WACvHvT,EAAS8uL,EAAM+pF,UAAU/pF,EAAMinF,WAAYjnF,EAAMkmF,WAAYh1Q,GAC7D,MACJ,IAAK,IACL,IAAK,OACDA,EAAS8uL,EAAMkmF,WAAalmF,EAAMgqF,SAAShqF,EAAM0nF,cAAc17P,cAAe,GAAKg0K,EAAM6lF,gBAAgB,QAAQphQ,WACjHvT,EAAS8uL,EAAM+pF,UAAU/pF,EAAMinF,WAAYjnF,EAAMkmF,WAAYh1Q,GAC7D,MACJ,IAAK,IACDA,EAAS8uL,EAAMmmF,YAAcnmF,EAAM0nF,cAAcxxP,WAAa,IAAM,IAAIzR,WAAau7K,EAAM6lF,gBAAgB,QAAQphQ,WACvF,IAAxBu7K,EAAMqnF,gBACNrnF,EAAM1M,YAAa,EACnB0M,EAAMqnF,cAAgB,GAE1B,MACJ,IAAK,KACDn2Q,EAAS8uL,EAAMmmF,WAAanmF,EAAMgqF,SAAShqF,EAAM0nF,cAAcxxP,WAAa,IAAM,GAAI,GAAK8pK,EAAM6lF,gBAAgB,QAAQphQ,WAC7F,IAAxBu7K,EAAMqnF,gBACNrnF,EAAM1M,YAAa,EACnB0M,EAAMqnF,cAAgB,GAE1B,MACJ,IAAK,IACDn2Q,EAAS8uL,EAAMmmF,WAAanmF,EAAM0nF,cAAcxxP,WAAWzR,WAAau7K,EAAM6lF,gBAAgB,QAAQphQ,WAC1E,IAAxBu7K,EAAMqnF,gBACNrnF,EAAM1M,YAAa,EACnB0M,EAAMqnF,cAAgB,GAE1B,MACJ,IAAK,KACDn2Q,EAAS8uL,EAAMmmF,WAAanmF,EAAMgqF,SAAShqF,EAAM0nF,cAAcxxP,WAAY,GAAK8pK,EAAM6lF,gBAAgB,QAAQphQ,WAClF,IAAxBu7K,EAAMqnF,gBACNrnF,EAAM1M,YAAa,EACnB0M,EAAMqnF,cAAgB,GAE1B,MACJ,IAAK,IACDn2Q,EAAS8uL,EAAMomF,aAAepmF,EAAM0nF,cAAcvxP,aAAa1R,WAAau7K,EAAM6lF,gBAAgB,UAAUphQ,WAC9E,IAA1Bu7K,EAAMsnF,kBACNtnF,EAAM1M,YAAa,EACnB0M,EAAMsnF,gBAAkB,GAE5B,MACJ,IAAK,KACDp2Q,EAAS8uL,EAAMomF,aAAepmF,EAAMgqF,SAAShqF,EAAM0nF,cAAcvxP,aAAc,GAAK6pK,EAAM6lF,gBAAgB,UAAUphQ,WACtF,IAA1Bu7K,EAAMsnF,kBACNtnF,EAAM1M,YAAa,EACnB0M,EAAMsnF,gBAAkB,GAE5B,MACJ,IAAK,IACDp2Q,EAAS8uL,EAAMqmF,cAAgBrmF,EAAM0nF,cAActxP,aAAa3R,WAAau7K,EAAM6lF,gBAAgB,UAAUphQ,WAC/E,IAA1Bu7K,EAAMunF,kBACNvnF,EAAM1M,YAAa,EACnB0M,EAAMunF,gBAAkB,GAE5B,MACJ,IAAK,KACDr2Q,EAAS8uL,EAAMqmF,cAAgBrmF,EAAMgqF,SAAShqF,EAAM0nF,cAActxP,aAAc,GAAK4pK,EAAM6lF,gBAAgB,UAAUphQ,WACvF,IAA1Bu7K,EAAMunF,kBACNvnF,EAAM1M,YAAa,EACnB0M,EAAMunF,gBAAkB,GAE5B,MACJ,IAAK,IACDr2Q,EAASgL,KAAKyyC,MAAMqxI,EAAM0nF,cAAcrxP,kBAAoB,KAAK5R,WACjE,MACJ,IAAK,KACDm7K,EAAeI,EAAM0nF,cAAcrxP,kBAC/B2pK,EAAM0nF,cAAcrxP,kBAAoB,KACxCupK,EAAe1jL,KAAKyyC,MAAMqxI,EAAM0nF,cAAcrxP,kBAAoB,KAEtEnlB,EAAS8uL,EAAMgqF,SAASpqF,EAAc,GACtC,MACJ,IAAK,MACD1uL,EAAS8uL,EAAMgqF,SAAShqF,EAAM0nF,cAAcrxP,kBAAmB,GAC/D,MACJ,IAAK,IACL,IAAK,KACDnlB,EAAS8uL,EAAM0nF,cAAcxxP,WAAa,GAAKmzP,EAAaC,EAAW,IAAMD,EAAaC,EAAW,IACrG,MACJ,IAAK,IACL,IAAK,KACL,IAAK,MACL,IAAK,OACD7zP,EAAc,CACVtG,OAAQ+wK,EACR3+K,KAAM,WAAY6N,SAAU,MAAOhhB,SAAU4xL,EAAMl3J,OAAO7Z,cAE9D/d,EAAS8uL,EAAMl3J,OAAO1b,UAAU8B,WAAW8wK,EAAM0nF,cAAejyP,GAChE,MAGR,GADAvkB,OAAoBoN,IAAXpN,EAAuBA,EAASgvL,EAAWz/K,MAAM,EAAGy/K,EAAWrsL,OAAS,GAC7EmsL,EAAMymF,aAAc,CAEpB,IADA,IAAIwD,EAAa,GACR/1Q,EAAI,EAAGA,EAAIhD,EAAO2C,OAAQK,IAC/B+1Q,GAAc/pF,EAAW,GAE7B,OAAO+pF,EAGP,OAAO/4Q,EAGf,OAAO+uL,GAEX0lF,EAAetyQ,UAAUu0Q,iBAAmB,WACxC,IAAI9yP,EAAQ3nB,KAAK27B,OAAOje,aAAa4I,eACjC60P,EAAa,IAC6C,IAA1Dn7Q,KAAK44Q,gBAAgB7uQ,QAAQ/J,KAAK24Q,WAAWhxP,MAC7CwzP,EAAan7Q,KAAK24Q,WAAWhxP,IAEjC3nB,KAAKs7Q,kBACL,IAAIpsE,EAAalvM,KAAKq6Q,WAAW95P,QAAQvgB,KAAK+uL,YAAa/uL,KAAK66Q,eAChE76Q,KAAKs5Q,cAAe,EACpBt5Q,KAAK24Q,WAAa34Q,KAAKq6Q,WAAW95P,QAAQvgB,KAAK+uL,YAAa/uL,KAAK66Q,eACjE76Q,KAAK45Q,WAAa55Q,KAAK65Q,YAAc75Q,KAAK85Q,YAAa,EACvD95Q,KAAKs5Q,cAAe,EACpBt5Q,KAAK86Q,mBAAqB96Q,KAAK24Q,WAC/B34Q,KAAKomC,cAAgB8oK,EACrBlvM,KAAK27B,OAAOje,aAAaS,MAAQ+wL,EACjClvM,KAAK27B,OAAOje,aAAaS,MAAQ+wL,EACjC,IAAK,IAAInoM,EAAI,EAAGA,EAAI/G,KAAK24Q,WAAWjyQ,OAAQK,IACxC,GAAIo0Q,IAAen7Q,KAAK24Q,WAAW5xQ,GAAI,CACnC4gB,EAAQ5gB,EACR,MAKR,GAFA/G,KAAK27B,OAAOje,aAAa4I,eAAiBqB,EAC1C3nB,KAAKw6Q,uBACAx6Q,KAAKmmL,YAAcnmL,KAAKy5Q,cAAgBz5Q,KAAK25Q,YAAa,CAC3D,IAAIoD,GAAa/8Q,KAAKmmL,WACtBnmL,KAAKmmL,WAAanmL,KAAKy5Q,YAAa,EACpCz5Q,KAAKk7Q,kBAAkB6B,GAEvB/8Q,KAAK25Q,cACL35Q,KAAKy5Q,YAAa,GAEtBz5Q,KAAK25Q,aAAc,GAEvBnB,EAAetyQ,UAAUg1Q,kBAAoB,SAAU6B,GACnD,IAAIp1P,EAAQ3nB,KAAK27B,OAAOje,aAAa4I,eACjCsB,EAAM5nB,KAAK27B,OAAOje,aAAa6I,aAC/By2P,EAAcD,EAAap1P,EAAQ,EAAIC,EAC3C5nB,KAAKw5Q,WAAY,EACjB,MAAOwD,EAAch9Q,KAAK24Q,WAAWjyQ,QAAUs2Q,GAAe,EAAG,CAC7D,GAAIh9Q,KAAK44Q,gBAAgB7uQ,QAAQ/J,KAAK24Q,WAAWqE,KAAiB,EAAG,CACjEh9Q,KAAK45F,aAAa55F,KAAK24Q,WAAWqE,IAClC,MAEJA,GAA6BD,GAAc,EAAI,IAGvDvE,EAAetyQ,UAAU22Q,SAAW,SAAUv6P,EAAKsY,GAI/C,IAHA,IAAIqiP,EAAY36P,EAAIhL,WAChB5Q,EAASk0B,EAAQqiP,EAAUv2Q,OAC3B3C,EAAS,GACJgD,EAAI,EAAGA,EAAIL,EAAQK,IACxBhD,GAAU,IAEd,OAAOA,EAASk5Q,GAEpBzE,EAAetyQ,UAAU02Q,UAAY,SAAUM,EAAQrE,EAAWsE,GAC9D,IAAIp5Q,EAASo5Q,EAIb,OAHID,IAAWrE,IACX90Q,EAAS,KAENA,GAEXy0Q,EAAetyQ,UAAUw1Q,eAAiB,SAAU15P,EAAQo7P,GACxD,OAAQp7P,GACJ,IAAK,IACDhiB,KAAK64Q,UAAYuE,EACjB,MACJ,IAAK,IACDp9Q,KAAK84Q,YAAcsE,EACdA,IACDp9Q,KAAKu6Q,cAAc94M,SAAS,GAC5BzhE,KAAKo5Q,eAAiB,IAE1B,MACJ,IAAK,IACDp5Q,KAAK+4Q,WAAaqE,EAClB,MACJ,IAAK,IACL,IAAK,IACDp9Q,KAAKg5Q,WAAaoE,EACbA,IACDp9Q,KAAKq5Q,gBAAkB,IAE3B,MACJ,IAAK,IACDr5Q,KAAKi5Q,aAAemE,EACpB,MACJ,IAAK,IACDp9Q,KAAKk5Q,cAAgBkE,EACrB,MACJ,QACI,OAAO,EAEf,OAAO,GAEX5E,EAAetyQ,UAAUk1Q,eAAiB,SAAUiC,GAChD,IAAI11P,EAAQ3nB,KAAK27B,OAAOje,aAAa4I,eACjC60P,EAAa,GACjB,IAA8D,IAA1Dn7Q,KAAK44Q,gBAAgB7uQ,QAAQ/J,KAAK24Q,WAAWhxP,IAAjD,CACIwzP,EAAan7Q,KAAK24Q,WAAWhxP,GAKjC,IAAI8zP,EAAe,IAAIp9P,KAAKre,KAAKu6Q,cAAc17P,cAAe7e,KAAKu6Q,cAAcz7M,WAAY9+D,KAAKu6Q,cAAc57M,UAAW3+D,KAAKu6Q,cAAcxxP,WAAY/oB,KAAKu6Q,cAAcvxP,aAAchpB,KAAKu6Q,cAActxP,cAC9MjpB,KAAK6f,aAAe,IAAIxB,KAAKre,KAAKu6Q,cAAc17P,cAAe7e,KAAKu6Q,cAAcz7M,WAAY9+D,KAAKu6Q,cAAc57M,UAAW3+D,KAAKu6Q,cAAcxxP,WAAY/oB,KAAKu6Q,cAAcvxP,aAAchpB,KAAKu6Q,cAActxP,cAC/M,IAAIq0P,EAAiBD,GAAe,EAAI,EACxC,OAAQlC,GACJ,IAAK,IACDM,EAAa/5M,QAAQ+5M,EAAa98M,UAAY2+M,GAC9C,MACJ,IAAK,IAEG,IAAIC,EAAW9B,EAAa38M,WAAaw+M,EAGzC,GAFA7B,EAAa/5M,QAAQ,GACrB+5M,EAAah6M,SAAS87M,GAClBv9Q,KAAK64Q,UAAW,CAChB,IAAIkD,EAAkB,IAAI19P,KAAKre,KAAK6f,aAAahB,cAAe7e,KAAK6f,aAAai/C,WAAa,EAAG,GAAGH,UACjGq9M,EAAiB,IAAI39P,KAAKo9P,EAAa58P,cAAe48P,EAAa38M,WAAa,EAAG,GAAGH,UACtF3+D,KAAK6f,aAAa8+C,YAAco9M,GAAmBC,GAAkBD,EACrEN,EAAa/5M,QAAQs6M,GAGrBP,EAAa/5M,QAAQ1hE,KAAK6f,aAAa8+C,gBAI3C88M,EAAa/5M,QAAQ1hE,KAAK6f,aAAa8+C,WAE3C3+D,KAAK6f,aAAe,IAAIxB,KAAKo9P,EAAa58P,cAAe48P,EAAa38M,WAAY28M,EAAa98M,WAC/F,MAER,IAAK,IACD88M,EAAa5yP,YAAY4yP,EAAa58P,cAAgBy+P,GACtD,MACJ,IAAK,IACL,IAAK,IACD7B,EAAa3yP,SAAS2yP,EAAa1yP,WAAau0P,GAChD,MACJ,IAAK,IACD7B,EAAar0M,WAAWq0M,EAAazyP,aAAes0P,GACpD,MACJ,IAAK,IACD7B,EAAa3iN,WAAW2iN,EAAaxyP,aAAeq0P,GACpD,MACJ,IAAK,IACD7B,EAAa3yP,UAAU2yP,EAAa1yP,WAAa,IAAM,IACvD,MACJ,QACI,MAER/oB,KAAKu6Q,cAAgBkB,EAAa58P,cAAgB,EAAI48P,EAAez7Q,KAAKu6Q,eACZ,IAA1Dv6Q,KAAK44Q,gBAAgB7uQ,QAAQ/J,KAAK24Q,WAAWhxP,KAC7C3nB,KAAK07Q,eAAe17Q,KAAK24Q,WAAWhxP,IAAQ,KAGpD6wP,EAAetyQ,UAAU01Q,iBAAmB,SAAU55P,GAClD,IACIje,EADAmc,EAASlgB,KAAK27B,OAAOzb,OAQzB,OALInc,EADW,OAAXmc,GAA8B,UAAXA,EACV,eAAS8B,EAAQ,kBAGjB,eAAS,QAAe9B,EAAU,8BAAgC8B,EAAS,QAEjFje,GAEXy0Q,EAAetyQ,UAAUo0Q,kBAAoB,WACzC,IAAI14P,EAAgB5hB,KAAK47Q,iBAAiB,yCAA0CtkQ,WAgBpF,MAf+B,eAA3BtX,KAAK27B,OAAOze,aACZ0E,EAAgB5hB,KAAK47Q,iBAAiB,yCAA0CtkQ,WAC5EtX,KAAK27B,OAAO3Z,QAAUhiB,KAAK27B,OAAO/Z,eAClCA,EAAe5hB,KAAK27B,OAAO/Z,eAGJ,mBAA3B5hB,KAAK27B,OAAOze,aACZ0E,EAAgB5hB,KAAK47Q,iBAAiB,yCAA0CtkQ,WAC5EtX,KAAK27B,OAAO9Z,iBACZD,EAAe5hB,KAAK27B,OAAO9Z,iBAGJ,eAA3B7hB,KAAK27B,OAAOze,aACZ0E,EAAe5hB,KAAK27B,OAAOmuJ,kBAExBloK,GAEX42P,EAAetyQ,UAAUqmL,aAAe,WACpCvsL,KAAK64Q,UAAY74Q,KAAK84Q,YAAc94Q,KAAK+4Q,WAAa/4Q,KAAKg5Q,WAAah5Q,KAAKi5Q,aAAej5Q,KAAKk5Q,eAAgB,EACjHl5Q,KAAK8qL,eAET0tF,EAAetyQ,UAAU4kL,YAAc,WACnC9qL,KAAKo5Q,eAAiBp5Q,KAAKq5Q,gBAAkB,GAC7C,IAAInqE,EAAalvM,KAAKq6Q,WAAW95P,QAAQvgB,KAAK+uL,YAAa/uL,KAAK66Q,eAChE76Q,KAAKs5Q,cAAe,EACpBt5Q,KAAK24Q,WAAa34Q,KAAKq6Q,WAAW95P,QAAQvgB,KAAK+uL,YAAa/uL,KAAK66Q,eACjE76Q,KAAKs5Q,cAAe,EACpBt5Q,KAAK86Q,mBAAqB96Q,KAAK24Q,WAC/B34Q,KAAKomC,cAAgB8oK,EACrBlvM,KAAK27B,OAAOhc,iBAAiBuvL,IAEjCspE,EAAetyQ,UAAUgS,QAAU,WAC/BlY,KAAKu7E,uBAEFi9L,EAn0BwB,G,YCT/B,EAAwC,WACxC,IAAIhzQ,EAAgB,SAAUvD,EAAGwD,GAI7B,OAHAD,EAAgBE,OAAOC,gBAClB,CAAEC,UAAW,cAAgBC,OAAS,SAAU5D,EAAGwD,GAAKxD,EAAE2D,UAAYH,IACvE,SAAUxD,EAAGwD,GAAK,IAAK,IAAIK,KAAKL,EAAOA,EAAEM,eAAeD,KAAI7D,EAAE6D,GAAKL,EAAEK,KAClEN,EAAcvD,EAAGwD,IAE5B,OAAO,SAAUxD,EAAGwD,GAEhB,SAASO,IAAOhG,KAAKiG,YAAchE,EADnCuD,EAAcvD,EAAGwD,GAEjBxD,EAAEiE,UAAkB,OAANT,EAAaC,OAAOS,OAAOV,IAAMO,EAAGE,UAAYT,EAAES,UAAW,IAAIF,IAV3C,GAiB5C,OAAWgmO,OAAO,GAMlB,IAAI,EAAoC,SAAUpjO,GAE9C,SAAS40Q,IACL,OAAkB,OAAX50Q,GAAmBA,EAAOC,MAAM7I,KAAMyG,YAAczG,KAY/D,OAdA,EAAUw9Q,EAAoB50Q,GAI9B40Q,EAAmBt3Q,UAAU68C,MAAQ,SAAUv3B,GAC3CxrB,KAAKg4C,KAAOh4C,KAAK27B,OAAOqtH,WACK,mBAAzBx9H,EAAK+Q,OAAOwb,SACZ/3C,KAAKm7D,IAAM,IAAI,OAAW,eAAOsiN,GAAsBjyP,EAAMxrB,KAAK27B,OAAOm2E,aAAap5E,KAAM14B,KAAK27B,OAAOpwB,UAAWvL,KAAK27B,OAAOtrB,SAAUrQ,MAAOwrB,EAAK+Q,OAAOyb,KAAKT,SAEnI,uBAAzB/rB,EAAK+Q,OAAOwb,WACjB/3C,KAAKm7D,IAAM,IAAI,OAAe,eAAOsiN,GAAsBjyP,EAAMxrB,KAAK27B,OAAOm2E,aAAap5E,KAAM14B,KAAK27B,OAAOpwB,UAAWvL,KAAK27B,OAAOtrB,SAAUrQ,MAAOwrB,EAAK+Q,OAAOyb,KAAKT,UAEzKv3C,KAAKm7D,IAAIrvC,SAASN,EAAKriB,UAEpBq0Q,EAf4B,CAgBrC,GAGF,SAASC,GAAsBjyP,EAAMkN,EAAM+wE,EAAKoD,EAAK6wK,GACjD,IAAIjQ,EAAoB,WAAT/0O,EACX1W,EAAS,eAAoBwJ,EAAK+Q,OAAOva,OAAQwJ,EAAK+Q,OAAOnoB,MAC7D+J,EAAQ,eAAUqN,EAAK+Q,OAAO4b,MAAO3sB,EAAKs9H,SAE9C,OADA3qI,EAAQA,EAAQ,IAAIE,KAAKF,GAAS,KAC3B,CACHX,eAAgBiwP,EAAW,QAAU,SACrCtvP,MAAOA,EACP6D,OAAQA,EACRtC,YAAa+tP,EACT,GAAKjiP,EAAK+Q,OAAO6T,WAAY7kC,UAAWk+F,EAC5C1rF,QAAS,gBAAWyN,EAAK+Q,OAAQ/Q,EAAK6qB,YAAa7qB,EAAKriB,SACxDkH,SAAUw8F,GAAY,KACtBlhG,MAAOgyQ,GAAgBjyQ,KAAKgyQ,IAIpC,SAASC,GAAgBnyP,GACjBA,EAAKlX,OAA+B,WAAtBkX,EAAKlX,MAAM8R,SACzBpmB,KAAKg4C,KAAK21N,qBAAsB,G,iBCxDpCiQ,GAAkC,WAClC,SAASA,EAAiBjiP,GACtB37B,KAAK27B,OAASA,EAWlB,OATAiiP,EAAiB13Q,UAAU+gH,KAAO,SAAU99G,EAASgV,GACjD,OAAOA,GAEXy/P,EAAiB13Q,UAAU68C,MAAQ,aAGnC66N,EAAiB13Q,UAAUgS,QAAU,aAG9B0lQ,EAb0B,GCoBjC,GAAsB,WAQtB,SAASpvC,EAAK7yM,EAAQga,GAClB31C,KAAK+3C,SAAW,CAAE,OAAU66N,EAAY,OAAUA,EAAY,MAAS,EAAW,OAAUn9B,GAC5Fz1O,KAAKmpP,UAAY,GACjBnpP,KAAKu4B,KAAO,GAEZv4B,KAAK2tQ,qBAAsB,EAC3B3tQ,KAAK27B,OAASA,EACd37B,KAAK21C,eAAiBA,EACtB31C,KAAKmgB,KAAOngB,KAAK21C,eAAe0yG,WAAW,gBAC3CroJ,KAAK4sC,mBACL5sC,KAAK69Q,gBACL79Q,KAAK89Q,iBACL99Q,KAAK+9Q,mBAwmCT,OAtmCAvvC,EAAKtoO,UAAU83Q,iBAAmB,WAE9B,IADA,IAAI3tN,EAAOrwD,KAAK27B,OAAOymH,YACdr7I,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,IAC7B,GAAI/G,KAAK27B,OAAOm2E,aAAaxhE,UAAY+f,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKsuF,aAAc,CACpF,IAAIq4K,EAAc,eAClB5tN,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0gC,KAAO,eAAO,IAAIw2L,EAAK0vC,aAAa,GAAKD,GAAaj+Q,KAAK27B,QAAS00B,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0gC,MAAQ,SAG9IqY,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0gC,KAAO,eAAO,IAAIw2L,EAAK0vC,aAAa7tN,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKygC,UAC/Fy2L,EAAK0vC,aAAa7tN,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKygC,UACtDsY,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKygC,SAAW,gBAAe/3C,KAAK27B,OAAQ37B,KAAK21C,gBAAiB0a,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK0gC,MAAQ,IAGnJh4C,KAAK27B,OAAO2c,IAAI,2BAQpBk2L,EAAKtoO,UAAUsU,cAAgB,WAC3B,MAAO,QAOXg0N,EAAKtoO,UAAUyU,kBAAoB,SAAU5H,GACzC,GAAIA,EAAEwM,SAAWvf,KAAKwa,gBAItB,IADA,IAAIm+B,EAAO34C,KAAK27B,OACPloB,EAAK,EAAG7J,EAAKlE,OAAOoV,KAAK/H,EAAE2N,YAAajN,EAAK7J,EAAGlD,OAAQ+M,IAAM,CACnE,IAAIsH,EAAOnR,EAAG6J,GACd,OAAQsH,GACJ,IAAK,cACL,IAAK,gBACL,IAAK,gBACG49B,EAAKm5D,aAAak7H,aAAer0L,EAAKm5D,aAAavN,cAAgB5rD,EAAKm5D,aAAam7H,gBACrFjtO,KAAKwzM,aAET,MACJ,IAAK,OACDxzM,KAAK69Q,gBACLllO,EAAKqyD,QAAS,EACdryD,EAAK39B,UACL,SAIhBwzN,EAAKtoO,UAAU23Q,cAAgB,WACvB79Q,KAAKgpJ,YACLhpJ,KAAKgpJ,WAAW9wI,UAEpBlY,KAAKigC,SAAW,IAAI,EAAWjgC,KAAK27B,OAAQ37B,KAAK21C,gBACjD31C,KAAKgpJ,WAAa,IAAIhpJ,KAAK+3C,SAAS/3C,KAAK27B,OAAOm2E,aAAap5E,MAAM14B,KAAK27B,OAAQ37B,KAAK21C,eAAgB31C,KAAKigC,WAE9GuuM,EAAKtoO,UAAUstM,WAAa,WACxBxzM,KAAKg+Q,oBAQTxvC,EAAKtoO,UAAU+iJ,UAAY,SAAUvlH,GACjC,IAAIiV,EAAO34C,KAAK27B,OAChB,GAAKgd,EAAKm5D,aAAavN,eAAgB5rD,EAAKqyD,QAAqC,UAA3BryD,EAAKm5D,aAAap5E,KAAxE,CAIA,GADA14B,KAAK27B,OAAOxyB,QAAQ6B,UAAU0G,IAAI,cAC7BinC,EAAKitM,kBAAkBl/O,QAAU,eAAkB1G,KAAK27B,OAAO+qM,cAAc3hO,SAAS/E,KAAK27B,OAAOiqN,kBAAkB,GAAGt1O,aAAa,iBAAkB,OACvJ,IAAKozB,EAED,YADA1jC,KAAK4qM,WAAW,qBAAsB5qM,KAAKm+Q,gBAIzCz6O,IACNA,EAAKiV,EAAKitM,kBAAkB,IAEhC,GAAI5lP,KAAK27B,OAAOmd,sBAA0D,WAAlC94C,KAAK27B,OAAOm2E,aAAap5E,KAAmB,CAChF,IAAImoH,EAAM97I,SAAS2+B,EAAGpzB,aAAa,iBAAkB,IACrDozB,EAAK1jC,KAAK27B,OAAO+qM,cAAc7lF,GAEnC,IAAIu9H,EAASzlO,EAAK6vD,aAAa12F,cAAc,iBACzCswO,EAAWzpM,EAAKkwD,mBAAmB/2F,cAAc,SACjD6mC,EAAKiwD,YAAc,eAAkBw1K,IAAWh8B,GAAYA,EAAStwO,cAAc,iBACnF9R,KAAKixQ,UAAYvtO,EAAGjD,WAAa17B,SAAS4zC,EAAKkwD,mBAAmB/2F,cAAc,SAASA,cAAc,iBAAiBxB,aAAa,iBAAkB,IAElJ8tQ,IACLp+Q,KAAKixQ,UAAYvtO,EAAGjD,WAAa29O,EAAO39O,UAEnB,SAArBiD,EAAG/2B,MAAMC,UAGb5M,KAAKgpJ,WAAWC,UAAUvlH,GAC1B1jC,KAAKq+Q,iBACL1lO,EAAKxvC,QAAQ2I,cAAc,gBAAgBnF,MAAMC,QAAU,OAC3D5M,KAAK27B,OAAOrc,OAAO,aAAc,OAUrCkvN,EAAKtoO,UAAUukQ,aAAe,SAAU/mO,EAAIlY,GACxC,IAAIi/O,EAAezqQ,KAAKixQ,UACG,SAAvBjxQ,KAAK27B,OAAOxwB,QAAiE,WAA5CnL,KAAK27B,OAAOm2E,aAAay4J,gBAA+B/+O,GAA6B,QAArBA,EAAK6qB,aACtGr2C,KAAK27B,OAAO6sE,aAAathF,kBAAkB7X,aAAerP,KAAK27B,OAAOgxE,kBAAkBX,aACxF,eAAS,GAAG14F,MAAMjK,KAAKq6B,EAAG7lB,uBAAuB,SAAoB,kBAEhE4sP,GAAgB/mO,GAAMA,EAAG14B,WAC9B,eAAS,GAAGsI,MAAMjK,KAAKq6B,EAAG7lB,uBAAuB,SAAoB,kBAQ7E2wN,EAAKtoO,UAAUgjJ,UAAY,WACe,UAAlClpJ,KAAK27B,OAAOm2E,aAAap5E,MAAoB14B,KAAK27B,OAAOm2E,aAAawsK,mBACnEt+Q,KAAK27B,OAAOxyB,QAAQ0U,uBAAuB,eAAenX,OAC7D1G,KAAK4qM,WAAW,aAAc5qM,KAAK8/L,YAGvC9/L,KAAK27B,OAAOxyB,QAAQ6B,UAAUC,OAAO,aACrCjL,KAAKgpJ,WAAWE,YAChBlpJ,KAAKq+Q,iBACLr+Q,KAAK27B,OAAOrc,OAAO,QAAkB,MAEzCkvN,EAAKtoO,UAAUm4Q,eAAiB,WAC5Br+Q,KAAK27B,OAAOrc,OAAO,QAAuB,KAU9CkvN,EAAKtoO,UAAUkjP,UAAY,SAAU7wN,EAAMlmB,GACvC,GAAKrS,KAAK27B,OAAOm2E,aAAak7H,YAA9B,CAGA,IAAIxhN,EAAO,CAAEy9H,WAAW,GACnB1wH,GACDv4B,KAAK27B,OAAOrc,OAAO,QAAoCkM,GAEvDA,EAAKy9H,YACLjpJ,KAAK27B,OAAOxyB,QAAQ6B,UAAU0G,IAAI,aAClC1R,KAAKgpJ,WAAWogG,UAAU7wN,EAAMlmB,GAChCrS,KAAKq+Q,iBACLr+Q,KAAK27B,OAAOrc,OAAO,YAAa,OAWxCkvN,EAAKtoO,UAAUojJ,aAAe,SAAU6/F,EAAW5wN,GAC/C,IAAIogB,EAAO34C,KAAK27B,OAChB,GAAKgd,EAAKm5D,aAAam7H,cAAvB,CAGA,GAAK10M,GACIogB,EAAKusL,qBAAqBx+N,SAAU,eAAkBiyC,EAAKwwG,iBAKpE,OAAIxwG,EAAKm5D,aAAaysK,yBAClBv+Q,KAAKmpP,UAAYA,EACjBnpP,KAAKu4B,KAAOA,OACZv4B,KAAK4qM,WAAW,gBAAiB5qM,KAAK8/L,iBAG1C9/L,KAAKgpJ,WAAWM,aAAa6/F,EAAW5wN,GAVhCv4B,KAAK4qM,WAAW,uBAAwB5qM,KAAKm+Q,aAkBzD3vC,EAAKtoO,UAAUmjP,UAAY,SAAU3lN,GACjC1jC,KAAK01Q,aAAehyO,EAAGpzB,aAAa,YACpC,IAAIyrK,EAAS/7K,KAAK27B,OAAO8sH,oBAAoBzoJ,KAAK01Q,cAC7C,eAAkB35F,IACnB/7K,KAAKspJ,aAAa,KAAMyyB,EAAOxjJ,OAQvCi2M,EAAKtoO,UAAUsvD,QAAU,WACiB,UAAlCx1D,KAAK27B,OAAOm2E,aAAap5E,MAAoB14B,KAAK27B,OAAOm2E,aAAawsK,oBACrE,eAAkBt+Q,KAAKksQ,UAAYlsQ,KAAKksQ,QAAQ97C,cACjDpwN,KAAK27B,OAAOqtH,WAAWugG,WACvBvpP,KAAK27B,OAAOrc,OAAO,QAAwB,IACvC,eAAkBtf,KAAKksQ,UAAYlsQ,KAAKksQ,QAAQ97C,YAChDpwN,KAAK4qM,WAAW,mBAAoB5qM,KAAK8/L,WAIjD9/L,KAAKw+Q,cAUThwC,EAAKtoO,UAAU0gO,WAAa,SAAUnmM,EAAU0X,EAAOh6B,GACnDne,KAAKgpJ,WAAW49E,WAAWnmM,EAAU0X,EAAOh6B,IAShDqwN,EAAKtoO,UAAUsjP,UAAY,SAAUn3O,EAAOkmB,GACxCv4B,KAAKgpJ,WAAWwgG,UAAUn3O,EAAOkmB,IAOrCi2M,EAAKtoO,UAAUytQ,YAAc,WACzB3zQ,KAAKkpJ,aAOTslF,EAAKtoO,UAAUkvQ,UAAY,WACvBp1Q,KAAKw1D,WASTg5K,EAAKtoO,UAAUojP,SAAW,SAAUj3O,EAAO8lC,GACvCn4C,KAAKgpJ,WAAWsgG,SAASj3O,EAAO8lC,IAOpCq2L,EAAKtoO,UAAUooP,iBAAmB,WAC9B,IAAImwB,GAAQz+Q,KAAKksQ,SAAUlsQ,KAAKksQ,QAAQ97C,WACpCsuD,GAAQ1+Q,KAAK2+Q,UAAW3+Q,KAAK2+Q,SAASvuD,WACtCwuD,GAAQ5+Q,KAAK6+Q,WAAY7+Q,KAAK6+Q,UAAUzuD,WAC5C,OAAOquD,GAASC,GAASE,GAO7BpwC,EAAKtoO,UAAUujP,gBAAkB,WAC7B,OAAOzpP,KAAKgpJ,WAAWygG,gBAAkBzpP,KAAKgpJ,WAAWygG,kBAAoB,IAOjFjb,EAAKtoO,UAAU44Q,uBAAyB,WACpC,IAAI3jN,EAAMn7D,KAAKowQ,qBAAqBpwQ,KAAKksQ,QAAQ/iQ,QAAS,IAC1D,OAAOgyD,EAAIz1D,OAAOoV,KAAKqgD,GAAK,KAOhCqzK,EAAKtoO,UAAUqjP,SAAW,WACtBvpP,KAAKgpJ,WAAWugG,YAEpB/a,EAAKtoO,UAAUs4Q,WAAa,WACxBx+Q,KAAK27B,OAAOxyB,QAAQ6B,UAAUC,OAAO,aACrCjL,KAAKgpJ,WAAWxzF,UAChBx1D,KAAKq+Q,kBAET7vC,EAAKtoO,UAAU0kM,WAAa,SAAUn6L,EAAS0qD,GAC3CA,EAAI1qD,QAAU,QAAUzQ,KAAKmgB,KAAKC,YAAY3P,GAAW,SACzD0qD,EAAIxtD,WACJwtD,EAAItlD,QAER24N,EAAKtoO,UAAU64Q,iBAAmB,SAAUhtN,EAAK5zC,GAC7C,IAAImE,EAAMnE,EACV,OAAQ4zC,EAAI39C,MACR,IAAK,SACDkO,EAAOnB,MAAMzU,WAAWyR,IAA8B,KAApBzR,WAAWyR,GAC7C,MACJ,IAAK,UACoB,gBAAjB4zC,EAAIha,WACJz1B,EAAMnE,IAAUne,KAAKmgB,KAAKC,YAAY,UAAqB,IAAVjC,GAErD,MACJ,IAAK,OACL,IAAK,WACoB,mBAAjB4zC,EAAIha,UAAkD,uBAAjBga,EAAIha,UACtC55B,GAASA,EAAMzX,OAClB4b,EAAM,IAAIjE,KAAKF,GAEA,KAAVA,IACLmE,EAAM,MAEV,MACJ,IAAK,WACDA,EAAMnE,IAAUA,EAAQ,IAAIE,KAAKF,IAC7BA,EAAMU,cAAgB,IAAM,gBAAQV,EAAM2gD,WAAa,GAAK,IAAM,gBAAQ3gD,EAAMwgD,WAAa,KACjG,MAER,OAAOr8C,GAEXksN,EAAKtoO,UAAU84Q,eAAiB,WAE5B,IADA,IAAIv8M,EAAW,GAAGnvD,MAAMjK,KAAKrJ,KAAK27B,OAAOxyB,QAAQ0U,uBAAuB,gBAC/DpK,EAAK,EAAG26L,EAAa3rI,EAAUhvD,EAAK26L,EAAW1nM,OAAQ+M,IAAM,CAClE,IAAI26H,EAAOggE,EAAW36L,GACtB,gBAAO26H,GAEXpuI,KAAK27B,OAAO6sE,aAAathF,kBAAkBva,MAAM7C,SAAW,WACxD9J,KAAK27B,OAAO+sE,iBACR1oG,KAAK27B,OAAOxyB,QAAQ2I,cAAc,mBAClC9R,KAAK27B,OAAOxyB,QAAQ2I,cAAc,iBAAiBnF,MAAM7C,SAAW,IAExE9J,KAAK27B,OAAOxyB,QAAQ2I,cAAc,kBAAkBnF,MAAM7C,SAAW,KAG7E0kO,EAAKtoO,UAAU63Q,iBAAmB,WAC9B/9Q,KAAK8/L,UAAY9/L,KAAKi/Q,UAAU,CAC5B,CACItwL,MAAO3uF,KAAKk/Q,MAAMxzQ,KAAK1L,MACvB0kM,YAAa,CAAEj0L,QAASzQ,KAAKmgB,KAAKC,YAAY,YAC1C/P,SAAUrQ,KAAK27B,OAAOtrB,SAAW,aAAoBrQ,KAAK27B,OAAOtrB,SAAW,YAC5Es0L,WAAW,IAEnB,CACIh2G,MAAO3uF,KAAKm/Q,UAAUzzQ,KAAK1L,MAC3B0kM,YAAa,CAAEr0L,SAAUrQ,KAAK27B,OAAOtrB,SAAW,UAAiBrQ,KAAK27B,OAAOtrB,SAAW,SACpFI,QAASzQ,KAAKmgB,KAAKC,YAAY,mBAExC,gBAEPouN,EAAKtoO,UAAU43Q,eAAiB,WAC5B99Q,KAAKm+Q,UAAYn+Q,KAAKi/Q,UAAU,CAC5B,CACItwL,MAAO3uF,KAAKo/Q,WAAW1zQ,KAAK1L,MAC5B0kM,YAAa,CAAEj0L,QAASzQ,KAAKmgB,KAAKC,YAAY,YAC1C/P,SAAUrQ,KAAK27B,OAAOtrB,SAAW,UAAiBrQ,KAAK27B,OAAOtrB,SAAW,SACzEs0L,WAAW,KAEpB,cAEP6pC,EAAKtoO,UAAUk5Q,WAAa,WACxBp/Q,KAAKm+Q,UAAUvmQ,QAEnB42N,EAAKtoO,UAAU+4Q,UAAY,SAAUI,EAAY/6Q,GAC7C,IAAIgoG,EAAMtsG,KAAK27B,OAAOtxB,cAAc,MAAO,CAAE6G,GAAIlR,KAAK27B,OAAOxyB,QAAQ+H,GAAK5M,IAC1EtE,KAAK27B,OAAOxyB,QAAQqB,YAAY8hG,GAChC,IAAIpjG,EAAU,CACV+pG,eAAe,EACf4xF,SAAS,EACTvyK,SAAS,EACTkyK,eAAe,EACfl+L,OAAQtG,KAAK27B,OAAOxyB,QACpBiC,MAAO,QACP4nG,kBAAmB,CAAElqG,OAAQ,QAC7BuH,SAAUrQ,KAAK27B,OAAOtrB,SAAWrQ,KAAK27B,OAAOtrB,SAAW,IAE5DnH,EAAQ0U,QAAUyhQ,EAClB,IAAIlkN,EAAM,IAAI,OAAOjyD,GACjBgwI,EAAmB,mBAGvB,OAFA/9E,EAAI,GAAK+9E,IAAoB,EAC7B/9E,EAAIrvC,SAASwgF,GACNnxC,GAEXqzK,EAAKtoO,UAAUi5Q,UAAY,WACnBn/Q,KAAK27B,OAAOs1B,cACZjxD,KAAK27B,OAAOs1B,YAAYquN,eAAgB,GAE5Ct/Q,KAAK27B,OAAOiqH,YAAYyxD,iBACxBr3M,KAAK27B,OAAOiqH,YAAYguH,eACxB5zQ,KAAK8/L,UAAUloL,OACf5X,KAAK27B,OAAOrc,OAAO,iBAAkB,KAEzCkvN,EAAKtoO,UAAUg5Q,MAAQ,WACnB,OAAQl/Q,KAAK8/L,UAAU32L,QAAQ2I,cAAc,kBAAkBoV,kBAAkBo5C,WAC7E,KAAKtgE,KAAKmgB,KAAKC,YAAY,iBACvBpgB,KAAKgpJ,WAAWM,aAAatpJ,KAAKmpP,UAAWnpP,KAAKu4B,MAClD,MACJ,KAAKv4B,KAAKmgB,KAAKC,YAAY,cACvBpgB,KAAKgpJ,WAAWE,YAChB,MACJ,KAAKlpJ,KAAKmgB,KAAKC,YAAY,oBACvBpgB,KAAKw+Q,aACL,MACJ,KAAKx+Q,KAAKmgB,KAAKC,YAAY,wBACe,UAAlCpgB,KAAK27B,OAAOm2E,aAAap5E,MACzB14B,KAAKgpJ,WAAW+uH,uBAEhB/3Q,KAAK27B,OAAOs1B,cACZjxD,KAAK27B,OAAOs1B,YAAYquN,eAAgB,GAE5Ct/Q,KAAKu/Q,gBACL,MAERv/Q,KAAKm/Q,aAET3wC,EAAKtoO,UAAUs5Q,sBAAwB,WAC/Bx/Q,KAAK27B,OAAOqvE,SACZhrG,KAAKwwQ,iBACLxwQ,KAAKywQ,eAETzwQ,KAAKkY,WAMTs2N,EAAKtoO,UAAU0mC,iBAAmB,WAC1B5sC,KAAK27B,OAAOkR,cAGhB7sC,KAAKy/Q,aAAe,CAAC,CAAEnrQ,MAAO,QAA4BgvI,QAAStjJ,KAAK2a,mBACpE,CAAErG,MAAO,QAAmBgvI,QAAStjJ,KAAKwzM,YAC1C,CAAEl/L,MAAO,QAAmBgvI,QAAStjJ,KAAKohJ,iBAC1C,CAAE9sI,MAAO,OAAgBgvI,QAAStjJ,KAAKg+Q,kBACvC,CAAE1pQ,MAAO,QAAuBgvI,QAAStjJ,KAAKg/Q,gBAC9C,CAAE1qQ,MAAO,QAAqBgvI,QAAStjJ,KAAK0/Q,cAC5C,CAAEprQ,MAAO,QAAoBgvI,QAAStjJ,KAAKywQ,aAC3C,CAAEn8P,MAAO,QAAgBgvI,QAAStjJ,KAAKw/Q,wBAC3C,eAAuBx/Q,KAAK27B,OAAQ37B,KAAKy/Q,cAAc,EAAMz/Q,MAC7DA,KAAK+gL,oBAAsB/gL,KAAK2/Q,cAAcj0Q,KAAK1L,MACnDA,KAAK4/Q,uBAAyB5/Q,KAAK+xG,eAAermG,KAAK1L,MACvDA,KAAK27B,OAAOiR,iBAAiB,OAAoB5sC,KAAK+gL,qBACtD/gL,KAAK27B,OAAOiR,iBAAiB,OAAuB5sC,KAAK4/Q,0BAM7DpxC,EAAKtoO,UAAUq1E,oBAAsB,WAC7Bv7E,KAAK27B,OAAOkR,cAGhB,eAAuB7sC,KAAK27B,OAAQ37B,KAAKy/Q,cAAc,GACvDz/Q,KAAK27B,OAAO4/C,oBAAoB,OAAuBv7E,KAAK4/Q,wBAC5D5/Q,KAAK27B,OAAO4/C,oBAAoB,OAAoBv7E,KAAK+gL,uBAE7DytD,EAAKtoO,UAAU6rG,eAAiB,SAAUh/F,GACtC,IAAI8sQ,EAAU,CAAC,MAAO,YAAa,OAAQ,SAAU,SAAU,kBAAmB,uBAC9EA,EAAQ91Q,QAAQgJ,EAAEsjC,aAAe,IACjCr2C,KAAK27B,OAAOqvE,QAAS,GAEH,cAAlBj4F,EAAEsjC,aACFr2C,KAAK27B,OAAOiqH,YAAYguH,eAE5B5zQ,KAAKq+Q,kBAQT7vC,EAAKtoO,UAAUkqQ,qBAAuB,SAAUlpM,EAAM4nM,GAClD,IAAIn2N,EAAO34C,KAAK27B,OAChB,GAAIgd,EAAKm5D,aAAaxhE,SAAU,CAE5B,IADA,IAAImyB,EAAW,GAAGnvD,MAAMjK,KAAK69D,EAAKzE,UACzBrkC,EAAI,EAAGA,EAAIqkC,EAAS/7D,OAAQ03B,IACjC,IAAMqkC,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAKiW,aAAa,SAA+D,mBAAnDk1C,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAKhN,WACrGm4D,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAKtM,UAAUkB,SAAS,oBAAqE,WAA9Cu2D,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAKlD,OACnH,gBAAaquD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAM,sBAAuB,gBAAamrD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAM,uBAAyB,CACvJ,IAAI6gC,EAASsqB,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAKiW,aAAa,QAAW,gBAAkBk1C,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAKhH,aAAa,SAC1I,gBAAkBmyD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAKhH,aAAa,OACpEisB,EAASoc,EAAK4Y,iBAAiBpZ,IAAU,CAAEA,MAAOA,EAAO/jC,KAAMquD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAKhH,aAAa,SACjH6N,OAAQ,EACQ,aAAhBoe,EAAOnoB,MAAuC,YAAhBmoB,EAAOnoB,KACrC+J,EAAQskD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAKwnF,QAExCr8B,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAK6G,OAC1CA,EAAQskD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAK6G,MACzCskD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAK2yH,eACrCxnE,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAK2yH,cAAcvjI,SAClD,eAAkB+7D,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAK2yH,cAAc,GAAG9rH,SACzEskD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAKiO,OACrCpH,EAAQskD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KACnC2yH,cAAc,GAAG9rH,QAGrBskD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAK2yH,gBAC1C9rH,EAAQskD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KACnC2yH,cAAc,GAAG9rH,OAEtBoe,EAAOyb,MAAoC,kBAArBzb,EAAOyb,KAAKivE,KAClC9oG,EAAQ,eAASoe,EAAOyb,KAAKivE,KAAM76G,OAA3B,CAAmCq2D,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAM6G,GAE5Eoe,EAAOyb,MAAQzb,EAAOyb,KAAKivE,OAChC9oG,EAAQoe,EAAOyb,KAAKivE,KAAKxkD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAM6G,IAEnEA,EAAQw6B,EAAKqwG,WAAW+1H,iBAAiBxiP,EAAQpe,GACC,UAA9CskD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAKlD,KACjCquD,EAAS19D,SAASq5B,EAAE9mB,WAAY,KAAKwnF,SACrC,OAASx5E,SAASiX,EAAO4b,MAAOh6B,EAAO2wP,IAItB,kBAAV3wP,GACPne,KAAK27B,OAAO7qB,SAASqN,GAEzB,OAASmH,SAASiX,EAAO4b,MAAOh6B,EAAO2wP,IAInD,OAAOA,EAGX,IADA,IAAI/8M,EAAMpZ,EAAKypG,YAAYhpH,QAAO,SAAU24B,GAAO,OAAOA,EAAI6zC,gBACrDnnE,EAAI,EAAGA,EAAIszB,EAAIrrD,OAAQ+3B,IAC5B,GAAIyoC,EAAK,eAAkBnV,EAAIhtD,SAAS05B,EAAEnnB,WAAY,KAAK6gC,QAAS,CAChE,IAAI43K,EAAgB,GAAGz8M,MAAMjK,KAAK69D,EAAK,eAAkBnV,EAAIhtD,SAAS05B,EAAEnnB,WAAY,KAAK6gC,SACzF43K,EAAgBA,EAAcrpN,OAASqpN,EAAgB,CAAC7oJ,EAAK,eAAkBnV,EAAIhtD,SAAS05B,EAAEnnB,WAAY,KAAK6gC,SAC/G,IAAI+Q,EAAO6mK,EAAc32L,QAAO,SAAUrmB,GACtC,OAAQ,eAAmBA,EAAe,kBAE1B,IAAhBm2C,EAAKxiD,SACLwiD,EAAO6mK,EAAc32L,QAAO,SAAUrmB,GAAK,OAAOA,EAAEwa,aAAa,YAErE,IAAS6Q,EAAI,EAAGA,EAAI8qB,EAAKxiD,OAAQ03B,IAAK,CAC9BjgB,EAAQne,KAAK6pL,SAAS93H,EAAIhtD,SAAS05B,EAAEnnB,WAAY,KAAM4xC,EAAKnkD,SAASq5B,EAAE9mB,WAAY,KAAMw3P,GAChD,WAAzC/8M,EAAIhtD,SAAS05B,EAAEnnB,WAAY,KAAKlD,OAChC+J,EAAQne,KAAK27B,OAAO7qB,SAASqN,IAEjC,OAASmH,SAASysC,EAAIhtD,SAAS05B,EAAEnnB,WAAY,KAAK6gC,MAAOh6B,EAAO2wP,IAK5E,IADA,IAAIgR,EAAS,GAAGxsQ,MAAMjK,KAAK69D,EAAKrpD,uBAAuB,YAC9C9W,EAAI,EAAG2hB,EAAMo3P,EAAOp5Q,OAAQK,EAAI2hB,EAAK3hB,IAAK,CAC/C,IAAIi0K,EAAQriI,EAAKgb,eAAemsN,EAAO/6Q,SAASgC,EAAEuQ,WAAY,KAAKhH,aAAa,iBAChF,GAAI0qK,GAASA,EAAM7iI,MAAO,CAClBh6B,EAAQne,KAAK6pL,SAAS7O,EAAO8kG,EAAO/6Q,SAASgC,EAAEuQ,WAAY,KAAMw3P,GAClD,WAAf9zF,EAAM5mK,OACN+J,EAAQne,KAAK27B,OAAO7qB,SAASqN,IAEjC,OAASmH,SAAS01J,EAAM7iI,MAAOh6B,EAAO2wP,IAG9C,OAAOA,GAEXtgC,EAAKtoO,UAAU2jL,SAAW,SAAU93H,EAAKltD,EAAOiqQ,GAC5C,IAAI3wP,EAAQtZ,EAAMolI,cACdplI,EAAMolI,cAAc,GAAG9rH,MAAQtZ,EAAMsZ,MACrCw6B,EAAO34C,KAAK27B,OACZutB,EAAO6I,EAAI/Z,KAAKivE,KAcpB,MAbiB,aAAbl1D,EAAI39C,MAAoC,YAAb29C,EAAI39C,OAC/B+J,EAAQtZ,EAAMi6F,SAEE,kBAAT51C,GACPA,EAAO,eAASA,EAAM98C,QACtB+R,EAAQw6B,EAAKqwG,WAAW+1H,iBAAiBhtN,EAAK,EAAOltD,EAAOsZ,KAG5DA,EAAQw6B,EAAKqwG,WAAW+1H,iBAAiBhtN,EAAKA,EAAI/Z,KAAKivE,KAAKpiH,EAAOsZ,IAEnE,eAAkB2wP,EAAW/8M,EAAI5Z,SAAqB,KAAVh6B,IAC5CA,EAAQ2wP,EAAW/8M,EAAI5Z,QAEpBh6B,GAOXqwN,EAAKtoO,UAAUy5Q,cAAgB,SAAU5sQ,GACrC,GAAsB,gBAAlBA,EAAEsjC,aAAiCr2C,KAAK27B,OAAOqvE,QACV,UAAlChrG,KAAK27B,OAAOm2E,aAAap5E,KAC5B14B,KAAKkpJ,gBAEJ,CACD,IAAImkH,EAAUrtQ,KAAK27B,OAAOxyB,QAAQ2I,cAAc,IAAM,QAClDiuQ,EAAS//Q,KAAK27B,OAAOxyB,QAAQ2I,cAAc,IAAM,QACrD,GAAIu7P,GAAWrtQ,KAAK27B,OAAOitE,YAAgC,kBAAlB71F,EAAEsjC,aACpCtxC,SAAS,gBAAasoQ,EAAS,QAAc/8P,aAAa,QAAwB,IAAMtQ,KAAK27B,OAAOitE,WACvG,OAEJ,IAAIo3K,EAAyB,CAAC,kBAAmB,mBAAoB,sBAAuB,oBAAqB,OAAQ,iBAAkB,iBACvIC,GAAgE,IAAnDD,EAAuBj2Q,QAAQgJ,EAAEsjC,aAC9C6pO,EAAuBlgR,KAAK27B,OAAOmd,sBAAwB94C,KAAKksQ,UAC5DlsQ,KAAKksQ,QAAQr/N,cAAgBwgO,GAAW0S,GAA4B,WAAlBhtQ,EAAEsjC,cAA6B4pO,IACnFjgR,KAAK27B,OAAOmd,sBAA0D,UAAlC94C,KAAK27B,OAAOm2E,aAAap5E,MAAoB14B,KAAKksQ,UAAYlsQ,KAAKksQ,QAAQr/N,aAC9GozO,IAAeltQ,EAAEsB,QAAW6rQ,KAC/BlgR,KAAKwwQ,iBACLxwQ,KAAKywQ,iBASjBjiC,EAAKtoO,UAAUsqQ,eAAiB,SAAUngN,GACtC,IAAI1X,EAAO34C,KAAK27B,OACZgd,EAAKm5D,aAAaxhE,WAClBtwC,KAAK27B,OAAO2vK,gBAAgB,CAAC,yBACzBtrM,KAAK27B,OAAO5tB,SACZ/N,KAAK27B,OAAOgsH,mBAGpBt3F,EAAOA,GAAcrwD,KAAK27B,OAAOqlN,yBAAyBhhP,KAAK27B,OAAO8sE,4BAClEp4C,EAAKwC,MAAK,SAAUt2B,GAAU,OAAQ,eAAkBA,EAAOqpE,mBAC/D5lG,KAAK27B,OAAO2vK,gBAAgB,CAAC,iBACzBtrM,KAAK27B,OAAO5tB,SACZ/N,KAAK27B,OAAOgsH,mBAGpB,IAAK,IAAIl0I,EAAK,EAAGuwI,EAAS3zF,EAAM58C,EAAKuwI,EAAOt9I,OAAQ+M,IAAM,CACtD,IAAIs+C,EAAMiyF,EAAOvwI,GACby1C,EAAO6I,EAAI/Z,KAAK9/B,QAChB65C,EAAI/Z,KAAK9/B,UACW,kBAATgxC,GACPA,EAAO,eAASA,EAAM98C,QACtB88C,KAGA6I,EAAI/Z,KAAK9/B,WAKrB,IADA,IAAIuqD,EAAW,GAAGnvD,MAAMjK,KAAKrJ,KAAKksQ,QAAQ/iQ,QAAQs5D,UACzC17D,EAAI,EAAGA,EAAI07D,EAAS/7D,OAAQK,IAC7B07D,EAAS19D,SAASgC,EAAEuQ,WAAY,KAAKiW,aAAa,SAC9Ck1C,EAAS19D,SAASgC,EAAEuQ,WAAY,KAAK2yH,eACrCxnE,EAAS19D,SAASgC,EAAEuQ,WAAY,KAAK2yH,cAAcvjI,SAClD+7D,EAAS19D,SAASgC,EAAEuQ,WAAY,KAAK2yH,cAAc,GAAGp9F,aACvD41B,EAAS19D,SAASgC,EAAEuQ,WAAY,KAAK2yH,cAAc,GAAG/xH,WAStEs2N,EAAKtoO,UAAUuqQ,YAAc,WACzBzwQ,KAAKg/Q,iBAEL,IADA,IAAImB,EAAc,CAACngR,KAAKksQ,QAASlsQ,KAAK2+Q,SAAU3+Q,KAAK6+Q,UAAW7+Q,KAAKogR,gBAC5Dr5Q,EAAI,EAAGA,EAAIo5Q,EAAYz5Q,OAAQK,IAChCo5Q,EAAYp7Q,SAASgC,EAAEuQ,WAAY,MAAQ6oQ,EAAYp7Q,SAASgC,EAAEuQ,WAAY,KAAKnO,UAC/Eg3Q,EAAYp7Q,SAASgC,EAAEuQ,WAAY,KAAKu1B,aAC5CszO,EAAYp7Q,SAASgC,EAAEuQ,WAAY,KAAKY,UAGhDlY,KAAKg/Q,kBAQTxwC,EAAKtoO,UAAUgS,QAAU,WACrB,IAAIy1F,EAAc3tG,KAAK27B,OAAOxyB,QAC9B,GAAKwkG,EAAL,CAGA,IAAI8uI,KAAe9uI,EAAY77F,cAAc,IAAM,UAC/C67F,EAAY77F,cAAc,IAAM,SAChC2qO,GACAz8O,KAAKywQ,cAETzwQ,KAAKu7E,sBACL,IAAI6yD,EAAOpuI,KAAK8/L,UAAU32L,QACtBilI,EAAKlpD,kBAAoB,IACzBllF,KAAK8/L,UAAU5nL,UACf,gBAAOk2H,IAEXA,EAAOpuI,KAAKm+Q,UAAUh1Q,QAClBilI,EAAKlpD,kBAAoB,IACzBllF,KAAKm+Q,UAAUjmQ,UACf,gBAAOk2H,IAENquG,GAGDz8O,KAAKgpJ,YACLhpJ,KAAKgpJ,WAAW9wI,YAGxBs2N,EAAKtoO,UAAUk7I,gBAAkB,SAAUruI,GACvC,IAAI+yI,EAAY,SAAS5iI,KAAKkoG,UAAU26B,UAIxC,OAHID,GAAa/yI,EAAEizI,SAAwB,cAAbjzI,EAAEqT,SAC5BrT,EAAEqT,OAAS,UAEPrT,EAAEqT,QACN,IAAK,SACDpmB,KAAKopP,YACL,MACJ,IAAK,SACyB,UAArBr2O,EAAEzM,OAAOgP,UAAuBvC,EAAEzM,OAAO0E,UAAUkB,SAAS,kBACzDsH,SAAS1B,cAAc,gCAC3B9R,KAAKspJ,eAET,MACJ,IAAK,KACDtpJ,KAAKipJ,YACL,MACJ,IAAK,QACI,gBAAal2I,EAAEzM,OAAQ,qBAAyD,UAAlCtG,KAAK27B,OAAOm2E,aAAap5E,QACvE,gBAAa3lB,EAAEzM,OAAQ,SAA0BtG,KAAK27B,OAAOitE,YACvD,gBAAa71F,EAAEzM,OAAQ,UAC1BkN,SAASqK,uBAAuB,gBAAgBnX,SACpDqM,EAAE6F,iBACF5Y,KAAKw1D,WAET,MACJ,IAAK,SACGx1D,KAAK27B,OAAOqvE,SAAWhrG,KAAK2tQ,sBACU,UAAlC3tQ,KAAK27B,OAAOm2E,aAAap5E,KACzB14B,KAAKgpJ,WAAWsuH,iBAGhBt3Q,KAAKqgR,eAAettQ,IAGxB/S,KAAK2tQ,sBACL3tQ,KAAK2tQ,qBAAsB,GAE/B,MACJ,IAAK,MACL,IAAK,WACD3tQ,KAAKqgR,eAAettQ,GACpB,QAGZy7N,EAAKtoO,UAAUm6Q,eAAiB,SAAUttQ,GACtC,GAAI/S,KAAK27B,OAAOqvE,QAA4C,UAAlChrG,KAAK27B,OAAOm2E,aAAap5E,KAAkB,CACjE,IAAI8kE,EAAY,gBAAazqF,EAAEzM,OAAQ,gBAAkB,gBAAayM,EAAEzM,OAAQ,cAChF,GAAIk3F,EAAW,CACX,IAAI8iL,EAAqB,GAAGhtQ,MAAMjK,KAAKm0F,EAAUr1E,iBAAiB,8BAC9Do4P,EAAiB,GAAGjtQ,MAAMjK,KAAKm0F,EAAUr1E,iBAAiB,mBAC9D,GAAIo4P,EACA,IAAK,IAAIx5Q,EAAI,EAAGA,EAAIw5Q,EAAe75Q,OAAQK,IACvCu5Q,EAAqBA,EAAmBh8O,OAAO,GAAGhxB,MAC7CjK,KAAKk3Q,EAAex7Q,SAASgC,EAAEuQ,WAAY,KAAK6Q,iBAAiB,yBAG9E,IAAI20E,EAAU,gBAAa/pF,EAAEzM,OAAQ,aACrC,GAAKw2F,IAAY,gBAAawjL,EAAmBA,EAAmB55Q,OAAS,GAAI,cAC7D,QAAbqM,EAAEqT,SAAqB02E,EAAQ9xF,UAAUkB,SAAS,kBACjD4wF,IAAY,gBAAawjL,EAAmB,GAAI,cAA6B,aAAbvtQ,EAAEqT,QACtD,WAAbrT,EAAEqT,OAAqB,CAC1B,IAAIm0B,EAAMijD,EAAUltF,aAAa,YAC7BktB,EAAOx9B,KAAK27B,OAAOk7L,UACnBp2L,EAAWjD,EAAK/wB,KAAI,SAAU5K,GAAK,OAAOA,EAAEyO,aAAa,eAAgBvG,QAAQwwC,GACjFv6C,KAAK27B,OAAOitE,YAAc,gBAAapL,EAAW,eAClD/8D,GAAsBzgC,KAAK27B,OAAOitE,YAElCpL,EAAUxyF,UAAUkB,SAAS,gBAC7Bu0B,EAAW,GAEE,WAAb1tB,EAAEqT,OACFpmB,KAAKkpJ,YAGLlpJ,KAAKw1D,UAELx1D,KAAK27B,OAAOiqH,YAAYyuH,SACxBr0Q,KAAK27B,OAAOiqH,YAAYyuH,OAAOC,OAAO9xC,QAAU,CAAC/hM,EAAU,QAM/E+tM,EAAKtoO,UAAUw5Q,aAAe,SAAUl0P,GACpCxrB,KAAKwgR,WAAah1P,EAClBxrB,KAAK4qM,WAAW,uBAAwB5qM,KAAK8/L,YAEjD0uC,EAAKtoO,UAAUq5Q,cAAgB,WAC3Bv/Q,KAAKwgR,WAAWl9H,QAAQj6I,KAAKrJ,KAAKwgR,WAAWxhL,SAAUh/F,KAAKwgR,WAAWj9H,KAAMvjJ,KAAKwgR,WAAWh9H,KAAMxjJ,KAAKwgR,WAAW7zE,KAAM3sM,KAAKwgR,WAAW5zE,KAAM5sM,KAAKwgR,WAAW3zE,KAAM7sM,KAAKwgR,WAAW1zE,KAAM9sM,KAAKwgR,WAAWzzE,KAAM/sM,KAAKwgR,WAAWxzE,OAQrOwhC,EAAKtoO,UAAUwpQ,oBAAsB,SAAUr/M,EAAMowN,GACjD,IAAI9nO,EAAO34C,KAAK27B,OACZklH,EAAM,EACN35E,EAAyC,WAAlClnE,KAAK27B,OAAOm2E,aAAap5E,KAChCigB,EAAKxvC,QAAQ0U,uBAAuB,cAAc9Y,SAAS87I,EAAIvpI,WAAY,KAC3E,gBAAO,IAAMqhC,EAAKxvC,QAAQ+H,GAAK,kCAAmCsC,UAClEnB,EAAQ,EACRi7C,EAAQ,GACRozN,EAAS,GACTC,EAAU,GACdtwN,EAAOA,GAAc1X,EAAKiX,aAC1B,IAAK,IAAI7oD,EAAI,EAAGA,EAAIspD,EAAK3pD,OAAQK,KACxBspD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAKgb,SAAuC,WAA3BqmB,EAAKm5D,aAAap5E,QAAsG,IAAhFigB,EAAKK,cAAc1b,QAAQvzB,QAAQsmD,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6gC,QAC5H,WAA3BQ,EAAKm5D,aAAap5E,QAGrB23B,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAK6oN,iBAAmB,eAAkBsgD,IACtE,gBAAmBpwN,EAAKtrD,SAASgC,EAAEuQ,WAAY,KAAMjF,EAAOi7C,EAAOozN,EAAQC,EAAStwN,EAAK3pD,QAGjG4mD,EAAQ,eAAOA,EAAOozN,EAAQC,GAC9B3gR,KAAK27B,OAAOqtH,WAAWkjH,QAAUlsQ,KAAK4gR,cAAc15M,EAAMu5M,GAAoBnzN,IAQlFkhL,EAAKtoO,UAAU06Q,cAAgB,SAAU15M,EAAM5Z,GAC3C,IAAIlkD,EAAQpJ,KACZ,OAAO,IAAI,OAAcknE,EAAM,CAC3B5Z,MAAOA,EACPptC,OAAQlgB,KAAK27B,OAAOzb,OACpB2gQ,mBAAoB,SAAUr1P,GAC1BpiB,EAAMy3Q,mBAAmBr1P,IAE7BwoM,gBAAiB,SAAUt2M,EAAcq1G,GACrC,IAAIx4E,EAAM78B,EAAapN,aAAa,gBAChCkb,EAAO,CACP+Q,OAAQnzB,EAAMuyB,OAAOg4B,eAAepZ,GACpCw4E,MAAOA,EACPr1G,aAAcA,EACdS,MAAOT,EAAaS,OAElB7J,OAASA,MAAM,kBAAoBA,MAAM,iBAAiBtJ,UAAUkB,SAAS,mBAC/E9C,EAAM03Q,kBAAkBpjQ,EAAcq1G,GAE1C3pH,EAAMuyB,OAAOrc,OAAO,QAA2BkM,OAI3DgjN,EAAKtoO,UAAU46Q,kBAAoB,SAAUpjQ,EAAcq1G,GACvD,GAAI/yH,KAAK27B,OAAOqvE,OAAQ,CACpB,IAAI95F,EAAK6hH,EAAMziH,aAAa,OACxB89H,EAAOpuI,KAAK+gR,aAAarjQ,GAAc5L,cAAc,IAAM,eAAiBZ,GAAM,UACjFk9H,EAIDA,EAAKt8H,cAAc,kBAAkBpB,UAAYqiH,EAAMtmG,UAHvDzsB,KAAKqxC,cAAc3zB,EAAcq1G,EAAO7hH,EAAI,MAOxDs9N,EAAKtoO,UAAU66Q,aAAe,SAAUrjQ,GACpC,IAAIsjQ,EAEA5mN,EADAzhB,EAAO34C,KAAK27B,OAEhB,GAA+B,WAA3Bgd,EAAKm5D,aAAap5E,KAAmB,CACrCsoP,EAAUroO,EAAKiwD,YAAcjwD,EAAKiwD,YAC3B7jG,SAAS,eAAQ2Y,EAAc,IAAM,QAAcpN,aAAa,QAAwB,KAAO,GAC1FoN,EAAapZ,KACzB81D,EAAQp6D,KAAK27B,OAAO+sE,eAAiB/vD,EAAKxvC,QAAU63Q,EAASroO,EAAK2tG,iBAAmB3tG,EAAKg0D,uBAG1FvyC,EAAQ,gBAAO,IAAMzhB,EAAKxvC,QAAQ+H,GAAK,sBAAuBsC,UAElE,OAAO4mD,GAEXo0K,EAAKtoO,UAAU+6Q,kBAAoB,SAAU7yI,EAAM5iH,GAC/C,IAAIsiL,EAAK,gBAAatiL,EAAKriB,QAAS,QACpC,GAAI2kM,EAAI,CACJ,IAAIozE,EAAUpzE,EAAG9gM,wBAAwBukB,MACrC4vP,EAAY/yI,EAAKphI,wBAAwBukB,MAC7C,GAAI4vP,EAAYD,EAAS,CACrB,IAAIE,EAASD,EAAYD,EACzB9yI,EAAKzhI,MAAM7B,KAAQsjI,EAAK73H,WAAa6qQ,EAAU,QAI3D5yC,EAAKtoO,UAAU26Q,mBAAqB,SAAUr1P,GAC1C,GAAIxrB,KAAK27B,OAAOqvE,OAAQ,CACpB,IAAIojC,EAAOpuI,KAAK+gR,aAAav1P,EAAKriB,SAAS2I,cAAc,IAAM,eAAiB0Z,EAAKqnM,WAAa,UAC9FzkF,IACoB,YAAhB5iH,EAAKshC,QACLshF,EAAKzhI,MAAMC,QAAU,GACrB5M,KAAKihR,kBAAkB7yI,EAAM5iH,IAG7B4iH,EAAKzhI,MAAMC,QAAU,UAKrC4hO,EAAKtoO,UAAUmrC,cAAgB,SAAUloC,EAAS4pH,EAAOzuH,EAAMsI,GAC3D,IAAIs/P,EAAUlsQ,KAAKksQ,QAAQ/iQ,QACvBk4Q,EAAa,gBAAal4Q,EAAS,wBACnCk4Q,IACAnV,EAAUlsQ,KAAKogR,eAAej3Q,SAElC,IAKI63Q,EAEAM,EAPAC,EAAWvhR,KAAK27B,OAAO6sE,aAAathF,kBACpC6nP,EAAWwS,EAASv1K,aAAeu1K,EAASryQ,cAAgBqyQ,EAASn4K,YAAcm4K,EAASpyQ,YAC5Fs+P,EAA6C,WAAlCztQ,KAAK27B,OAAOm2E,aAAap5E,KACpCo1K,EAAK,eAAQ3kM,EAAS,IAAM,QAC5BqzB,EAAM,eAAQrzB,EAAS,IAAM,QAE7Bq4Q,GAAgB,EAEhBC,GAAqB,EACrBC,EAAmB3yQ,KAAKC,MAAMhP,KAAK27B,OAAO6sE,aAAat5F,aAAelP,KAAK27B,OAAOmtE,gBAAkB,EACpGtrE,EAAO,GAAGlqB,MAAMjK,KAAKrJ,KAAK27B,OAAO6sE,aAAa3qF,uBAAuB,SAQzE,GAPsC,UAAlC7d,KAAK27B,OAAOm2E,aAAap5E,OACzB8E,EAAO,GAAGlqB,MAAMjK,KAAKrJ,KAAK27B,OAAO6sE,aAAargF,iBAAiB,6BAC3Du5P,GAAoB,GAAKlkP,EAAK92B,QAAUg7Q,GACrClkP,EAAKA,EAAK92B,OAAS,GAAG4J,aAAa,UAA2BksB,EAAIlsB,aAAa,UAClFmxQ,GAAqB,IAGzBhU,EAAU,CACV,GAAIztQ,KAAK27B,OAAOitE,WAAY,CACxB,IAAI+4K,EAAe,GAAGruQ,MAAMjK,KAAKrJ,KAAK27B,OAAO2qH,iBAAiBx0I,cAAc,QAAgBqW,iBAAiB,6BAC7G64P,EAASW,EAAaj7Q,QAAU3B,SAASy3B,EAAIlsB,aAAa,QAAwB,KAAO,GACzFkxQ,EAAgBR,GAAUj8Q,SAASy3B,EAAIlsB,aAAa,QAAwB,MAAQqxQ,EAAaj7Q,OAAS,EAC1G,IAAIk7Q,EAAY,GAAGtuQ,MAAMjK,KAAKrJ,KAAK27B,OAAO2qH,iBAAiBx0I,cAAc,QAAgBqW,iBAAiB,6BACjF,IAArBy5P,EAAUl7Q,SAAiBk7Q,EAAU,GAAG52Q,UAAUkB,SAAS,eAAiB01Q,EAAU,GAAG52Q,UAAUkB,SAAS,oBAC5Gs1Q,GAAgB,IAGpBA,GAAkBE,GAAoB,GAAKlkP,EAAK92B,QAAUg7Q,IACT,WAA5C1hR,KAAK27B,OAAOm2E,aAAay4J,gBAAgCvqQ,KAAKgpJ,WAAWx9H,MAClC,QAArCxrB,KAAKgpJ,WAAWx9H,KAAK6qB,aAA4By3J,EAAG9iM,UAAUkB,SAAS,mBACtEswB,EAAIxxB,UAAUkB,SAAS,UAAyBu1Q,KACxDH,GAA4B,GAGpC,IAAIlnN,EAAQqzM,EACPuT,EAAShhR,KAAK27B,OAAO2qH,iBAAmBtmJ,KAAK27B,OAAOgxE,kBACrD,gBAAO,IAAM3sG,KAAK27B,OAAOxyB,QAAQ+H,GAAK,qCAAsCsC,UAC5EmgG,EAASv5C,EAAMptD,wBACflC,EAAO2iQ,EACPztQ,KAAK27B,OAAOxyB,QAAQ6D,wBAAwBlC,KAAO6oG,EAAO7oG,KAC1DjG,EAAQ,eAAQsE,EAAS,MACzB04Q,EAAch9Q,EAAQA,EAAMmI,wBAA0B7D,EAAQie,cAAcpa,wBAC5Es/F,EAAMtsG,KAAK27B,OAAOtxB,cAAc,MAAO,CACvCC,UAAW,qDACX4G,GAAI5M,EAAO,SACXwQ,OAAQ,WAAalI,EAAU,UACzBo0Q,EAASa,EAAYh3Q,IAAMg3Q,EAAY12Q,OAAS02Q,EAAYrwP,OAASmiF,EAAO9oG,KAAOuvD,EAAMxjD,UAAY,GAAK,YAC3GirQ,EAAY/2Q,KAAOA,EAAOsvD,EAAM3jD,WAAaorQ,EAAYz2Q,MAAQ,GAF9D,gBAGWy2Q,EAAYz2Q,MAAQ,0BAEvCpL,KAAK27B,OAAOtrB,UACZi8F,EAAIthG,UAAU0G,IAAI1R,KAAK27B,OAAOtrB,UAE9Bo9P,GAAY95J,EAAO7oG,KAAOA,IAC1BwhG,EAAI3/F,MAAM7B,KAAO/F,SAASunG,EAAI3/F,MAAM7B,KAAM,IAAM6oG,EAAO7oG,KAAOA,EAAO,MAEzE,IAEIg3Q,EAFArxQ,EAAUzQ,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,kBAe5D,GAdAmG,EAAQjG,YAAYuoH,GAEhBuuJ,GACAQ,EAAQ9hR,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,6BACtDw3Q,EAAMt3Q,YAAYxK,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,oCAChEw3Q,EAAMt3Q,YAAYxK,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,sCAGhEw3Q,EAAQ9hR,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,0BACtDw3Q,EAAMt3Q,YAAYxK,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,iCAChEw3Q,EAAMt3Q,YAAYxK,KAAK27B,OAAOtxB,cAAc,MAAO,CAAEC,UAAW,kCAEpEgiG,EAAI9hG,YAAYiG,GAChB67F,EAAI9hG,YAAYs3Q,IACXT,GAAerhR,KAAK27B,OAAiB,YAAuC,WAAlC37B,KAAK27B,OAAOm2E,aAAap5E,KAAmB,CACvF,IAAIqpP,EAAgD,WAAlC/hR,KAAK27B,OAAOm2E,aAAap5E,KACvC,eAAQvvB,EAAS,eAAiB,eAAQA,EAAS,IAAM,QAG7D,GAFA44Q,EAAYp1Q,MAAM7C,SAAW,WAC7BwiG,EAAI3/F,MAAM7C,SAAW,WACiB,UAAlC9J,KAAK27B,OAAOm2E,aAAap5E,MACxB,eAAQvvB,EAAS,IAAM,SAA2B,eAAQA,EAAS,IAAM,SACtEnJ,KAAK27B,OAAiB,WAC1B,GAAI37B,KAAK27B,OAAO+sE,eACZ,GAAIolG,EAAG9iM,UAAUkB,SAAS,cACtB,eAAS,CAACogG,GAAM,cAChB4/J,EAAQ1hQ,YAAY8hG,OAEnB,CACD,IAAI8hC,EAAO,eAAQ0/D,EAAI,iBAAmB9tM,KAAK27B,OAAOxyB,QAAQ2I,cAAc,iBACxD,IAAhB0rB,EAAK92B,OAAe1G,KAAK27B,OAAOxyB,QAAQ2I,cAAc,kBAAkBA,cAAc,cAClF9R,KAAK27B,OAAOxyB,QAAQ2I,cAAc,kBAC1Cs8H,EAAK5jI,YAAY8hG,GACjB8hC,EAAKzhI,MAAM7C,SAAW,gBAI1BoiQ,EAAQ1hQ,YAAY8hG,QAIxBtsG,KAAK2+Q,SAASx1Q,QAAQqB,YAAY8hG,QAItC,GAAI+0K,EACArhR,KAAKogR,eAAej3Q,QAAQqB,YAAY8hG,QAGxC,GAAItsG,KAAK27B,OAAO+sE,eACZ,GAAIolG,EAAG9iM,UAAUkB,SAAS,cACtB,eAAS,CAACogG,GAAM,cAChBtsG,KAAKksQ,QAAQ/iQ,QAAQqB,YAAY8hG,OAEhC,CACG8hC,EAAO,eAAQ0/D,EAAI,iBAAmB9tM,KAAK27B,OAAOxyB,QAAQ2I,cAAc,iBACxD,IAAhB0rB,EAAK92B,OAAe1G,KAAK27B,OAAOxyB,QAAQ2I,cAAc,kBAAkBA,cAAc,cAClF9R,KAAK27B,OAAOxyB,QAAQ2I,cAAc,kBAC1Cs8H,EAAK5jI,YAAY8hG,GACjB8hC,EAAKzhI,MAAM7C,SAAW,gBAI1B9J,KAAKksQ,QAAQ/iQ,QAAQqB,YAAY8hG,GAY7C,GARK,eAAkBwhG,KACfA,EAAG9iM,UAAUkB,SAAS,iBACtBogG,EAAIthG,UAAU0G,IAAI,iBAEbo8L,EAAG9iM,UAAUkB,SAAS,iBAAmB4hM,EAAG9iM,UAAUkB,SAAS,mBACpEogG,EAAIthG,UAAU0G,IAAI,mBAGrB4vQ,GAA6B7T,GAAY8T,EAASv0Q,wBAAwBwkB,OAASqwP,EAAYrwP,OAASqwP,EAAY12Q,OAAQ,CAC7H,IAAI42K,EAAa/hL,KAAK27B,OAAO6sE,aAAa12F,cAAc,cACb,IAAvC9R,KAAK27B,OAAO9H,gBAAgBntB,QAAyC,IAAzBq7K,EAAWnrK,UACvDmrK,EAAWnrK,UAAY01F,EAAIj9F,aAAeyyQ,EAAM91K,aAGhDu1K,EAAS3qQ,UAAY2qQ,EAAS3qQ,UAAY01F,EAAIj9F,aAAeyyQ,EAAM91K,aAG3E,IAAI+uD,EAAah2J,SAASyO,SAASu4F,YAAY1/F,iBAAiBigG,EAAK,MAAM//F,iBAAiB,aAAc,IAW1G,GAVI+/F,EAAIt/F,wBAAwB5B,MAAQy2Q,EAAYz2Q,OAChDkhG,EAAIx6F,cAAc,SAAS9E,wBAAwB7B,QAAuB,IAAb4vJ,IAAqB,IAClFzuD,EAAI3/F,MAAMvB,MAAQkhG,EAAI3/F,MAAM6I,UAE5BxV,KAAK27B,OAAOitE,YAAgD,WAAlC5oG,KAAK27B,OAAOm2E,aAAap5E,KACnD4zE,EAAI3/F,MAAM7B,KAAOjG,EAAM0R,YAAc1R,EAAMuK,YAAc,EAAIk9F,EAAIl9F,YAAc,GAAK,KAGpFk9F,EAAI3/F,MAAM7B,KAAQ/F,SAASunG,EAAI3/F,MAAM7B,KAAM,IAAMwhG,EAAIl9F,YAAc,EAAK,KAExEq+P,IAAasB,IAAa/uQ,KAAK27B,OAAOkd,aAAe74C,KAAK27B,OAAOitE,WAAY,CAE7E,IAAI77F,EAAM,gBAA+BlI,EAAOynG,GAChDA,EAAI3/F,MAAM9B,IAAMkC,EAAIlC,IAAMg3Q,EAAY12Q,OAAS,EAAI,KAEvD,GAAIm2Q,EAA2B,CAC3B,IAAIvS,GAAmC,SAAvB/uQ,KAAK27B,OAAOxwB,QAAsBnL,KAAK27B,OAAOitE,YACtD5oG,KAAK27B,OAAOmd,sBAA0BwzD,EAAIthG,UAAUkB,SAAS,kBAAoBogG,EAAIthG,UAAUkB,SAAS,gBAQ5GogG,EAAI3/F,MAAM6kB,OAASqwP,EAAY12Q,OAAS,EAAI,SARkF,CAC9H,IAAIi+F,EAAcm4K,EAASn4K,YAAcm4K,EAASnyQ,YAAc,iBAAsB,EAClF4yQ,GAA0D,IAAhDhiR,KAAK27B,OAAOxwB,OAAOmM,WAAWvN,QAAQ,KAChDhF,SAAS/E,KAAK27B,OAAOxwB,OAAQ,IAAMo2Q,EAASlyQ,aAChDi9F,EAAI3/F,MAAM6kB,OAAUwwP,EAAUT,EAASzvQ,cAAc,SAASzC,aACxD+5F,EAAey4K,EAAY12Q,OAAS,EAAI,KAKlD,GAAIqyB,EAAK92B,OAASg7Q,GAAgE,WAA5C1hR,KAAK27B,OAAOm2E,aAAay4J,gBAAgCvqQ,KAAKgpJ,WAAWx9H,MACnE,QAArCxrB,KAAKgpJ,WAAWx9H,KAAK6qB,YAAwB,CAChD,IAAI4rO,EAAYjiR,KAAK27B,OAAOitE,WAAa5oG,KAAK27B,OAAOitE,YAAcprE,EAAK92B,OAAS,GAAK82B,EAAK92B,OAAS,EAChGw7Q,EAAaD,EAAYjiR,KAAK27B,OAAOmtE,eACrCh/F,EAAW9J,KAAK27B,OAAO6sE,aAAat5F,aAAegzQ,EACvD51K,EAAI3/F,MAAM6kB,OAAS1nB,EAAW,EAAI,KAEtCwiG,EAAI3/F,MAAM9B,IAAM,OAQxB2jO,EAAKtoO,UAAUimQ,qBAAuB,SAAUp6M,GAC5C,OAAQA,EAAIz/B,WAAatyB,KAAK27B,OAAOqd,cAAc1b,QAAQvzB,QAAQgoD,EAAI5Z,QAAU,IAOrFq2L,EAAK2zC,WAAa,SAAUC,GACxB5zC,EAAK0vC,aAAe,eAAO1vC,EAAK0vC,aAAckE,IAElD5zC,EAAK0vC,aAAe,CAChB,aAAgB,EAAkB,YAAe,EACjD,eAAkB,EAAoB,mBAAsB,EAC5D,YAAe,EAAiB,YAAe,EAC/C,aAAgBN,IAEbpvC,EA5nCc,I,sBCrBvB,SAAU1uO,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASgiC,EAAoBt+B,EAAQC,EAAeC,EAAKC,GACrD,IAAIke,EAAS,CACTrgB,EAAG,CAAC,kBAAmB,cACvBC,GAAI,CAAC+B,EAAS,aAAcA,EAAS,UACrC9B,EAAG,CAAC,aAAc,YAClBC,GAAI,CAAC6B,EAAS,YAAaA,EAAS,WACpC5B,EAAG,CAAC,WAAY,SAChBC,GAAI,CAAC2B,EAAS,UAAWA,EAAS,SAClC1B,EAAG,CAAC,YAAa,UACjBC,GAAI,CAACyB,EAAS,WAAYA,EAAS,QACnCxB,EAAG,CAAC,gBAAiB,aACrBC,GAAI,CAACuB,EAAS,cAAeA,EAAS,WACtCtB,EAAG,CAAC,aAAc,WAClBC,GAAI,CAACqB,EAAS,YAAaA,EAAS,YAExC,OAAOG,EAAWke,EAAOne,GAAK,GAAKme,EAAOne,GAAK,GAGnD,IAAIw+Q,EAAUpiR,EAAOE,aAAa,WAAY,CAC1CC,OAAQ,CACJ+hC,WACI,wFAAwF9hC,MACpF,KAER2hB,OAAQ,mJAAmJ3hB,MACvJ,KAEJ+hC,SAAU,mBAEd9hC,YACI,4EAA4ED,MACxE,KAERsC,kBAAkB,EAClBpC,SAAU,qDAAqDF,MAAM,KACrEG,cAAe,4CAA4CH,MAAM,KACjEI,YAAa,wBAAwBJ,MAAM,KAC3C4wB,oBAAoB,EACpBvwB,eAAgB,CACZC,GAAI,kBACJC,IAAK,qBACLC,EAAG,aACHC,GAAI,cACJC,IAAK,8BACLC,KAAM,uCACNmE,KAAM,oCAEVlE,SAAU,CACNC,QAAS,WACTC,QAAS,eACTC,SAAU,qBACVC,QAAS,WACTC,SAAU,qBACVC,SAAU,KAEdC,aAAc,CACVC,OAAQ,KACRC,KAAM,UACNC,EAAGsgC,EACHrgC,GAAIqgC,EACJpgC,EAAGogC,EACHngC,GAAImgC,EACJlgC,EAAGkgC,EACHjgC,GAAIigC,EACJhgC,EAAGggC,EACH//B,GAAI+/B,EACJ9/B,EAAG8/B,EACH7/B,GAAI6/B,EACJ5/B,EAAG4/B,EACH3/B,GAAI2/B,GAER3+B,uBAAwB,eACxBC,QAAS,SAAUI,EAAQ2B,GACvB,OAAQA,GAEJ,IAAK,IACD,OAAO3B,EAAS,MACpB,QACA,IAAK,IACL,IAAK,IACL,IAAK,MACL,IAAK,IACL,IAAK,IACL,IAAK,IACD,OAAOA,IAGnBpB,KAAM,CACFC,IAAK,EACLC,IAAK,GAETG,cAAe,4BACfC,aAAc,SAAUC,EAAMC,GAI1B,OAHa,KAATD,IACAA,EAAO,GAEM,SAAbC,EACOD,EAAO,EAAIA,EAAOA,EAAO,GACZ,WAAbC,EACAD,EACa,YAAbC,EACAD,EAAO,GAAKA,EAAOA,EAAO,GACb,UAAbC,EACAD,EAAO,QADX,GAIXC,SAAU,SAAUD,EAAME,EAAQC,GAC9B,OAAIH,EAAO,EACA,OACAA,EAAO,GACP,SACAA,EAAO,GACP,UACAA,EAAO,GACP,QAEA,UAKnB,OAAOu/Q,M,kCCtIX,W,yCCAA,ICiIA,wBACA,IDlIIhpQ,EAAS,WAAa,IAAI83F,EAAInxG,KAASoxG,EAAGD,EAAIE,eAAmBh1E,EAAG80E,EAAIG,MAAMj1E,IAAI+0E,EAAG,OAAO/0E,EAAG,OAAO,CAACA,EAAG,OAAO,CAACznB,MAAM,CAAC,IAAM,KAAK,CAACynB,EAAG,MAAM,CAACk1E,YAAY,4BAA4BC,YAAY,CAAC,QAAU,OAAO,SAAW,aAAa,CAACn1E,EAAG,MAAM,CAACznB,MAAM,CAAC,GAAK,kBAAkBynB,EAAG,MAAM,CAACm1E,YAAY,CAAC,MAAQ,SAAS,CAACn1E,EAAG,WAAW,CAACigC,IAAI,OAAO1nD,MAAM,CAAC,GAAK,wBAAwB,WAAau8F,EAAI54E,KAAK,gBAAiB,EAAK,aAAe44E,EAAIM,aAAa,aAAc,EAAK,eAAgB,EAAK,iBAAmBN,EAAIO,aAAa,eAAgB,EAAK,MAAQP,EAAIQ,UAAU,aAAeR,EAAIS,aAAa,kBAAmB,EAAK,oBAAsBT,EAAIU,oBAAoB,iBAAkB,EAAK,cAAe,EAAK,aAAeV,EAAIW,aAAa,QAAUX,EAAI1J,QAAQ,aAAe0J,EAAIxgD,aAAa,eAAiBwgD,EAAIY,eAAe,YAAcZ,EAAIa,YAAY,cAAgBb,EAAIc,cAAc,eAAiBd,EAAIe,cAAc,cAAgBf,EAAIgB,cAAc,MAAQ,OAAO,OAAS,SAAS,CAAC91E,EAAG,YAAY,CAACA,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,iBAAiB,WAAa,KAAK,MAAQ,MAAM,cAAe,EAAK,SAAU,KAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,cAAc,WAAa,aAAa,UAAY,QAAQ,OAASu8F,EAAI5xC,kBAAkB,KAAO,OAAO,MAAQ,SAASljC,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,YAAY,WAAa,QAAQ,MAAQ,SAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,aAAa,WAAa,SAAS,cAAe,EAAM,MAAQ,SAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,YAAY,WAAa,UAAU,cAAe,EAAM,MAAQ,SAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,cAAc,WAAa,UAAU,cAAe,EAAM,MAAQ,SAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,kBAAkB,WAAa,YAAY,cAAe,EAAM,SAAU,EAAM,MAAQ,SAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,eAAe,WAAa,WAAW,cAAe,EAAM,MAAQ,SAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,cAAc,WAAa,UAAU,cAAe,EAAM,MAAQ,SAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,kBAAkB,WAAa,aAAa,UAAY,OAAO,MAAQ,MAAM,KAAO,YAAYynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,sBAAsB,WAAa,SAAS,MAAQ,SAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,kBAAkB,WAAa,eAAe,SAAU,EAAK,MAAQ,MAAM,UAAY,WAAWynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,eAAe,WAAa,gBAAgB,UAAY,QAAQ,gBAAkBu8F,EAAIiB,gBAAgB,KAAO,SAAS,OAAS,KAAK,SAAW,cAAc,KAAOjB,EAAIkB,cAAc,MAAQ,SAASh2E,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,oBAAoB,WAAa,iBAAiB,UAAY,QAAQ,SAAU,EAAM,gBAAkBu8F,EAAIoB,cAAc,SAAW,eAAe,KAAOpB,EAAIqB,sBAAsB,gBAAkB,KAAK,gBAAkB,OAAO,WAAarB,EAAIsB,iBAAiB,MAAQ,SAASp2E,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,cAAc,WAAa,eAAe,UAAY,QAAQ,cAAe,EAAM,gBAAkBu8F,EAAIiB,gBAAgB,KAAO,SAAS,OAAS,KAAK,SAAW,cAAc,KAAOjB,EAAIkB,cAAc,MAAQ,SAASh2E,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,QAAQ,WAAa,mBAAmB,UAAY,QAAQ,cAAe,EAAM,gBAAkBu8F,EAAIiB,gBAAgB,KAAO,SAAS,OAAS,KAAK,SAAW,cAAc,KAAOjB,EAAIkB,cAAc,MAAQ,SAASh2E,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,cAAc,WAAa,SAAS,MAAQ,SAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,OAAO,WAAa,OAAO,SAAU,EAAM,MAAQ,QAAQynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,YAAY,WAAa,YAAY,SAAU,EAAM,UAAY,QAAQ,gBAAkBu8F,EAAIiB,gBAAgB,KAAO,SAAS,OAAS,KAAK,SAAW,cAAc,KAAOjB,EAAIuB,iBAAiB,MAAQ,SAASr2E,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,kBAAkB,WAAa,iBAAiB,UAAY,QAAQ,SAAU,EAAM,gBAAkBu8F,EAAIoB,cAAc,SAAW,eAAe,KAAOpB,EAAIwB,oBAAoB,gBAAkB,KAAK,gBAAkB,OAAO,WAAaxB,EAAIyB,eAAe,MAAQ,QAAQv2E,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,oBAAoB,WAAa,iBAAiB,SAAU,EAAM,MAAQ,SAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,WAAa,iBAAiB,QAAUu8F,EAAImB,YAAY,UAAY,YAAYj2E,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,gBAAgB,WAAa,+BAA+B,kBAAoB,OAAO,SAAU,EAAM,KAAOu8F,EAAI0B,eAAe,SAAW,cAAc,KAAO,UAAU,MAAQ,SAASx2E,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,iBAAiB,WAAa,mBAAmB,aAAe,OAAO,kBAAoB,OAAO,SAAU,EAAM,cAAe,EAAM,SAAW,cAAc,KAAO,UAAU,MAAQ,SAASynB,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,uBAAuB,WAAa,yBAAyB,UAAY,OAAO,KAAOu8F,EAAI2B,gBAAgB,SAAU,EAAM,MAAQ,SAASz2E,EAAG,WAAW,CAACznB,MAAM,CAAC,WAAa,UAAU,MAAQ,MAAM,UAAY,OAAO,SAAWu8F,EAAI9L,aAAa,IAAI,IAAI,GAAGhpE,EAAG,aAAa,CAACigC,IAAI,cAAc1nD,MAAM,CAAC,cAAgBu8F,EAAIkC,UAAU,OAASlC,EAAI/hE,OAAO,QAAU+hE,EAAI4B,gBAAgB,SAAW,iBAAiB,GAAK,cAAc,SAAU,EAAM,kBAAoB5B,EAAI6B,kBAAkB,cAAgB7B,EAAI8B,cAAc,KAAO9B,EAAI+B,WAAW,MAAQ/B,EAAIgC,YAAY,MAAQhC,EAAIiC,WAAW,SAAWjC,EAAIrnG,WAAW,CAACuyB,EAAG,KAAK,CAACk1E,YAAY,OAAO38F,MAAM,CAAC,GAAK,gBAAgB,CAACu8F,EAAImC,GAAG,IAAInC,EAAIoC,GAAGpC,EAAIqC,WAAW,OAAOn3E,EAAG,MAAMA,EAAG,KAAK,CAACk1E,YAAY,OAAO38F,MAAM,CAAC,GAAK,mBAAmB,CAACu8F,EAAImC,GAAG,IAAInC,EAAIoC,GAAGpC,EAAI/8F,MAAM,cAAcioB,EAAG,MAAMA,EAAG,QAAQ,CAACk1E,YAAY,oBAAoB,CAACJ,EAAImC,GAAG,qBAAqBnC,EAAIoC,GAAGpC,EAAIsC,gBAAgBp3E,EAAG,MAAMA,EAAG,MAAMA,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACJ,EAAImC,GAAGnC,EAAIoC,GAAGpC,EAAIuC,cAAcr3E,EAAG,MAAMA,EAAG,MAAMA,EAAG,MAAM,CAACk1E,YAAY,OAAO,CAACl1E,EAAG,MAAM,CAACk1E,YAAY,eAAe,CAACl1E,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,YAAYnC,EAAImC,GAAG,KAAKnC,EAAIoC,GAAGpC,EAAIwC,WAAWt3E,EAAG,MAAMA,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,aAAanC,EAAImC,GAAG,KAAKnC,EAAIoC,GAAGpC,EAAIyC,YAAYv3E,EAAG,MAAMA,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,gBAAgBnC,EAAImC,GAAG,KAAKnC,EAAIoC,GAAGpC,EAAI0C,oBAAoBx3E,EAAG,MAAMA,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,aAAanC,EAAImC,GAAG,KAAKnC,EAAIoC,GAAGpC,EAAI2C,YAAYz3E,EAAG,MAAMA,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,aAAanC,EAAImC,GAAG,KAAKnC,EAAIoC,GAAGpC,EAAI4C,YAAY13E,EAAG,MAAMA,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,aAAanC,EAAImC,GAAG,KAAKnC,EAAIoC,GAAGpC,EAAI6C,YAAY33E,EAAG,MAAMA,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,mBAAmBnC,EAAImC,GAAG,KAAKnC,EAAIoC,GAAGpC,EAAI8C,iBAAiB53E,EAAG,MAAMA,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,iBAAiBnC,EAAImC,GAAG,KAAKnC,EAAIoC,GAAGpC,EAAI+C,eAAe73E,EAAG,MAAMA,EAAG,QAAQA,EAAG,MAAM,CAACk1E,YAAY,eAAe,CAACl1E,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,kBAAkBnC,EAAImC,GAAG,KAAKnC,EAAIoC,GAAGpC,EAAIgD,gBAAgB93E,EAAG,MAAMA,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,kBAAkBnC,EAAImC,GAAG,KAAKnC,EAAIoC,GAAGpC,EAAI/8F,SAASioB,EAAG,MAAMA,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,mBAAmBnC,EAAImC,GAAG,KAAKnC,EAAIoC,GAAGpC,EAAIiD,cAAc,IAAIjD,EAAIoC,GAAGpC,EAAIkD,kBAAkBh4E,EAAG,MAAMA,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,kBAAkBnC,EAAImC,GAAG,KAAKnC,EAAIoC,GAAGpC,EAAImD,aAAa,IAAInD,EAAIoC,GAAGpC,EAAIkD,kBAAkBh4E,EAAG,MAAMA,EAAG,QAAQ,CAACk1E,YAAY,QAAQ,CAACl1E,EAAG,IAAI,CAAC80E,EAAImC,GAAG,sBAAsBnC,EAAImC,GAAG,KAAKnC,EAAIoC,GAAGpC,EAAIzpE,OAAO,IAAIypE,EAAIoC,GAAGpC,EAAIkD,kBAAkBh4E,EAAG,MAAMA,EAAG,UAAUA,EAAG,YAAY,CAACznB,MAAM,CAAC,GAAK,oBAAoB,MAAQu8F,EAAI39D,MAAM,aAAe29D,EAAIrkG,KAAK,aAAeqkG,EAAIjkC,aAAa,aAAeikC,EAAIhkC,aAAa,QAAUgkC,EAAIn7F,QAAQ,WAAam7F,EAAIoD,WAAW,MAAQ,QAAQ,OAAS,UAAU,CAACl4E,EAAG,sBAAsB,CAACA,EAAG,WAAW,CAACznB,MAAM,CAAC,MAAQ,IAAI,MAAQ,IAAI,KAAO,eAAe,KAAO,mBAAmB,kBAAoB,QAAQ,OAASu8F,EAAI9+E,WAAW,IAAI,IAAI,IAAI,MAAM,IAC/uPmiF,EAAkB,G,8fCsHtB,yBACA,yBACA,yBACA,yBAEA,0BACA,0BACA,oBAKA,QACA,6DACA,mBACA,gBACA,8CACA,WACA,gBACA,wBACA,sBAGA,2BACA,OAEA,cAEA,iBACA,iCACA,kCACA,kBACA,4BACA,+CAEA,mBACA,WACA,aACA,WACA,KACA,CACA,2BACA,sBACA,2BAEA,sDACA,8DACA,+LAEA,aACA,CACA,yBACA,wBACA,SACA,kBACA,YACA,yCACA,YACA,WACA,8BACA,MACA,kBAEA,OADA,kCACA,GAGA,gBACA,gBAEA,mBACA,aAIA,kBACA,cACA,0CACA,wBACA,oBAEA,+BACA,yBACA,mBAEA,iBAIA,CACA,uBACA,sBACA,SACA,kBACA,YACA,yCACA,YACA,WACA,8HACA,MACA,kBAEA,OADA,kCACA,GAEA,gBACA,gBAEA,mBACA,aAIA,kBACA,cACA,0CACA,wBACA,oBAEA,+BACA,uBACA,mBAEA,kBAKA,6DACA,yDACA,iBACA,SACA,aACA,eACA,UACA,WACA,WACA,WACA,gBACA,cACA,eACA,gBACA,eACA,SACA,aACA,QACA,WACA,mBACA,iCACA,oEACA,mEACA,yEACA,oDACA,2CACA,uBACA,kBAEA,OADA,kCACA,GAEA,gBACA,gBAEA,mBACA,aAEA,kBACA,cACA,gEACA,8BACA,sEACA,+FACA,+BACA,wBACA,kBACA,mBACA,mBACA,eACA,sHAEA,YAEA,wBAEA,qBACA,wBACA,OACA,YACA,8GACA,qCAMA,gBAGA,qBACA,kBAEA,OADA,kCACA,GAEA,gBACA,gBAEA,mBACA,aAEA,kBACA,cACA,4BACA,sEACA,+FACA,6BACA,wBACA,kBACA,qBAEA,gBAGA,mBACA,kBAEA,OADA,kCACA,GAEA,gBACA,gBAEA,mBACA,aAEA,kBACA,cACA,+HACA,0BACA,sEACA,+FACA,2BACA,wBACA,kBACA,mBACA,mBACA,0BACA,mDACA,oDAEA,qDACA,oDAIA,gBAIA,gBACA,kBAEA,OADA,kCACA,GAEA,gBACA,kBAEA,mBACA,aAEA,kBACA,cACA,qBACA,kCACA,YAEA,6BACA,mBACA,4BACA,sHACA,0BAEA,OACA,YACA,8GACA,kCAIA,aACA,aAEA,gBAIA,gBAGA,iBACA,kBAEA,OADA,qCACA,GAEA,gBACA,gBAEA,mBACA,aAEA,kBACA,eACA,wCACA,wBACA,qCACA,eAGA,gBAIA,gEACA,cACA,qBACA,2BACA,gBACA,eACA,uEACA,eAEA,eACA,QACA,yBACA,WACA,cAGA,kBACA,QACA,yBACA,WACA,cAGA,iCACA,4BACA,wCACA,qCACA,0CACA,oCAEA,mCACA,cACA,yCACA,aACA,YACA,4BACA,8CAIA,aACA,CACA,cACA,YACA,4BACA,8CAIA,oBASA,OACA,gBACA,WACA,gBACA,kBACA,0BACA,cAGA,QACA,WACA,eAMA,SACA,4BACA,+BAEA,uBACA,iBAEA,sBACA,iBAEA,2BACA,yBAEA,uBAUA,WAEA,yBACA,+BACA,oCACA,0BAEA,qCACA,2CAGA,gCACA,wHACA,eACA,OACA,YACA,8GACA,mCAIA,iCACA,4HACA,iCACA,+BACA,+CACA,qBACA,mBACA,qCACA,uEACA,0HACA,oDACA,eACA,CACA,2BACA,kBAEA,0BACA,CACA,CACA,kIAEA,sUACA,sTAGA,4CACA,YACA,iBACA,2EACA,8EAEA,8EACA,mFAGA,2EACA,8EAEA,8EACA,kFAGA,0BACA,mCAEA,wBAEA,uBACA,+DACA,sBACA,sBACA,4BACA,wBACA,8BACA,0BACA,oCACA,oCACA,yCACA,uCACA,2BACA,wBACA,8BAEA,mBACA,8GACA,mCAGA,yBACA,oCAEA,4CAEA,6CAEA,2DAEA,gCACA,8BAEA,4CAEA,6CAGA,wBAWA,GAVA,sBACA,uBAEA,uDAEA,0BAEA,uDAGA,mDACA,sDACA,2EACA,2CACA,yDAEA,uDADA,2CAGA,wDAEA,yDAEA,8DAHA,2CAKA,qDAEA,6DADA,2CAGA,4DAEA,0DAEA,2DAEA,yDAEA,mDAPA,2CASA,sDAEA,oDAEA,sDAEA,sDAEA,+CAPA,2CASA,2DACA,6CAKA,sCAmDA,GAjDA,oCAGA,gCACA,0BACA,yIACA,2BACA,uBACA,iBACA,wCAEA,kEACA,oGACA,qGAKA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AEA,aAEA,iBACA,mBACA,iCACA,kCACA,6FACA,WACA,+JACA,iBACA,aACA,cACA,wBACA,aACA,UACA,WACA,WACA,WACA,gBACA,cACA,eACA,aACA,QACA,iCACA,WACA,aACA,uCAEA,CACA,aACA,gDAEA,oDACA,mDAEA,gEACA,cACA,qBACA,2BACA,gBACA,eACA,sEACA,eAEA,iCACA,0CACA,oCACA,aACA,aAGA,SACA,4BACA,+BAEA,uBACA,iBAEA,sBACA,iBAEA,yBACA,mBACA,6CACA,0BAEA,8GACA,2CAIA,gCACA,oHACA,eACA,OACA,YACA,8GACA,mCAIA,sBAEA,uBACA,qFACA,+EAGA,gFACA,mFAGA,sIACA,mGAEA,0BACA,sCAEA,2BAEA,0BACA,6DACA,yBACA,yBACA,+BACA,2BACA,iCACA,6BACA,uCACA,6BACA,mFAEA,+BAEA,yBACA,kCAGA,wDAEA,gCACA,+BAIA,wBACA,uBAGA,sCACA,oCAEA,gCAEA,0BACA,yIACA,2BACA,uBACA,iBACA,wCAEA,mEACA,+GACA,qGAKA,kBACA,+HACA,2BACA,uBACA,iBACA,wCAEA,mEACA,+GACA,qGAKA,8BACA,oJACA,2BACA,uBACA,iBACA,wCAEA,mEACA,+GACA,kGAOA,0BACA,yBAEA,0BACA,6BACA,8BACA,+BAEA,kCAEA,8BACA,0CACA,iCACA,gCACA,kFACA,+EAKA,SACA,+EC3RqW,I,wBCQjW12D,EAAY,eACd,EACAzkC,EACAm7F,GACA,EACA,KACA,KACA,MAIa,aAAA12D,E,+BCbb,SAAUh+C,EAAQC,GAEsBA,EAAQ,EAAQ,UAFzD,CAKCC,GAAM,SAAWC,GAAU;kCAIzB;SAASgiC,EAAoBt+B,EAAQC,EAAeC,EAAKC,GACrD,IAAIke,EAAS,CACTngB,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,cAAe,gBACnBE,EAAG,CAAC,UAAW,aACfC,GAAI,CAACyB,EAAS,QAASA,EAAS,UAChCwtB,EAAG,CAAC,aAAc,eAClBhvB,EAAG,CAAC,YAAa,eACjBC,GAAI,CAACuB,EAAS,UAAWA,EAAS,YAC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","file":"js/chunk-4fa31912.7e1dfb7c.js","sourcesContent":["//! moment.js locale configuration\n//! locale : Uzbek Latin [uz-latn]\n//! author : Rasulbek Mirzayev : github.com/Rasulbeeek\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var uzLatn = moment.defineLocale('uz-latn', {\n        months: 'Yanvar_Fevral_Mart_Aprel_May_Iyun_Iyul_Avgust_Sentabr_Oktabr_Noyabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Yan_Fev_Mar_Apr_May_Iyun_Iyul_Avg_Sen_Okt_Noy_Dek'.split('_'),\n        weekdays:\n            'Yakshanba_Dushanba_Seshanba_Chorshanba_Payshanba_Juma_Shanba'.split(\n                '_'\n            ),\n        weekdaysShort: 'Yak_Dush_Sesh_Chor_Pay_Jum_Shan'.split('_'),\n        weekdaysMin: 'Ya_Du_Se_Cho_Pa_Ju_Sha'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bugun soat] LT [da]',\n            nextDay: '[Ertaga] LT [da]',\n            nextWeek: 'dddd [kuni soat] LT [da]',\n            lastDay: '[Kecha soat] LT [da]',\n            lastWeek: \"[O'tgan] dddd [kuni soat] LT [da]\",\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Yaqin %s ichida',\n            past: 'Bir necha %s oldin',\n            s: 'soniya',\n            ss: '%d soniya',\n            m: 'bir daqiqa',\n            mm: '%d daqiqa',\n            h: 'bir soat',\n            hh: '%d soat',\n            d: 'bir kun',\n            dd: '%d kun',\n            M: 'bir oy',\n            MM: '%d oy',\n            y: 'bir yil',\n            yy: '%d yil',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uzLatn;\n\n})));\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./StatusAlert.vue?vue&type=style&index=0&id=8cc5df1a&prod&lang=css\"","//! moment.js locale configuration\n//! locale : Malayalam [ml]\n//! author : Floyd Pink : https://github.com/floydpink\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ml = moment.defineLocale('ml', {\n        months: 'ജനുവരി_ഫെബ്രുവരി_മാർച്ച്_ഏപ്രിൽ_മേയ്_ജൂൺ_ജൂലൈ_ഓഗസ്റ്റ്_സെപ്റ്റംബർ_ഒക്ടോബർ_നവംബർ_ഡിസംബർ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ജനു._ഫെബ്രു._മാർ._ഏപ്രി._മേയ്_ജൂൺ_ജൂലൈ._ഓഗ._സെപ്റ്റ._ഒക്ടോ._നവം._ഡിസം.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ഞായറാഴ്ച_തിങ്കളാഴ്ച_ചൊവ്വാഴ്ച_ബുധനാഴ്ച_വ്യാഴാഴ്ച_വെള്ളിയാഴ്ച_ശനിയാഴ്ച'.split(\n                '_'\n            ),\n        weekdaysShort: 'ഞായർ_തിങ്കൾ_ചൊവ്വ_ബുധൻ_വ്യാഴം_വെള്ളി_ശനി'.split('_'),\n        weekdaysMin: 'ഞാ_തി_ചൊ_ബു_വ്യാ_വെ_ശ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm -നു',\n            LTS: 'A h:mm:ss -നു',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm -നു',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm -നു',\n        },\n        calendar: {\n            sameDay: '[ഇന്ന്] LT',\n            nextDay: '[നാളെ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ഇന്നലെ] LT',\n            lastWeek: '[കഴിഞ്ഞ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s കഴിഞ്ഞ്',\n            past: '%s മുൻപ്',\n            s: 'അൽപ നിമിഷങ്ങൾ',\n            ss: '%d സെക്കൻഡ്',\n            m: 'ഒരു മിനിറ്റ്',\n            mm: '%d മിനിറ്റ്',\n            h: 'ഒരു മണിക്കൂർ',\n            hh: '%d മണിക്കൂർ',\n            d: 'ഒരു ദിവസം',\n            dd: '%d ദിവസം',\n            M: 'ഒരു മാസം',\n            MM: '%d മാസം',\n            y: 'ഒരു വർഷം',\n            yy: '%d വർഷം',\n        },\n        meridiemParse: /രാത്രി|രാവിലെ|ഉച്ച കഴിഞ്ഞ്|വൈകുന്നേരം|രാത്രി/i,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'രാത്രി' && hour >= 4) ||\n                meridiem === 'ഉച്ച കഴിഞ്ഞ്' ||\n                meridiem === 'വൈകുന്നേരം'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'രാത്രി';\n            } else if (hour < 12) {\n                return 'രാവിലെ';\n            } else if (hour < 17) {\n                return 'ഉച്ച കഴിഞ്ഞ്';\n            } else if (hour < 20) {\n                return 'വൈകുന്നേരം';\n            } else {\n                return 'രാത്രി';\n            }\n        },\n    });\n\n    return ml;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chuvash [cv]\n//! author : Anatoly Mironov : https://github.com/mirontoli\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var cv = moment.defineLocale('cv', {\n        months: 'кӑрлач_нарӑс_пуш_ака_май_ҫӗртме_утӑ_ҫурла_авӑн_юпа_чӳк_раштав'.split(\n            '_'\n        ),\n        monthsShort: 'кӑр_нар_пуш_ака_май_ҫӗр_утӑ_ҫур_авн_юпа_чӳк_раш'.split('_'),\n        weekdays:\n            'вырсарникун_тунтикун_ытларикун_юнкун_кӗҫнерникун_эрнекун_шӑматкун'.split(\n                '_'\n            ),\n        weekdaysShort: 'выр_тун_ытл_юн_кӗҫ_эрн_шӑм'.split('_'),\n        weekdaysMin: 'вр_тн_ыт_юн_кҫ_эр_шм'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ]',\n            LLL: 'YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n            LLLL: 'dddd, YYYY [ҫулхи] MMMM [уйӑхӗн] D[-мӗшӗ], HH:mm',\n        },\n        calendar: {\n            sameDay: '[Паян] LT [сехетре]',\n            nextDay: '[Ыран] LT [сехетре]',\n            lastDay: '[Ӗнер] LT [сехетре]',\n            nextWeek: '[Ҫитес] dddd LT [сехетре]',\n            lastWeek: '[Иртнӗ] dddd LT [сехетре]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (output) {\n                var affix = /сехет$/i.exec(output)\n                    ? 'рен'\n                    : /ҫул$/i.exec(output)\n                    ? 'тан'\n                    : 'ран';\n                return output + affix;\n            },\n            past: '%s каялла',\n            s: 'пӗр-ик ҫеккунт',\n            ss: '%d ҫеккунт',\n            m: 'пӗр минут',\n            mm: '%d минут',\n            h: 'пӗр сехет',\n            hh: '%d сехет',\n            d: 'пӗр кун',\n            dd: '%d кун',\n            M: 'пӗр уйӑх',\n            MM: '%d уйӑх',\n            y: 'пӗр ҫул',\n            yy: '%d ҫул',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-мӗш/,\n        ordinal: '%d-мӗш',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return cv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Icelandic [is]\n//! author : Hinrik Örn Sigurðsson : https://github.com/hinrik\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(n) {\n        if (n % 100 === 11) {\n            return true;\n        } else if (n % 10 === 1) {\n            return false;\n        }\n        return true;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nokkrar sekúndur'\n                    : 'nokkrum sekúndum';\n            case 'ss':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture ? 'sekúndur' : 'sekúndum')\n                    );\n                }\n                return result + 'sekúnda';\n            case 'm':\n                return withoutSuffix ? 'mínúta' : 'mínútu';\n            case 'mm':\n                if (plural(number)) {\n                    return (\n                        result + (withoutSuffix || isFuture ? 'mínútur' : 'mínútum')\n                    );\n                } else if (withoutSuffix) {\n                    return result + 'mínúta';\n                }\n                return result + 'mínútu';\n            case 'hh':\n                if (plural(number)) {\n                    return (\n                        result +\n                        (withoutSuffix || isFuture\n                            ? 'klukkustundir'\n                            : 'klukkustundum')\n                    );\n                }\n                return result + 'klukkustund';\n            case 'd':\n                if (withoutSuffix) {\n                    return 'dagur';\n                }\n                return isFuture ? 'dag' : 'degi';\n            case 'dd':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'dagar';\n                    }\n                    return result + (isFuture ? 'daga' : 'dögum');\n                } else if (withoutSuffix) {\n                    return result + 'dagur';\n                }\n                return result + (isFuture ? 'dag' : 'degi');\n            case 'M':\n                if (withoutSuffix) {\n                    return 'mánuður';\n                }\n                return isFuture ? 'mánuð' : 'mánuði';\n            case 'MM':\n                if (plural(number)) {\n                    if (withoutSuffix) {\n                        return result + 'mánuðir';\n                    }\n                    return result + (isFuture ? 'mánuði' : 'mánuðum');\n                } else if (withoutSuffix) {\n                    return result + 'mánuður';\n                }\n                return result + (isFuture ? 'mánuð' : 'mánuði');\n            case 'y':\n                return withoutSuffix || isFuture ? 'ár' : 'ári';\n            case 'yy':\n                if (plural(number)) {\n                    return result + (withoutSuffix || isFuture ? 'ár' : 'árum');\n                }\n                return result + (withoutSuffix || isFuture ? 'ár' : 'ári');\n        }\n    }\n\n    var is = moment.defineLocale('is', {\n        months: 'janúar_febrúar_mars_apríl_maí_júní_júlí_ágúst_september_október_nóvember_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maí_jún_júl_ágú_sep_okt_nóv_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánudagur_þriðjudagur_miðvikudagur_fimmtudagur_föstudagur_laugardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_þri_mið_fim_fös_lau'.split('_'),\n        weekdaysMin: 'Su_Má_Þr_Mi_Fi_Fö_La'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd, D. MMMM YYYY [kl.] H:mm',\n        },\n        calendar: {\n            sameDay: '[í dag kl.] LT',\n            nextDay: '[á morgun kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[í gær kl.] LT',\n            lastWeek: '[síðasta] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'eftir %s',\n            past: 'fyrir %s síðan',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: 'klukkustund',\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return is;\n\n})));\n","//! moment.js locale configuration\n//! locale : Faroese [fo]\n//! author : Ragnar Johannesen : https://github.com/ragnar123\n//! author : Kristian Sakarisson : https://github.com/sakarisson\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var fo = moment.defineLocale('fo', {\n        months: 'januar_februar_mars_apríl_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_'),\n        weekdays:\n            'sunnudagur_mánadagur_týsdagur_mikudagur_hósdagur_fríggjadagur_leygardagur'.split(\n                '_'\n            ),\n        weekdaysShort: 'sun_mán_týs_mik_hós_frí_ley'.split('_'),\n        weekdaysMin: 'su_má_tý_mi_hó_fr_le'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D. MMMM, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Í dag kl.] LT',\n            nextDay: '[Í morgin kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[Í gjár kl.] LT',\n            lastWeek: '[síðstu] dddd [kl] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'um %s',\n            past: '%s síðani',\n            s: 'fá sekund',\n            ss: '%d sekundir',\n            m: 'ein minuttur',\n            mm: '%d minuttir',\n            h: 'ein tími',\n            hh: '%d tímar',\n            d: 'ein dagur',\n            dd: '%d dagar',\n            M: 'ein mánaður',\n            MM: '%d mánaðir',\n            y: 'eitt ár',\n            yy: '%d ár',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Japanese [ja]\n//! author : LI Long : https://github.com/baryon\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ja = moment.defineLocale('ja', {\n        eras: [\n            {\n                since: '2019-05-01',\n                offset: 1,\n                name: '令和',\n                narrow: '㋿',\n                abbr: 'R',\n            },\n            {\n                since: '1989-01-08',\n                until: '2019-04-30',\n                offset: 1,\n                name: '平成',\n                narrow: '㍻',\n                abbr: 'H',\n            },\n            {\n                since: '1926-12-25',\n                until: '1989-01-07',\n                offset: 1,\n                name: '昭和',\n                narrow: '㍼',\n                abbr: 'S',\n            },\n            {\n                since: '1912-07-30',\n                until: '1926-12-24',\n                offset: 1,\n                name: '大正',\n                narrow: '㍽',\n                abbr: 'T',\n            },\n            {\n                since: '1873-01-01',\n                until: '1912-07-29',\n                offset: 6,\n                name: '明治',\n                narrow: '㍾',\n                abbr: 'M',\n            },\n            {\n                since: '0001-01-01',\n                until: '1873-12-31',\n                offset: 1,\n                name: '西暦',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: '紀元前',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        eraYearOrdinalRegex: /(元|\\d+)年/,\n        eraYearOrdinalParse: function (input, match) {\n            return match[1] === '元' ? 1 : parseInt(match[1] || input, 10);\n        },\n        months: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split('_'),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '日曜日_月曜日_火曜日_水曜日_木曜日_金曜日_土曜日'.split('_'),\n        weekdaysShort: '日_月_火_水_木_金_土'.split('_'),\n        weekdaysMin: '日_月_火_水_木_金_土'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日 dddd HH:mm',\n            l: 'YYYY/MM/DD',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日(ddd) HH:mm',\n        },\n        meridiemParse: /午前|午後/i,\n        isPM: function (input) {\n            return input === '午後';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return '午前';\n            } else {\n                return '午後';\n            }\n        },\n        calendar: {\n            sameDay: '[今日] LT',\n            nextDay: '[明日] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[来週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            lastDay: '[昨日] LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[先週]dddd LT';\n                } else {\n                    return 'dddd LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}日/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'y':\n                    return number === 1 ? '元年' : number + '年';\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '数秒',\n            ss: '%d秒',\n            m: '1分',\n            mm: '%d分',\n            h: '1時間',\n            hh: '%d時間',\n            d: '1日',\n            dd: '%d日',\n            M: '1ヶ月',\n            MM: '%dヶ月',\n            y: '1年',\n            yy: '%d年',\n        },\n    });\n\n    return ja;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, Event, append, compile } from '@syncfusion/ej2-base';\nimport { EventHandler, Touch, Browser, Animation as PopupAnimation, animationMode } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getUniqueID, formatUnit, select, selectAll } from '@syncfusion/ej2-base';\nimport { attributes, closest, removeClass, addClass, remove } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Complex, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Popup } from '../popup/popup';\nimport { calculatePosition } from '../common/position';\nimport { isCollide, fit } from '../common/collision';\nvar TOUCHEND_HIDE_DELAY = 1500;\nvar TAPHOLD_THRESHOLD = 500;\nvar SHOW_POINTER_TIP_GAP = 0;\nvar HIDE_POINTER_TIP_GAP = 8;\nvar MOUSE_TRAIL_GAP = 2;\nvar POINTER_ADJUST = 2;\nvar ROOT = 'e-tooltip';\nvar RTL = 'e-rtl';\nvar DEVICE = 'e-bigger';\nvar ICON = 'e-icons';\nvar CLOSE = 'e-tooltip-close';\nvar TOOLTIP_WRAP = 'e-tooltip-wrap';\nvar CONTENT = 'e-tip-content';\nvar ARROW_TIP = 'e-arrow-tip';\nvar ARROW_TIP_OUTER = 'e-arrow-tip-outer';\nvar ARROW_TIP_INNER = 'e-arrow-tip-inner';\nvar TIP_BOTTOM = 'e-tip-bottom';\nvar TIP_TOP = 'e-tip-top';\nvar TIP_LEFT = 'e-tip-left';\nvar TIP_RIGHT = 'e-tip-right';\nvar POPUP_ROOT = 'e-popup';\nvar POPUP_OPEN = 'e-popup-open';\nvar POPUP_CLOSE = 'e-popup-close';\nvar POPUP_LIB = 'e-lib';\nvar HIDE_POPUP = 'e-hidden';\nvar POPUP_CONTAINER = 'e-tooltip-popup-container';\nvar Animation = /** @class */ (function (_super) {\n    __extends(Animation, _super);\n    function Animation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property({ effect: 'FadeIn', duration: 150, delay: 0 })\n    ], Animation.prototype, \"open\", void 0);\n    __decorate([\n        Property({ effect: 'FadeOut', duration: 150, delay: 0 })\n    ], Animation.prototype, \"close\", void 0);\n    return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Represents the Tooltip component that displays a piece of information about the target element on mouse hover.\n * ```html\n * <div id=\"tooltip\">Show Tooltip</div>\n * ```\n * ```typescript\n * <script>\n *   var tooltipObj = new Tooltip({ content: 'Tooltip text' });\n *   tooltipObj.appendTo(\"#tooltip\");\n * </script>\n * ```\n */\nvar Tooltip = /** @class */ (function (_super) {\n    __extends(Tooltip, _super);\n    /* eslint-enable */\n    /**\n     * Constructor for creating the Tooltip Component\n     *\n     * @param {TooltipModel} options - specifies the options for the constructor\n     * @param {string| HTMLElement} element - specifies the element for the constructor\n     *\n     */\n    function Tooltip(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.mouseMoveEvent = null;\n        _this.mouseMoveTarget = null;\n        _this.containerElement = null;\n        _this.isBodyContainer = true;\n        return _this;\n    }\n    Tooltip.prototype.initialize = function () {\n        this.formatPosition();\n        addClass([this.element], ROOT);\n    };\n    Tooltip.prototype.formatPosition = function () {\n        var _a, _b;\n        if (this.position.indexOf('Top') === 0 || this.position.indexOf('Bottom') === 0) {\n            _a = this.position.split(/(?=[A-Z])/), this.tooltipPositionY = _a[0], this.tooltipPositionX = _a[1];\n        }\n        else {\n            _b = this.position.split(/(?=[A-Z])/), this.tooltipPositionX = _b[0], this.tooltipPositionY = _b[1];\n        }\n    };\n    Tooltip.prototype.renderArrow = function () {\n        this.setTipClass(this.position);\n        var tip = this.createElement('div', { className: ARROW_TIP + ' ' + this.tipClass });\n        tip.appendChild(this.createElement('div', { className: ARROW_TIP_OUTER + ' ' + this.tipClass }));\n        tip.appendChild(this.createElement('div', { className: ARROW_TIP_INNER + ' ' + this.tipClass }));\n        this.tooltipEle.appendChild(tip);\n    };\n    Tooltip.prototype.setTipClass = function (position) {\n        if (position.indexOf('Right') === 0) {\n            this.tipClass = TIP_LEFT;\n        }\n        else if (position.indexOf('Bottom') === 0) {\n            this.tipClass = TIP_TOP;\n        }\n        else if (position.indexOf('Left') === 0) {\n            this.tipClass = TIP_RIGHT;\n        }\n        else {\n            this.tipClass = TIP_BOTTOM;\n        }\n    };\n    Tooltip.prototype.renderPopup = function (target) {\n        var elePos = this.mouseTrail ? { top: 0, left: 0 } : this.getTooltipPosition(target);\n        this.tooltipEle.classList.remove(POPUP_LIB);\n        this.popupObj = new Popup(this.tooltipEle, {\n            height: this.height,\n            width: this.width,\n            position: { X: elePos.left, Y: elePos.top },\n            enableRtl: this.enableRtl,\n            open: this.openPopupHandler.bind(this),\n            close: this.closePopupHandler.bind(this)\n        });\n    };\n    Tooltip.prototype.getScalingFactor = function (target) {\n        if (!target) {\n            return { x: 1, y: 1 };\n        }\n        var scalingFactors = { x: 1, y: 1 };\n        var elementsWithTransform = target.closest('[style*=\"transform: scale\"]');\n        if (elementsWithTransform && elementsWithTransform != this.tooltipEle && elementsWithTransform.contains(this.tooltipEle)) {\n            var computedStyle = window.getComputedStyle(elementsWithTransform);\n            var transformValue = computedStyle.getPropertyValue(\"transform\");\n            var matrixValues = transformValue.match(/matrix\\(([^)]+)\\)/)[1].split(\",\").map(parseFloat);\n            scalingFactors.x = matrixValues[0];\n            scalingFactors.y = matrixValues[3];\n        }\n        return scalingFactors;\n    };\n    Tooltip.prototype.getTooltipPosition = function (target) {\n        this.tooltipEle.style.display = 'block';\n        var parentWithZoomStyle = this.element.closest('[style*=\"zoom\"]');\n        if (parentWithZoomStyle) {\n            if (!parentWithZoomStyle.contains(this.tooltipEle)) {\n                this.tooltipEle.style.zoom = getComputedStyle(parentWithZoomStyle).zoom;\n            }\n        }\n        var pos = calculatePosition(target, this.tooltipPositionX, this.tooltipPositionY, !this.isBodyContainer, this.isBodyContainer ? null : this.containerElement.getBoundingClientRect());\n        var scalingFactors = this.getScalingFactor(target);\n        var offsetPos = this.calculateTooltipOffset(this.position, scalingFactors.x, scalingFactors.y);\n        var collisionPosition = this.calculateElementPosition(pos, offsetPos);\n        var collisionLeft = collisionPosition[0];\n        var collisionTop = collisionPosition[1];\n        var elePos = this.collisionFlipFit(target, collisionLeft, collisionTop);\n        if (!this.isBodyContainer) {\n            elePos.top -= this.containerElement.getBoundingClientRect().top;\n        }\n        elePos.left = elePos.left / scalingFactors.x;\n        elePos.top = elePos.top / scalingFactors.y;\n        this.tooltipEle.style.display = '';\n        return elePos;\n    };\n    Tooltip.prototype.windowResize = function () {\n        this.reposition(this.findTarget());\n    };\n    Tooltip.prototype.reposition = function (target) {\n        if (this.popupObj && target) {\n            var elePos = this.getTooltipPosition(target);\n            this.popupObj.position = { X: elePos.left, Y: elePos.top };\n            this.popupObj.dataBind();\n        }\n    };\n    Tooltip.prototype.openPopupHandler = function () {\n        if (!this.mouseTrail && this.needTemplateReposition()) {\n            this.reposition(this.findTarget());\n        }\n        this.trigger('afterOpen', this.tooltipEventArgs);\n        this.tooltipEventArgs = null;\n    };\n    Tooltip.prototype.closePopupHandler = function () {\n        if (this.isReact && !(this.opensOn === 'Click' && typeof (this.content) === 'function')) {\n            this.clearTemplate(['content']);\n        }\n        this.clear();\n        this.trigger('afterClose', this.tooltipEventArgs);\n        this.tooltipEventArgs = null;\n    };\n    Tooltip.prototype.calculateTooltipOffset = function (position, xScalingFactor, yScalingFactor) {\n        if (xScalingFactor === void 0) { xScalingFactor = 1; }\n        if (yScalingFactor === void 0) { yScalingFactor = 1; }\n        var pos = { top: 0, left: 0 };\n        var tipWidth, tipHeight, tooltipEleWidth, tooltipEleHeight, arrowEle;\n        var tipAdjust, tipHeightAdjust, tipWidthAdjust;\n        if (xScalingFactor != 1 || yScalingFactor != 1) {\n            var tooltipEleRect = this.tooltipEle.getBoundingClientRect();\n            var arrowEleRect = void 0;\n            tooltipEleWidth = Math.round(tooltipEleRect.width);\n            tooltipEleHeight = Math.round(tooltipEleRect.height);\n            arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n            if (arrowEle) {\n                arrowEleRect = arrowEle.getBoundingClientRect();\n            }\n            tipWidth = arrowEle ? Math.round(arrowEleRect.width) : 0;\n            tipHeight = arrowEle ? Math.round(arrowEleRect.height) : 0;\n            tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n            tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (tooltipEleHeight - (this.tooltipEle.clientHeight * yScalingFactor));\n            tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (tooltipEleWidth - (this.tooltipEle.clientWidth * xScalingFactor));\n        }\n        else {\n            tooltipEleWidth = this.tooltipEle.offsetWidth;\n            tooltipEleHeight = this.tooltipEle.offsetHeight;\n            arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n            tipWidth = arrowEle ? arrowEle.offsetWidth : 0;\n            tipHeight = arrowEle ? arrowEle.offsetHeight : 0;\n            tipAdjust = (this.showTipPointer ? SHOW_POINTER_TIP_GAP : HIDE_POINTER_TIP_GAP);\n            tipHeightAdjust = (tipHeight / 2) + POINTER_ADJUST + (this.tooltipEle.offsetHeight - this.tooltipEle.clientHeight);\n            tipWidthAdjust = (tipWidth / 2) + POINTER_ADJUST + (this.tooltipEle.offsetWidth - this.tooltipEle.clientWidth);\n        }\n        if (this.mouseTrail) {\n            tipAdjust += MOUSE_TRAIL_GAP;\n        }\n        switch (position) {\n            case 'RightTop':\n                pos.left += tipWidth + tipAdjust;\n                pos.top -= tooltipEleHeight - tipHeightAdjust;\n                break;\n            case 'RightCenter':\n                pos.left += tipWidth + tipAdjust;\n                pos.top -= (tooltipEleHeight / 2);\n                break;\n            case 'RightBottom':\n                pos.left += tipWidth + tipAdjust;\n                pos.top -= (tipHeightAdjust);\n                break;\n            case 'BottomRight':\n                pos.top += (tipHeight + tipAdjust);\n                pos.left -= (tipWidthAdjust);\n                break;\n            case 'BottomCenter':\n                pos.top += (tipHeight + tipAdjust);\n                pos.left -= (tooltipEleWidth / 2);\n                break;\n            case 'BottomLeft':\n                pos.top += (tipHeight + tipAdjust);\n                pos.left -= (tooltipEleWidth - tipWidthAdjust);\n                break;\n            case 'LeftBottom':\n                pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n                pos.top -= (tipHeightAdjust);\n                break;\n            case 'LeftCenter':\n                pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n                pos.top -= (tooltipEleHeight / 2);\n                break;\n            case 'LeftTop':\n                pos.left -= (tipWidth + tooltipEleWidth + tipAdjust);\n                pos.top -= (tooltipEleHeight - tipHeightAdjust);\n                break;\n            case 'TopLeft':\n                pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n                pos.left -= (tooltipEleWidth - tipWidthAdjust);\n                break;\n            case 'TopRight':\n                pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n                pos.left -= (tipWidthAdjust);\n                break;\n            default:\n                pos.top -= (tooltipEleHeight + tipHeight + tipAdjust);\n                pos.left -= (tooltipEleWidth / 2);\n                break;\n        }\n        pos.left += this.offsetX;\n        pos.top += this.offsetY;\n        return pos;\n    };\n    Tooltip.prototype.updateTipPosition = function (position) {\n        var selEle = selectAll('.' + ARROW_TIP + ',.' + ARROW_TIP_OUTER + ',.' + ARROW_TIP_INNER, this.tooltipEle);\n        var removeList = [TIP_BOTTOM, TIP_TOP, TIP_LEFT, TIP_RIGHT];\n        removeClass(selEle, removeList);\n        this.setTipClass(position);\n        addClass(selEle, this.tipClass);\n    };\n    Tooltip.prototype.adjustArrow = function (target, position, tooltipPositionX, tooltipPositionY) {\n        var arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n        if (this.showTipPointer === false || arrowEle === null) {\n            return;\n        }\n        this.updateTipPosition(position);\n        var leftValue;\n        var topValue;\n        this.tooltipEle.style.display = 'block';\n        var tooltipWidth = this.tooltipEle.clientWidth;\n        var tooltipHeight = this.tooltipEle.clientHeight;\n        var arrowInnerELe = select('.' + ARROW_TIP_INNER, this.tooltipEle);\n        var tipWidth = arrowEle.offsetWidth;\n        var tipHeight = arrowEle.offsetHeight;\n        this.tooltipEle.style.display = '';\n        if (this.tipClass === TIP_BOTTOM || this.tipClass === TIP_TOP) {\n            if (this.tipClass === TIP_BOTTOM) {\n                topValue = '99.9%';\n                // Arrow icon aligned -2px height from ArrowOuterTip div\n                arrowInnerELe.style.top = '-' + (tipHeight - 2) + 'px';\n            }\n            else {\n                topValue = -(tipHeight - 1) + 'px';\n                // Arrow icon aligned -6px height from ArrowOuterTip div\n                arrowInnerELe.style.top = '-' + (tipHeight - 6) + 'px';\n            }\n            if (target) {\n                var tipPosExclude = tooltipPositionX !== 'Center' || (tooltipWidth > target.offsetWidth) || this.mouseTrail;\n                if ((tipPosExclude && tooltipPositionX === 'Left') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n                    leftValue = (tooltipWidth - tipWidth - POINTER_ADJUST) + 'px';\n                }\n                else if ((tipPosExclude && tooltipPositionX === 'Right') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n                    leftValue = POINTER_ADJUST + 'px';\n                }\n                else if ((tipPosExclude) && (this.tipPointerPosition === 'End' || this.tipPointerPosition === 'Start')) {\n                    leftValue = (this.tipPointerPosition === 'End') ? ((target.offsetWidth + ((this.tooltipEle.offsetWidth - target.offsetWidth) / 2)) - (tipWidth / 2)) - POINTER_ADJUST + 'px'\n                        : ((this.tooltipEle.offsetWidth - target.offsetWidth) / 2) - (tipWidth / 2) + POINTER_ADJUST + 'px';\n                }\n                else {\n                    leftValue = ((tooltipWidth / 2) - (tipWidth / 2)) + 'px';\n                }\n            }\n        }\n        else {\n            if (this.tipClass === TIP_RIGHT) {\n                leftValue = '99.9%';\n                // Arrow icon aligned -2px left from ArrowOuterTip div\n                arrowInnerELe.style.left = '-' + (tipWidth - 2) + 'px';\n            }\n            else {\n                leftValue = -(tipWidth - 1) + 'px';\n                // Arrow icon aligned -2px from ArrowOuterTip width\n                arrowInnerELe.style.left = (-(tipWidth) + (tipWidth - 2)) + 'px';\n            }\n            var tipPosExclude = tooltipPositionY !== 'Center' || (tooltipHeight > target.offsetHeight) || this.mouseTrail;\n            if ((tipPosExclude && tooltipPositionY === 'Top') || (!tipPosExclude && this.tipPointerPosition === 'End')) {\n                topValue = (tooltipHeight - tipHeight - POINTER_ADJUST) + 'px';\n            }\n            else if ((tipPosExclude && tooltipPositionY === 'Bottom') || (!tipPosExclude && this.tipPointerPosition === 'Start')) {\n                topValue = POINTER_ADJUST + 'px';\n            }\n            else {\n                topValue = ((tooltipHeight / 2) - (tipHeight / 2)) + 'px';\n            }\n        }\n        arrowEle.style.top = topValue;\n        arrowEle.style.left = leftValue;\n    };\n    Tooltip.prototype.renderContent = function (target) {\n        var tooltipContent = select('.' + CONTENT, this.tooltipEle);\n        if (this.cssClass) {\n            addClass([this.tooltipEle], this.cssClass.split(' '));\n        }\n        if (target && !isNullOrUndefined(target.getAttribute('title'))) {\n            target.setAttribute('data-content', target.getAttribute('title'));\n            target.removeAttribute('title');\n        }\n        if (!isNullOrUndefined(this.content)) {\n            tooltipContent.innerHTML = '';\n            if (this.content instanceof HTMLElement) {\n                tooltipContent.appendChild(this.content);\n            }\n            else if (typeof this.content === 'string') {\n                if (this.enableHtmlSanitizer) {\n                    this.setProperties({ content: SanitizeHtmlHelper.sanitize(this.content) }, true);\n                }\n                if (this.enableHtmlParse) {\n                    var tempFunction = compile(this.content);\n                    var tempArr = tempFunction({}, this, 'content', this.element.id + 'content', undefined, undefined, tooltipContent, this.root);\n                    if (tempArr) {\n                        append(tempArr, tooltipContent);\n                    }\n                }\n                else {\n                    tooltipContent['textContent'] = this.content;\n                }\n            }\n            else {\n                var templateFunction = compile(this.content);\n                var tempArr = templateFunction({}, this, 'content', this.element.id + 'content', undefined, undefined, tooltipContent);\n                if (tempArr) {\n                    append(tempArr, tooltipContent);\n                }\n                this.renderReactTemplates();\n            }\n        }\n        else {\n            if (target && !isNullOrUndefined(target.getAttribute('data-content'))) {\n                tooltipContent.innerHTML = target.getAttribute('data-content');\n            }\n        }\n    };\n    Tooltip.prototype.renderCloseIcon = function () {\n        if (!this.isSticky) {\n            var existingCloseIcon = this.tooltipEle.querySelector('.' + ICON + '.' + CLOSE);\n            if (existingCloseIcon) {\n                remove(existingCloseIcon);\n            }\n            return;\n        }\n        var tipClose = this.createElement('div', { className: ICON + ' ' + CLOSE });\n        this.tooltipEle.appendChild(tipClose);\n        EventHandler.add(tipClose, Browser.touchStartEvent, this.onStickyClose, this);\n    };\n    Tooltip.prototype.addDescribedBy = function (target, id) {\n        var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n        if (describedby.indexOf(id) < 0) {\n            describedby.push(id);\n        }\n        attributes(target, { 'aria-describedby': describedby.join(' ').trim(), 'data-tooltip-id': id });\n    };\n    Tooltip.prototype.removeDescribedBy = function (target) {\n        var id = target.getAttribute('data-tooltip-id');\n        var describedby = (target.getAttribute('aria-describedby') || '').split(/\\s+/);\n        var index = describedby.indexOf(id);\n        if (index !== -1) {\n            describedby.splice(index, 1);\n        }\n        target.removeAttribute('data-tooltip-id');\n        var orgdescribedby = describedby.join(' ').trim();\n        if (orgdescribedby) {\n            target.setAttribute('aria-describedby', orgdescribedby);\n        }\n        else {\n            target.removeAttribute('aria-describedby');\n        }\n    };\n    Tooltip.prototype.tapHoldHandler = function (evt) {\n        clearTimeout(this.autoCloseTimer);\n        this.targetHover(evt.originalEvent);\n    };\n    Tooltip.prototype.touchEndHandler = function (e) {\n        var _this = this;\n        if (this.isSticky) {\n            return;\n        }\n        var close = function () {\n            _this.close();\n        };\n        this.autoCloseTimer = setTimeout(close, TOUCHEND_HIDE_DELAY);\n    };\n    Tooltip.prototype.targetClick = function (e) {\n        var target;\n        if (this.target) {\n            target = closest(e.target, this.target);\n        }\n        else {\n            target = this.element;\n        }\n        if (isNullOrUndefined(target)) {\n            return;\n        }\n        if (target.getAttribute('data-tooltip-id') === null) {\n            this.targetHover(e);\n        }\n        else if (!this.isSticky) {\n            this.hideTooltip(this.animation.close, e, target);\n        }\n    };\n    Tooltip.prototype.targetHover = function (e) {\n        var target;\n        if (this.target) {\n            target = closest(e.target, this.target);\n        }\n        else {\n            target = this.element;\n        }\n        if (isNullOrUndefined(target) || (target.getAttribute('data-tooltip-id') !== null && this.closeDelay === 0)) {\n            return;\n        }\n        var targetList = [].slice.call(selectAll('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', document));\n        for (var _i = 0, targetList_1 = targetList; _i < targetList_1.length; _i++) {\n            var target_1 = targetList_1[_i];\n            this.restoreElement(target_1);\n        }\n        this.showTooltip(target, this.animation.open, e);\n    };\n    Tooltip.prototype.mouseMoveBeforeOpen = function (e) {\n        this.mouseMoveEvent = e;\n    };\n    Tooltip.prototype.mouseMoveBeforeRemove = function () {\n        if (this.mouseMoveTarget) {\n            EventHandler.remove(this.mouseMoveTarget, 'mousemove touchstart', this.mouseMoveBeforeOpen);\n        }\n    };\n    Tooltip.prototype.showTooltip = function (target, showAnimation, e) {\n        var _this = this;\n        clearTimeout(this.showTimer);\n        clearTimeout(this.hideTimer);\n        if (this.openDelay && this.mouseTrail) {\n            this.mouseMoveBeforeRemove();\n            this.mouseMoveTarget = target;\n            EventHandler.add(this.mouseMoveTarget, 'mousemove touchstart', this.mouseMoveBeforeOpen, this);\n        }\n        this.tooltipEventArgs = {\n            type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n            element: this.tooltipEle, isInteracted: !isNullOrUndefined(e)\n        };\n        var observeCallback = function (beforeRenderArgs) {\n            _this.beforeRenderCallback(beforeRenderArgs, target, e, showAnimation);\n        };\n        this.trigger('beforeRender', this.tooltipEventArgs, observeCallback.bind(this));\n    };\n    Tooltip.prototype.beforeRenderCallback = function (beforeRenderArgs, target, e, showAnimation) {\n        if (beforeRenderArgs.cancel) {\n            this.isHidden = true;\n            this.clear();\n            this.mouseMoveBeforeRemove();\n        }\n        else {\n            this.isHidden = false;\n            if (isNullOrUndefined(this.tooltipEle)) {\n                this.ctrlId = this.element.getAttribute('id') ?\n                    getUniqueID(this.element.getAttribute('id')) : getUniqueID('tooltip');\n                this.tooltipEle = this.createElement('div', {\n                    className: TOOLTIP_WRAP + ' ' + POPUP_ROOT + ' ' + POPUP_LIB, attrs: {\n                        role: 'tooltip', 'aria-hidden': 'false', 'id': this.ctrlId + '_content'\n                    }, styles: 'width:' +\n                        formatUnit(this.width) + ';height:' + formatUnit(this.height) + ';position:absolute;'\n                });\n                this.tooltipBeforeRender(target, this);\n                this.tooltipAfterRender(target, e, showAnimation, this);\n            }\n            else {\n                if (target) {\n                    this.adjustArrow(target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n                    this.addDescribedBy(target, this.ctrlId + '_content');\n                    this.renderContent(target);\n                    PopupAnimation.stop(this.tooltipEle);\n                    this.reposition(target);\n                    this.tooltipAfterRender(target, e, showAnimation, this);\n                }\n            }\n        }\n    };\n    Tooltip.prototype.appendContainer = function (ctrlObj) {\n        if (typeof this.container == 'string') {\n            if (this.container === 'body') {\n                this.containerElement = document.body;\n            }\n            else {\n                this.isBodyContainer = false;\n                this.containerElement = select(this.container, document);\n            }\n        }\n        else if (this.container instanceof HTMLElement) {\n            this.containerElement = this.container;\n            this.isBodyContainer = this.containerElement.tagName === 'BODY';\n        }\n        if (!this.isBodyContainer) {\n            addClass([this.containerElement], POPUP_CONTAINER);\n        }\n        this.containerElement.appendChild(ctrlObj.tooltipEle);\n    };\n    Tooltip.prototype.tooltipBeforeRender = function (target, ctrlObj) {\n        if (target) {\n            if (Browser.isDevice) {\n                addClass([ctrlObj.tooltipEle], DEVICE);\n            }\n            if (ctrlObj.width !== 'auto') {\n                ctrlObj.tooltipEle.style.maxWidth = formatUnit(ctrlObj.width);\n            }\n            ctrlObj.tooltipEle.appendChild(ctrlObj.createElement('div', { className: CONTENT }));\n            this.appendContainer(ctrlObj);\n            removeClass([ctrlObj.tooltipEle], HIDE_POPUP);\n            ctrlObj.addDescribedBy(target, ctrlObj.ctrlId + '_content');\n            ctrlObj.renderContent(target);\n            addClass([ctrlObj.tooltipEle], POPUP_OPEN);\n            if (ctrlObj.showTipPointer) {\n                ctrlObj.renderArrow();\n            }\n            ctrlObj.renderCloseIcon();\n            ctrlObj.renderPopup(target);\n            ctrlObj.adjustArrow(target, ctrlObj.position, ctrlObj.tooltipPositionX, ctrlObj.tooltipPositionY);\n            PopupAnimation.stop(ctrlObj.tooltipEle);\n            ctrlObj.reposition(target);\n        }\n    };\n    Tooltip.prototype.tooltipAfterRender = function (target, e, showAnimation, ctrlObj) {\n        if (target) {\n            removeClass([ctrlObj.tooltipEle], POPUP_OPEN);\n            addClass([ctrlObj.tooltipEle], POPUP_CLOSE);\n            ctrlObj.tooltipEventArgs = {\n                type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n                element: ctrlObj.tooltipEle, isInteracted: !isNullOrUndefined(e)\n            };\n            if (ctrlObj.needTemplateReposition() && !ctrlObj.mouseTrail) {\n                ctrlObj.tooltipEle.style.display = 'none';\n            }\n            var observeCallback = function (observedArgs) {\n                ctrlObj.beforeOpenCallback(observedArgs, target, showAnimation, e);\n            };\n            ctrlObj.trigger('beforeOpen', ctrlObj.tooltipEventArgs, observeCallback.bind(ctrlObj));\n        }\n    };\n    Tooltip.prototype.beforeOpenCallback = function (observedArgs, target, showAnimation, e) {\n        var _this = this;\n        if (observedArgs.cancel) {\n            this.isHidden = true;\n            this.clear();\n            this.mouseMoveBeforeRemove();\n            this.restoreElement(target);\n        }\n        else {\n            var openAnimation_1 = {\n                name: (showAnimation.effect === 'None' && animationMode === 'Enable') ? 'FadeIn' : this.animation.open.effect,\n                duration: showAnimation.duration,\n                delay: showAnimation.delay,\n                timingFunction: 'easeOut'\n            };\n            if (showAnimation.effect === 'None') {\n                openAnimation_1 = undefined;\n            }\n            if (this.openDelay > 0) {\n                var show = function () {\n                    if (_this.mouseTrail) {\n                        EventHandler.add(target, 'mousemove touchstart mouseenter', _this.onMouseMove, _this);\n                    }\n                    if (_this.popupObj) {\n                        _this.popupObj.show(openAnimation_1, target);\n                        if (_this.mouseMoveEvent && _this.mouseTrail) {\n                            _this.onMouseMove(_this.mouseMoveEvent);\n                        }\n                    }\n                };\n                this.showTimer = setTimeout(show, this.openDelay);\n            }\n            else {\n                if (this.popupObj) {\n                    this.popupObj.show(openAnimation_1, target);\n                }\n            }\n        }\n        if (e) {\n            this.wireMouseEvents(e, target);\n        }\n    };\n    Tooltip.prototype.needTemplateReposition = function () {\n        // eslint-disable-next-line\n        var tooltip = this;\n        return !isNullOrUndefined(tooltip.viewContainerRef)\n            && typeof tooltip.viewContainerRef !== 'string' || this.isReact;\n    };\n    Tooltip.prototype.checkCollision = function (target, x, y) {\n        var elePos = {\n            left: x, top: y, position: this.position,\n            horizontal: this.tooltipPositionX, vertical: this.tooltipPositionY\n        };\n        var affectedPos = isCollide(this.tooltipEle, this.checkCollideTarget(), x, y);\n        if (affectedPos.length > 0) {\n            elePos.horizontal = affectedPos.indexOf('left') >= 0 ? 'Right' : affectedPos.indexOf('right') >= 0 ? 'Left' :\n                this.tooltipPositionX;\n            elePos.vertical = affectedPos.indexOf('top') >= 0 ? 'Bottom' : affectedPos.indexOf('bottom') >= 0 ? 'Top' :\n                this.tooltipPositionY;\n        }\n        return elePos;\n    };\n    Tooltip.prototype.calculateElementPosition = function (pos, offsetPos) {\n        return [this.isBodyContainer ? pos.left + offsetPos.left :\n                (pos.left - this.containerElement.offsetLeft) + offsetPos.left + window.pageXOffset + this.containerElement.scrollLeft,\n            this.isBodyContainer ? pos.top + offsetPos.top :\n                (pos.top - this.containerElement.offsetTop) + offsetPos.top + window.pageYOffset + this.containerElement.scrollTop];\n    };\n    Tooltip.prototype.collisionFlipFit = function (target, x, y) {\n        var elePos = this.checkCollision(target, x, y);\n        var newpos = elePos.position;\n        if (this.tooltipPositionY !== elePos.vertical) {\n            newpos = ((this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n                elePos.vertical + this.tooltipPositionX : this.tooltipPositionX + elePos.vertical);\n        }\n        if (this.tooltipPositionX !== elePos.horizontal) {\n            if (newpos.indexOf('Left') === 0) {\n                elePos.vertical = (newpos === 'LeftTop' || newpos === 'LeftCenter') ? 'Top' : 'Bottom';\n                newpos = (elePos.vertical + 'Left');\n            }\n            if (newpos.indexOf('Right') === 0) {\n                elePos.vertical = (newpos === 'RightTop' || newpos === 'RightCenter') ? 'Top' : 'Bottom';\n                newpos = (elePos.vertical + 'Right');\n            }\n            elePos.horizontal = this.tooltipPositionX;\n        }\n        this.tooltipEventArgs = {\n            type: null, cancel: false, target: target, event: null,\n            element: this.tooltipEle, collidedPosition: newpos\n        };\n        this.trigger('beforeCollision', this.tooltipEventArgs);\n        if (this.tooltipEventArgs.cancel) {\n            newpos = this.position;\n        }\n        else {\n            var elePosVertical = elePos.vertical;\n            var elePosHorizontal = elePos.horizontal;\n            if (elePos.position !== newpos) {\n                var pos = calculatePosition(target, elePosHorizontal, elePosVertical, !this.isBodyContainer, this.isBodyContainer ? null : this.containerElement.getBoundingClientRect());\n                this.adjustArrow(target, newpos, elePosHorizontal, elePosVertical);\n                var scalingFactors = this.getScalingFactor(target);\n                var offsetPos = this.calculateTooltipOffset(newpos, scalingFactors.x, scalingFactors.y);\n                offsetPos.top -= this.getOffSetPosition('TopBottom', newpos, this.offsetY);\n                offsetPos.left -= this.getOffSetPosition('RightLeft', newpos, this.offsetX);\n                elePos.position = newpos;\n                var elePosition = this.calculateElementPosition(pos, offsetPos);\n                elePos.left = elePosition[0];\n                elePos.top = elePosition[1];\n            }\n            else {\n                this.adjustArrow(target, newpos, elePosHorizontal, elePosVertical);\n            }\n        }\n        var eleOffset = { left: elePos.left, top: elePos.top };\n        var position = fit(this.tooltipEle, this.checkCollideTarget(), { X: true, Y: this.windowCollision }, eleOffset);\n        this.tooltipEle.style.display = 'block';\n        var arrowEle = select('.' + ARROW_TIP, this.tooltipEle);\n        if (this.showTipPointer && arrowEle != null && (newpos.indexOf('Bottom') === 0 || newpos.indexOf('Top') === 0)) {\n            var arrowleft = parseInt(arrowEle.style.left, 10) - (position.left - elePos.left);\n            if (arrowleft < 0) {\n                arrowleft = 0;\n            }\n            else if ((arrowleft + arrowEle.offsetWidth) > this.tooltipEle.clientWidth) {\n                arrowleft = this.tooltipEle.clientWidth - arrowEle.offsetWidth;\n            }\n            arrowEle.style.left = arrowleft.toString() + 'px';\n        }\n        this.tooltipEle.style.display = '';\n        eleOffset.left = position.left;\n        eleOffset.top = position.top;\n        return eleOffset;\n    };\n    Tooltip.prototype.getOffSetPosition = function (positionString, newPos, offsetType) {\n        return ((positionString.indexOf(this.position.split(/(?=[A-Z])/)[0]) !== -1) &&\n            (positionString.indexOf(newPos.split(/(?=[A-Z])/)[0]) !== -1)) ? (2 * offsetType) : 0;\n    };\n    Tooltip.prototype.checkCollideTarget = function () {\n        return !this.windowCollision && this.target ? this.element : null;\n    };\n    Tooltip.prototype.hideTooltip = function (hideAnimation, e, targetElement) {\n        var _this = this;\n        if (this.closeDelay > 0) {\n            clearTimeout(this.hideTimer);\n            clearTimeout(this.showTimer);\n            var hide = function () {\n                if (_this.closeDelay && _this.tooltipEle && _this.isTooltipOpen) {\n                    return;\n                }\n                _this.tooltipHide(hideAnimation, e, targetElement);\n            };\n            this.hideTimer = setTimeout(hide, this.closeDelay);\n        }\n        else {\n            this.tooltipHide(hideAnimation, e, targetElement);\n        }\n    };\n    Tooltip.prototype.tooltipHide = function (hideAnimation, e, targetElement) {\n        var _this = this;\n        var target;\n        if (e) {\n            target = this.target ? (targetElement || e.target) : this.element;\n        }\n        else {\n            target = select('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', document);\n        }\n        this.tooltipEventArgs = {\n            type: e ? e.type : null, cancel: false, target: target, event: e ? e : null,\n            element: this.tooltipEle, isInteracted: !isNullOrUndefined(e)\n        };\n        // this line commented for close the tooltip popup element even the target element destroyed in a page.\n        //if (isNullOrUndefined(target)) { return; }\n        this.trigger('beforeClose', this.tooltipEventArgs, function (observedArgs) {\n            if (!observedArgs.cancel) {\n                _this.mouseMoveBeforeRemove();\n                _this.popupHide(hideAnimation, target, e);\n            }\n            else {\n                _this.isHidden = false;\n            }\n        });\n        this.tooltipEventArgs = null;\n    };\n    Tooltip.prototype.popupHide = function (hideAnimation, target, e) {\n        if (target && e) {\n            this.restoreElement(target);\n        }\n        this.isHidden = true;\n        var closeAnimation = {\n            name: (hideAnimation.effect === 'None' && animationMode === 'Enable') ? 'FadeOut' : this.animation.close.effect,\n            duration: hideAnimation.duration,\n            delay: hideAnimation.delay,\n            timingFunction: 'easeIn'\n        };\n        if (hideAnimation.effect === 'None') {\n            closeAnimation = undefined;\n        }\n        if (this.popupObj) {\n            this.popupObj.hide(closeAnimation);\n        }\n    };\n    Tooltip.prototype.restoreElement = function (target) {\n        this.unwireMouseEvents(target);\n        if (!isNullOrUndefined(target.getAttribute('data-content'))) {\n            target.setAttribute('title', target.getAttribute('data-content'));\n            target.removeAttribute('data-content');\n        }\n        this.removeDescribedBy(target);\n    };\n    Tooltip.prototype.clear = function () {\n        var target = this.findTarget();\n        if (target) {\n            this.restoreElement(target);\n        }\n        if (this.tooltipEle) {\n            removeClass([this.tooltipEle], POPUP_CLOSE);\n            addClass([this.tooltipEle], POPUP_OPEN);\n        }\n        if (this.isHidden) {\n            if (this.popupObj) {\n                this.popupObj.destroy();\n            }\n            if (this.tooltipEle) {\n                remove(this.tooltipEle);\n            }\n            this.tooltipEle = null;\n            this.popupObj = null;\n        }\n    };\n    Tooltip.prototype.tooltipHover = function (e) {\n        if (this.tooltipEle) {\n            this.isTooltipOpen = true;\n        }\n    };\n    Tooltip.prototype.tooltipMouseOut = function (e) {\n        this.isTooltipOpen = false;\n        this.hideTooltip(this.animation.close, e, this.findTarget());\n    };\n    Tooltip.prototype.onMouseOut = function (e) {\n        var enteredElement = e.relatedTarget;\n        // don't close the tooltip only if it is tooltip content element\n        if (enteredElement && !this.mouseTrail) {\n            var checkForTooltipElement = closest(enteredElement, \".\" + TOOLTIP_WRAP + \".\" + POPUP_LIB + \".\" + POPUP_ROOT);\n            if (checkForTooltipElement) {\n                EventHandler.add(checkForTooltipElement, 'mouseleave', this.tooltipElementMouseOut, this);\n            }\n            else {\n                this.hideTooltip(this.animation.close, e, this.findTarget());\n                if (this.closeDelay === 0) {\n                    this.clear();\n                }\n            }\n        }\n        else {\n            this.hideTooltip(this.animation.close, e, this.findTarget());\n            this.clear();\n        }\n    };\n    Tooltip.prototype.tooltipElementMouseOut = function (e) {\n        this.hideTooltip(this.animation.close, e, this.findTarget());\n        EventHandler.remove(this.element, 'mouseleave', this.tooltipElementMouseOut);\n        this.clear();\n    };\n    Tooltip.prototype.onStickyClose = function (e) {\n        this.close();\n    };\n    Tooltip.prototype.onMouseMove = function (event) {\n        var eventPageX = 0;\n        var eventPageY = 0;\n        if (event.type.indexOf('touch') > -1) {\n            event.preventDefault();\n            eventPageX = event.touches[0].pageX;\n            eventPageY = event.touches[0].pageY;\n        }\n        else {\n            eventPageX = event.pageX;\n            eventPageY = event.pageY;\n        }\n        PopupAnimation.stop(this.tooltipEle);\n        removeClass([this.tooltipEle], POPUP_CLOSE);\n        addClass([this.tooltipEle], POPUP_OPEN);\n        this.adjustArrow(event.target, this.position, this.tooltipPositionX, this.tooltipPositionY);\n        var scalingFactors = this.getScalingFactor(event.target);\n        var pos = this.calculateTooltipOffset(this.position, scalingFactors.x, scalingFactors.y);\n        var x = eventPageX + pos.left + this.offsetX;\n        var y = eventPageY + pos.top + this.offsetY;\n        var elePos = this.checkCollision(event.target, x, y);\n        if (this.tooltipPositionX !== elePos.horizontal || this.tooltipPositionY !== elePos.vertical) {\n            var newpos = (this.position.indexOf('Bottom') === 0 || this.position.indexOf('Top') === 0) ?\n                elePos.vertical + elePos.horizontal : elePos.horizontal + elePos.vertical;\n            elePos.position = newpos;\n            this.adjustArrow(event.target, elePos.position, elePos.horizontal, elePos.vertical);\n            var colpos = this.calculateTooltipOffset(elePos.position, scalingFactors.x, scalingFactors.y);\n            elePos.left = eventPageX + colpos.left - this.offsetX;\n            elePos.top = eventPageY + colpos.top - this.offsetY;\n        }\n        this.tooltipEle.style.left = elePos.left + 'px';\n        this.tooltipEle.style.top = elePos.top + 'px';\n    };\n    Tooltip.prototype.keyDown = function (event) {\n        if (this.tooltipEle && event.keyCode === 27) {\n            this.close();\n        }\n    };\n    Tooltip.prototype.touchEnd = function (e) {\n        if (this.tooltipEle && closest(e.target, '.' + ROOT) === null && !this.isSticky) {\n            this.close();\n        }\n    };\n    Tooltip.prototype.scrollHandler = function (e) {\n        if (this.tooltipEle && !this.isSticky) {\n            if (!(closest(e.target, \".\" + TOOLTIP_WRAP + \".\" + POPUP_LIB + \".\" + POPUP_ROOT))) {\n                this.close();\n            }\n        }\n    };\n    /**\n     * Core method that initializes the control rendering.\n     *\n     * @private\n     * @returns {void}\n     */\n    Tooltip.prototype.render = function () {\n        this.initialize();\n        this.wireEvents(this.opensOn);\n        this.renderComplete();\n    };\n    /**\n     * Initializes the values of private members.\n     *\n     * @private\n     * @returns {void}\n     */\n    Tooltip.prototype.preRender = function () {\n        this.tipClass = TIP_BOTTOM;\n        this.tooltipPositionX = 'Center';\n        this.tooltipPositionY = 'Top';\n        this.isHidden = true;\n    };\n    /**\n     * Binding events to the Tooltip element.\n     *\n     * @hidden\n     * @param {string} trigger - specify the trigger string to the function\n     * @returns {void}\n     *\n     */\n    Tooltip.prototype.wireEvents = function (trigger) {\n        var triggerList = this.getTriggerList(trigger);\n        for (var _i = 0, triggerList_1 = triggerList; _i < triggerList_1.length; _i++) {\n            var opensOn = triggerList_1[_i];\n            if (opensOn === 'Custom') {\n                return;\n            }\n            if (opensOn === 'Focus') {\n                this.wireFocusEvents();\n            }\n            if (opensOn === 'Click') {\n                EventHandler.add(this.element, Browser.touchStartEvent, this.targetClick, this);\n            }\n            if (opensOn === 'Hover') {\n                if (Browser.isDevice) {\n                    this.touchModule = new Touch(this.element, {\n                        tapHoldThreshold: TAPHOLD_THRESHOLD,\n                        tapHold: this.tapHoldHandler.bind(this)\n                    });\n                    EventHandler.add(this.element, Browser.touchEndEvent, this.touchEndHandler, this);\n                }\n                else {\n                    EventHandler.add(this.element, 'mouseover', this.targetHover, this);\n                }\n            }\n        }\n        EventHandler.add(document, 'touchend', this.touchEnd, this);\n        EventHandler.add(document, 'scroll wheel', this.scrollHandler, this);\n        EventHandler.add(window, 'resize', this.windowResize, this);\n        EventHandler.add(document, 'keydown', this.keyDown, this);\n    };\n    Tooltip.prototype.getTriggerList = function (trigger) {\n        if (trigger === 'Auto') {\n            trigger = (Browser.isDevice) ? 'Hover' : 'Hover Focus';\n        }\n        return trigger.split(' ');\n    };\n    Tooltip.prototype.wireFocusEvents = function () {\n        if (!isNullOrUndefined(this.target)) {\n            var targetList = [].slice.call(selectAll(this.target, this.element));\n            this.targetsList = targetList;\n            for (var _i = 0, targetList_2 = targetList; _i < targetList_2.length; _i++) {\n                var target = targetList_2[_i];\n                EventHandler.add(target, 'focus', this.targetHover, this);\n            }\n        }\n        else {\n            EventHandler.add(this.element, 'focusin', this.targetHover, this);\n        }\n    };\n    Tooltip.prototype.wireMouseEvents = function (e, target) {\n        if (this.tooltipEle) {\n            if (!this.isSticky) {\n                if (e.type === 'focus') {\n                    EventHandler.add(target, 'blur', this.onMouseOut, this);\n                }\n                if (e.type === 'focusin') {\n                    EventHandler.add(target, 'focusout', this.onMouseOut, this);\n                }\n                if (e.type === 'mouseover') {\n                    EventHandler.add(target, 'mouseleave', this.onMouseOut, this);\n                }\n                if (this.closeDelay) {\n                    EventHandler.add(this.tooltipEle, 'mouseenter', this.tooltipHover, this);\n                    EventHandler.add(this.tooltipEle, 'mouseleave', this.tooltipMouseOut, this);\n                }\n            }\n            if (this.mouseTrail && this.openDelay === 0) {\n                EventHandler.add(target, 'mousemove touchstart mouseenter', this.onMouseMove, this);\n            }\n        }\n    };\n    /**\n     * Unbinding events from the element on widget destroy.\n     *\n     * @hidden\n     *\n     * @param {string} trigger - specify the trigger string to the function\n     * @returns {void}\n     *\n     */\n    Tooltip.prototype.unwireEvents = function (trigger) {\n        var triggerList = this.getTriggerList(trigger);\n        for (var _i = 0, triggerList_2 = triggerList; _i < triggerList_2.length; _i++) {\n            var opensOn = triggerList_2[_i];\n            if (opensOn === 'Custom') {\n                return;\n            }\n            if (opensOn === 'Focus') {\n                this.unwireFocusEvents();\n            }\n            if (opensOn === 'Click') {\n                EventHandler.remove(this.element, Browser.touchStartEvent, this.targetClick);\n            }\n            if (opensOn === 'Hover') {\n                if (Browser.isDevice) {\n                    if (this.touchModule) {\n                        this.touchModule.destroy();\n                    }\n                    EventHandler.remove(this.element, Browser.touchEndEvent, this.touchEndHandler);\n                }\n                else {\n                    EventHandler.remove(this.element, 'mouseover', this.targetHover);\n                }\n            }\n        }\n        EventHandler.remove(document, 'touchend', this.touchEnd);\n        EventHandler.remove(document, 'scroll wheel', this.scrollHandler);\n        EventHandler.remove(window, 'resize', this.windowResize);\n        EventHandler.remove(document, 'keydown', this.keyDown);\n    };\n    Tooltip.prototype.unwireFocusEvents = function () {\n        if (!isNullOrUndefined(this.target)) {\n            var targetList = [].slice.call(selectAll(this.target, this.element));\n            for (var _i = 0, targetList_3 = targetList; _i < targetList_3.length; _i++) {\n                var target = targetList_3[_i];\n                EventHandler.remove(target, 'focus', this.targetHover);\n            }\n        }\n        else {\n            EventHandler.remove(this.element, 'focusin', this.targetHover);\n        }\n    };\n    Tooltip.prototype.unwireMouseEvents = function (target) {\n        if (!this.isSticky) {\n            var triggerList = this.getTriggerList(this.opensOn);\n            for (var _i = 0, triggerList_3 = triggerList; _i < triggerList_3.length; _i++) {\n                var opensOn = triggerList_3[_i];\n                if (opensOn === 'Focus') {\n                    EventHandler.remove(target, 'blur', this.onMouseOut);\n                    EventHandler.remove(target, 'focusout', this.onMouseOut);\n                }\n                if (opensOn === 'Hover' && !Browser.isDevice) {\n                    EventHandler.remove(target, 'mouseleave', this.onMouseOut);\n                }\n            }\n            if (this.closeDelay) {\n                EventHandler.remove(target, 'mouseenter', this.tooltipHover);\n                EventHandler.remove(target, 'mouseleave', this.tooltipMouseOut);\n            }\n        }\n        if (this.mouseTrail) {\n            EventHandler.remove(target, 'mousemove touchstart mouseenter', this.onMouseMove);\n        }\n    };\n    Tooltip.prototype.findTarget = function () {\n        var target = select('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', document);\n        return target;\n    };\n    /**\n     * Core method to return the component name.\n     *\n     * @private\n     *\n     * @returns {string} - this method returns module name.\n     */\n    Tooltip.prototype.getModuleName = function () {\n        return 'tooltip';\n    };\n    /**\n     * Returns the properties to be maintained in the persisted state.\n     *\n     * @private\n     *\n     * @returns {string} - this method returns persisted data.\n     */\n    Tooltip.prototype.getPersistData = function () {\n        return this.addOnPersist([]);\n    };\n    /**\n     * Called internally, if any of the property value changed.\n     *\n     * @private\n     *\n     * @param {TooltipModel} newProp - this param gives new property values to the method\n     * @param {TooltipModel} oldProp - this param gives old property values to the method\n     * @returns {void}\n     *\n     */\n    Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n        var targetElement = this.findTarget();\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'width':\n                    if (this.tooltipEle && targetElement) {\n                        this.tooltipEle.style.width = this.tooltipEle.style.maxWidth = formatUnit(newProp.width);\n                        this.reposition(targetElement);\n                    }\n                    break;\n                case 'height':\n                    if (this.tooltipEle && targetElement) {\n                        this.tooltipEle.style.height = formatUnit(newProp.height);\n                        this.reposition(targetElement);\n                    }\n                    break;\n                case 'content':\n                    if (this.tooltipEle) {\n                        this.renderContent();\n                    }\n                    break;\n                case 'opensOn':\n                    this.unwireEvents(oldProp.opensOn);\n                    this.wireEvents(newProp.opensOn);\n                    break;\n                case 'position':\n                    this.formatPosition();\n                    if (this.tooltipEle && targetElement) {\n                        var arrowInnerELe = select('.' + ARROW_TIP_INNER, this.tooltipEle);\n                        if (arrowInnerELe) {\n                            arrowInnerELe.style.top = arrowInnerELe.style.left = null;\n                        }\n                        this.reposition(targetElement);\n                    }\n                    break;\n                case 'tipPointerPosition':\n                    if (this.tooltipEle && targetElement) {\n                        this.reposition(targetElement);\n                    }\n                    break;\n                case 'offsetX':\n                    if (this.tooltipEle) {\n                        var x = newProp.offsetX - oldProp.offsetX;\n                        this.tooltipEle.style.left = (parseInt(this.tooltipEle.style.left, 10) + (x)).toString() + 'px';\n                    }\n                    break;\n                case 'offsetY':\n                    if (this.tooltipEle) {\n                        var y = newProp.offsetY - oldProp.offsetY;\n                        this.tooltipEle.style.top = (parseInt(this.tooltipEle.style.top, 10) + (y)).toString() + 'px';\n                    }\n                    break;\n                case 'cssClass':\n                    if (this.tooltipEle) {\n                        if (oldProp.cssClass) {\n                            removeClass([this.tooltipEle], oldProp.cssClass.split(' '));\n                        }\n                        if (newProp.cssClass) {\n                            addClass([this.tooltipEle], newProp.cssClass.split(' '));\n                        }\n                    }\n                    break;\n                case 'enableRtl':\n                    if (this.tooltipEle) {\n                        if (this.enableRtl) {\n                            addClass([this.tooltipEle], RTL);\n                        }\n                        else {\n                            removeClass([this.tooltipEle], RTL);\n                        }\n                    }\n                    break;\n                case 'isSticky':\n                    if (this.tooltipEle && targetElement) {\n                        this.renderCloseIcon();\n                        this.reposition(targetElement);\n                    }\n                    break;\n                case 'container':\n                    if (!isNullOrUndefined(this.containerElement)) {\n                        removeClass([this.containerElement], POPUP_CONTAINER);\n                    }\n                    this.container = newProp.container;\n                    if (this.tooltipEle && targetElement) {\n                        this.appendContainer(this);\n                        this.reposition(targetElement);\n                    }\n            }\n        }\n    };\n    /**\n     * It is used to show the Tooltip on the specified target with specific animation settings.\n     *\n     * @param {HTMLElement} element - Target element where the Tooltip is to be displayed. (It is an optional parameter)\n     * @param {TooltipAnimationSettings} animation - Sets the specific animation, while showing the Tooltip on the screen. (It is an optional parameter)\n     * @returns {void}\n     */\n    Tooltip.prototype.open = function (element, animation) {\n        if (isNullOrUndefined(animation)) {\n            animation = this.animation.open;\n        }\n        if (isNullOrUndefined(element)) {\n            element = this.element;\n        }\n        if (element.style.display === 'none') {\n            return;\n        }\n        this.showTooltip(element, animation);\n    };\n    /**\n     * It is used to hide the Tooltip with specific animation effect.\n     *\n     * @param {TooltipAnimationSettings} animation - Sets the specific animation when hiding Tooltip from the screen. (It is an optional parameter)\n     * @returns {void}\n     */\n    Tooltip.prototype.close = function (animation) {\n        if (!animation) {\n            animation = this.animation.close;\n        }\n        this.hideTooltip(animation);\n    };\n    /**\n     * It is used to refresh the Tooltip content and its position.\n     *\n     * @param {HTMLElement} target - Target element where the Tooltip content or position needs to be refreshed.\n     * @returns {void}\n     */\n    Tooltip.prototype.refresh = function (target) {\n        if (this.tooltipEle) {\n            this.renderContent(target);\n        }\n        if (this.popupObj && target) {\n            this.reposition(target);\n        }\n        if (!isNullOrUndefined(this.targetsList) && !isNullOrUndefined(this.target)) {\n            var target_2 = selectAll(this.target, this.element);\n            if (target_2.length !== this.targetsList.length) {\n                this.unwireEvents(this.opensOn);\n                this.wireEvents(this.opensOn);\n            }\n        }\n    };\n    /**\n     * It is used to destroy the Tooltip component.\n     * @method destroy\n     * @returns {void}\n     * @memberof Tooltip\n     */\n    Tooltip.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        if (this.tooltipEle) {\n            remove(this.tooltipEle);\n        }\n        if (this.popupObj) {\n            this.popupObj.destroy();\n        }\n        removeClass([this.element], ROOT);\n        this.unwireEvents(this.opensOn);\n        this.unwireMouseEvents(this.element);\n        this.tooltipEle = null;\n        this.popupObj = null;\n        var currentTarget = selectAll('[data-tooltip-id= \"' + this.ctrlId + '_content\"]', this.element);\n        for (var _i = 0, currentTarget_1 = currentTarget; _i < currentTarget_1.length; _i++) {\n            var target = currentTarget_1[_i];\n            this.restoreElement(target);\n        }\n    };\n    __decorate([\n        Property('auto')\n    ], Tooltip.prototype, \"width\", void 0);\n    __decorate([\n        Property('auto')\n    ], Tooltip.prototype, \"height\", void 0);\n    __decorate([\n        Property()\n    ], Tooltip.prototype, \"content\", void 0);\n    __decorate([\n        Property('body')\n    ], Tooltip.prototype, \"container\", void 0);\n    __decorate([\n        Property()\n    ], Tooltip.prototype, \"target\", void 0);\n    __decorate([\n        Property('TopCenter')\n    ], Tooltip.prototype, \"position\", void 0);\n    __decorate([\n        Property(0)\n    ], Tooltip.prototype, \"offsetX\", void 0);\n    __decorate([\n        Property(0)\n    ], Tooltip.prototype, \"offsetY\", void 0);\n    __decorate([\n        Property(true)\n    ], Tooltip.prototype, \"showTipPointer\", void 0);\n    __decorate([\n        Property(true)\n    ], Tooltip.prototype, \"enableHtmlParse\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"windowCollision\", void 0);\n    __decorate([\n        Property('Auto')\n    ], Tooltip.prototype, \"tipPointerPosition\", void 0);\n    __decorate([\n        Property('Auto')\n    ], Tooltip.prototype, \"opensOn\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"mouseTrail\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"isSticky\", void 0);\n    __decorate([\n        Complex({}, Animation)\n    ], Tooltip.prototype, \"animation\", void 0);\n    __decorate([\n        Property(0)\n    ], Tooltip.prototype, \"openDelay\", void 0);\n    __decorate([\n        Property(0)\n    ], Tooltip.prototype, \"closeDelay\", void 0);\n    __decorate([\n        Property()\n    ], Tooltip.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"enableHtmlSanitizer\", void 0);\n    __decorate([\n        Property('')\n    ], Tooltip.prototype, \"htmlAttributes\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"beforeRender\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"beforeOpen\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"afterOpen\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"beforeClose\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"afterClose\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"beforeCollision\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"destroyed\", void 0);\n    Tooltip = __decorate([\n        NotifyPropertyChanges\n    ], Tooltip);\n    return Tooltip;\n}(Component));\nexport { Tooltip };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// <reference path='../calendar/calendar-model.d.ts'/>\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Event, extend, L10n, Browser, formatUnit } from '@syncfusion/ej2-base';\nimport { detach, addClass, removeClass, closest, attributes, Touch } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, setValue, getUniqueID } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { Calendar } from '../calendar/calendar';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar ROOT = 'e-datepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar POPUPWRAPPER = 'e-popup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar INPUTCONTAINER = 'e-input-group';\nvar INPUTFOCUS = 'e-input-focus';\nvar INPUTROOT = 'e-input';\nvar ERROR = 'e-error';\nvar ACTIVE = 'e-active';\nvar OVERFLOW = 'e-date-overflow';\nvar DATEICON = 'e-date-icon';\nvar CLEARICON = 'e-clear-icon';\nvar ICONS = 'e-icons';\nvar OPENDURATION = 300;\nvar OFFSETVALUE = 4;\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar NONEDIT = 'e-non-edit';\nvar containerAttr = ['title', 'class', 'style'];\n/**\n * Represents the DatePicker component that allows user to select\n * or enter a date value.\n * ```html\n * <input id='datepicker'/>\n * ```\n * ```typescript\n * <script>\n *   let datePickerObject:DatePicker = new DatePicker({ value: new Date() });\n *   datePickerObject.appendTo('#datepicker');\n * </script>\n * ```\n */\nvar DatePicker = /** @class */ (function (_super) {\n    __extends(DatePicker, _super);\n    /**\n     * Constructor for creating the widget.\n     *\n     * @param {DatePickerModel} options - Specifies the DatePicker model.\n     * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n     * @private\n     */\n    function DatePicker(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.isDateIconClicked = false;\n        _this.isAltKeyPressed = false;\n        _this.isInteracted = true;\n        _this.invalidValueString = null;\n        _this.checkPreviousValue = null;\n        _this.maskedDateValue = '';\n        _this.isAngular = false;\n        _this.preventChange = false;\n        _this.isIconClicked = false;\n        _this.isDynamicValueChanged = false;\n        _this.moduleName = _this.getModuleName();\n        _this.isFocused = false;\n        _this.isBlur = false;\n        _this.isKeyAction = false;\n        _this.datepickerOptions = options;\n        return _this;\n    }\n    /**\n     * To Initialize the control rendering.\n     *\n     * @returns {void}\n     * @private\n     */\n    DatePicker.prototype.render = function () {\n        this.initialize();\n        this.bindEvents();\n        if (this.floatLabelType === 'Auto') {\n            Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n        }\n        if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n            this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n        }\n        if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n            this.enabled = false;\n        }\n        this.renderComplete();\n        this.setTimeZone(this.serverTimezoneOffset);\n    };\n    DatePicker.prototype.setTimeZone = function (offsetValue) {\n        if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n            var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n            var serverTimezoneDiff = offsetValue;\n            var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n            timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n            this.value = new Date((this.value).getTime() + (timeZoneDiff * 60 * 60 * 1000));\n            this.updateInput();\n        }\n    };\n    DatePicker.prototype.isDayLightSaving = function () {\n        var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n        var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n        return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n    };\n    DatePicker.prototype.setAllowEdit = function () {\n        if (this.allowEdit) {\n            if (!this.readonly) {\n                this.inputElement.removeAttribute('readonly');\n            }\n        }\n        else {\n            attributes(this.inputElement, { 'readonly': '' });\n        }\n        this.updateIconState();\n    };\n    DatePicker.prototype.updateIconState = function () {\n        if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n            if (this.inputElement.value === '') {\n                removeClass([this.inputWrapper.container], [NONEDIT]);\n            }\n            else {\n                addClass([this.inputWrapper.container], [NONEDIT]);\n            }\n        }\n        else if (this.inputWrapper) {\n            removeClass([this.inputWrapper.container], [NONEDIT]);\n        }\n    };\n    DatePicker.prototype.initialize = function () {\n        this.checkInvalidValue(this.value);\n        if (this.enableMask) {\n            this.notify('createMask', {\n                module: 'MaskedDateTime'\n            });\n        }\n        this.createInput();\n        this.updateHtmlAttributeToWrapper();\n        this.setAllowEdit();\n        if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n            this.updateInput(true);\n            this.updateInputValue(this.maskedDateValue);\n        }\n        else if (!this.enableMask) {\n            this.updateInput(true);\n        }\n        this.previousElementValue = this.inputElement.value;\n        this.previousDate = !isNullOrUndefined(this.value) ? new Date(+this.value) : null;\n        this.inputElement.setAttribute('value', this.inputElement.value);\n        this.inputValueCopy = this.value;\n    };\n    DatePicker.prototype.createInput = function () {\n        var ariaAttrs = {\n            'aria-atomic': 'true', 'aria-expanded': 'false',\n            'role': 'combobox', 'autocomplete': 'off', 'autocorrect': 'off',\n            'autocapitalize': 'off', 'spellcheck': 'false', 'aria-invalid': 'false', 'aria-label': this.getModuleName()\n        };\n        if (this.getModuleName() === 'datepicker') {\n            var l10nLocale = { placeholder: this.placeholder };\n            this.globalize = new Internationalization(this.locale);\n            this.l10n = new L10n('datepicker', l10nLocale, this.locale);\n            this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n        }\n        if (this.fullScreenMode && Browser.isDevice) {\n            this.cssClass += ' ' + \"e-popup-expand\";\n        }\n        var updatedCssClassValues = this.cssClass;\n        if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n            updatedCssClassValues = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n        }\n        var isBindClearAction = this.enableMask ? false : true;\n        this.inputWrapper = Input.createInput({\n            element: this.inputElement,\n            floatLabelType: this.floatLabelType,\n            bindClearAction: isBindClearAction,\n            properties: {\n                readonly: this.readonly,\n                placeholder: this.placeholder,\n                cssClass: updatedCssClassValues,\n                enabled: this.enabled,\n                enableRtl: this.enableRtl,\n                showClearButton: this.showClearButton\n            },\n            buttons: [INPUTWRAPPER + ' ' + DATEICON + ' ' + ICONS]\n        }, this.createElement);\n        this.setWidth(this.width);\n        if (this.inputElement.name !== '') {\n            this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute('name'));\n        }\n        else {\n            this.inputElement.setAttribute('name', '' + this.element.id);\n        }\n        attributes(this.inputElement, ariaAttrs);\n        if (!this.enabled) {\n            this.inputElement.setAttribute('aria-disabled', 'true');\n            this.inputElement.tabIndex = -1;\n        }\n        else {\n            this.inputElement.setAttribute('aria-disabled', 'false');\n            this.inputElement.setAttribute('tabindex', this.tabIndex);\n        }\n        Input.addAttributes({ 'aria-label': 'select', 'role': 'button' }, this.inputWrapper.buttons[0]);\n        addClass([this.inputWrapper.container], DATEWRAPPER);\n    };\n    DatePicker.prototype.updateInput = function (isDynamic, isBlur) {\n        if (isDynamic === void 0) { isDynamic = false; }\n        if (isBlur === void 0) { isBlur = false; }\n        var formatOptions;\n        if (this.value && !this.isCalendar()) {\n            this.disabledDates(isDynamic, isBlur);\n        }\n        if (isNaN(+new Date(this.checkValue(this.value)))) {\n            this.setProperties({ value: null }, true);\n        }\n        if (this.strictMode) {\n            //calls the Calendar processDate protected method to update the date value according to the strictMode true behaviour.\n            _super.prototype.validateDate.call(this);\n            this.minMaxUpdates();\n            _super.prototype.minMaxUpdate.call(this);\n        }\n        if (!isNullOrUndefined(this.value)) {\n            var dateValue = this.value;\n            var dateString = void 0;\n            var tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n            if (this.getModuleName() === 'datetimepicker') {\n                if (this.calendarMode === 'Gregorian') {\n                    dateString = this.globalize.formatDate(this.value, {\n                        format: tempFormat, type: 'dateTime', skeleton: 'yMd'\n                    });\n                }\n                else {\n                    dateString = this.globalize.formatDate(this.value, {\n                        format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n                    });\n                }\n            }\n            else {\n                if (this.calendarMode === 'Gregorian') {\n                    formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n                }\n                else {\n                    formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n                }\n                dateString = this.globalize.formatDate(this.value, formatOptions);\n            }\n            if ((+dateValue <= +this.max) && (+dateValue >= +this.min)) {\n                this.updateInputValue(dateString);\n            }\n            else {\n                var value = (+dateValue >= +this.max || !+this.value) || (!+this.value || +dateValue <= +this.min);\n                if (!this.strictMode && value) {\n                    this.updateInputValue(dateString);\n                }\n            }\n        }\n        if (isNullOrUndefined(this.value) && this.strictMode) {\n            if (!this.enableMask) {\n                this.updateInputValue('');\n            }\n            else {\n                this.updateInputValue(this.maskedDateValue);\n                this.notify('createMask', {\n                    module: 'MaskedDateTime'\n                });\n            }\n        }\n        if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n            this.updateInputValue(this.invalidValueString);\n        }\n        this.changedArgs = { value: this.value };\n        this.errorClass();\n        this.updateIconState();\n    };\n    DatePicker.prototype.minMaxUpdates = function () {\n        if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max && this.strictMode) {\n            this.setProperties({ value: this.min }, true);\n            this.changedArgs = { value: this.value };\n        }\n        else {\n            if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max && this.strictMode) {\n                this.setProperties({ value: this.max }, true);\n                this.changedArgs = { value: this.value };\n            }\n        }\n    };\n    DatePicker.prototype.checkStringValue = function (val) {\n        var returnDate = null;\n        var formatOptions = null;\n        var formatDateTime = null;\n        if (this.getModuleName() === 'datetimepicker') {\n            var culture = new Internationalization(this.locale);\n            if (this.calendarMode === 'Gregorian') {\n                formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n                formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n            }\n            else {\n                formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n                formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n            }\n        }\n        else {\n            if (this.calendarMode === 'Gregorian') {\n                formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n            }\n            else {\n                formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n            }\n        }\n        returnDate = this.checkDateValue(this.globalize.parseDate(val, formatOptions));\n        if (isNullOrUndefined(returnDate) && (this.getModuleName() === 'datetimepicker')) {\n            returnDate = this.checkDateValue(this.globalize.parseDate(val, formatDateTime));\n        }\n        return returnDate;\n    };\n    DatePicker.prototype.checkInvalidValue = function (value) {\n        if (!(value instanceof Date) && !isNullOrUndefined(value)) {\n            var valueDate = null;\n            var valueString = value;\n            if (typeof value === 'number') {\n                valueString = value.toString();\n            }\n            var formatOptions = null;\n            var formatDateTime = null;\n            if (this.getModuleName() === 'datetimepicker') {\n                var culture = new Internationalization(this.locale);\n                if (this.calendarMode === 'Gregorian') {\n                    formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd' };\n                    formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime' };\n                }\n                else {\n                    formatOptions = { format: this.dateTimeFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n                    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n                    formatDateTime = { format: culture.getDatePattern({ skeleton: 'yMd' }), type: 'dateTime', calendar: 'islamic' };\n                }\n            }\n            else {\n                if (this.calendarMode === 'Gregorian') {\n                    formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n                }\n                else {\n                    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n                    formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n                }\n            }\n            var invalid = false;\n            if (typeof valueString !== 'string') {\n                valueString = null;\n                invalid = true;\n            }\n            else {\n                if (typeof valueString === 'string') {\n                    valueString = valueString.trim();\n                }\n                valueDate = this.checkStringValue(valueString);\n                if (!valueDate) {\n                    var extISOString = null;\n                    var basicISOString = null;\n                    // eslint-disable-next-line\n                    extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n                    // eslint-disable-next-line\n                    basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n                    if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n                        || (/^[a-zA-Z0-9- ]*$/).test(valueString) || isNaN(+new Date(this.checkValue(valueString)))) {\n                        invalid = true;\n                    }\n                    else {\n                        valueDate = new Date(valueString);\n                    }\n                }\n            }\n            if (invalid) {\n                if (!this.strictMode) {\n                    this.invalidValueString = valueString;\n                }\n                this.setProperties({ value: null }, true);\n            }\n            else {\n                this.setProperties({ value: valueDate }, true);\n            }\n        }\n    };\n    DatePicker.prototype.bindInputEvent = function () {\n        if (!isNullOrUndefined(this.formatString) || this.enableMask) {\n            if (this.enableMask || this.formatString.indexOf('y') === -1) {\n                EventHandler.add(this.inputElement, 'input', this.inputHandler, this);\n            }\n            else {\n                EventHandler.remove(this.inputElement, 'input', this.inputHandler);\n            }\n        }\n    };\n    DatePicker.prototype.bindEvents = function () {\n        EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateIconHandler, this);\n        EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n        EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n        EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n        EventHandler.add(this.inputElement, 'keyup', this.keyupHandler, this);\n        if (this.enableMask) {\n            EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n        }\n        this.bindInputEvent();\n        // To prevent the twice triggering.\n        EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n        if (this.showClearButton && this.inputWrapper.clearButton) {\n            EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n        }\n        if (this.formElement) {\n            EventHandler.add(this.formElement, 'reset', this.resetFormHandler, this);\n        }\n        this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n        this.keyboardModules = new KeyboardEvents(this.inputElement, {\n            eventName: 'keydown',\n            keyAction: this.inputKeyActionHandle.bind(this),\n            keyConfigs: this.defaultKeyConfigs\n        });\n    };\n    DatePicker.prototype.keydownHandler = function (e) {\n        switch (e.code) {\n            case 'ArrowLeft':\n            case 'ArrowRight':\n            case 'ArrowUp':\n            case 'ArrowDown':\n            case 'Home':\n            case 'End':\n            case 'Delete':\n                if (this.enableMask && !this.popupObj && !this.readonly) {\n                    if (e.code !== 'Delete') {\n                        e.preventDefault();\n                    }\n                    this.notify('keyDownHandler', {\n                        module: 'MaskedDateTime',\n                        e: e\n                    });\n                }\n                break;\n            default:\n                break;\n        }\n    };\n    DatePicker.prototype.unBindEvents = function () {\n        if (!isNullOrUndefined(this.inputWrapper)) {\n            EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dateIconHandler);\n        }\n        EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n        EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n        EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n        EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n        EventHandler.remove(this.inputElement, 'keyup', this.keyupHandler);\n        if (this.enableMask) {\n            EventHandler.remove(this.inputElement, 'keydown', this.keydownHandler);\n        }\n        if (this.showClearButton && this.inputWrapper.clearButton) {\n            EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler);\n        }\n        if (this.formElement) {\n            EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n        }\n    };\n    DatePicker.prototype.resetFormHandler = function () {\n        if (!this.enabled) {\n            return;\n        }\n        if (!this.inputElement.disabled) {\n            var value = this.inputElement.getAttribute('value');\n            if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n                value = '';\n                this.inputValueCopy = null;\n                this.inputElement.setAttribute('value', '');\n            }\n            this.setProperties({ value: this.inputValueCopy }, true);\n            this.restoreValue();\n            if (this.inputElement) {\n                this.updateInputValue(value);\n                this.errorClass();\n            }\n        }\n    };\n    DatePicker.prototype.restoreValue = function () {\n        this.currentDate = this.value ? this.value : new Date();\n        this.previousDate = this.value;\n        this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n            this.globalize.formatDate(this.inputValueCopy, {\n                format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n            });\n    };\n    DatePicker.prototype.inputChangeHandler = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        e.stopPropagation();\n    };\n    DatePicker.prototype.bindClearEvent = function () {\n        if (this.showClearButton && this.inputWrapper.clearButton) {\n            EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n        }\n    };\n    DatePicker.prototype.resetHandler = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        e.preventDefault();\n        this.clear(e);\n    };\n    DatePicker.prototype.mouseUpHandler = function (e) {\n        if (this.enableMask) {\n            e.preventDefault();\n            this.notify('setMaskSelection', {\n                module: 'MaskedDateTime'\n            });\n        }\n    };\n    DatePicker.prototype.clear = function (event) {\n        this.setProperties({ value: null }, true);\n        if (!this.enableMask) {\n            this.updateInputValue('');\n        }\n        var clearedArgs = {\n            event: event\n        };\n        this.trigger('cleared', clearedArgs);\n        this.invalidValueString = '';\n        this.updateInput();\n        this.popupUpdate();\n        this.changeEvent(event);\n        if (this.enableMask) {\n            this.notify('clearHandler', {\n                module: 'MaskedDateTime'\n            });\n        }\n        if (closest(this.element, 'form')) {\n            var element = this.element;\n            var keyupEvent = document.createEvent('KeyboardEvent');\n            keyupEvent.initEvent('keyup', false, true);\n            element.dispatchEvent(keyupEvent);\n        }\n    };\n    DatePicker.prototype.preventEventBubbling = function (e) {\n        e.preventDefault();\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this.interopAdaptor.invokeMethodAsync('OnDateIconClick');\n    };\n    DatePicker.prototype.updateInputValue = function (value) {\n        Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n    };\n    DatePicker.prototype.dateIconHandler = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        this.isIconClicked = true;\n        if (Browser.isDevice) {\n            this.inputElement.setAttribute('readonly', '');\n            this.inputElement.blur();\n        }\n        e.preventDefault();\n        if (!this.readonly) {\n            if (this.isCalendar()) {\n                this.hide(e);\n            }\n            else {\n                this.isDateIconClicked = true;\n                this.show(null, e);\n                if (this.getModuleName() === 'datetimepicker') {\n                    this.inputElement.focus();\n                }\n                this.inputElement.focus();\n                addClass([this.inputWrapper.container], [INPUTFOCUS]);\n                addClass(this.inputWrapper.buttons, ACTIVE);\n            }\n        }\n        this.isIconClicked = false;\n    };\n    DatePicker.prototype.updateHtmlAttributeToWrapper = function () {\n        if (!isNullOrUndefined(this.htmlAttributes)) {\n            for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n                var key = _a[_i];\n                if (!isNullOrUndefined(this.htmlAttributes[\"\" + key])) {\n                    if (containerAttr.indexOf(key) > -1) {\n                        if (key === 'class') {\n                            var updatedClassValues = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n                            if (updatedClassValues !== '') {\n                                addClass([this.inputWrapper.container], updatedClassValues.split(' '));\n                            }\n                        }\n                        else if (key === 'style') {\n                            var setStyle = this.inputWrapper.container.getAttribute(key);\n                            if (!isNullOrUndefined(setStyle)) {\n                                if (setStyle.charAt(setStyle.length - 1) === ';') {\n                                    setStyle = setStyle + this.htmlAttributes[\"\" + key];\n                                }\n                                else {\n                                    setStyle = setStyle + ';' + this.htmlAttributes[\"\" + key];\n                                }\n                            }\n                            else {\n                                setStyle = this.htmlAttributes[\"\" + key];\n                            }\n                            this.inputWrapper.container.setAttribute(key, setStyle);\n                        }\n                        else {\n                            this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                        }\n                    }\n                }\n            }\n        }\n    };\n    DatePicker.prototype.updateHtmlAttributeToElement = function () {\n        if (!isNullOrUndefined(this.htmlAttributes)) {\n            for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n                var key = _a[_i];\n                if (containerAttr.indexOf(key) < 0) {\n                    this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                }\n            }\n        }\n    };\n    DatePicker.prototype.updateCssClass = function (newCssClass, oldCssClass) {\n        if (!isNullOrUndefined(oldCssClass)) {\n            oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n        }\n        if (!isNullOrUndefined(newCssClass)) {\n            newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n        }\n        Input.setCssClass(newCssClass, [this.inputWrapper.container], oldCssClass);\n        if (this.popupWrapper) {\n            Input.setCssClass(newCssClass, [this.popupWrapper], oldCssClass);\n        }\n    };\n    DatePicker.prototype.calendarKeyActionHandle = function (e) {\n        switch (e.action) {\n            case 'escape':\n                if (this.isCalendar()) {\n                    this.hide(e);\n                }\n                else {\n                    this.inputWrapper.container.children[this.index].blur();\n                }\n                break;\n            case 'enter':\n                if (!this.isCalendar()) {\n                    this.show(null, e);\n                }\n                else {\n                    if (+this.value !== +this.currentDate && !this.isCalendar()) {\n                        this.inputWrapper.container.children[this.index].focus();\n                    }\n                }\n                if (this.getModuleName() === 'datetimepicker') {\n                    this.inputElement.focus();\n                }\n                break;\n        }\n    };\n    DatePicker.prototype.inputFocusHandler = function () {\n        this.isFocused = true;\n        if (!this.enabled) {\n            return;\n        }\n        if (this.enableMask && !this.inputElement.value && this.placeholder) {\n            if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n                this.updateInputValue(this.maskedDateValue);\n                this.inputElement.selectionStart = 0;\n                this.inputElement.selectionEnd = this.inputElement.value.length;\n            }\n        }\n        var focusArguments = {\n            model: this\n        };\n        this.isDateIconClicked = false;\n        this.trigger('focus', focusArguments);\n        this.updateIconState();\n        if (this.openOnFocus && !this.isIconClicked) {\n            this.show();\n        }\n    };\n    DatePicker.prototype.inputHandler = function () {\n        this.isPopupClicked = false;\n        if (this.enableMask) {\n            this.notify('inputHandler', {\n                module: 'MaskedDateTime'\n            });\n        }\n    };\n    DatePicker.prototype.inputBlurHandler = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        this.strictModeUpdate();\n        if (this.inputElement.value === '' && isNullOrUndefined(this.value)) {\n            this.invalidValueString = null;\n            this.updateInputValue('');\n        }\n        this.isBlur = true;\n        this.updateInput(false, true);\n        this.isBlur = false;\n        this.popupUpdate();\n        this.changeTrigger(e);\n        if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n            if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n                this.updateInputValue('');\n            }\n        }\n        this.errorClass();\n        if (this.isCalendar() && document.activeElement === this.inputElement) {\n            this.hide(e);\n        }\n        if (this.getModuleName() === 'datepicker') {\n            var blurArguments = {\n                model: this\n            };\n            this.trigger('blur', blurArguments);\n        }\n        if (this.isCalendar()) {\n            this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n            this.calendarKeyboardModules = new KeyboardEvents(this.calendarElement.children[1].firstElementChild, {\n                eventName: 'keydown',\n                keyAction: this.calendarKeyActionHandle.bind(this),\n                keyConfigs: this.defaultKeyConfigs\n            });\n        }\n        this.isPopupClicked = false;\n    };\n    DatePicker.prototype.documentHandler = function (e) {\n        if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(e.target) && e.type !== 'mousedown' ||\n            (this.popupObj.element && this.popupObj.element.contains(e.target)))) && e.type !== 'touchstart') {\n            e.preventDefault();\n        }\n        var target = e.target;\n        if (!(closest(target, '.e-datepicker.e-popup-wrapper')) && !isNullOrUndefined(this.inputWrapper)\n            && !(closest(target, '.' + INPUTCONTAINER) === this.inputWrapper.container)\n            && (!target.classList.contains('e-day'))\n            && (!target.classList.contains('e-dlg-overlay'))) {\n            this.hide(e);\n            this.focusOut();\n        }\n        else if (closest(target, '.e-datepicker.e-popup-wrapper')) {\n            // Fix for close the popup when select the previously selected value.\n            if (target.classList.contains('e-day')\n                && !isNullOrUndefined(e.target.parentElement)\n                && e.target.parentElement.classList.contains('e-selected')\n                && closest(target, '.e-content')\n                && closest(target, '.e-content').classList.contains('e-' + this.depth.toLowerCase())) {\n                this.hide(e);\n            }\n            else if (closest(target, '.e-footer-container')\n                && target.classList.contains('e-today')\n                && target.classList.contains('e-btn')\n                && (+new Date(+this.value) === +_super.prototype.generateTodayVal.call(this, this.value))) {\n                this.hide(e);\n            }\n        }\n    };\n    DatePicker.prototype.inputKeyActionHandle = function (e) {\n        var clickedView = this.currentView();\n        switch (e.action) {\n            case 'altUpArrow':\n                this.isAltKeyPressed = false;\n                this.hide(e);\n                this.inputElement.focus();\n                break;\n            case 'altDownArrow':\n                this.isAltKeyPressed = true;\n                this.strictModeUpdate();\n                this.updateInput();\n                this.changeTrigger(e);\n                if (this.getModuleName() === 'datepicker') {\n                    this.show(null, e);\n                }\n                break;\n            case 'escape':\n                this.hide(e);\n                break;\n            case 'enter':\n                this.strictModeUpdate();\n                this.updateInput();\n                this.popupUpdate();\n                this.changeTrigger(e);\n                this.errorClass();\n                if (!this.isCalendar() && document.activeElement === this.inputElement) {\n                    this.hide(e);\n                }\n                if (this.isCalendar()) {\n                    e.preventDefault();\n                    e.stopPropagation();\n                }\n                break;\n            case 'tab':\n            case 'shiftTab':\n                {\n                    var start = this.inputElement.selectionStart;\n                    var end = this.inputElement.selectionEnd;\n                    if (this.enableMask && !this.popupObj && !this.readonly) {\n                        var length_1 = this.inputElement.value.length;\n                        if ((start === 0 && end === length_1) || (end !== length_1 && e.action === 'tab') || (start !== 0 && e.action === 'shiftTab')) {\n                            e.preventDefault();\n                        }\n                        this.notify('keyDownHandler', {\n                            module: 'MaskedDateTime',\n                            e: e\n                        });\n                        start = this.inputElement.selectionStart;\n                        end = this.inputElement.selectionEnd;\n                    }\n                    this.strictModeUpdate();\n                    this.updateInput();\n                    this.popupUpdate();\n                    this.changeTrigger(e);\n                    this.errorClass();\n                    if (this.enableMask) {\n                        this.inputElement.selectionStart = start;\n                        this.inputElement.selectionEnd = end;\n                    }\n                    if (e.action === 'tab' && e.target === this.inputElement && this.isCalendar() && document.activeElement === this.inputElement) {\n                        e.preventDefault();\n                        this.headerTitleElement.focus();\n                    }\n                    if (e.action === 'shiftTab' && e.target === this.inputElement && this.isCalendar() && document.activeElement === this.inputElement) {\n                        this.hide(e);\n                    }\n                    break;\n                }\n            default:\n                this.defaultAction(e);\n                // Fix for close the popup when select the previously selected value.\n                if (e.action === 'select' && clickedView === this.depth) {\n                    this.hide(e);\n                }\n        }\n    };\n    DatePicker.prototype.defaultAction = function (e) {\n        this.previousDate = ((!isNullOrUndefined(this.value) && new Date(+this.value)) || null);\n        if (this.isCalendar()) {\n            _super.prototype.keyActionHandle.call(this, e);\n            if (this.isCalendar()) {\n                attributes(this.inputElement, {\n                    'aria-activedescendant': '' + this.setActiveDescendant()\n                });\n            }\n        }\n    };\n    DatePicker.prototype.popupUpdate = function () {\n        if ((isNullOrUndefined(this.value)) && (!isNullOrUndefined(this.previousDate)) ||\n            (((this.getModuleName() !== 'datetimepicker') && (+this.value !== +this.previousDate)) || ((this.getModuleName() === 'datetimepicker') && (+this.value !== +this.previousDateTime)))) {\n            if (this.popupObj) {\n                if (this.popupObj.element.querySelectorAll('.' + SELECTED).length > 0) {\n                    removeClass(this.popupObj.element.querySelectorAll('.' + SELECTED), [SELECTED]);\n                }\n            }\n            if (!isNullOrUndefined(this.value)) {\n                if ((+this.value >= +this.min) && (+this.value <= +this.max)) {\n                    var targetdate = new Date(this.checkValue(this.value));\n                    _super.prototype.navigateTo.call(this, 'Month', targetdate);\n                }\n            }\n        }\n    };\n    DatePicker.prototype.strictModeUpdate = function () {\n        var format;\n        var pattern = /^y/;\n        var charPattern = /[^a-zA-Z]/;\n        var formatOptions;\n        if (this.getModuleName() === 'datetimepicker') {\n            format = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n        }\n        else if (!pattern.test(this.formatString) || charPattern.test(this.formatString)) {\n            format = isNullOrUndefined(this.formatString) ? this.formatString : this.formatString.replace('dd', 'd');\n        }\n        if (!isNullOrUndefined(format)) {\n            var len = format.split('M').length - 1;\n            if (len < 3) {\n                format = format.replace('MM', 'M');\n            }\n        }\n        else {\n            format = this.formatString;\n        }\n        var dateOptions;\n        if (this.getModuleName() === 'datetimepicker') {\n            if (this.calendarMode === 'Gregorian') {\n                dateOptions = {\n                    format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n                    type: 'dateTime', skeleton: 'yMd'\n                };\n            }\n            else {\n                dateOptions = {\n                    format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n                    type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n                };\n            }\n        }\n        else {\n            if (this.calendarMode === 'Gregorian') {\n                formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n            }\n            else {\n                formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n            }\n            dateOptions = formatOptions;\n        }\n        var date;\n        if (typeof this.inputElement.value === 'string') {\n            this.inputElement.value = this.inputElement.value.trim();\n        }\n        if ((this.getModuleName() === 'datetimepicker')) {\n            if (this.checkDateValue(this.globalize.parseDate(this.inputElement.value, dateOptions))) {\n                var modifiedValue = this.inputElement.value.replace(/(am|pm|Am|aM|pM|Pm)/g, function (match) { return match.toLocaleUpperCase(); });\n                date = this.globalize.parseDate(modifiedValue, dateOptions);\n            }\n            else {\n                if (this.calendarMode === 'Gregorian') {\n                    formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd' };\n                }\n                else {\n                    formatOptions = { format: format, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n                }\n                date = this.globalize.parseDate(this.inputElement.value, formatOptions);\n            }\n        }\n        else {\n            date = this.globalize.parseDate(this.inputElement.value, dateOptions);\n            date = (!isNullOrUndefined(date) && isNaN(+date)) ? null : date;\n            if (!isNullOrUndefined(this.formatString) && this.inputElement.value !== '' && this.strictMode) {\n                if ((this.isPopupClicked || (!this.isPopupClicked && this.inputElement.value === this.previousElementValue))\n                    && this.formatString.indexOf('y') === -1) {\n                    date.setFullYear(this.value.getFullYear());\n                }\n            }\n        }\n        // EJ2-35061 - To prevent change event from triggering twice when using strictmode and format property\n        if ((this.getModuleName() === 'datepicker') && (this.value && !isNaN(+this.value)) && date) {\n            date.setHours(this.value.getHours(), this.value.getMinutes(), this.value.getSeconds(), this.value.getMilliseconds());\n        }\n        if (this.strictMode && date) {\n            this.updateInputValue(this.globalize.formatDate(date, dateOptions));\n            if (this.inputElement.value !== this.previousElementValue) {\n                this.setProperties({ value: date }, true);\n            }\n        }\n        else if (!this.strictMode) {\n            if (this.inputElement.value !== this.previousElementValue) {\n                this.setProperties({ value: date }, true);\n            }\n        }\n        if (this.strictMode && !date && this.inputElement.value === (this.enableMask ? this.maskedDateValue : '')) {\n            this.setProperties({ value: null }, true);\n        }\n        if (isNaN(+this.value)) {\n            this.setProperties({ value: null }, true);\n        }\n        if (isNullOrUndefined(this.value)) {\n            this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n        }\n    };\n    DatePicker.prototype.createCalendar = function () {\n        var _this = this;\n        this.popupWrapper = this.createElement('div', { className: '' + ROOT + ' ' + POPUPWRAPPER, id: this.inputElement.id + '_options' });\n        this.popupWrapper.setAttribute('aria-label', this.element.id);\n        this.popupWrapper.setAttribute('role', 'dialog');\n        if (!isNullOrUndefined(this.cssClass)) {\n            this.popupWrapper.className += ' ' + this.cssClass;\n        }\n        if (Browser.isDevice) {\n            this.modelHeader();\n            this.modal = this.createElement('div');\n            this.modal.className = '' + ROOT + ' e-date-modal';\n            document.body.className += ' ' + OVERFLOW;\n            this.modal.style.display = 'block';\n            document.body.appendChild(this.modal);\n        }\n        //this.calendarElement represent the Calendar object from the Calendar class.\n        this.calendarElement.querySelector('table tbody').className = '';\n        this.popupObj = new Popup(this.popupWrapper, {\n            content: this.calendarElement,\n            relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n            position: Browser.isDevice ? { X: 'center', Y: 'center' } : (this.enableRtl ? { X: 'right', Y: 'bottom' } : { X: 'left', Y: 'bottom' }),\n            offsetY: OFFSETVALUE,\n            targetType: 'container',\n            enableRtl: this.enableRtl,\n            zIndex: this.zIndex,\n            collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : (this.enableRtl ? { X: 'fit', Y: 'flip' } : { X: 'flip', Y: 'flip' }),\n            open: function () {\n                if (Browser.isDevice && _this.fullScreenMode) {\n                    _this.iconRight = parseInt(window.getComputedStyle(_this.calendarElement.querySelector('.e-header.e-month .e-prev')).marginRight, 10) > 16 ? true : false;\n                    _this.touchModule = new Touch(_this.calendarElement.querySelector(\".e-content.e-month\"), {\n                        swipe: _this.CalendarSwipeHandler.bind(_this)\n                    });\n                    EventHandler.add(_this.calendarElement.querySelector(\".e-content.e-month\"), \"touchstart\", _this.TouchStartHandler, _this);\n                }\n                if (_this.getModuleName() !== 'datetimepicker') {\n                    if (document.activeElement !== _this.inputElement) {\n                        _this.defaultKeyConfigs = extend(_this.defaultKeyConfigs, _this.keyConfigs);\n                        _this.calendarElement.children[1].firstElementChild.focus();\n                        _this.calendarKeyboardModules = new KeyboardEvents(_this.calendarElement.children[1].firstElementChild, {\n                            eventName: 'keydown',\n                            keyAction: _this.calendarKeyActionHandle.bind(_this),\n                            keyConfigs: _this.defaultKeyConfigs\n                        });\n                        _this.calendarKeyboardModules = new KeyboardEvents(_this.inputWrapper.container.children[_this.index], {\n                            eventName: 'keydown',\n                            keyAction: _this.calendarKeyActionHandle.bind(_this),\n                            keyConfigs: _this.defaultKeyConfigs\n                        });\n                    }\n                }\n            }, close: function () {\n                if (_this.isDateIconClicked) {\n                    _this.inputWrapper.container.children[_this.index].focus();\n                }\n                if (_this.value) {\n                    _this.disabledDates();\n                }\n                if (_this.popupObj) {\n                    _this.popupObj.destroy();\n                }\n                _this.resetCalendar();\n                detach(_this.popupWrapper);\n                _this.popupObj = _this.popupWrapper = null;\n                _this.preventArgs = null;\n                _this.calendarKeyboardModules = null;\n                _this.setAriaAttributes();\n            }, targetExitViewport: function () {\n                if (!Browser.isDevice) {\n                    _this.hide();\n                }\n            }\n        });\n        this.popupObj.element.className += ' ' + this.cssClass;\n        this.setAriaAttributes();\n    };\n    DatePicker.prototype.CalendarSwipeHandler = function (e) {\n        var direction = 0;\n        if (this.iconRight) {\n            switch (e.swipeDirection) {\n                case \"Left\":\n                    direction = 1;\n                    break;\n                case \"Right\":\n                    direction = -1;\n                    break;\n                default:\n                    break;\n            }\n        }\n        else {\n            switch (e.swipeDirection) {\n                case \"Up\":\n                    direction = 1;\n                    break;\n                case \"Down\":\n                    direction = -1;\n                    break;\n                default:\n                    break;\n            }\n        }\n        if (this.touchStart) {\n            if (direction === 1) {\n                this.navigateNext(e);\n            }\n            else if (direction === -1) {\n                this.navigatePrevious(e);\n            }\n            this.touchStart = false;\n        }\n    };\n    DatePicker.prototype.TouchStartHandler = function (e) {\n        this.touchStart = true;\n    };\n    DatePicker.prototype.setAriaDisabled = function () {\n        if (!this.enabled) {\n            this.inputElement.setAttribute('aria-disabled', 'true');\n            this.inputElement.tabIndex = -1;\n        }\n        else {\n            this.inputElement.setAttribute('aria-disabled', 'false');\n            this.inputElement.setAttribute('tabindex', this.tabIndex);\n        }\n    };\n    DatePicker.prototype.modelHeader = function () {\n        var dateOptions;\n        var modelHeader = this.createElement('div', { className: 'e-model-header' });\n        var yearHeading = this.createElement('h1', { className: 'e-model-year' });\n        var h2 = this.createElement('div');\n        var daySpan = this.createElement('span', { className: 'e-model-day' });\n        var monthSpan = this.createElement('span', { className: 'e-model-month' });\n        if (this.calendarMode === 'Gregorian') {\n            dateOptions = { format: 'y', skeleton: 'dateTime' };\n        }\n        else {\n            dateOptions = { format: 'y', skeleton: 'dateTime', calendar: 'islamic' };\n        }\n        yearHeading.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n        if (this.calendarMode === 'Gregorian') {\n            dateOptions = { format: 'E', skeleton: 'dateTime' };\n        }\n        else {\n            dateOptions = { format: 'E', skeleton: 'dateTime', calendar: 'islamic' };\n        }\n        daySpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions) + ', ';\n        if (this.calendarMode === 'Gregorian') {\n            dateOptions = { format: 'MMM d', skeleton: 'dateTime' };\n        }\n        else {\n            dateOptions = { format: 'MMM d', skeleton: 'dateTime', calendar: 'islamic' };\n        }\n        monthSpan.textContent = '' + this.globalize.formatDate(this.value || new Date(), dateOptions);\n        if (this.fullScreenMode) {\n            var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n            EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.modelCloseHandler, this);\n            var modelTodayButton = this.calendarElement.querySelector(\"button.e-today\");\n            h2.classList.add(\"e-day-wrapper\");\n            modelTodayButton.classList.add(\"e-outline\");\n            modelHeader.appendChild(modelCloseIcon);\n            modelHeader.appendChild(modelTodayButton);\n        }\n        if (!this.fullScreenMode)\n            modelHeader.appendChild(yearHeading);\n        h2.appendChild(daySpan);\n        h2.appendChild(monthSpan);\n        modelHeader.appendChild(h2);\n        this.calendarElement.insertBefore(modelHeader, this.calendarElement.firstElementChild);\n    };\n    DatePicker.prototype.modelCloseHandler = function (e) {\n        this.hide();\n    };\n    DatePicker.prototype.changeTrigger = function (event) {\n        if (this.inputElement.value !== this.previousElementValue) {\n            if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n                if (this.isDynamicValueChanged && this.isCalendar()) {\n                    this.popupUpdate();\n                }\n                this.changedArgs.value = this.value;\n                this.changedArgs.event = event || null;\n                this.changedArgs.element = this.element;\n                this.changedArgs.isInteracted = !isNullOrUndefined(event);\n                if (this.isAngular && this.preventChange) {\n                    this.preventChange = false;\n                }\n                else {\n                    this.trigger('change', this.changedArgs);\n                }\n                this.previousElementValue = this.inputElement.value;\n                this.previousDate = !isNaN(+new Date(this.checkValue(this.value))) ? new Date(this.checkValue(this.value)) : null;\n                this.isInteracted = true;\n            }\n        }\n        this.isKeyAction = false;\n    };\n    DatePicker.prototype.navigatedEvent = function () {\n        this.trigger('navigated', this.navigatedArgs);\n    };\n    DatePicker.prototype.keyupHandler = function (e) {\n        this.isKeyAction = (this.inputElement.value !== this.previousElementValue) ? true : false;\n    };\n    DatePicker.prototype.changeEvent = function (event) {\n        if (!this.isIconClicked && !(this.isBlur || this.isKeyAction)) {\n            this.selectCalendar(event);\n        }\n        if (((this.previousDate && this.previousDate.valueOf()) !== (this.value && this.value.valueOf()))) {\n            this.changedArgs.event = event ? event : null;\n            this.changedArgs.element = this.element;\n            this.changedArgs.isInteracted = this.isInteracted;\n            if (!this.isDynamicValueChanged) {\n                this.trigger('change', this.changedArgs);\n            }\n            this.previousDate = this.value && new Date(+this.value);\n            if (!this.isDynamicValueChanged) {\n                this.hide(event);\n            }\n            this.previousElementValue = this.inputElement.value;\n            this.errorClass();\n        }\n        else if (event) {\n            this.hide(event);\n        }\n        this.isKeyAction = false;\n    };\n    DatePicker.prototype.requiredModules = function () {\n        var modules = [];\n        if (this) {\n            modules.push({ args: [this], member: 'islamic' });\n        }\n        if (this.enableMask) {\n            modules.push({ args: [this], member: 'MaskedDateTime' });\n        }\n        return modules;\n    };\n    DatePicker.prototype.selectCalendar = function (e) {\n        var date;\n        var tempFormat;\n        var formatOptions;\n        if (this.getModuleName() === 'datetimepicker') {\n            tempFormat = !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat;\n        }\n        else {\n            tempFormat = this.formatString;\n        }\n        if (this.value) {\n            if (this.getModuleName() === 'datetimepicker') {\n                if (this.calendarMode === 'Gregorian') {\n                    formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd' };\n                }\n                else {\n                    formatOptions = { format: tempFormat, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n                }\n                date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n            }\n            else {\n                if (this.calendarMode === 'Gregorian') {\n                    formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n                }\n                else {\n                    formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n                }\n                date = this.globalize.formatDate(this.changedArgs.value, formatOptions);\n            }\n            if (this.enableMask) {\n                this.notify('createMask', {\n                    module: 'MaskedDateTime'\n                });\n            }\n        }\n        if (!isNullOrUndefined(date)) {\n            this.updateInputValue(date);\n            if (this.enableMask) {\n                this.notify('setMaskSelection', {\n                    module: 'MaskedDateTime'\n                });\n            }\n        }\n    };\n    DatePicker.prototype.isCalendar = function () {\n        if (this.popupWrapper && this.popupWrapper.classList.contains('' + POPUPWRAPPER)) {\n            return true;\n        }\n        return false;\n    };\n    DatePicker.prototype.setWidth = function (width) {\n        if (typeof width === 'number') {\n            this.inputWrapper.container.style.width = formatUnit(this.width);\n        }\n        else if (typeof width === 'string') {\n            this.inputWrapper.container.style.width = (width.match(/px|%|em/)) ? (this.width) : (formatUnit(this.width));\n        }\n        else {\n            this.inputWrapper.container.style.width = '100%';\n        }\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-param */\n    /**\n     * Shows the Calendar.\n     *\n     * @returns {void}\n\n     */\n    DatePicker.prototype.show = function (type, e) {\n        var _this = this;\n        if ((this.enabled && this.readonly) || !this.enabled || this.popupObj) {\n            return;\n        }\n        else {\n            var prevent_1 = true;\n            var outOfRange = void 0;\n            if (!isNullOrUndefined(this.value) && !(+this.value >= +new Date(this.checkValue(this.min))\n                && +this.value <= +new Date(this.checkValue(this.max)))) {\n                outOfRange = new Date(this.checkValue(this.value));\n                this.setProperties({ 'value': null }, true);\n            }\n            else {\n                outOfRange = this.value || null;\n            }\n            if (!this.isCalendar()) {\n                _super.prototype.render.call(this);\n                this.setProperties({ 'value': outOfRange || null }, true);\n                this.previousDate = outOfRange;\n                this.createCalendar();\n            }\n            if (Browser.isDevice) {\n                this.mobilePopupWrapper = this.createElement('div', { className: 'e-datepick-mob-popup-wrap' });\n                document.body.appendChild(this.mobilePopupWrapper);\n            }\n            this.preventArgs = {\n                preventDefault: function () {\n                    prevent_1 = false;\n                },\n                popup: this.popupObj,\n                event: e || null,\n                cancel: false,\n                appendTo: Browser.isDevice ? this.mobilePopupWrapper : document.body\n            };\n            var eventArgs = this.preventArgs;\n            this.trigger('open', eventArgs, function (eventArgs) {\n                _this.preventArgs = eventArgs;\n                if (prevent_1 && !_this.preventArgs.cancel) {\n                    addClass(_this.inputWrapper.buttons, ACTIVE);\n                    _this.preventArgs.appendTo.appendChild(_this.popupWrapper);\n                    _this.popupObj.refreshPosition(_this.inputElement);\n                    var openAnimation = {\n                        name: 'FadeIn',\n                        duration: Browser.isDevice ? 0 : OPENDURATION\n                    };\n                    if (_this.zIndex === 1000) {\n                        _this.popupObj.show(new Animation(openAnimation), _this.element);\n                    }\n                    else {\n                        _this.popupObj.show(new Animation(openAnimation), null);\n                    }\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    _super.prototype.setOverlayIndex.call(_this, _this.mobilePopupWrapper, _this.popupObj.element, _this.modal, Browser.isDevice);\n                    _this.setAriaAttributes();\n                }\n                else {\n                    _this.popupObj.destroy();\n                    _this.popupWrapper = _this.popupObj = null;\n                }\n                if (!isNullOrUndefined(_this.inputElement) && _this.inputElement.value === '') {\n                    if (!isNullOrUndefined(_this.tableBodyElement) && _this.tableBodyElement.querySelectorAll('td.e-selected').length > 0) {\n                        addClass([_this.tableBodyElement.querySelector('td.e-selected')], FOCUSEDDATE);\n                        removeClass(_this.tableBodyElement.querySelectorAll('td.e-selected'), SELECTED);\n                    }\n                }\n                EventHandler.add(document, 'mousedown touchstart', _this.documentHandler, _this);\n            });\n            if (Browser.isDevice) {\n                var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n                dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n                this.mobilePopupWrapper.appendChild(dlgOverlay);\n            }\n        }\n    };\n    /**\n     * Hide the Calendar.\n     *\n     * @returns {void}\n\n     */\n    DatePicker.prototype.hide = function (event) {\n        var _this = this;\n        if (!isNullOrUndefined(this.popupWrapper)) {\n            var prevent_2 = true;\n            this.preventArgs = {\n                preventDefault: function () {\n                    prevent_2 = false;\n                },\n                popup: this.popupObj,\n                event: event || null,\n                cancel: false\n            };\n            removeClass(this.inputWrapper.buttons, ACTIVE);\n            removeClass([document.body], OVERFLOW);\n            var eventArgs = this.preventArgs;\n            if (this.isCalendar()) {\n                this.trigger('close', eventArgs, function (eventArgs) {\n                    _this.closeEventCallback(prevent_2, eventArgs);\n                });\n            }\n            else {\n                this.closeEventCallback(prevent_2, eventArgs);\n            }\n        }\n        else {\n            if (Browser.isDevice && this.allowEdit && !this.readonly) {\n                this.inputElement.removeAttribute('readonly');\n            }\n            this.setAllowEdit();\n        }\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-param */\n    DatePicker.prototype.closeEventCallback = function (prevent, eventArgs) {\n        this.preventArgs = eventArgs;\n        if (this.isCalendar() && (prevent && !this.preventArgs.cancel)) {\n            this.popupObj.hide();\n            this.isAltKeyPressed = false;\n            this.keyboardModule.destroy();\n            removeClass(this.inputWrapper.buttons, ACTIVE);\n        }\n        this.setAriaAttributes();\n        if (Browser.isDevice && this.modal) {\n            this.modal.style.display = 'none';\n            this.modal.outerHTML = '';\n            this.modal = null;\n        }\n        if (Browser.isDevice) {\n            if (!isNullOrUndefined(this.mobilePopupWrapper) && (prevent && (isNullOrUndefined(this.preventArgs) || !this.preventArgs.cancel))) {\n                this.mobilePopupWrapper.remove();\n                this.mobilePopupWrapper = null;\n            }\n        }\n        EventHandler.remove(document, 'mousedown touchstart', this.documentHandler);\n        if (Browser.isDevice && this.allowEdit && !this.readonly) {\n            this.inputElement.removeAttribute('readonly');\n        }\n        this.setAllowEdit();\n    };\n    /* eslint-disable jsdoc/require-param */\n    /**\n     * Sets the focus to widget for interaction.\n     *\n     * @returns {void}\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    DatePicker.prototype.focusIn = function (triggerEvent) {\n        if (document.activeElement !== this.inputElement && this.enabled) {\n            this.inputElement.focus();\n            addClass([this.inputWrapper.container], [INPUTFOCUS]);\n        }\n    };\n    /* eslint-enable jsdoc/require-param */\n    /**\n     * Remove the focus from widget, if the widget is in focus state.\n     *\n     * @returns {void}\n     */\n    DatePicker.prototype.focusOut = function () {\n        if (document.activeElement === this.inputElement) {\n            removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n            this.inputElement.blur();\n        }\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Gets the current view of the DatePicker.\n     *\n     * @returns {string}\n\n     */\n    DatePicker.prototype.currentView = function () {\n        var currentView;\n        if (this.calendarElement) {\n            // calls the Calendar currentView public method\n            currentView = _super.prototype.currentView.call(this);\n        }\n        return currentView;\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Navigates to specified month or year or decade view of the DatePicker.\n     *\n     * @param  {string} view - Specifies the view of the calendar.\n     * @param  {Date} date - Specifies the focused date in a view.\n     * @returns {void}\n\n     */\n    DatePicker.prototype.navigateTo = function (view, date) {\n        if (this.calendarElement) {\n            // calls the Calendar navigateTo public method\n            _super.prototype.navigateTo.call(this, view, date);\n        }\n    };\n    /**\n     * To destroy the widget.\n     *\n     * @returns {void}\n     */\n    DatePicker.prototype.destroy = function () {\n        this.unBindEvents();\n        _super.prototype.destroy.call(this);\n        if (!isNullOrUndefined(this.keyboardModules)) {\n            this.keyboardModules.destroy();\n        }\n        if (this.popupObj && this.popupObj.element.classList.contains(POPUP)) {\n            _super.prototype.destroy.call(this);\n        }\n        var ariaAttrs = {\n            'aria-atomic': 'true', 'aria-disabled': 'true',\n            'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n            'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false', 'aria-label': this.getModuleName()\n        };\n        if (this.inputElement) {\n            Input.removeAttributes(ariaAttrs, this.inputElement);\n            if (!isNullOrUndefined(this.inputElementCopy.getAttribute('tabindex'))) {\n                this.inputElement.setAttribute('tabindex', this.tabIndex);\n            }\n            else {\n                this.inputElement.removeAttribute('tabindex');\n            }\n            EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n            EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n            this.ensureInputAttribute();\n        }\n        if (this.isCalendar()) {\n            if (this.popupWrapper) {\n                detach(this.popupWrapper);\n            }\n            this.popupObj = this.popupWrapper = null;\n            this.keyboardModule.destroy();\n        }\n        if (this.ngTag === null) {\n            if (this.inputElement) {\n                if (!isNullOrUndefined(this.inputWrapper)) {\n                    this.inputWrapper.container.insertAdjacentElement('afterend', this.inputElement);\n                }\n                removeClass([this.inputElement], [INPUTROOT]);\n            }\n            removeClass([this.element], [ROOT]);\n            if (!isNullOrUndefined(this.inputWrapper)) {\n                detach(this.inputWrapper.container);\n            }\n        }\n        if (this.formElement) {\n            EventHandler.remove(this.formElement, 'reset', this.resetFormHandler);\n        }\n        this.inputWrapper = null;\n        this.keyboardModules = null;\n    };\n    DatePicker.prototype.ensureInputAttribute = function () {\n        var prop = [];\n        for (var i = 0; i < this.inputElement.attributes.length; i++) {\n            prop[i] = this.inputElement.attributes[i].name;\n        }\n        for (var i = 0; i < prop.length; i++) {\n            if (isNullOrUndefined(this.inputElementCopy.getAttribute(prop[i]))) {\n                if (prop[i].toLowerCase() === 'value') {\n                    this.inputElement.value = '';\n                }\n                this.inputElement.removeAttribute(prop[i]);\n            }\n            else {\n                if (prop[i].toLowerCase() === 'value') {\n                    this.inputElement.value = this.inputElementCopy.getAttribute(prop[i]);\n                }\n                this.inputElement.setAttribute(prop[i], this.inputElementCopy.getAttribute(prop[i]));\n            }\n        }\n    };\n    /**\n     * Initialize the event handler\n     *\n     * @returns {void}\n     * @private\n     */\n    DatePicker.prototype.preRender = function () {\n        this.inputElementCopy = this.element.cloneNode(true);\n        removeClass([this.inputElementCopy], [ROOT, CONTROL, LIBRARY]);\n        this.inputElement = this.element;\n        this.formElement = closest(this.inputElement, 'form');\n        this.index = this.showClearButton ? 2 : 1;\n        this.ngTag = null;\n        if (this.element.tagName === 'EJS-DATEPICKER' || this.element.tagName === 'EJS-DATETIMEPICKER') {\n            this.ngTag = this.element.tagName;\n            this.inputElement = this.createElement('input');\n            this.element.appendChild(this.inputElement);\n        }\n        if (this.element.getAttribute('id')) {\n            if (this.ngTag !== null) {\n                this.inputElement.id = this.element.getAttribute('id') + '_input';\n            }\n        }\n        else {\n            if (this.getModuleName() === 'datetimepicker') {\n                this.element.id = getUniqueID('ej2-datetimepicker');\n                if (this.ngTag !== null) {\n                    attributes(this.inputElement, { 'id': this.element.id + '_input' });\n                }\n            }\n            else {\n                this.element.id = getUniqueID('ej2-datepicker');\n                if (this.ngTag !== null) {\n                    attributes(this.inputElement, { 'id': this.element.id + '_input' });\n                }\n            }\n        }\n        if (this.ngTag !== null) {\n            this.validationAttribute(this.element, this.inputElement);\n        }\n        this.updateHtmlAttributeToElement();\n        this.defaultKeyConfigs = this.getDefaultKeyConfig();\n        this.checkHtmlAttributes(false);\n        this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n        this.element.removeAttribute('tabindex');\n        _super.prototype.preRender.call(this);\n    };\n    DatePicker.prototype.getDefaultKeyConfig = function () {\n        this.defaultKeyConfigs = {\n            altUpArrow: 'alt+uparrow',\n            altDownArrow: 'alt+downarrow',\n            escape: 'escape',\n            enter: 'enter',\n            controlUp: 'ctrl+38',\n            controlDown: 'ctrl+40',\n            moveDown: 'downarrow',\n            moveUp: 'uparrow',\n            moveLeft: 'leftarrow',\n            moveRight: 'rightarrow',\n            select: 'enter',\n            home: 'home',\n            end: 'end',\n            pageUp: 'pageup',\n            pageDown: 'pagedown',\n            shiftPageUp: 'shift+pageup',\n            shiftPageDown: 'shift+pagedown',\n            controlHome: 'ctrl+home',\n            controlEnd: 'ctrl+end',\n            shiftTab: 'shift+tab',\n            tab: 'tab'\n        };\n        return this.defaultKeyConfigs;\n    };\n    DatePicker.prototype.validationAttribute = function (target, inputElement) {\n        var nameAttribute = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n        inputElement.setAttribute('name', nameAttribute);\n        target.removeAttribute('name');\n        var attribute = ['required', 'aria-required', 'form'];\n        for (var i = 0; i < attribute.length; i++) {\n            if (isNullOrUndefined(target.getAttribute(attribute[i]))) {\n                continue;\n            }\n            var attr = target.getAttribute(attribute[i]);\n            inputElement.setAttribute(attribute[i], attr);\n            target.removeAttribute(attribute[i]);\n        }\n    };\n    DatePicker.prototype.checkFormat = function () {\n        var culture = new Internationalization(this.locale);\n        if (this.format) {\n            if (typeof this.format === 'string') {\n                this.formatString = this.format;\n            }\n            else if (this.format.skeleton !== '' && !isNullOrUndefined(this.format.skeleton)) {\n                var skeletonString = this.format.skeleton;\n                if (this.getModuleName() === 'datetimepicker') {\n                    this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'dateTime' });\n                }\n                else {\n                    this.formatString = culture.getDatePattern({ skeleton: skeletonString, type: 'date' });\n                }\n            }\n            else {\n                if (this.getModuleName() === 'datetimepicker') {\n                    this.formatString = this.dateTimeFormat;\n                }\n                else {\n                    this.formatString = null;\n                }\n            }\n        }\n        else {\n            this.formatString = null;\n        }\n    };\n    DatePicker.prototype.checkHtmlAttributes = function (dynamic) {\n        this.globalize = new Internationalization(this.locale);\n        this.checkFormat();\n        this.checkView();\n        var attributes = dynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n            ['value', 'min', 'max', 'disabled', 'readonly', 'style', 'name', 'placeholder', 'type'];\n        var options;\n        if (this.getModuleName() === 'datetimepicker') {\n            if (this.calendarMode === 'Gregorian') {\n                options = {\n                    format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n                    type: 'dateTime', skeleton: 'yMd'\n                };\n            }\n            else {\n                options = {\n                    format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n                    type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n                };\n            }\n        }\n        else {\n            if (this.calendarMode === 'Gregorian') {\n                options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n            }\n            else {\n                options = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n            }\n        }\n        for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n            var prop = attributes_1[_i];\n            if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n                switch (prop) {\n                    case 'disabled':\n                        if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['enabled'] === undefined)) || dynamic)) {\n                            var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n                                this.inputElement.getAttribute(prop) === '' ||\n                                this.inputElement.getAttribute(prop) === 'true' ? false : true;\n                            this.setProperties({ enabled: enabled }, !dynamic);\n                        }\n                        break;\n                    case 'readonly':\n                        if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['readonly'] === undefined)) || dynamic)) {\n                            var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n                                this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n                            this.setProperties({ readonly: readonly }, !dynamic);\n                        }\n                        break;\n                    case 'placeholder':\n                        if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['placeholder'] === undefined)) || dynamic)) {\n                            this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !dynamic);\n                        }\n                        break;\n                    case 'style':\n                        this.inputElement.setAttribute('style', '' + this.inputElement.getAttribute(prop));\n                        break;\n                    case 'name':\n                        this.inputElement.setAttribute('name', '' + this.inputElement.getAttribute(prop));\n                        break;\n                    case 'value':\n                        if (((isNullOrUndefined(this.datepickerOptions) || (this.datepickerOptions['value'] === undefined)) || dynamic)) {\n                            var value = this.inputElement.getAttribute(prop);\n                            this.setProperties(setValue(prop, this.globalize.parseDate(value, options), {}), !dynamic);\n                        }\n                        break;\n                    case 'min':\n                        if ((+this.min === +new Date(1900, 0, 1)) || dynamic) {\n                            var min = this.inputElement.getAttribute(prop);\n                            this.setProperties(setValue(prop, this.globalize.parseDate(min), {}), !dynamic);\n                        }\n                        break;\n                    case 'max':\n                        if ((+this.max === +new Date(2099, 11, 31)) || dynamic) {\n                            var max = this.inputElement.getAttribute(prop);\n                            this.setProperties(setValue(prop, this.globalize.parseDate(max), {}), !dynamic);\n                        }\n                        break;\n                    case 'type':\n                        if (this.inputElement.getAttribute(prop) !== 'text') {\n                            this.inputElement.setAttribute('type', 'text');\n                        }\n                        break;\n                }\n            }\n        }\n    };\n    /**\n     * To get component name.\n     *\n     * @returns {string} Returns the component name.\n     * @private\n     */\n    DatePicker.prototype.getModuleName = function () {\n        return 'datepicker';\n    };\n    DatePicker.prototype.disabledDates = function (isDynamic, isBlur) {\n        if (isDynamic === void 0) { isDynamic = false; }\n        if (isBlur === void 0) { isBlur = false; }\n        var formatOptions;\n        var globalize;\n        var valueCopy = this.checkDateValue(this.value) ? new Date(+this.value) : new Date(this.checkValue(this.value));\n        var previousValCopy = this.previousDate;\n        //calls the Calendar render method to check the disabled dates through renderDayCell event and update the input value accordingly.\n        this.minMaxUpdates();\n        if (!isDynamic || (isDynamic && !isNullOrUndefined(this.renderDayCell))) {\n            _super.prototype.render.call(this);\n        }\n        this.previousDate = previousValCopy;\n        var date = valueCopy && +(valueCopy);\n        var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + date);\n        if (!this.strictMode) {\n            if (typeof this.value === 'string' || ((typeof this.value === 'object') && (+this.value) !== (+valueCopy))) {\n                this.setProperties({ value: valueCopy }, true);\n            }\n        }\n        if (!isNullOrUndefined(this.calendarElement) && !isNullOrUndefined(this.calendarElement.querySelectorAll(dateIdString)[0])) {\n            if (this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled')) {\n                if (!this.strictMode) {\n                    this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n                }\n            }\n        }\n        var inputVal;\n        if (this.getModuleName() === 'datetimepicker') {\n            if (this.calendarMode === 'Gregorian') {\n                globalize = this.globalize.formatDate(valueCopy, {\n                    format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n                    type: 'dateTime', skeleton: 'yMd'\n                });\n            }\n            else {\n                globalize = this.globalize.formatDate(valueCopy, {\n                    format: !isNullOrUndefined(this.formatString) ? this.formatString : this.dateTimeFormat,\n                    type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n                });\n            }\n            inputVal = globalize;\n        }\n        else {\n            if (this.calendarMode === 'Gregorian') {\n                formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd' };\n            }\n            else {\n                formatOptions = { format: this.formatString, type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n            }\n            inputVal = this.globalize.formatDate(valueCopy, formatOptions);\n        }\n        if (!this.popupObj) {\n            this.updateInputValue(inputVal);\n            if (this.enableMask) {\n                this.updateInputValue(this.maskedDateValue);\n                this.notify('createMask', {\n                    module: 'MaskedDateTime', isBlur: isBlur\n                });\n            }\n        }\n    };\n    DatePicker.prototype.setAriaAttributes = function () {\n        if (this.isCalendar()) {\n            Input.addAttributes({ 'aria-expanded': 'true' }, this.inputElement);\n            attributes(this.inputElement, { 'aria-owns': this.inputElement.id + '_options' });\n            attributes(this.inputElement, { 'aria-controls': this.inputElement.id });\n            if (this.value) {\n                attributes(this.inputElement, { 'aria-activedescendant': '' + this.setActiveDescendant() });\n            }\n        }\n        else {\n            Input.addAttributes({ 'aria-expanded': 'false' }, this.inputElement);\n            this.inputElement.removeAttribute('aria-owns');\n            this.inputElement.removeAttribute('aria-controls');\n            this.inputElement.removeAttribute('aria-activedescendant');\n        }\n    };\n    DatePicker.prototype.errorClass = function () {\n        var dateIdString = '*[id^=\"/id\"]'.replace('/id', '' + (+this.value));\n        var isDisabledDate = this.calendarElement &&\n            this.calendarElement.querySelectorAll(dateIdString)[0] &&\n            this.calendarElement.querySelectorAll(dateIdString)[0].classList.contains('e-disabled');\n        if ((!isNullOrUndefined(this.value) && !isNullOrUndefined(this.min) &&\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            !isNullOrUndefined(this.max) && !(new Date(this.value).setMilliseconds(0) >= new Date(this.min).setMilliseconds(0)\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            && new Date(this.value).setMilliseconds(0) <= new Date(this.max).setMilliseconds(0)))\n            || (!this.strictMode && this.inputElement.value !== '' && this.inputElement.value !== this.maskedDateValue && isNullOrUndefined(this.value) || isDisabledDate)) {\n            addClass([this.inputWrapper.container], ERROR);\n            attributes(this.inputElement, { 'aria-invalid': 'true' });\n        }\n        else if (!isNullOrUndefined(this.inputWrapper)) {\n            removeClass([this.inputWrapper.container], ERROR);\n            attributes(this.inputElement, { 'aria-invalid': 'false' });\n        }\n    };\n    /**\n     * Called internally if any of the property value changed.\n     *\n     * @param {DatePickerModel} newProp - Returns the dynamic property value of the component.\n     * @param {DatePickerModel} oldProp - Returns the previous property value of the component.\n     * @returns {void}\n     * @private\n     */\n    DatePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'value':\n                    this.isDynamicValueChanged = true;\n                    this.isInteracted = false;\n                    this.invalidValueString = null;\n                    this.checkInvalidValue(newProp.value);\n                    newProp.value = this.value;\n                    this.previousElementValue = this.inputElement.value;\n                    if (isNullOrUndefined(this.value)) {\n                        if (this.enableMask) {\n                            this.updateInputValue(this.maskedDateValue);\n                        }\n                        else {\n                            this.updateInputValue('');\n                        }\n                        this.currentDate = new Date(new Date().setHours(0, 0, 0, 0));\n                    }\n                    this.updateInput(true);\n                    if (+this.previousDate !== +this.value) {\n                        this.changeTrigger(null);\n                    }\n                    this.isInteracted = true;\n                    this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n                    if (this.enableMask) {\n                        this.notify('createMask', {\n                            module: 'MaskedDateTime'\n                        });\n                    }\n                    break;\n                case 'format':\n                    this.checkFormat();\n                    this.bindInputEvent();\n                    this.updateInput();\n                    if (this.enableMask) {\n                        this.notify('createMask', {\n                            module: 'MaskedDateTime'\n                        });\n                        if (!this.value) {\n                            this.updateInputValue(this.maskedDateValue);\n                        }\n                    }\n                    break;\n                case 'allowEdit':\n                    this.setAllowEdit();\n                    break;\n                case 'placeholder':\n                    Input.setPlaceholder(this.placeholder, this.inputElement);\n                    break;\n                case 'readonly':\n                    Input.setReadonly(this.readonly, this.inputElement);\n                    break;\n                case 'enabled':\n                    Input.setEnabled(this.enabled, this.inputElement);\n                    this.setAriaDisabled();\n                    break;\n                case 'htmlAttributes':\n                    this.updateHtmlAttributeToElement();\n                    this.updateHtmlAttributeToWrapper();\n                    this.checkHtmlAttributes(true);\n                    break;\n                case 'locale':\n                    this.globalize = new Internationalization(this.locale);\n                    this.l10n.setLocale(this.locale);\n                    if (this.datepickerOptions && this.datepickerOptions.placeholder == null) {\n                        this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n                        Input.setPlaceholder(this.placeholder, this.inputElement);\n                    }\n                    this.updateInput();\n                    if (this.enableMask) {\n                        this.notify('createMask', {\n                            module: 'MaskedDateTime'\n                        });\n                    }\n                    break;\n                case 'enableRtl':\n                    Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n                    break;\n                case 'start':\n                case 'depth':\n                    this.checkView();\n                    if (this.calendarElement) {\n                        _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n                    }\n                    break;\n                case 'zIndex':\n                    this.setProperties({ zIndex: newProp.zIndex }, true);\n                    break;\n                case 'cssClass':\n                    this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n                    break;\n                case 'showClearButton':\n                    Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n                    this.bindClearEvent();\n                    this.index = this.showClearButton ? 2 : 1;\n                    break;\n                case 'strictMode':\n                    this.invalidValueString = null;\n                    this.updateInput();\n                    break;\n                case 'width':\n                    this.setWidth(newProp.width);\n                    Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n                    if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n                        this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n                    }\n                    break;\n                case 'floatLabelType':\n                    this.floatLabelType = newProp.floatLabelType;\n                    Input.removeFloating(this.inputWrapper);\n                    Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n                    if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n                        this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n                    }\n                    break;\n                case 'enableMask':\n                    if (this.enableMask) {\n                        this.notify('createMask', {\n                            module: 'MaskedDateTime'\n                        });\n                        this.updateInputValue(this.maskedDateValue);\n                        this.bindInputEvent();\n                    }\n                    else {\n                        if (this.inputElement.value === this.maskedDateValue) {\n                            this.updateInputValue('');\n                        }\n                    }\n                    break;\n                default:\n                    if (this.calendarElement && this.isCalendar()) {\n                        _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n                    }\n                    break;\n            }\n            if (!this.isDynamicValueChanged) {\n                this.hide(null);\n            }\n            this.isDynamicValueChanged = false;\n        }\n    };\n    __decorate([\n        Property(null)\n    ], DatePicker.prototype, \"width\", void 0);\n    __decorate([\n        Property(null)\n    ], DatePicker.prototype, \"value\", void 0);\n    __decorate([\n        Property(null)\n    ], DatePicker.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(false)\n    ], DatePicker.prototype, \"strictMode\", void 0);\n    __decorate([\n        Property(null)\n    ], DatePicker.prototype, \"format\", void 0);\n    __decorate([\n        Property(true)\n    ], DatePicker.prototype, \"enabled\", void 0);\n    __decorate([\n        Property(false)\n    ], DatePicker.prototype, \"fullScreenMode\", void 0);\n    __decorate([\n        Property({})\n    ], DatePicker.prototype, \"htmlAttributes\", void 0);\n    __decorate([\n        Property(null)\n    ], DatePicker.prototype, \"values\", void 0);\n    __decorate([\n        Property(false)\n    ], DatePicker.prototype, \"isMultiSelection\", void 0);\n    __decorate([\n        Property(true)\n    ], DatePicker.prototype, \"showClearButton\", void 0);\n    __decorate([\n        Property(true)\n    ], DatePicker.prototype, \"allowEdit\", void 0);\n    __decorate([\n        Property(null)\n    ], DatePicker.prototype, \"keyConfigs\", void 0);\n    __decorate([\n        Property(false)\n    ], DatePicker.prototype, \"enablePersistence\", void 0);\n    __decorate([\n        Property(1000)\n    ], DatePicker.prototype, \"zIndex\", void 0);\n    __decorate([\n        Property(false)\n    ], DatePicker.prototype, \"readonly\", void 0);\n    __decorate([\n        Property(null)\n    ], DatePicker.prototype, \"placeholder\", void 0);\n    __decorate([\n        Property('Never')\n    ], DatePicker.prototype, \"floatLabelType\", void 0);\n    __decorate([\n        Property(null)\n    ], DatePicker.prototype, \"serverTimezoneOffset\", void 0);\n    __decorate([\n        Property(false)\n    ], DatePicker.prototype, \"openOnFocus\", void 0);\n    __decorate([\n        Property(false)\n    ], DatePicker.prototype, \"enableMask\", void 0);\n    __decorate([\n        Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n    ], DatePicker.prototype, \"maskPlaceholder\", void 0);\n    __decorate([\n        Event()\n    ], DatePicker.prototype, \"open\", void 0);\n    __decorate([\n        Event()\n    ], DatePicker.prototype, \"cleared\", void 0);\n    __decorate([\n        Event()\n    ], DatePicker.prototype, \"close\", void 0);\n    __decorate([\n        Event()\n    ], DatePicker.prototype, \"blur\", void 0);\n    __decorate([\n        Event()\n    ], DatePicker.prototype, \"focus\", void 0);\n    __decorate([\n        Event()\n    ], DatePicker.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], DatePicker.prototype, \"destroyed\", void 0);\n    DatePicker = __decorate([\n        NotifyPropertyChanges\n    ], DatePicker);\n    return DatePicker;\n}(Calendar));\nexport { DatePicker };\n","//! moment.js locale configuration\n//! locale : Spanish (Dominican Republic) [es-do]\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esDo = moment.defineLocale('es-do', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return esDo;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable max-len */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable jsdoc/require-param */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable valid-jsdoc */\nimport { Property, ChildProperty, Complex, Collection, getValue, animationMode } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { StackValues, RectOption, appendChildElement, appendClipElement } from '../../common/utils/helper';\nimport { firstToLowerCase, CircleOption, getColorByValue } from '../../common/utils/helper';\nimport { Rect } from '@syncfusion/ej2-svg-base';\nimport { Border, Font, Margin, Animation, EmptyPointSettings, CornerRadius, Connector, DragSettings } from '../../common/model/base';\nimport { DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { Offset } from '../../common/model/base';\nimport { seriesRender } from '../../common/model/constants';\nimport { getVisiblePoints, setRange } from '../../common/utils/helper';\nimport { Browser } from '@syncfusion/ej2-base';\n/**\n * Configures the data label in the series.\n */\nvar DataLabelSettings = /** @class */ (function (_super) {\n    __extends(DataLabelSettings, _super);\n    function DataLabelSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(false)\n    ], DataLabelSettings.prototype, \"visible\", void 0);\n    __decorate([\n        Property(true)\n    ], DataLabelSettings.prototype, \"showZero\", void 0);\n    __decorate([\n        Property(null)\n    ], DataLabelSettings.prototype, \"name\", void 0);\n    __decorate([\n        Property('transparent')\n    ], DataLabelSettings.prototype, \"fill\", void 0);\n    __decorate([\n        Property(null)\n    ], DataLabelSettings.prototype, \"format\", void 0);\n    __decorate([\n        Property(1)\n    ], DataLabelSettings.prototype, \"opacity\", void 0);\n    __decorate([\n        Property(0)\n    ], DataLabelSettings.prototype, \"angle\", void 0);\n    __decorate([\n        Property(false)\n    ], DataLabelSettings.prototype, \"enableRotation\", void 0);\n    __decorate([\n        Property('Auto')\n    ], DataLabelSettings.prototype, \"position\", void 0);\n    __decorate([\n        Property(5)\n    ], DataLabelSettings.prototype, \"rx\", void 0);\n    __decorate([\n        Property(5)\n    ], DataLabelSettings.prototype, \"ry\", void 0);\n    __decorate([\n        Property('Center')\n    ], DataLabelSettings.prototype, \"alignment\", void 0);\n    __decorate([\n        Complex({ width: null, color: null }, Border)\n    ], DataLabelSettings.prototype, \"border\", void 0);\n    __decorate([\n        Complex({ left: 5, right: 5, top: 5, bottom: 5 }, Margin)\n    ], DataLabelSettings.prototype, \"margin\", void 0);\n    __decorate([\n        Complex({ size: '12px', color: null, fontStyle: 'Normal', fontWeight: '400', fontFamily: null }, Font)\n    ], DataLabelSettings.prototype, \"font\", void 0);\n    __decorate([\n        Property(null)\n    ], DataLabelSettings.prototype, \"template\", void 0);\n    __decorate([\n        Property('Hide')\n    ], DataLabelSettings.prototype, \"labelIntersectAction\", void 0);\n    return DataLabelSettings;\n}(ChildProperty));\nexport { DataLabelSettings };\n/**\n *  Configures the marker in the series.\n */\nvar MarkerSettings = /** @class */ (function (_super) {\n    __extends(MarkerSettings, _super);\n    function MarkerSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(false)\n    ], MarkerSettings.prototype, \"visible\", void 0);\n    __decorate([\n        Property(null)\n    ], MarkerSettings.prototype, \"shape\", void 0);\n    __decorate([\n        Property('')\n    ], MarkerSettings.prototype, \"imageUrl\", void 0);\n    __decorate([\n        Property(5)\n    ], MarkerSettings.prototype, \"height\", void 0);\n    __decorate([\n        Property(false)\n    ], MarkerSettings.prototype, \"isFilled\", void 0);\n    __decorate([\n        Property(5)\n    ], MarkerSettings.prototype, \"width\", void 0);\n    __decorate([\n        Complex({ width: 2, color: null }, Border)\n    ], MarkerSettings.prototype, \"border\", void 0);\n    __decorate([\n        Complex({ x: 0, y: 0 }, Offset)\n    ], MarkerSettings.prototype, \"offset\", void 0);\n    __decorate([\n        Property(null)\n    ], MarkerSettings.prototype, \"fill\", void 0);\n    __decorate([\n        Property(true)\n    ], MarkerSettings.prototype, \"allowHighlight\", void 0);\n    __decorate([\n        Property(1)\n    ], MarkerSettings.prototype, \"opacity\", void 0);\n    __decorate([\n        Complex({}, DataLabelSettings)\n    ], MarkerSettings.prototype, \"dataLabel\", void 0);\n    return MarkerSettings;\n}(ChildProperty));\nexport { MarkerSettings };\n/**\n *  Configures the pareto in the series.\n */\nvar ParetoOptions = /** @class */ (function (_super) {\n    __extends(ParetoOptions, _super);\n    function ParetoOptions() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(null)\n    ], ParetoOptions.prototype, \"fill\", void 0);\n    __decorate([\n        Property(1)\n    ], ParetoOptions.prototype, \"width\", void 0);\n    __decorate([\n        Property('0')\n    ], ParetoOptions.prototype, \"dashArray\", void 0);\n    __decorate([\n        Complex(null, MarkerSettings)\n    ], ParetoOptions.prototype, \"marker\", void 0);\n    __decorate([\n        Property(true)\n    ], ParetoOptions.prototype, \"showAxis\", void 0);\n    return ParetoOptions;\n}(ChildProperty));\nexport { ParetoOptions };\n/**\n * Points model for the series.\n *\n * @public\n */\nvar Points = /** @class */ (function () {\n    function Points() {\n        /** point symbol location. */\n        this.symbolLocations = null;\n        /** point region. */\n        this.regions = null;\n        /** point percentage value. */\n        this.percentage = null;\n        /** point region data. */\n        this.regionData = null;\n        /** To know the point is selected. */\n        this.isSelect = false;\n        /** point marker. */\n        this.marker = {\n            visible: false\n        };\n        /**\n         * To identify point y value with in the range.\n         *\n         * @private\n         */\n        this.isPointInRange = true;\n        /** vertical error value for the point. */\n        this.verticalError = null;\n        /** vertical negative error value for the point. */\n        this.verticalNegativeError = null;\n        /** horizontal error value for the point. */\n        this.horizontalError = null;\n        /** horizontal negative error value for the point. */\n        this.horizontalNegativeError = null;\n        /** vertical positive error value for the point. */\n        this.verticalPositiveError = null;\n        /** horizontal positive error value for the point. */\n        this.horizontalPositiveError = null;\n    }\n    return Points;\n}());\nexport { Points };\n/**\n * Defines the behavior of the Trendlines\n */\nvar Trendline = /** @class */ (function (_super) {\n    __extends(Trendline, _super);\n    function Trendline() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** @private */\n        _this.clipRect = new Rect(0, 0, 0, 0);\n        return _this;\n    }\n    /** @private */\n    Trendline.prototype.setDataSource = function (series, chart) {\n        if (series) {\n            this.points = series.points;\n        }\n        chart.trendLineModule.initDataSource(this);\n        chart.visibleSeriesCount++;\n    };\n    __decorate([\n        Property('')\n    ], Trendline.prototype, \"name\", void 0);\n    __decorate([\n        Property('')\n    ], Trendline.prototype, \"dashArray\", void 0);\n    __decorate([\n        Property(true)\n    ], Trendline.prototype, \"visible\", void 0);\n    __decorate([\n        Property('Linear')\n    ], Trendline.prototype, \"type\", void 0);\n    __decorate([\n        Property(2)\n    ], Trendline.prototype, \"period\", void 0);\n    __decorate([\n        Property(2)\n    ], Trendline.prototype, \"polynomialOrder\", void 0);\n    __decorate([\n        Property(0)\n    ], Trendline.prototype, \"backwardForecast\", void 0);\n    __decorate([\n        Property(0)\n    ], Trendline.prototype, \"forwardForecast\", void 0);\n    __decorate([\n        Complex({}, Animation)\n    ], Trendline.prototype, \"animation\", void 0);\n    __decorate([\n        Complex({}, MarkerSettings)\n    ], Trendline.prototype, \"marker\", void 0);\n    __decorate([\n        Property(true)\n    ], Trendline.prototype, \"enableTooltip\", void 0);\n    __decorate([\n        Property(null)\n    ], Trendline.prototype, \"intercept\", void 0);\n    __decorate([\n        Property('')\n    ], Trendline.prototype, \"fill\", void 0);\n    __decorate([\n        Property(1)\n    ], Trendline.prototype, \"width\", void 0);\n    __decorate([\n        Property('SeriesType')\n    ], Trendline.prototype, \"legendShape\", void 0);\n    return Trendline;\n}(ChildProperty));\nexport { Trendline };\n/**\n * Configures Error bar in series.\n */\nvar ErrorBarCapSettings = /** @class */ (function (_super) {\n    __extends(ErrorBarCapSettings, _super);\n    function ErrorBarCapSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(1)\n    ], ErrorBarCapSettings.prototype, \"width\", void 0);\n    __decorate([\n        Property(10)\n    ], ErrorBarCapSettings.prototype, \"length\", void 0);\n    __decorate([\n        Property(null)\n    ], ErrorBarCapSettings.prototype, \"color\", void 0);\n    __decorate([\n        Property(1)\n    ], ErrorBarCapSettings.prototype, \"opacity\", void 0);\n    return ErrorBarCapSettings;\n}(ChildProperty));\nexport { ErrorBarCapSettings };\nvar ChartSegment = /** @class */ (function (_super) {\n    __extends(ChartSegment, _super);\n    function ChartSegment() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(null)\n    ], ChartSegment.prototype, \"value\", void 0);\n    __decorate([\n        Property(null)\n    ], ChartSegment.prototype, \"color\", void 0);\n    __decorate([\n        Property('0')\n    ], ChartSegment.prototype, \"dashArray\", void 0);\n    return ChartSegment;\n}(ChildProperty));\nexport { ChartSegment };\n/**\n * Error bar settings\n *\n * @public\n */\nvar ErrorBarSettings = /** @class */ (function (_super) {\n    __extends(ErrorBarSettings, _super);\n    function ErrorBarSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(false)\n    ], ErrorBarSettings.prototype, \"visible\", void 0);\n    __decorate([\n        Property('Fixed')\n    ], ErrorBarSettings.prototype, \"type\", void 0);\n    __decorate([\n        Property('Both')\n    ], ErrorBarSettings.prototype, \"direction\", void 0);\n    __decorate([\n        Property('Vertical')\n    ], ErrorBarSettings.prototype, \"mode\", void 0);\n    __decorate([\n        Property(null)\n    ], ErrorBarSettings.prototype, \"color\", void 0);\n    __decorate([\n        Property(1)\n    ], ErrorBarSettings.prototype, \"verticalError\", void 0);\n    __decorate([\n        Property(1)\n    ], ErrorBarSettings.prototype, \"width\", void 0);\n    __decorate([\n        Property(1)\n    ], ErrorBarSettings.prototype, \"horizontalError\", void 0);\n    __decorate([\n        Property(3)\n    ], ErrorBarSettings.prototype, \"verticalPositiveError\", void 0);\n    __decorate([\n        Property(3)\n    ], ErrorBarSettings.prototype, \"verticalNegativeError\", void 0);\n    __decorate([\n        Property(1)\n    ], ErrorBarSettings.prototype, \"horizontalPositiveError\", void 0);\n    __decorate([\n        Property(1)\n    ], ErrorBarSettings.prototype, \"horizontalNegativeError\", void 0);\n    __decorate([\n        Complex(null, ErrorBarCapSettings)\n    ], ErrorBarSettings.prototype, \"errorBarCap\", void 0);\n    __decorate([\n        Property('')\n    ], ErrorBarSettings.prototype, \"errorBarColorMapping\", void 0);\n    return ErrorBarSettings;\n}(ChildProperty));\nexport { ErrorBarSettings };\n/**\n * Defines the common behavior of Series and Technical Indicators\n */\nvar SeriesBase = /** @class */ (function (_super) {\n    __extends(SeriesBase, _super);\n    function SeriesBase() {\n        /**\n         * The DataSource field that contains the x value.\n         * It is applicable for series and technical indicators\n         *\n         * @default ''\n         */\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.rangeColorPoints = [];\n        _this.isAdvancedColor = undefined;\n        /** @private */\n        _this.currentViewData = [];\n        /** @private */\n        _this.clipRect = new Rect(0, 0, 0, 0);\n        /** @private */\n        _this.seriesType = 'XY';\n        _this.isRectTypeSeries = false;\n        return _this;\n    }\n    /**\n     * Process data for the series.\n     *\n     * @hidden\n     */\n    SeriesBase.prototype.processJsonData = function () {\n        var i = 0;\n        var point = new Points();\n        var xName = (this instanceof Series && this.type === 'Histogram') ? 'x' : this.xName;\n        var textMappingName = this instanceof Series && this.marker.dataLabel.name ?\n            this.marker.dataLabel.name : '';\n        if (this instanceof Series) {\n            if ((this.type === 'Waterfall' || this.type === 'Histogram')) {\n                this.currentViewData = this.chart[firstToLowerCase(this.type) + 'SeriesModule'].\n                    processInternalData(extend([], this.currentViewData, null, true), this);\n            }\n            if (this.category === 'Pareto') {\n                if (this.type === 'Line') {\n                    this.currentViewData = this.chart.paretoSeriesModule.performCumulativeCalculation(this.currentViewData, this);\n                }\n            }\n            this.isRectTypeSeries = this.type.indexOf('Column') > -1 || this.type.indexOf('Bar') > -1\n                || this.type.indexOf('Histogram') > -1;\n        }\n        var len = (this.currentViewData || []).length;\n        this.points = [];\n        this.xMin = Infinity;\n        this.xMax = -Infinity;\n        this.yMin = Infinity;\n        this.yMax = -Infinity;\n        this.sizeMax = -Infinity;\n        this.getSeriesType();\n        if (this.xAxis.valueType === 'Category') {\n            while (i < len) {\n                point = this.dataPoint(i, textMappingName, xName);\n                this.pushCategoryData(point, i, point.x);\n                this.pushData(point, i);\n                this.setEmptyPoint(point, i);\n                this.rangeColorsInterior(point);\n                i++;\n            }\n        }\n        else if (this.xAxis.valueType.indexOf('DateTime') > -1) {\n            var option = {\n                skeleton: 'full',\n                type: 'dateTime'\n            };\n            var dateParser = this.chart.intl.getDateParser(option);\n            var dateFormatter = this.chart.intl.getDateFormat(option);\n            while (i < len) {\n                point = this.dataPoint(i, textMappingName, xName);\n                if (!isNullOrUndefined(point.x) && point.x !== '') {\n                    point.x = new Date(DataUtil.parse.parseJson({ val: point.x }).val);\n                    if (this.xAxis.valueType === 'DateTime') {\n                        point.xValue = Date.parse(point.x.toString());\n                    }\n                    else {\n                        // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n                        this.chart.isBlazor ? this.pushCategoryData(point, i, Date.parse(point.x.toString()).toString()) :\n                            this.pushCategoryData(point, i, Date.parse(dateParser(dateFormatter(point.x))).toString());\n                    }\n                    this.pushData(point, i);\n                    this.setEmptyPoint(point, i);\n                    //this.rangeColorsInterior(point);\n                }\n                else {\n                    point.visible = false;\n                }\n                i++;\n            }\n        }\n        else {\n            while (i < len) {\n                point = this.dataPoint(i, textMappingName, xName);\n                point.xValue = point.x;\n                this.pushData(point, i);\n                this.setEmptyPoint(point, i);\n                i++;\n            }\n        }\n        if (this instanceof Series && !(this.chart.stockChart && this.xAxis.valueType === 'DateTimeCategory')) {\n            if (this.type.indexOf('Spline') > -1 || (this.drawType.indexOf('Spline') > -1 && this.chart.chartAreaType === 'PolarRadar')) {\n                var isArea = (this.type.indexOf('Area') > -1 || this.drawType.indexOf('Area') > -1);\n                var isRange = this.type.indexOf('Range') > -1;\n                this.chart['spline' + (isArea ? isRange ? 'RangeArea' : 'Area' : '') + 'SeriesModule'].findSplinePoint(this);\n            }\n            else if (this.type.indexOf('Histogram') > -1 && (this.xAxis.maximum || this.xAxis.minimum)) {\n                this.chart['histogramSeriesModule'].calculateBinValues(this);\n            }\n            if (this.type.indexOf('Histogram') > -1 && this.points.length === 1) {\n                this.xMin = this.xMin - this.histogramValues.binWidth;\n                this.xMax = this.xMax + this.histogramValues.binWidth;\n            }\n        }\n    };\n    SeriesBase.prototype.rangeColorsInterior = function (point) {\n        if (this.chart.rangeColorSettings && this.chart.rangeColorSettings.length > 0 && this.chart.visibleSeries.length === 1 &&\n            (this.chart.series[0].type === 'Column' || this.chart.series[0].type === 'Bar' ||\n                this.chart.series[0].type === 'Scatter' || this.chart.series[0].type === 'Bubble')) {\n            if (!this.rangeColorPoints[point.interior]) {\n                this.rangeColorPoints[point.interior] = [];\n            }\n            else if (this.rangeColorPoints[point.interior] !== undefined) {\n                this.rangeColorPoints[point.interior].push(point);\n            }\n        }\n    };\n    SeriesBase.prototype.pushData = function (point, i) {\n        point.index = i;\n        point.yValue = point.y;\n        point.series = this;\n        // To find the min, max for the axis range.\n        this.xMin = Math.min(this.xMin, point.xValue);\n        this.xMax = Math.max(this.xMax, point.xValue);\n        this.xData.push(point.xValue);\n    };\n    /** @private */\n    SeriesBase.prototype.dataPoint = function (i, textMappingName, xName) {\n        this.points[i] = new Points();\n        var point = this.points[i];\n        var currentViewData = this.currentViewData[i];\n        var getObjectValueByMappingString = this.enableComplexProperty ? getValue : this.getObjectValue;\n        point.x = getObjectValueByMappingString(xName, currentViewData);\n        point.high = getObjectValueByMappingString(this.high, currentViewData);\n        point.low = getObjectValueByMappingString(this.low, currentViewData);\n        point.open = getObjectValueByMappingString(this.open, currentViewData);\n        point.close = getObjectValueByMappingString(this.close, currentViewData);\n        point.volume = getObjectValueByMappingString(this.volume, currentViewData);\n        point.interior = getObjectValueByMappingString(this.pointColorMapping, currentViewData);\n        if (this instanceof Series) {\n            if (this.errorBar.visible) {\n                point.errorBarColor = getObjectValueByMappingString(this.errorBar.errorBarColorMapping, currentViewData);\n                point.verticalError = typeof this.errorBar.verticalError == 'string' ? getObjectValueByMappingString(this.errorBar.verticalError, currentViewData) : this.errorBar.verticalError;\n                point.horizontalError = typeof this.errorBar.horizontalError == 'string' ? getObjectValueByMappingString(this.errorBar.horizontalError, currentViewData) : this.errorBar.horizontalError;\n                point.verticalNegativeError = typeof this.errorBar.verticalNegativeError == 'string' ? getObjectValueByMappingString(this.errorBar.verticalNegativeError, currentViewData) : this.errorBar.verticalNegativeError;\n                point.verticalPositiveError = typeof this.errorBar.verticalPositiveError == 'string' ? getObjectValueByMappingString(this.errorBar.verticalPositiveError, currentViewData) : this.errorBar.verticalPositiveError;\n                point.horizontalNegativeError = typeof this.errorBar.horizontalNegativeError == 'string' ? getObjectValueByMappingString(this.errorBar.horizontalNegativeError, currentViewData) : this.errorBar.horizontalNegativeError;\n                point.horizontalPositiveError = typeof this.errorBar.horizontalPositiveError == 'string' ? getObjectValueByMappingString(this.errorBar.horizontalPositiveError, currentViewData) : this.errorBar.horizontalPositiveError;\n            }\n            point.y = getObjectValueByMappingString(this.yName, currentViewData);\n            point.size = getObjectValueByMappingString(this.size, currentViewData);\n            point.text = getObjectValueByMappingString(textMappingName, currentViewData);\n            point.tooltip = getObjectValueByMappingString(this.tooltipMappingName, currentViewData);\n            if (this.isAdvancedColorSupported()) {\n                this.rangeColorName = this.colorName.length > 0 ? this.colorName : this.yName;\n                point.colorValue = getObjectValueByMappingString(this.rangeColorName, currentViewData);\n                point.interior = this.getPointFillColor(point.interior, point.colorValue);\n            }\n        }\n        return point;\n    };\n    SeriesBase.prototype.isAdvancedColorSupported = function () {\n        if (isNullOrUndefined(this.isAdvancedColor)) {\n            if (this.chart.rangeColorSettings && this.chart.rangeColorSettings.length > 0 &&\n                (this.chart.series[0].type === 'Column' || this.chart.series[0].type === 'Bar' ||\n                    this.chart.series[0].type === 'Scatter' || this.chart.series[0].type === 'Bubble')) {\n                this.isAdvancedColor = true;\n            }\n            else {\n                this.isAdvancedColor = false;\n            }\n        }\n        return this.isAdvancedColor;\n    };\n    SeriesBase.prototype.getPointFillColor = function (pointFill, value) {\n        var color = pointFill;\n        if (value && this.chart.rangeColorSettings && this.chart.rangeColorSettings.length > 0) {\n            for (var _i = 0, _a = this.chart.rangeColorSettings; _i < _a.length; _i++) {\n                var rangeMap = _a[_i];\n                if (value >= rangeMap.start && value <= rangeMap.end) {\n                    if (rangeMap.colors.length > 1) {\n                        color = getColorByValue(rangeMap, value);\n                    }\n                    else {\n                        color = rangeMap.colors[0];\n                    }\n                }\n            }\n        }\n        return color;\n    };\n    SeriesBase.prototype.getObjectValue = function (mappingName, data) {\n        return data[mappingName];\n    };\n    /**\n     * To set empty point value based on empty point mode\n     *\n     * @private\n     */\n    SeriesBase.prototype.setEmptyPoint = function (point, i) {\n        if (!this.findVisibility(point)) {\n            point.visible = true;\n            return null;\n        }\n        point.isEmpty = true;\n        var mode = this instanceof Series && point.isPointInRange ? this.emptyPointSettings.mode : 'Drop';\n        switch (mode) {\n            case 'Zero':\n                point.visible = true;\n                if (this instanceof Series && this.seriesType.indexOf('HighLow') > -1) {\n                    point.high = point.low = 0;\n                    if (this.seriesType.indexOf('HighLowOpenClose') > -1) {\n                        point.open = point.close = 0;\n                    }\n                }\n                else {\n                    point.y = point.yValue = this.yData[i] = 0;\n                }\n                break;\n            case 'Average':\n                if (this instanceof Series) {\n                    if (this.seriesType.indexOf('HighLow') > -1) {\n                        point.high = (isNullOrUndefined(point.high) || isNaN(+point.high)) ? this.getAverage(this.high, i) : point.high;\n                        point.low = (isNullOrUndefined(point.low) || isNaN(+point.low)) ? this.getAverage(this.low, i) : point.low;\n                        if (this.seriesType.indexOf('HighLowOpenClose') > -1) {\n                            point.open = (isNullOrUndefined(point.open) || isNaN(+point.open)) ? this.getAverage(this.open, i) : point.open;\n                            point.close = (isNullOrUndefined(point.close) || isNaN(+point.close)) ? this.getAverage(this.close, i) :\n                                point.close;\n                        }\n                    }\n                    else {\n                        point.y = point.yValue = this.yData[i] = this.getAverage(this.yName, i);\n                    }\n                }\n                point.visible = true;\n                break;\n            case 'Drop':\n            case 'Gap':\n                this.yData[i] = null;\n                point.visible = false;\n                break;\n        }\n    };\n    SeriesBase.prototype.findVisibility = function (point) {\n        var type = this instanceof Series ? this.seriesType : 'HighLowOpenClose';\n        var yValues;\n        var yAxisMin = this.yAxis.minimum;\n        var yAxisMax = this.yAxis.maximum;\n        switch (type) {\n            case 'XY':\n                if (this.chart.chartAreaType === 'PolarRadar' && ((!isNullOrUndefined(yAxisMin) && point.yValue < yAxisMin) ||\n                    (!isNullOrUndefined(yAxisMax) && point.yValue > yAxisMax))) {\n                    point.isPointInRange = false;\n                    return true;\n                }\n                this.setXYMinMax(point.yValue);\n                this.yData.push(point.yValue);\n                if (this instanceof Series && this.type === 'Bubble') {\n                    this.sizeMax = Math.max(this.sizeMax, (isNullOrUndefined(point.size) || isNaN(+point.size)) ? this.sizeMax\n                        : point.size);\n                }\n                return isNullOrUndefined(point.x) || (isNullOrUndefined(point.y) || isNaN(+point.y));\n            case 'HighLow':\n                this.setHiloMinMax(point.high, point.low);\n                return isNullOrUndefined(point.x) || (isNullOrUndefined(point.low) || isNaN(+point.low)) ||\n                    (isNullOrUndefined(point.high) || isNaN(+point.high));\n            case 'HighLowOpenClose':\n                this.setHiloMinMax(point.high, point.low);\n                return isNullOrUndefined(point.x) || (isNullOrUndefined(point.low) || isNaN(+point.low)) ||\n                    (isNullOrUndefined(point.open) || isNaN(+point.open)) || (isNullOrUndefined(point.close) || isNaN(+point.close))\n                    || (isNullOrUndefined(point.high) || isNaN(+point.high));\n            case 'BoxPlot':\n                yValues = (point.y || [null]).filter(function (value) {\n                    return !isNullOrUndefined(value) && !isNaN(value);\n                }).sort(function (a, b) {\n                    return a - b;\n                });\n                point.y = yValues;\n                this.yMin = Math.min(this.yMin, Math.min.apply(Math, yValues));\n                this.yMax = Math.max(this.yMax, Math.max.apply(Math, yValues));\n                return !yValues.length;\n        }\n    };\n    /**\n     * To get Y min max for the provided point seriesType XY\n     */\n    SeriesBase.prototype.setXYMinMax = function (yValue) {\n        var isLogAxis = (this.yAxis.valueType === 'Logarithmic' || this.xAxis.valueType === 'Logarithmic');\n        var isNegativeValue = yValue < 0 || this.yAxis.rangePadding === 'None';\n        var seriesMinY;\n        if (this.isRectTypeSeries && !setRange(this.yAxis)) {\n            seriesMinY = ((isLogAxis ? (yValue) : isNegativeValue ? yValue : 0));\n        }\n        else {\n            seriesMinY = yValue;\n        }\n        this.yMin = isLogAxis ?\n            Math.min(this.yMin, (isNullOrUndefined(seriesMinY) || isNaN(seriesMinY) || (seriesMinY === 0) ||\n                (seriesMinY.toString() === '0') || (seriesMinY.toString() === '')) ? this.yMin : seriesMinY) :\n            Math.min(this.yMin, (isNullOrUndefined(seriesMinY) || isNaN(seriesMinY)) ? this.yMin : seriesMinY);\n        this.yMax = Math.max(this.yMax, (isNullOrUndefined(yValue) || isNaN(yValue)) ? this.yMax : yValue);\n    };\n    /**\n     * To get Y min max for the provided point seriesType XY\n     */\n    SeriesBase.prototype.setHiloMinMax = function (high, low) {\n        this.yMin = Math.min(this.yMin, Math.min((isNullOrUndefined(low) || isNaN(low)) ? this.yMin : low, (isNullOrUndefined(high) || isNaN(high)) ? this.yMin : high));\n        this.yMax = Math.max(this.yMax, Math.max((isNullOrUndefined(low) || isNaN(low)) ? this.yMax : low, (isNullOrUndefined(high) || isNaN(high)) ? this.yMax : high));\n    };\n    /**\n     * Finds the type of the series\n     *\n     * @private\n     */\n    SeriesBase.prototype.getSeriesType = function () {\n        var type;\n        if (this instanceof Series) {\n            var seriesType = this.chart.chartAreaType === 'PolarRadar' ? this.drawType : this.type;\n            if (seriesType) {\n                switch (seriesType) {\n                    case 'RangeColumn':\n                    case 'RangeArea':\n                    case 'RangeStepArea':\n                    case 'SplineRangeArea':\n                    case 'Hilo':\n                        type = 'HighLow';\n                        break;\n                    case 'HiloOpenClose':\n                    case 'Candle':\n                        type = 'HighLowOpenClose';\n                        break;\n                    case 'BoxAndWhisker':\n                        type = 'BoxPlot';\n                        break;\n                    default:\n                        type = 'XY';\n                }\n            }\n        }\n        this.seriesType = type;\n    };\n    /** @private */\n    SeriesBase.prototype.pushCategoryData = function (point, index, pointX) {\n        if (!this.chart.tooltip.shared) {\n            if (!this.visible) {\n                return null;\n            }\n        }\n        if (!this.xAxis.isIndexed) {\n            if (this.xAxis.indexLabels[pointX] === undefined) {\n                this.xAxis.indexLabels[pointX] = this.xAxis.labels.length;\n                this.xAxis.labels.push(pointX);\n            }\n            point.xValue = this.xAxis.indexLabels[pointX];\n        }\n        else {\n            // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n            this.xAxis.labels[index] ? this.xAxis.labels[index] += ', ' + pointX :\n                this.xAxis.labels.push(pointX);\n            point.xValue = index;\n        }\n    };\n    /**\n     * To find average of given property\n     */\n    SeriesBase.prototype.getAverage = function (member, i, data) {\n        if (data === void 0) { data = this.currentViewData; }\n        var previous = data[i - 1] ? (data[i - 1][member] || 0) : 0;\n        var next = data[i + 1] ? (data[i + 1][member] || 0) : 0;\n        return (previous + next) / 2;\n    };\n    /**\n     * To find the control points for spline.\n     *\n     * @returns {void}\n     * @private\n     */\n    SeriesBase.prototype.refreshDataManager = function (chart) {\n        var _this = this;\n        this.chart = chart;\n        var dataSource;\n        var isAngular = 'isAngular';\n        if (chart[isAngular]) {\n            dataSource = Object.keys(this.dataSource).length ? this.dataSource : chart.dataSource;\n        }\n        else {\n            dataSource = this.dataSource || chart.dataSource;\n        }\n        if (!(dataSource instanceof DataManager) && isNullOrUndefined(this.query)) {\n            this.dataManagerSuccess({ result: dataSource, count: dataSource.length }, false);\n            return;\n        }\n        var dataManager = this.dataModule.getData(this.dataModule.generateQuery().requiresCount());\n        dataManager.then(function (e) { return _this.dataManagerSuccess(e); });\n    };\n    SeriesBase.prototype.dataManagerSuccess = function (e, isRemoteData) {\n        if (isRemoteData === void 0) { isRemoteData = true; }\n        this.currentViewData = e.count ? e.result : [];\n        this.chart.allowServerDataBinding = false;\n        if (this instanceof Series) {\n            if (this.chart.stockChart) {\n                this.chart.stockChart.series[this.index].localData = this.currentViewData;\n            }\n            var argsData = {\n                name: seriesRender, series: this, data: this.currentViewData, fill: this.interior\n            };\n            this.chart.trigger(seriesRender, argsData);\n            this.interior = argsData.fill;\n            this.currentViewData = argsData.data;\n        }\n        if (this.chart.stockChart && !(this instanceof Series)) {\n            this.currentViewData = this.chart.stockChart.findCurrentData(this.chart.stockChart.series[0].localData, this.chart.stockChart.series[0].xName);\n        }\n        this.processJsonData();\n        this.recordsCount = e.count;\n        this.refreshChart(isRemoteData);\n        this.currentViewData = null;\n    };\n    SeriesBase.prototype.refreshChart = function (isRemoteData) {\n        var chart = this.chart;\n        if (this instanceof Series) {\n            chart.visibleSeriesCount += isRemoteData ? 1 : 0;\n        }\n        chart.refreshTechnicalIndicator(this);\n        if (this instanceof Series && this.category !== 'TrendLine') {\n            for (var _i = 0, _a = this.trendlines; _i < _a.length; _i++) {\n                var trendline = _a[_i];\n                trendline.setDataSource(this, chart);\n            }\n        }\n        //if (chart.visibleSeries.length === (chart.visibleSeriesCount - chart.indicators.length)) {\n        if (chart.visibleSeries.length === (chart.visibleSeriesCount)) {\n            chart.refreshBound();\n            chart.trigger('loaded', { chart: chart.isBlazor ? {} : chart });\n            if (this.chart.stockChart && this.chart.stockChart.initialRender) {\n                this.chart.stockChart.initialRender = false;\n                this.chart.stockChart.stockChartDataManagerSuccess();\n            }\n        }\n        if (this instanceof Series) {\n            chart.visibleSeriesCount += isRemoteData ? 0 : 1;\n        }\n    };\n    __decorate([\n        Property('')\n    ], SeriesBase.prototype, \"xName\", void 0);\n    __decorate([\n        Property('')\n    ], SeriesBase.prototype, \"colorName\", void 0);\n    __decorate([\n        Property('')\n    ], SeriesBase.prototype, \"high\", void 0);\n    __decorate([\n        Property('')\n    ], SeriesBase.prototype, \"low\", void 0);\n    __decorate([\n        Property('')\n    ], SeriesBase.prototype, \"open\", void 0);\n    __decorate([\n        Property('')\n    ], SeriesBase.prototype, \"close\", void 0);\n    __decorate([\n        Property('')\n    ], SeriesBase.prototype, \"volume\", void 0);\n    __decorate([\n        Property('')\n    ], SeriesBase.prototype, \"pointColorMapping\", void 0);\n    __decorate([\n        Property(true)\n    ], SeriesBase.prototype, \"visible\", void 0);\n    __decorate([\n        Property(null)\n    ], SeriesBase.prototype, \"xAxisName\", void 0);\n    __decorate([\n        Property(null)\n    ], SeriesBase.prototype, \"yAxisName\", void 0);\n    __decorate([\n        Complex(null, Animation)\n    ], SeriesBase.prototype, \"animation\", void 0);\n    __decorate([\n        Property(null)\n    ], SeriesBase.prototype, \"fill\", void 0);\n    __decorate([\n        Property(1)\n    ], SeriesBase.prototype, \"width\", void 0);\n    __decorate([\n        Property('')\n    ], SeriesBase.prototype, \"dashArray\", void 0);\n    __decorate([\n        Property('')\n    ], SeriesBase.prototype, \"dataSource\", void 0);\n    __decorate([\n        Property()\n    ], SeriesBase.prototype, \"query\", void 0);\n    __decorate([\n        Collection([], ChartSegment)\n    ], SeriesBase.prototype, \"segments\", void 0);\n    __decorate([\n        Property('X')\n    ], SeriesBase.prototype, \"segmentAxis\", void 0);\n    __decorate([\n        Property(false)\n    ], SeriesBase.prototype, \"enableComplexProperty\", void 0);\n    return SeriesBase;\n}(ChildProperty));\nexport { SeriesBase };\n/**\n * Configures the series in charts.\n *\n * @public\n */\nvar Series = /** @class */ (function (_super) {\n    __extends(Series, _super);\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    function Series(parent, propName, defaultValue, isArray) {\n        var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n        _this.visibleSeriesCount = 0;\n        /** @private */\n        _this.category = 'Series';\n        /** @private */\n        _this.isRectSeries = false;\n        /** @private */\n        _this.drawPoints = [];\n        /** @private */\n        _this.lowDrawPoints = [];\n        /** @private */\n        _this.delayedAnimation = false;\n        /** @private */\n        _this.rangeColorName = _this.colorName.length > 0 ? _this.colorName : _this.yName;\n        return _this;\n    }\n    /**\n     * Refresh the axis label.\n     *\n     * @returns {void}\n     * @private\n     */\n    Series.prototype.refreshAxisLabel = function () {\n        if (this.xAxis.valueType !== 'Category') {\n            return null;\n        }\n        this.xAxis.labels = [];\n        this.xAxis.indexLabels = {};\n        for (var _i = 0, _a = this.xAxis.series; _i < _a.length; _i++) {\n            var item = _a[_i];\n            if (item.visible && item.category !== 'TrendLine') {\n                item.xMin = Infinity;\n                item.xMax = -Infinity;\n                for (var _b = 0, _c = item.points; _b < _c.length; _b++) {\n                    var point = _c[_b];\n                    item.pushCategoryData(point, point.index, point.x);\n                    item.xMin = Math.min(item.xMin, point.xValue);\n                    item.xMax = Math.max(item.xMax, point.xValue);\n                }\n            }\n        }\n    };\n    /**\n     * To get the series collection.\n     *\n     * @returns {void}\n     * @private\n     */\n    Series.prototype.findSeriesCollection = function (column, row, isStack) {\n        var seriesCollection = [];\n        for (var _i = 0, _a = row.axes; _i < _a.length; _i++) {\n            var rowAxis = _a[_i];\n            for (var _b = 0, _c = rowAxis.series; _b < _c.length; _b++) {\n                var rowSeries = _c[_b];\n                for (var _d = 0, _e = column.axes; _d < _e.length; _d++) {\n                    var axis = _e[_d];\n                    for (var _f = 0, _g = axis.series; _f < _g.length; _f++) {\n                        var series = _g[_f];\n                        if (series === rowSeries && series.visible && this.rectSeriesInChart(series, isStack)) {\n                            seriesCollection.push(series);\n                        }\n                    }\n                }\n            }\n        }\n        return seriesCollection;\n    };\n    /**\n     * To get the column type series.\n     *\n     * @returns {void}\n     * @private\n     */\n    Series.prototype.rectSeriesInChart = function (series, isStack) {\n        var type = (series.type).toLowerCase();\n        return (type.indexOf('column') !== -1 || type.indexOf('bar') !== -1 || type.indexOf('histogram') !== -1 ||\n            type.indexOf('hiloopenclose') !== -1 || type.indexOf('candle') !== -1 || type.indexOf('pareto') !== -1 ||\n            type.indexOf('hilo') !== -1 || series.drawType.indexOf('Column') !== -1 ||\n            type.indexOf('waterfall') !== -1 || type.indexOf('boxandwhisker') !== -1 || isStack);\n    };\n    /**\n     * To calculate the stacked values.\n     *\n     * @returns {void}\n     * @private\n     */\n    Series.prototype.calculateStackedValue = function (isStacking100, chart) {\n        for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n            var columnItem = _a[_i];\n            for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n                var item = _c[_b];\n                this.calculateStackingValues(this.findSeriesCollection(columnItem, item, true), isStacking100);\n            }\n        }\n    };\n    Series.prototype.calculateStackingValues = function (seriesCollection, isStacking100) {\n        var startValues;\n        var endValues;\n        var yValues = [];\n        var lastPositive = [];\n        var lastNegative = [];\n        var stackingGroup;\n        var lastValue;\n        var value;\n        var frequencies = [];\n        if (isStacking100) {\n            frequencies = this.findFrequencies(seriesCollection);\n        }\n        var groupingValues = [];\n        var visiblePoints = [];\n        for (var i = 0; i < seriesCollection.length; i++) {\n            var series = seriesCollection[i];\n            if (!groupingValues[series.stackingGroup]) {\n                groupingValues[series.stackingGroup] = [];\n                groupingValues[series.stackingGroup].push(series);\n            }\n            else if (groupingValues[series.stackingGroup] !== undefined) {\n                groupingValues[series.stackingGroup].push(series);\n            }\n        }\n        var keys = Object.keys(groupingValues);\n        for (var k = 0; k < keys.length; k++) {\n            var stackingSeies = [];\n            var stackedValues = [];\n            var seriesCollection_2 = groupingValues[keys[k]];\n            for (var _i = 0, seriesCollection_1 = seriesCollection_2; _i < seriesCollection_1.length; _i++) {\n                var series = seriesCollection_1[_i];\n                if (series.type.indexOf('Stacking') !== -1 || (series.drawType.indexOf('Stacking') !== -1 &&\n                    (series.chart.chartAreaType === 'PolarRadar'))) {\n                    stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' :\n                        (series.type.indexOf('StackingLine') !== -1) ? 'StackingLine100' : series.stackingGroup;\n                    if (!lastPositive[stackingGroup]) {\n                        lastPositive[stackingGroup] = [];\n                        lastNegative[stackingGroup] = [];\n                    }\n                    yValues = series.yData;\n                    startValues = [];\n                    endValues = [];\n                    stackingSeies.push(series);\n                    visiblePoints = getVisiblePoints(series);\n                    for (var j = 0, pointsLength = visiblePoints.length; j < pointsLength; j++) {\n                        lastValue = 0;\n                        value = +yValues[j]; // Fix for chart not rendering while y value is given as string issue\n                        if (lastPositive[stackingGroup][visiblePoints[j].xValue] === undefined) {\n                            lastPositive[stackingGroup][visiblePoints[j].xValue] = 0;\n                        }\n                        if (lastNegative[stackingGroup][visiblePoints[j].xValue] === undefined) {\n                            lastNegative[stackingGroup][visiblePoints[j].xValue] = 0;\n                        }\n                        if (isStacking100) {\n                            value = value / frequencies[stackingGroup][visiblePoints[j].xValue] * 100;\n                            value = !isNaN(value) ? value : 0;\n                            visiblePoints[j].percentage = +(value.toFixed(2));\n                        }\n                        else {\n                            stackedValues[j] = stackedValues[j] ? stackedValues[j] + Math.abs(value) : Math.abs(value);\n                        }\n                        if (value >= 0) {\n                            lastValue = lastPositive[stackingGroup][visiblePoints[j].xValue];\n                            lastPositive[stackingGroup][visiblePoints[j].xValue] += value;\n                        }\n                        else {\n                            lastValue = lastNegative[stackingGroup][visiblePoints[j].xValue];\n                            lastNegative[stackingGroup][visiblePoints[j].xValue] += value;\n                        }\n                        startValues.push(lastValue);\n                        endValues.push(value + lastValue);\n                        if (isStacking100 && (endValues[j] > 100)) {\n                            endValues[j] = 100;\n                        }\n                    }\n                    series.stackedValues = new StackValues(startValues, endValues);\n                    var isLogAxis = series.yAxis.valueType === 'Logarithmic';\n                    var isColumnBarType = (series.type.indexOf('Column') !== -1 || series.type.indexOf('Bar') !== -1);\n                    series.yMin = isLogAxis && isColumnBarType && series.yMin < 1 ? series.yMin : (series.yAxis.startFromZero && series.yAxis.rangePadding === 'Auto' && series.yMin >= 0) ? 0 : parseFloat((Math.min.apply(0, isStacking100 ? startValues : endValues)).toFixed(10));\n                    series.yMax = Math.max.apply(0, endValues);\n                    if (series.yMin > Math.min.apply(0, endValues)) {\n                        series.yMin = (isStacking100) ? -100 :\n                            isLogAxis && isColumnBarType && series.yMin < 1 ? series.yMin : Math.min.apply(0, endValues);\n                    }\n                    if (series.yMax < Math.max.apply(0, startValues)) {\n                        series.yMax = 0;\n                    }\n                }\n            }\n            this.findPercentageOfStacking(stackingSeies, stackedValues, isStacking100);\n        }\n    };\n    Series.prototype.findPercentageOfStacking = function (stackingSeies, values, isStacking100) {\n        for (var _i = 0, stackingSeies_1 = stackingSeies; _i < stackingSeies_1.length; _i++) {\n            var item = stackingSeies_1[_i];\n            if (isStacking100) {\n                return null;\n            }\n            for (var _a = 0, _b = getVisiblePoints(item); _a < _b.length; _a++) {\n                var point = _b[_a];\n                point.percentage = Math.abs(+(point.y / values[point.index] * 100).toFixed(2));\n            }\n        }\n    };\n    Series.prototype.findFrequencies = function (seriesCollection) {\n        var frequencies = [];\n        var stackingGroup;\n        var visiblePoints = [];\n        for (var _i = 0, seriesCollection_3 = seriesCollection; _i < seriesCollection_3.length; _i++) {\n            var series = seriesCollection_3[_i];\n            series.yAxis.isStack100 = series.type.indexOf('100') !== -1 ? true : false;\n            visiblePoints = getVisiblePoints(series);\n            if (series.type.indexOf('Stacking') !== -1) {\n                stackingGroup = (series.type.indexOf('StackingArea') !== -1) ? 'StackingArea100' :\n                    (series.type.indexOf('StackingLine') !== -1) ? 'StackingLine100' : series.stackingGroup;\n                if (!frequencies[stackingGroup]) {\n                    frequencies[stackingGroup] = [];\n                }\n                for (var j = 0, pointsLength = visiblePoints.length; j < pointsLength; j++) {\n                    if (frequencies[stackingGroup][visiblePoints[j].xValue] === undefined) {\n                        frequencies[stackingGroup][visiblePoints[j].xValue] = 0;\n                    }\n                    if (series.yData[j] > 0) {\n                        frequencies[stackingGroup][visiblePoints[j].xValue] += series.yData[j];\n                    }\n                    else {\n                        frequencies[stackingGroup][visiblePoints[j].xValue] -= series.yData[j];\n                    }\n                }\n            }\n        }\n        return frequencies;\n    };\n    /* private dataManagerFailure(e: { result: Object[] }): void {\n         this.currentViewData = [];\n         this.refreshChart();\n     }*/\n    /** @private */\n    Series.prototype.renderSeries = function (chart) {\n        if (this.chart.stockChart && this.xAxis.valueType === 'DateTimeCategory') {\n            for (var i = 0; i < this.points.length; i++) {\n                var index = this.xAxis.labels.indexOf(Date.parse(this.points[i].x.toString()).toString());\n                this.points[i].xValue = index;\n                if (chart.series.length > 1) {\n                    this.xData[i] = index;\n                    this.xMin = (this.xMin > index) ? index : this.xMin;\n                    this.xMax = (this.xMax < index) ? index : this.xMax;\n                }\n            }\n            if (this instanceof Series && this.type.indexOf('Spline') > -1) {\n                var isArea = this.type.indexOf('Area') > -1;\n                var isRange = this.type.indexOf('Range') > -1;\n                this.chart['spline' + (isArea ? isRange ? 'RangeArea' : 'Area' : '') + 'SeriesModule'].findSplinePoint(this);\n            }\n        }\n        var seriesType = firstToLowerCase(this.type);\n        seriesType = seriesType.replace('100', '');\n        if (chart[seriesType + 'SeriesModule']) {\n            if (this.category !== 'Indicator' && this.category !== 'TrendLine') {\n                this.createSeriesElements(chart);\n            }\n            this.visiblePoints = getVisiblePoints(this);\n            chart[seriesType + 'SeriesModule'].render(this, this.xAxis, this.yAxis, chart.requireInvertedAxis);\n            if (this.category !== 'Indicator') {\n                if (this.errorBar.visible) {\n                    this.chart.errorBarModule.render(this);\n                }\n                if (this.marker.dataLabel.visible) {\n                    chart.dataLabelModule.render(this, this.chart, this.marker.dataLabel);\n                }\n                this.appendSeriesElement(chart.seriesElements, chart);\n            }\n            if (!this.chart.enableCanvas) {\n                this.performAnimation(chart, seriesType, this.errorBar, this.marker, this.marker.dataLabel);\n            }\n        }\n    };\n    /**\n     * To create seris element.\n     *\n     * @returns {void}\n     * @private\n     */\n    Series.prototype.createSeriesElements = function (chart) {\n        if (this.category !== 'Indicator') {\n            var elementId = chart.element.id;\n            // 8 for extend border value 5 for extend size value\n            var explodeValue = this.marker.border.width + 8 + 5;\n            var render = (this.type === 'Bubble') || (!this.marker.visible && chart.tooltip.shared && chart.enableCanvas) ?\n                chart.svgRenderer : chart.renderer;\n            var index = this.index === undefined ? this.category : this.index;\n            var markerHeight = void 0;\n            var markerWidth = void 0;\n            var options = void 0;\n            if (this.type === 'Scatter' || this.drawType === 'Scatter') {\n                markerHeight = (this.marker.height + explodeValue) / 2;\n                markerWidth = (this.marker.width + explodeValue) / 2;\n            }\n            else {\n                markerHeight = 0;\n                markerWidth = 0;\n            }\n            if (chart.chartAreaType === 'PolarRadar') {\n                var markerMaxValue = (this.drawType === 'Scatter') ? Math.max(this.marker.width, this.marker.height) : 0;\n                options = new CircleOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, this.clipRect.width / 2 + this.clipRect.x, this.clipRect.height / 2 + this.clipRect.y, chart.radius + markerMaxValue);\n                this.clipRectElement = appendClipElement(chart.redraw, options, render, 'drawCircularClipPath');\n            }\n            else {\n                options = new RectOption(elementId + '_ChartSeriesClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n                    x: (this.xAxis.columnIndex === 0) ? -markerWidth : 0, y: (this.yAxis.rowIndex === chart.rows.length - 1) ? -markerHeight : 0,\n                    width: this.clipRect.width + (this.xAxis.columnIndex === chart.columns.length - 1 ? markerWidth * 2 : markerWidth),\n                    height: this.clipRect.height + (this.yAxis.rowIndex === 0 ? markerHeight * 2 : markerHeight)\n                });\n                this.clipRectElement = appendClipElement(chart.redraw, options, render);\n            }\n            var transform = chart.chartAreaType === 'Cartesian' ? 'translate(' + this.clipRect.x + ',' + (this.clipRect.y) + ')' : '';\n            this.symbolElement = null;\n            this.seriesElement = render.createGroup({\n                'id': elementId + 'SeriesGroup' + index,\n                'transform': transform,\n                'clip-path': 'url(#' + elementId + '_ChartSeriesClipRect_' + index + ')'\n            });\n            if (this.seriesElement) {\n                this.seriesElement.setAttribute('role', 'region');\n                this.seriesElement.setAttribute('aria-label', (this.name + ',' + this.type + ' series with ' + this.points.length + ' data points'));\n                this.seriesElement.setAttribute('aria-hidden', 'false');\n            }\n            if (!this.chart.enableCanvas || this.type === 'Bubble') {\n                this.seriesElement.setAttribute('tabindex', index === 0 ? '0' : !this.checkTabindex(chart.visibleSeries, index) ? '0' : '');\n                this.seriesElement.setAttribute('style', 'outline: none');\n                this.seriesElement.appendChild(this.clipRectElement);\n            }\n        }\n    };\n    Series.prototype.checkTabindex = function (visibleSeries, index) {\n        for (var i = 0; i < index; i++) {\n            if (visibleSeries[i].visible)\n                return true;\n        }\n        return false;\n    };\n    /**\n     * To append the series.\n     *\n     * @returns {void}\n     * @private\n     */\n    Series.prototype.appendSeriesElement = function (element, chart) {\n        var marker = this.marker;\n        var dataLabel = marker.dataLabel;\n        var redraw = chart.redraw;\n        if (this.category !== 'TrendLine') {\n            appendChildElement(chart.enableCanvas, chart.seriesElements, this.seriesElement, redraw);\n            var errorBar = this.errorBar;\n            if (errorBar.visible) {\n                if (chart.chartAreaType === 'PolarRadar') {\n                    appendChildElement(chart.enableCanvas, chart.seriesElements, this.seriesElement, redraw);\n                }\n                else {\n                    appendChildElement(chart.enableCanvas, chart.seriesElements, this.errorBarElement, redraw);\n                }\n            }\n        }\n        if (marker.visible && (chart.chartAreaType === 'Cartesian' ||\n            ((this.drawType !== 'Scatter') && chart.chartAreaType === 'PolarRadar')) && this.type !== 'Scatter' &&\n            this.type !== 'Bubble' && this.type !== 'Candle' && this.type !== 'Hilo' && this.type !== 'HiloOpenClose' && this.symbolElement) {\n            appendChildElement(chart.enableCanvas, chart.seriesElements, this.symbolElement, redraw);\n        }\n        if (dataLabel.visible && this.textElement) {\n            appendChildElement(chart.enableCanvas, chart.dataLabelElements, this.shapeElement, redraw);\n            appendChildElement(chart.enableCanvas, chart.dataLabelElements, this.textElement, redraw);\n        }\n        if (!chart.enableCanvas && chart.dataLabelElements.hasChildNodes()) {\n            chart.seriesElements.appendChild(chart.dataLabelElements);\n        }\n    };\n    /**\n     * To perform animation for chart series.\n     *\n     * @returns {void}\n     * @private\n     */\n    Series.prototype.performAnimation = function (chart, type, errorBar, marker, dataLabel) {\n        if (((this.animation.enable && animationMode != 'Disable') || animationMode === 'Enable') && chart.animateSeries && (!chart.stockChart || !chart.stockChart.isStockChartRendered)) {\n            chart[type + 'SeriesModule'].doAnimation(this);\n            if (errorBar.visible) {\n                chart.errorBarModule.doErrorBarAnimation(this);\n            }\n            if (marker.visible) {\n                chart.markerRender.doMarkerAnimation(this);\n            }\n            //to datalabel animation disabled for edge and IE\n            if (dataLabel.visible && Browser.info.name !== 'edge' && !Browser.isIE) {\n                chart.dataLabelModule.doDataLabelAnimation(this);\n            }\n        }\n    };\n    /**\n     * To set border color for empty point\n     *\n     * @private\n     */\n    Series.prototype.setPointColor = function (point, color) {\n        color = point.interior || color;\n        return point.isEmpty ? (this.emptyPointSettings.fill || color) : color;\n    };\n    /**\n     * To set border color for empty point\n     *\n     * @private\n     */\n    Series.prototype.setBorderColor = function (point, border) {\n        border.width = point.isEmpty ? (this.emptyPointSettings.border.width || border.width) : border.width;\n        border.color = point.isEmpty ? (this.emptyPointSettings.border.color || border.color) : border.color;\n        return border;\n    };\n    __decorate([\n        Property('')\n    ], Series.prototype, \"name\", void 0);\n    __decorate([\n        Property('')\n    ], Series.prototype, \"yName\", void 0);\n    __decorate([\n        Property('Line')\n    ], Series.prototype, \"drawType\", void 0);\n    __decorate([\n        Property(true)\n    ], Series.prototype, \"isClosed\", void 0);\n    __decorate([\n        Property(null)\n    ], Series.prototype, \"bearFillColor\", void 0);\n    __decorate([\n        Property(null)\n    ], Series.prototype, \"bullFillColor\", void 0);\n    __decorate([\n        Property(false)\n    ], Series.prototype, \"enableSolidCandles\", void 0);\n    __decorate([\n        Property('')\n    ], Series.prototype, \"size\", void 0);\n    __decorate([\n        Property(null)\n    ], Series.prototype, \"binInterval\", void 0);\n    __decorate([\n        Property(false)\n    ], Series.prototype, \"showNormalDistribution\", void 0);\n    __decorate([\n        Property('')\n    ], Series.prototype, \"stackingGroup\", void 0);\n    __decorate([\n        Complex({ color: null, width: 0 }, Border)\n    ], Series.prototype, \"border\", void 0);\n    __decorate([\n        Property(1)\n    ], Series.prototype, \"opacity\", void 0);\n    __decorate([\n        Property(0)\n    ], Series.prototype, \"zOrder\", void 0);\n    __decorate([\n        Property('')\n    ], Series.prototype, \"groupName\", void 0);\n    __decorate([\n        Property('Line')\n    ], Series.prototype, \"type\", void 0);\n    __decorate([\n        Complex(null, ErrorBarSettings)\n    ], Series.prototype, \"errorBar\", void 0);\n    __decorate([\n        Complex(null, MarkerSettings)\n    ], Series.prototype, \"marker\", void 0);\n    __decorate([\n        Complex(null, ParetoOptions)\n    ], Series.prototype, \"paretoOptions\", void 0);\n    __decorate([\n        Complex({}, DragSettings)\n    ], Series.prototype, \"dragSettings\", void 0);\n    __decorate([\n        Collection([], Trendline)\n    ], Series.prototype, \"trendlines\", void 0);\n    __decorate([\n        Property(true)\n    ], Series.prototype, \"enableTooltip\", void 0);\n    __decorate([\n        Property('')\n    ], Series.prototype, \"tooltipFormat\", void 0);\n    __decorate([\n        Property('')\n    ], Series.prototype, \"tooltipMappingName\", void 0);\n    __decorate([\n        Property('SeriesType')\n    ], Series.prototype, \"legendShape\", void 0);\n    __decorate([\n        Property('')\n    ], Series.prototype, \"legendImageUrl\", void 0);\n    __decorate([\n        Property(null)\n    ], Series.prototype, \"selectionStyle\", void 0);\n    __decorate([\n        Property(null)\n    ], Series.prototype, \"unSelectedStyle\", void 0);\n    __decorate([\n        Property(null)\n    ], Series.prototype, \"nonHighlightStyle\", void 0);\n    __decorate([\n        Property(1)\n    ], Series.prototype, \"minRadius\", void 0);\n    __decorate([\n        Property(3)\n    ], Series.prototype, \"maxRadius\", void 0);\n    __decorate([\n        Property('Natural')\n    ], Series.prototype, \"splineType\", void 0);\n    __decorate([\n        Property(0.5)\n    ], Series.prototype, \"cardinalSplineTension\", void 0);\n    __decorate([\n        Complex(null, EmptyPointSettings)\n    ], Series.prototype, \"emptyPointSettings\", void 0);\n    __decorate([\n        Property(true)\n    ], Series.prototype, \"showMean\", void 0);\n    __decorate([\n        Property('Normal')\n    ], Series.prototype, \"boxPlotMode\", void 0);\n    __decorate([\n        Property(null)\n    ], Series.prototype, \"columnWidth\", void 0);\n    __decorate([\n        Property(null)\n    ], Series.prototype, \"columnWidthInPixel\", void 0);\n    __decorate([\n        Property('Rectangle')\n    ], Series.prototype, \"columnFacet\", void 0);\n    __decorate([\n        Property(0)\n    ], Series.prototype, \"columnSpacing\", void 0);\n    __decorate([\n        Property('#C64E4A')\n    ], Series.prototype, \"negativeFillColor\", void 0);\n    __decorate([\n        Property('#4E81BC')\n    ], Series.prototype, \"summaryFillColor\", void 0);\n    __decorate([\n        Property()\n    ], Series.prototype, \"intermediateSumIndexes\", void 0);\n    __decorate([\n        Property()\n    ], Series.prototype, \"sumIndexes\", void 0);\n    __decorate([\n        Property('Left')\n    ], Series.prototype, \"step\", void 0);\n    __decorate([\n        Complex({ color: 'black', width: 2 }, Connector)\n    ], Series.prototype, \"connector\", void 0);\n    __decorate([\n        Complex(null, CornerRadius)\n    ], Series.prototype, \"cornerRadius\", void 0);\n    return Series;\n}(SeriesBase));\nexport { Series };\n","//! moment.js locale configuration\n//! locale : Arabic (Morocco) [ar-ma]\n//! author : ElFadili Yassine : https://github.com/ElFadiliY\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arMa = moment.defineLocale('ar-ma', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اثنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arMa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Konkani Latin script [gom-latn]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['thoddea sekondamni', 'thodde sekond'],\n            ss: [number + ' sekondamni', number + ' sekond'],\n            m: ['eka mintan', 'ek minut'],\n            mm: [number + ' mintamni', number + ' mintam'],\n            h: ['eka voran', 'ek vor'],\n            hh: [number + ' voramni', number + ' voram'],\n            d: ['eka disan', 'ek dis'],\n            dd: [number + ' disamni', number + ' dis'],\n            M: ['eka mhoinean', 'ek mhoino'],\n            MM: [number + ' mhoineamni', number + ' mhoine'],\n            y: ['eka vorsan', 'ek voros'],\n            yy: [number + ' vorsamni', number + ' vorsam'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomLatn = moment.defineLocale('gom-latn', {\n        months: {\n            standalone:\n                'Janer_Febrer_Mars_Abril_Mai_Jun_Julai_Agost_Setembr_Otubr_Novembr_Dezembr'.split(\n                    '_'\n                ),\n            format: 'Janerachea_Febrerachea_Marsachea_Abrilachea_Maiachea_Junachea_Julaiachea_Agostachea_Setembrachea_Otubrachea_Novembrachea_Dezembrachea'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'Jan._Feb._Mars_Abr._Mai_Jun_Jul._Ago._Set._Otu._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays: \"Aitar_Somar_Mongllar_Budhvar_Birestar_Sukrar_Son'var\".split('_'),\n        weekdaysShort: 'Ait._Som._Mon._Bud._Bre._Suk._Son.'.split('_'),\n        weekdaysMin: 'Ai_Sm_Mo_Bu_Br_Su_Sn'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [vazta]',\n            LTS: 'A h:mm:ss [vazta]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [vazta]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [vazta]',\n            llll: 'ddd, D MMM YYYY, A h:mm [vazta]',\n        },\n        calendar: {\n            sameDay: '[Aiz] LT',\n            nextDay: '[Faleam] LT',\n            nextWeek: '[Fuddlo] dddd[,] LT',\n            lastDay: '[Kal] LT',\n            lastWeek: '[Fattlo] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s adim',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'er' only applies to day of the month\n                case 'D':\n                    return number + 'er';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /rati|sokallim|donparam|sanje/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'rati') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'sokallim') {\n                return hour;\n            } else if (meridiem === 'donparam') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'sanje') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'rati';\n            } else if (hour < 12) {\n                return 'sokallim';\n            } else if (hour < 16) {\n                return 'donparam';\n            } else if (hour < 20) {\n                return 'sanje';\n            } else {\n                return 'rati';\n            }\n        },\n    });\n\n    return gomLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : French (Switzerland) [fr-ch]\n//! author : Gaspard Bucher : https://github.com/gaspard\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var frCh = moment.defineLocale('fr-ch', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return frCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (Australia) [en-au]\n//! author : Jared Morse : https://github.com/jarcoal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enAu = moment.defineLocale('en-au', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enAu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkish [tr]\n//! authors : Erhan Gundogan : https://github.com/erhangundogan,\n//!           Burak Yiğit Kaya: https://github.com/BYK\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inci\",\n        5: \"'inci\",\n        8: \"'inci\",\n        70: \"'inci\",\n        80: \"'inci\",\n        2: \"'nci\",\n        7: \"'nci\",\n        20: \"'nci\",\n        50: \"'nci\",\n        3: \"'üncü\",\n        4: \"'üncü\",\n        100: \"'üncü\",\n        6: \"'ncı\",\n        9: \"'uncu\",\n        10: \"'uncu\",\n        30: \"'uncu\",\n        60: \"'ıncı\",\n        90: \"'ıncı\",\n    };\n\n    var tr = moment.defineLocale('tr', {\n        months: 'Ocak_Şubat_Mart_Nisan_Mayıs_Haziran_Temmuz_Ağustos_Eylül_Ekim_Kasım_Aralık'.split(\n            '_'\n        ),\n        monthsShort: 'Oca_Şub_Mar_Nis_May_Haz_Tem_Ağu_Eyl_Eki_Kas_Ara'.split('_'),\n        weekdays: 'Pazar_Pazartesi_Salı_Çarşamba_Perşembe_Cuma_Cumartesi'.split(\n            '_'\n        ),\n        weekdaysShort: 'Paz_Pzt_Sal_Çar_Per_Cum_Cmt'.split('_'),\n        weekdaysMin: 'Pz_Pt_Sa_Ça_Pe_Cu_Ct'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'öö' : 'ÖÖ';\n            } else {\n                return isLower ? 'ös' : 'ÖS';\n            }\n        },\n        meridiemParse: /öö|ÖÖ|ös|ÖS/,\n        isPM: function (input) {\n            return input === 'ös' || input === 'ÖS';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[yarın saat] LT',\n            nextWeek: '[gelecek] dddd [saat] LT',\n            lastDay: '[dün] LT',\n            lastWeek: '[geçen] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s önce',\n            s: 'birkaç saniye',\n            ss: '%d saniye',\n            m: 'bir dakika',\n            mm: '%d dakika',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            w: 'bir hafta',\n            ww: '%d hafta',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir yıl',\n            yy: '%d yıl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'ıncı\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tr;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-param */\nimport { getPoint, withInRange, TransformToVisible } from '../../common/utils/helper';\nimport { PathOption, Rect } from '@syncfusion/ej2-svg-base';\nimport { LineBase } from './line-base';\n/**\n * `StackingLineSeries` module used to render the Stacking Line series.\n */\nvar StackingLineSeries = /** @class */ (function (_super) {\n    __extends(StackingLineSeries, _super);\n    function StackingLineSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Render the Stacking line series.\n     *\n     * @returns {void}\n     * @private\n     */\n    StackingLineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n        var polarType = series.chart.chartAreaType === 'PolarRadar';\n        var getCoordinate = polarType ? TransformToVisible : getPoint;\n        var direction = '';\n        var visiblePts = this.enableComplexProperty(series);\n        var pointsLength = visiblePts.length;\n        var stackedvalue = series.stackedValues;\n        var pointIndex;\n        var nextPointIndex;\n        var point1;\n        var point2;\n        for (var i = 0; i < pointsLength; i++) {\n            visiblePts[i].regions = [];\n            visiblePts[i].symbolLocations = [];\n            pointIndex = visiblePts[i].index;\n            if (visiblePts[i].visible && withInRange(visiblePts[i - 1], visiblePts[i], visiblePts[i + 1], series)) {\n                point1 = getCoordinate(visiblePts[i].xValue, stackedvalue.endValues[pointIndex], xAxis, yAxis, isInverted, series);\n                direction = direction.concat((i ? 'L' : 'M') + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n                visiblePts[i].symbolLocations.push(getCoordinate(visiblePts[i].xValue, stackedvalue.endValues[pointIndex], xAxis, yAxis, isInverted, series));\n                visiblePts[i].regions.push(new Rect(visiblePts[i].symbolLocations[0].x - series.marker.width, visiblePts[i].symbolLocations[0].y - series.marker.height, 2 * series.marker.width, 2 * series.marker.height));\n            }\n            else {\n                if (series.emptyPointSettings.mode !== 'Drop') {\n                    if (visiblePts[i + 1] && visiblePts[i + 1].visible) {\n                        nextPointIndex = visiblePts[i + 1].index;\n                        point1 = getCoordinate(visiblePts[i + 1].xValue, stackedvalue.endValues[nextPointIndex], xAxis, yAxis, isInverted, series);\n                        direction = direction.concat('M' + ' ' + (point1.x) + ' ' + (point1.y) + ' ');\n                    }\n                }\n            }\n        }\n        if (series.chart.chartAreaType === 'PolarRadar' && visiblePts.length > 1) {\n            point1 = { 'y': stackedvalue.endValues[0], 'x': series.points[0].xValue };\n            point2 = getCoordinate(point1.x, point1.y, xAxis, yAxis, isInverted, series);\n            direction += ('L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ');\n        }\n        var options = new PathOption(series.chart.element.id + '_Series_' + series.index, 'none', series.width, series.interior, series.opacity, series.dashArray, direction);\n        this.appendLinePath(options, series, '');\n        this.renderMarker(series);\n    };\n    /**\n     * Animates the series.\n     *\n     * @param  {Series} series - Defines the series to animate.\n     * @returns {void}\n     */\n    StackingLineSeries.prototype.doAnimation = function (series) {\n        var option = series.animation;\n        this.doLinearAnimation(series, option);\n    };\n    /**\n     * To destroy the stacking line.\n     *\n     * @returns {void}\n     * @private\n     */\n    StackingLineSeries.prototype.destroy = function () {\n        /**\n         * Destroy method calling here\n         */\n    };\n    /**\n     * Get module name.\n     */\n    StackingLineSeries.prototype.getModuleName = function () {\n        /**\n         * Returns the module name of the series\n         */\n        return 'StackingLineSeries';\n    };\n    return StackingLineSeries;\n}(LineBase));\nexport { StackingLineSeries };\n","//! moment.js locale configuration\n//! locale : Danish [da]\n//! author : Ulrik Nielsen : https://github.com/mrbase\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var da = moment.defineLocale('da', {\n        months: 'januar_februar_marts_april_maj_juni_juli_august_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'søn_man_tir_ons_tor_fre_lør'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd [d.] D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'på dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[i] dddd[s kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'få sekunder',\n            ss: '%d sekunder',\n            m: 'et minut',\n            mm: '%d minutter',\n            h: 'en time',\n            hh: '%d timer',\n            d: 'en dag',\n            dd: '%d dage',\n            M: 'en måned',\n            MM: '%d måneder',\n            y: 'et år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return da;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tagalog (Philippines) [tl-ph]\n//! author : Dan Hagman : https://github.com/hagmandan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tlPh = moment.defineLocale('tl-ph', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tlPh;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, Property, Complex, Collection } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../../common/model/base';\n/**\n * Configures the Annotation for chart.\n */\nvar ChartAnnotationSettings = /** @class */ (function (_super) {\n    __extends(ChartAnnotationSettings, _super);\n    function ChartAnnotationSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('0')\n    ], ChartAnnotationSettings.prototype, \"x\", void 0);\n    __decorate([\n        Property('0')\n    ], ChartAnnotationSettings.prototype, \"y\", void 0);\n    __decorate([\n        Property(null)\n    ], ChartAnnotationSettings.prototype, \"content\", void 0);\n    __decorate([\n        Property('Center')\n    ], ChartAnnotationSettings.prototype, \"horizontalAlignment\", void 0);\n    __decorate([\n        Property('Pixel')\n    ], ChartAnnotationSettings.prototype, \"coordinateUnits\", void 0);\n    __decorate([\n        Property('Chart')\n    ], ChartAnnotationSettings.prototype, \"region\", void 0);\n    __decorate([\n        Property('Middle')\n    ], ChartAnnotationSettings.prototype, \"verticalAlignment\", void 0);\n    __decorate([\n        Property(null)\n    ], ChartAnnotationSettings.prototype, \"xAxisName\", void 0);\n    __decorate([\n        Property(null)\n    ], ChartAnnotationSettings.prototype, \"yAxisName\", void 0);\n    __decorate([\n        Property(null)\n    ], ChartAnnotationSettings.prototype, \"description\", void 0);\n    return ChartAnnotationSettings;\n}(ChildProperty));\nexport { ChartAnnotationSettings };\n/**\n * label border properties.\n */\nvar LabelBorder = /** @class */ (function (_super) {\n    __extends(LabelBorder, _super);\n    function LabelBorder() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('')\n    ], LabelBorder.prototype, \"color\", void 0);\n    __decorate([\n        Property(1)\n    ], LabelBorder.prototype, \"width\", void 0);\n    __decorate([\n        Property('Rectangle')\n    ], LabelBorder.prototype, \"type\", void 0);\n    return LabelBorder;\n}(ChildProperty));\nexport { LabelBorder };\n/**\n * categories for multi level labels\n */\nvar MultiLevelCategories = /** @class */ (function (_super) {\n    __extends(MultiLevelCategories, _super);\n    function MultiLevelCategories() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(null)\n    ], MultiLevelCategories.prototype, \"start\", void 0);\n    __decorate([\n        Property(null)\n    ], MultiLevelCategories.prototype, \"end\", void 0);\n    __decorate([\n        Property('')\n    ], MultiLevelCategories.prototype, \"text\", void 0);\n    __decorate([\n        Property(null)\n    ], MultiLevelCategories.prototype, \"maximumTextWidth\", void 0);\n    __decorate([\n        Property(null)\n    ], MultiLevelCategories.prototype, \"customAttributes\", void 0);\n    __decorate([\n        Property('')\n    ], MultiLevelCategories.prototype, \"type\", void 0);\n    return MultiLevelCategories;\n}(ChildProperty));\nexport { MultiLevelCategories };\n/**\n * Strip line properties\n */\nvar StripLineSettings = /** @class */ (function (_super) {\n    __extends(StripLineSettings, _super);\n    function StripLineSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(true)\n    ], StripLineSettings.prototype, \"visible\", void 0);\n    __decorate([\n        Property(false)\n    ], StripLineSettings.prototype, \"startFromAxis\", void 0);\n    __decorate([\n        Property(null)\n    ], StripLineSettings.prototype, \"start\", void 0);\n    __decorate([\n        Property(null)\n    ], StripLineSettings.prototype, \"end\", void 0);\n    __decorate([\n        Property(null)\n    ], StripLineSettings.prototype, \"size\", void 0);\n    __decorate([\n        Property('#808080')\n    ], StripLineSettings.prototype, \"color\", void 0);\n    __decorate([\n        Property(null)\n    ], StripLineSettings.prototype, \"dashArray\", void 0);\n    __decorate([\n        Property('Auto')\n    ], StripLineSettings.prototype, \"sizeType\", void 0);\n    __decorate([\n        Property(false)\n    ], StripLineSettings.prototype, \"isRepeat\", void 0);\n    __decorate([\n        Property(null)\n    ], StripLineSettings.prototype, \"repeatEvery\", void 0);\n    __decorate([\n        Property(null)\n    ], StripLineSettings.prototype, \"repeatUntil\", void 0);\n    __decorate([\n        Property(false)\n    ], StripLineSettings.prototype, \"isSegmented\", void 0);\n    __decorate([\n        Property(null)\n    ], StripLineSettings.prototype, \"segmentStart\", void 0);\n    __decorate([\n        Property(null)\n    ], StripLineSettings.prototype, \"segmentEnd\", void 0);\n    __decorate([\n        Property(null)\n    ], StripLineSettings.prototype, \"segmentAxisName\", void 0);\n    __decorate([\n        Complex({ color: 'transparent', width: 1 }, Border)\n    ], StripLineSettings.prototype, \"border\", void 0);\n    __decorate([\n        Property('')\n    ], StripLineSettings.prototype, \"text\", void 0);\n    __decorate([\n        Property(null)\n    ], StripLineSettings.prototype, \"rotation\", void 0);\n    __decorate([\n        Property('Middle')\n    ], StripLineSettings.prototype, \"horizontalAlignment\", void 0);\n    __decorate([\n        Property('Middle')\n    ], StripLineSettings.prototype, \"verticalAlignment\", void 0);\n    __decorate([\n        Complex({ size: '12px', color: null, fontStyle: 'Normal', fontWeight: '400', fontFamily: null }, Font)\n    ], StripLineSettings.prototype, \"textStyle\", void 0);\n    __decorate([\n        Property('Behind')\n    ], StripLineSettings.prototype, \"zIndex\", void 0);\n    __decorate([\n        Property(1)\n    ], StripLineSettings.prototype, \"opacity\", void 0);\n    __decorate([\n        Property('')\n    ], StripLineSettings.prototype, \"imageUrl\", void 0);\n    return StripLineSettings;\n}(ChildProperty));\nexport { StripLineSettings };\n/**\n * MultiLevelLabels properties\n */\nvar MultiLevelLabels = /** @class */ (function (_super) {\n    __extends(MultiLevelLabels, _super);\n    function MultiLevelLabels() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('Center')\n    ], MultiLevelLabels.prototype, \"alignment\", void 0);\n    __decorate([\n        Property('Wrap')\n    ], MultiLevelLabels.prototype, \"overflow\", void 0);\n    __decorate([\n        Complex({ fontFamily: null, size: \"12px\", fontStyle: 'Normal', fontWeight: '400', color: null }, Font)\n    ], MultiLevelLabels.prototype, \"textStyle\", void 0);\n    __decorate([\n        Complex({ color: null, width: 1, type: 'Rectangle' }, LabelBorder)\n    ], MultiLevelLabels.prototype, \"border\", void 0);\n    __decorate([\n        Collection([], MultiLevelCategories)\n    ], MultiLevelLabels.prototype, \"categories\", void 0);\n    return MultiLevelLabels;\n}(ChildProperty));\nexport { MultiLevelLabels };\n/**\n * Specifies range for scrollbarSettings property\n *\n * @public\n */\nvar ScrollbarSettingsRange = /** @class */ (function (_super) {\n    __extends(ScrollbarSettingsRange, _super);\n    function ScrollbarSettingsRange() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(null)\n    ], ScrollbarSettingsRange.prototype, \"minimum\", void 0);\n    __decorate([\n        Property(null)\n    ], ScrollbarSettingsRange.prototype, \"maximum\", void 0);\n    return ScrollbarSettingsRange;\n}(ChildProperty));\nexport { ScrollbarSettingsRange };\n/**\n * Scrollbar Settings Properties for Lazy Loading\n */\nvar ScrollbarSettings = /** @class */ (function (_super) {\n    __extends(ScrollbarSettings, _super);\n    function ScrollbarSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(false)\n    ], ScrollbarSettings.prototype, \"enable\", void 0);\n    __decorate([\n        Property(null)\n    ], ScrollbarSettings.prototype, \"pointsLength\", void 0);\n    __decorate([\n        Complex({}, ScrollbarSettingsRange)\n    ], ScrollbarSettings.prototype, \"range\", void 0);\n    __decorate([\n        Property(null)\n    ], ScrollbarSettings.prototype, \"trackColor\", void 0);\n    __decorate([\n        Property(0)\n    ], ScrollbarSettings.prototype, \"scrollbarRadius\", void 0);\n    __decorate([\n        Property(null)\n    ], ScrollbarSettings.prototype, \"scrollbarColor\", void 0);\n    __decorate([\n        Property(0)\n    ], ScrollbarSettings.prototype, \"trackRadius\", void 0);\n    __decorate([\n        Property(null)\n    ], ScrollbarSettings.prototype, \"gripColor\", void 0);\n    __decorate([\n        Property(16)\n    ], ScrollbarSettings.prototype, \"height\", void 0);\n    __decorate([\n        Property(true)\n    ], ScrollbarSettings.prototype, \"enableZoom\", void 0);\n    return ScrollbarSettings;\n}(ChildProperty));\nexport { ScrollbarSettings };\n","//! moment.js locale configuration\n//! locale : Basque [eu]\n//! author : Eneko Illarramendi : https://github.com/eillarra\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eu = moment.defineLocale('eu', {\n        months: 'urtarrila_otsaila_martxoa_apirila_maiatza_ekaina_uztaila_abuztua_iraila_urria_azaroa_abendua'.split(\n            '_'\n        ),\n        monthsShort:\n            'urt._ots._mar._api._mai._eka._uzt._abu._ira._urr._aza._abe.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'igandea_astelehena_asteartea_asteazkena_osteguna_ostirala_larunbata'.split(\n                '_'\n            ),\n        weekdaysShort: 'ig._al._ar._az._og._ol._lr.'.split('_'),\n        weekdaysMin: 'ig_al_ar_az_og_ol_lr'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY[ko] MMMM[ren] D[a]',\n            LLL: 'YYYY[ko] MMMM[ren] D[a] HH:mm',\n            LLLL: 'dddd, YYYY[ko] MMMM[ren] D[a] HH:mm',\n            l: 'YYYY-M-D',\n            ll: 'YYYY[ko] MMM D[a]',\n            lll: 'YYYY[ko] MMM D[a] HH:mm',\n            llll: 'ddd, YYYY[ko] MMM D[a] HH:mm',\n        },\n        calendar: {\n            sameDay: '[gaur] LT[etan]',\n            nextDay: '[bihar] LT[etan]',\n            nextWeek: 'dddd LT[etan]',\n            lastDay: '[atzo] LT[etan]',\n            lastWeek: '[aurreko] dddd LT[etan]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s barru',\n            past: 'duela %s',\n            s: 'segundo batzuk',\n            ss: '%d segundo',\n            m: 'minutu bat',\n            mm: '%d minutu',\n            h: 'ordu bat',\n            hh: '%d ordu',\n            d: 'egun bat',\n            dd: '%d egun',\n            M: 'hilabete bat',\n            MM: '%d hilabete',\n            y: 'urte bat',\n            yy: '%d urte',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Thai [th]\n//! author : Kridsada Thanabulpong : https://github.com/sirn\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var th = moment.defineLocale('th', {\n        months: 'มกราคม_กุมภาพันธ์_มีนาคม_เมษายน_พฤษภาคม_มิถุนายน_กรกฎาคม_สิงหาคม_กันยายน_ตุลาคม_พฤศจิกายน_ธันวาคม'.split(\n            '_'\n        ),\n        monthsShort:\n            'ม.ค._ก.พ._มี.ค._เม.ย._พ.ค._มิ.ย._ก.ค._ส.ค._ก.ย._ต.ค._พ.ย._ธ.ค.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัสบดี_ศุกร์_เสาร์'.split('_'),\n        weekdaysShort: 'อาทิตย์_จันทร์_อังคาร_พุธ_พฤหัส_ศุกร์_เสาร์'.split('_'), // yes, three characters difference\n        weekdaysMin: 'อา._จ._อ._พ._พฤ._ศ._ส.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY เวลา H:mm',\n            LLLL: 'วันddddที่ D MMMM YYYY เวลา H:mm',\n        },\n        meridiemParse: /ก่อนเที่ยง|หลังเที่ยง/,\n        isPM: function (input) {\n            return input === 'หลังเที่ยง';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ก่อนเที่ยง';\n            } else {\n                return 'หลังเที่ยง';\n            }\n        },\n        calendar: {\n            sameDay: '[วันนี้ เวลา] LT',\n            nextDay: '[พรุ่งนี้ เวลา] LT',\n            nextWeek: 'dddd[หน้า เวลา] LT',\n            lastDay: '[เมื่อวานนี้ เวลา] LT',\n            lastWeek: '[วัน]dddd[ที่แล้ว เวลา] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'อีก %s',\n            past: '%sที่แล้ว',\n            s: 'ไม่กี่วินาที',\n            ss: '%d วินาที',\n            m: '1 นาที',\n            mm: '%d นาที',\n            h: '1 ชั่วโมง',\n            hh: '%d ชั่วโมง',\n            d: '1 วัน',\n            dd: '%d วัน',\n            w: '1 สัปดาห์',\n            ww: '%d สัปดาห์',\n            M: '1 เดือน',\n            MM: '%d เดือน',\n            y: '1 ปี',\n            yy: '%d ปี',\n        },\n    });\n\n    return th;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable jsdoc/require-param */\nimport { Double } from '../axis/double-axis';\n/**\n * Common axis classes\n *\n * @private\n */\nvar NiceInterval = /** @class */ (function (_super) {\n    __extends(NiceInterval, _super);\n    function NiceInterval() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Method to calculate numeric datetime interval.\n     */\n    NiceInterval.prototype.calculateDateTimeNiceInterval = function (axis, size, start, end, isChart) {\n        if (isChart === void 0) { isChart = true; }\n        var oneDay = 24 * 60 * 60 * 1000;\n        var startDate = new Date(start);\n        var endDate = new Date(end);\n        //var axisInterval ;\n        var totalDays = (Math.abs((startDate.getTime() - endDate.getTime()) / (oneDay)));\n        var interval;\n        axis.actualIntervalType = axis.intervalType;\n        var type = axis.intervalType;\n        switch (type) {\n            case 'Years':\n                interval = this.calculateNumericNiceInterval(axis, totalDays / 365, size);\n                break;\n            case 'Quarter':\n                interval = this.calculateNumericNiceInterval(axis, (totalDays / 365) * 4, size);\n                break;\n            case 'Months':\n                interval = this.calculateNumericNiceInterval(axis, totalDays / 30, size);\n                break;\n            case 'Weeks':\n                interval = this.calculateNumericNiceInterval(axis, totalDays / 7, size);\n                break;\n            case 'Days':\n                interval = this.calculateNumericNiceInterval(axis, totalDays, size);\n                break;\n            case 'Hours':\n                interval = this.calculateNumericNiceInterval(axis, totalDays * 24, size);\n                break;\n            case 'Minutes':\n                interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60, size);\n                break;\n            case 'Seconds':\n                interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60 * 60, size);\n                break;\n            case 'Auto':\n                interval = this.calculateNumericNiceInterval(axis, totalDays / 365, size);\n                if (interval >= 1) {\n                    axis.actualIntervalType = 'Years';\n                    return interval;\n                }\n                interval = this.calculateNumericNiceInterval(axis, totalDays / 30, size);\n                if (interval >= 1) {\n                    axis.actualIntervalType = 'Months';\n                    return interval;\n                }\n                interval = this.calculateNumericNiceInterval(axis, totalDays / 7, size);\n                if (interval >= 1 && !isChart) {\n                    axis.actualIntervalType = 'Weeks';\n                    return interval;\n                }\n                interval = this.calculateNumericNiceInterval(axis, totalDays, size);\n                if (interval >= 1) {\n                    axis.actualIntervalType = 'Days';\n                    return interval;\n                }\n                interval = this.calculateNumericNiceInterval(axis, totalDays * 24, size);\n                if (interval >= 1) {\n                    axis.actualIntervalType = 'Hours';\n                    return interval;\n                }\n                interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60, size);\n                if (interval >= 1) {\n                    axis.actualIntervalType = 'Minutes';\n                    return interval;\n                }\n                interval = this.calculateNumericNiceInterval(axis, totalDays * 24 * 60 * 60, size);\n                axis.actualIntervalType = 'Seconds';\n                return interval;\n        }\n        return interval;\n    };\n    /**\n     * To get the skeleton for the DateTime axis.\n     *\n     * @returns {string} skeleton format\n     * @private\n     */\n    NiceInterval.prototype.getSkeleton = function (axis, currentValue, previousValue, isBlazor) {\n        var skeleton;\n        var intervalType = axis.actualIntervalType;\n        if (axis.skeleton) {\n            return axis.skeleton;\n        }\n        if (intervalType === 'Years') {\n            if (isBlazor) {\n                skeleton = axis.isChart ? (axis.valueType === 'DateTime' ? 'y' : 'y') : 'y';\n            }\n            else {\n                skeleton = axis.isChart ? ((axis.valueType === 'DateTime' && axis.isIntervalInDecimal) ? 'y' : 'yMMM') : 'y';\n            }\n        }\n        else if (intervalType === 'Quarter') {\n            skeleton = isBlazor ? 'y' : 'yMMM';\n        }\n        else if (intervalType === 'Months') {\n            if (isBlazor) {\n                skeleton = axis.isChart ? 'm' : 'm';\n            }\n            else {\n                skeleton = axis.isChart ? 'MMMd' : 'MMM';\n            }\n        }\n        else if (intervalType === 'Weeks') {\n            skeleton = isBlazor ? 'm' : 'MEd';\n        }\n        else if (intervalType === 'Days') {\n            if (isBlazor) {\n                skeleton = 'd';\n            }\n            else {\n                skeleton = axis.isChart ? (axis.valueType === 'DateTime' ? 'MMMd' : 'yMd') : 'MMMd';\n            }\n        }\n        else if (intervalType === 'Hours') {\n            if (isBlazor) {\n                skeleton = 't';\n            }\n            else {\n                skeleton = axis.isChart ? (axis.valueType === 'DateTime' ? 'Hm' : 'EHm') : 'h';\n            }\n        }\n        else if (intervalType === 'Minutes') {\n            if (isBlazor) {\n                skeleton = 'T';\n            }\n            else {\n                skeleton = axis.isChart ? 'Hms' : 'hm';\n            }\n        }\n        else {\n            if (isBlazor) {\n                skeleton = 'T';\n            }\n            else {\n                skeleton = axis.isChart ? 'Hms' : 'hms';\n            }\n        }\n        return skeleton;\n    };\n    /**\n     * Find label format for axis\n     *\n     * @param {Axis} axis axis\n     * @param {number} currentValue currentValue\n     * @param {number} previousValue previousValue\n     * @private\n     */\n    NiceInterval.prototype.findCustomFormats = function (axis, currentValue, previousValue) {\n        var labelFormat = axis.labelFormat ? axis.labelFormat : '';\n        if (axis.isChart && !axis.skeleton && axis.actualIntervalType === 'Months' && !labelFormat) {\n            labelFormat = axis.valueType === 'DateTime' ? 'MMM yyyy' : 'yMMM';\n        }\n        return labelFormat;\n    };\n    return NiceInterval;\n}(Double));\nexport { NiceInterval };\n","//! moment.js locale configuration\n//! locale : Serbian Cyrillic [sr-cyrl]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['секунда', 'секунде', 'секунди'],\n            m: ['један минут', 'једног минута'],\n            mm: ['минут', 'минута', 'минута'],\n            h: ['један сат', 'једног сата'],\n            hh: ['сат', 'сата', 'сати'],\n            d: ['један дан', 'једног дана'],\n            dd: ['дан', 'дана', 'дана'],\n            M: ['један месец', 'једног месеца'],\n            MM: ['месец', 'месеца', 'месеци'],\n            y: ['једну годину', 'једне године'],\n            yy: ['годину', 'године', 'година'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'једна година';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'годину') {\n                return number + ' година';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    var srCyrl = moment.defineLocale('sr-cyrl', {\n        months: 'јануар_фебруар_март_април_мај_јун_јул_август_септембар_октобар_новембар_децембар'.split(\n            '_'\n        ),\n        monthsShort:\n            'јан._феб._мар._апр._мај_јун_јул_авг._сеп._окт._нов._дец.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'недеља_понедељак_уторак_среда_четвртак_петак_субота'.split('_'),\n        weekdaysShort: 'нед._пон._уто._сре._чет._пет._суб.'.split('_'),\n        weekdaysMin: 'не_по_ут_ср_че_пе_су'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[данас у] LT',\n            nextDay: '[сутра у] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[у] [недељу] [у] LT';\n                    case 3:\n                        return '[у] [среду] [у] LT';\n                    case 6:\n                        return '[у] [суботу] [у] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[у] dddd [у] LT';\n                }\n            },\n            lastDay: '[јуче у] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[прошле] [недеље] [у] LT',\n                    '[прошлог] [понедељка] [у] LT',\n                    '[прошлог] [уторка] [у] LT',\n                    '[прошле] [среде] [у] LT',\n                    '[прошлог] [четвртка] [у] LT',\n                    '[прошлог] [петка] [у] LT',\n                    '[прошле] [суботе] [у] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пре %s',\n            s: 'неколико секунди',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: translator.translate,\n            dd: translator.translate,\n            M: translator.translate,\n            MM: translator.translate,\n            y: translator.translate,\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return srCyrl;\n\n})));\n","/* eslint-disable no-trailing-spaces */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-param */\nimport { getAnimationFunction, pathAnimation, getElement } from '../../common/utils/helper';\nimport { Rect } from '@syncfusion/ej2-svg-base';\nimport { Animation, animationMode, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Base for line type series.\n */\nvar LineBase = /** @class */ (function () {\n    /** @private */\n    function LineBase(chartModule) {\n        this.chart = chartModule;\n    }\n    /**\n     * To improve the chart performance.\n     *\n     * @returns {void}\n     * @private\n     */\n    LineBase.prototype.enableComplexProperty = function (series) {\n        var tempPoints = [];\n        var tempPoints2 = [];\n        var xVisibleRange = series.xAxis.visibleRange;\n        var yVisibleRange = series.yAxis.visibleRange;\n        var seriesPoints = series.points;\n        var areaBounds = series.clipRect;\n        var xTolerance = Math.abs(xVisibleRange.delta / areaBounds.width);\n        var yTolerance = Math.abs(yVisibleRange.delta / areaBounds.height);\n        var prevXValue = (seriesPoints[0] && seriesPoints[0].xValue > xTolerance) ? 0 : xTolerance;\n        var prevYValue = (seriesPoints[0] && seriesPoints[0].y > yTolerance) ? 0 : yTolerance;\n        var xVal = 0;\n        var yVal = 0;\n        for (var _i = 0, seriesPoints_1 = seriesPoints; _i < seriesPoints_1.length; _i++) {\n            var currentPoint = seriesPoints_1[_i];\n            currentPoint.symbolLocations = [];\n            xVal = currentPoint.xValue ? currentPoint.xValue : xVisibleRange.min;\n            yVal = currentPoint.yValue ? currentPoint.yValue : yVisibleRange.min;\n            if (Math.abs(prevXValue - xVal) >= xTolerance || Math.abs(prevYValue - yVal) >= yTolerance) {\n                tempPoints.push(currentPoint);\n                prevXValue = xVal;\n                prevYValue = yVal;\n            }\n        }\n        var tempPoint;\n        for (var i = 0; i < tempPoints.length; i++) {\n            tempPoint = tempPoints[i];\n            if (isNullOrUndefined(tempPoint.x) || (series.category === 'Indicator' && (isNaN(tempPoint.xValue) || isNaN(tempPoint.yValue)))) {\n                continue;\n            }\n            else {\n                tempPoints2.push(tempPoint);\n            }\n        }\n        return tempPoints2;\n    };\n    /**\n     * To generate the line path direction.\n     *\n     * @param {Points} firstPoint firstPoint\n     * @param {Points} secondPoint secondPoint\n     * @param {Series} series series\n     * @param {boolean} isInverted isInverted\n     * @param {Function} getPointLocation getPointLocation\n     * @param {string} startPoint startPoint\n     */\n    LineBase.prototype.getLineDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation, startPoint) {\n        var direction = '';\n        if (firstPoint != null) {\n            var point1 = getPointLocation(firstPoint.xValue, firstPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n            var point2 = getPointLocation(secondPoint.xValue, secondPoint.yValue, series.xAxis, series.yAxis, isInverted, series);\n            direction = startPoint + ' ' + (point1.x) + ' ' + (point1.y) + ' ' +\n                'L' + ' ' + (point2.x) + ' ' + (point2.y) + ' ';\n        }\n        return direction;\n    };\n    /**\n     * To append the line path.\n     *\n     * @returns {void}\n     * @private\n     */\n    LineBase.prototype.appendLinePath = function (options, series, clipRect) {\n        var element = getElement(options.id);\n        var chart = series.chart;\n        var previousDirection = element ? element.getAttribute('d') : null;\n        var htmlObject = series.chart.renderer.drawPath(options, new Int32Array([series.clipRect.x, series.clipRect.y]));\n        if (htmlObject) {\n            htmlObject.setAttribute('clip-path', clipRect);\n        }\n        series.pathElement = htmlObject;\n        if (!series.chart.enableCanvas) {\n            series.seriesElement.appendChild(htmlObject);\n        }\n        series.isRectSeries = false;\n        pathAnimation(element, options.d, series.chart.redraw, previousDirection, chart.duration);\n    };\n    /**\n     * To render the marker for the series.\n     *\n     * @returns {void}\n     * @private\n     */\n    LineBase.prototype.renderMarker = function (series) {\n        if (series.marker && series.marker.visible) {\n            series.chart.markerRender.render(series);\n        }\n    };\n    /**\n     * To do the progressive animation.\n     *\n     * @returns {void}\n     * @private\n     */\n    LineBase.prototype.doProgressiveAnimation = function (series, option) {\n        var animation = new Animation({});\n        var path = series.pathElement;\n        var strokeDashArray = path.getAttribute('stroke-dasharray');\n        var pathLength = series.pathElement.getTotalLength();\n        var currentTime;\n        path.style.visibility = 'hidden';\n        animation.animate(path, {\n            duration: (option.duration === 0 && animationMode === 'Enable') ? 1000 : option.duration,\n            delay: option.delay,\n            progress: function (args) {\n                if (args.timeStamp >= args.delay) {\n                    path.style.visibility = 'visible';\n                    currentTime = Math.abs(Math.round(((args.timeStamp - args.delay) * pathLength) / args.duration));\n                    path.setAttribute('stroke-dasharray', currentTime + ',' + pathLength);\n                }\n            },\n            end: function () {\n                path.setAttribute('stroke-dasharray', strokeDashArray);\n                series.chart.trigger('animationComplete', { series: series.chart.isBlazor ? {} : series });\n            }\n        });\n    };\n    /**\n     * To store the symbol location and region.\n     *\n     * @param {Points} point point\n     * @param {Series} series series\n     * @param {boolean} isInverted isInverted\n     * @param {Function} getLocation getLocation\n     */\n    LineBase.prototype.storePointLocation = function (point, series, isInverted, getLocation) {\n        var markerWidth = (series.marker && series.marker.width) ? series.marker.width : 0;\n        var markerHeight = (series.marker && series.marker.height) ? series.marker.height : 0;\n        point.symbolLocations.push(getLocation(point.xValue, point.yValue, series.xAxis, series.yAxis, isInverted, series));\n        point.regions.push(new Rect(point.symbolLocations[0].x - markerWidth, point.symbolLocations[0].y - markerHeight, 2 * markerWidth, 2 * markerHeight));\n    };\n    /**\n     * To find point with in the visible range\n     *\n     * @param {Points} point point\n     * @param {Axis} yAxis yAxis\n     * @private\n     */\n    LineBase.prototype.withinYRange = function (point, yAxis) {\n        return point.yValue >= yAxis.visibleRange.min && point.yValue <= yAxis.visibleRange.max;\n    };\n    LineBase.prototype.GetStepLineDirection = function (currentPoint, previousPoint, stepLineType, command) {\n        if (command === void 0) { command = 'L'; }\n        if (stepLineType === 'Right') {\n            return (command + ' ' +\n                (previousPoint.x) + ' ' + (currentPoint.y) + ' L ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n        }\n        else if (stepLineType === 'Center') {\n            var centerX = previousPoint.x + (currentPoint.x - previousPoint.x) / 2;\n            return (command + ' ' +\n                (centerX) + ' ' + (previousPoint.y) + ' L ' + (centerX) + ' ' + (currentPoint.y) + ' L ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n        }\n        else {\n            return (command + ' ' +\n                (currentPoint.x) + ' ' + (previousPoint.y) + ' L ' + (currentPoint.x) + ' ' + (currentPoint.y) + ' ');\n        }\n    };\n    /**\n     * To get first and last visible points\n     *\n     * @private\n     */\n    LineBase.prototype.getFirstLastVisiblePoint = function (points) {\n        var first = null;\n        var last = null;\n        for (var _i = 0, points_1 = points; _i < points_1.length; _i++) {\n            var point = points_1[_i];\n            if (first === null && point.visible) {\n                first = last = point;\n            }\n            last = point.visible ? point : last;\n        }\n        return { first: first ? first : points[0], last: last ? last : points[points.length - 1] };\n    };\n    /**\n     * To Generate the area series border path direction from area series main direction path.\n     *\n     *  @param {string} direction direction\n     *\n     * */\n    LineBase.prototype.getBorderDirection = function (direction) {\n        var coordinates = direction.split(' ');\n        if (coordinates.length > 3 && !(this.chart.stackingAreaSeriesModule) && !(this.chart.stackingStepAreaSeriesModule)) {\n            coordinates.splice(coordinates.length - 4, 3);\n        }\n        else if (this.chart.stackingAreaSeriesModule || this.chart.stackingStepAreaSeriesModule) {\n            coordinates.splice(coordinates.length / 2 + 1, coordinates.length / 2 + 1);\n            if (coordinates[coordinates.length - 1] === 'L') {\n                coordinates.splice(coordinates.length - 1, 1);\n            }\n        }\n        return coordinates.join(' ');\n    };\n    /**\n     * To remove empty point directions from series direction of area types.\n     *\n     *  @param {string} borderDirection direction\n     *\n     * */\n    LineBase.prototype.removeEmptyPointsBorder = function (borderDirection) {\n        var startIndex = 0;\n        var coordinates = borderDirection.split(' ');\n        // eslint-disable-next-line @typescript-eslint/tslint/config\n        var point;\n        do {\n            point = coordinates.indexOf('M', startIndex);\n            if (point > -1) {\n                coordinates.splice(point + 1, 3);\n                startIndex = point + 1;\n                if (point - 6 > 0) {\n                    coordinates.splice(point - 6, 6);\n                    startIndex -= 6;\n                }\n            }\n        } while (point !== -1);\n        return coordinates.join(' ');\n    };\n    /**\n     * To do the linear animation.\n     *\n     * @returns {void}\n     * @private\n     */\n    LineBase.prototype.doLinearAnimation = function (series, animation) {\n        var clipRect = series.clipRectElement.childNodes[0].childNodes[0];\n        var duration = series.chart.animated ? series.chart.duration : animation.duration;\n        var effect = getAnimationFunction('Linear');\n        var elementHeight = +clipRect.getAttribute('height');\n        var elementWidth = +clipRect.getAttribute('width');\n        var xCenter = +clipRect.getAttribute('x');\n        var yCenter = series.chart.requireInvertedAxis ? +clipRect.getAttribute('height') + +clipRect.getAttribute('y') :\n            +clipRect.getAttribute('y');\n        var value;\n        clipRect.style.visibility = 'hidden';\n        new Animation({}).animate(clipRect, {\n            duration: (duration === 0 && animationMode === 'Enable') ? 1000 : duration,\n            delay: animation.delay,\n            progress: function (args) {\n                if (args.timeStamp >= args.delay) {\n                    clipRect.style.visibility = 'visible';\n                    if (series.chart.requireInvertedAxis) {\n                        value = effect(args.timeStamp - args.delay, 0, elementHeight, args.duration);\n                        clipRect.setAttribute('transform', 'translate(' + xCenter + ' ' + yCenter +\n                            ') scale(1,' + (value / elementHeight) + ') translate(' + (-xCenter) + ' ' + (-yCenter) + ')');\n                    }\n                    else {\n                        value = effect(args.timeStamp - args.delay, 0, elementWidth, args.duration);\n                        clipRect.setAttribute('transform', 'translate(' + xCenter + ' ' + yCenter +\n                            ') scale(' + (value / elementWidth) + ', 1) translate(' + (-xCenter) + ' ' + (-yCenter) + ')');\n                    }\n                }\n            },\n            end: function () {\n                clipRect.setAttribute('transform', 'translate(0,0)');\n                series.chart.trigger('animationComplete', { series: series.chart.isBlazor ? {} : series });\n            }\n        });\n    };\n    return LineBase;\n}());\nexport { LineBase };\n","//! moment.js locale configuration\n//! locale : Occitan, lengadocian dialecte [oc-lnc]\n//! author : Quentin PAGÈS : https://github.com/Quenty31\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ocLnc = moment.defineLocale('oc-lnc', {\n        months: {\n            standalone:\n                'genièr_febrièr_març_abril_mai_junh_julhet_agost_setembre_octòbre_novembre_decembre'.split(\n                    '_'\n                ),\n            format: \"de genièr_de febrièr_de març_d'abril_de mai_de junh_de julhet_d'agost_de setembre_d'octòbre_de novembre_de decembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._mai_junh_julh._ago._set._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimenge_diluns_dimars_dimècres_dijòus_divendres_dissabte'.split(\n            '_'\n        ),\n        weekdaysShort: 'dg._dl._dm._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dm_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: '[uèi a] LT',\n            nextDay: '[deman a] LT',\n            nextWeek: 'dddd [a] LT',\n            lastDay: '[ièr a] LT',\n            lastWeek: 'dddd [passat a] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'unas segondas',\n            ss: '%d segondas',\n            m: 'una minuta',\n            mm: '%d minutas',\n            h: 'una ora',\n            hh: '%d oras',\n            d: 'un jorn',\n            dd: '%d jorns',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                    ? 'n'\n                    : number === 3\n                    ? 'r'\n                    : number === 4\n                    ? 't'\n                    : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4,\n        },\n    });\n\n    return ocLnc;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maltese (Malta) [mt]\n//! author : Alessandro Maruccia : https://github.com/alesma\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mt = moment.defineLocale('mt', {\n        months: 'Jannar_Frar_Marzu_April_Mejju_Ġunju_Lulju_Awwissu_Settembru_Ottubru_Novembru_Diċembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fra_Mar_Apr_Mej_Ġun_Lul_Aww_Set_Ott_Nov_Diċ'.split('_'),\n        weekdays:\n            'Il-Ħadd_It-Tnejn_It-Tlieta_L-Erbgħa_Il-Ħamis_Il-Ġimgħa_Is-Sibt'.split(\n                '_'\n            ),\n        weekdaysShort: 'Ħad_Tne_Tli_Erb_Ħam_Ġim_Sib'.split('_'),\n        weekdaysMin: 'Ħa_Tn_Tl_Er_Ħa_Ġi_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Illum fil-]LT',\n            nextDay: '[Għada fil-]LT',\n            nextWeek: 'dddd [fil-]LT',\n            lastDay: '[Il-bieraħ fil-]LT',\n            lastWeek: 'dddd [li għadda] [fil-]LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'f’ %s',\n            past: '%s ilu',\n            s: 'ftit sekondi',\n            ss: '%d sekondi',\n            m: 'minuta',\n            mm: '%d minuti',\n            h: 'siegħa',\n            hh: '%d siegħat',\n            d: 'ġurnata',\n            dd: '%d ġranet',\n            M: 'xahar',\n            MM: '%d xhur',\n            y: 'sena',\n            yy: '%d sni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return mt;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-param */\nimport { withInRange, getVisiblePoints } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `StackingColumnSeries` module used to render the stacking column series.\n */\nvar StackingColumnSeries = /** @class */ (function (_super) {\n    __extends(StackingColumnSeries, _super);\n    function StackingColumnSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    StackingColumnSeries.prototype.render = function (series) {\n        series.isRectSeries = true;\n        var sideBySideInfo = this.getSideBySideInfo(series);\n        var argsData;\n        var stackedValue = series.stackedValues;\n        var visiblePoints = getVisiblePoints(series);\n        for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n            var point = visiblePoints_1[_i];\n            point.symbolLocations = [];\n            point.regions = [];\n            if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n                this.rect = this.getRectangle(point.xValue + sideBySideInfo.start, stackedValue.endValues[point.index], point.xValue + sideBySideInfo.end, stackedValue.startValues[point.index], series);\n                this.rect.width = series.columnWidthInPixel ? series.columnWidthInPixel : this.rect.width;\n                this.rect.x = series.columnWidthInPixel ? this.rect.x - (((series.columnWidthInPixel / 2) * series.rectCount) -\n                    (series.columnWidthInPixel * series.position)) : this.rect.x;\n                argsData = this.triggerEvent(series, point, series.interior, { width: series.border.width, color: series.border.color });\n                if (!argsData.cancel) {\n                    this.drawRectangle(series, point, this.rect, argsData);\n                    this.updateSymbolLocation(point, this.rect, series);\n                    if (series.columnFacet === 'Cylinder') {\n                        var cylinderSeriesOption = {\n                            'isColumn': true,\n                            'stacking': series.type === 'StackingColumn100',\n                            'isLastSeries': true\n                        };\n                        this.drawCylinder(this.options, this.element, cylinderSeriesOption, this.rect, series);\n                    }\n                }\n            }\n        }\n        this.renderMarker(series);\n    };\n    /**\n     * Animates the series.\n     *\n     * @param  {Series} series - Defines the series to animate.\n     * @returns {void}\n     */\n    StackingColumnSeries.prototype.doAnimation = function (series) {\n        this.animate(series);\n    };\n    /**\n     * To destroy the stacking column.\n     *\n     * @returns {void}\n     * @private\n     */\n    StackingColumnSeries.prototype.destroy = function () {\n        /**\n         * Destroy method performed here\n         */\n    };\n    /**\n     * Get module name.\n     */\n    StackingColumnSeries.prototype.getModuleName = function () {\n        return 'StackingColumnSeries';\n    };\n    return StackingColumnSeries;\n}(ColumnBase));\nexport { StackingColumnSeries };\n","//! moment.js locale configuration\n//! locale : Arabic (Libya) [ar-ly]\n//! author : Ali Hmer: https://github.com/kikoanis\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '1',\n            2: '2',\n            3: '3',\n            4: '4',\n            5: '5',\n            6: '6',\n            7: '7',\n            8: '8',\n            9: '9',\n            0: '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                ? 1\n                : n === 2\n                ? 2\n                : n % 100 >= 3 && n % 100 <= 10\n                ? 3\n                : n % 100 >= 11\n                ? 4\n                : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arLy = moment.defineLocale('ar-ly', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arLy;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { extend, Browser, remove } from '@syncfusion/ej2-base';\nimport { PointData, ChartLocation } from '../../common/utils/helper';\nimport { getElement, measureText, Rect } from '@syncfusion/ej2-svg-base';\nimport { valueToCoefficient, removeElement, valueToPolarCoefficient, withInBounds } from '../../common/utils/helper';\nimport { BaseTooltip } from '../../common/user-interaction/tooltip';\nimport { tooltipRender, sharedTooltipRender } from '../../common/model/constants';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `Tooltip` module is used to render the tooltip for chart series.\n */\nvar Tooltip = /** @class */ (function (_super) {\n    __extends(Tooltip, _super);\n    /**\n     * Constructor for tooltip module.\n     *\n     * @private\n     */\n    function Tooltip(chart) {\n        var _this = _super.call(this, chart) || this;\n        _this.commonXvalues = [];\n        _this.addEventListener();\n        return _this;\n    }\n    /**\n     * @hidden\n     */\n    Tooltip.prototype.addEventListener = function () {\n        if (this.chart.isDestroyed) {\n            return;\n        }\n        var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n        this.chart.on(cancelEvent, this.mouseLeaveHandler, this);\n        this.chart.on('tapHold', this.longPress, this);\n        this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n        this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n    };\n    Tooltip.prototype.mouseUpHandler = function () {\n        var chart = this.control;\n        var data = this.getData();\n        data.lierIndex = this.lierIndex;\n        if (chart.isTouch && !this.isSelected(chart) &&\n            ((withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect) && chart.tooltip.shared)\n                || !chart.tooltip.shared)) {\n            if (!chart.crosshair.enable) {\n                this.tooltip();\n                if (chart.tooltip.fadeOutMode === 'Move') {\n                    this.removeTooltip(chart.tooltip.fadeOutDuration);\n                }\n            }\n            else if (chart.startMove && chart.tooltip.fadeOutMode === 'Move') {\n                this.removeTooltip(2000);\n            }\n        }\n        else if (!this.findData(data, this.previousPoints[0]) && chart.tooltip.fadeOutMode === 'Click') {\n            this.removeTooltip(0);\n        }\n    };\n    Tooltip.prototype.mouseLeaveHandler = function () {\n        this.removeTooltip(this.chart.tooltip.fadeOutDuration);\n    };\n    Tooltip.prototype.mouseMoveHandler = function () {\n        var chart = this.chart;\n        chart.mouseX = chart.mouseX / chart.scaleX;\n        chart.mouseY = chart.mouseY / chart.scaleY;\n        if (chart.stockChart && chart.stockChart.onPanning) {\n            if (chart.mouseY < chart.chartAxisLayoutPanel.seriesClipRect.y) {\n                chart.mouseY = chart.chartAxisLayoutPanel.seriesClipRect.y;\n            }\n            else if (chart.mouseY > chart.chartAxisLayoutPanel.seriesClipRect.y + chart.chartAxisLayoutPanel.seriesClipRect.height) {\n                chart.mouseY = chart.chartAxisLayoutPanel.seriesClipRect.y + chart.chartAxisLayoutPanel.seriesClipRect.height;\n            }\n        }\n        // Tooltip for chart series.\n        if (!chart.disableTrackTooltip && !this.isSelected(chart)) {\n            if (!chart.tooltip.shared && (!chart.isTouch || (chart.startMove))) {\n                this.tooltip();\n            }\n            if (withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n                if (chart.tooltip.shared && (!chart.isTouch || (chart.startMove))) {\n                    this.tooltip();\n                }\n            }\n            else {\n                if (chart.tooltip.shared && chart.tooltip.fadeOutMode === 'Move') {\n                    this.removeTooltip(this.chart.tooltip.fadeOutDuration);\n                }\n            }\n        }\n    };\n    /**\n     * Handles the long press on chart.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Tooltip.prototype.longPress = function () {\n        var chart = this.chart;\n        if (chart.crosshair.enable && withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n            this.tooltip();\n            chart.markerRender.markerMove(false);\n        }\n        return false;\n    };\n    /**\n     * Renders the tooltip.\n     *\n     * @returns {void}\n     */\n    Tooltip.prototype.tooltip = function () {\n        var elementId = this.chart.enableCanvas ? this.element.id + '_tooltip_group' : this.element.id + '_tooltip_svg';\n        var svgElement = this.getElement(elementId);\n        // To prevent the disappearance of the tooltip, while resize the stock chart.\n        var isStockSvg = this.chart.stockChart && svgElement && (svgElement.firstChild.childNodes.length > 1);\n        var isTooltip = (svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0 && !isStockSvg);\n        var tooltipDiv = this.getTooltipElement(isTooltip);\n        if (this.chart.enableCanvas && tooltipDiv) {\n            document.getElementById(this.chart.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n            tooltipDiv.appendChild(document.getElementById(this.chart.element.id + '_tooltip_svg'));\n        }\n        if (!this.chart.tooltip.shared) {\n            this.renderSeriesTooltip(this.chart, !isTooltip, tooltipDiv);\n        }\n        else {\n            this.renderGroupedTooltip(this.chart, !isTooltip, tooltipDiv);\n        }\n    };\n    Tooltip.prototype.findHeader = function (data) {\n        if (this.header === '') {\n            return '';\n        }\n        this.header = this.parseTemplate(data.point, data.series, this.header, data.series.xAxis, data.series.yAxis);\n        if (this.header.replace(/<b>/g, '').replace(/<\\/b>/g, '').trim() !== '') {\n            return this.header;\n        }\n        return '';\n    };\n    Tooltip.prototype.findShapes = function () {\n        if (!this.chart.tooltip.enableMarker) {\n            return [];\n        }\n        var marker = [];\n        for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n            var data = _a[_i];\n            marker.push(data.point.marker.shape || data.series.marker.shape || 'Circle');\n        }\n        return marker;\n    };\n    Tooltip.prototype.renderSeriesTooltip = function (chart, isFirst, tooltipDiv) {\n        var data = this.getData();\n        data.lierIndex = this.lierIndex;\n        this.currentPoints = [];\n        if (this.findData(data, this.previousPoints[0])) {\n            if (!(chart.dataEditingModule && chart.dataEditingModule.isPointDragging) && (this.previousPoints[0] &&\n                data.point.index === this.previousPoints[0].point.index && data.series.index === this.previousPoints[0].series.index)) {\n                return null;\n            }\n            if (this.pushData(data, isFirst, tooltipDiv, true)) {\n                this.triggerTooltipRender(data, isFirst, this.getTooltipText(data), this.findHeader(data));\n            }\n        }\n        else {\n            if (!data.point && this.isRemove && chart.tooltip.fadeOutMode === 'Move') {\n                this.removeTooltip(this.chart.tooltip.fadeOutDuration);\n                this.isRemove = false;\n            }\n            else {\n                var commonXvalues = this.mergeXvalues(this.chart.visibleSeries);\n                for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n                    var series = _a[_i];\n                    if (series.visible && !(series.category === 'TrendLine')) {\n                        data = this.getClosestX(chart, series, commonXvalues) || data;\n                    }\n                }\n            }\n        }\n        if (data && data.point) {\n            this.findMouseValue(data, chart);\n        }\n    };\n    Tooltip.prototype.triggerTooltipRender = function (point, isFirst, textCollection, headerText) {\n        var _this = this;\n        var tooltipTemplate;\n        var argsData = {\n            cancel: false, name: tooltipRender, text: textCollection, headerText: headerText, template: tooltipTemplate,\n            series: this.chart.isBlazor ? {} : point.series, textStyle: this.textStyle, point: point.point,\n            data: { pointX: point.point.x, pointY: point.point.y, seriesIndex: point.series.index, seriesName: point.series.name,\n                pointIndex: point.point.index, pointText: point.point.text }\n        };\n        var borderWidth = this.chart.border.width;\n        var padding = 3;\n        var tooltip = this.chart.tooltip;\n        var chartTooltipSuccess = function (argsData) {\n            if (!argsData.cancel) {\n                if (point.series.type === 'BoxAndWhisker') {\n                    _this.removeText();\n                    isFirst = true;\n                }\n                _this.headerText = argsData.headerText;\n                _this.formattedText = _this.formattedText.concat(argsData.text);\n                _this.text = _this.formattedText;\n                var location_1 = _this.getSymbolLocation(point);\n                location_1 = location_1 ? location_1 : new ChartLocation(null, null);\n                location_1.x = tooltip.location.x !== null ? tooltip.location.x : location_1.x;\n                location_1.y = tooltip.location.y !== null ? tooltip.location.y : location_1.y;\n                location_1 = (location_1.x === null && location_1.y === null) ? null : location_1;\n                _this.createTooltip(_this.chart, isFirst, location_1, point.series.clipRect, point.point, _this.findShapes(), _this.findMarkerHeight(_this.currentPoints[0]), new Rect(borderWidth, borderWidth, _this.chart.availableSize.width - padding - borderWidth * 2, _this.chart.availableSize.height - padding - borderWidth * 2), _this.chart.crosshair.enable, null, _this.getTemplateText(point), _this.template ? argsData.template : '');\n            }\n            else {\n                _this.removeHighlight();\n                remove(_this.getElement(_this.element.id + '_tooltip'));\n            }\n            _this.isRemove = true;\n        };\n        chartTooltipSuccess.bind(this, point);\n        this.chart.trigger(tooltipRender, argsData, chartTooltipSuccess);\n    };\n    Tooltip.prototype.findMarkerHeight = function (pointData) {\n        var markerHeight = 0;\n        var series = pointData.series;\n        markerHeight = ((series.marker.visible || (this.chart.tooltip.shared &&\n            (!series.isRectSeries || series.marker.visible)) || series.type === 'Scatter' || series.drawType === 'Scatter')\n            && !(series.type === 'Candle' || series.type === 'Hilo' || series.type === 'HiloOpenClose')) ?\n            ((series.marker.height + 2) / 2 + (2 * series.marker.border.width)) : 0;\n        return markerHeight;\n    };\n    Tooltip.prototype.findData = function (data, previous) {\n        return data.point && ((!previous || (previous.point !== data.point)) ||\n            (previous && previous.lierIndex > 3 && previous.lierIndex !== this.lierIndex) || (previous.point === data.point));\n    };\n    Tooltip.prototype.getSymbolLocation = function (data) {\n        var location;\n        if (data.series.type !== 'BoxAndWhisker') {\n            if (!data.point.symbolLocations[0]) {\n                return null;\n            }\n            location = new ChartLocation(data.point.symbolLocations[0].x, data.point.symbolLocations[0].y);\n        }\n        switch (data.series.type) {\n            case 'BoxAndWhisker':\n                return this.getBoxLocation(data);\n            case 'Waterfall':\n                return this.getWaterfallRegion(data, location);\n            case 'RangeArea':\n            case 'RangeStepArea':\n            case 'SplineRangeArea':\n            case 'RangeColumn':\n                return this.getRangeArea(data, location);\n            default:\n                return location;\n        }\n    };\n    Tooltip.prototype.getRangeArea = function (data, location) {\n        if (data.point.regions[0]) {\n            if (!this.inverted) {\n                location.y = data.point.regions[0].y + data.point.regions[0].height / 2;\n            }\n            else {\n                location.x = data.point.regions[0].x + data.point.regions[0].width / 2;\n            }\n            if (data.series.type === 'RangeStepArea') {\n                location.y = data.point.regions[0].y + data.point.regions[0].height / 2 + data.point.regions[0].width;\n            }\n        }\n        return location;\n    };\n    Tooltip.prototype.getWaterfallRegion = function (data, location) {\n        if (!this.inverted) {\n            location.y = (data.point.y < 0) ?\n                location.y - data.point.regions[0].height : location.y;\n        }\n        else {\n            location.x = (data.point.y < 0) ?\n                location.x + data.point.regions[0].width : location.x;\n        }\n        return location;\n    };\n    Tooltip.prototype.getTooltipText = function (pointData) {\n        var series = pointData.series;\n        return this.parseTemplate(pointData.point, series, this.getFormat(this.chart, series), series.xAxis, series.yAxis);\n    };\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    Tooltip.prototype.getTemplateText = function (data) {\n        if (this.template && this.chart.tooltip.shared) {\n            var point = [];\n            for (var i = 0; i < data.length; i++) {\n                point[i] = extend({}, data[i].point);\n                point[i].x = this.formatPointValue(data[i].point, data[i].series.xAxis, 'x', true, false);\n                if ((data[i].series.seriesType === 'XY')) {\n                    point[i].y = this.formatPointValue(data[i].point, data[i].series.yAxis, 'y', false, true);\n                }\n                else {\n                    point[i].low = this.formatPointValue(data[i].point, data[i].series.yAxis, 'low', false, true);\n                    point[i].high = this.formatPointValue(data[i].point, data[i].series.yAxis, 'high', false, true);\n                }\n            }\n            return point;\n        }\n        else if (this.template) {\n            var point = extend({}, data.point);\n            point.x = this.formatPointValue(data.point, data.series.xAxis, 'x', true, false);\n            if ((data.series.seriesType === 'XY')) {\n                point.y = this.formatPointValue(data.point, data.series.yAxis, 'y', false, true);\n            }\n            else {\n                point.low = this.formatPointValue(data.point, data.series.yAxis, 'low', false, true);\n                point.high = this.formatPointValue(data.point, data.series.yAxis, 'high', false, true);\n            }\n            return point;\n        }\n        else {\n            return data.point;\n        }\n    };\n    Tooltip.prototype.findMouseValue = function (data, chart) {\n        if (!chart.requireInvertedAxis) {\n            if (chart.chartAreaType === 'PolarRadar') {\n                this.valueX = valueToPolarCoefficient(data.point.xValue, data.series.xAxis) * data.series.xAxis.rect.width\n                    + data.series.xAxis.rect.x;\n            }\n            else {\n                this.valueX = (data.series.category === 'TrendLine' && chart.tooltip.shared) ? this.valueX :\n                    valueToCoefficient(data.point.xValue, data.series.xAxis) * data.series.xAxis.rect.width\n                        + data.series.xAxis.rect.x;\n            }\n            this.valueY = chart.mouseY;\n        }\n        else {\n            this.valueY = (1 - valueToCoefficient(data.point.xValue, data.series.xAxis)) * data.series.xAxis.rect.height\n                + data.series.xAxis.rect.y;\n            this.valueX = chart.mouseX;\n        }\n    };\n    Tooltip.prototype.renderGroupedTooltip = function (chart, isFirst, tooltipDiv) {\n        var data;\n        var dataCollection = [];\n        var lastData;\n        var pointData = chart.chartAreaType === 'PolarRadar' ? this.getData() : null;\n        this.stopAnimation();\n        this.removeHighlight();\n        this.currentPoints = [];\n        var extraPoints = [];\n        var closestXValue = Number.MAX_VALUE;\n        var closetYValue = Number.MAX_VALUE;\n        var pointXValue;\n        var pointYValue;\n        var tempData;\n        //let headerContent : string = '';\n        if (isFirst) {\n            if (!chart.stockChart) {\n                if (tooltipDiv) {\n                    document.getElementById(this.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n                }\n            }\n            else {\n                if (tooltipDiv && !getElement(tooltipDiv.id)) {\n                    document.getElementById(chart.stockChart.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n                }\n            }\n        }\n        this.removeText();\n        var argument = {\n            text: [], cancel: false, name: sharedTooltipRender, data: [], point: [], series: [], headerText: '', textStyle: this.textStyle, template: ''\n        };\n        var i = 0;\n        for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n            var series = _a[_i];\n            if (!series.enableTooltip || !series.visible) {\n                continue;\n            }\n            if (chart.chartAreaType === 'Cartesian' && series.visible) {\n                data = this.getClosestX(chart, series, this.commonXValue(this.chart.visibleSeries));\n            }\n            else if (chart.chartAreaType === 'PolarRadar' && series.visible && pointData.point !== null) {\n                data = new PointData(series.points[pointData.point.index], series);\n            }\n            // if (data && this.header !== '' && this.currentPoints.length === 0) {\n            //     headerContent = this.findHeader(data);\n            // }\n            if (chart.tooltip.showNearestPoint && !data) {\n                data = this.getClosestX(chart, series, this.commonXValue([series]));\n            }\n            if (data) {\n                argument.data.push({ pointX: data.point.x, pointY: data.point.y, seriesIndex: data.series.index,\n                    seriesName: data.series.name, pointIndex: data.point.index, pointText: data.point.text });\n                argument.series[i] = data.series;\n                argument.point[i] = data.point;\n                argument.headerText = this.findHeader(data);\n                this.currentPoints.push(data);\n                argument.text.push(this.getTooltipText(data));\n                pointXValue = (!chart.requireInvertedAxis) ? chart.mouseX - data.series.clipRect.x : chart.mouseY - data.series.clipRect.y;\n                pointYValue = chart.mouseY - data.series.clipRect.y;\n                if (data.point.symbolLocations && data.point.symbolLocations.length && Math.abs(pointXValue - data.point.symbolLocations[0].x) <= closestXValue &&\n                    Math.abs(data.point.symbolLocations[0].y - pointYValue) < Math.abs(closetYValue - pointYValue)) {\n                    closestXValue = Math.abs(pointXValue - data.point.symbolLocations[0].x);\n                    closetYValue = data.point.symbolLocations[0].y;\n                    tempData = data;\n                }\n                lastData = (data.series.category === 'TrendLine' && chart.tooltip.shared) ? lastData : tempData || data;\n                dataCollection.push(data);\n            }\n            // if (data && this.triggerEvent(data, isFirst, this.getTooltipText(data)), this.findHeader(data)) {\n            //     this.findMouseValue(data, chart);\n            //     (<PointData[]>this.currentPoints).push(data);\n            //     data = null;\n            // } else if (data) {\n            //     extraPoints.push(data);\n            // }\n            i++;\n        }\n        if (!chart.tooltip.showNearestPoint) {\n            var collection = [];\n            this.currentPoints = [];\n            argument.point = [];\n            argument.series = [];\n            argument.data = [];\n            argument.text = [];\n            for (var _b = 0, dataCollection_1 = dataCollection; _b < dataCollection_1.length; _b++) {\n                var data_1 = dataCollection_1[_b];\n                if (data_1.point.symbolLocations[0].x === lastData.point.symbolLocations[0].x || ((data_1.series.type.indexOf('Column') !== -1 || lastData.series.type.indexOf('Column') !== -1) && (data_1.point.xValue === lastData.point.xValue))) {\n                    argument.point.push(data_1.point);\n                    argument.series.push(data_1.series);\n                    argument.text.push(this.getTooltipText(data_1));\n                    argument.headerText = this.findHeader(data_1);\n                    collection.push(data_1);\n                    argument.data.push({\n                        pointX: data_1.point.x, pointY: data_1.point.y, seriesIndex: data_1.series.index,\n                        seriesName: data_1.series.name, pointIndex: data_1.point.index, pointText: data_1.point.text\n                    });\n                }\n            }\n            dataCollection = collection;\n            this.currentPoints = collection;\n        }\n        if (dataCollection.length > 0 && this.currentPoints.length > 0) { // To avoid console error when we have empty chart with shared tooltip.\n            this.triggerSharedTooltip(argument, lastData, extraPoints, chart, isFirst, dataCollection);\n        }\n        else if (this.getElement(this.element.id + '_tooltip_path')) {\n            this.getElement(this.element.id + '_tooltip_path').setAttribute('d', '');\n        }\n    };\n    Tooltip.prototype.triggerSharedTooltip = function (argument, point, extraPoints, chart, isFirst, dataCollection) {\n        var _this = this;\n        var tooltipTemplate;\n        var argsData = {\n            cancel: false, name: sharedTooltipRender, text: argument.text, headerText: argument.headerText,\n            textStyle: argument.textStyle, template: tooltipTemplate,\n            point: argument.point, series: argument.series,\n            data: argument.data\n        };\n        var borderWidth = this.chart.border.width;\n        var padding = 3;\n        var toolbarHeight;\n        var titleHeight;\n        var currentPoints = [];\n        if (chart.stockChart) {\n            toolbarHeight = chart.stockChart.enablePeriodSelector ? chart.stockChart.toolbarHeight : 0;\n            titleHeight = measureText(this.chart.stockChart.title, this.chart.stockChart.titleStyle, this.chart.themeStyle.tooltipLabelFont).height + 10;\n        }\n        var sharedTooltip = function (argsData) {\n            if (!argsData.cancel) {\n                if (point.series.type === 'BoxAndWhisker') {\n                    _this.removeText();\n                    isFirst = true;\n                }\n                for (var i = 0; i < argsData.text.length; i++) {\n                    if (argsData.text[i]) {\n                        currentPoints.push(_this.currentPoints[i]);\n                    }\n                }\n                _this.currentPoints = currentPoints;\n                _this.formattedText = _this.formattedText.concat(argsData.text);\n                _this.text = argsData.text;\n                _this.headerText = argsData.headerText;\n                var tooltip = _this.chart.tooltip;\n                _this.findMouseValue(point, _this.chart);\n                var location_2 = _this.findSharedLocation();\n                location_2 = location_2 ? location_2 : new ChartLocation(null, null);\n                location_2.x = tooltip.location.x !== null ? tooltip.location.x : location_2.x;\n                location_2.y = tooltip.location.y !== null ? tooltip.location.y : location_2.y;\n                location_2 = (location_2.x === null && location_2.y === null) ? null : location_2;\n                _this.createTooltip(chart, isFirst, location_2, _this.currentPoints.length === 1 ? _this.currentPoints[0].series.clipRect : null, dataCollection.length === 1 ? dataCollection[0].point : null, _this.findShapes(), _this.findMarkerHeight(_this.currentPoints[0]), new Rect(borderWidth, (chart.stockChart ? (toolbarHeight + titleHeight + borderWidth) : borderWidth), _this.chart.availableSize.width - padding - borderWidth * 2, _this.chart.availableSize.height - padding - borderWidth * 2), _this.chart.crosshair.enable, extraPoints, _this.template ? _this.getTemplateText(dataCollection) : null, _this.template ? argsData.template : '');\n                point = null;\n            }\n            else {\n                extraPoints.push(point);\n            }\n        };\n        sharedTooltip.bind(this, point, extraPoints);\n        this.chart.trigger(sharedTooltipRender, argsData, sharedTooltip);\n    };\n    Tooltip.prototype.findSharedLocation = function () {\n        var stockChart = this.chart.stockChart;\n        if (stockChart) {\n            if (this.text.length === 1) {\n                this.text.push('');\n            }\n            var toolbarHeight = stockChart.enablePeriodSelector ? stockChart.toolbarHeight : 0;\n            var element = document.getElementById(stockChart.element.id + '_ChartTitle');\n            var titleHeight = stockChart.title !== '' ? element.getBoundingClientRect().height + 10 : 0;\n            if (stockChart.tooltip.position === 'Nearest') {\n                return new ChartLocation(this.valueX, this.valueY + toolbarHeight + titleHeight);\n            }\n            return new ChartLocation(this.chart.chartAxisLayoutPanel.seriesClipRect.x + 5, this.chart.chartAxisLayoutPanel.seriesClipRect.y + toolbarHeight + 5 + titleHeight);\n        }\n        else {\n            if (this.currentPoints.length > 1) {\n                return new ChartLocation(this.valueX, this.valueY);\n            }\n            else {\n                return this.getSymbolLocation(this.currentPoints[0]);\n            }\n        }\n    };\n    Tooltip.prototype.getBoxLocation = function (data) {\n        var location = this.lierIndex > 3 ? (data.point.outliers.length > 0 ? data.point.symbolLocations[this.lierIndex - 4] : null) :\n            {\n                x: data.point.regions[0].x + (data.point.regions[0].width / 2),\n                y: data.point.regions[0].y + (data.point.regions[0].height / 2)\n            };\n        return location;\n    };\n    Tooltip.prototype.parseTemplate = function (point, series, format, xAxis, yAxis) {\n        var val;\n        var textValue;\n        for (var _i = 0, _a = Object.keys(point); _i < _a.length; _i++) {\n            var dataValue = _a[_i];\n            val = new RegExp('${point' + '.' + dataValue + '}', 'gm');\n            format = format.replace(val.source, this.formatPointValue(point, val.source === '${point.x}' ? xAxis : yAxis, dataValue, val.source === '${point.x}', (val.source === '${point.high}' ||\n                val.source === '${point.open}' ||\n                val.source === '${point.close}' ||\n                val.source === '${point.low}' ||\n                val.source === '${point.y}' ||\n                val.source === '${point.minimum}' ||\n                val.source === '${point.maximum}' ||\n                val.source === '${point.outliers}' ||\n                val.source === '${point.upperQuartile}' ||\n                val.source === '${point.lowerQuartile}' ||\n                val.source === '${point.median}')));\n        }\n        for (var _b = 0, _c = Object.keys(Object.getPrototypeOf(series)); _b < _c.length; _b++) {\n            var dataValue = _c[_b];\n            val = new RegExp('${series' + '.' + dataValue + '}', 'gm');\n            textValue = series[dataValue];\n            format = format.replace(val.source, textValue);\n        }\n        return format;\n    };\n    Tooltip.prototype.formatPointValue = function (point, axis, dataValue, isXPoint, isYPoint) {\n        var textValue;\n        var customLabelFormat;\n        var value;\n        if (axis.valueType !== 'Category' && isXPoint) {\n            customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n            textValue = customLabelFormat ? axis.labelFormat.replace('{value}', axis.format(point[dataValue])) :\n                axis.format(point[dataValue]);\n        }\n        else if (isYPoint && !isNullOrUndefined(point[dataValue])) {\n            customLabelFormat = axis.labelFormat && axis.labelFormat.match('{value}') !== null;\n            value = dataValue === 'outliers' ? axis.format(point[dataValue][this.lierIndex - 4]) :\n                axis.format(point[dataValue]);\n            textValue = customLabelFormat ? axis.labelFormat.replace('{value}', value) : value;\n        }\n        else if (dataValue === 'size') {\n            var format = this.chart.intl.getNumberFormat({ format: '', useGrouping: this.chart.useGroupingSeparator });\n            textValue = typeof point[dataValue] === 'number' ? format(point[dataValue]) : point[dataValue];\n        }\n        else {\n            textValue = point[dataValue];\n        }\n        return textValue;\n    };\n    Tooltip.prototype.getFormat = function (chart, series) {\n        if (series.tooltipFormat) {\n            if (series.seriesType === 'XY' && series.category === 'Indicator') {\n                return this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n            }\n            return series.tooltipFormat;\n        }\n        if (!series.tooltipFormat && chart.tooltip.format) {\n            if (series.seriesType === 'XY' && series.category === 'Indicator') {\n                return this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n            }\n            return chart.tooltip.format;\n        }\n        var textX = (series.type === 'Histogram') ? '${point.minimum}' + '-' + '${point.maximum}' : '${point.x}';\n        var format = !chart.tooltip.shared ? textX : '${series.name}';\n        switch (series.seriesType) {\n            case 'XY':\n                if (series.category === 'Indicator') {\n                    this.getIndicatorTooltipFormat(series, chart, chart.tooltip.format);\n                }\n                return format + ' : ' + ((series.type === 'Bubble') ? '<b>${point.y}</b>  Size : <b>${point.size}</b>' :\n                    '<b>${point.y}</b>');\n            case 'HighLow':\n                return format + ('<br/>High : <b>${point.high}</b><br/>Low : <b>${point.low}</b>');\n            case 'HighLowOpenClose':\n                return format + ('<br/>High : <b>${point.high}</b><br/>Low : <b>${point.low}</b><br/>' +\n                    'Open : <b>${point.open}</b><br/>Close : <b>${point.close}</b>');\n            case 'BoxPlot': {\n                return format + '<br/>' + (this.lierIndex > 3 ? 'Outliers : <b>${point.outliers}</b>' :\n                    'Maximum : <b>${point.maximum}</b><br/>Q3 : <b>${point.upperQuartile}</b><br/>' +\n                        'Median : <b>${point.median}</b><br/>Q1 : <b>${point.lowerQuartile}</b><br/>Minimum : <b>${point.minimum}</b>');\n            }\n            default: return '';\n        }\n    };\n    Tooltip.prototype.getIndicatorTooltipFormat = function (series, chart, format) {\n        var toolTip;\n        if (series.seriesType === 'XY') {\n            toolTip = series.name + ' : <b>${point.y}</b>';\n        }\n        else {\n            toolTip = format;\n        }\n        return toolTip;\n    };\n    /*\n    * @hidden\n    */\n    Tooltip.prototype.removeHighlightedMarker = function (data, fadeOut) {\n        for (var _i = 0, data_2 = data; _i < data_2.length; _i++) {\n            var item = data_2[_i];\n            removeElement(this.element.id + '_Series_' + item.series.index +\n                '_Point_' + item.point.index + '_Trackball');\n            if (this.chart.markerRender) {\n                this.chart.markerRender.removeHighlightedMarker(item.series, item.point, fadeOut);\n            }\n        }\n        this.previousPoints = [];\n    };\n    /**\n     * Get module name.\n     */\n    Tooltip.prototype.getModuleName = function () {\n        /**\n         * Returns the module name\n         */\n        return 'Tooltip';\n    };\n    /**\n     * To destroy the tooltip.\n     *\n     * @returns {void}\n     * @private\n     */\n    Tooltip.prototype.destroy = function () {\n        /**\n         * Destroy method performed here\n         */\n    };\n    return Tooltip;\n}(BaseTooltip));\nexport { Tooltip };\n","//! moment.js locale configuration\n//! locale : Belarusian [be]\n//! author : Dmitry Demidov : https://github.com/demidov91\n//! author: Praleska: http://praleska.pro/\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'хвіліна_хвіліны_хвілін' : 'хвіліну_хвіліны_хвілін',\n            hh: withoutSuffix ? 'гадзіна_гадзіны_гадзін' : 'гадзіну_гадзіны_гадзін',\n            dd: 'дзень_дні_дзён',\n            MM: 'месяц_месяцы_месяцаў',\n            yy: 'год_гады_гадоў',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвіліна' : 'хвіліну';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'гадзіна' : 'гадзіну';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n\n    var be = moment.defineLocale('be', {\n        months: {\n            format: 'студзеня_лютага_сакавіка_красавіка_траўня_чэрвеня_ліпеня_жніўня_верасня_кастрычніка_лістапада_снежня'.split(\n                '_'\n            ),\n            standalone:\n                'студзень_люты_сакавік_красавік_травень_чэрвень_ліпень_жнівень_верасень_кастрычнік_лістапад_снежань'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'студ_лют_сак_крас_трав_чэрв_ліп_жнів_вер_каст_ліст_снеж'.split('_'),\n        weekdays: {\n            format: 'нядзелю_панядзелак_аўторак_сераду_чацвер_пятніцу_суботу'.split(\n                '_'\n            ),\n            standalone:\n                'нядзеля_панядзелак_аўторак_серада_чацвер_пятніца_субота'.split(\n                    '_'\n                ),\n            isFormat: /\\[ ?[Ууў] ?(?:мінулую|наступную)? ?\\] ?dddd/,\n        },\n        weekdaysShort: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_ат_ср_чц_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY г., HH:mm',\n        },\n        calendar: {\n            sameDay: '[Сёння ў] LT',\n            nextDay: '[Заўтра ў] LT',\n            lastDay: '[Учора ў] LT',\n            nextWeek: function () {\n                return '[У] dddd [ў] LT';\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return '[У мінулую] dddd [ў] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                        return '[У мінулы] dddd [ў] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'праз %s',\n            past: '%s таму',\n            s: 'некалькі секунд',\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithPlural,\n            hh: relativeTimeWithPlural,\n            d: 'дзень',\n            dd: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночы|раніцы|дня|вечара/,\n        isPM: function (input) {\n            return /^(дня|вечара)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночы';\n            } else if (hour < 12) {\n                return 'раніцы';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечара';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(і|ы|га)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return (number % 10 === 2 || number % 10 === 3) &&\n                        number % 100 !== 12 &&\n                        number % 100 !== 13\n                        ? number + '-і'\n                        : number + '-ы';\n                case 'D':\n                    return number + '-га';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return be;\n\n})));\n","//! moment.js locale configuration\n//! locale : Georgian [ka]\n//! author : Irakli Janiashvili : https://github.com/IrakliJani\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ka = moment.defineLocale('ka', {\n        months: 'იანვარი_თებერვალი_მარტი_აპრილი_მაისი_ივნისი_ივლისი_აგვისტო_სექტემბერი_ოქტომბერი_ნოემბერი_დეკემბერი'.split(\n            '_'\n        ),\n        monthsShort: 'იან_თებ_მარ_აპრ_მაი_ივნ_ივლ_აგვ_სექ_ოქტ_ნოე_დეკ'.split('_'),\n        weekdays: {\n            standalone:\n                'კვირა_ორშაბათი_სამშაბათი_ოთხშაბათი_ხუთშაბათი_პარასკევი_შაბათი'.split(\n                    '_'\n                ),\n            format: 'კვირას_ორშაბათს_სამშაბათს_ოთხშაბათს_ხუთშაბათს_პარასკევს_შაბათს'.split(\n                '_'\n            ),\n            isFormat: /(წინა|შემდეგ)/,\n        },\n        weekdaysShort: 'კვი_ორშ_სამ_ოთხ_ხუთ_პარ_შაბ'.split('_'),\n        weekdaysMin: 'კვ_ორ_სა_ოთ_ხუ_პა_შა'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[დღეს] LT[-ზე]',\n            nextDay: '[ხვალ] LT[-ზე]',\n            lastDay: '[გუშინ] LT[-ზე]',\n            nextWeek: '[შემდეგ] dddd LT[-ზე]',\n            lastWeek: '[წინა] dddd LT-ზე',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return s.replace(\n                    /(წამ|წუთ|საათ|წელ|დღ|თვ)(ი|ე)/,\n                    function ($0, $1, $2) {\n                        return $2 === 'ი' ? $1 + 'ში' : $1 + $2 + 'ში';\n                    }\n                );\n            },\n            past: function (s) {\n                if (/(წამი|წუთი|საათი|დღე|თვე)/.test(s)) {\n                    return s.replace(/(ი|ე)$/, 'ის წინ');\n                }\n                if (/წელი/.test(s)) {\n                    return s.replace(/წელი$/, 'წლის წინ');\n                }\n                return s;\n            },\n            s: 'რამდენიმე წამი',\n            ss: '%d წამი',\n            m: 'წუთი',\n            mm: '%d წუთი',\n            h: 'საათი',\n            hh: '%d საათი',\n            d: 'დღე',\n            dd: '%d დღე',\n            M: 'თვე',\n            MM: '%d თვე',\n            y: 'წელი',\n            yy: '%d წელი',\n        },\n        dayOfMonthOrdinalParse: /0|1-ლი|მე-\\d{1,2}|\\d{1,2}-ე/,\n        ordinal: function (number) {\n            if (number === 0) {\n                return number;\n            }\n            if (number === 1) {\n                return number + '-ლი';\n            }\n            if (\n                number < 20 ||\n                (number <= 100 && number % 20 === 0) ||\n                number % 100 === 0\n            ) {\n                return 'მე-' + number;\n            }\n            return number + '-ე';\n        },\n        week: {\n            dow: 1,\n            doy: 7,\n        },\n    });\n\n    return ka;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Deferred, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { initForeignKeyColumn, getForeignKeyData, generateQuery } from '../base/constant';\nimport { getDatePredicate } from '../base/util';\nimport { Data } from './data';\nimport * as events from '../base/constant';\n/**\n * `ForeignKey` module is used to handle foreign key column's actions.\n */\nvar ForeignKey = /** @class */ (function (_super) {\n    __extends(ForeignKey, _super);\n    function ForeignKey(parent, serviceLocator) {\n        var _this = _super.call(this, parent, serviceLocator) || this;\n        _this.parent = parent;\n        _this.serviceLocator = serviceLocator;\n        _this.initEvent();\n        return _this;\n    }\n    ForeignKey.prototype.initEvent = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.on(initForeignKeyColumn, this.initForeignKeyColumns, this);\n        this.parent.on(getForeignKeyData, this.getForeignKeyData, this);\n        this.parent.on(generateQuery, this.generateQueryFormData, this);\n    };\n    ForeignKey.prototype.initForeignKeyColumns = function (columns) {\n        for (var i = 0; i < columns.length; i++) {\n            columns[parseInt(i.toString(), 10)].dataSource = (columns[parseInt(i.toString(), 10)].dataSource instanceof DataManager ?\n                columns[parseInt(i.toString(), 10)].dataSource :\n                (isNullOrUndefined(columns[parseInt(i.toString(), 10)].dataSource) ? new DataManager() :\n                    'result' in columns[parseInt(i.toString(), 10)].dataSource ? columns[parseInt(i.toString(), 10)].dataSource :\n                        new DataManager(columns[parseInt(i.toString(), 10)].dataSource)));\n        }\n    };\n    ForeignKey.prototype.eventfPromise = function (args, query, key, column) {\n        var state = this.getStateEventArgument(query);\n        var def = new Deferred();\n        var deff = new Deferred();\n        state.action = args.action;\n        var dataModule = this.parent.getDataModule();\n        if (!isNullOrUndefined(args.action) && args.action.requestType && dataModule.foreignKeyDataState.isDataChanged !== false) {\n            dataModule.setForeignKeyDataState({\n                isPending: true, resolver: deff.resolve\n            });\n            deff.promise.then(function () {\n                def.resolve(column.dataSource);\n            });\n            state.setColumnData = this.parent.setForeignKeyData.bind(this.parent);\n            this.parent.trigger(events.columnDataStateChange, state);\n        }\n        else {\n            dataModule.setForeignKeyDataState({});\n            def.resolve(key);\n        }\n        return def;\n    };\n    ForeignKey.prototype.getForeignKeyData = function (args) {\n        var _this = this;\n        var foreignColumns = args.column ? [args.column] : this.parent.getForeignKeyColumns();\n        var allPromise = [];\n        var _loop_1 = function (i) {\n            var promise = void 0;\n            var query = args.isComplex ? this_1.genarateColumnQuery(foreignColumns[parseInt(i.toString(), 10)]) :\n                this_1.genarateQuery(foreignColumns[parseInt(i.toString(), 10)], args.result.result, false, true);\n            query.params = this_1.parent.query.params;\n            var dataSource = foreignColumns[parseInt(i.toString(), 10)].dataSource;\n            if (dataSource && 'result' in dataSource) {\n                var def = this_1.eventfPromise(args, query, dataSource, foreignColumns[parseInt(i.toString(), 10)]);\n                promise = def.promise;\n            }\n            else if (!dataSource.ready || dataSource.dataSource.offline) {\n                promise = dataSource.executeQuery(query);\n            }\n            else {\n                promise = dataSource.ready.then(function () {\n                    return dataSource.executeQuery(query);\n                });\n            }\n            allPromise.push(promise);\n        };\n        var this_1 = this;\n        for (var i = 0; i < foreignColumns.length; i++) {\n            _loop_1(i);\n        }\n        Promise.all(allPromise).then(function (responses) {\n            for (var i = 0; i < responses.length; i++) {\n                foreignColumns[parseInt(i.toString(), 10)].columnData = responses[parseInt(i.toString(), 10)].result;\n                if (foreignColumns[parseInt(i.toString(), 10)].editType === 'dropdownedit' && 'result' in foreignColumns[parseInt(i.toString(), 10)].dataSource) {\n                    foreignColumns[parseInt(i.toString(), 10)].edit.params = extend(foreignColumns[parseInt(i.toString(), 10)]\n                        .edit.params, {\n                        dataSource: responses[parseInt(i.toString(), 10)].result,\n                        query: new Query(), fields: {\n                            value: foreignColumns[parseInt(i.toString(), 10)].foreignKeyField ||\n                                foreignColumns[parseInt(i.toString(), 10)].field,\n                            text: foreignColumns[parseInt(i.toString(), 10)].foreignKeyValue\n                        }\n                    });\n                }\n            }\n            args.promise.resolve(args.result);\n        }).catch(function (e) {\n            _this.parent.log(['actionfailure', 'foreign_key_failure']);\n            if (args.promise && args.promise.reject) {\n                args.promise.reject(e);\n            }\n            return e;\n        });\n    };\n    ForeignKey.prototype.generateQueryFormData = function (args) {\n        args.predicate.predicate = this.genarateQuery(args.column, args.column.columnData, true);\n    };\n    ForeignKey.prototype.genarateQuery = function (column, e, fromData, needQuery) {\n        var gObj = this.parent;\n        var predicates = [];\n        var query = new Query();\n        var field = fromData ? column.foreignKeyField : column.field;\n        if (gObj.allowPaging || gObj.enableVirtualization || fromData) {\n            e = new DataManager(((gObj.allowGrouping && gObj.groupSettings.columns.length && !fromData) ?\n                e.records : e)).executeLocal(new Query().select(field));\n            var filteredValue = DataUtil.distinct(e, field, false);\n            field = fromData ? column.field : column.foreignKeyField;\n            for (var i = 0; i < filteredValue.length; i++) {\n                if (filteredValue[parseInt(i.toString(), 10)] && filteredValue[parseInt(i.toString(), 10)].getDay) {\n                    predicates.push(getDatePredicate({ field: field, operator: 'equal', value: filteredValue[parseInt(i.toString(), 10)], matchCase: false }));\n                }\n                else {\n                    predicates.push(new Predicate(field, 'equal', filteredValue[parseInt(i.toString(), 10)], false));\n                }\n            }\n        }\n        if (needQuery) {\n            return predicates.length ? query.where(Predicate.or(predicates)) : query;\n        }\n        return (predicates.length ? Predicate.or(predicates) : { predicates: [] });\n    };\n    ForeignKey.prototype.genarateColumnQuery = function (column) {\n        var gObj = this.parent;\n        var query = new Query();\n        var queryColumn = this.isFiltered(column);\n        if (queryColumn.isTrue) {\n            query = this.filterQuery(query, queryColumn.column, true);\n        }\n        if (gObj.searchSettings.key.length) {\n            var sSettings = gObj.searchSettings;\n            if (column.dataSource instanceof DataManager && (column.dataSource.adaptor.getModuleName &&\n                column.dataSource.adaptor.getModuleName() === 'ODataV4Adaptor')) {\n                query = this.searchQuery(query, column, true);\n            }\n            else {\n                query.search(sSettings.key, column.foreignKeyValue, sSettings.operator, sSettings.ignoreCase);\n            }\n        }\n        return query;\n    };\n    ForeignKey.prototype.isFiltered = function (column) {\n        var filterColumn = this.parent.filterSettings.columns.filter(function (fColumn) {\n            return (fColumn.field === column.foreignKeyValue && fColumn.uid === column.uid);\n        });\n        return {\n            column: filterColumn, isTrue: !!filterColumn.length\n        };\n    };\n    ForeignKey.prototype.getModuleName = function () {\n        return 'foreignKey';\n    };\n    ForeignKey.prototype.destroy = function () {\n        this.destroyEvent();\n    };\n    ForeignKey.prototype.destroyEvent = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.off(initForeignKeyColumn, this.initForeignKeyColumns);\n        this.parent.off(getForeignKeyData, this.getForeignKeyData);\n        this.parent.off(generateQuery, this.generateQueryFormData);\n    };\n    return ForeignKey;\n}(Data));\nexport { ForeignKey };\n","import { ComponentBase, gh, getProps, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { isUndefined } from '@syncfusion/ej2-base';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nexport var properties = ['isLazyUpdate', 'plugins', 'autocomplete', 'cssClass', 'enablePersistence', 'enableRtl', 'enabled', 'floatLabelType', 'htmlAttributes', 'locale', 'multiline', 'placeholder', 'readonly', 'showClearButton', 'type', 'value', 'width', 'blur', 'change', 'created', 'destroyed', 'focus', 'input'];\nexport var modelProps = ['value'];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0], watch = testProp[1], emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged', 'update:modelValue');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n    var props_1 = modelProps_1[_i];\n    emitProbs.push('update:' + props_1);\n}\n/**\n * Represents the Essential JS 2 VueJS TextBox Component\n * ```html\n * <ejs-textbox v-bind:value='value'></ejs-textbox>\n * ```\n */\nexport var TextBoxComponent = vueDefineComponent({\n    name: 'TextBoxComponent',\n    mixins: [ComponentBase],\n    props: props,\n    watch: watch,\n    emits: emitProbs,\n    model: { event: 'modelchanged' },\n    provide: function () { return { custom: this.custom }; },\n    data: function () {\n        return {\n            ej2Instances: new TextBox({}),\n            propKeys: properties,\n            models: modelProps,\n            hasChildDirective: false,\n            hasInjectedModules: false,\n            tagMapper: {},\n            tagNameMapper: {},\n            isVue3: !isExecute,\n            templateCollection: {},\n        };\n    },\n    created: function () {\n        this.ej2Instances._trigger = this.ej2Instances.trigger;\n        this.ej2Instances.trigger = this.trigger;\n        this.bindProperties();\n        this.ej2Instances._setProperties = this.ej2Instances.setProperties;\n        this.ej2Instances.setProperties = this.setProperties;\n        this.ej2Instances.clearTemplate = this.clearTemplate;\n        this.updated = this.updated;\n    },\n    render: function (createElement) {\n        var h = !isExecute ? gh : createElement;\n        var slots = null;\n        if (!isNullOrUndefined(this.$slots.default)) {\n            slots = !isExecute ? this.$slots.default() : this.$slots.default;\n        }\n        return h('input', slots);\n    },\n    methods: {\n        clearTemplate: function (templateNames) {\n            if (!templateNames) {\n                templateNames = Object.keys(this.templateCollection || {});\n            }\n            if (templateNames.length && this.templateCollection) {\n                for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n                    var tempName = templateNames_1[_i];\n                    var elementCollection = this.templateCollection[tempName];\n                    if (elementCollection && elementCollection.length) {\n                        for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n                            var ele = elementCollection_1[_a];\n                            var destroy = getValue('__vue__.$destroy', ele);\n                            if (destroy) {\n                                ele.__vue__.$destroy();\n                            }\n                            if (ele.innerHTML) {\n                                ele.innerHTML = '';\n                            }\n                        }\n                        delete this.templateCollection[tempName];\n                    }\n                }\n            }\n        },\n        setProperties: function (prop, muteOnChange) {\n            var _this = this;\n            if (this.isVue3) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if (this.ej2Instances && this.ej2Instances._setProperties) {\n                this.ej2Instances._setProperties(prop, muteOnChange);\n            }\n            if (prop && this.models && this.models.length) {\n                Object.keys(prop).map(function (key) {\n                    _this.models.map(function (model) {\n                        if ((key === model) && !(/datasource/i.test(key))) {\n                            if (_this.isVue3) {\n                                _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n                            }\n                            else {\n                                _this.$emit('update:' + key, prop[key]);\n                                _this.$emit('modelchanged', prop[key]);\n                            }\n                        }\n                    });\n                });\n            }\n        },\n        trigger: function (eventName, eventProp, successHandler) {\n            if (!isExecute) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if ((eventName === 'change' || eventName === 'input') && this.models && (this.models.length !== 0)) {\n                var key = this.models.toString().match(/checked|value/) || [];\n                var propKey = key[0];\n                if (eventProp && key && !isUndefined(eventProp[propKey])) {\n                    if (!isExecute) {\n                        this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('update:modelValue', eventProp[propKey]);\n                    }\n                    else {\n                        if (eventName === 'change' || (this.$props && !this.$props.isLazyUpdate)) {\n                            this.$emit('update:' + propKey, eventProp[propKey]);\n                            this.$emit('modelchanged', eventProp[propKey]);\n                        }\n                    }\n                }\n            }\n            else if ((eventName === 'actionBegin' && eventProp.requestType === 'dateNavigate') && this.models && (this.models.length !== 0)) {\n                var key = this.models.toString().match(/currentView|selectedDate/) || [];\n                var propKey = key[0];\n                if (eventProp && key && !isUndefined(eventProp[propKey])) {\n                    if (!isExecute) {\n                        this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n                    }\n                    else {\n                        this.$emit('update:' + propKey, eventProp[propKey]);\n                        this.$emit('modelchanged', eventProp[propKey]);\n                    }\n                }\n            }\n            if ((this.ej2Instances && this.ej2Instances._trigger)) {\n                this.ej2Instances._trigger(eventName, eventProp, successHandler);\n            }\n        },\n        custom: function () {\n            this.updated();\n        },\n        addAttributes: function (attributes) {\n            return this.ej2Instances.addAttributes(attributes);\n        },\n        addIcon: function (position, icons) {\n            return this.ej2Instances.addIcon(position, icons);\n        },\n        focusIn: function () {\n            return this.ej2Instances.focusIn();\n        },\n        focusOut: function () {\n            return this.ej2Instances.focusOut();\n        },\n        removeAttributes: function (attributes) {\n            return this.ej2Instances.removeAttributes(attributes);\n        },\n    }\n});\nexport var TextBoxPlugin = {\n    name: 'ejs-textbox',\n    install: function (Vue) {\n        Vue.component(TextBoxPlugin.name, TextBoxComponent);\n    }\n};\n","/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable @typescript-eslint/ban-types */\nimport { withInRange, getPoint, drawSymbol, getElement } from '../../common/utils/helper';\nimport { markerAnimate, TransformToVisible, appendChildElement } from '../../common/utils/helper';\nimport { PathOption, Rect, Size } from '@syncfusion/ej2-svg-base';\nimport { pointRender } from '../../common/model/constants';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `ScatterSeries` module is used to render the scatter series.\n */\nvar ScatterSeries = /** @class */ (function () {\n    function ScatterSeries() {\n    }\n    /**\n     * Render the scatter series.\n     *\n     * @returns {void}\n     * @private\n     */\n    ScatterSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n        // Scatter series DataLabel is not rendered after selecting StackingColumn\n        series.isRectSeries = false;\n        var marker = series.marker;\n        var visiblePoints = this.enableComplexProperty(series);\n        var argsData;\n        var getCoordinate = series.chart.chartAreaType === 'PolarRadar' ? TransformToVisible : getPoint;\n        var startLocation;\n        var redraw = series.chart.redraw;\n        var scatterBorder = {\n            width: this.isLineShapeMarker(marker.shape) ? series.width : series.border.width,\n            color: this.isLineShapeMarker(marker.shape) ? series.interior : series.border.color\n        };\n        for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n            var point = visiblePoints_1[_i];\n            startLocation = (redraw && point.symbolLocations) ? point.symbolLocations[0] : null;\n            point.symbolLocations = [];\n            point.regions = [];\n            if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n                argsData = {\n                    cancel: false, name: pointRender, series: series, point: point,\n                    fill: series.setPointColor(point, series.interior),\n                    border: series.setBorderColor(point, scatterBorder),\n                    height: marker.height, width: marker.width, shape: marker.shape\n                };\n                series.chart.trigger(pointRender, argsData);\n                if (!argsData.cancel) {\n                    point.symbolLocations.push(getCoordinate(point.xValue, point.yValue, xAxis, yAxis, isInverted, series));\n                    point.color = argsData.fill;\n                    this.refresh(series, point, argsData, startLocation);\n                }\n                else {\n                    point.marker = { visible: true };\n                }\n            }\n        }\n    };\n    ScatterSeries.prototype.isLineShapeMarker = function (shape) {\n        return shape === 'HorizontalLine' || shape === 'VerticalLine' || shape === 'Cross';\n    };\n    /**\n     * To improve the chart performance.\n     *\n     * @returns {void}\n     * @private\n     */\n    ScatterSeries.prototype.enableComplexProperty = function (series) {\n        var tempPoints2 = [];\n        var tempPoints = [];\n        var yVisibleRange = series.yAxis.visibleRange;\n        var xVisibleRange = series.xAxis.visibleRange;\n        var areaBounds = series.clipRect;\n        var seriesPoints = series.points;\n        var yTolerance = Math.abs(yVisibleRange.delta / areaBounds.height);\n        var xTolerance = Math.abs(xVisibleRange.delta / areaBounds.width);\n        var prevYValue = (seriesPoints[0] && seriesPoints[0].y > yTolerance) ? 0 : yTolerance;\n        var prevXValue = (seriesPoints[0] && seriesPoints[0].x > xTolerance) ? 0 : xTolerance;\n        var yVal = 0;\n        var xVal = 0;\n        for (var _i = 0, seriesPoints_1 = seriesPoints; _i < seriesPoints_1.length; _i++) {\n            var currentPoint = seriesPoints_1[_i];\n            currentPoint.symbolLocations = [];\n            yVal = currentPoint.yValue ? currentPoint.yValue : yVisibleRange.min;\n            xVal = currentPoint.xValue ? currentPoint.xValue : xVisibleRange.min;\n            if (Math.abs(prevYValue - yVal) >= yTolerance || Math.abs(prevXValue - xVal) >= xTolerance) {\n                tempPoints.push(currentPoint);\n                prevYValue = yVal;\n                prevXValue = xVal;\n            }\n        }\n        var currentTempPoint;\n        for (var i = 0; i < tempPoints.length; i++) {\n            currentTempPoint = tempPoints[i];\n            if (isNullOrUndefined(currentTempPoint.x) || currentTempPoint.x === '') {\n                continue;\n            }\n            else {\n                tempPoints2.push(currentTempPoint);\n            }\n        }\n        return tempPoints2;\n    };\n    /**\n     * To append scatter element\n     *\n     * @param {Series} series series\n     * @param {Points} point point\n     * @param {IPointRenderEventArgs} argsData argsData\n     * @param {ChartLocation} startLocation startLocation\n     * @returns {void}\n     */\n    ScatterSeries.prototype.refresh = function (series, point, argsData, startLocation) {\n        var chart = series.chart;\n        var circlePath;\n        var previousPath;\n        var marker = series.marker;\n        var imageURL = argsData.point.marker.imageUrl || marker.imageUrl;\n        var shapeOption = new PathOption(chart.element.id + '_Series_' + series.index + '_Point_' + point.index, argsData.fill, argsData.border.width, (series.chart.enableCanvas && !argsData.border.color) ? argsData.fill : argsData.border.color, series.opacity, null);\n        if (chart.redraw && getElement(shapeOption.id)) {\n            circlePath = argsData.shape === 'Circle' ? 'c' : '';\n            previousPath = getElement(shapeOption.id).getAttribute('d');\n        }\n        var element = drawSymbol(point.symbolLocations[0], argsData.shape, new Size(argsData.width, argsData.height), imageURL, shapeOption, point.x.toString() + ':' + point.yValue.toString(), series.chart.renderer, series.clipRect);\n        appendChildElement(series.chart.enableCanvas, series.seriesElement, element, chart.redraw, true, circlePath + 'x', circlePath + 'y', startLocation, previousPath, false, false, null, null, true);\n        point.regions.push(new Rect(point.symbolLocations[0].x - marker.width, point.symbolLocations[0].y - marker.height, 2 * marker.width, 2 * marker.height));\n        point.marker = {\n            border: argsData.border, fill: argsData.fill,\n            height: argsData.height, visible: true,\n            width: argsData.width, shape: argsData.shape, imageUrl: imageURL\n        };\n    };\n    /**\n     * Animates the series.\n     *\n     * @param  {Series} series - Defines the series to animate.\n     * @returns {void}\n     */\n    ScatterSeries.prototype.doAnimation = function (series) {\n        var duration = series.animation.duration;\n        var delay = series.animation.delay;\n        var rectElements = series.seriesElement.childNodes;\n        var count = 1;\n        for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n            var point = _a[_i];\n            if (!point.symbolLocations.length || !rectElements[count]) {\n                continue;\n            }\n            markerAnimate(rectElements[count], delay, duration, series, point.index, point.symbolLocations[0], false);\n            count++;\n        }\n    };\n    /**\n     * Get module name.\n     */\n    ScatterSeries.prototype.getModuleName = function () {\n        /**\n         * Returns the module name of the series\n         */\n        return 'ScatterSeries';\n    };\n    /**\n     * To destroy the scatter.\n     *\n     * @returns {void}\n     */\n    ScatterSeries.prototype.destroy = function () {\n        /**\n         * Destroy method calling here\n         */\n    };\n    return ScatterSeries;\n}());\nexport { ScatterSeries };\n","//! moment.js locale configuration\n//! locale : Korean [ko]\n//! author : Kyungwook, Park : https://github.com/kyungw00k\n//! author : Jeeeyul Lee <jeeeyul@gmail.com>\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ko = moment.defineLocale('ko', {\n        months: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split('_'),\n        monthsShort: '1월_2월_3월_4월_5월_6월_7월_8월_9월_10월_11월_12월'.split(\n            '_'\n        ),\n        weekdays: '일요일_월요일_화요일_수요일_목요일_금요일_토요일'.split('_'),\n        weekdaysShort: '일_월_화_수_목_금_토'.split('_'),\n        weekdaysMin: '일_월_화_수_목_금_토'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY년 MMMM D일',\n            LLL: 'YYYY년 MMMM D일 A h:mm',\n            LLLL: 'YYYY년 MMMM D일 dddd A h:mm',\n            l: 'YYYY.MM.DD.',\n            ll: 'YYYY년 MMMM D일',\n            lll: 'YYYY년 MMMM D일 A h:mm',\n            llll: 'YYYY년 MMMM D일 dddd A h:mm',\n        },\n        calendar: {\n            sameDay: '오늘 LT',\n            nextDay: '내일 LT',\n            nextWeek: 'dddd LT',\n            lastDay: '어제 LT',\n            lastWeek: '지난주 dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s 후',\n            past: '%s 전',\n            s: '몇 초',\n            ss: '%d초',\n            m: '1분',\n            mm: '%d분',\n            h: '한 시간',\n            hh: '%d시간',\n            d: '하루',\n            dd: '%d일',\n            M: '한 달',\n            MM: '%d달',\n            y: '일 년',\n            yy: '%d년',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(일|월|주)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '일';\n                case 'M':\n                    return number + '월';\n                case 'w':\n                case 'W':\n                    return number + '주';\n                default:\n                    return number;\n            }\n        },\n        meridiemParse: /오전|오후/,\n        isPM: function (token) {\n            return token === '오후';\n        },\n        meridiem: function (hour, minute, isUpper) {\n            return hour < 12 ? '오전' : '오후';\n        },\n    });\n\n    return ko;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kurdish [ku]\n//! author : Shahram Mebashar : https://github.com/ShahramMebashar\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        months = [\n            'کانونی دووەم',\n            'شوبات',\n            'ئازار',\n            'نیسان',\n            'ئایار',\n            'حوزەیران',\n            'تەمموز',\n            'ئاب',\n            'ئەیلوول',\n            'تشرینی یەكەم',\n            'تشرینی دووەم',\n            'كانونی یەکەم',\n        ];\n\n    var ku = moment.defineLocale('ku', {\n        months: months,\n        monthsShort: months,\n        weekdays:\n            'یه‌كشه‌ممه‌_دووشه‌ممه‌_سێشه‌ممه‌_چوارشه‌ممه‌_پێنجشه‌ممه‌_هه‌ینی_شه‌ممه‌'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یه‌كشه‌م_دووشه‌م_سێشه‌م_چوارشه‌م_پێنجشه‌م_هه‌ینی_شه‌ممه‌'.split('_'),\n        weekdaysMin: 'ی_د_س_چ_پ_ه_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ئێواره‌|به‌یانی/,\n        isPM: function (input) {\n            return /ئێواره‌/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'به‌یانی';\n            } else {\n                return 'ئێواره‌';\n            }\n        },\n        calendar: {\n            sameDay: '[ئه‌مرۆ كاتژمێر] LT',\n            nextDay: '[به‌یانی كاتژمێر] LT',\n            nextWeek: 'dddd [كاتژمێر] LT',\n            lastDay: '[دوێنێ كاتژمێر] LT',\n            lastWeek: 'dddd [كاتژمێر] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'له‌ %s',\n            past: '%s',\n            s: 'چه‌ند چركه‌یه‌ك',\n            ss: 'چركه‌ %d',\n            m: 'یه‌ك خوله‌ك',\n            mm: '%d خوله‌ك',\n            h: 'یه‌ك كاتژمێر',\n            hh: '%d كاتژمێر',\n            d: 'یه‌ك ڕۆژ',\n            dd: '%d ڕۆژ',\n            M: 'یه‌ك مانگ',\n            MM: '%d مانگ',\n            y: 'یه‌ك ساڵ',\n            yy: '%d ساڵ',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ku;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bosnian [bs]\n//! author : Nedim Cholich : https://github.com/frontyard\n//! based on (hr) translation by Bojan Marković\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var bs = moment.defineLocale('bs', {\n        months: 'januar_februar_mart_april_maj_juni_juli_august_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._aug._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                        return '[prošlu] dddd [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bs;\n\n})));\n","import { ComponentBase, gh, getProps, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { isUndefined } from '@syncfusion/ej2-base';\nimport { DatePicker } from '@syncfusion/ej2-calendars';\nexport var properties = ['isLazyUpdate', 'plugins', 'allowEdit', 'calendarMode', 'cssClass', 'dayHeaderFormat', 'depth', 'enableMask', 'enablePersistence', 'enableRtl', 'enabled', 'firstDayOfWeek', 'floatLabelType', 'format', 'fullScreenMode', 'htmlAttributes', 'isMultiSelection', 'keyConfigs', 'locale', 'maskPlaceholder', 'max', 'min', 'openOnFocus', 'placeholder', 'readonly', 'serverTimezoneOffset', 'showClearButton', 'showTodayButton', 'start', 'strictMode', 'value', 'values', 'weekNumber', 'weekRule', 'width', 'zIndex', 'blur', 'change', 'cleared', 'close', 'created', 'destroyed', 'focus', 'navigated', 'open', 'renderDayCell'];\nexport var modelProps = ['value'];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0], watch = testProp[1], emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged', 'update:modelValue');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n    var props_1 = modelProps_1[_i];\n    emitProbs.push('update:' + props_1);\n}\n/**\n * Represents the Essential JS 2 VueJS DatePicker Component.\n * ```html\n * <ejs-datepicker v-bind:value='date'></ejs-datepicker>\n * ```\n */\nexport var DatePickerComponent = vueDefineComponent({\n    name: 'DatePickerComponent',\n    mixins: [ComponentBase],\n    props: props,\n    watch: watch,\n    emits: emitProbs,\n    model: { event: 'modelchanged' },\n    provide: function () { return { custom: this.custom }; },\n    data: function () {\n        return {\n            ej2Instances: new DatePicker({}),\n            propKeys: properties,\n            models: modelProps,\n            hasChildDirective: false,\n            hasInjectedModules: true,\n            tagMapper: {},\n            tagNameMapper: {},\n            isVue3: !isExecute,\n            templateCollection: {},\n        };\n    },\n    created: function () {\n        this.ej2Instances._trigger = this.ej2Instances.trigger;\n        this.ej2Instances.trigger = this.trigger;\n        this.bindProperties();\n        this.ej2Instances._setProperties = this.ej2Instances.setProperties;\n        this.ej2Instances.setProperties = this.setProperties;\n        this.ej2Instances.clearTemplate = this.clearTemplate;\n        this.updated = this.updated;\n    },\n    render: function (createElement) {\n        var h = !isExecute ? gh : createElement;\n        var slots = null;\n        if (!isNullOrUndefined(this.$slots.default)) {\n            slots = !isExecute ? this.$slots.default() : this.$slots.default;\n        }\n        return h('input', slots);\n    },\n    methods: {\n        clearTemplate: function (templateNames) {\n            if (!templateNames) {\n                templateNames = Object.keys(this.templateCollection || {});\n            }\n            if (templateNames.length && this.templateCollection) {\n                for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n                    var tempName = templateNames_1[_i];\n                    var elementCollection = this.templateCollection[tempName];\n                    if (elementCollection && elementCollection.length) {\n                        for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n                            var ele = elementCollection_1[_a];\n                            var destroy = getValue('__vue__.$destroy', ele);\n                            if (destroy) {\n                                ele.__vue__.$destroy();\n                            }\n                            if (ele.innerHTML) {\n                                ele.innerHTML = '';\n                            }\n                        }\n                        delete this.templateCollection[tempName];\n                    }\n                }\n            }\n        },\n        setProperties: function (prop, muteOnChange) {\n            var _this = this;\n            if (this.isVue3) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if (this.ej2Instances && this.ej2Instances._setProperties) {\n                this.ej2Instances._setProperties(prop, muteOnChange);\n            }\n            if (prop && this.models && this.models.length) {\n                Object.keys(prop).map(function (key) {\n                    _this.models.map(function (model) {\n                        if ((key === model) && !(/datasource/i.test(key))) {\n                            if (_this.isVue3) {\n                                _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n                            }\n                            else {\n                                _this.$emit('update:' + key, prop[key]);\n                                _this.$emit('modelchanged', prop[key]);\n                            }\n                        }\n                    });\n                });\n            }\n        },\n        trigger: function (eventName, eventProp, successHandler) {\n            if (!isExecute) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if ((eventName === 'change' || eventName === 'input') && this.models && (this.models.length !== 0)) {\n                var key = this.models.toString().match(/checked|value/) || [];\n                var propKey = key[0];\n                if (eventProp && key && !isUndefined(eventProp[propKey])) {\n                    if (!isExecute) {\n                        this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('update:modelValue', eventProp[propKey]);\n                    }\n                    else {\n                        if (eventName === 'change' || (this.$props && !this.$props.isLazyUpdate)) {\n                            this.$emit('update:' + propKey, eventProp[propKey]);\n                            this.$emit('modelchanged', eventProp[propKey]);\n                        }\n                    }\n                }\n            }\n            else if ((eventName === 'actionBegin' && eventProp.requestType === 'dateNavigate') && this.models && (this.models.length !== 0)) {\n                var key = this.models.toString().match(/currentView|selectedDate/) || [];\n                var propKey = key[0];\n                if (eventProp && key && !isUndefined(eventProp[propKey])) {\n                    if (!isExecute) {\n                        this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n                    }\n                    else {\n                        this.$emit('update:' + propKey, eventProp[propKey]);\n                        this.$emit('modelchanged', eventProp[propKey]);\n                    }\n                }\n            }\n            if ((this.ej2Instances && this.ej2Instances._trigger)) {\n                this.ej2Instances._trigger(eventName, eventProp, successHandler);\n            }\n        },\n        custom: function () {\n            this.updated();\n        },\n        addDate: function (dates) {\n            return this.ej2Instances.addDate(dates);\n        },\n        createContent: function () {\n            return this.ej2Instances.createContent();\n        },\n        currentView: function () {\n            return this.ej2Instances.currentView();\n        },\n        focusIn: function (triggerEvent) {\n            return this.ej2Instances.focusIn(triggerEvent);\n        },\n        focusOut: function () {\n            return this.ej2Instances.focusOut();\n        },\n        hide: function (event) {\n            return this.ej2Instances.hide(event);\n        },\n        navigateTo: function (view, date) {\n            return this.ej2Instances.navigateTo(view, date);\n        },\n        removeDate: function (dates) {\n            return this.ej2Instances.removeDate(dates);\n        },\n        requiredModules: function () {\n            return this.ej2Instances.requiredModules();\n        },\n        show: function (type, e) {\n            return this.ej2Instances.show(type, e);\n        },\n    }\n});\nexport var DatePickerPlugin = {\n    name: 'ejs-datepicker',\n    install: function (Vue) {\n        Vue.component(DatePickerPlugin.name, DatePickerComponent);\n    }\n};\n","//! moment.js locale configuration\n//! locale : Lithuanian [lt]\n//! author : Mindaugas Mozūras : https://github.com/mmozuras\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var units = {\n        ss: 'sekundė_sekundžių_sekundes',\n        m: 'minutė_minutės_minutę',\n        mm: 'minutės_minučių_minutes',\n        h: 'valanda_valandos_valandą',\n        hh: 'valandos_valandų_valandas',\n        d: 'diena_dienos_dieną',\n        dd: 'dienos_dienų_dienas',\n        M: 'mėnuo_mėnesio_mėnesį',\n        MM: 'mėnesiai_mėnesių_mėnesius',\n        y: 'metai_metų_metus',\n        yy: 'metai_metų_metus',\n    };\n    function translateSeconds(number, withoutSuffix, key, isFuture) {\n        if (withoutSuffix) {\n            return 'kelios sekundės';\n        } else {\n            return isFuture ? 'kelių sekundžių' : 'kelias sekundes';\n        }\n    }\n    function translateSingular(number, withoutSuffix, key, isFuture) {\n        return withoutSuffix\n            ? forms(key)[0]\n            : isFuture\n            ? forms(key)[1]\n            : forms(key)[2];\n    }\n    function special(number) {\n        return number % 10 === 0 || (number > 10 && number < 20);\n    }\n    function forms(key) {\n        return units[key].split('_');\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        if (number === 1) {\n            return (\n                result + translateSingular(number, withoutSuffix, key[0], isFuture)\n            );\n        } else if (withoutSuffix) {\n            return result + (special(number) ? forms(key)[1] : forms(key)[0]);\n        } else {\n            if (isFuture) {\n                return result + forms(key)[1];\n            } else {\n                return result + (special(number) ? forms(key)[1] : forms(key)[2]);\n            }\n        }\n    }\n    var lt = moment.defineLocale('lt', {\n        months: {\n            format: 'sausio_vasario_kovo_balandžio_gegužės_birželio_liepos_rugpjūčio_rugsėjo_spalio_lapkričio_gruodžio'.split(\n                '_'\n            ),\n            standalone:\n                'sausis_vasaris_kovas_balandis_gegužė_birželis_liepa_rugpjūtis_rugsėjis_spalis_lapkritis_gruodis'.split(\n                    '_'\n                ),\n            isFormat: /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?|MMMM?(\\[[^\\[\\]]*\\]|\\s)+D[oD]?/,\n        },\n        monthsShort: 'sau_vas_kov_bal_geg_bir_lie_rgp_rgs_spa_lap_grd'.split('_'),\n        weekdays: {\n            format: 'sekmadienį_pirmadienį_antradienį_trečiadienį_ketvirtadienį_penktadienį_šeštadienį'.split(\n                '_'\n            ),\n            standalone:\n                'sekmadienis_pirmadienis_antradienis_trečiadienis_ketvirtadienis_penktadienis_šeštadienis'.split(\n                    '_'\n                ),\n            isFormat: /dddd HH:mm/,\n        },\n        weekdaysShort: 'Sek_Pir_Ant_Tre_Ket_Pen_Šeš'.split('_'),\n        weekdaysMin: 'S_P_A_T_K_Pn_Š'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY [m.] MMMM D [d.]',\n            LLL: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            LLLL: 'YYYY [m.] MMMM D [d.], dddd, HH:mm [val.]',\n            l: 'YYYY-MM-DD',\n            ll: 'YYYY [m.] MMMM D [d.]',\n            lll: 'YYYY [m.] MMMM D [d.], HH:mm [val.]',\n            llll: 'YYYY [m.] MMMM D [d.], ddd, HH:mm [val.]',\n        },\n        calendar: {\n            sameDay: '[Šiandien] LT',\n            nextDay: '[Rytoj] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[Vakar] LT',\n            lastWeek: '[Praėjusį] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'po %s',\n            past: 'prieš %s',\n            s: translateSeconds,\n            ss: translate,\n            m: translateSingular,\n            mm: translate,\n            h: translateSingular,\n            hh: translate,\n            d: translateSingular,\n            dd: translate,\n            M: translateSingular,\n            MM: translate,\n            y: translateSingular,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-oji/,\n        ordinal: function (number) {\n            return number + '-oji';\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lt;\n\n})));\n","/* eslint-disable */\nimport { Encoding } from '@syncfusion/ej2-file-utils';\n/**\n * array literal codes\n */\nvar ARR_LITERAL_CODES = new Int16Array(286);\nvar ARR_LITERAL_LENGTHS = new Uint8Array(286);\nvar ARR_DISTANCE_CODES = new Int16Array(30);\nvar ARR_DISTANCE_LENGTHS = new Uint8Array(30);\n/**\n * represent compression stream writer\n * ```typescript\n * let compressedWriter = new CompressedStreamWriter();\n * let text: string = 'Hello world!!!';\n * compressedWriter.write(text, 0, text.length);\n * compressedWriter.close();\n * ```\n */\nvar CompressedStreamWriter = /** @class */ (function () {\n    /**\n     * Initializes compressor and writes ZLib header if needed.\n     * @param {boolean} noWrap - optional if true, ZLib header and checksum will not be written.\n     */\n    function CompressedStreamWriter(noWrap) {\n        this.pendingBuffer = new Uint8Array(1 << 16);\n        this.pendingBufLength = 0;\n        this.pendingBufCache = 0;\n        this.pendingBufBitsInCache = 0;\n        this.bufferPosition = 0;\n        this.extraBits = 0;\n        this.currentHash = 0;\n        this.matchStart = 0;\n        this.matchLength = 0;\n        this.matchPrevAvail = false;\n        this.blockStart = 0;\n        this.stringStart = 0;\n        this.lookAhead = 0;\n        this.totalBytesIn = 0;\n        this.inputOffset = 0;\n        this.inputEnd = 0;\n        this.windowSize = 1 << 15;\n        this.windowMask = this.windowSize - 1;\n        this.hashSize = 1 << 15;\n        this.hashMask = this.hashSize - 1;\n        this.hashShift = Math.floor((15 + 3 - 1) / 3);\n        this.maxDist = this.windowSize - 262;\n        this.checkSum = 1;\n        this.noWrap = false;\n        if (!CompressedStreamWriter.isHuffmanTreeInitiated) {\n            CompressedStreamWriter.initHuffmanTree();\n            CompressedStreamWriter.isHuffmanTreeInitiated = true;\n        }\n        this.treeLiteral = new CompressorHuffmanTree(this, 286, 257, 15);\n        this.treeDistances = new CompressorHuffmanTree(this, 30, 1, 15);\n        this.treeCodeLengths = new CompressorHuffmanTree(this, 19, 4, 7);\n        this.arrDistances = new Uint16Array((1 << 14));\n        this.arrLiterals = new Uint8Array((1 << 14));\n        this.stream = [];\n        this.dataWindow = new Uint8Array(2 * this.windowSize);\n        this.hashHead = new Int16Array(this.hashSize);\n        this.hashPrevious = new Int16Array(this.windowSize);\n        this.blockStart = this.stringStart = 1;\n        this.noWrap = noWrap;\n        if (!noWrap) {\n            this.writeZLibHeader();\n        }\n    }\n    Object.defineProperty(CompressedStreamWriter.prototype, \"compressedData\", {\n        /**\n         * get compressed data\n         */\n        get: function () {\n            return this.stream;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(CompressedStreamWriter.prototype, \"getCompressedString\", {\n        get: function () {\n            var compressedString = '';\n            if (this.stream !== undefined) {\n                for (var i = 0; i < this.stream.length; i++) {\n                    compressedString += String.fromCharCode.apply(null, this.stream[i]);\n                }\n            }\n            return compressedString;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Compresses data and writes it to the stream.\n     * @param {Uint8Array} data - data to compress\n     * @param {number} offset - offset in data\n     * @param {number} length - length of the data\n     * @returns {void}\n     */\n    CompressedStreamWriter.prototype.write = function (data, offset, length) {\n        if (data === undefined || data === null) {\n            throw new Error('ArgumentException: data cannot null or undefined');\n        }\n        var end = offset + length;\n        if (0 > offset || offset > end || end > data.length) {\n            throw new Error('ArgumentOutOfRangeException: Offset or length is incorrect');\n        }\n        if (typeof data === 'string') {\n            var encode = new Encoding(false);\n            encode.type = 'Utf8';\n            data = new Uint8Array(encode.getBytes(data, 0, data.length));\n            end = offset + data.length;\n        }\n        this.inputBuffer = data;\n        this.inputOffset = offset;\n        this.inputEnd = end;\n        if (!this.noWrap) {\n            this.checkSum = ChecksumCalculator.checksumUpdate(this.checkSum, this.inputBuffer, this.inputOffset, end);\n        }\n        while (!(this.inputEnd === this.inputOffset) || !(this.pendingBufLength === 0)) {\n            this.pendingBufferFlush();\n            this.compressData(false);\n        }\n    };\n    /**\n     * write ZLib header to the compressed data\n     * @return {void}\n     */\n    CompressedStreamWriter.prototype.writeZLibHeader = function () {\n        /* Initialize header.*/\n        var headerDate = (8 + (7 << 4)) << 8;\n        /* Save compression level.*/\n        headerDate |= ((5 >> 2) & 3) << 6;\n        /* Align header.*/\n        headerDate += 31 - (headerDate % 31);\n        /* Write header to stream.*/\n        this.pendingBufferWriteShortBytes(headerDate);\n    };\n    /**\n     *  Write Most Significant Bytes in to stream\n     * @param {number} s - check sum value\n     */\n    CompressedStreamWriter.prototype.pendingBufferWriteShortBytes = function (s) {\n        this.pendingBuffer[this.pendingBufLength++] = s >> 8;\n        this.pendingBuffer[this.pendingBufLength++] = s;\n    };\n    CompressedStreamWriter.prototype.compressData = function (finish) {\n        var success;\n        do {\n            this.fillWindow();\n            var canFlush = (finish && this.inputEnd === this.inputOffset);\n            success = this.compressSlow(canFlush, finish);\n        } while (this.pendingBufLength === 0 && success);\n        return success;\n    };\n    CompressedStreamWriter.prototype.compressSlow = function (flush, finish) {\n        if (this.lookAhead < 262 && !flush) {\n            return false;\n        }\n        while (this.lookAhead >= 262 || flush) {\n            if (this.lookAhead === 0) {\n                return this.lookAheadCompleted(finish);\n            }\n            if (this.stringStart >= 2 * this.windowSize - 262) {\n                this.slideWindow();\n            }\n            var prevMatch = this.matchStart;\n            var prevLen = this.matchLength;\n            if (this.lookAhead >= 3) {\n                this.discardMatch();\n            }\n            if (prevLen >= 3 && this.matchLength <= prevLen) {\n                prevLen = this.matchPreviousBest(prevMatch, prevLen);\n            }\n            else {\n                this.matchPreviousAvailable();\n            }\n            if (this.bufferPosition >= (1 << 14)) {\n                return this.huffmanIsFull(finish);\n            }\n        }\n        return true;\n    };\n    CompressedStreamWriter.prototype.discardMatch = function () {\n        var hashHead = this.insertString();\n        if (hashHead !== 0 && this.stringStart - hashHead <= this.maxDist && this.findLongestMatch(hashHead)) {\n            if (this.matchLength <= 5 && (this.matchLength === 3 && this.stringStart - this.matchStart > 4096)) {\n                this.matchLength = 3 - 1;\n            }\n        }\n    };\n    CompressedStreamWriter.prototype.matchPreviousAvailable = function () {\n        if (this.matchPrevAvail) {\n            this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n        }\n        this.matchPrevAvail = true;\n        this.stringStart++;\n        this.lookAhead--;\n    };\n    CompressedStreamWriter.prototype.matchPreviousBest = function (prevMatch, prevLen) {\n        this.huffmanTallyDist(this.stringStart - 1 - prevMatch, prevLen);\n        prevLen -= 2;\n        do {\n            this.stringStart++;\n            this.lookAhead--;\n            if (this.lookAhead >= 3) {\n                this.insertString();\n            }\n        } while (--prevLen > 0);\n        this.stringStart++;\n        this.lookAhead--;\n        this.matchPrevAvail = false;\n        this.matchLength = 3 - 1;\n        return prevLen;\n    };\n    CompressedStreamWriter.prototype.lookAheadCompleted = function (finish) {\n        if (this.matchPrevAvail) {\n            this.huffmanTallyLit(this.dataWindow[this.stringStart - 1] & 0xff);\n        }\n        this.matchPrevAvail = false;\n        this.huffmanFlushBlock(this.dataWindow, this.blockStart, this.stringStart - this.blockStart, finish);\n        this.blockStart = this.stringStart;\n        return false;\n    };\n    CompressedStreamWriter.prototype.huffmanIsFull = function (finish) {\n        var len = this.stringStart - this.blockStart;\n        if (this.matchPrevAvail) {\n            len--;\n        }\n        var lastBlock = (finish && this.lookAhead === 0 && !this.matchPrevAvail);\n        this.huffmanFlushBlock(this.dataWindow, this.blockStart, len, lastBlock);\n        this.blockStart += len;\n        return !lastBlock;\n    };\n    CompressedStreamWriter.prototype.fillWindow = function () {\n        if (this.stringStart >= this.windowSize + this.maxDist) {\n            this.slideWindow();\n        }\n        while (this.lookAhead < 262 && this.inputOffset < this.inputEnd) {\n            var more = 2 * this.windowSize - this.lookAhead - this.stringStart;\n            if (more > this.inputEnd - this.inputOffset) {\n                more = this.inputEnd - this.inputOffset;\n            }\n            this.dataWindow.set(this.inputBuffer.subarray(this.inputOffset, this.inputOffset + more), this.stringStart + this.lookAhead);\n            this.inputOffset += more;\n            this.totalBytesIn += more;\n            this.lookAhead += more;\n        }\n        if (this.lookAhead >= 3) {\n            this.updateHash();\n        }\n    };\n    CompressedStreamWriter.prototype.slideWindow = function () {\n        this.dataWindow.set(this.dataWindow.subarray(this.windowSize, this.windowSize + this.windowSize), 0);\n        this.matchStart -= this.windowSize;\n        this.stringStart -= this.windowSize;\n        this.blockStart -= this.windowSize;\n        for (var i = 0; i < this.hashSize; ++i) {\n            var m = this.hashHead[i] & 0xffff;\n            this.hashHead[i] = (((m >= this.windowSize) ? (m - this.windowSize) : 0));\n        }\n        for (var i = 0; i < this.windowSize; i++) {\n            var m = this.hashPrevious[i] & 0xffff;\n            this.hashPrevious[i] = ((m >= this.windowSize) ? (m - this.windowSize) : 0);\n        }\n    };\n    CompressedStreamWriter.prototype.insertString = function () {\n        var match;\n        var hash = ((this.currentHash << this.hashShift) ^ this.dataWindow[this.stringStart + (3 - 1)]) & this.hashMask;\n        this.hashPrevious[this.stringStart & this.windowMask] = match = this.hashHead[hash];\n        this.hashHead[hash] = this.stringStart;\n        this.currentHash = hash;\n        return match & 0xffff;\n    };\n    CompressedStreamWriter.prototype.findLongestMatch = function (curMatch) {\n        var chainLen = 4096;\n        var niceLen = 258;\n        var scan = this.stringStart;\n        var match;\n        var bestEnd = this.stringStart + this.matchLength;\n        var bestLength = Math.max(this.matchLength, 3 - 1);\n        var limit = Math.max(this.stringStart - this.maxDist, 0);\n        var stringEnd = this.stringStart + 258 - 1;\n        var scanEnd1 = this.dataWindow[bestEnd - 1];\n        var scanEnd = this.dataWindow[bestEnd];\n        var data = this.dataWindow;\n        if (bestLength >= 32) {\n            chainLen >>= 2;\n        }\n        if (niceLen > this.lookAhead) {\n            niceLen = this.lookAhead;\n        }\n        do {\n            if (data[curMatch + bestLength] !== scanEnd ||\n                data[curMatch + bestLength - 1] !== scanEnd1 ||\n                data[curMatch] !== data[scan] ||\n                data[curMatch + 1] !== data[scan + 1]) {\n                continue;\n            }\n            match = curMatch + 2;\n            scan += 2;\n            /* tslint:disable */\n            while (data[++scan] === data[++match] && data[++scan] === data[++match] &&\n                data[++scan] === data[++match] && data[++scan] === data[++match] &&\n                data[++scan] === data[++match] && data[++scan] === data[++match] &&\n                data[++scan] === data[++match] && data[++scan] === data[++match] && scan < stringEnd) {\n                /* tslint:disable */\n            }\n            if (scan > bestEnd) {\n                this.matchStart = curMatch;\n                bestEnd = scan;\n                bestLength = scan - this.stringStart;\n                if (bestLength >= niceLen) {\n                    break;\n                }\n                scanEnd1 = data[bestEnd - 1];\n                scanEnd = data[bestEnd];\n            }\n            scan = this.stringStart;\n        } while ((curMatch = (this.hashPrevious[curMatch & this.windowMask] & 0xffff)) > limit && --chainLen !== 0);\n        this.matchLength = Math.min(bestLength, this.lookAhead);\n        return this.matchLength >= 3;\n    };\n    CompressedStreamWriter.prototype.updateHash = function () {\n        this.currentHash = (this.dataWindow[this.stringStart] << this.hashShift) ^ this.dataWindow[this.stringStart + 1];\n    };\n    CompressedStreamWriter.prototype.huffmanTallyLit = function (literal) {\n        this.arrDistances[this.bufferPosition] = 0;\n        this.arrLiterals[this.bufferPosition++] = literal;\n        this.treeLiteral.codeFrequencies[literal]++;\n        return this.bufferPosition >= (1 << 14);\n    };\n    CompressedStreamWriter.prototype.huffmanTallyDist = function (dist, len) {\n        this.arrDistances[this.bufferPosition] = dist;\n        this.arrLiterals[this.bufferPosition++] = (len - 3);\n        var lc = this.huffmanLengthCode(len - 3);\n        this.treeLiteral.codeFrequencies[lc]++;\n        if (lc >= 265 && lc < 285) {\n            this.extraBits += Math.floor((lc - 261) / 4);\n        }\n        var dc = this.huffmanDistanceCode(dist - 1);\n        this.treeDistances.codeFrequencies[dc]++;\n        if (dc >= 4) {\n            this.extraBits += Math.floor((dc / 2 - 1));\n        }\n        return this.bufferPosition >= (1 << 14);\n    };\n    CompressedStreamWriter.prototype.huffmanFlushBlock = function (stored, storedOffset, storedLength, lastBlock) {\n        this.treeLiteral.codeFrequencies[256]++;\n        this.treeLiteral.buildTree();\n        this.treeDistances.buildTree();\n        this.treeLiteral.calculateBLFreq(this.treeCodeLengths);\n        this.treeDistances.calculateBLFreq(this.treeCodeLengths);\n        this.treeCodeLengths.buildTree();\n        var blTreeCodes = 4;\n        for (var i = 18; i > blTreeCodes; i--) {\n            if (this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[i]] > 0) {\n                blTreeCodes = i + 1;\n            }\n        }\n        var opt_len = 14 + blTreeCodes * 3 + this.treeCodeLengths.getEncodedLength() +\n            this.treeLiteral.getEncodedLength() + this.treeDistances.getEncodedLength() + this.extraBits;\n        var static_len = this.extraBits;\n        for (var i = 0; i < 286; i++) {\n            static_len += this.treeLiteral.codeFrequencies[i] * ARR_LITERAL_LENGTHS[i];\n        }\n        for (var i = 0; i < 30; i++) {\n            static_len += this.treeDistances.codeFrequencies[i] * ARR_DISTANCE_LENGTHS[i];\n        }\n        if (opt_len >= static_len) {\n            // Force static trees.\n            opt_len = static_len;\n        }\n        if (storedOffset >= 0 && storedLength + 4 < opt_len >> 3) {\n            this.huffmanFlushStoredBlock(stored, storedOffset, storedLength, lastBlock);\n        }\n        else if (opt_len == static_len) {\n            // Encode with static tree.\n            this.pendingBufferWriteBits((1 << 1) + (lastBlock ? 1 : 0), 3);\n            this.treeLiteral.setStaticCodes(ARR_LITERAL_CODES, ARR_LITERAL_LENGTHS);\n            this.treeDistances.setStaticCodes(ARR_DISTANCE_CODES, ARR_DISTANCE_LENGTHS);\n            this.huffmanCompressBlock();\n            this.huffmanReset();\n        }\n        else {\n            this.pendingBufferWriteBits((2 << 1) + (lastBlock ? 1 : 0), 3);\n            this.huffmanSendAllTrees(blTreeCodes);\n            this.huffmanCompressBlock();\n            this.huffmanReset();\n        }\n    };\n    CompressedStreamWriter.prototype.huffmanFlushStoredBlock = function (stored, storedOffset, storedLength, lastBlock) {\n        this.pendingBufferWriteBits((0 << 1) + (lastBlock ? 1 : 0), 3);\n        this.pendingBufferAlignToByte();\n        this.pendingBufferWriteShort(storedLength);\n        this.pendingBufferWriteShort(~storedLength);\n        this.pendingBufferWriteByteBlock(stored, storedOffset, storedLength);\n        this.huffmanReset();\n    };\n    CompressedStreamWriter.prototype.huffmanLengthCode = function (len) {\n        if (len === 255) {\n            return 285;\n        }\n        var code = 257;\n        while (len >= 8) {\n            code += 4;\n            len >>= 1;\n        }\n        return code + len;\n    };\n    CompressedStreamWriter.prototype.huffmanDistanceCode = function (distance) {\n        var code = 0;\n        while (distance >= 4) {\n            code += 2;\n            distance >>= 1;\n        }\n        return code + distance;\n    };\n    CompressedStreamWriter.prototype.huffmanSendAllTrees = function (blTreeCodes) {\n        this.treeCodeLengths.buildCodes();\n        this.treeLiteral.buildCodes();\n        this.treeDistances.buildCodes();\n        this.pendingBufferWriteBits(this.treeLiteral.treeLength - 257, 5);\n        this.pendingBufferWriteBits(this.treeDistances.treeLength - 1, 5);\n        this.pendingBufferWriteBits(blTreeCodes - 4, 4);\n        for (var rank = 0; rank < blTreeCodes; rank++) {\n            this.pendingBufferWriteBits(this.treeCodeLengths.codeLengths[CompressorHuffmanTree.huffCodeLengthOrders[rank]], 3);\n        }\n        this.treeLiteral.writeTree(this.treeCodeLengths);\n        this.treeDistances.writeTree(this.treeCodeLengths);\n    };\n    CompressedStreamWriter.prototype.huffmanReset = function () {\n        this.bufferPosition = 0;\n        this.extraBits = 0;\n        this.treeLiteral.reset();\n        this.treeDistances.reset();\n        this.treeCodeLengths.reset();\n    };\n    CompressedStreamWriter.prototype.huffmanCompressBlock = function () {\n        for (var i = 0; i < this.bufferPosition; i++) {\n            var literalLen = this.arrLiterals[i] & 255;\n            var dist = this.arrDistances[i];\n            if (dist-- !== 0) {\n                var lc = this.huffmanLengthCode(literalLen);\n                this.treeLiteral.writeCodeToStream(lc);\n                var bits = Math.floor((lc - 261) / 4);\n                if (bits > 0 && bits <= 5) {\n                    this.pendingBufferWriteBits(literalLen & ((1 << bits) - 1), bits);\n                }\n                var dc = this.huffmanDistanceCode(dist);\n                this.treeDistances.writeCodeToStream(dc);\n                bits = Math.floor(dc / 2 - 1);\n                if (bits > 0) {\n                    this.pendingBufferWriteBits(dist & ((1 << bits) - 1), bits);\n                }\n            }\n            else {\n                this.treeLiteral.writeCodeToStream(literalLen);\n            }\n        }\n        this.treeLiteral.writeCodeToStream(256);\n    };\n    /**\n     * write bits in to internal buffer\n     * @param {number} b - source of bits\n     * @param {number} count - count of bits to write\n     */\n    CompressedStreamWriter.prototype.pendingBufferWriteBits = function (b, count) {\n        var uint = new Uint32Array(1);\n        uint[0] = this.pendingBufCache | (b << this.pendingBufBitsInCache);\n        this.pendingBufCache = uint[0];\n        this.pendingBufBitsInCache += count;\n        this.pendingBufferFlushBits();\n    };\n    CompressedStreamWriter.prototype.pendingBufferFlush = function (isClose) {\n        this.pendingBufferFlushBits();\n        if (this.pendingBufLength > 0) {\n            var array = new Uint8Array(this.pendingBufLength);\n            array.set(this.pendingBuffer.subarray(0, this.pendingBufLength), 0);\n            this.stream.push(array);\n        }\n        this.pendingBufLength = 0;\n    };\n    CompressedStreamWriter.prototype.pendingBufferFlushBits = function () {\n        var result = 0;\n        while (this.pendingBufBitsInCache >= 8 && this.pendingBufLength < (1 << 16)) {\n            this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n            this.pendingBufCache >>= 8;\n            this.pendingBufBitsInCache -= 8;\n            result++;\n        }\n        return result;\n    };\n    CompressedStreamWriter.prototype.pendingBufferWriteByteBlock = function (data, offset, length) {\n        var array = data.subarray(offset, offset + length);\n        this.pendingBuffer.set(array, this.pendingBufLength);\n        this.pendingBufLength += length;\n    };\n    CompressedStreamWriter.prototype.pendingBufferWriteShort = function (s) {\n        this.pendingBuffer[this.pendingBufLength++] = s;\n        this.pendingBuffer[this.pendingBufLength++] = (s >> 8);\n    };\n    CompressedStreamWriter.prototype.pendingBufferAlignToByte = function () {\n        if (this.pendingBufBitsInCache > 0) {\n            this.pendingBuffer[this.pendingBufLength++] = this.pendingBufCache;\n        }\n        this.pendingBufCache = 0;\n        this.pendingBufBitsInCache = 0;\n    };\n    /**\n     * Huffman Tree literal calculation\n     * @private\n     */\n    CompressedStreamWriter.initHuffmanTree = function () {\n        var i = 0;\n        while (i < 144) {\n            ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x030 + i) << 8);\n            ARR_LITERAL_LENGTHS[i++] = 8;\n        }\n        while (i < 256) {\n            ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x190 - 144 + i) << 7);\n            ARR_LITERAL_LENGTHS[i++] = 9;\n        }\n        while (i < 280) {\n            ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x000 - 256 + i) << 9);\n            ARR_LITERAL_LENGTHS[i++] = 7;\n        }\n        while (i < 286) {\n            ARR_LITERAL_CODES[i] = CompressorHuffmanTree.bitReverse((0x0c0 - 280 + i) << 8);\n            ARR_LITERAL_LENGTHS[i++] = 8;\n        }\n        for (i = 0; i < 30; i++) {\n            ARR_DISTANCE_CODES[i] = CompressorHuffmanTree.bitReverse(i << 11);\n            ARR_DISTANCE_LENGTHS[i] = 5;\n        }\n    };\n    /**\n     * close the stream and write all pending buffer in to stream\n     * @returns {void}\n     */\n    CompressedStreamWriter.prototype.close = function () {\n        do {\n            this.pendingBufferFlush(true);\n            if (!this.compressData(true)) {\n                this.pendingBufferFlush(true);\n                this.pendingBufferAlignToByte();\n                if (!this.noWrap) {\n                    this.pendingBufferWriteShortBytes(this.checkSum >> 16);\n                    this.pendingBufferWriteShortBytes(this.checkSum & 0xffff);\n                }\n                this.pendingBufferFlush(true);\n            }\n        } while (!(this.inputEnd === this.inputOffset) ||\n            !(this.pendingBufLength === 0));\n    };\n    /**\n     * release allocated un-managed resource\n     * @returns {void}\n     */\n    CompressedStreamWriter.prototype.destroy = function () {\n        this.stream = [];\n        this.stream = undefined;\n        this.pendingBuffer = undefined;\n        this.treeLiteral = undefined;\n        this.treeDistances = undefined;\n        this.treeCodeLengths = undefined;\n        this.arrLiterals = undefined;\n        this.arrDistances = undefined;\n        this.hashHead = undefined;\n        this.hashPrevious = undefined;\n        this.dataWindow = undefined;\n        this.inputBuffer = undefined;\n        this.pendingBufLength = undefined;\n        this.pendingBufCache = undefined;\n        this.pendingBufBitsInCache = undefined;\n        this.bufferPosition = undefined;\n        this.extraBits = undefined;\n        this.currentHash = undefined;\n        this.matchStart = undefined;\n        this.matchLength = undefined;\n        this.matchPrevAvail = undefined;\n        this.blockStart = undefined;\n        this.stringStart = undefined;\n        this.lookAhead = undefined;\n        this.totalBytesIn = undefined;\n        this.inputOffset = undefined;\n        this.inputEnd = undefined;\n        this.windowSize = undefined;\n        this.windowMask = undefined;\n        this.hashSize = undefined;\n        this.hashMask = undefined;\n        this.hashShift = undefined;\n        this.maxDist = undefined;\n        this.checkSum = undefined;\n        this.noWrap = undefined;\n    };\n    CompressedStreamWriter.isHuffmanTreeInitiated = false;\n    return CompressedStreamWriter;\n}());\nexport { CompressedStreamWriter };\n/**\n * represent the Huffman Tree\n */\nvar CompressorHuffmanTree = /** @class */ (function () {\n    /**\n     * Create new Huffman Tree\n     * @param {CompressedStreamWriter} writer instance\n     * @param {number} elementCount - element count\n     * @param {number} minCodes - minimum count\n     * @param {number} maxLength - maximum count\n     */\n    function CompressorHuffmanTree(writer, elementCount, minCodes, maxLength) {\n        this.writer = writer;\n        this.codeMinCount = minCodes;\n        this.maxLength = maxLength;\n        this.codeFrequency = new Uint16Array(elementCount);\n        this.lengthCount = new Int32Array(maxLength);\n    }\n    Object.defineProperty(CompressorHuffmanTree.prototype, \"treeLength\", {\n        get: function () {\n            return this.codeCount;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(CompressorHuffmanTree.prototype, \"codeLengths\", {\n        get: function () {\n            return this.codeLength;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(CompressorHuffmanTree.prototype, \"codeFrequencies\", {\n        get: function () {\n            return this.codeFrequency;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    CompressorHuffmanTree.prototype.setStaticCodes = function (codes, lengths) {\n        var temp = new Int16Array(codes.length);\n        temp.set(codes, 0);\n        this.codes = temp;\n        var lengthTemp = new Uint8Array(lengths.length);\n        lengthTemp.set(lengths, 0);\n        this.codeLength = lengthTemp;\n    };\n    /**\n     * reset all code data in tree\n     * @returns {void}\n     */\n    CompressorHuffmanTree.prototype.reset = function () {\n        for (var i = 0; i < this.codeFrequency.length; i++) {\n            this.codeFrequency[i] = 0;\n        }\n        this.codes = undefined;\n        this.codeLength = undefined;\n    };\n    /**\n     * write code to the compressor output stream\n     * @param {number} code - code to be written\n     * @returns {void}\n     */\n    CompressorHuffmanTree.prototype.writeCodeToStream = function (code) {\n        this.writer.pendingBufferWriteBits(this.codes[code] & 0xffff, this.codeLength[code]);\n    };\n    /**\n     * calculate code from their frequencies\n     * @returns {void}\n     */\n    CompressorHuffmanTree.prototype.buildCodes = function () {\n        var nextCode = new Int32Array(this.maxLength);\n        this.codes = new Int16Array(this.codeCount);\n        var code = 0;\n        for (var bitsCount = 0; bitsCount < this.maxLength; bitsCount++) {\n            nextCode[bitsCount] = code;\n            code += this.lengthCount[bitsCount] << (15 - bitsCount);\n        }\n        for (var i = 0; i < this.codeCount; i++) {\n            var bits = this.codeLength[i];\n            if (bits > 0) {\n                this.codes[i] = CompressorHuffmanTree.bitReverse(nextCode[bits - 1]);\n                nextCode[bits - 1] += 1 << (16 - bits);\n            }\n        }\n    };\n    CompressorHuffmanTree.bitReverse = function (value) {\n        return (CompressorHuffmanTree.reverseBits[value & 15] << 12\n            | CompressorHuffmanTree.reverseBits[(value >> 4) & 15] << 8\n            | CompressorHuffmanTree.reverseBits[(value >> 8) & 15] << 4\n            | CompressorHuffmanTree.reverseBits[value >> 12]);\n    };\n    /**\n     * calculate length of compressed data\n     * @returns {number}\n     */\n    CompressorHuffmanTree.prototype.getEncodedLength = function () {\n        var len = 0;\n        for (var i = 0; i < this.codeFrequency.length; i++) {\n            len += this.codeFrequency[i] * this.codeLength[i];\n        }\n        return len;\n    };\n    /**\n     * calculate code frequencies\n     * @param {CompressorHuffmanTree} blTree\n     * @returns {void}\n     */\n    CompressorHuffmanTree.prototype.calculateBLFreq = function (blTree) {\n        var maxCount;\n        var minCount;\n        var count;\n        var curLen = -1;\n        var i = 0;\n        while (i < this.codeCount) {\n            count = 1;\n            var nextLen = this.codeLength[i];\n            if (nextLen === 0) {\n                maxCount = 138;\n                minCount = 3;\n            }\n            else {\n                maxCount = 6;\n                minCount = 3;\n                if (curLen !== nextLen) {\n                    blTree.codeFrequency[nextLen]++;\n                    count = 0;\n                }\n            }\n            curLen = nextLen;\n            i++;\n            while (i < this.codeCount && curLen === this.codeLength[i]) {\n                i++;\n                if (++count >= maxCount) {\n                    break;\n                }\n            }\n            if (count < minCount) {\n                blTree.codeFrequency[curLen] += count;\n            }\n            else if (curLen !== 0) {\n                blTree.codeFrequency[16]++;\n            }\n            else if (count <= 10) {\n                blTree.codeFrequency[17]++;\n            }\n            else {\n                blTree.codeFrequency[18]++;\n            }\n        }\n    };\n    /**\n     * @param {CompressorHuffmanTree} blTree - write tree to output stream\n     * @returns {void}\n     */\n    CompressorHuffmanTree.prototype.writeTree = function (blTree) {\n        var maxRepeatCount;\n        var minRepeatCount;\n        var currentRepeatCount;\n        var currentCodeLength = -1;\n        var i = 0;\n        while (i < this.codeCount) {\n            currentRepeatCount = 1;\n            var nextLen = this.codeLength[i];\n            if (nextLen === 0) {\n                maxRepeatCount = 138;\n                minRepeatCount = 3;\n            }\n            else {\n                maxRepeatCount = 6;\n                minRepeatCount = 3;\n                if (currentCodeLength !== nextLen) {\n                    blTree.writeCodeToStream(nextLen);\n                    currentRepeatCount = 0;\n                }\n            }\n            currentCodeLength = nextLen;\n            i++;\n            while (i < this.codeCount && currentCodeLength === this.codeLength[i]) {\n                i++;\n                if (++currentRepeatCount >= maxRepeatCount) {\n                    break;\n                }\n            }\n            if (currentRepeatCount < minRepeatCount) {\n                while (currentRepeatCount-- > 0) {\n                    blTree.writeCodeToStream(currentCodeLength);\n                }\n            }\n            else if (currentCodeLength !== 0) {\n                blTree.writeCodeToStream(16);\n                this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 2);\n            }\n            else if (currentRepeatCount <= 10) {\n                blTree.writeCodeToStream(17);\n                this.writer.pendingBufferWriteBits(currentRepeatCount - 3, 3);\n            }\n            else {\n                blTree.writeCodeToStream(18);\n                this.writer.pendingBufferWriteBits(currentRepeatCount - 11, 7);\n            }\n        }\n    };\n    /**\n     * Build huffman tree\n     * @returns {void}\n     */\n    CompressorHuffmanTree.prototype.buildTree = function () {\n        var codesCount = this.codeFrequency.length;\n        var arrTree = new Int32Array(codesCount);\n        var treeLength = 0;\n        var maxCount = 0;\n        for (var n = 0; n < codesCount; n++) {\n            var freq = this.codeFrequency[n];\n            if (freq !== 0) {\n                var pos = treeLength++;\n                var pPos = 0;\n                while (pos > 0 && this.codeFrequency[arrTree[pPos = Math.floor((pos - 1) / 2)]] > freq) {\n                    arrTree[pos] = arrTree[pPos];\n                    pos = pPos;\n                }\n                arrTree[pos] = n;\n                maxCount = n;\n            }\n        }\n        while (treeLength < 2) {\n            arrTree[treeLength++] =\n                (maxCount < 2) ? ++maxCount : 0;\n        }\n        this.codeCount = Math.max(maxCount + 1, this.codeMinCount);\n        var leafsCount = treeLength;\n        var nodesCount = leafsCount;\n        var child = new Int32Array(4 * treeLength - 2);\n        var values = new Int32Array(2 * treeLength - 1);\n        for (var i = 0; i < treeLength; i++) {\n            var node = arrTree[i];\n            var iIndex = 2 * i;\n            child[iIndex] = node;\n            child[iIndex + 1] = -1;\n            values[i] = (this.codeFrequency[node] << 8);\n            arrTree[i] = i;\n        }\n        this.constructHuffmanTree(arrTree, treeLength, values, nodesCount, child);\n        this.buildLength(child);\n    };\n    CompressorHuffmanTree.prototype.constructHuffmanTree = function (arrTree, treeLength, values, nodesCount, child) {\n        do {\n            var first = arrTree[0];\n            var last = arrTree[--treeLength];\n            var lastVal = values[last];\n            var pPos = 0;\n            var path = 1;\n            while (path < treeLength) {\n                if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n                    path++;\n                }\n                arrTree[pPos] = arrTree[path];\n                pPos = path;\n                path = pPos * 2 + 1;\n            }\n            while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n                arrTree[path] = arrTree[pPos];\n            }\n            arrTree[path] = last;\n            var second = arrTree[0];\n            last = nodesCount++;\n            child[2 * last] = first;\n            child[2 * last + 1] = second;\n            var minDepth = Math.min(values[first] & 0xff, values[second] & 0xff);\n            values[last] = lastVal = values[first] + values[second] - minDepth + 1;\n            pPos = 0;\n            path = 1;\n            /* tslint:disable */\n            while (path < treeLength) {\n                if (path + 1 < treeLength && values[arrTree[path]] > values[arrTree[path + 1]]) {\n                    path++;\n                }\n                arrTree[pPos] = arrTree[path];\n                pPos = path;\n                path = pPos * 2 + 1;\n            } /* tslint:disable */\n            while ((path = pPos) > 0 && values[arrTree[pPos = Math.floor((path - 1) / 2)]] > lastVal) {\n                arrTree[path] = arrTree[pPos];\n            }\n            arrTree[path] = last;\n        } while (treeLength > 1);\n    };\n    CompressorHuffmanTree.prototype.buildLength = function (child) {\n        this.codeLength = new Uint8Array(this.codeFrequency.length);\n        var numNodes = Math.floor(child.length / 2);\n        var numLeafs = Math.floor((numNodes + 1) / 2);\n        var overflow = 0;\n        for (var i = 0; i < this.maxLength; i++) {\n            this.lengthCount[i] = 0;\n        }\n        overflow = this.calculateOptimalCodeLength(child, overflow, numNodes);\n        if (overflow === 0) {\n            return;\n        }\n        var iIncreasableLength = this.maxLength - 1;\n        do {\n            while (this.lengthCount[--iIncreasableLength] === 0) {\n                /* tslint:disable */\n            }\n            do {\n                this.lengthCount[iIncreasableLength]--;\n                this.lengthCount[++iIncreasableLength]++;\n                overflow -= (1 << (this.maxLength - 1 - iIncreasableLength));\n            } while (overflow > 0 && iIncreasableLength < this.maxLength - 1);\n        } while (overflow > 0);\n        this.recreateTree(child, overflow, numLeafs);\n    };\n    CompressorHuffmanTree.prototype.recreateTree = function (child, overflow, numLeafs) {\n        this.lengthCount[this.maxLength - 1] += overflow;\n        this.lengthCount[this.maxLength - 2] -= overflow;\n        var nodePtr = 2 * numLeafs;\n        for (var bits = this.maxLength; bits !== 0; bits--) {\n            var n = this.lengthCount[bits - 1];\n            while (n > 0) {\n                var childPtr = 2 * child[nodePtr++];\n                if (child[childPtr + 1] === -1) {\n                    this.codeLength[child[childPtr]] = bits;\n                    n--;\n                }\n            }\n        }\n    };\n    CompressorHuffmanTree.prototype.calculateOptimalCodeLength = function (child, overflow, numNodes) {\n        var lengths = new Int32Array(numNodes);\n        lengths[numNodes - 1] = 0;\n        for (var i = numNodes - 1; i >= 0; i--) {\n            var childIndex = 2 * i + 1;\n            if (child[childIndex] !== -1) {\n                var bitLength = lengths[i] + 1;\n                if (bitLength > this.maxLength) {\n                    bitLength = this.maxLength;\n                    overflow++;\n                }\n                lengths[child[childIndex - 1]] = lengths[child[childIndex]] = bitLength;\n            }\n            else {\n                var bitLength = lengths[i];\n                this.lengthCount[bitLength - 1]++;\n                this.codeLength[child[childIndex - 1]] = lengths[i];\n            }\n        }\n        return overflow;\n    };\n    CompressorHuffmanTree.reverseBits = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];\n    CompressorHuffmanTree.huffCodeLengthOrders = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n    return CompressorHuffmanTree;\n}());\nexport { CompressorHuffmanTree };\n/**\n * Checksum calculator, based on Adler32 algorithm.\n */\nvar ChecksumCalculator = /** @class */ (function () {\n    function ChecksumCalculator() {\n    }\n    /**\n     * Updates checksum by calculating checksum of the\n     * given buffer and adding it to current value.\n     * @param {number} checksum - current checksum.\n     * @param {Uint8Array} buffer - data byte array.\n     * @param {number} offset - offset in the buffer.\n     * @param {number} length - length of data to be used from the stream.\n     * @returns {number}\n     */\n    ChecksumCalculator.checksumUpdate = function (checksum, buffer, offset, length) {\n        var uint = new Uint32Array(1);\n        uint[0] = checksum;\n        var checksum_uint = uint[0];\n        var s1 = uint[0] = checksum_uint & 65535;\n        var s2 = uint[0] = checksum_uint >> ChecksumCalculator.checkSumBitOffset;\n        while (length > 0) {\n            var steps = Math.min(length, ChecksumCalculator.checksumIterationCount);\n            length -= steps;\n            while (--steps >= 0) {\n                s1 = s1 + (uint[0] = (buffer[offset++] & 255));\n                s2 = s2 + s1;\n            }\n            s1 %= ChecksumCalculator.checksumBase;\n            s2 %= ChecksumCalculator.checksumBase;\n        }\n        checksum_uint = (s2 << ChecksumCalculator.checkSumBitOffset) | s1;\n        return checksum_uint;\n    };\n    ChecksumCalculator.checkSumBitOffset = 16;\n    ChecksumCalculator.checksumBase = 65521;\n    ChecksumCalculator.checksumIterationCount = 3800;\n    return ChecksumCalculator;\n}());\nexport { ChecksumCalculator };\n/* eslint-enable */ \n","//! moment.js locale configuration\n//! locale : Vietnamese [vi]\n//! author : Bang Nguyen : https://github.com/bangnk\n//! author : Chien Kira : https://github.com/chienkira\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var vi = moment.defineLocale('vi', {\n        months: 'tháng 1_tháng 2_tháng 3_tháng 4_tháng 5_tháng 6_tháng 7_tháng 8_tháng 9_tháng 10_tháng 11_tháng 12'.split(\n            '_'\n        ),\n        monthsShort:\n            'Thg 01_Thg 02_Thg 03_Thg 04_Thg 05_Thg 06_Thg 07_Thg 08_Thg 09_Thg 10_Thg 11_Thg 12'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'chủ nhật_thứ hai_thứ ba_thứ tư_thứ năm_thứ sáu_thứ bảy'.split(\n            '_'\n        ),\n        weekdaysShort: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysMin: 'CN_T2_T3_T4_T5_T6_T7'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /sa|ch/i,\n        isPM: function (input) {\n            return /^ch$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'sa' : 'SA';\n            } else {\n                return isLower ? 'ch' : 'CH';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [năm] YYYY',\n            LLL: 'D MMMM [năm] YYYY HH:mm',\n            LLLL: 'dddd, D MMMM [năm] YYYY HH:mm',\n            l: 'DD/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hôm nay lúc] LT',\n            nextDay: '[Ngày mai lúc] LT',\n            nextWeek: 'dddd [tuần tới lúc] LT',\n            lastDay: '[Hôm qua lúc] LT',\n            lastWeek: 'dddd [tuần trước lúc] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s tới',\n            past: '%s trước',\n            s: 'vài giây',\n            ss: '%d giây',\n            m: 'một phút',\n            mm: '%d phút',\n            h: 'một giờ',\n            hh: '%d giờ',\n            d: 'một ngày',\n            dd: '%d ngày',\n            w: 'một tuần',\n            ww: '%d tuần',\n            M: 'một tháng',\n            MM: '%d tháng',\n            y: 'một năm',\n            yy: '%d năm',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return vi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Montenegrin [me]\n//! author : Miodrag Nikač <miodrag@restartit.me> : https://github.com/miodragnikac\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekund', 'sekunda', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            dd: ['dan', 'dana', 'dana'],\n            MM: ['mjesec', 'mjeseca', 'mjeseci'],\n            yy: ['godina', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            return number === 1\n                ? wordKey[0]\n                : number >= 2 && number <= 4\n                ? wordKey[1]\n                : wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key) {\n            var wordKey = translator.words[key];\n            if (key.length === 1) {\n                return withoutSuffix ? wordKey[0] : wordKey[1];\n            } else {\n                return (\n                    number +\n                    ' ' +\n                    translator.correctGrammaticalCase(number, wordKey)\n                );\n            }\n        },\n    };\n\n    var me = moment.defineLocale('me', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sjutra u] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedjelje] [u] LT',\n                    '[prošlog] [ponedjeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srijede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: 'dan',\n            dd: translator.translate,\n            M: 'mjesec',\n            MM: translator.translate,\n            y: 'godinu',\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return me;\n\n})));\n","import urls from './urls'\r\nimport authToken from './authToken';\r\nimport { DataManager, WebApiAdaptor } from \"@syncfusion/ej2-data\";\r\nimport apis from './network'\r\nimport logger from './logger'\r\nimport rules from './permissions'\r\nimport checkUIPermissions from './UIPermissions'\r\n\r\nclass CustomWebApiAdaptor extends WebApiAdaptor {\r\n    beforeSend(dm, xhttp, p3) {\r\n\r\n        const originalFail = p3.onFailure;\r\n\r\n        p3.onFailure = function (err) {\r\n            if (err.status === 401) {\r\n                const token = authToken.get();\r\n                if (token) {\r\n                    logger.log(\"trying token refresh...\", err);\r\n                    apis.unprotectedApi.put(\r\n                        \"/auth\",\r\n                        {\r\n                            Token: token\r\n                        }\r\n                    ).then((r) => r.data).then((resp) => {                   \r\n                        authToken.set(resp.token || resp.Token);\r\n                        rules.getPermissions(resp.token || resp.Token);\r\n                        checkUIPermissions();\r\n                        logger.log(\"refreshed\");\r\n                    }).catch((err) => {\r\n                        logger.log(\"refresh token failed\", err)\r\n                        //navigate to login - some questions asked\r\n                        apis.navigateToLogin(window.location.pathname);\r\n                    });\r\n                } else {\r\n                    logger.log(\"No token to refresh...\", err)\r\n                    apis.navigateToLogin(window.location.pathname);\r\n                }\r\n            }\r\n\r\n            if (originalFail && typeof (originalFail) === \"function\") {\r\n                try {\r\n                    originalFail(err);\r\n                } catch (e) {\r\n                    logger.log(\"original error handler failed\", err);\r\n                    logger.log(\"new error\", e);\r\n                }\r\n                \r\n            }\r\n        }\r\n\r\n        super.beforeSend(dm, xhttp, p3);\r\n    }\r\n}\r\n\r\nconst SyncHelper = {\r\n    getDataManager: (relativePath, queryString) => {\r\n        return new DataManager({\r\n            url: `${urls.apiBaseUrl}${relativePath}${(queryString ? ('?' + queryString) : '')}`,\r\n            adaptor: new CustomWebApiAdaptor,\r\n            crossDomain: true,\r\n            headers: [{ Authorization: `Bearer ${authToken.get()}`}]\r\n        });\r\n    }\r\n};\r\n\r\nexport default SyncHelper;","//! moment.js locale configuration\n//! locale : Afrikaans [af]\n//! author : Werner Mollentze : https://github.com/wernerm\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var af = moment.defineLocale('af', {\n        months: 'Januarie_Februarie_Maart_April_Mei_Junie_Julie_Augustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mrt_Apr_Mei_Jun_Jul_Aug_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Sondag_Maandag_Dinsdag_Woensdag_Donderdag_Vrydag_Saterdag'.split(\n            '_'\n        ),\n        weekdaysShort: 'Son_Maa_Din_Woe_Don_Vry_Sat'.split('_'),\n        weekdaysMin: 'So_Ma_Di_Wo_Do_Vr_Sa'.split('_'),\n        meridiemParse: /vm|nm/i,\n        isPM: function (input) {\n            return /^nm$/i.test(input);\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower ? 'vm' : 'VM';\n            } else {\n                return isLower ? 'nm' : 'NM';\n            }\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Vandag om] LT',\n            nextDay: '[Môre om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[Gister om] LT',\n            lastWeek: '[Laas] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oor %s',\n            past: '%s gelede',\n            s: \"'n paar sekondes\",\n            ss: '%d sekondes',\n            m: \"'n minuut\",\n            mm: '%d minute',\n            h: \"'n uur\",\n            hh: '%d ure',\n            d: \"'n dag\",\n            dd: '%d dae',\n            M: \"'n maand\",\n            MM: '%d maande',\n            y: \"'n jaar\",\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            ); // Thanks to Joris Röling : https://github.com/jjupiter\n        },\n        week: {\n            dow: 1, // Maandag is die eerste dag van die week.\n            doy: 4, // Die week wat die 4de Januarie bevat is die eerste week van die jaar.\n        },\n    });\n\n    return af;\n\n})));\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate, Deferred, UrlAdaptor, RemoteSaveAdaptor } from '@syncfusion/ej2-data';\nimport { setFormatter, isGroupAdaptive, getColumnByForeignKeyValue, refreshFilteredColsUid } from '../base/util';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\n/**\n * Grid data module is used to generate query and data source.\n *\n * @hidden\n */\nvar Data = /** @class */ (function () {\n    /**\n     * Constructor for data module.\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {ServiceLocator} serviceLocator - specifies the service locator\n     * @hidden\n     */\n    function Data(parent, serviceLocator) {\n        this.dataState = { isPending: false, resolver: null, group: [] };\n        this.foreignKeyDataState = { isPending: false, resolver: null };\n        this.parent = parent;\n        this.serviceLocator = serviceLocator;\n        this.initDataManager();\n        if (this.parent.isDestroyed || this.getModuleName() === 'foreignKey') {\n            return;\n        }\n        this.parent.on(events.rowsAdded, this.addRows, this);\n        this.parent.on(events.rowPositionChanged, this.reorderRows, this);\n        this.parent.on(events.rowsRemoved, this.removeRows, this);\n        this.parent.on(events.dataSourceModified, this.initDataManager, this);\n        this.parent.on(events.destroy, this.destroy, this);\n        this.parent.on(events.updateData, this.crudActions, this);\n        this.parent.on(events.addDeleteAction, this.getData, this);\n        this.parent.on(events.autoCol, this.refreshFilteredCols, this);\n        this.parent.on(events.columnsPrepared, this.refreshFilteredCols, this);\n    }\n    Data.prototype.reorderRows = function (e) {\n        this.dataManager.dataSource.json.splice(e.toIndex, 0, this.dataManager.dataSource.json.splice(e.fromIndex, 1)[0]);\n    };\n    Data.prototype.getModuleName = function () {\n        return 'data';\n    };\n    /**\n     * The function used to initialize dataManager and external query\n     *\n     * @returns {void}\n     */\n    Data.prototype.initDataManager = function () {\n        var gObj = this.parent;\n        this.dataManager = gObj.dataSource instanceof DataManager ? gObj.dataSource :\n            (isNullOrUndefined(gObj.dataSource) ? new DataManager() : new DataManager(gObj.dataSource));\n        if (gObj.isAngular && !(gObj.query instanceof Query)) {\n            gObj.setProperties({ query: new Query() }, true);\n        }\n        else {\n            this.isQueryInvokedFromData = true;\n            if (gObj.isVue) {\n                gObj.setProperties({ query: gObj.query instanceof Query ? gObj.query : new Query() }, true);\n            }\n            else {\n                gObj.query = gObj.query instanceof Query ? gObj.query : new Query();\n            }\n        }\n    };\n    /**\n     * The function is used to generate updated Query from Grid model.\n     *\n     * @param {boolean} skipPage - specifies the boolean to skip the page\n     * @param {boolean} isAutoCompleteCall - specifies for auto complete call\n     * @returns {Query} returns the Query\n     * @hidden\n     */\n    Data.prototype.generateQuery = function (skipPage, isAutoCompleteCall) {\n        var gObj = this.parent;\n        var query = gObj.getQuery().clone();\n        if (this.parent.columnQueryMode === 'ExcludeHidden') {\n            query.select(this.parent.getColumns().filter(function (column) { return !(column.isPrimaryKey !== true && column.visible === false || column.field === undefined); }).map(function (column) { return column.field; }));\n        }\n        else if (this.parent.columnQueryMode === 'Schema') {\n            var selectQueryFields = [];\n            var columns = this.parent.columns;\n            for (var i = 0; i < columns.length; i++) {\n                selectQueryFields.push(columns[parseInt(i.toString(), 10)].field);\n            }\n            query.select(selectQueryFields);\n        }\n        this.filterQuery(query);\n        this.searchQuery(query);\n        this.aggregateQuery(query);\n        this.sortQuery(query);\n        if (isGroupAdaptive(this.parent)) {\n            this.virtualGroupPageQuery(query);\n        }\n        else {\n            this.pageQuery(query, skipPage);\n        }\n        if (isNullOrUndefined(isAutoCompleteCall) || !isAutoCompleteCall) {\n            this.groupQuery(query);\n        }\n        return query;\n    };\n    /**\n     * @param {Query} query - specifies the query\n     * @returns {Query} - returns the query\n     * @hidden\n     */\n    Data.prototype.aggregateQuery = function (query) {\n        var rows = this.parent.aggregates;\n        for (var i = 0; i < rows.length; i++) {\n            var row = rows[parseInt(i.toString(), 10)];\n            for (var j = 0; j < row.columns.length; j++) {\n                var cols = row.columns[parseInt(j.toString(), 10)];\n                var types = cols.type instanceof Array ? cols.type : [cols.type];\n                for (var k = 0; k < types.length; k++) {\n                    query.aggregate(types[parseInt(k.toString(), 10)].toLowerCase(), cols.field);\n                }\n            }\n        }\n        return query;\n    };\n    Data.prototype.virtualGroupPageQuery = function (query) {\n        var fName = 'fn';\n        if (query.queries.length) {\n            for (var i = 0; i < query.queries.length; i++) {\n                if (query.queries[parseInt(i.toString(), 10)][\"\" + fName] === 'onPage') {\n                    query.queries.splice(i, 1);\n                }\n            }\n        }\n        return query;\n    };\n    Data.prototype.pageQuery = function (query, skipPage) {\n        var gObj = this.parent;\n        var fName = 'fn';\n        var args = { query: query, skipPage: false };\n        gObj.notify(events.setVirtualPageQuery, args);\n        if (args.skipPage) {\n            return query;\n        }\n        if ((gObj.allowPaging || gObj.enableVirtualization || gObj.enableInfiniteScrolling) && skipPage !== true) {\n            gObj.pageSettings.currentPage = Math.max(1, gObj.pageSettings.currentPage);\n            if (gObj.pageSettings.pageCount <= 0) {\n                gObj.pageSettings.pageCount = 8;\n            }\n            if (gObj.pageSettings.pageSize <= 0) {\n                gObj.pageSettings.pageSize = 12;\n            }\n            if (query.queries.length) {\n                for (var i = 0; i < query.queries.length; i++) {\n                    if (query.queries[parseInt(i.toString(), 10)][\"\" + fName] === 'onPage') {\n                        query.queries.splice(i, 1);\n                    }\n                }\n            }\n            if (!isNullOrUndefined(gObj.infiniteScrollModule) && gObj.enableInfiniteScrolling) {\n                this.parent.notify(events.infinitePageQuery, query);\n            }\n            else {\n                query.page(gObj.pageSettings.currentPage, gObj.allowPaging && gObj.pagerModule &&\n                    (gObj.pagerModule.pagerObj.isAllPage && !gObj.isManualRefresh) &&\n                    (!this.dataManager.dataSource.offline && !(this.dataManager.adaptor instanceof RemoteSaveAdaptor)) ?\n                    null : gObj.pageSettings.pageSize);\n            }\n        }\n        return query;\n    };\n    Data.prototype.groupQuery = function (query) {\n        var gObj = this.parent;\n        if (gObj.allowGrouping && gObj.groupSettings.columns.length) {\n            if (this.parent.groupSettings.enableLazyLoading) {\n                query.lazyLoad.push({ key: 'isLazyLoad', value: this.parent.groupSettings.enableLazyLoading });\n            }\n            var columns = gObj.groupSettings.columns;\n            for (var i = 0, len = columns.length; i < len; i++) {\n                var column = this.getColumnByField(columns[parseInt(i.toString(), 10)]);\n                if (!column) {\n                    this.parent.log('initial_action', { moduleName: 'group', columnName: columns[parseInt(i.toString(), 10)] });\n                }\n                var isGrpFmt = column.enableGroupByFormat;\n                var format = column.format;\n                if (isGrpFmt) {\n                    query.group(columns[parseInt(i.toString(), 10)], this.formatGroupColumn.bind(this), format);\n                }\n                else {\n                    query.group(columns[parseInt(i.toString(), 10)], null);\n                }\n            }\n        }\n        return query;\n    };\n    Data.prototype.sortQuery = function (query) {\n        var gObj = this.parent;\n        if ((gObj.allowSorting || gObj.allowGrouping) && gObj.sortSettings.columns.length) {\n            var columns = gObj.sortSettings.columns;\n            var sortGrp = [];\n            for (var i = columns.length - 1; i > -1; i--) {\n                var col = this.getColumnByField(columns[parseInt(i.toString(), 10)].field);\n                if (col) {\n                    col.setSortDirection(columns[parseInt(i.toString(), 10)].direction);\n                }\n                else {\n                    this.parent.log('initial_action', { moduleName: 'sort', columnName: columns[parseInt(i.toString(), 10)].field });\n                    return query;\n                }\n                var fn = columns[parseInt(i.toString(), 10)].direction;\n                if (col.sortComparer) {\n                    this.parent.log('grid_sort_comparer');\n                    fn = !this.isRemote() ? col.sortComparer.bind(col) : columns[parseInt(i.toString(), 10)].direction;\n                }\n                if (gObj.groupSettings.columns.indexOf(columns[parseInt(i.toString(), 10)].field) === -1) {\n                    if (col.isForeignColumn() || col.sortComparer) {\n                        query.sortByForeignKey(col.field, fn, undefined, columns[parseInt(i.toString(), 10)].direction.toLowerCase());\n                    }\n                    else {\n                        query.sortBy(col.field, fn);\n                    }\n                }\n                else {\n                    sortGrp.push({ direction: fn, field: col.field });\n                }\n            }\n            for (var i = 0, len = sortGrp.length; i < len; i++) {\n                if (typeof sortGrp[parseInt(i.toString(), 10)].direction === 'string') {\n                    query.sortBy(sortGrp[parseInt(i.toString(), 10)].field, sortGrp[parseInt(i.toString(), 10)].direction);\n                }\n                else {\n                    var col = this.getColumnByField(sortGrp[parseInt(i.toString(), 10)].field);\n                    query.sortByForeignKey(sortGrp[parseInt(i.toString(), 10)].field, sortGrp[parseInt(i.toString(), 10)].direction, undefined, col.getSortDirection().toLowerCase());\n                }\n            }\n        }\n        return query;\n    };\n    Data.prototype.searchQuery = function (query, fcolumn, isForeignKey) {\n        var sSettings = this.parent.searchSettings;\n        var fields = sSettings.fields.length ? sSettings.fields : this.getSearchColumnFieldNames();\n        var predicateList = [];\n        var needForeignKeySearch = false;\n        if (this.parent.searchSettings.key.length) {\n            needForeignKeySearch = this.parent.getForeignKeyColumns().some(function (col) { return fields.indexOf(col.field) > -1; });\n            var adaptor = !isForeignKey ? this.dataManager.adaptor : fcolumn.dataSource.adaptor;\n            if (needForeignKeySearch || (adaptor.getModuleName &&\n                adaptor.getModuleName() === 'ODataV4Adaptor')) {\n                fields = isForeignKey ? [fcolumn.foreignKeyValue] : fields;\n                for (var i = 0; i < fields.length; i++) {\n                    var column = isForeignKey ? fcolumn : this.getColumnByField(fields[parseInt(i.toString(), 10)]);\n                    if (column.isForeignColumn() && !isForeignKey) {\n                        predicateList = this.fGeneratePredicate(column, predicateList);\n                    }\n                    else {\n                        predicateList.push(new Predicate(fields[parseInt(i.toString(), 10)], sSettings.operator, sSettings.key, sSettings.ignoreCase, sSettings.ignoreAccent));\n                    }\n                }\n                var predList = Predicate.or(predicateList);\n                predList.key = sSettings.key;\n                query.where(predList);\n            }\n            else {\n                query.search(sSettings.key, fields, sSettings.operator, sSettings.ignoreCase, sSettings.ignoreAccent);\n            }\n        }\n        return query;\n    };\n    Data.prototype.filterQuery = function (query, column, skipFoerign) {\n        var gObj = this.parent;\n        var predicateList = [];\n        var actualFilter = [];\n        var foreignColumn = this.parent.getForeignKeyColumns();\n        var foreignColEmpty;\n        if (gObj.allowFiltering && gObj.filterSettings.columns.length) {\n            var columns = column ? column : gObj.filterSettings.columns;\n            var colType = {};\n            for (var _i = 0, _a = gObj.getColumns(); _i < _a.length; _i++) {\n                var col = _a[_i];\n                colType[col.field] = col.filter.type ? col.filter.type : gObj.filterSettings.type;\n            }\n            var foreignCols = [];\n            var defaultFltrCols = [];\n            for (var _b = 0, columns_1 = columns; _b < columns_1.length; _b++) {\n                var col = columns_1[_b];\n                var gridColumn = col.isForeignKey ? gObj.getColumnByUid(col.uid) : gObj.getColumnByField(col.field);\n                if (isNullOrUndefined(col.type) && gridColumn && (gridColumn.type === 'date' || gridColumn.type === 'datetime' || gridColumn.type === 'dateonly')) {\n                    col.type = col.isForeignKey ? gObj.getColumnByUid(col.uid).type : gObj.getColumnByField(col.field).type;\n                }\n                if (col.isForeignKey) {\n                    foreignCols.push(col);\n                }\n                else {\n                    defaultFltrCols.push(col);\n                }\n            }\n            if (defaultFltrCols.length) {\n                for (var i = 0, len = defaultFltrCols.length; i < len; i++) {\n                    defaultFltrCols[parseInt(i.toString(), 10)].uid = defaultFltrCols[parseInt(i.toString(), 10)].uid ||\n                        this.parent.grabColumnByFieldFromAllCols(defaultFltrCols[parseInt(i.toString(), 10)].field, defaultFltrCols[parseInt(i.toString(), 10)].isForeignKey).uid;\n                }\n                var excelPredicate = CheckBoxFilterBase.getPredicate(defaultFltrCols);\n                for (var _c = 0, _d = Object.keys(excelPredicate); _c < _d.length; _c++) {\n                    var prop = _d[_c];\n                    predicateList.push(excelPredicate[\"\" + prop]);\n                }\n            }\n            if (foreignCols.length) {\n                for (var _e = 0, foreignCols_1 = foreignCols; _e < foreignCols_1.length; _e++) {\n                    var col = foreignCols_1[_e];\n                    col.uid = col.uid || this.parent.grabColumnByFieldFromAllCols(col.field, col.isForeignKey).uid;\n                    var column_1 = this.parent.grabColumnByUidFromAllCols(col.uid);\n                    if (!column_1) {\n                        this.parent.log('initial_action', { moduleName: 'filter', columnName: col.field });\n                    }\n                    if (column_1.isForeignColumn() && getColumnByForeignKeyValue(col.field, foreignColumn) && !skipFoerign) {\n                        actualFilter.push(col);\n                        if (!column_1.columnData.length) {\n                            foreignColEmpty = true;\n                        }\n                        predicateList = this.fGeneratePredicate(column_1, predicateList);\n                    }\n                    else {\n                        var excelPredicate = CheckBoxFilterBase.getPredicate(columns);\n                        for (var _f = 0, _g = Object.keys(excelPredicate); _f < _g.length; _f++) {\n                            var prop = _g[_f];\n                            predicateList.push(excelPredicate[\"\" + prop]);\n                        }\n                    }\n                }\n            }\n            if (predicateList.length && !foreignColEmpty) {\n                query.where(Predicate.and(predicateList));\n            }\n            else {\n                this.parent.notify(events.showEmptyGrid, {});\n            }\n        }\n        return query;\n    };\n    Data.prototype.fGeneratePredicate = function (col, predicateList) {\n        var fPredicate = {};\n        if (col) {\n            this.parent.notify(events.generateQuery, { predicate: fPredicate, column: col });\n            if (fPredicate.predicate.predicates.length) {\n                predicateList.push(fPredicate.predicate);\n            }\n        }\n        return predicateList;\n    };\n    /**\n     * The function is used to get dataManager promise by executing given Query.\n     *\n     * @param {object} args - specifies the object\n     * @param {string} args.requestType - Defines the request type\n     * @param {string[]} args.foreignKeyData - Defines the foreignKeyData.string\n     * @param {Object} args.data - Defines the data.\n     * @param {number} args.index - Defines the index .\n     * @param {Query} query - Defines the query which will execute along with data processing.\n     * @returns {Promise<Object>} - returns the object\n     * @hidden\n     */\n    Data.prototype.getData = function (args, query) {\n        var _this = this;\n        if (args === void 0) { args = { requestType: '' }; }\n        var key = this.getKey(args.foreignKeyData &&\n            Object.keys(args.foreignKeyData).length ?\n            args.foreignKeyData : this.parent.getPrimaryKeyFieldNames());\n        this.parent.log('datasource_syntax_mismatch', { dataState: this.parent });\n        if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n            var def = this.eventPromise(args, query, key);\n            return def.promise;\n        }\n        else {\n            var crud = void 0;\n            switch (args.requestType) {\n                case 'delete':\n                    query = query ? query : this.generateQuery();\n                    // eslint-disable-next-line no-case-declarations\n                    var len = Object.keys(args.data).length;\n                    if (len === 1) {\n                        crud = this.dataManager.remove(key, args.data[0], query.fromTable, query);\n                    }\n                    else {\n                        var changes = {\n                            addedRecords: [],\n                            deletedRecords: [],\n                            changedRecords: []\n                        };\n                        changes.deletedRecords = args.data;\n                        crud = this.dataManager.saveChanges(changes, key, query.fromTable, query.requiresCount());\n                    }\n                    break;\n                case 'save':\n                    query = query ? query : this.generateQuery();\n                    args.index = isNullOrUndefined(args.index) ? 0 : args.index;\n                    crud = this.dataManager.insert(args.data, query.fromTable, query, args.index);\n                    break;\n            }\n            var promise = 'promise';\n            args[\"\" + promise] = crud;\n            // eslint-disable-next-line no-prototype-builtins\n            if (crud && !Array.isArray(crud) && !crud.hasOwnProperty('deletedRecords')) {\n                return crud.then(function () {\n                    return _this.insert(query, args);\n                });\n            }\n            else {\n                return this.insert(query, args);\n            }\n        }\n    };\n    Data.prototype.insert = function (query, args) {\n        if (args.requestType === 'save') {\n            this.parent.notify(events.recordAdded, args);\n        }\n        return this.executeQuery(query);\n    };\n    Data.prototype.executeQuery = function (query) {\n        var _this = this;\n        if (this.dataManager.ready) {\n            var deferred_1 = new Deferred();\n            var ready = this.dataManager.ready;\n            ready.then(function () {\n                _this.dataManager.executeQuery(query).then(function (result) {\n                    deferred_1.resolve(result);\n                });\n            }).catch(function (e) {\n                deferred_1.reject(e);\n            });\n            return deferred_1.promise;\n        }\n        else {\n            return this.dataManager.executeQuery(query);\n        }\n    };\n    Data.prototype.formatGroupColumn = function (value, field) {\n        var serviceLocator = this.serviceLocator;\n        var column = this.getColumnByField(field);\n        var date = value;\n        if (!column.type) {\n            column.type = date.getDay ? (date.getHours() > 0 || date.getMinutes() > 0 ||\n                date.getSeconds() > 0 || date.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n        }\n        if (isNullOrUndefined(column.getFormatter())) {\n            setFormatter(serviceLocator, column);\n        }\n        var formatVal = ValueFormatter.prototype.toView(value, column.getFormatter());\n        return formatVal;\n    };\n    Data.prototype.crudActions = function (args) {\n        var query = this.generateQuery();\n        var promise = null;\n        var pr = 'promise';\n        var key = this.getKey(args.foreignKeyData &&\n            Object.keys(args.foreignKeyData).length ? args.foreignKeyData :\n            this.parent.getPrimaryKeyFieldNames());\n        if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n            this.eventPromise(args, query, key);\n        }\n        switch (args.requestType) {\n            case 'save':\n                promise = this.dataManager.update(key, args.data, query.fromTable, query, args.previousData);\n                break;\n        }\n        args[\"\" + pr] = promise ? promise : args[\"\" + pr];\n        this.parent.notify(events.crudAction, args);\n    };\n    /**\n     * @param {object} changes - specifies the changes\n     * @param {string} key - specifies the key\n     * @param {object} original - specifies the original data\n     * @param {Query} query - specifies the query\n     * @returns {Promise<Object>} returns the object\n     * @hidden\n     */\n    Data.prototype.saveChanges = function (changes, key, original, query) {\n        if (query === void 0) { query = this.generateQuery(); }\n        query.requiresCount();\n        if ('result' in this.parent.dataSource) {\n            var deff = new Deferred();\n            var args = {\n                requestType: 'batchsave', changes: changes, key: key, query: query,\n                endEdit: deff.resolve\n            };\n            this.setState({ isPending: true, resolver: deff.resolve });\n            this.parent.trigger(events.dataSourceChanged, args);\n            return deff.promise;\n        }\n        else {\n            var promise = this.dataManager.saveChanges(changes, key, query.fromTable, query, original);\n            return promise;\n        }\n    };\n    Data.prototype.getKey = function (keys) {\n        if (keys && keys.length) {\n            return keys[0];\n        }\n        return undefined;\n    };\n    /**\n     * @returns {boolean} returns whether its remote data\n     * @hidden\n     */\n    Data.prototype.isRemote = function () {\n        return this.dataManager.dataSource.offline !== true && this.dataManager.dataSource.url !== undefined &&\n            this.dataManager.dataSource.url !== '';\n    };\n    Data.prototype.addRows = function (e) {\n        for (var i = e.records.length; i > 0; i--) {\n            if (this.parent.dataSource instanceof DataManager && this.dataManager.dataSource.offline) {\n                this.dataManager.dataSource.json.splice(e.toIndex, 0, e.records[i - 1]);\n            }\n            else if (((!this.parent.getDataModule().isRemote()) && (!isNullOrUndefined(this.parent.dataSource))) &&\n                (!this.parent.dataSource.result)) {\n                this.parent.dataSource['splice'](e.toIndex, 0, e.records[i - 1]);\n            }\n        }\n    };\n    Data.prototype.removeRows = function (e) {\n        var json = this.dataManager.dataSource.json;\n        if (this.parent.dataSource instanceof DataManager && this.dataManager.dataSource.offline) {\n            this.dataManager.dataSource.json = json.filter(function (value) { return e.records.indexOf(value) === -1; });\n        }\n        else if (((!this.parent.getDataModule().isRemote()) && (!isNullOrUndefined(this.parent.dataSource))) &&\n            (!this.parent.dataSource.result)) {\n            this.parent.dataSource = json.filter(function (value) { return e.records.indexOf(value) === -1; });\n        }\n    };\n    Data.prototype.getColumnByField = function (field) {\n        var col;\n        return (this.parent.columnModel).some(function (column) {\n            col = column;\n            return column.field === field;\n        }) && col;\n    };\n    Data.prototype.destroy = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.off(events.rowsAdded, this.addRows);\n        this.parent.off(events.rowsRemoved, this.removeRows);\n        this.parent.off(events.dataSourceModified, this.initDataManager);\n        this.parent.off(events.destroy, this.destroy);\n        this.parent.off(events.updateData, this.crudActions);\n        this.parent.off(events.addDeleteAction, this.getData);\n        this.parent.off(events.autoCol, this.refreshFilteredCols);\n        this.parent.off(events.columnsPrepared, this.refreshFilteredCols);\n    };\n    Data.prototype.getState = function () {\n        return this.dataState;\n    };\n    Data.prototype.setState = function (state) {\n        return this.dataState = state;\n    };\n    Data.prototype.getForeignKeyDataState = function () {\n        return this.foreignKeyDataState;\n    };\n    Data.prototype.setForeignKeyDataState = function (state) {\n        this.foreignKeyDataState = state;\n    };\n    Data.prototype.getStateEventArgument = function (query) {\n        var adaptr = new UrlAdaptor();\n        var dm = new DataManager({ url: '', adaptor: new UrlAdaptor });\n        var state = adaptr.processQuery(dm, query);\n        var data = JSON.parse(state.data);\n        return extend(data, state.pvtData);\n    };\n    Data.prototype.eventPromise = function (args, query, key) {\n        var _this = this;\n        var dataArgs = args;\n        var state = this.getStateEventArgument(query);\n        var def = new Deferred();\n        var deff = new Deferred();\n        if ((args.requestType !== undefined || (this.parent.groupSettings.disablePageWiseAggregates && query.queries.some(function (query) { return query.fn === 'onGroup'; })))\n            && this.dataState.isDataChanged !== false) {\n            state.action = args;\n            if (args.requestType === 'save' || args.requestType === 'delete') {\n                var editArgs_1 = args;\n                editArgs_1.key = key;\n                var promise = 'promise';\n                editArgs_1[\"\" + promise] = deff.promise;\n                editArgs_1.state = state;\n                this.setState({ isPending: true, resolver: deff.resolve });\n                dataArgs.endEdit = deff.resolve;\n                dataArgs.cancelEdit = deff.reject;\n                this.parent.trigger(events.dataSourceChanged, editArgs_1);\n                deff.promise.then(function () {\n                    _this.setState({ isPending: true, resolver: def.resolve, group: state.group, aggregates: state.aggregates });\n                    if (editArgs_1.requestType === 'save') {\n                        _this.parent.notify(events.recordAdded, editArgs_1);\n                    }\n                    _this.parent.trigger(events.dataStateChange, state);\n                })\n                    .catch(function () { return void 0; });\n            }\n            else {\n                this.setState({ isPending: true, resolver: def.resolve, group: state.group, aggregates: state.aggregates });\n                this.parent.trigger(events.dataStateChange, state);\n            }\n        }\n        else {\n            this.setState({});\n            def.resolve(this.parent.dataSource);\n        }\n        return def;\n    };\n    /**\n     * Gets the columns where searching needs to be performed from the Grid.\n     *\n     * @returns {string[]} returns the searched column field names\n     */\n    Data.prototype.getSearchColumnFieldNames = function () {\n        var colFieldNames = [];\n        var columns = this.parent.getColumns();\n        for (var _i = 0, columns_2 = columns; _i < columns_2.length; _i++) {\n            var col = columns_2[_i];\n            if (col.allowSearching && !isNullOrUndefined(col.field)) {\n                colFieldNames.push(col.field);\n            }\n        }\n        return colFieldNames;\n    };\n    Data.prototype.refreshFilteredCols = function () {\n        if (this.parent.allowFiltering && this.parent.filterSettings.columns.length) {\n            refreshFilteredColsUid(this.parent, this.parent.filterSettings.columns);\n        }\n    };\n    return Data;\n}());\nexport { Data };\n","//! moment.js locale configuration\n//! locale : Uzbek [uz]\n//! author : Sardor Muminov : https://github.com/muminoff\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var uz = moment.defineLocale('uz', {\n        months: 'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'Якшанба_Душанба_Сешанба_Чоршанба_Пайшанба_Жума_Шанба'.split('_'),\n        weekdaysShort: 'Якш_Душ_Сеш_Чор_Пай_Жум_Шан'.split('_'),\n        weekdaysMin: 'Як_Ду_Се_Чо_Па_Жу_Ша'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'D MMMM YYYY, dddd HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бугун соат] LT [да]',\n            nextDay: '[Эртага] LT [да]',\n            nextWeek: 'dddd [куни соат] LT [да]',\n            lastDay: '[Кеча соат] LT [да]',\n            lastWeek: '[Утган] dddd [куни соат] LT [да]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'Якин %s ичида',\n            past: 'Бир неча %s олдин',\n            s: 'фурсат',\n            ss: '%d фурсат',\n            m: 'бир дакика',\n            mm: '%d дакика',\n            h: 'бир соат',\n            hh: '%d соат',\n            d: 'бир кун',\n            dd: '%d кун',\n            M: 'бир ой',\n            MM: '%d ой',\n            y: 'бир йил',\n            yy: '%d йил',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return uz;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-unused-expressions */\nimport { Component, EventHandler, Internationalization } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, L10n } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { cldrData, getDefaultDateObject, rippleEffect } from '@syncfusion/ej2-base';\nimport { removeClass, detach, closest, addClass, attributes } from '@syncfusion/ej2-base';\nimport { getValue, getUniqueID, extend, Browser } from '@syncfusion/ej2-base';\nimport { Property, Event, isNullOrUndefined, throwError } from '@syncfusion/ej2-base';\n//class constant defination.\nvar OTHERMONTH = 'e-other-month';\nvar OTHERDECADE = 'e-other-year';\nvar ROOT = 'e-calendar';\nvar DEVICE = 'e-device';\nvar HEADER = 'e-header';\nvar RTL = 'e-rtl';\nvar CONTENT = 'e-content';\nvar CONTENTTABLE = 'e-calandar-content-table';\nvar YEAR = 'e-year';\nvar MONTH = 'e-month';\nvar DECADE = 'e-decade';\nvar ICON = 'e-icons';\nvar PREVICON = 'e-prev';\nvar NEXTICON = 'e-next';\nvar PREVSPAN = 'e-date-icon-prev';\nvar NEXTSPAN = 'e-date-icon-next ';\nvar ICONCONTAINER = 'e-icon-container';\nvar DISABLED = 'e-disabled';\nvar OVERLAY = 'e-overlay';\nvar WEEKEND = 'e-weekend';\nvar WEEKNUMBER = 'e-week-number';\nvar SELECTED = 'e-selected';\nvar FOCUSEDDATE = 'e-focused-date';\nvar FOCUSEDCELL = 'e-focused-cell';\nvar OTHERMONTHROW = 'e-month-hide';\nvar TODAY = 'e-today';\nvar TITLE = 'e-title';\nvar LINK = 'e-day';\nvar CELL = 'e-cell';\nvar WEEKHEADER = 'e-week-header';\nvar ZOOMIN = 'e-zoomin';\nvar FOOTER = 'e-footer-container';\nvar BTN = 'e-btn';\nvar FLAT = 'e-flat';\nvar CSS = 'e-css';\nvar PRIMARY = 'e-primary';\nvar DAYHEADERLONG = 'e-calendar-day-header-lg';\nvar dayMilliSeconds = 86400000;\nvar minutesMilliSeconds = 60000;\n/**\n *\n * @private\n */\nvar CalendarBase = /** @class */ (function (_super) {\n    __extends(CalendarBase, _super);\n    /**\n     * Initialized new instance of Calendar Class.\n     * Constructor for creating the widget\n     *\n     * @param {CalendarBaseModel} options - Specifies the CalendarBase model.\n     * @param {string | HTMLElement} element - Specifies the element to render as component.\n     * @private\n     */\n    function CalendarBase(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.effect = '';\n        _this.isPopupClicked = false;\n        _this.isDateSelected = true;\n        _this.isTodayClicked = false;\n        _this.preventChange = false;\n        _this.isAngular = false;\n        _this.previousDates = false;\n        return _this;\n    }\n    /**\n     * To Initialize the control rendering.\n     *\n     * @returns {void}\n     * @private\n     */\n    CalendarBase.prototype.render = function () {\n        this.rangeValidation(this.min, this.max);\n        this.calendarEleCopy = this.element.cloneNode(true);\n        if (this.calendarMode === 'Islamic') {\n            if (+(this.min.setSeconds(0)) === +new Date(1900, 0, 1, 0, 0, 0)) {\n                this.min = new Date(1944, 2, 18);\n            }\n            if (+this.max === +new Date(2099, 11, 31)) {\n                this.max = new Date(2069, 10, 16);\n            }\n        }\n        this.globalize = new Internationalization(this.locale);\n        if (isNullOrUndefined(this.firstDayOfWeek) || this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n            this.setProperties({ firstDayOfWeek: this.globalize.getFirstDayOfWeek() }, true);\n        }\n        this.todayDisabled = false;\n        this.todayDate = new Date(new Date().setHours(0, 0, 0, 0));\n        if (this.getModuleName() === 'calendar') {\n            this.element.classList.add(ROOT);\n            if (this.enableRtl) {\n                this.element.classList.add(RTL);\n            }\n            if (Browser.isDevice) {\n                this.element.classList.add(DEVICE);\n            }\n            attributes(this.element, {\n                'data-role': 'calendar'\n            });\n            this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n            this.element.setAttribute('tabindex', this.tabIndex);\n        }\n        else {\n            this.calendarElement = this.createElement('div');\n            this.calendarElement.classList.add(ROOT);\n            if (this.enableRtl) {\n                this.calendarElement.classList.add(RTL);\n            }\n            if (Browser.isDevice) {\n                this.calendarElement.classList.add(DEVICE);\n            }\n            attributes(this.calendarElement, {\n                'data-role': 'calendar'\n            });\n        }\n        if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n            this.enabled = false;\n        }\n        this.createHeader();\n        this.createContent();\n        this.wireEvents();\n    };\n    CalendarBase.prototype.rangeValidation = function (min, max) {\n        if (isNullOrUndefined(min)) {\n            this.setProperties({ min: new Date(1900, 0, 1) }, true);\n        }\n        if (isNullOrUndefined(max)) {\n            this.setProperties({ max: new Date(2099, 11, 31) }, true);\n        }\n    };\n    CalendarBase.prototype.getDefaultKeyConfig = function () {\n        this.defaultKeyConfigs = {\n            controlUp: 'ctrl+38',\n            controlDown: 'ctrl+40',\n            moveDown: 'downarrow',\n            moveUp: 'uparrow',\n            moveLeft: 'leftarrow',\n            moveRight: 'rightarrow',\n            select: 'enter',\n            home: 'home',\n            end: 'end',\n            pageUp: 'pageup',\n            pageDown: 'pagedown',\n            shiftPageUp: 'shift+pageup',\n            shiftPageDown: 'shift+pagedown',\n            controlHome: 'ctrl+home',\n            controlEnd: 'ctrl+end',\n            altUpArrow: 'alt+uparrow',\n            spacebar: 'space',\n            altRightArrow: 'alt+rightarrow',\n            altLeftArrow: 'alt+leftarrow'\n        };\n        return this.defaultKeyConfigs;\n    };\n    CalendarBase.prototype.validateDate = function (value) {\n        this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(this.min))) }, true);\n        this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(this.max))) }, true);\n        this.currentDate = this.currentDate ? this.currentDate : new Date(new Date().setHours(0, 0, 0, 0));\n        if (!isNullOrUndefined(value) && this.min <= this.max && value >= this.min && value <= this.max) {\n            this.currentDate = new Date(this.checkValue(value));\n        }\n    };\n    CalendarBase.prototype.setOverlayIndex = function (popupWrapper, popupElement, modal, isDevice) {\n        if (isDevice && !isNullOrUndefined(popupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n            var index = parseInt(popupElement.style.zIndex, 10) ? parseInt(popupElement.style.zIndex, 10) : 1000;\n            modal.style.zIndex = (index - 1).toString();\n            popupWrapper.style.zIndex = index.toString();\n        }\n    };\n    CalendarBase.prototype.minMaxUpdate = function (value) {\n        if (!(+this.min <= +this.max)) {\n            this.setProperties({ min: this.min }, true);\n            addClass([this.element], OVERLAY);\n        }\n        else {\n            removeClass([this.element], OVERLAY);\n        }\n        this.min = isNullOrUndefined(this.min) || !(+this.min) ? this.min = new Date(1900, 0, 1) : this.min;\n        this.max = isNullOrUndefined(this.max) || !(+this.max) ? this.max = new Date(2099, 11, 31) : this.max;\n        if (+this.min <= +this.max && value && +value <= +this.max && +value >= +this.min) {\n            this.currentDate = new Date(this.checkValue(value));\n        }\n        else {\n            if (+this.min <= +this.max && !value && +this.currentDate > +this.max) {\n                this.currentDate = new Date(this.checkValue(this.max));\n            }\n            else {\n                if (+this.currentDate < +this.min) {\n                    this.currentDate = new Date(this.checkValue(this.min));\n                }\n            }\n        }\n    };\n    CalendarBase.prototype.createHeader = function () {\n        var ariaPrevAttrs = {\n            'aria-disabled': 'false',\n            'aria-label': 'previous month'\n        };\n        var ariaNextAttrs = {\n            'aria-disabled': 'false',\n            'aria-label': 'next month'\n        };\n        var ariaTitleAttrs = {\n            'aria-atomic': 'true', 'aria-live': 'assertive', 'aria-label': 'title'\n        };\n        var tabIndexAttr = { 'tabindex': '0' };\n        this.headerElement = this.createElement('div', { className: HEADER });\n        var iconContainer = this.createElement('div', { className: ICONCONTAINER });\n        this.previousIcon = this.createElement('button', { className: '' + PREVICON, attrs: { type: 'button' } });\n        rippleEffect(this.previousIcon, {\n            duration: 400,\n            selector: '.e-prev',\n            isCenterRipple: true\n        });\n        attributes(this.previousIcon, ariaPrevAttrs);\n        attributes(this.previousIcon, tabIndexAttr);\n        this.nextIcon = this.createElement('button', { className: '' + NEXTICON, attrs: { type: 'button' } });\n        rippleEffect(this.nextIcon, {\n            selector: '.e-next',\n            duration: 400,\n            isCenterRipple: true\n        });\n        if (this.getModuleName() === 'daterangepicker') {\n            attributes(this.previousIcon, { tabIndex: '-1' });\n            attributes(this.nextIcon, { tabIndex: '-1' });\n        }\n        attributes(this.nextIcon, ariaNextAttrs);\n        attributes(this.nextIcon, tabIndexAttr);\n        this.headerTitleElement = this.createElement('div', { className: '' + LINK + ' ' + TITLE });\n        attributes(this.headerTitleElement, ariaTitleAttrs);\n        attributes(this.headerTitleElement, tabIndexAttr);\n        this.headerElement.appendChild(this.headerTitleElement);\n        this.previousIcon.appendChild(this.createElement('span', { className: '' + PREVSPAN + ' ' + ICON }));\n        this.nextIcon.appendChild(this.createElement('span', { className: '' + NEXTSPAN + ' ' + ICON }));\n        iconContainer.appendChild(this.previousIcon);\n        iconContainer.appendChild(this.nextIcon);\n        this.headerElement.appendChild(iconContainer);\n        if (this.getModuleName() === 'calendar') {\n            this.element.appendChild(this.headerElement);\n        }\n        else {\n            this.calendarElement.appendChild(this.headerElement);\n        }\n        this.adjustLongHeaderSize();\n    };\n    CalendarBase.prototype.createContent = function () {\n        this.contentElement = this.createElement('div', { className: CONTENT });\n        this.table = this.createElement('table', { attrs: { 'class': CONTENTTABLE, 'tabIndex': '0', 'role': 'grid', 'aria-activedescendant': '', 'aria-labelledby': this.element.id } });\n        if (this.getModuleName() === 'calendar') {\n            this.element.appendChild(this.contentElement);\n        }\n        else {\n            this.calendarElement.appendChild(this.contentElement);\n        }\n        this.contentElement.appendChild(this.table);\n        this.createContentHeader();\n        this.createContentBody();\n        if (this.showTodayButton) {\n            this.createContentFooter();\n        }\n        if (this.getModuleName() != 'daterangepicker') {\n            EventHandler.add(this.table, 'focus', this.addContentFocus, this);\n            EventHandler.add(this.table, 'blur', this.removeContentFocus, this);\n        }\n    };\n    CalendarBase.prototype.addContentFocus = function (args) {\n        var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n        var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n        if (!isNullOrUndefined(selectedDate)) {\n            selectedDate.classList.add(FOCUSEDCELL);\n        }\n        else if (!isNullOrUndefined(focusedDate)) {\n            focusedDate.classList.add(FOCUSEDCELL);\n        }\n    };\n    CalendarBase.prototype.removeContentFocus = function (args) {\n        var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n        var selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n        if (!isNullOrUndefined(selectedDate)) {\n            selectedDate.classList.remove(FOCUSEDCELL);\n        }\n        else if (!isNullOrUndefined(focusedDate)) {\n            focusedDate.classList.remove(FOCUSEDCELL);\n        }\n    };\n    CalendarBase.prototype.getCultureValues = function () {\n        var culShortNames = [];\n        var cldrObj;\n        var dayFormat = 'days.stand-alone.' + this.dayHeaderFormat.toLowerCase();\n        if (this.locale === 'en' || this.locale === 'en-US') {\n            cldrObj = (getValue(dayFormat, getDefaultDateObject()));\n        }\n        else {\n            cldrObj = (this.getCultureObjects(cldrData, '' + this.locale));\n        }\n        if (!isNullOrUndefined(cldrObj)) {\n            for (var _i = 0, _a = Object.keys(cldrObj); _i < _a.length; _i++) {\n                var obj = _a[_i];\n                culShortNames.push(getValue(obj, cldrObj));\n            }\n        }\n        return culShortNames;\n    };\n    CalendarBase.prototype.toCapitalize = function (text) {\n        return !isNullOrUndefined(text) && text.length ? text[0].toUpperCase() + text.slice(1) : text;\n    };\n    CalendarBase.prototype.createContentHeader = function () {\n        if (this.getModuleName() === 'calendar') {\n            if (!isNullOrUndefined(this.element.querySelectorAll('.e-content .e-week-header')[0])) {\n                detach(this.element.querySelectorAll('.e-content .e-week-header')[0]);\n            }\n        }\n        else {\n            if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0])) {\n                detach(this.calendarElement.querySelectorAll('.e-content .e-week-header')[0]);\n            }\n        }\n        var daysCount = 6;\n        var html = '';\n        if (this.firstDayOfWeek > 6 || this.firstDayOfWeek < 0) {\n            this.setProperties({ firstDayOfWeek: 0 }, true);\n        }\n        this.tableHeadElement = this.createElement('thead', { className: WEEKHEADER });\n        if (this.weekNumber) {\n            html += '<th class=\"e-week-number\" aria-hidden=\"true\"></th>';\n            if (this.getModuleName() === 'calendar') {\n                addClass([this.element], '' + WEEKNUMBER);\n            }\n            else {\n                addClass([this.calendarElement], '' + WEEKNUMBER);\n            }\n        }\n        // eslint-disable-next-line max-len\n        var shortNames = this.getCultureValues().length > 0 && this.getCultureValues() ? this.shiftArray(((this.getCultureValues().length > 0 && this.getCultureValues())), this.firstDayOfWeek) : null;\n        if (!isNullOrUndefined(shortNames)) {\n            for (var days = 0; days <= daysCount; days++) {\n                html += '<th  class=\"\">' + this.toCapitalize(shortNames[days]) + '</th>';\n            }\n        }\n        html = '<tr>' + html + '</tr>';\n        this.tableHeadElement.innerHTML = html;\n        this.table.appendChild(this.tableHeadElement);\n    };\n    CalendarBase.prototype.createContentBody = function () {\n        if (this.getModuleName() === 'calendar') {\n            if (!isNullOrUndefined(this.element.querySelectorAll('.e-content tbody')[0])) {\n                detach(this.element.querySelectorAll('.e-content tbody')[0]);\n            }\n        }\n        else {\n            if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content tbody')[0])) {\n                detach(this.calendarElement.querySelectorAll('.e-content tbody')[0]);\n            }\n        }\n        switch (this.start) {\n            case 'Year':\n                this.renderYears();\n                break;\n            case 'Decade':\n                this.renderDecades();\n                break;\n            default:\n                this.renderMonths();\n        }\n    };\n    CalendarBase.prototype.updateFooter = function () {\n        this.todayElement.textContent = this.l10.getConstant('today');\n        this.todayElement.setAttribute('aria-label', this.l10.getConstant('today'));\n        this.todayElement.setAttribute('tabindex', '0');\n    };\n    CalendarBase.prototype.createContentFooter = function () {\n        if (this.showTodayButton) {\n            var minimum = new Date(+this.min);\n            var maximum = new Date(+this.max);\n            var l10nLocale = { today: 'Today' };\n            this.globalize = new Internationalization(this.locale);\n            this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n            this.todayElement = this.createElement('button', { attrs: { role: 'button' } });\n            rippleEffect(this.todayElement);\n            this.updateFooter();\n            addClass([this.todayElement], [BTN, TODAY, FLAT, PRIMARY, CSS]);\n            if ((!(+new Date(minimum.setHours(0, 0, 0, 0)) <= +this.todayDate &&\n                +this.todayDate <= +new Date(maximum.setHours(0, 0, 0, 0)))) || (this.todayDisabled)) {\n                addClass([this.todayElement], DISABLED);\n            }\n            this.footer = this.createElement('div', { className: FOOTER });\n            this.footer.appendChild(this.todayElement);\n            if (this.getModuleName() === 'calendar') {\n                this.element.appendChild(this.footer);\n            }\n            if (this.getModuleName() === 'datepicker') {\n                this.calendarElement.appendChild(this.footer);\n            }\n            if (this.getModuleName() === 'datetimepicker') {\n                this.calendarElement.appendChild(this.footer);\n            }\n            if (!this.todayElement.classList.contains(DISABLED)) {\n                EventHandler.add(this.todayElement, 'click', this.todayButtonClick, this);\n            }\n        }\n    };\n    CalendarBase.prototype.wireEvents = function (id, ref, keyConfig, moduleName) {\n        EventHandler.add(this.headerTitleElement, 'click', this.navigateTitle, this);\n        this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n        if (this.getModuleName() === 'calendar') {\n            this.keyboardModule = new KeyboardEvents(this.element, {\n                eventName: 'keydown',\n                keyAction: this.keyActionHandle.bind(this),\n                keyConfigs: this.defaultKeyConfigs\n            });\n        }\n        else {\n            this.keyboardModule = new KeyboardEvents(this.calendarElement, {\n                eventName: 'keydown',\n                keyAction: this.keyActionHandle.bind(this),\n                keyConfigs: this.defaultKeyConfigs\n            });\n        }\n    };\n    CalendarBase.prototype.dateWireEvents = function (id, ref, keyConfig, moduleName) {\n        this.defaultKeyConfigs = this.getDefaultKeyConfig();\n        this.defaultKeyConfigs = extend(this.defaultKeyConfigs, keyConfig);\n        this.serverModuleName = moduleName;\n    };\n    CalendarBase.prototype.todayButtonClick = function (e, value, isCustomDate) {\n        if (this.showTodayButton) {\n            if (this.currentView() === this.depth) {\n                this.effect = '';\n            }\n            else {\n                this.effect = 'e-zoomin';\n            }\n            if (this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n                this.navigateTo(this.depth, new Date(this.checkValue(value)), isCustomDate);\n            }\n            else {\n                this.navigateTo('Month', new Date(this.checkValue(value)), isCustomDate);\n            }\n        }\n    };\n    CalendarBase.prototype.resetCalendar = function () {\n        this.calendarElement && detach(this.calendarElement);\n        this.tableBodyElement && detach(this.tableBodyElement);\n        this.table && detach(this.table);\n        this.tableHeadElement && detach(this.tableHeadElement);\n        this.nextIcon && detach(this.nextIcon);\n        this.previousIcon && detach(this.previousIcon);\n        this.footer && detach(this.footer);\n        this.todayElement = null;\n        this.renderDayCellArgs = null;\n        this.calendarElement = this.tableBodyElement = this.footer = this.tableHeadElement =\n            this.nextIcon = this.previousIcon = this.table = null;\n    };\n    CalendarBase.prototype.keyActionHandle = function (e, value, multiSelection) {\n        var focusedDate = this.tableBodyElement.querySelector('tr td.e-focused-date');\n        var selectedDate;\n        if (multiSelection) {\n            if (!isNullOrUndefined(focusedDate) && +value === parseInt(focusedDate.getAttribute('id').split('_')[0], 10)) {\n                selectedDate = focusedDate;\n            }\n            else {\n                selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n            }\n        }\n        else {\n            selectedDate = this.tableBodyElement.querySelector('tr td.e-selected');\n        }\n        var view = this.getViewNumber(this.currentView());\n        var depthValue = this.getViewNumber(this.depth);\n        var levelRestrict = (view === depthValue && this.getViewNumber(this.start) >= depthValue);\n        this.effect = '';\n        switch (e.action) {\n            case 'moveLeft':\n                if (this.getModuleName() != 'daterangepicker' && !isNullOrUndefined(e.target) && e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n                    this.keyboardNavigate(-1, view, e, this.max, this.min);\n                    e.preventDefault();\n                }\n                break;\n            case 'moveRight':\n                if (this.getModuleName() != 'daterangepicker' && !isNullOrUndefined(e.target) && e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n                    this.keyboardNavigate(1, view, e, this.max, this.min);\n                    e.preventDefault();\n                }\n                break;\n            case 'moveUp':\n                if (this.getModuleName() != 'daterangepicker' && !isNullOrUndefined(e.target) && e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n                    if (view === 0) {\n                        this.keyboardNavigate(-7, view, e, this.max, this.min); // move the current date to the previous seven days.\n                    }\n                    else {\n                        this.keyboardNavigate(-4, view, e, this.max, this.min); // move the current year to the previous four days.\n                    }\n                    e.preventDefault();\n                }\n                break;\n            case 'moveDown':\n                if (this.getModuleName() != 'daterangepicker' && !isNullOrUndefined(e.target) && e.target.classList.length > 0 && e.target.classList.contains(CONTENTTABLE)) {\n                    if (view === 0) {\n                        this.keyboardNavigate(7, view, e, this.max, this.min);\n                    }\n                    else {\n                        this.keyboardNavigate(4, view, e, this.max, this.min);\n                    }\n                    e.preventDefault();\n                }\n                break;\n            case 'select':\n                if (e.target === this.headerTitleElement) {\n                    this.navigateTitle(e);\n                }\n                else if (e.target === this.previousIcon) {\n                    this.navigatePrevious(e);\n                }\n                else if (e.target === this.nextIcon) {\n                    this.navigateNext(e);\n                }\n                else if (e.target === this.todayElement) {\n                    this.todayButtonClick(e, value);\n                    if (this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') {\n                        this.element.focus();\n                    }\n                }\n                else {\n                    var element = !isNullOrUndefined(focusedDate) ? focusedDate : selectedDate;\n                    if (!isNullOrUndefined(element) && !element.classList.contains(DISABLED)) {\n                        if (levelRestrict) {\n                            // eslint-disable-next-line radix\n                            var d = new Date(parseInt('' + (element).id, 0));\n                            this.selectDate(e, d, (element));\n                        }\n                        else {\n                            this.contentClick(null, --view, (element), value);\n                        }\n                        if (this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') {\n                            this.element.focus();\n                        }\n                    }\n                }\n                break;\n            case 'controlUp':\n                this.title();\n                e.preventDefault();\n                break;\n            case 'controlDown':\n                if (!isNullOrUndefined(focusedDate) && !levelRestrict || !isNullOrUndefined(selectedDate) && !levelRestrict) {\n                    this.contentClick(null, --view, (focusedDate || selectedDate), value);\n                }\n                e.preventDefault();\n                break;\n            case 'home':\n                this.currentDate = this.firstDay(this.currentDate);\n                detach(this.tableBodyElement);\n                if (view === 0) {\n                    this.renderMonths(e);\n                }\n                else if (view === 1) {\n                    this.renderYears(e);\n                }\n                else {\n                    this.renderDecades(e);\n                }\n                e.preventDefault();\n                break;\n            case 'end':\n                this.currentDate = this.lastDay(this.currentDate, view);\n                detach(this.tableBodyElement);\n                if (view === 0) {\n                    this.renderMonths(e);\n                }\n                else if (view === 1) {\n                    this.renderYears(e);\n                }\n                else {\n                    this.renderDecades(e);\n                }\n                e.preventDefault();\n                break;\n            case 'pageUp':\n                this.addMonths(this.currentDate, -1);\n                this.navigateTo('Month', this.currentDate);\n                e.preventDefault();\n                break;\n            case 'pageDown':\n                this.addMonths(this.currentDate, 1);\n                this.navigateTo('Month', this.currentDate);\n                e.preventDefault();\n                break;\n            case 'shiftPageUp':\n                this.addYears(this.currentDate, -1);\n                this.navigateTo('Month', this.currentDate);\n                e.preventDefault();\n                break;\n            case 'shiftPageDown':\n                this.addYears(this.currentDate, 1);\n                this.navigateTo('Month', this.currentDate);\n                e.preventDefault();\n                break;\n            case 'controlHome':\n                this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 0, 1));\n                e.preventDefault();\n                break;\n            case 'controlEnd':\n                this.navigateTo('Month', new Date(this.currentDate.getFullYear(), 11, 31));\n                e.preventDefault();\n                break;\n            case 'tab':\n                if ((this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') && e.target === this.todayElement) {\n                    e.preventDefault();\n                    this.element.focus();\n                    this.hide();\n                }\n                break;\n            case 'shiftTab':\n                if ((this.getModuleName() === 'datepicker' || this.getModuleName() === 'datetimepicker') && e.target === this.headerTitleElement) {\n                    e.preventDefault();\n                    this.element.focus();\n                    this.hide();\n                }\n                break;\n        }\n    };\n    CalendarBase.prototype.keyboardNavigate = function (number, currentView, e, max, min) {\n        var date = new Date(this.checkValue(this.currentDate));\n        switch (currentView) {\n            case 2:\n                this.addYears(this.currentDate, number);\n                if (this.isMonthYearRange(this.currentDate)) {\n                    detach(this.tableBodyElement);\n                    this.renderDecades(e);\n                }\n                else {\n                    this.currentDate = date;\n                }\n                break;\n            case 1:\n                this.addMonths(this.currentDate, number);\n                if (this.calendarMode === 'Gregorian') {\n                    if (this.isMonthYearRange(this.currentDate)) {\n                        detach(this.tableBodyElement);\n                        this.renderYears(e);\n                    }\n                    else {\n                        this.currentDate = date;\n                    }\n                }\n                else {\n                    if (this.isMonthYearRange(this.currentDate)) {\n                        detach(this.tableBodyElement);\n                        this.renderYears(e);\n                    }\n                    else {\n                        this.currentDate = date;\n                    }\n                }\n                break;\n            case 0:\n                this.addDay(this.currentDate, number, e, max, min);\n                if (this.isMinMaxRange(this.currentDate)) {\n                    detach(this.tableBodyElement);\n                    this.renderMonths(e);\n                }\n                else {\n                    this.currentDate = date;\n                }\n                break;\n        }\n    };\n    /**\n     * Initialize the event handler\n     *\n     * @param {Date} value - Specifies value of date.\n     * @returns {void}\n     * @private\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    CalendarBase.prototype.preRender = function (value) {\n        var _this = this;\n        this.navigatePreviousHandler = this.navigatePrevious.bind(this);\n        this.navigateNextHandler = this.navigateNext.bind(this);\n        this.defaultKeyConfigs = this.getDefaultKeyConfig();\n        this.navigateHandler = function (e) {\n            _this.triggerNavigate(e);\n        };\n    };\n    CalendarBase.prototype.minMaxDate = function (localDate) {\n        var currentDate = new Date(new Date(+localDate).setHours(0, 0, 0, 0));\n        var minDate = new Date(new Date(+this.min).setHours(0, 0, 0, 0));\n        var maxDate = new Date(new Date(+this.max).setHours(0, 0, 0, 0));\n        if (+currentDate === +minDate || +currentDate === +maxDate) {\n            if (+localDate < +this.min) {\n                localDate = new Date(+this.min);\n            }\n            if (+localDate > +this.max) {\n                localDate = new Date(+this.max);\n            }\n        }\n        return localDate;\n    };\n    CalendarBase.prototype.renderMonths = function (e, value, isCustomDate) {\n        var numCells = this.weekNumber ? 8 : 7;\n        var tdEles;\n        if (this.calendarMode === 'Gregorian') {\n            tdEles = this.renderDays(this.currentDate, value, null, null, isCustomDate, e);\n        }\n        else {\n            tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n        }\n        this.createContentHeader();\n        if (this.calendarMode === 'Gregorian') {\n            this.renderTemplate(tdEles, numCells, MONTH, e, value);\n        }\n        else {\n            this.islamicModule.islamicRenderTemplate(tdEles, numCells, MONTH, e, value);\n        }\n    };\n    CalendarBase.prototype.renderDays = function (currentDate, value, multiSelection, values, isTodayDate, e) {\n        var tdEles = [];\n        var cellsCount = 42;\n        var todayDate = isTodayDate ? new Date(+currentDate) : this.getDate(new Date(), this.timezone);\n        var localDate = new Date(this.checkValue(currentDate));\n        var minMaxDate;\n        var currentMonth = localDate.getMonth();\n        this.titleUpdate(currentDate, 'days');\n        var d = localDate;\n        localDate = new Date(d.getFullYear(), d.getMonth(), 0, d.getHours(), d.getMinutes(), d.getSeconds(), d.getMilliseconds());\n        while (localDate.getDay() !== this.firstDayOfWeek) {\n            this.setStartDate(localDate, -1 * dayMilliSeconds);\n        }\n        for (var day = 0; day < cellsCount; ++day) {\n            var weekEle = this.createElement('td', { className: CELL });\n            var weekAnchor = this.createElement('span');\n            if (day % 7 === 0 && this.weekNumber) {\n                // 6 days are added to get Last day of the week and 3 days are added to get middle day of the week.\n                var numberOfDays = this.weekRule === 'FirstDay' ? 6 : (this.weekRule === 'FirstFourDayWeek' ? 3 : 0);\n                var finalDate = new Date(localDate.getFullYear(), localDate.getMonth(), (localDate.getDate() + numberOfDays));\n                weekAnchor.textContent = '' + this.getWeek(finalDate);\n                weekEle.appendChild(weekAnchor);\n                addClass([weekEle], '' + WEEKNUMBER);\n                tdEles.push(weekEle);\n            }\n            minMaxDate = new Date(+localDate);\n            localDate = this.minMaxDate(localDate);\n            var dateFormatOptions = { type: 'dateTime', skeleton: 'full' };\n            var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n            var tdEle = this.dayCell(localDate);\n            var title = this.globalize.formatDate(localDate, { type: 'date', skeleton: 'full' });\n            var dayLink = this.createElement('span');\n            dayLink.textContent = this.globalize.formatDate(localDate, { format: 'd', type: 'date', skeleton: 'yMd' });\n            var disabled = (this.min > localDate) || (this.max < localDate);\n            if (disabled) {\n                addClass([tdEle], DISABLED);\n                addClass([tdEle], OVERLAY);\n            }\n            else {\n                dayLink.setAttribute('title', '' + title);\n            }\n            if (currentMonth !== localDate.getMonth()) {\n                addClass([tdEle], OTHERMONTH);\n                dayLink.setAttribute('aria-disabled', 'true');\n            }\n            if (localDate.getDay() === 0 || localDate.getDay() === 6) {\n                addClass([tdEle], WEEKEND);\n            }\n            tdEle.appendChild(dayLink);\n            this.renderDayCellArgs = {\n                date: localDate,\n                isDisabled: false,\n                element: tdEle,\n                isOutOfRange: disabled\n            };\n            var argument = this.renderDayCellArgs;\n            this.renderDayCellEvent(argument);\n            if (argument.isDisabled) {\n                var selectDate = new Date(this.checkValue(value));\n                var argsDate = new Date(this.checkValue(argument.date));\n                if (multiSelection) {\n                    if (!isNullOrUndefined(values) && values.length > 0) {\n                        for (var index = 0; index < values.length; index++) {\n                            var localDateString = +new Date(this.globalize.formatDate(argument.date, { type: 'date', skeleton: 'yMd' }));\n                            var tempDateString = +new Date(this.globalize.formatDate(values[index], { type: 'date', skeleton: 'yMd' }));\n                            if (localDateString === tempDateString) {\n                                values.splice(index, 1);\n                                index = -1;\n                            }\n                        }\n                    }\n                }\n                else if (selectDate && +selectDate === +argsDate) {\n                    this.setProperties({ value: null }, true);\n                }\n            }\n            if (this.renderDayCellArgs.isDisabled && !tdEle.classList.contains(SELECTED)) {\n                addClass([tdEle], DISABLED);\n                addClass([tdEle], OVERLAY);\n                dayLink.setAttribute('aria-disabled', 'true');\n                if (+this.renderDayCellArgs.date === +this.todayDate) {\n                    this.todayDisabled = true;\n                }\n            }\n            var otherMnthBool = tdEle.classList.contains(OTHERMONTH);\n            var disabledCls = tdEle.classList.contains(DISABLED);\n            if (!disabledCls) {\n                EventHandler.add(tdEle, 'click', this.clickHandler, this);\n            }\n            // to set the value as null while setting the disabled date onProperty change.\n            // if (args.isDisabled && +this.value === +args.date) {\n            //     this.setProperties({ value: null }, true);\n            // }\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            var currentTarget = void 0;\n            if (!isNullOrUndefined(e) && e.type === 'click') {\n                currentTarget = e.currentTarget;\n            }\n            if (multiSelection && !isNullOrUndefined(values) && !disabledCls) {\n                for (var tempValue = 0; tempValue < values.length; tempValue++) {\n                    var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n                    var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n                    var localDateString = this.globalize.formatDate(localDate, formatOptions);\n                    var tempDateString = this.globalize.formatDate(values[tempValue], formatOptions);\n                    if ((localDateString === tempDateString && this.getDateVal(localDate, values[tempValue]))\n                        || (this.getDateVal(localDate, value))) {\n                        addClass([tdEle], SELECTED);\n                    }\n                    if (!isNullOrUndefined(currentTarget) && currentTarget.innerText === tdEle.innerText &&\n                        this.previousDates && tdEle.classList.contains(SELECTED) && currentTarget.classList.contains(SELECTED)) {\n                        removeClass([tdEle], SELECTED);\n                        this.previousDates = false;\n                        var copyValues = this.copyValues(values);\n                        for (var i = 0; i < copyValues.length; i++) {\n                            var type_1 = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n                            var formatOptions_1 = { format: null, type: 'date', skeleton: 'short', calendar: type_1 };\n                            var localDateString_1 = this.globalize.formatDate(date, formatOptions_1);\n                            var tempDateString_1 = this.globalize.formatDate(copyValues[i], formatOptions_1);\n                            if (localDateString_1 === tempDateString_1) {\n                                var index = copyValues.indexOf(copyValues[i]);\n                                copyValues.splice(index, 1);\n                                values.splice(index, 1);\n                            }\n                        }\n                        this.setProperties({ values: copyValues }, true);\n                    }\n                    else {\n                        this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n                    }\n                }\n                if (values.length <= 0) {\n                    this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n                }\n            }\n            else if (!disabledCls && this.getDateVal(localDate, value)) {\n                addClass([tdEle], SELECTED);\n            }\n            this.updateFocus(otherMnthBool, disabledCls, localDate, tdEle, currentDate);\n            if (!isNullOrUndefined(date) && date.getFullYear() === todayDate.getFullYear() && date.getMonth() === todayDate.getMonth()\n                && date.getDate() === todayDate.getDate()) {\n                addClass([tdEle], TODAY);\n            }\n            tdEles.push(this.renderDayCellArgs.element);\n            localDate = new Date(+minMaxDate);\n            this.addDay(localDate, 1, null, this.max, this.min);\n        }\n        return tdEles;\n    };\n    CalendarBase.prototype.updateFocus = function (otherMonth, disabled, localDate, tableElement, currentDate) {\n        if (currentDate.getDate() === localDate.getDate() && !otherMonth && !disabled) {\n            addClass([tableElement], FOCUSEDDATE);\n        }\n        else {\n            // eslint-disable-next-line radix\n            if (currentDate >= this.max && parseInt(tableElement.id, 0) === +this.max && !otherMonth && !disabled) {\n                addClass([tableElement], FOCUSEDDATE);\n            }\n            // eslint-disable-next-line radix\n            if (currentDate <= this.min && parseInt(tableElement.id, 0) === +this.min && !otherMonth && !disabled) {\n                addClass([tableElement], FOCUSEDDATE);\n            }\n        }\n    };\n    CalendarBase.prototype.renderYears = function (e, value) {\n        this.removeTableHeadElement();\n        var numCells = 4;\n        var tdEles = [];\n        var valueUtil = isNullOrUndefined(value);\n        var curDate = new Date(this.checkValue(this.currentDate));\n        var mon = curDate.getMonth();\n        var yr = curDate.getFullYear();\n        var localDate = curDate;\n        var curYrs = localDate.getFullYear();\n        var minYr = new Date(this.checkValue(this.min)).getFullYear();\n        var minMonth = new Date(this.checkValue(this.min)).getMonth();\n        var maxYr = new Date(this.checkValue(this.max)).getFullYear();\n        var maxMonth = new Date(this.checkValue(this.max)).getMonth();\n        localDate.setMonth(0);\n        this.titleUpdate(this.currentDate, 'months');\n        localDate.setDate(1);\n        for (var month = 0; month < 12; ++month) {\n            var tdEle = this.dayCell(localDate);\n            var dayLink = this.createElement('span');\n            var localMonth = (value && (value).getMonth() === localDate.getMonth());\n            var select = (value && (value).getFullYear() === yr && localMonth);\n            var title = this.globalize.formatDate(localDate, { type: 'date', format: 'MMM y' });\n            dayLink.textContent = this.toCapitalize(this.globalize.formatDate(localDate, {\n                format: null, type: 'dateTime', skeleton: 'MMM'\n            }));\n            if ((this.min && (curYrs < minYr || (month < minMonth && curYrs === minYr))) || (this.max && (curYrs > maxYr || (month > maxMonth && curYrs >= maxYr)))) {\n                addClass([tdEle], DISABLED);\n            }\n            else if (!valueUtil && select) {\n                addClass([tdEle], SELECTED);\n            }\n            else {\n                if (localDate.getMonth() === mon && this.currentDate.getMonth() === mon) {\n                    addClass([tdEle], FOCUSEDDATE);\n                }\n            }\n            localDate.setDate(1);\n            localDate.setMonth(localDate.getMonth() + 1);\n            if (!tdEle.classList.contains(DISABLED)) {\n                EventHandler.add(tdEle, 'click', this.clickHandler, this);\n                dayLink.setAttribute('title', '' + title);\n            }\n            tdEle.appendChild(dayLink);\n            tdEles.push(tdEle);\n        }\n        this.renderTemplate(tdEles, numCells, YEAR, e, value);\n    };\n    CalendarBase.prototype.renderDecades = function (e, value) {\n        this.removeTableHeadElement();\n        var numCells = 4;\n        var yearCell = 12;\n        var tdEles = [];\n        var localDate = new Date(this.checkValue(this.currentDate));\n        localDate.setMonth(0);\n        localDate.setDate(1);\n        var localYr = localDate.getFullYear();\n        var startYr = new Date(localDate.setFullYear((localYr - localYr % 10)));\n        var endYr = new Date(localDate.setFullYear((localYr - localYr % 10 + (10 - 1))));\n        var startFullYr = startYr.getFullYear();\n        var endFullYr = endYr.getFullYear();\n        var startHdrYr = this.globalize.formatDate(startYr, {\n            format: null, type: 'dateTime', skeleton: 'y'\n        });\n        var endHdrYr = this.globalize.formatDate(endYr, { format: null, type: 'dateTime', skeleton: 'y' });\n        this.headerTitleElement.textContent = startHdrYr + ' - ' + (endHdrYr);\n        var start = new Date(localYr - (localYr % 10) - 1, 0, 1);\n        var startYear = start.getFullYear();\n        for (var rowIterator = 0; rowIterator < yearCell; ++rowIterator) {\n            var year = startYear + rowIterator;\n            localDate.setFullYear(year);\n            var tdEle = this.dayCell(localDate);\n            var dayLink = this.createElement('span');\n            dayLink.textContent = this.globalize.formatDate(localDate, {\n                format: null, type: 'dateTime', skeleton: 'y'\n            });\n            if ((year < startFullYr) || (year > endFullYr)) {\n                addClass([tdEle], OTHERDECADE);\n                dayLink.setAttribute('aria-disabled', 'true');\n                if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n                    addClass([tdEle], SELECTED);\n                }\n                if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n                    year > new Date(this.checkValue(this.max)).getFullYear()) {\n                    addClass([tdEle], DISABLED);\n                }\n            }\n            else if (year < new Date(this.checkValue(this.min)).getFullYear() ||\n                year > new Date(this.checkValue(this.max)).getFullYear()) {\n                addClass([tdEle], DISABLED);\n            }\n            else if (!isNullOrUndefined(value) && localDate.getFullYear() === (value).getFullYear()) {\n                addClass([tdEle], SELECTED);\n            }\n            else {\n                if (localDate.getFullYear() === this.currentDate.getFullYear() && !tdEle.classList.contains(DISABLED)) {\n                    addClass([tdEle], FOCUSEDDATE);\n                }\n            }\n            if (!tdEle.classList.contains(DISABLED)) {\n                EventHandler.add(tdEle, 'click', this.clickHandler, this);\n                dayLink.setAttribute('title', '' + dayLink.textContent);\n            }\n            tdEle.appendChild(dayLink);\n            tdEles.push(tdEle);\n        }\n        this.renderTemplate(tdEles, numCells, 'e-decade', e, value);\n    };\n    CalendarBase.prototype.dayCell = function (localDate) {\n        var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n        var dateFormatOptions = { skeleton: 'full', type: 'dateTime', calendar: type };\n        var date = this.globalize.parseDate(this.globalize.formatDate(localDate, dateFormatOptions), dateFormatOptions);\n        var value;\n        if (!isNullOrUndefined(date)) {\n            value = date.valueOf();\n        }\n        var attrs = {\n            className: CELL, attrs: { 'id': '' + getUniqueID('' + value), 'aria-selected': 'false' }\n        };\n        return this.createElement('td', attrs);\n    };\n    CalendarBase.prototype.firstDay = function (date) {\n        var collection = this.currentView() !== 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '') :\n            this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '');\n        if (collection.length) {\n            for (var i = 0; i < collection.length; i++) {\n                if (!collection[i].classList.contains(DISABLED)) {\n                    // eslint-disable-next-line radix\n                    date = new Date(parseInt(collection[i].id, 0));\n                    break;\n                }\n            }\n        }\n        return date;\n    };\n    CalendarBase.prototype.lastDay = function (date, view) {\n        var lastDate = new Date(date.getFullYear(), date.getMonth() + 1, 0);\n        if (view !== 2) {\n            var timeOffset = Math.abs(lastDate.getTimezoneOffset() - this.firstDay(date).getTimezoneOffset());\n            if (timeOffset) {\n                lastDate.setHours(this.firstDay(date).getHours() + (timeOffset / 60));\n            }\n            return this.findLastDay(lastDate);\n        }\n        else {\n            return this.findLastDay(this.firstDay(lastDate));\n        }\n    };\n    CalendarBase.prototype.checkDateValue = function (value) {\n        return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n    };\n    CalendarBase.prototype.findLastDay = function (date) {\n        var collection = this.currentView() === 'Decade' ? this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERDECADE + '') :\n            this.tableBodyElement.querySelectorAll('td' + ':not(.' + OTHERMONTH + '');\n        if (collection.length) {\n            for (var i = collection.length - 1; i >= 0; i--) {\n                if (!collection[i].classList.contains(DISABLED)) {\n                    // eslint-disable-next-line radix\n                    date = new Date(parseInt(collection[i].id, 0));\n                    break;\n                }\n            }\n        }\n        return date;\n    };\n    CalendarBase.prototype.removeTableHeadElement = function () {\n        if (this.getModuleName() === 'calendar') {\n            if (!isNullOrUndefined(this.element.querySelectorAll('.e-content table thead')[0])) {\n                detach(this.tableHeadElement);\n            }\n        }\n        else {\n            if (!isNullOrUndefined(this.calendarElement.querySelectorAll('.e-content table thead')[0])) {\n                detach(this.tableHeadElement);\n            }\n        }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    CalendarBase.prototype.renderTemplate = function (elements, count, classNm, e, value) {\n        var view = this.getViewNumber(this.currentView());\n        var trEle;\n        this.tableBodyElement = this.createElement('tbody');\n        this.table.appendChild(this.tableBodyElement);\n        removeClass([this.contentElement, this.headerElement], [MONTH, DECADE, YEAR]);\n        addClass([this.contentElement, this.headerElement], [classNm]);\n        var weekNumCell = 41;\n        var numberCell = 35;\n        var otherMonthCell = 6;\n        var row = count;\n        var rowIterator = 0;\n        for (var dayCell = 0; dayCell < elements.length / count; ++dayCell) {\n            trEle = this.createElement('tr');\n            for (rowIterator = 0 + rowIterator; rowIterator < row; rowIterator++) {\n                if (!elements[rowIterator].classList.contains('e-week-number') && !isNullOrUndefined(elements[rowIterator].children[0])) {\n                    addClass([elements[rowIterator].children[0]], [LINK]);\n                    rippleEffect(elements[rowIterator].children[0], {\n                        duration: 600,\n                        isCenterRipple: true\n                    });\n                }\n                trEle.appendChild(elements[rowIterator]);\n                if (this.weekNumber && rowIterator === otherMonthCell + 1 && elements[otherMonthCell + 1].classList.contains(OTHERMONTH)) {\n                    addClass([trEle], OTHERMONTHROW);\n                }\n                if (!this.weekNumber && rowIterator === otherMonthCell && elements[otherMonthCell].\n                    classList.contains(OTHERMONTH)) {\n                    addClass([trEle], OTHERMONTHROW);\n                }\n                if (this.weekNumber) {\n                    if (rowIterator === weekNumCell && elements[weekNumCell].classList.contains(OTHERMONTH)) {\n                        addClass([trEle], OTHERMONTHROW);\n                    }\n                }\n                else {\n                    if (rowIterator === numberCell && elements[numberCell].classList.contains(OTHERMONTH)) {\n                        addClass([trEle], OTHERMONTHROW);\n                    }\n                }\n            }\n            row = row + count;\n            rowIterator = rowIterator + 0;\n            this.tableBodyElement.appendChild(trEle);\n        }\n        this.table.querySelector('tbody').className = this.effect;\n        if (this.calendarMode === 'Gregorian') {\n            this.iconHandler();\n        }\n        else {\n            this.islamicModule.islamicIconHandler();\n        }\n        if (view !== this.getViewNumber(this.currentView()) || (view === 0 && view !== this.getViewNumber(this.currentView()))) {\n            this.navigateHandler(e);\n        }\n        this.setAriaActiveDescendant();\n    };\n    CalendarBase.prototype.clickHandler = function (e, value) {\n        this.clickEventEmitter(e);\n        var eve = e.currentTarget;\n        var view = this.getViewNumber(this.currentView());\n        if (eve.classList.contains(OTHERMONTH)) {\n            this.contentClick(e, 0, null, value);\n        }\n        else if (view === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n            this.contentClick(e, 1, null, value);\n        }\n        else if (2 === view) {\n            this.contentClick(e, 1, null, value);\n        }\n        else if (!eve.classList.contains(OTHERMONTH) && view === 0) {\n            this.selectDate(e, this.getIdValue(e, null), null);\n        }\n        else {\n            this.contentClick(e, 0, eve, value);\n        }\n        if (this.getModuleName() === 'calendar') {\n            this.table.focus();\n        }\n    };\n    // Content click event handler required for extended components\n    CalendarBase.prototype.clickEventEmitter = function (e) {\n        e.preventDefault();\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    CalendarBase.prototype.contentClick = function (e, view, element, value) {\n        var currentView = this.getViewNumber(this.currentView());\n        var d = this.getIdValue(e, element);\n        switch (view) {\n            case 0:\n                if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n                    detach(this.tableBodyElement);\n                    this.currentDate = d;\n                    this.effect = ZOOMIN;\n                    this.renderMonths(e);\n                }\n                else {\n                    if (this.calendarMode === 'Gregorian') {\n                        this.currentDate.setMonth(d.getMonth());\n                        if (d.getMonth() > 0 && this.currentDate.getMonth() !== d.getMonth()) {\n                            this.currentDate.setDate(0);\n                        }\n                        this.currentDate.setFullYear(d.getFullYear());\n                    }\n                    else {\n                        this.currentDate = d;\n                    }\n                    this.effect = ZOOMIN;\n                    detach(this.tableBodyElement);\n                    this.renderMonths(e);\n                }\n                break;\n            case 1:\n                if (currentView === this.getViewNumber(this.depth) && this.getViewNumber(this.start) >= this.getViewNumber(this.depth)) {\n                    this.selectDate(e, d, null);\n                }\n                else {\n                    if (this.calendarMode === 'Gregorian') {\n                        this.currentDate.setFullYear(d.getFullYear());\n                    }\n                    else {\n                        this.islamicPreviousHeader = this.headerElement.textContent;\n                        var islamicDate = this.islamicModule.getIslamicDate(d);\n                        this.currentDate = this.islamicModule.toGregorian(islamicDate.year, islamicDate.month, 1);\n                    }\n                    this.effect = ZOOMIN;\n                    detach(this.tableBodyElement);\n                    this.renderYears(e);\n                }\n        }\n    };\n    CalendarBase.prototype.switchView = function (view, e, multiSelection, isCustomDate) {\n        switch (view) {\n            case 0:\n                detach(this.tableBodyElement);\n                this.renderMonths(e, null, isCustomDate);\n                break;\n            case 1:\n                detach(this.tableBodyElement);\n                this.renderYears(e);\n                break;\n            case 2:\n                detach(this.tableBodyElement);\n                this.renderDecades(e);\n        }\n    };\n    /**\n     * To get component name\n     *\n     * @returns {string} Returns the component name.\n     * @private\n     */\n    CalendarBase.prototype.getModuleName = function () {\n        return 'calendar';\n    };\n    /**\n     *\n     * @returns {void}\n\n     */\n    CalendarBase.prototype.requiredModules = function () {\n        var modules = [];\n        if (this) {\n            modules.push({ args: [this], member: 'islamic' });\n        }\n        return modules;\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Gets the properties to be maintained upon browser refresh.\n     *\n     * @returns {string}\n     */\n    CalendarBase.prototype.getPersistData = function () {\n        var keyEntity = ['value'];\n        return this.addOnPersist(keyEntity);\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Called internally if any of the property value changed.\n     *\n     * @param {CalendarBaseModel} newProp - Returns the dynamic property value of the component.\n     * @param {CalendarBaseModel} oldProp - Returns the previous property value of the component.\n     * @param {boolean} multiSelection - - Specifies whether multiple date selection is enabled or not.\n     * @param {Date[]} values - Specifies the dates.\n     * @returns {void}\n     * @private\n     */\n    CalendarBase.prototype.onPropertyChanged = function (newProp, oldProp, multiSelection, values) {\n        this.effect = '';\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'enableRtl':\n                    if (newProp.enableRtl) {\n                        if (this.getModuleName() === 'calendar') {\n                            this.element.classList.add('e-rtl');\n                        }\n                        else {\n                            this.calendarElement.classList.add('e-rtl');\n                        }\n                    }\n                    else {\n                        if (this.getModuleName() === 'calendar') {\n                            this.element.classList.remove('e-rtl');\n                        }\n                        else {\n                            this.calendarElement.classList.remove('e-rtl');\n                        }\n                    }\n                    break;\n                case 'dayHeaderFormat':\n                    this.getCultureValues();\n                    if (this.getModuleName() !== 'datepicker') {\n                        this.createContentHeader();\n                    }\n                    else if (this.calendarElement) {\n                        this.createContentHeader();\n                    }\n                    this.adjustLongHeaderSize();\n                    break;\n                case 'min':\n                case 'max':\n                    this.rangeValidation(this.min, this.max);\n                    if (prop === 'min') {\n                        this.setProperties({ min: this.checkDateValue(new Date(this.checkValue(newProp.min))) }, true);\n                    }\n                    else {\n                        this.setProperties({ max: this.checkDateValue(new Date(this.checkValue(newProp.max))) }, true);\n                    }\n                    this.setProperties({ start: this.currentView() }, true);\n                    if (this.tableBodyElement) {\n                        detach(this.tableBodyElement);\n                    }\n                    this.minMaxUpdate();\n                    if (multiSelection) {\n                        this.validateValues(multiSelection, values);\n                    }\n                    if (this.getModuleName() !== 'datepicker') {\n                        this.createContentBody();\n                    }\n                    else if (this.calendarElement) {\n                        this.createContentBody();\n                    }\n                    if ((this.todayDate < this.min || this.max < this.todayDate) && (this.footer) && (this.todayElement)) {\n                        detach(this.todayElement);\n                        detach(this.footer);\n                        this.todayElement = this.footer = null;\n                        this.createContentFooter();\n                    }\n                    else {\n                        if ((this.footer) && (this.todayElement) && this.todayElement.classList.contains('e-disabled')) {\n                            removeClass([this.todayElement], DISABLED);\n                            detach(this.todayElement);\n                            detach(this.footer);\n                            this.todayElement = this.footer = null;\n                            this.createContentFooter();\n                        }\n                    }\n                    break;\n                case 'start':\n                case 'depth':\n                case 'weekNumber':\n                case 'firstDayOfWeek':\n                case 'weekRule':\n                    this.checkView();\n                    if (this.getModuleName() !== 'datepicker') {\n                        this.createContentHeader();\n                        this.createContentBody();\n                    }\n                    else if (this.calendarElement) {\n                        this.createContentHeader();\n                        this.createContentBody();\n                    }\n                    break;\n                case 'locale':\n                    this.globalize = new Internationalization(this.locale);\n                    if (this.getModuleName() !== 'datepicker') {\n                        this.createContentHeader();\n                        this.createContentBody();\n                    }\n                    else if (this.calendarElement) {\n                        this.createContentHeader();\n                        this.createContentBody();\n                    }\n                    if (this.getModuleName() === 'calendar') {\n                        var l10nLocale = { today: 'Today' };\n                        this.l10 = new L10n(this.getModuleName(), l10nLocale, this.locale);\n                    }\n                    this.l10.setLocale(this.locale);\n                    if (this.showTodayButton) {\n                        this.updateFooter();\n                    }\n                    break;\n                case 'showTodayButton':\n                    if (newProp.showTodayButton) {\n                        this.createContentFooter();\n                    }\n                    else {\n                        if (!isNullOrUndefined(this.todayElement) && !isNullOrUndefined(this.footer)) {\n                            detach(this.todayElement);\n                            detach(this.footer);\n                            this.todayElement = this.footer = undefined;\n                        }\n                    }\n                    this.setProperties({ showTodayButton: newProp.showTodayButton }, true);\n                    break;\n            }\n        }\n    };\n    /**\n     * values property updated with considered disabled dates of the calendar.\n     *\n     * @param {boolean} multiSelection - Specifies whether multiple date selection is enabled.\n     * @param {Date[]} values - Specifies the dates to validate.\n     * @returns {void}\n     */\n    CalendarBase.prototype.validateValues = function (multiSelection, values) {\n        if (multiSelection && !isNullOrUndefined(values) && values.length > 0) {\n            var copyValues = this.copyValues(values);\n            for (var skipIndex = 0; skipIndex < copyValues.length; skipIndex++) {\n                var tempValue = copyValues[skipIndex];\n                var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n                var tempValueString = void 0;\n                if (this.calendarMode === 'Gregorian') {\n                    tempValueString = this.globalize.formatDate(tempValue, { type: 'date', skeleton: 'yMd' });\n                }\n                else {\n                    tempValueString = this.globalize.formatDate(tempValue, { type: 'dateTime', skeleton: 'full', calendar: 'islamic' });\n                }\n                var minFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n                var minStringValue = this.globalize.formatDate(this.min, minFormatOption);\n                var minString = minStringValue;\n                var maxFormatOption = { type: 'date', skeleton: 'yMd', calendar: type };\n                var maxStringValue = this.globalize.formatDate(this.max, maxFormatOption);\n                var maxString = maxStringValue;\n                if (+new Date(tempValueString) < +new Date(minString) ||\n                    +new Date(tempValueString) > +new Date(maxString)) {\n                    copyValues.splice(skipIndex, 1);\n                    skipIndex = -1;\n                }\n            }\n            this.setProperties({ values: copyValues }, true);\n        }\n    };\n    CalendarBase.prototype.setValueUpdate = function () {\n        if (!isNullOrUndefined(this.tableBodyElement)) {\n            detach(this.tableBodyElement);\n            this.setProperties({ start: this.currentView() }, true);\n            this.createContentBody();\n        }\n    };\n    CalendarBase.prototype.copyValues = function (values) {\n        var copyValues = [];\n        if (!isNullOrUndefined(values) && values.length > 0) {\n            for (var index = 0; index < values.length; index++) {\n                copyValues.push(new Date(+values[index]));\n            }\n        }\n        return copyValues;\n    };\n    CalendarBase.prototype.titleUpdate = function (date, view) {\n        var globalize = new Internationalization(this.locale);\n        var dayFormatOptions;\n        var monthFormatOptions;\n        var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n        if (this.calendarMode === 'Gregorian') {\n            dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', skeleton: 'yMMMM', calendar: type });\n            monthFormatOptions = globalize.formatDate(date, {\n                format: null, type: 'dateTime', skeleton: 'y', calendar: type\n            });\n        }\n        else {\n            dayFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'MMMM y', calendar: type });\n            monthFormatOptions = globalize.formatDate(date, { type: 'dateTime', format: 'y', calendar: type });\n        }\n        switch (view) {\n            case 'days':\n                this.headerTitleElement.textContent = this.toCapitalize(dayFormatOptions);\n                break;\n            case 'months':\n                this.headerTitleElement.textContent = monthFormatOptions;\n        }\n    };\n    CalendarBase.prototype.setActiveDescendant = function () {\n        var id;\n        var focusedEle = this.tableBodyElement.querySelector('tr td.e-focused-date');\n        var selectedEle = this.tableBodyElement.querySelector('tr td.e-selected');\n        var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n        var title;\n        var view = this.currentView();\n        if (view === 'Month') {\n            title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'full', calendar: type });\n        }\n        else if (view === 'Year') {\n            if (type !== 'islamic') {\n                title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'yMMMM', calendar: type });\n            }\n            else {\n                title = this.globalize.formatDate(this.currentDate, { type: 'date', skeleton: 'GyMMM', calendar: type });\n            }\n        }\n        else {\n            title = this.globalize.formatDate(this.currentDate, {\n                format: null, type: 'date', skeleton: 'y', calendar: type\n            });\n        }\n        if (selectedEle || focusedEle) {\n            if (!isNullOrUndefined(selectedEle)) {\n                selectedEle.setAttribute('aria-selected', 'true');\n            }\n            (focusedEle || selectedEle).setAttribute('aria-label', title);\n            id = (focusedEle || selectedEle).getAttribute('id');\n        }\n        return id;\n    };\n    CalendarBase.prototype.iconHandler = function () {\n        new Date(this.checkValue(this.currentDate)).setDate(1);\n        switch (this.currentView()) {\n            case 'Month':\n                this.previousIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n                this.nextIconHandler(this.compareMonth(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n                break;\n            case 'Year':\n                this.previousIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n                this.nextIconHandler(this.compareYear(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n                break;\n            case 'Decade':\n                this.previousIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.min) < 1);\n                this.nextIconHandler(this.compareDecade(new Date(this.checkValue(this.currentDate)), this.max) > -1);\n        }\n    };\n    /**\n     * Destroys the widget.\n     *\n     * @returns {void}\n     */\n    CalendarBase.prototype.destroy = function () {\n        if (this.getModuleName() === 'calendar' && this.element) {\n            removeClass([this.element], [ROOT]);\n        }\n        else {\n            if (this.calendarElement && this.element) {\n                removeClass([this.element], [ROOT]);\n            }\n        }\n        if (this.getModuleName() === 'calendar' && this.element) {\n            if (!isNullOrUndefined(this.headerTitleElement)) {\n                EventHandler.remove(this.headerTitleElement, 'click', this.navigateTitle);\n            }\n            if (this.todayElement) {\n                EventHandler.remove(this.todayElement, 'click', this.todayButtonClick);\n            }\n            this.previousIconHandler(true);\n            this.nextIconHandler(true);\n            this.keyboardModule.destroy();\n            this.element.removeAttribute('data-role');\n            if (!isNullOrUndefined(this.calendarEleCopy.getAttribute('tabindex'))) {\n                this.element.setAttribute('tabindex', this.tabIndex);\n            }\n            else {\n                this.element.removeAttribute('tabindex');\n            }\n        }\n        if (this.element) {\n            this.element.innerHTML = '';\n        }\n        this.todayElement = null;\n        this.tableBodyElement = null;\n        this.todayButtonEvent = null;\n        this.renderDayCellArgs = null;\n        this.headerElement = null;\n        this.nextIcon = null;\n        this.table = null;\n        this.tableHeadElement = null;\n        this.previousIcon = null;\n        this.headerTitleElement = null;\n        this.footer = null;\n        this.contentElement = null;\n        _super.prototype.destroy.call(this);\n    };\n    CalendarBase.prototype.title = function (e) {\n        var currentView = this.getViewNumber(this.currentView());\n        this.effect = ZOOMIN;\n        this.switchView(++currentView, e);\n    };\n    CalendarBase.prototype.getViewNumber = function (stringVal) {\n        if (stringVal === 'Month') {\n            return 0;\n        }\n        else if (stringVal === 'Year') {\n            return 1;\n        }\n        else {\n            return 2;\n        }\n    };\n    CalendarBase.prototype.navigateTitle = function (e) {\n        e.preventDefault();\n        this.title(e);\n        if (this.getModuleName() === 'calendar') {\n            this.table.focus();\n        }\n    };\n    CalendarBase.prototype.previous = function () {\n        this.effect = '';\n        var currentView = this.getViewNumber(this.currentView());\n        switch (this.currentView()) {\n            case 'Month':\n                this.addMonths(this.currentDate, -1);\n                this.switchView(currentView);\n                break;\n            case 'Year':\n                this.addYears(this.currentDate, -1);\n                this.switchView(currentView);\n                break;\n            case 'Decade':\n                this.addYears(this.currentDate, -10);\n                this.switchView(currentView);\n                break;\n        }\n    };\n    CalendarBase.prototype.navigatePrevious = function (e) {\n        !Browser.isDevice && e.preventDefault();\n        if (this.calendarMode === 'Gregorian') {\n            this.previous();\n        }\n        else {\n            this.islamicModule.islamicPrevious();\n        }\n        this.triggerNavigate(e);\n        if (this.getModuleName() === 'calendar') {\n            this.table.focus();\n        }\n    };\n    CalendarBase.prototype.next = function () {\n        this.effect = '';\n        var currentView = this.getViewNumber(this.currentView());\n        switch (this.currentView()) {\n            case 'Month':\n                this.addMonths(this.currentDate, 1);\n                this.switchView(currentView);\n                break;\n            case 'Year':\n                this.addYears(this.currentDate, 1);\n                this.switchView(currentView);\n                break;\n            case 'Decade':\n                this.addYears(this.currentDate, 10);\n                this.switchView(currentView);\n                break;\n        }\n    };\n    CalendarBase.prototype.navigateNext = function (eve) {\n        !Browser.isDevice && eve.preventDefault();\n        if (this.calendarMode === 'Gregorian') {\n            this.next();\n        }\n        else {\n            this.islamicModule.islamicNext();\n        }\n        this.triggerNavigate(eve);\n        if (this.getModuleName() === 'calendar') {\n            this.table.focus();\n        }\n    };\n    /**\n     * This method is used to navigate to the month/year/decade view of the Calendar.\n     *\n     * @param {string} view - Specifies the view of the Calendar.\n     * @param {Date} date - Specifies the focused date in a view.\n     * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n     * @returns {void}\n     */\n    CalendarBase.prototype.navigateTo = function (view, date, isCustomDate) {\n        if (+date >= +this.min && +date <= +this.max) {\n            this.currentDate = date;\n        }\n        if (+date <= +this.min) {\n            this.currentDate = new Date(this.checkValue(this.min));\n        }\n        if (+date >= +this.max) {\n            this.currentDate = new Date(this.checkValue(this.max));\n        }\n        if ((this.getViewNumber(this.depth) >= this.getViewNumber(view))) {\n            if ((this.getViewNumber(this.depth) <= this.getViewNumber(this.start))\n                || this.getViewNumber(this.depth) === this.getViewNumber(view)) {\n                view = this.depth;\n            }\n        }\n        this.switchView(this.getViewNumber(view), null, null, isCustomDate);\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Gets the current view of the Calendar.\n     *\n     * @returns {string}\n     */\n    CalendarBase.prototype.currentView = function () {\n        if (!isNullOrUndefined(this.contentElement) && this.contentElement.classList.contains(YEAR)) {\n            return 'Year';\n        }\n        else if (!isNullOrUndefined(this.contentElement) && this.contentElement.classList.contains(DECADE)) {\n            return 'Decade';\n        }\n        else {\n            return 'Month';\n        }\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n    CalendarBase.prototype.getDateVal = function (date, value) {\n        return (!isNullOrUndefined(value) && date.getDate() === (value).getDate()\n            && date.getMonth() === (value).getMonth() && date.getFullYear() === (value).getFullYear());\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    CalendarBase.prototype.getCultureObjects = function (ld, c) {\n        var gregorianFormat = '.dates.calendars.gregorian.days.format.' + this.dayHeaderFormat.toLowerCase();\n        var islamicFormat = '.dates.calendars.islamic.days.format.' + this.dayHeaderFormat.toLowerCase();\n        var mainVal = 'main.';\n        if (this.calendarMode === 'Gregorian') {\n            return getValue(mainVal + '' + this.locale + gregorianFormat, ld);\n        }\n        else {\n            return getValue('main.' + '' + this.locale + islamicFormat, ld);\n        }\n    };\n    CalendarBase.prototype.getWeek = function (d) {\n        var currentDate = new Date(this.checkValue(d)).valueOf();\n        var date = new Date(d.getFullYear(), 0, 1).valueOf();\n        return Math.ceil((((currentDate - date) + dayMilliSeconds) / dayMilliSeconds) / 7);\n    };\n    CalendarBase.prototype.setStartDate = function (date, time) {\n        var tzOffset = date.getTimezoneOffset();\n        var d = new Date(date.getTime() + time);\n        var tzOffsetDiff = d.getTimezoneOffset() - tzOffset;\n        date.setTime(d.getTime() + tzOffsetDiff * minutesMilliSeconds);\n    };\n    CalendarBase.prototype.addMonths = function (date, i) {\n        if (this.calendarMode === 'Gregorian') {\n            var day = date.getDate();\n            date.setDate(1);\n            date.setMonth(date.getMonth() + i);\n            date.setDate(Math.min(day, this.getMaxDays(date)));\n        }\n        else {\n            var islamicDate = this.islamicModule.getIslamicDate(date);\n            this.currentDate = this.islamicModule.toGregorian(islamicDate.year, (islamicDate.month) + i, 1);\n        }\n    };\n    CalendarBase.prototype.addYears = function (date, i) {\n        if (this.calendarMode === 'Gregorian') {\n            var day = date.getDate();\n            date.setDate(1);\n            date.setFullYear(date.getFullYear() + i);\n            date.setDate(Math.min(day, this.getMaxDays(date)));\n        }\n        else {\n            var islamicDate = this.islamicModule.getIslamicDate(date);\n            this.currentDate = this.islamicModule.toGregorian(islamicDate.year + i, (islamicDate.month), 1);\n        }\n    };\n    CalendarBase.prototype.getIdValue = function (e, element) {\n        var eve;\n        if (e) {\n            eve = e.currentTarget;\n        }\n        else {\n            eve = element;\n        }\n        var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n        var dateFormatOptions = { type: 'dateTime', skeleton: 'full', calendar: type };\n        // eslint-disable-next-line radix\n        var dateString = this.globalize.formatDate(new Date(parseInt('' + eve.getAttribute('id'), 0)), dateFormatOptions);\n        var date = this.globalize.parseDate(dateString, dateFormatOptions);\n        var value = date.valueOf() - date.valueOf() % 1000;\n        return new Date(value);\n        //return this.globalize.parseDate(dateString, dateFormatOptions);\n    };\n    CalendarBase.prototype.adjustLongHeaderSize = function () {\n        removeClass([this.element], DAYHEADERLONG);\n        if (this.dayHeaderFormat === 'Wide') {\n            addClass([this.getModuleName() === 'calendar' ? this.element : this.calendarElement], DAYHEADERLONG);\n        }\n    };\n    CalendarBase.prototype.selectDate = function (e, date, node, multiSelection, values) {\n        var element = node || e.currentTarget;\n        this.isDateSelected = false;\n        if (this.currentView() === 'Decade') {\n            this.setDateDecade(this.currentDate, date.getFullYear());\n        }\n        else if (this.currentView() === 'Year') {\n            this.setDateYear(this.currentDate, date);\n        }\n        else {\n            if (multiSelection && !this.checkPresentDate(date, values)) {\n                var copyValues = this.copyValues(values);\n                if (!isNullOrUndefined(values) && copyValues.length > 0) {\n                    copyValues.push(new Date(this.checkValue(date)));\n                    this.setProperties({ values: copyValues }, true);\n                    this.setProperties({ value: values[values.length - 1] }, true);\n                }\n                else {\n                    this.setProperties({ values: [new Date(this.checkValue(date))] }, true);\n                }\n            }\n            else {\n                this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n            }\n            this.currentDate = new Date(this.checkValue(date));\n        }\n        var tableBodyElement = closest(element, '.' + ROOT);\n        if (isNullOrUndefined(tableBodyElement)) {\n            tableBodyElement = this.tableBodyElement;\n        }\n        if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + SELECTED))) {\n            removeClass([tableBodyElement.querySelector('.' + SELECTED)], SELECTED);\n        }\n        if (!multiSelection && !isNullOrUndefined(tableBodyElement.querySelector('.' + FOCUSEDDATE))) {\n            removeClass([tableBodyElement.querySelector('.' + FOCUSEDDATE)], FOCUSEDDATE);\n        }\n        if (multiSelection) {\n            var copyValues = this.copyValues(values);\n            var collection = Array.prototype.slice.call(this.tableBodyElement.querySelectorAll('td'));\n            for (var index = 0; index < collection.length; index++) {\n                var tempElement = tableBodyElement.querySelectorAll('td' + '.' + FOCUSEDDATE)[0];\n                var selectedElement = tableBodyElement.querySelectorAll('td' + '.' + SELECTED)[0];\n                if (collection[index] === tempElement) {\n                    removeClass([collection[index]], FOCUSEDDATE);\n                }\n                if (collection[index] === selectedElement &&\n                    !this.checkPresentDate(new Date(parseInt(selectedElement.getAttribute('id').split('_')[0], 10)), values)) {\n                    removeClass([collection[index]], SELECTED);\n                }\n            }\n            if (element.classList.contains(SELECTED)) {\n                removeClass([element], SELECTED);\n                for (var i = 0; i < copyValues.length; i++) {\n                    var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n                    var formatOptions = { format: null, type: 'date', skeleton: 'short', calendar: type };\n                    var localDateString = this.globalize.formatDate(date, formatOptions);\n                    var tempDateString = this.globalize.formatDate(copyValues[i], formatOptions);\n                    if (localDateString === tempDateString) {\n                        var index = copyValues.indexOf(copyValues[i]);\n                        copyValues.splice(index, 1);\n                        addClass([element], FOCUSEDDATE);\n                    }\n                }\n                this.setProperties({ values: copyValues }, true);\n            }\n            else {\n                addClass([element], SELECTED);\n            }\n        }\n        else {\n            addClass([element], SELECTED);\n        }\n        this.isDateSelected = true;\n    };\n    CalendarBase.prototype.checkPresentDate = function (dates, values) {\n        var previousValue = false;\n        if (!isNullOrUndefined(values)) {\n            for (var checkPrevious = 0; checkPrevious < values.length; checkPrevious++) {\n                var type = (this.calendarMode === 'Gregorian') ? 'gregorian' : 'islamic';\n                var localDateString = this.globalize.formatDate(dates, {\n                    format: null, type: 'date', skeleton: 'short', calendar: type\n                });\n                var tempDateString = this.globalize.formatDate(values[checkPrevious], {\n                    format: null, type: 'date', skeleton: 'short', calendar: type\n                });\n                if (localDateString === tempDateString) {\n                    previousValue = true;\n                }\n            }\n        }\n        return previousValue;\n    };\n    CalendarBase.prototype.setAriaActiveDescendant = function () {\n        attributes(this.table, {\n            'aria-activedescendant': '' + this.setActiveDescendant()\n        });\n    };\n    CalendarBase.prototype.previousIconHandler = function (disabled) {\n        if (disabled) {\n            if (!isNullOrUndefined(this.previousIcon)) {\n                EventHandler.remove(this.previousIcon, 'click', this.navigatePreviousHandler);\n                addClass([this.previousIcon], '' + DISABLED);\n                addClass([this.previousIcon], '' + OVERLAY);\n                this.previousIcon.setAttribute('aria-disabled', 'true');\n            }\n        }\n        else {\n            EventHandler.add(this.previousIcon, 'click', this.navigatePreviousHandler);\n            removeClass([this.previousIcon], '' + DISABLED);\n            removeClass([this.previousIcon], '' + OVERLAY);\n            this.previousIcon.setAttribute('aria-disabled', 'false');\n        }\n    };\n    CalendarBase.prototype.renderDayCellEvent = function (args) {\n        extend(this.renderDayCellArgs, { name: 'renderDayCell' });\n        this.trigger('renderDayCell', args);\n    };\n    CalendarBase.prototype.navigatedEvent = function (eve) {\n        extend(this.navigatedArgs, { name: 'navigated', event: eve });\n        this.trigger('navigated', this.navigatedArgs);\n    };\n    CalendarBase.prototype.triggerNavigate = function (event) {\n        this.navigatedArgs = { view: this.currentView(), date: this.currentDate };\n        this.navigatedEvent(event);\n    };\n    CalendarBase.prototype.nextIconHandler = function (disabled) {\n        if (disabled) {\n            if (!isNullOrUndefined(this.previousIcon)) {\n                EventHandler.remove(this.nextIcon, 'click', this.navigateNextHandler);\n                addClass([this.nextIcon], DISABLED);\n                addClass([this.nextIcon], OVERLAY);\n                this.nextIcon.setAttribute('aria-disabled', 'true');\n            }\n        }\n        else {\n            EventHandler.add(this.nextIcon, 'click', this.navigateNextHandler);\n            removeClass([this.nextIcon], DISABLED);\n            removeClass([this.nextIcon], OVERLAY);\n            this.nextIcon.setAttribute('aria-disabled', 'false');\n        }\n    };\n    CalendarBase.prototype.compare = function (startDate, endDate, modifier) {\n        var start = endDate.getFullYear();\n        var end;\n        var result;\n        end = start;\n        result = 0;\n        if (modifier) {\n            start = start - start % modifier;\n            end = start - start % modifier + modifier - 1;\n        }\n        if (startDate.getFullYear() > end) {\n            result = 1;\n        }\n        else if (startDate.getFullYear() < start) {\n            result = -1;\n        }\n        return result;\n    };\n    CalendarBase.prototype.isMinMaxRange = function (date) {\n        return +date >= +this.min && +date <= +this.max;\n    };\n    CalendarBase.prototype.isMonthYearRange = function (date) {\n        if (this.calendarMode === 'Gregorian') {\n            return date.getMonth() >= this.min.getMonth()\n                && date.getFullYear() >= this.min.getFullYear()\n                && date.getMonth() <= this.max.getMonth()\n                && date.getFullYear() <= this.max.getFullYear();\n        }\n        else {\n            var islamicDate = this.islamicModule.getIslamicDate(date);\n            return islamicDate.month >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).month\n                && islamicDate.year >= (this.islamicModule.getIslamicDate(new Date(1944, 1, 18))).year\n                && islamicDate.month <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).month\n                && islamicDate.year <= (this.islamicModule.getIslamicDate(new Date(2069, 1, 16))).year;\n        }\n    };\n    CalendarBase.prototype.compareYear = function (start, end) {\n        return this.compare(start, end, 0);\n    };\n    CalendarBase.prototype.compareDecade = function (start, end) {\n        return this.compare(start, end, 10);\n    };\n    CalendarBase.prototype.shiftArray = function (array, i) {\n        return array.slice(i).concat(array.slice(0, i));\n    };\n    CalendarBase.prototype.addDay = function (date, i, e, max, min) {\n        var column = i;\n        var value = new Date(+date);\n        if (!isNullOrUndefined(this.tableBodyElement) && !isNullOrUndefined(e)) {\n            while (this.findNextTD(new Date(+date), column, max, min)) {\n                column += i;\n            }\n            var rangeValue = new Date(value.setDate(value.getDate() + column));\n            column = (+rangeValue > +max || +rangeValue < +min) ? column === i ? i - i : i : column;\n        }\n        date.setDate(date.getDate() + column);\n    };\n    CalendarBase.prototype.findNextTD = function (date, column, max, min) {\n        var value = new Date(date.setDate(date.getDate() + column));\n        var collection = [];\n        var isDisabled = false;\n        if ((!isNullOrUndefined(value) && value.getMonth()) === (!isNullOrUndefined(this.currentDate) && this.currentDate.getMonth())) {\n            var tdEles = void 0;\n            if (this.calendarMode === 'Gregorian') {\n                tdEles = this.renderDays(value);\n            }\n            else {\n                tdEles = this.islamicModule.islamicRenderDays(this.currentDate, value);\n            }\n            collection = tdEles.filter(function (element) {\n                return element.classList.contains(DISABLED);\n            });\n        }\n        else {\n            collection = this.tableBodyElement.querySelectorAll('td.' + DISABLED);\n        }\n        if (+value <= (+(max)) && +value >= (+(min))) {\n            if (collection.length) {\n                for (var i = 0; i < collection.length; i++) {\n                    // eslint-disable-next-line radix\n                    isDisabled = (+value === +new Date(parseInt(collection[i].id, 0))) ? true : false;\n                    if (isDisabled) {\n                        break;\n                    }\n                }\n            }\n        }\n        return isDisabled;\n    };\n    CalendarBase.prototype.getMaxDays = function (d) {\n        var date;\n        var tmpDate = new Date(this.checkValue(d));\n        date = 28;\n        var month = tmpDate.getMonth();\n        while (tmpDate.getMonth() === month) {\n            ++date;\n            tmpDate.setDate(date);\n        }\n        return date - 1;\n    };\n    CalendarBase.prototype.setDateDecade = function (date, year) {\n        date.setFullYear(year);\n        this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n    };\n    CalendarBase.prototype.setDateYear = function (date, value) {\n        date.setFullYear(value.getFullYear(), value.getMonth(), date.getDate());\n        if (value.getMonth() !== date.getMonth()) {\n            date.setDate(0);\n            this.currentDate = new Date(this.checkValue(value));\n        }\n        this.setProperties({ value: new Date(this.checkValue(date)) }, true);\n    };\n    CalendarBase.prototype.compareMonth = function (start, end) {\n        var result;\n        if (start.getFullYear() > end.getFullYear()) {\n            result = 1;\n        }\n        else if (start.getFullYear() < end.getFullYear()) {\n            result = -1;\n        }\n        else {\n            result = start.getMonth() === end.getMonth() ? 0 : start.getMonth() > end.getMonth() ? 1 : -1;\n        }\n        return result;\n    };\n    CalendarBase.prototype.checkValue = function (inValue) {\n        if (inValue instanceof Date) {\n            return (inValue.toUTCString());\n        }\n        else {\n            return ('' + inValue);\n        }\n    };\n    CalendarBase.prototype.checkView = function () {\n        if (this.start !== 'Decade' && this.start !== 'Year') {\n            this.setProperties({ start: 'Month' }, true);\n        }\n        if (this.depth !== 'Decade' && this.depth !== 'Year') {\n            this.setProperties({ depth: 'Month' }, true);\n        }\n        if (this.getViewNumber(this.depth) > this.getViewNumber(this.start)) {\n            this.setProperties({ depth: 'Month' }, true);\n        }\n    };\n    CalendarBase.prototype.getDate = function (date, timezone) {\n        if (timezone) {\n            date = new Date(date.toLocaleString('en-US', { timeZone: timezone }));\n        }\n        return date;\n    };\n    __decorate([\n        Property(new Date(1900, 0, 1))\n    ], CalendarBase.prototype, \"min\", void 0);\n    __decorate([\n        Property(true)\n    ], CalendarBase.prototype, \"enabled\", void 0);\n    __decorate([\n        Property(null)\n    ], CalendarBase.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(new Date(2099, 11, 31))\n    ], CalendarBase.prototype, \"max\", void 0);\n    __decorate([\n        Property(null)\n    ], CalendarBase.prototype, \"firstDayOfWeek\", void 0);\n    __decorate([\n        Property('Gregorian')\n    ], CalendarBase.prototype, \"calendarMode\", void 0);\n    __decorate([\n        Property('Month')\n    ], CalendarBase.prototype, \"start\", void 0);\n    __decorate([\n        Property('Month')\n    ], CalendarBase.prototype, \"depth\", void 0);\n    __decorate([\n        Property(false)\n    ], CalendarBase.prototype, \"weekNumber\", void 0);\n    __decorate([\n        Property('FirstDay')\n    ], CalendarBase.prototype, \"weekRule\", void 0);\n    __decorate([\n        Property(true)\n    ], CalendarBase.prototype, \"showTodayButton\", void 0);\n    __decorate([\n        Property('Short')\n    ], CalendarBase.prototype, \"dayHeaderFormat\", void 0);\n    __decorate([\n        Property(false)\n    ], CalendarBase.prototype, \"enablePersistence\", void 0);\n    __decorate([\n        Property(null)\n    ], CalendarBase.prototype, \"keyConfigs\", void 0);\n    __decorate([\n        Property(null)\n    ], CalendarBase.prototype, \"serverTimezoneOffset\", void 0);\n    __decorate([\n        Event()\n    ], CalendarBase.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], CalendarBase.prototype, \"destroyed\", void 0);\n    __decorate([\n        Event()\n    ], CalendarBase.prototype, \"navigated\", void 0);\n    __decorate([\n        Event()\n    ], CalendarBase.prototype, \"renderDayCell\", void 0);\n    CalendarBase = __decorate([\n        NotifyPropertyChanges\n    ], CalendarBase);\n    return CalendarBase;\n}(Component));\nexport { CalendarBase };\n/**\n * Represents the Calendar component that allows the user to select a date.\n * ```html\n * <div id=\"calendar\"/>\n * ```\n * ```typescript\n * <script>\n *   var calendarObj = new Calendar({ value: new Date() });\n *   calendarObj.appendTo(\"#calendar\");\n * </script>\n * ```\n */\nvar Calendar = /** @class */ (function (_super) {\n    __extends(Calendar, _super);\n    /**\n     * Initialized new instance of Calendar Class.\n     * Constructor for creating the widget\n     *\n     * @param {CalendarModel} options - Specifies the Calendar model.\n     * @param {string | HTMLElement} element - Specifies the element to render as component.\n     * @private\n     */\n    function Calendar(options, element) {\n        return _super.call(this, options, element) || this;\n    }\n    /**\n     * To Initialize the control rendering.\n     *\n     * @returns {void}\n     * @private\n     */\n    Calendar.prototype.render = function () {\n        if (this.calendarMode === 'Islamic' && this.islamicModule === undefined) {\n            throwError('Requires the injectable Islamic modules to render Calendar in Islamic mode');\n        }\n        if (this.isMultiSelection && typeof this.values === 'object' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n            var tempValues = [];\n            var copyValues = [];\n            for (var limit = 0; limit < this.values.length; limit++) {\n                if (tempValues.indexOf(+this.values[limit]) === -1) {\n                    tempValues.push(+this.values[limit]);\n                    copyValues.push(this.values[limit]);\n                }\n            }\n            this.setProperties({ values: copyValues }, true);\n            for (var index = 0; index < this.values.length; index++) {\n                if (!this.checkDateValue(this.values[index])) {\n                    if (typeof (this.values[index]) === 'string' && this.checkDateValue(new Date(this.checkValue(this.values[index])))) {\n                        var copyDate = new Date(this.checkValue(this.values[index]));\n                        this.values.splice(index, 1);\n                        this.values.splice(index, 0, copyDate);\n                    }\n                    else {\n                        this.values.splice(index, 1);\n                    }\n                }\n            }\n            this.setProperties({ value: this.values[this.values.length - 1] }, true);\n            this.previousValues = this.values.length;\n        }\n        this.validateDate();\n        this.minMaxUpdate();\n        if (this.getModuleName() === 'calendar') {\n            this.setEnable(this.enabled);\n            this.setClass(this.cssClass);\n        }\n        _super.prototype.render.call(this);\n        if (this.getModuleName() === 'calendar') {\n            var form = closest(this.element, 'form');\n            if (form) {\n                EventHandler.add(form, 'reset', this.formResetHandler.bind(this));\n            }\n            this.setTimeZone(this.serverTimezoneOffset);\n        }\n        this.renderComplete();\n    };\n    Calendar.prototype.setEnable = function (enable) {\n        if (!enable) {\n            addClass([this.element], DISABLED);\n        }\n        else {\n            removeClass([this.element], DISABLED);\n        }\n    };\n    Calendar.prototype.setClass = function (newCssClass, oldCssClass) {\n        if (!isNullOrUndefined(oldCssClass)) {\n            oldCssClass = (oldCssClass.replace(/\\s+/g, ' ')).trim();\n        }\n        if (!isNullOrUndefined(newCssClass)) {\n            newCssClass = (newCssClass.replace(/\\s+/g, ' ')).trim();\n        }\n        if (!isNullOrUndefined(oldCssClass) && oldCssClass !== '') {\n            removeClass([this.element], oldCssClass.split(' '));\n        }\n        if (!isNullOrUndefined(newCssClass)) {\n            addClass([this.element], newCssClass.split(' '));\n        }\n    };\n    Calendar.prototype.isDayLightSaving = function () {\n        var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n        var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n        return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n    };\n    Calendar.prototype.setTimeZone = function (offsetValue) {\n        if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n            var serverTimezoneDiff = offsetValue;\n            var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n            var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n            timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n            this.value = new Date(this.value.getTime() + (timeZoneDiff * 60 * 60 * 1000));\n        }\n    };\n    Calendar.prototype.formResetHandler = function () {\n        this.setProperties({ value: null }, true);\n    };\n    Calendar.prototype.validateDate = function () {\n        if (typeof this.value === 'string') {\n            this.setProperties({ value: this.checkDateValue(new Date(this.checkValue(this.value))) }, true); // persist the value property.\n        }\n        _super.prototype.validateDate.call(this, this.value);\n        if (!isNullOrUndefined(this.value) && this.min <= this.max && this.value >= this.min && this.value <= this.max) {\n            this.currentDate = new Date(this.checkValue(this.value));\n        }\n        if (isNaN(+this.value)) {\n            this.setProperties({ value: null }, true);\n        }\n    };\n    Calendar.prototype.minMaxUpdate = function () {\n        if (this.getModuleName() === 'calendar') {\n            if (!isNullOrUndefined(this.value) && this.value <= this.min && this.min <= this.max) {\n                this.setProperties({ value: this.min }, true);\n                this.changedArgs = { value: this.value };\n            }\n            else {\n                if (!isNullOrUndefined(this.value) && this.value >= this.max && this.min <= this.max) {\n                    this.setProperties({ value: this.max }, true);\n                    this.changedArgs = { value: this.value };\n                }\n            }\n        }\n        if (this.getModuleName() !== 'calendar' && !isNullOrUndefined(this.value)) {\n            if (!isNullOrUndefined(this.value) && this.value < this.min && this.min <= this.max) {\n                _super.prototype.minMaxUpdate.call(this, this.min);\n            }\n            else {\n                if (!isNullOrUndefined(this.value) && this.value > this.max && this.min <= this.max) {\n                    _super.prototype.minMaxUpdate.call(this, this.max);\n                }\n            }\n        }\n        else {\n            _super.prototype.minMaxUpdate.call(this, this.value);\n        }\n    };\n    Calendar.prototype.generateTodayVal = function (value) {\n        var tempValue = new Date();\n        if (!isNullOrUndefined(this.timezone)) {\n            tempValue = _super.prototype.getDate.call(this, tempValue, this.timezone);\n        }\n        if (value && isNullOrUndefined(this.timezone)) {\n            tempValue.setHours(value.getHours());\n            tempValue.setMinutes(value.getMinutes());\n            tempValue.setSeconds(value.getSeconds());\n            tempValue.setMilliseconds(value.getMilliseconds());\n        }\n        else {\n            tempValue = new Date(tempValue.getFullYear(), tempValue.getMonth(), tempValue.getDate(), 0, 0, 0, 0);\n        }\n        return tempValue;\n    };\n    Calendar.prototype.todayButtonClick = function (e) {\n        if (this.showTodayButton) {\n            var tempValue = this.generateTodayVal(this.value);\n            this.setProperties({ value: tempValue }, true);\n            this.isTodayClicked = true;\n            this.todayButtonEvent = e;\n            if (this.isMultiSelection) {\n                var copyValues = this.copyValues(this.values);\n                if (!_super.prototype.checkPresentDate.call(this, tempValue, this.values)) {\n                    copyValues.push(tempValue);\n                    this.setProperties({ values: copyValues });\n                }\n            }\n            _super.prototype.todayButtonClick.call(this, e, new Date(+this.value));\n        }\n    };\n    Calendar.prototype.keyActionHandle = function (e) {\n        _super.prototype.keyActionHandle.call(this, e, this.value, this.isMultiSelection);\n    };\n    /**\n     * Initialize the event handler\n     *\n     * @returns {void}\n     * @private\n     */\n    Calendar.prototype.preRender = function () {\n        var _this = this;\n        this.changeHandler = function (e) {\n            _this.triggerChange(e);\n        };\n        this.checkView();\n        _super.prototype.preRender.call(this, this.value);\n    };\n    /**\n     * @returns {void}\n\n     */\n    Calendar.prototype.createContent = function () {\n        this.previousDate = this.value;\n        this.previousDateTime = this.value;\n        _super.prototype.createContent.call(this);\n    };\n    Calendar.prototype.minMaxDate = function (localDate) {\n        return _super.prototype.minMaxDate.call(this, localDate);\n    };\n    Calendar.prototype.renderMonths = function (e, value, isCustomDate) {\n        _super.prototype.renderMonths.call(this, e, this.value, isCustomDate);\n    };\n    Calendar.prototype.renderDays = function (currentDate, value, isMultiSelect, values, isCustomDate, e) {\n        var tempDays = _super.prototype.renderDays.call(this, currentDate, this.value, this.isMultiSelection, this.values, isCustomDate, e);\n        if (this.isMultiSelection) {\n            _super.prototype.validateValues.call(this, this.isMultiSelection, this.values);\n        }\n        return tempDays;\n    };\n    Calendar.prototype.renderYears = function (e) {\n        if (this.calendarMode === 'Gregorian') {\n            _super.prototype.renderYears.call(this, e, this.value);\n        }\n        else {\n            this.islamicModule.islamicRenderYears(e, this.value);\n        }\n    };\n    Calendar.prototype.renderDecades = function (e) {\n        if (this.calendarMode === 'Gregorian') {\n            _super.prototype.renderDecades.call(this, e, this.value);\n        }\n        else {\n            this.islamicModule.islamicRenderDecade(e, this.value);\n        }\n    };\n    Calendar.prototype.renderTemplate = function (elements, count, classNm, e) {\n        if (this.calendarMode === 'Gregorian') {\n            _super.prototype.renderTemplate.call(this, elements, count, classNm, e, this.value);\n        }\n        else {\n            this.islamicModule.islamicRenderTemplate(elements, count, classNm, e, this.value);\n        }\n        this.changedArgs = { value: this.value, values: this.values };\n        e && e.type === 'click' && e.currentTarget.classList.contains(OTHERMONTH) ? this.changeHandler(e) : this.changeHandler();\n    };\n    Calendar.prototype.clickHandler = function (e) {\n        var eve = e.currentTarget;\n        this.isPopupClicked = true;\n        if (eve.classList.contains(OTHERMONTH)) {\n            if (this.isMultiSelection) {\n                var copyValues = this.copyValues(this.values);\n                if (copyValues.toString().indexOf(this.getIdValue(e, null).toString()) === -1) {\n                    copyValues.push(this.getIdValue(e, null));\n                    this.setProperties({ values: copyValues }, true);\n                    this.setProperties({ value: this.values[this.values.length - 1] }, true);\n                }\n                else {\n                    this.previousDates = true;\n                }\n            }\n            else {\n                this.setProperties({ value: this.getIdValue(e, null) }, true);\n            }\n        }\n        var storeView = this.currentView();\n        _super.prototype.clickHandler.call(this, e, this.value);\n        if (this.isMultiSelection && this.currentDate !== this.value &&\n            !isNullOrUndefined(this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0]) && storeView === 'Year') {\n            this.tableBodyElement.querySelectorAll('.' + FOCUSEDDATE)[0].classList.remove(FOCUSEDDATE);\n        }\n    };\n    Calendar.prototype.switchView = function (view, e, isMultiSelection, isCustomDate) {\n        _super.prototype.switchView.call(this, view, e, this.isMultiSelection, isCustomDate);\n    };\n    /**\n     * To get component name\n     *\n     * @returns {string} Return the component name.\n     * @private\n     */\n    Calendar.prototype.getModuleName = function () {\n        _super.prototype.getModuleName.call(this);\n        return 'calendar';\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Gets the properties to be maintained upon browser refresh.\n     *\n     * @returns {string}\n     */\n    Calendar.prototype.getPersistData = function () {\n        _super.prototype.getPersistData.call(this);\n        var keyEntity = ['value', 'values'];\n        return this.addOnPersist(keyEntity);\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Called internally if any of the property value changed.\n     *\n     * @param {CalendarModel} newProp - Returns the dynamic property value of the component.\n     * @param {CalendarModel} oldProp - Returns the previous property value of the component.\n     * @returns {void}\n     * @private\n     */\n    Calendar.prototype.onPropertyChanged = function (newProp, oldProp) {\n        this.effect = '';\n        this.rangeValidation(this.min, this.max);\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'value':\n                    if (this.isDateSelected) {\n                        if (typeof newProp.value === 'string') {\n                            this.setProperties({ value: new Date(this.checkValue(newProp.value)) }, true);\n                        }\n                        else {\n                            newProp.value = new Date(this.checkValue(newProp.value));\n                        }\n                        if (isNaN(+this.value)) {\n                            this.setProperties({ value: oldProp.value }, true);\n                        }\n                        this.update();\n                    }\n                    break;\n                case 'values':\n                    if (this.isDateSelected) {\n                        if (typeof newProp.values === 'string' || typeof newProp.values === 'number') {\n                            this.setProperties({ values: null }, true);\n                        }\n                        else {\n                            var copyValues = this.copyValues(this.values);\n                            for (var index = 0; index < copyValues.length; index++) {\n                                var tempDate = copyValues[index];\n                                if (this.checkDateValue(tempDate) && !_super.prototype.checkPresentDate.call(this, tempDate, copyValues)) {\n                                    copyValues.push(tempDate);\n                                }\n                            }\n                            this.setProperties({ values: copyValues }, true);\n                            if (this.values.length > 0) {\n                                this.setProperties({ value: newProp.values[newProp.values.length - 1] }, true);\n                            }\n                        }\n                        this.validateValues(this.isMultiSelection, this.values);\n                        this.update();\n                    }\n                    break;\n                case 'isMultiSelection':\n                    if (this.isDateSelected) {\n                        this.setProperties({ isMultiSelection: newProp.isMultiSelection }, true);\n                        this.update();\n                    }\n                    break;\n                case 'enabled':\n                    this.setEnable(this.enabled);\n                    break;\n                case 'cssClass':\n                    if (this.getModuleName() === 'calendar') {\n                        this.setClass(newProp.cssClass, oldProp.cssClass);\n                    }\n                    break;\n                default:\n                    _super.prototype.onPropertyChanged.call(this, newProp, oldProp, this.isMultiSelection, this.values);\n            }\n        }\n        this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n    };\n    /**\n     * Destroys the widget.\n     *\n     * @returns {void}\n     */\n    Calendar.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        if (this.getModuleName() === 'calendar') {\n            this.changedArgs = null;\n            var form = closest(this.element, 'form');\n            if (form) {\n                EventHandler.remove(form, 'reset', this.formResetHandler.bind(this));\n            }\n        }\n    };\n    /**\n     * This method is used to navigate to the month/year/decade view of the Calendar.\n     *\n     * @param {string} view - Specifies the view of the Calendar.\n     * @param {Date} date - Specifies the focused date in a view.\n     * @param {boolean} isCustomDate - Specifies whether the calendar is rendered with custom today date or not.\n     * @returns {void}\n\n     */\n    Calendar.prototype.navigateTo = function (view, date, isCustomDate) {\n        this.minMaxUpdate();\n        _super.prototype.navigateTo.call(this, view, date, isCustomDate);\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Gets the current view of the Calendar.\n     *\n     * @returns {string}\n\n     */\n    Calendar.prototype.currentView = function () {\n        return _super.prototype.currentView.call(this);\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * This method is used to add the single or multiple dates to the values property of the Calendar.\n     *\n     * @param {Date | Date[]} dates - Specifies the date or dates to be added to the values property of the Calendar.\n     * @returns {void}\n\n     */\n    Calendar.prototype.addDate = function (dates) {\n        if (typeof dates !== 'string' && typeof dates !== 'number') {\n            var copyValues = this.copyValues(this.values);\n            if (typeof dates === 'object' && (dates).length > 0) {\n                var tempDates = dates;\n                for (var i = 0; i < tempDates.length; i++) {\n                    if (this.checkDateValue(tempDates[i]) && !_super.prototype.checkPresentDate.call(this, tempDates[i], copyValues)) {\n                        if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n                            copyValues.push(tempDates[i]);\n                        }\n                        else {\n                            copyValues = [new Date(+tempDates[i])];\n                        }\n                    }\n                }\n            }\n            else {\n                if (this.checkDateValue(dates) && !_super.prototype.checkPresentDate.call(this, dates, copyValues)) {\n                    if (!isNullOrUndefined(copyValues) && copyValues.length > 0) {\n                        copyValues.push((dates));\n                    }\n                    else {\n                        copyValues = [new Date(+dates)];\n                    }\n                }\n            }\n            this.setProperties({ values: copyValues }, true);\n            if (this.isMultiSelection) {\n                this.setProperties({ value: this.values[this.values.length - 1] }, true);\n            }\n            this.validateValues(this.isMultiSelection, copyValues);\n            this.update();\n            this.changedArgs = { value: this.value, values: this.values };\n            this.changeHandler();\n        }\n    };\n    /**\n     * This method is used to remove the single or multiple dates from the values property of the Calendar.\n     *\n     * @param {Date | Date[]} dates - Specifies the date or dates which need to be removed from the values property of the Calendar.\n     * @returns {void}\n\n     */\n    Calendar.prototype.removeDate = function (dates) {\n        if (typeof dates !== 'string' && typeof dates !== 'number' && !isNullOrUndefined(this.values) && this.values.length > 0) {\n            var copyValues = this.copyValues(this.values);\n            if (typeof dates === 'object' && ((dates).length > 0)) {\n                var tempDates = dates;\n                for (var index = 0; index < tempDates.length; index++) {\n                    for (var i = 0; i < copyValues.length; i++) {\n                        if (+copyValues[i] === +tempDates[index]) {\n                            copyValues.splice(i, 1);\n                        }\n                    }\n                }\n            }\n            else {\n                for (var i = 0; i < copyValues.length; i++) {\n                    if (+copyValues[i] === +dates) {\n                        copyValues.splice(i, 1);\n                    }\n                }\n            }\n            this.setProperties({ values: copyValues }, false);\n            this.update();\n            if (this.isMultiSelection) {\n                this.setProperties({ value: this.values[this.values.length - 1] }, true);\n            }\n            this.changedArgs = { value: this.value, values: this.values };\n            this.changeHandler();\n        }\n    };\n    /**\n     * To set custom today date in calendar\n     *\n     * @param {Date} date - Specifies date value to be set.\n     * @private\n     * @returns {void}\n     */\n    Calendar.prototype.setTodayDate = function (date) {\n        var todayDate = new Date(+date);\n        this.setProperties({ value: todayDate }, true);\n        _super.prototype.todayButtonClick.call(this, null, todayDate, true);\n    };\n    Calendar.prototype.update = function () {\n        this.validateDate();\n        this.minMaxUpdate();\n        _super.prototype.setValueUpdate.call(this);\n    };\n    Calendar.prototype.selectDate = function (e, date, element) {\n        _super.prototype.selectDate.call(this, e, date, element, this.isMultiSelection, this.values);\n        if (this.isMultiSelection && !isNullOrUndefined(this.values) && this.values.length > 0) {\n            this.setProperties({ value: this.values[this.values.length - 1] }, true);\n        }\n        this.changedArgs = { value: this.value, values: this.values };\n        this.changeHandler(e);\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    Calendar.prototype.changeEvent = function (e) {\n        if ((this.value && this.value.valueOf()) !== (this.previousDate && +this.previousDate.valueOf())\n            || this.isMultiSelection) {\n            if (this.isAngular && this.preventChange) {\n                this.preventChange = false;\n            }\n            else {\n                this.trigger('change', this.changedArgs);\n            }\n            this.previousDate = new Date(+this.value);\n        }\n    };\n    Calendar.prototype.triggerChange = function (e) {\n        if (!isNullOrUndefined(this.todayButtonEvent) && this.isTodayClicked) {\n            e = this.todayButtonEvent;\n            this.isTodayClicked = false;\n        }\n        this.changedArgs.event = e || null;\n        this.changedArgs.isInteracted = !isNullOrUndefined(e);\n        if (!isNullOrUndefined(this.value)) {\n            this.setProperties({ value: this.value }, true);\n        }\n        // eslint-disable-next-line use-isnan\n        if (!this.isMultiSelection && +this.value !== Number.NaN && (!isNullOrUndefined(this.value) &&\n            !isNullOrUndefined(this.previousDate) || this.previousDate === null\n            && !isNaN(+this.value))) {\n            this.changeEvent(e);\n        }\n        else if (!isNullOrUndefined(this.values) && this.previousValues !== this.values.length) {\n            this.changeEvent(e);\n            this.previousValues = this.values.length;\n        }\n    };\n    __decorate([\n        Property(null)\n    ], Calendar.prototype, \"value\", void 0);\n    __decorate([\n        Property(null)\n    ], Calendar.prototype, \"values\", void 0);\n    __decorate([\n        Property(false)\n    ], Calendar.prototype, \"isMultiSelection\", void 0);\n    __decorate([\n        Event()\n    ], Calendar.prototype, \"change\", void 0);\n    Calendar = __decorate([\n        NotifyPropertyChanges\n    ], Calendar);\n    return Calendar;\n}(CalendarBase));\nexport { Calendar };\n","import { createElement, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { subtractThickness, valueToCoefficient, sum, redrawElement, isBreakLabel, ChartLocation, withInBounds, rotateTextSize } from '../../common/utils/helper';\nimport { subArray, inside, appendChildElement, stringToNumber } from '../../common/utils/helper';\nimport { Thickness, logBase, createZoomingLabels, getElement } from '../../common/utils/helper';\nimport { Size, Rect, measureText, TextOption, PathOption } from '@syncfusion/ej2-svg-base';\nimport { textElement, textTrim, getRotatedRectangleCoordinates, isRotatedRectIntersect, isZoomSet } from '../../common/utils/helper';\n/**\n * Specifies the Cartesian Axis Layout.\n */\nvar axisPadding = 10;\nvar CartesianAxisLayoutPanel = /** @class */ (function () {\n    /** @private */\n    function CartesianAxisLayoutPanel(chartModule) {\n        this.chart = chartModule;\n        this.padding = 5;\n    }\n    /**\n     * Measure the axis size.\n     *\n     * @returns {void}\n     * @private\n     */\n    CartesianAxisLayoutPanel.prototype.measureAxis = function (rect) {\n        var chart = this.chart;\n        var chartAreaWidth = chart.chartArea.width ? stringToNumber(chart.chartArea.width, chart.availableSize.width) : null;\n        this.crossAt(chart);\n        this.seriesClipRect = new Rect(rect.x, rect.y, rect.width, rect.height);\n        this.initialClipRect = rect;\n        this.leftSize = 0;\n        this.rightSize = 0;\n        this.topSize = 0;\n        this.bottomSize = 0;\n        //Measure Axis size with initial Rect\n        this.measureRowAxis(chart, this.initialClipRect);\n        this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n        this.measureColumnAxis(chart, this.initialClipRect);\n        this.initialClipRect = subtractThickness(this.initialClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n        if (!this.chart.delayRedraw) {\n            this.calculateAxisSize(this.initialClipRect);\n        }\n        this.leftSize = 0;\n        this.rightSize = 0;\n        this.topSize = 0;\n        this.bottomSize = 0;\n        //Measure Axis size with series Rect\n        this.measureRowAxis(chart, this.initialClipRect);\n        this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(this.leftSize, this.rightSize, 0, 0));\n        this.measureColumnAxis(chart, this.initialClipRect);\n        this.seriesClipRect = subtractThickness(this.seriesClipRect, new Thickness(0, 0, this.topSize, this.bottomSize));\n        if (chartAreaWidth) {\n            this.calculateFixedChartArea(chart, chartAreaWidth);\n        }\n        if (!this.chart.delayRedraw) {\n            chart.refreshAxis();\n            this.calculateAxisSize(this.seriesClipRect);\n        }\n    };\n    CartesianAxisLayoutPanel.prototype.calculateFixedChartArea = function (chart, chartAreaWidth) {\n        this.seriesClipRect.width = chartAreaWidth;\n        this.seriesClipRect.x = chart.availableSize.width - chart.margin.right - chartAreaWidth -\n            (chart.legendSettings.position === 'Right' ? chart.legendModule.legendBounds.width : 0);\n        for (var _i = 0, _a = chart.rows; _i < _a.length; _i++) {\n            var item = _a[_i];\n            this.seriesClipRect.x -= sum(item.farSizes);\n        }\n    };\n    CartesianAxisLayoutPanel.prototype.measureRowAxis = function (chart, rect) {\n        var row;\n        this.calculateRowSize(rect);\n        for (var _i = 0, _a = chart.rows; _i < _a.length; _i++) {\n            var item = _a[_i];\n            row = item;\n            row.nearSizes = [];\n            row.farSizes = [];\n            row.insideNearSizes = [];\n            row.insideFarSizes = [];\n            this.arrangeAxis(row);\n            this.measureDefinition(row, chart, new Size(chart.availableSize.width, row.computedHeight));\n            if (this.leftSize < sum(row.nearSizes)) {\n                this.leftSize = sum(row.nearSizes);\n            }\n            if (this.rightSize < sum(row.farSizes)) {\n                this.rightSize = sum(row.farSizes);\n            }\n        }\n    };\n    CartesianAxisLayoutPanel.prototype.measureColumnAxis = function (chart, rect) {\n        var column;\n        this.calculateColumnSize(rect);\n        for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n            var item = _a[_i];\n            column = item;\n            column.farSizes = [];\n            column.nearSizes = [];\n            column.insideNearSizes = [];\n            column.insideFarSizes = [];\n            this.arrangeAxis(column);\n            this.measureDefinition(column, chart, new Size(column.computedWidth, chart.availableSize.height));\n            if (this.bottomSize < sum(column.nearSizes)) {\n                this.bottomSize = sum(column.nearSizes);\n            }\n            if (this.topSize < sum(column.farSizes)) {\n                this.topSize = sum(column.farSizes);\n            }\n        }\n    };\n    /**\n     * Measure the column and row in chart.\n     *\n     * @returns {void}\n     * @private\n     */\n    CartesianAxisLayoutPanel.prototype.measureDefinition = function (definition, chart, size) {\n        var ele;\n        for (var _i = 0, _a = definition.axes; _i < _a.length; _i++) {\n            var axis = _a[_i];\n            ele = axis.scrollbarSettings.height;\n            axis.scrollBarHeight = chart.scrollBarModule && chart.zoomModule && chart.zoomSettings.enableScrollbar &&\n                axis.enableScrollbarOnZooming && chart.zoomModule.isZoomed && (axis.zoomFactor < 1 || axis.zoomPosition > 0) ? ele : 0;\n            axis.scrollBarHeight = chart.scrollBarModule && (chart.zoomModule && chart.zoomSettings.enableScrollbar &&\n                axis.enableScrollbarOnZooming && chart.zoomModule.isZoomed && (axis.zoomFactor < 1 || axis.zoomPosition > 0)\n                || axis.scrollbarSettings.enable) ? ele : 0;\n            axis.getModule(chart);\n            axis.baseModule.calculateRangeAndInterval(size, axis);\n            definition.computeSize(axis, axis.scrollBarHeight, definition, chart);\n        }\n        if (definition.farSizes.length > 0) {\n            definition.farSizes[definition.farSizes.length - 1] -= axisPadding;\n        }\n        if (definition.nearSizes.length > 0) {\n            definition.nearSizes[definition.nearSizes.length - 1] -= axisPadding;\n        }\n    };\n    /**\n     * Measure the axis.\n     *\n     * @returns {void}\n     * @private\n     */\n    CartesianAxisLayoutPanel.prototype.calculateAxisSize = function (rect) {\n        var chart = this.chart;\n        var row;\n        var column;\n        var definition;\n        var axis;\n        var nearCount = 0;\n        var farCount = 0;\n        var size = 0;\n        var x;\n        var y;\n        var axisOffset;\n        this.calculateRowSize(rect);\n        for (var i = 0, len = chart.rows.length; i < len; i++) {\n            row = chart.rows[i];\n            nearCount = 0;\n            farCount = 0;\n            for (var j = 0, len_1 = row.axes.length; j < len_1; j++) {\n                axis = row.axes[j];\n                axisOffset = axis.plotOffset;\n                if (axis.rect.height === 0) {\n                    axis.rect.height = row.computedHeight;\n                    size = 0;\n                    for (var k = i + 1, len_2 = i + axis.span; k < len_2; k++) {\n                        definition = chart.rows[k];\n                        size += definition.computedHeight;\n                    }\n                    axis.rect.y = (row.computedTop - size) + (axis.plotOffsetTop ? axis.plotOffsetTop : axisOffset);\n                    axis.rect.height = (axis.rect.height + size) -\n                        (this.getAxisOffsetValue(axis.plotOffsetTop, axis.plotOffsetBottom, axis.plotOffset));\n                    axis.rect.width = 0;\n                }\n                if (axis.isAxisOpposedPosition) {\n                    if (axis.labelPosition === 'Inside' && axis.orientation === 'Vertical') {\n                        x = rect.x + rect.width - sum(subArray(row.insideFarSizes, farCount));\n                    }\n                    else {\n                        x = rect.x + rect.width + sum(subArray(row.farSizes, farCount));\n                    }\n                    axis.rect.x = axis.rect.x >= x ? axis.rect.x : x;\n                    farCount++;\n                }\n                else {\n                    if (axis.labelPosition === 'Inside' && axis.orientation === 'Vertical') {\n                        x = rect.x + sum(subArray(row.insideNearSizes, nearCount));\n                    }\n                    else {\n                        x = rect.x - sum(subArray(row.nearSizes, nearCount));\n                    }\n                    axis.rect.x = axis.rect.x <= x ? axis.rect.x : x;\n                    nearCount++;\n                }\n            }\n        }\n        this.calculateColumnSize(rect);\n        for (var i = 0, len = chart.columns.length; i < len; i++) {\n            column = chart.columns[i];\n            nearCount = 0;\n            farCount = 0;\n            for (var j = 0, len_3 = column.axes.length; j < len_3; j++) {\n                axis = column.axes[j];\n                axisOffset = axis.plotOffset;\n                if (axis.rect.width === 0) {\n                    for (var k = i, len_4 = (i + axis.span); k < len_4; k++) {\n                        definition = chart.columns[k];\n                        axis.rect.width += definition.computedWidth;\n                    }\n                    axis.rect.x = column.computedLeft + (axis.plotOffsetLeft ? axis.plotOffsetLeft : axisOffset);\n                    axis.rect.width -= (this.getAxisOffsetValue(axis.plotOffsetLeft, axis.plotOffsetRight, axis.plotOffset));\n                    axis.rect.height = 0;\n                }\n                if (axis.isAxisOpposedPosition) {\n                    if (axis.labelPosition === 'Inside' && axis.orientation === 'Horizontal') {\n                        y = rect.y + sum(subArray(column.insideFarSizes, farCount));\n                    }\n                    else {\n                        y = rect.y - sum(subArray(column.farSizes, farCount));\n                    }\n                    axis.rect.y = axis.rect.y <= y ? axis.rect.y : y;\n                    farCount++;\n                }\n                else {\n                    if (axis.labelPosition === 'Inside' && axis.orientation === 'Horizontal') {\n                        y = rect.y + rect.height - sum(subArray(column.insideNearSizes, nearCount));\n                    }\n                    else {\n                        y = rect.y + rect.height + sum(subArray(column.nearSizes, nearCount));\n                    }\n                    axis.rect.y = axis.rect.y >= y ? axis.rect.y : y;\n                    nearCount++;\n                }\n            }\n        }\n    };\n    /**\n     * Measure the axis.\n     *\n     * @returns {void}\n     * @private\n     */\n    CartesianAxisLayoutPanel.prototype.measure = function () {\n        var chart = this.chart;\n        var row;\n        var column;\n        var definition;\n        var actualIndex;\n        var span;\n        for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n            var axis = _a[_i];\n            //definition.Axes = axis;\n            if (axis.orientation === 'Vertical') {\n                chart.verticalAxes.push(axis);\n                actualIndex = this.getActualRow(axis);\n                row = chart.rows[actualIndex];\n                this.pushAxis(row, axis);\n                span = ((actualIndex + axis.span) > chart.rows.length ? chart.rows.length : (actualIndex + axis.span));\n                for (var j = actualIndex + 1; j < span; j++) {\n                    definition = chart.rows[j];\n                    definition.axes[row.axes.length - 1] = axis;\n                    chart.rows[j] = definition;\n                }\n                chart.rows[actualIndex] = row;\n            }\n            else {\n                chart.horizontalAxes.push(axis);\n                actualIndex = this.getActualColumn(axis);\n                column = chart.columns[actualIndex];\n                this.pushAxis(column, axis);\n                span = ((actualIndex + axis.span) > chart.columns.length ? chart.columns.length : (actualIndex + axis.span));\n                for (var j = actualIndex + 1; j < span; j++) {\n                    definition = chart.columns[j];\n                    definition.axes[column.axes.length - 1] = axis;\n                    chart.columns[j] = definition;\n                }\n                chart.columns[actualIndex] = column;\n            }\n            axis.isRTLEnabled = chart.enableRtl;\n            axis.setIsInversedAndOpposedPosition();\n        }\n    };\n    CartesianAxisLayoutPanel.prototype.getAxisOffsetValue = function (position1, position2, plotOffset) {\n        var rangeOffset = position1 ? (position1 + (position2 ? position2 :\n            plotOffset)) : (position2 ? position2 + plotOffset : 2 * plotOffset);\n        return rangeOffset;\n    };\n    CartesianAxisLayoutPanel.prototype.crossAt = function (chart) {\n        for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n            var axis = _a[_i];\n            if (axis.crossesAt === null) {\n                continue;\n            }\n            if (!axis.crossesInAxis) {\n                if (chart.requireInvertedAxis) {\n                    axis.crossInAxis = ((axis.orientation === 'Horizontal')) ? chart.primaryXAxis : chart.primaryYAxis;\n                }\n                else {\n                    axis.crossInAxis = ((axis.orientation === 'Horizontal')) ? chart.primaryYAxis : chart.primaryXAxis;\n                }\n                axis.crossAt = this.updateCrossAt(axis.crossInAxis, axis.crossesAt);\n                continue;\n            }\n            else {\n                for (var i = 2, len = chart.axisCollections.length; i < len; i++) {\n                    if (axis.crossesInAxis === chart.axisCollections[i].name) {\n                        axis.crossInAxis = chart.axisCollections[i];\n                        axis.crossAt = this.updateCrossAt(axis.crossInAxis, axis.crossesAt);\n                        continue;\n                    }\n                }\n            }\n        }\n    };\n    CartesianAxisLayoutPanel.prototype.updateCrossAt = function (axis, crossAt) {\n        switch (axis.valueType) {\n            case 'DateTime':\n                var option = {\n                    skeleton: 'full',\n                    type: 'dateTime'\n                };\n                var dateParser = this.chart.intl.getDateParser(option);\n                var dateFormatter = this.chart.intl.getDateFormat(option);\n                return Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: crossAt }).val))));\n            case 'Category':\n                return parseFloat(crossAt) ? parseFloat(crossAt) : axis.labels.indexOf(crossAt);\n            case 'Logarithmic':\n                return logBase(crossAt, axis.logBase);\n            default:\n                return crossAt;\n        }\n    };\n    CartesianAxisLayoutPanel.prototype.pushAxis = function (definition, axis) {\n        for (var i = 0, len = definition.axes.length; i <= len; i++) {\n            if (!definition.axes[i]) {\n                definition.axes[i] = axis;\n                break;\n            }\n        }\n    };\n    CartesianAxisLayoutPanel.prototype.arrangeAxis = function (definition) {\n        var axisCollection = [];\n        for (var i = 0, len = definition.axes.length; i <= len; i++) {\n            if (definition.axes[i]) {\n                axisCollection.push(definition.axes[i]);\n            }\n        }\n        definition.axes = axisCollection;\n    };\n    CartesianAxisLayoutPanel.prototype.getActualColumn = function (axis) {\n        var actualLength = this.chart.columns.length;\n        var pos = axis.columnIndex;\n        var result = pos >= actualLength ? actualLength - 1 : (pos < 0 ? 0 : pos);\n        return result;\n    };\n    CartesianAxisLayoutPanel.prototype.getActualRow = function (axis) {\n        var actualLength = this.chart.rows.length;\n        var pos = axis.rowIndex;\n        var result = pos >= actualLength ? actualLength - 1 : (pos < 0 ? 0 : pos);\n        return result;\n    };\n    /**\n     * Measure the row size.\n     *\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.calculateRowSize = function (rect) {\n        /*! Calculate row size */\n        var chart = this.chart;\n        var row;\n        var rowTop = rect.y + rect.height;\n        var height = 0;\n        var remainingHeight = Math.max(0, rect.height);\n        for (var i = 0, len = chart.rows.length; i < len; i++) {\n            row = chart.rows[i];\n            if (row.height.indexOf('%') !== -1) {\n                height = Math.min(remainingHeight, (rect.height * parseInt(row.height, 10) / 100));\n            }\n            else {\n                height = Math.min(remainingHeight, parseInt(row.height, 10));\n            }\n            height = (i !== (len - 1)) ? height : remainingHeight;\n            row.computedHeight = height;\n            rowTop -= height;\n            row.computedTop = rowTop;\n            remainingHeight -= height;\n        }\n    };\n    /**\n     * Measure the row size.\n     *\n     * @param {Rect} rect rect\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.calculateColumnSize = function (rect) {\n        /*! Calculate column size */\n        var chart = this.chart;\n        var column;\n        var columnLeft = rect.x;\n        var width = 0;\n        var remainingWidth = Math.max(0, rect.width);\n        for (var i = 0, len = chart.columns.length; i < len; i++) {\n            column = chart.columns[i];\n            if (column.width.indexOf('%') !== -1) {\n                width = Math.min(remainingWidth, (rect.width * parseInt(column.width, 10) / 100));\n            }\n            else {\n                width = Math.min(remainingWidth, parseInt(column.width, 10));\n            }\n            width = (i !== (len - 1)) ? width : remainingWidth;\n            column.computedWidth = width;\n            column.computedLeft = columnLeft;\n            columnLeft += width;\n            remainingWidth -= width;\n        }\n    };\n    /**\n     * To render the axis element.\n     *\n     * @returns {void}\n     * @private\n     */\n    // tslint:disable-next-line:max-func-body-length\n    CartesianAxisLayoutPanel.prototype.renderAxes = function () {\n        var chart = this.chart;\n        var axis;\n        var axisElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisInsideCollection' });\n        var axisLineElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisOutsideCollection' });\n        if (axisLineElement) {\n            axisLineElement.setAttribute('aria-hidden', 'true');\n        }\n        var outsideElement;\n        var isInside;\n        for (var i = 0, len = chart.axisCollections.length; i < len; i++) {\n            var axisVisibility = true;\n            axis = chart.axisCollections[i];\n            this.element = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i + 'Inside' });\n            if (this.element) {\n                this.element.setAttribute('aria-hidden', 'true');\n            }\n            outsideElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisGroup' + i + 'Outside' });\n            if (outsideElement) {\n                outsideElement.setAttribute('aria-hidden', 'true');\n            }\n            for (var _i = 0, _a = axis.series; _i < _a.length; _i++) {\n                var series = _a[_i];\n                if (axis.name === series.yAxisName || axis.name === series.xAxisName) {\n                    axisVisibility = series.visible;\n                    if (series.category === 'Pareto' && !series.paretoOptions.showAxis && series.type === 'Line') {\n                        axisVisibility = false;\n                    }\n                    if (!axisVisibility) {\n                        continue;\n                    }\n                    else {\n                        break;\n                    }\n                }\n            }\n            if (!axisVisibility) {\n                continue;\n            }\n            isInside = this.findAxisPosition(axis);\n            if (axis.orientation === 'Horizontal') {\n                axis.updateCrossValue();\n                if (axis.visible && axis.internalVisibility && axis.lineStyle.width > 0) {\n                    this.drawAxisLine(axis, i, axis.plotOffset, 0, 0, 0, axis.plotOffsetLeft, axis.plotOffsetRight, isInside ? outsideElement : this.element, axis.updatedRect);\n                }\n                if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0 || axis.minorTickLines.width > 0 || axis.minorGridLines.width > 0) {\n                    this.drawXAxisGridLine(axis, i, (isInside || axis.tickPosition === 'Inside') ? outsideElement : this.element, axis.updatedRect);\n                }\n                if (axis.visible && axis.internalVisibility) {\n                    this.drawXAxisLabels(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n                    this.drawXAxisBorder(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n                    this.drawXAxisTitle(axis, i, isInside ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n                }\n            }\n            else {\n                axis.updateCrossValue();\n                if (axis.visible && axis.internalVisibility && axis.lineStyle.width > 0) {\n                    this.drawAxisLine(axis, i, 0, axis.plotOffset, axis.plotOffsetBottom, axis.plotOffsetTop, 0, 0, isInside ? outsideElement : this.element, axis.updatedRect);\n                }\n                if (axis.majorGridLines.width > 0 || axis.majorTickLines.width > 0 || axis.minorTickLines.width > 0 || axis.minorGridLines.width > 0) {\n                    this.drawYAxisGridLine(axis, i, (isInside || axis.tickPosition === 'Inside') ? outsideElement : this.element, axis.updatedRect);\n                }\n                if (axis.visible && axis.internalVisibility) {\n                    this.drawYAxisLabels(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n                    this.drawYAxisBorder(axis, i, (isInside || axis.labelPosition === 'Inside') ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n                    this.drawYAxisTitle(axis, i, isInside ? outsideElement : this.element, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n                }\n            }\n            if (!this.chart.enableCanvas) {\n                axisElement.appendChild(this.element);\n                if (outsideElement && outsideElement.childNodes.length > 0) {\n                    axisLineElement.appendChild(outsideElement);\n                }\n            }\n            if (chart.scrollBarModule && ((chart.zoomSettings.enableScrollbar && axis.enableScrollbarOnZooming) ||\n                axis.scrollbarSettings.enable)) {\n                this.renderScrollbar(chart, axis);\n            }\n        }\n        this.element = chart.renderer.createGroup({ id: chart.element.id + 'DefinitionLine' });\n        for (var j = 0, len = chart.rows.length; j < len; j++) {\n            var row = chart.rows[j];\n            if (row.border.color) {\n                this.drawBottomLine(row, j, true);\n            }\n        }\n        for (var j = 0, len = chart.columns.length; j < len; j++) {\n            var column = chart.columns[j];\n            if (column.border.color) {\n                this.drawBottomLine(column, j, false);\n            }\n        }\n        if (!this.chart.enableCanvas) {\n            axisElement.appendChild(this.element);\n        }\n        appendChildElement(chart.enableCanvas, chart.svgObject, axisElement, chart.redraw);\n        return axisLineElement;\n    };\n    /**\n     * To render the axis scrollbar\n     *\n     * @param {Chart} chart chart\n     * @param {Axis} axis axis\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.renderScrollbar = function (chart, axis) {\n        var isZoomed = isNullOrUndefined(chart.zoomModule) ? false : chart.zoomModule.isZoomed;\n        if (((isZoomed && (axis.zoomFactor < 1 || axis.zoomPosition > 0)) || (axis.scrollbarSettings.enable &&\n            (axis.zoomFactor <= 1 || axis.zoomPosition >= 0))) &&\n            (!axis.zoomingScrollBar.isScrollUI)) {\n            if (!chart.scrollElement) {\n                chart.scrollElement = redrawElement(chart.redraw, chart.element.id + '_scrollElement') || createElement('div', { id: chart.element.id + '_scrollElement' });\n            }\n            appendChildElement(false, chart.scrollElement, axis.zoomingScrollBar.render(true), true);\n        }\n        else if (axis.zoomFactor === 1 && axis.zoomPosition === 0 && axis.zoomingScrollBar.svgObject && !axis.scrollbarSettings.enable) {\n            axis.zoomingScrollBar.destroy();\n        }\n        else if (axis.zoomingScrollBar.svgObject) {\n            axis.zoomingScrollBar.svgObject.style.top = (axis.isAxisOpposedPosition && axis.orientation === 'Horizontal' ? -16 : 0)\n                + axis.rect.y + Math.max(0.5, axis.lineStyle.width / 2) + 'px';\n            axis.zoomingScrollBar.svgObject.style.left = (axis.isAxisOpposedPosition && axis.orientation !== 'Horizontal' ? 16 : 0)\n                + axis.rect.x - (axis.orientation === 'Vertical' ? axis.scrollbarSettings.height : 0) + 'px';\n        }\n        if (axis.zoomingScrollBar.isScrollUI) {\n            axis.zoomingScrollBar.isScrollUI = false;\n        }\n    };\n    /**\n     * To find the axis position\n     *\n     * @param {Axis} axis axis\n     * @returns {boolean} axis position\n     */\n    CartesianAxisLayoutPanel.prototype.findAxisPosition = function (axis) {\n        return axis.crossAt !== null && axis.isInside(axis.crossInAxis.visibleRange);\n    };\n    /**\n     * To render the bootom line of the columns and rows\n     *\n     * @param {Row | Column} definition definition\n     * @param {number} index index\n     * @param {boolean} isRow isRow\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.drawBottomLine = function (definition, index, isRow) {\n        var chart = this.chart;\n        var optionsLine = {};\n        var x1;\n        var x2;\n        var y1;\n        var y2;\n        var definitionName;\n        if (isRow) {\n            definition = definition;\n            y1 = y2 = definition.computedTop + definition.computedHeight;\n            x1 = this.seriesClipRect.x;\n            x2 = x1 + this.seriesClipRect.width;\n            definitionName = 'Row';\n        }\n        else {\n            definition = definition;\n            x1 = x2 = definition.computedLeft;\n            y1 = this.seriesClipRect.y;\n            y2 = y1 + this.seriesClipRect.height;\n            definitionName = 'Column';\n        }\n        optionsLine = {\n            'id': chart.element.id + '_AxisBottom_' + definitionName + index,\n            x1: x1,\n            y1: y1,\n            x2: x2,\n            y2: y2,\n            'stroke-width': definition.border.width,\n            'stroke': definition.border.color\n        };\n        this.htmlObject = chart.renderer.drawLine(optionsLine);\n        this.element.appendChild(this.htmlObject);\n    };\n    /**\n     * To render the axis line\n     *\n     * @param {Axis} axis axis\n     * @param {number} index index\n     * @param {number} plotX plotX\n     * @param {number} plotY plotY\n     * @param {Element} parent parent\n     * @param {Rect} rect rect\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.drawAxisLine = function (axis, index, plotX, plotY, plotBottom, plotTop, plotLeft, plotRight, parent, rect) {\n        var chart = this.chart;\n        var optionsLine = {};\n        var element = getElement(chart.element.id + 'AxisLine_' + index);\n        var direction = element ? element.getAttribute('d') : '';\n        element = null;\n        optionsLine = {\n            'id': chart.element.id + 'AxisLine_' + index,\n            'd': 'M ' + (rect.x - plotX - plotLeft) + ' ' + (rect.y - plotY - plotTop) +\n                ' L ' + (rect.x + rect.width + plotX + plotRight) + ' ' + (rect.y + rect.height + plotY + plotBottom),\n            'stroke-dasharray': axis.lineStyle.dashArray,\n            'stroke-width': axis.lineStyle.width,\n            'stroke': axis.lineStyle.color || chart.themeStyle.axisLine\n        };\n        this.htmlObject = chart.renderer.drawPath(optionsLine);\n        appendChildElement(chart.enableCanvas, parent, this.htmlObject, chart.redraw, true, 'x', 'y', null, direction);\n    };\n    /**\n     * To render the yAxis grid line\n     *\n     * @param {Axis} axis axis\n     * @param {number} index index\n     * @param {Element} parent parent\n     * @param {Rect} rect rect\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.drawYAxisGridLine = function (axis, index, parent, rect) {\n        var isLogAxis = axis.valueType === 'Logarithmic';\n        var isCategoryAxis = axis.valueType.indexOf('Category') > -1;\n        var tempInterval;\n        var pointY = 0;\n        var majorGrid = '';\n        var majorTick = '';\n        var minorGridDirection;\n        var isOpposed = axis.isAxisOpposedPosition;\n        var tickSize = isOpposed ? axis.majorTickLines.height : -axis.majorTickLines.height;\n        var axisLineSize = (isOpposed) ? axis.lineStyle.width * 0.5 : -axis.lineStyle.width * 0.5;\n        var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ?\n            0.5 : 0;\n        var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? isOpposed ? axis.scrollBarHeight :\n            -axis.scrollBarHeight : 0;\n        var isTickInside = axis.tickPosition === 'Inside';\n        var ticks = isTickInside ? (rect.x - tickSize - axisLineSize) : (rect.x + tickSize + axisLineSize + scrollBarHeight);\n        var length = axis.visibleLabels.length;\n        var chartThemeStyle = this.chart.themeStyle;\n        if (axis.valueType.indexOf('Category') > -1 && axis.labelPlacement === 'BetweenTicks' && length > 0 && !this.chart.stockChart) {\n            length += 1;\n        }\n        var minorGridLines = axis.minorGridLines;\n        var minorTickLines = axis.minorTickLines;\n        //Gridlines\n        for (var i = 0; i < length; i++) {\n            tempInterval = !axis.visibleLabels[i] ? (axis.visibleLabels[i - 1].value + axis.visibleRange.interval) - ticksbwtLabel\n                : axis.visibleLabels[i].value - ticksbwtLabel;\n            pointY = valueToCoefficient(tempInterval, axis) * rect.height;\n            pointY = (pointY * -1) + (rect.y + rect.height);\n            if (pointY >= rect.y && (rect.y + rect.height) >= pointY) {\n                if ((inside(tempInterval, axis.visibleRange)) || this.isBorder(axis, i, pointY)) {\n                    majorGrid = 'M ' + this.seriesClipRect.x + ' ' + (pointY) +\n                        ' L ' + (this.seriesClipRect.x + this.seriesClipRect.width) + ' ' + pointY;\n                    this.renderGridLine(axis, index, majorGrid, axis.majorGridLines, '_MajorGridLine_', i, this.element, chartThemeStyle.majorGridLine, axis.majorGridLines.dashArray);\n                }\n                majorTick = 'M ' + (rect.x + axisLineSize + (isTickInside ? scrollBarHeight : 0)) + ' ' + pointY +\n                    ' L ' + (ticks) + ' ' + pointY;\n                this.renderGridLine(axis, index, majorTick, axis.majorTickLines, '_MajorTickLine_', i, parent, chartThemeStyle.majorTickLine);\n                if ((minorGridLines.width > 0 || minorTickLines.width > 0) && axis.minorTicksPerInterval > 0) {\n                    if (i === 0 && isZoomSet(axis) && !isLogAxis && !isCategoryAxis) {\n                        this.renderMinorGridOnZooming(axis, tempInterval, rect, i, index, chartThemeStyle, parent);\n                    }\n                    minorGridDirection = this.drawAxisMinorLine(axis, tempInterval, rect, i);\n                    this.renderGridLine(axis, index, minorGridDirection[0], minorGridLines, '_MinorGridLine_', i, this.element, chartThemeStyle.minorGridLine, minorGridLines.dashArray);\n                    this.renderGridLine(axis, index, minorGridDirection[1], minorTickLines, '_MinorTickLine_', i, parent, chartThemeStyle.minorTickLine);\n                    if (i === length - 1 && isZoomSet(axis) && isLogAxis && !isCategoryAxis) {\n                        this.renderMinorGridOnZooming(axis, (tempInterval + axis.visibleRange.interval), rect, i, index, chartThemeStyle, parent);\n                    }\n                }\n            }\n        }\n    };\n    /**\n     * To check the border of the axis\n     *\n     * @param {Axis} axis axis\n     * @param {number} index index\n     * @param {number} value value\n     * @returns {boolean} check the border of the axis\n     */\n    CartesianAxisLayoutPanel.prototype.isBorder = function (axis, index, value) {\n        var border = this.chart.chartArea.border;\n        var rect = this.seriesClipRect;\n        var orientation = axis.orientation;\n        var start = (orientation === 'Horizontal') ? rect.x : rect.y;\n        var size = (orientation === 'Horizontal') ? rect.width : rect.height;\n        var startIndex = (orientation === 'Horizontal') ? 0 : axis.visibleLabels.length - 1;\n        var endIndex = (orientation === 'Horizontal') ? axis.visibleLabels.length - 1 : 0;\n        if (axis.plotOffset > 0) {\n            return true;\n        }\n        else if ((value === start || value === (start + size)) && (border.width <= 0 || border.color === 'transparent')) {\n            return true;\n        }\n        else if ((value !== start && index === startIndex) || (value !== (start + size) && index === endIndex)) {\n            return true;\n        }\n        return false;\n    };\n    /**\n     * To render the yAxis label\n     *\n     * @param {Axis} axis axis\n     * @param {number} index index\n     * @param {Element} parent parent\n     * @param {Rect} rect rect\n     * @returns {void}\n     * @private\n     */\n    CartesianAxisLayoutPanel.prototype.drawYAxisLabels = function (axis, index, parent, rect) {\n        var chart = this.chart;\n        var label;\n        var pointX = 0;\n        var pointY = 0;\n        var elementSize;\n        var labelSpace = axis.labelPadding;\n        var options;\n        var isAxisBreakLabel;\n        var isLabelInside = axis.labelPosition === 'Inside';\n        var isOpposed = axis.isAxisOpposedPosition;\n        var RotatedWidth;\n        var tickSpace = axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0;\n        var padding = tickSpace + labelSpace + axis.lineStyle.width * 0.5;\n        var angle = axis.angle % 360;\n        var isVerticalAngle = (angle === -90 || angle === 90 || angle === 270 || angle === -270);\n        padding += (isVerticalAngle) ? (isLabelInside ? 5 : -5) : 0;\n        padding = (isOpposed) ? padding : -padding;\n        var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n        var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight * (isOpposed ? 1 : -1) : 0;\n        var textHeight;\n        var textPadding;\n        var maxLineWidth;\n        var pixel = 10;\n        var isInverse = axis.isAxisInverse;\n        var previousEnd = isInverse ? rect.y : (rect.y + rect.height);\n        var labelPadding;\n        var intervalLength;\n        var labelHeight;\n        var yAxisLabelX;\n        var isLabelOnAxisLineLeft = ((!isOpposed && !isLabelInside) || (isOpposed && isLabelInside));\n        if (isLabelInside) {\n            labelPadding = !isLabelOnAxisLineLeft ? -padding : padding;\n        }\n        else {\n            labelPadding = !isLabelOnAxisLineLeft ? -padding + (chart.enableRtl ? -scrollBarHeight : scrollBarHeight) : padding + (chart.enableRtl ? -scrollBarHeight : scrollBarHeight);\n        }\n        var sizeWidth = [];\n        var breakLabelSizeWidth = [];\n        axis.visibleLabels.map(function (item) {\n            sizeWidth.push(item.size['width']);\n            breakLabelSizeWidth.push(item.breakLabelSize['width']);\n        });\n        var LabelMaxWidth = Math.max.apply(Math, sizeWidth);\n        var breakLabelMaxWidth = Math.max.apply(Math, breakLabelSizeWidth);\n        RotatedWidth = LabelMaxWidth;\n        if (angle >= -45 && angle <= 45 && angle !== 0) {\n            RotatedWidth = LabelMaxWidth * Math.cos(angle * Math.PI / 180);\n            if (RotatedWidth < 0) {\n                RotatedWidth = -RotatedWidth;\n            }\n        }\n        for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n            label = axis.visibleLabels[i];\n            isAxisBreakLabel = isBreakLabel(axis.visibleLabels[i].originalText);\n            elementSize = isAxisBreakLabel ? axis.visibleLabels[i].breakLabelSize : axis.visibleLabels[i].size;\n            pointY = (valueToCoefficient(axis.visibleLabels[i].value, axis) * rect.height) + (chart.stockChart ? 7 : 0);\n            pointY = Math.floor((pointY * -1) + (rect.y + rect.height));\n            textHeight = ((elementSize.height / 8) * axis.visibleLabels[i].text.length / 2);\n            textPadding = (chart.requireInvertedAxis && axis.labelPosition === 'Inside') ? 0 : ((elementSize.height / 4) * 3) + 3;\n            intervalLength = rect.height / axis.visibleLabels.length;\n            labelHeight = ((axis.labelIntersectAction === 'Trim' || axis.labelIntersectAction === 'Wrap') && angle !== 0 &&\n                elementSize.width > intervalLength) ? intervalLength : elementSize.width;\n            pointY = (isAxisBreakLabel ? (axis.labelPosition === 'Inside' ? (pointY - (elementSize.height / 2) - textHeight + textPadding)\n                : (pointY - textHeight)) : (axis.labelPosition === 'Inside' ? pointY + textPadding : pointY));\n            if (axis.labelPosition === 'Inside' && ((i === 0 && !axis.isInversed) || (i === len - 1 && axis.isInversed))) {\n                if (chart.stockChart) {\n                    pointY -= (textPadding);\n                }\n                else {\n                    pointY -= (textPadding - ((chart.requireInvertedAxis && axis.labelPosition === 'Inside') ? 0 : (axis.opposedPosition ? -padding : padding)));\n                }\n            }\n            if (axis.majorGridLines.width > axis.majorTickLines.width) {\n                maxLineWidth = axis.majorGridLines.width;\n            }\n            else {\n                maxLineWidth = axis.majorTickLines.width;\n            }\n            if (axis.labelStyle.textAlignment === 'Far') {\n                pointY = pointY - maxLineWidth - pixel;\n            }\n            else if (axis.labelStyle.textAlignment === 'Near') {\n                pointY = pointY + maxLineWidth + pixel;\n            }\n            else if (axis.labelStyle.textAlignment === 'Center') {\n                // eslint-disable-next-line no-self-assign\n                pointY = pointY;\n            }\n            // label X value adjustment (Start)\n            if (isLabelInside) {\n                yAxisLabelX = labelPadding + ((angle === 0 ? elementSize.width : (isAxisBreakLabel ? breakLabelMaxWidth : LabelMaxWidth)) / 2);\n            }\n            else {\n                yAxisLabelX = labelPadding - ((angle === 0 ? elementSize.width : (isAxisBreakLabel ? breakLabelMaxWidth : RotatedWidth)) / 2);\n            }\n            pointX = isOpposed ? (rect.x - yAxisLabelX) : (rect.x + yAxisLabelX);\n            if (isVerticalAngle) {\n                pointX += (isOpposed) ? -10 : 10;\n            }\n            yAxisLabelX = labelPadding;\n            options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, 'middle', label.text, '', 'middle', angle);\n            switch (axis.edgeLabelPlacement) {\n                case 'None':\n                    break;\n                case 'Hide':\n                    if (((i === 0 || (isInverse && i === len - 1)) && options.y > rect.y) ||\n                        (((i === len - 1) || (isInverse && i === 0)) && options.y - elementSize.height * 0.5 < rect.y)) {\n                        options.text = '';\n                    }\n                    break;\n                case 'Shift':\n                    if ((i === 0 || (isInverse && i === len - 1)) && options.y > rect.y + rect.height) {\n                        options.y = pointY = rect.y + rect.height;\n                    }\n                    else if (((i === len - 1) || (isInverse && i === 0)) && (options.y < rect.y)) {\n                        options.y = pointY = rect.y + elementSize.height * 0.5;\n                    }\n                    break;\n            }\n            // ------- Hide Calculation (Start) -------------\n            var previousYValue = options.y;\n            var currentYValue = options.y - labelHeight;\n            if (isAxisBreakLabel) {\n                previousYValue = (options.y - (labelHeight / 2));\n                currentYValue = options.y + (labelHeight / 2);\n            }\n            if ((angle === 90 || angle === 270) && axis.labelIntersectAction === 'Hide' && i !== 0 &&\n                (!isInverse ? previousYValue >= previousEnd : currentYValue <= previousEnd)) {\n                continue;\n            }\n            previousEnd = isInverse ? previousYValue : currentYValue;\n            // ------- Hide Calculation (End) -------------\n            options.transform = 'rotate(' + angle + ',' + pointX + ',' + pointY + ')';\n            textElement(chart.renderer, options, label.labelStyle, label.labelStyle.color || chart.themeStyle.axisLabelFont.color, labelElement, false, chart.redraw, true, true, null, null, null, null, chart.enableCanvas, null, chart.themeStyle.axisLabelFont);\n        }\n        if (!this.chart.enableCanvas) {\n            if (!chart.delayRedraw) {\n                appendChildElement(chart.enableCanvas, parent, labelElement, chart.redraw);\n            }\n            else if (axis.visible && axis.internalVisibility) {\n                this.createZoomingLabel(this.chart, labelElement, axis, index, rect);\n            }\n        }\n    };\n    /**\n     * To get X value based on lineBreakAlignment for Y axis line break labels only.\n     *\n     * @param {number} x text x position\n     * @param {Axis} axis y axis values\n     * @param {number} textWidth axis label width\n     * @returns {number} returns suitable axis label x position\n     */\n    CartesianAxisLayoutPanel.prototype.getAxisLabelXvalue = function (x, axis, textWidth) {\n        var anchor = axis.lineBreakAlignment;\n        var isLabelInside = axis.labelPosition === 'Inside';\n        var isOpposed = axis.isAxisOpposedPosition;\n        if ((isOpposed && isLabelInside) || (!isOpposed && !isLabelInside)) {\n            return (anchor === 'Right' ? x : (anchor === 'Center' ? (x - textWidth / 2) : (x - textWidth)));\n        }\n        else {\n            return (anchor === 'Left' ? x : (anchor === 'Center' ? (x + textWidth / 2) : (x + textWidth)));\n        }\n    };\n    /**\n     * To render the yAxis label border.\n     *\n     * @param {Axis} axis axis\n     * @param {number} index index\n     * @param {Element} parent parent\n     * @param {Rect} rect rect\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.drawYAxisBorder = function (axis, index, parent, rect) {\n        if (axis.border.width > 0) {\n            var startY = void 0;\n            var pointY = void 0;\n            var scrollBarHeight = axis.labelPosition === 'Outside' ? axis.scrollBarHeight : 0;\n            var isOpposed = axis.isAxisOpposedPosition;\n            scrollBarHeight = (isOpposed ? 1 : -1) * scrollBarHeight;\n            var gap = (rect.height / axis.visibleRange.delta) * (axis.valueType === 'DateTime' ? axis.dateTimeInterval\n                : axis.visibleRange.interval);\n            var endY = void 0;\n            var length_1 = axis.maxLabelSize.width + 10 + ((axis.tickPosition === axis.labelPosition) ?\n                axis.majorTickLines.height : 0);\n            var labelBorder = '';\n            var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ? -0.5 : 0;\n            var endX = ((isOpposed && axis.labelPosition === 'Inside') || (!isOpposed\n                && axis.labelPosition === 'Outside')) ? rect.x - length_1 + scrollBarHeight : rect.x + length_1 + scrollBarHeight;\n            for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n                pointY = valueToCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis);\n                pointY = (axis.isAxisInverse ? (1 - pointY) : pointY) * rect.height;\n                if (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') {\n                    startY = (pointY * -1) + (rect.y + rect.height);\n                    endY = (pointY * -1) - (gap) + (rect.y + rect.height);\n                }\n                else {\n                    startY = (pointY * -1) + gap / 2 + (rect.y + rect.height);\n                    endY = (pointY * -1) - gap / 2 + (rect.y + rect.height);\n                }\n                switch (axis.border.type) {\n                    case 'Rectangle':\n                    case 'WithoutTopBorder':\n                        if (startY > (rect.y + rect.height)) {\n                            labelBorder += ('M' + ' ' + endX + ' ' + (rect.y + rect.height) + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n                        }\n                        else if (Math.floor(rect.y) > (endY)) {\n                            labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX\n                                + ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + (rect.y) + ' ');\n                        }\n                        else {\n                            labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX +\n                                ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n                            if (i === axis.visibleLabels.length - 1) {\n                                labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + endY + ' ' + 'L' + ' ' +\n                                    endX + ' ' + endY + ' ');\n                            }\n                        }\n                        break;\n                    case 'WithoutTopandBottomBorder':\n                        if (!(startY > rect.y + rect.height) && !((endY) < Math.floor(rect.y))) {\n                            labelBorder += ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + startY + ' ' + 'L' + ' ' + endX +\n                                ' ' + startY + ' ' + 'M' + ' ' + endX + ' ' + endY + ' ' +\n                                'L' + ' ' + (rect.x + scrollBarHeight) + ' ' + endY);\n                        }\n                        break;\n                }\n            }\n            labelBorder += (axis.border.type === 'Rectangle') ? ('M' + ' ' + (rect.x + scrollBarHeight) + ' ' + rect.y + ' ' + 'L' + ' ' +\n                (rect.x + scrollBarHeight) + ' ' + (rect.y + rect.height) + ' ') : '';\n            if (labelBorder !== '') {\n                this.createAxisBorderElement(axis, index, labelBorder, parent);\n            }\n        }\n        for (var i = 0; i < this.chart.visibleSeries.length; i++) {\n            if (axis.multiLevelLabels.length > 0 && this.chart.multiLevelLabelModule && this.chart.visibleSeries[i].visible) {\n                this.chart.multiLevelLabelModule.renderYAxisMultiLevelLabels(axis, index, parent, rect);\n                break;\n            }\n        }\n    };\n    /**\n     * To render the yAxis title\n     *\n     * @param {Axis} axis axis\n     * @param {number} index index\n     * @param {Element} parent parent\n     * @param {Rect} rect rect\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.drawYAxisTitle = function (axis, index, parent, rect) {\n        if (axis.title) {\n            var chart = this.chart;\n            var isRotated = false;\n            var isOpposed = axis.isAxisOpposedPosition;\n            var labelRotation = (axis.titleRotation == null ? (isOpposed ? 90 : -90) : axis.titleRotation) % 360;\n            var padding = (axis.tickPosition === 'Inside' ? 0 : axis.majorTickLines.height + axis.titlePadding) +\n                (axis.labelPosition === 'Inside' ? 0 :\n                    (axis.maxLabelSize.width + axis.multiLevelLabelHeight + this.padding));\n            padding = isOpposed ? padding + axis.scrollBarHeight : -padding - axis.scrollBarHeight;\n            if ((labelRotation !== -90 && !isOpposed) || (labelRotation !== 90 && isOpposed)) {\n                padding += axis.isAxisOpposedPosition ? axis.titleSize.width / 2 + axis.labelPadding : -axis.titleSize.width / 2 - axis.labelPadding;\n                isRotated = true;\n            }\n            var x = rect.x + padding;\n            var y = void 0;\n            var anchor = void 0;\n            if (axis.titleStyle.textAlignment === 'Center') {\n                anchor = 'middle';\n                y = rect.y + rect.height * 0.5;\n            }\n            else if (axis.titleStyle.textAlignment === 'Near') {\n                anchor = axis.opposedPosition ? 'end' : 'start';\n                y = rect.height + rect.y;\n            }\n            else {\n                anchor = axis.opposedPosition ? 'start' : 'end';\n                y = rect.y;\n            }\n            var titleSize = (axis.titleSize.height * (axis.titleCollection.length - 1));\n            var options = new TextOption(chart.element.id + '_AxisTitle_' + index, x, y + (isRotated ? -titleSize : -axis.labelPadding - titleSize), anchor, axis.titleCollection, 'rotate(' + labelRotation + ',' + (x) + ',' + (y) + ')', null, labelRotation);\n            var element = textElement(chart.renderer, options, axis.titleStyle, axis.titleStyle.color || chart.themeStyle.axisTitleFont.color, parent, null, null, null, null, null, null, null, null, chart.enableCanvas, null, chart.themeStyle.axisTitleFont);\n            element.setAttribute('aria-hidden', 'true');\n        }\n    };\n    /**\n     * xAxis grid line calculation performed here\n     *\n     * @param {Axis} axis axis\n     * @param {number} index index\n     * @param {Element} parent parent\n     * @param {Rect} rect rect\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.drawXAxisGridLine = function (axis, index, parent, rect) {\n        var isLogAxis = axis.valueType === 'Logarithmic';\n        var isCategoryAxis = axis.valueType.indexOf('Category') > -1;\n        var tempInterval;\n        var pointX = 0;\n        var majorGrid = '';\n        var majorTick = '';\n        var minorDirection;\n        var isOpposed = axis.isAxisOpposedPosition;\n        var tickSize = (isOpposed) ? -axis.majorTickLines.height : axis.majorTickLines.height;\n        var axisLineSize = (isOpposed) ? -axis.lineStyle.width * 0.5 : axis.lineStyle.width * 0.5;\n        var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? isOpposed ? -axis.scrollBarHeight :\n            axis.scrollBarHeight : 0;\n        var ticksbwtLabel = (axis.valueType.indexOf('Category') > -1 && axis.labelPlacement === 'BetweenTicks' && !this.chart.stockChart) ?\n            0.5 : 0;\n        var length = axis.visibleLabels.length;\n        var isTickInside = axis.tickPosition === 'Inside';\n        var ticks = isTickInside ? (rect.y - tickSize - axisLineSize) : (rect.y + tickSize + axisLineSize + scrollBarHeight);\n        var chartThemeStyle = this.chart.themeStyle;\n        if (axis.valueType.indexOf('Category') > -1 && length > 0 && axis.labelPlacement === 'BetweenTicks' && !this.chart.stockChart) {\n            length += 1;\n        }\n        //Gridlines\n        for (var i = 0; i < length; i++) {\n            if (axis.valueType !== 'DateTimeCategory') {\n                tempInterval = axis.visibleLabels[i] ? axis.visibleLabels[i].value - ticksbwtLabel\n                    : (axis.visibleLabels[i - 1].value + axis.visibleRange.interval) - ticksbwtLabel;\n            }\n            else {\n                tempInterval = axis.visibleLabels[i] ?\n                    axis.visibleLabels[i].value - ticksbwtLabel : axis.visibleRange.max;\n            }\n            pointX = (valueToCoefficient(tempInterval, axis) * rect.width) + rect.x;\n            if (pointX >= rect.x && (rect.x + rect.width) >= pointX) {\n                if (inside(tempInterval, axis.visibleRange) || this.isBorder(axis, i, pointX)) {\n                    majorGrid = 'M ' + pointX + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height) +\n                        ' L ' + pointX + ' ' + this.seriesClipRect.y;\n                    this.renderGridLine(axis, index, majorGrid, axis.majorGridLines, '_MajorGridLine_', i, this.element, chartThemeStyle.majorGridLine, axis.majorGridLines.dashArray);\n                }\n                majorTick = 'M ' + (pointX) + ' ' + (rect.y + axisLineSize + (isTickInside ? scrollBarHeight : 0))\n                    + ' L ' + (pointX) + ' ' + ticks;\n                this.renderGridLine(axis, index, majorTick, axis.majorTickLines, '_MajorTickLine_', i, parent, chartThemeStyle.majorTickLine);\n                if (axis.minorTicksPerInterval > 0 && (axis.minorGridLines.width > 0 || axis.minorTickLines.width > 0)) {\n                    if (i === 0 && isZoomSet(axis) && !isLogAxis && !isCategoryAxis) {\n                        this.renderMinorGridOnZooming(axis, tempInterval, rect, i, index, chartThemeStyle, parent);\n                    }\n                    minorDirection = this.drawAxisMinorLine(axis, tempInterval, rect, i);\n                    this.renderGridLine(axis, index, minorDirection[0], axis.minorGridLines, '_MinorGridLine_', i, this.element, chartThemeStyle.minorGridLine, axis.minorGridLines.dashArray);\n                    this.renderGridLine(axis, index, minorDirection[1], axis.minorTickLines, '_MinorTickLine_', i, parent, chartThemeStyle.minorTickLine);\n                    if (i === length - 1 && isZoomSet(axis) && isLogAxis && !isCategoryAxis) {\n                        this.renderMinorGridOnZooming(axis, (tempInterval + axis.visibleRange.interval), rect, i, index, chartThemeStyle, parent);\n                    }\n                }\n            }\n        }\n    };\n    /**\n     * To render missing minor grid lines while zooming\n     *\n     * @param {Axis} axis axis\n     * @param {number} tempInterval tempInterval\n     * @param {Rect} rect rect\n     * @param {number} i i\n     * @param {number} index index\n     * @param {IThemeStyle} chartThemeStyle chartThemeStyle\n     * @param {Element} parent parent\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.renderMinorGridOnZooming = function (axis, tempInterval, rect, i, index, chartThemeStyle, parent) {\n        var minorDirection = this.drawAxisMinorLine(axis, tempInterval, rect, i, true);\n        this.renderGridLine(axis, index, minorDirection[0], axis.minorGridLines, '_MinorGridLine_', -1, this.element, chartThemeStyle.minorGridLine, axis.minorGridLines.dashArray);\n        this.renderGridLine(axis, index, minorDirection[1], axis.minorTickLines, '_MinorTickLine_', -1, parent, chartThemeStyle.minorTickLine);\n    };\n    /**\n     * To calcualte the axis minor line\n     *\n     * @param {Axis} axis axis\n     * @param {number} tempInterval tempInterval\n     * @param {Rect} rect rect\n     * @param {number} labelIndex labelIndex\n     * @param {boolean} isFirstLabel isFirstLabel\n     * @returns {string[]} axis minor line path\n     */\n    CartesianAxisLayoutPanel.prototype.drawAxisMinorLine = function (axis, tempInterval, rect, labelIndex, isFirstLabel) {\n        var value = tempInterval;\n        var coor = 0;\n        var position = 0;\n        var range = axis.visibleRange;\n        var isTickInside = axis.tickPosition === 'Inside';\n        var direction = [];\n        var tickSize = axis.isAxisOpposedPosition ? -axis.minorTickLines.height : axis.minorTickLines.height;\n        var logStart;\n        var logEnd;\n        var logInterval = 1;\n        var logPosition = 1;\n        var ticksX = isTickInside ? (rect.y - tickSize) : (rect.y + tickSize);\n        var ticksY = isTickInside ? (rect.x + tickSize) : (rect.x - tickSize);\n        var minorGird = '';\n        var minorTick = '';\n        var isInverse = axis.isAxisInverse;\n        if (axis.valueType === 'Logarithmic') {\n            logStart = Math.pow(axis.logBase, value - range.interval);\n            logEnd = Math.pow(axis.logBase, value);\n            logInterval = (logEnd - logStart) / (axis.minorTicksPerInterval + 1);\n            logPosition = logStart + logInterval;\n        }\n        if (axis.orientation === 'Horizontal') {\n            for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n                value = this.findLogNumeric(axis, logPosition, value, labelIndex, isFirstLabel);\n                logPosition += logInterval;\n                if (inside(value, range)) {\n                    position = ((value - range.min) / (range.max - range.min));\n                    position = Math.ceil((isInverse ? (1 - position) : position) * rect.width);\n                    coor = (Math.floor(position + rect.x));\n                    minorGird = minorGird.concat('M' + ' ' + coor + ' ' + (this.seriesClipRect.y)\n                        + 'L ' + coor + ' ' + (this.seriesClipRect.y + this.seriesClipRect.height));\n                    coor = (Math.floor(position + rect.x));\n                    minorTick = minorTick.concat('M' + ' ' + coor + ' ' + (rect.y)\n                        + 'L ' + coor + ' ' + (ticksX + axis.scrollBarHeight));\n                }\n            }\n        }\n        else {\n            for (var j = 0; j < axis.minorTicksPerInterval; j++) {\n                value = this.findLogNumeric(axis, logPosition, value, labelIndex, isFirstLabel);\n                if (inside(value, range)) {\n                    position = ((value - range.min) / (range.max - range.min));\n                    position = Math.ceil(((isInverse ? (1 - position) : position)) * rect.height) * -1; // For inversed axis\n                    coor = (Math.floor(position + rect.y + rect.height));\n                    minorGird = minorGird.concat('M' + ' ' + (this.seriesClipRect.x) + ' ' + coor\n                        + 'L ' + (this.seriesClipRect.x + this.seriesClipRect.width) + ' ' + coor + ' ');\n                    coor = (Math.floor(position + rect.y + rect.height));\n                    minorTick = minorTick.concat('M' + ' ' + rect.x + ' ' + coor + 'L ' + (ticksY - axis.scrollBarHeight) +\n                        ' ' + coor + ' ');\n                }\n                logPosition += logInterval;\n            }\n        }\n        direction.push(minorGird);\n        direction.push(minorTick);\n        return direction;\n    };\n    /**\n     * To find the numeric value of the log\n     *\n     * @param {Axis} axis axis\n     * @param {number} logPosition logPosition\n     * @param {number} value value\n     * @param {number} labelIndex labelIndex\n     * @param {boolean} isFirstLabel isFirstLabel\n     * @returns {number} value\n     */\n    CartesianAxisLayoutPanel.prototype.findLogNumeric = function (axis, logPosition, value, labelIndex, isFirstLabel) {\n        var range = axis.visibleRange;\n        var tempValue;\n        if (axis.valueType === 'Logarithmic') {\n            value = logBase(logPosition, axis.logBase);\n        }\n        else if (axis.valueType === 'DateTime') {\n            tempValue = axis.dateTimeInterval / (axis.minorTicksPerInterval + 1);\n            value = isFirstLabel ? (value - tempValue) : (value + tempValue);\n        }\n        else if (axis.valueType === 'DateTimeCategory') {\n            var padding = axis.labelPlacement === 'BetweenTicks' ? 0.5 : 0;\n            value += ((axis.visibleLabels[labelIndex + 1] ?\n                axis.visibleLabels[labelIndex + 1].value - padding : axis.visibleRange.max) -\n                (axis.visibleLabels[labelIndex] ?\n                    axis.visibleLabels[labelIndex].value - padding : axis.visibleRange.min)) /\n                (axis.minorTicksPerInterval + 1);\n        }\n        else {\n            tempValue = range.interval / (axis.minorTicksPerInterval + 1);\n            value = isFirstLabel ? (value - tempValue) : (value + tempValue);\n        }\n        return value;\n    };\n    /**\n     * To render the xAxis Labels\n     *\n     * @param {Axis} axis axis\n     * @param {number} index index\n     * @param {Element} parent parent\n     * @param {Rect} rect rect\n     * @returns {void}\n     * @private\n     */\n    CartesianAxisLayoutPanel.prototype.drawXAxisLabels = function (axis, index, parent, rect) {\n        var chart = this.chart;\n        var pointX = 0;\n        var pointY = 0;\n        var labelSpace = axis.labelPadding;\n        var labelHeight;\n        var elementSize;\n        var labelPadding;\n        var anchor;\n        var pixel = 10;\n        var labelElement = chart.renderer.createGroup({ id: chart.element.id + 'AxisLabels' + index });\n        var islabelInside = axis.labelPosition === 'Inside';\n        var isOpposed = axis.isAxisOpposedPosition;\n        var tickSpace = axis.labelPosition === axis.tickPosition ? axis.majorTickLines.height : 0;\n        var padding = tickSpace + labelSpace + axis.lineStyle.width * 0.5;\n        var angle = axis.angle % 360;\n        var isHorizontalAngle = (angle === 0 || angle === -180 || angle === 180);\n        var options;\n        var labelWidth;\n        var isInverse = axis.isAxisInverse;\n        var isLeft;\n        var previousEnd = isInverse ? (rect.x + rect.width) : rect.x;\n        var width = 0;\n        var length = axis.visibleLabels.length;\n        var intervalLength;\n        var label;\n        var isAxisBreakLabel;\n        var scrollBarHeight = axis.scrollbarSettings.enable || (!islabelInside && isNullOrUndefined(axis.crossesAt)\n            && (axis.zoomFactor < 1 || axis.zoomPosition > 0)) ? axis.scrollBarHeight : 0;\n        var newPoints = [];\n        var isRotatedLabelIntersect = false;\n        var textPoints = [];\n        var rotatedLabelSize = new Size(0, 0);\n        padding += (angle === 90 || angle === 270 || angle === -90 || angle === -270) ? (islabelInside ? 5 : -5) : 0;\n        var isLabelUnderAxisLine = ((!isOpposed && !islabelInside) || (isOpposed && islabelInside));\n        var isEndAnchor = isLabelUnderAxisLine ?\n            ((360 >= angle && angle >= 180) || (-1 >= angle && angle >= -180)) :\n            ((1 <= angle && angle <= 180) || (-181 >= angle && angle >= -360));\n        for (var i = 0, len = length; i < len; i++) {\n            label = axis.visibleLabels[i];\n            isAxisBreakLabel = isBreakLabel(label.originalText) || (axis.labelIntersectAction === 'Wrap' && label.text.length > 1);\n            pointX = (valueToCoefficient(label.value, axis) * rect.width) + rect.x;\n            elementSize = label.size;\n            intervalLength = rect.width / length;\n            labelWidth = isAxisBreakLabel ? label.breakLabelSize.width : elementSize.width;\n            width = ((axis.labelIntersectAction === 'Trim' || axis.labelIntersectAction === 'Wrap') && angle === 0 &&\n                labelWidth > intervalLength) ? intervalLength : labelWidth;\n            labelHeight = elementSize.height / 4;\n            pointX -= (isAxisBreakLabel || angle !== 0) ? 0 : (width / 2);\n            // label X value adjustment for label rotation (Start)\n            if (angle !== 0) {\n                if (isAxisBreakLabel) {\n                    pointX -= axis.lineBreakAlignment === 'Left' ? (label.breakLabelSize.width / 2) : axis.lineBreakAlignment === 'Right' ?\n                        -(label.breakLabelSize.width / 2) : 0;\n                }\n                else {\n                    pointX -= (angle === -90 || angle === 270 ? -labelHeight : (angle === 90 || angle === -270) ? labelHeight : 0);\n                }\n            }\n            // label X value adjustment for label rotation (End)\n            if (axis.labelStyle.textAlignment === 'Far') {\n                pointX = pointX + width - pixel;\n            }\n            else if (axis.labelStyle.textAlignment === 'Near') {\n                pointX = pointX - width + pixel;\n            }\n            else if (axis.labelStyle.textAlignment === 'Center') {\n                // eslint-disable-next-line no-self-assign\n                pointX = pointX;\n            }\n            // For line break label alignment like left, right & center in angle 0\n            if (isAxisBreakLabel && axis.lineBreakAlignment !== 'Center' && angle === 0) {\n                pointX += axis.lineBreakAlignment === 'Left' ? -(width / 2) : (width / 2);\n            }\n            var paddingForBreakLabel = isAxisBreakLabel ?\n                (isHorizontalAngle ? (axis.opposedPosition || islabelInside ? 0 : elementSize.height) : (label.breakLabelSize.width / 2)) : 0;\n            padding = isAxisBreakLabel ? (tickSpace + labelSpace + axis.lineStyle.width * 0.5) : padding;\n            // label Y value adjustment (Start)\n            if (islabelInside && angle) {\n                if (isAxisBreakLabel) {\n                    pointY = isOpposed ? (rect.y + padding + (paddingForBreakLabel)) : (rect.y - padding - (paddingForBreakLabel));\n                }\n                else {\n                    pointY = isOpposed ? (rect.y + padding + labelHeight) : (rect.y - padding - labelHeight);\n                }\n            }\n            else {\n                if (isAxisBreakLabel) {\n                    labelPadding = !isLabelUnderAxisLine ? -(padding + scrollBarHeight + (paddingForBreakLabel)) :\n                        padding + scrollBarHeight + (angle ? paddingForBreakLabel : (3 * labelHeight));\n                }\n                else {\n                    labelPadding = !isLabelUnderAxisLine ?\n                        -(padding + scrollBarHeight + (angle ? labelHeight : (label.index > 1 ? (2 * labelHeight) : 0))) :\n                        padding + scrollBarHeight + ((angle ? 1 : 3) * labelHeight);\n                }\n                pointY = (rect.y + (labelPadding * label.index));\n            }\n            // label Y value adjustment (End)\n            if (isAxisBreakLabel) {\n                anchor = this.getAnchor(axis); // for break label self alignment\n            }\n            else {\n                anchor = (chart.enableRtl) ? ((isEndAnchor) ? '' : 'end') : (chart.isRtlEnabled || isEndAnchor) ? 'end' : '';\n            }\n            options = new TextOption(chart.element.id + index + '_AxisLabel_' + i, pointX, pointY, anchor);\n            if (angle !== 0) {\n                rotatedLabelSize = rotateTextSize(label.labelStyle, label.originalText, angle, chart);\n                isLeft = ((angle < 0 && angle > -90) || (angle < -180 && angle > -270) || (angle > 90 && angle < 180) || (angle > 270 && angle < 360));\n            }\n            if (axis.edgeLabelPlacement) {\n                switch (axis.edgeLabelPlacement) {\n                    case 'None':\n                        break;\n                    case 'Hide':\n                        if (((i === 0 || (isInverse && i === len - 1)) && options.x < rect.x) ||\n                            ((i === len - 1 || (isInverse && i === 0)) && (options.x + (angle === 0 ? width : rotatedLabelSize.width) > rect.x + rect.width))) {\n                            continue;\n                        }\n                        break;\n                    case 'Shift':\n                        if ((i === 0 || (isInverse && i === len - 1)) && (options.x < rect.x || (angle !== 0 && isLeft && options.x - rotatedLabelSize.width <= rect.x) || (axis.lineBreakAlignment === 'Center' && options.x - (label.size.width / label.text.length) / 2 < rect.x && angle === 0))) {\n                            intervalLength -= (rect.x - options.x);\n                            if (anchor === '' && !isInverse && angle === 0) {\n                                if (options.x <= 0) {\n                                    pointX = options.x = 0;\n                                }\n                                else {\n                                    pointX = options.x;\n                                }\n                                intervalLength = rect.width / length;\n                            }\n                            else if (isLeft && angle !== 0) {\n                                intervalLength = rect.width / length;\n                                if (intervalLength > rect.x + rotatedLabelSize.width) {\n                                    options.x = pointX = rect.x + rotatedLabelSize.width;\n                                }\n                                else {\n                                    options.x = pointX = rect.x + intervalLength - padding;\n                                }\n                            }\n                            else if (isAxisBreakLabel && axis.lineBreakAlignment === 'Center' && axis.labelPlacement === 'OnTicks' && angle === 0) {\n                                var maxWidth = 0;\n                                for (var i_1 = 0; i_1 < label.text.length; i_1++) {\n                                    var breakLabelWidth = measureText(label.text[i_1], axis.labelStyle, chart.themeStyle.axisLabelFont).width;\n                                    if (breakLabelWidth > maxWidth) {\n                                        maxWidth = breakLabelWidth;\n                                    }\n                                }\n                                options.x = pointX = rect.x + maxWidth / 2;\n                            }\n                            else if (!(anchor === 'start' && options.x > 0)) {\n                                options.x = pointX = !isHorizontalAngle ? rect.x + padding : rect.x;\n                            }\n                        }\n                        else if ((i === len - 1 || (isInverse && i === 0)) && (((options.x + width) > rect.x + rect.width && anchor !== 'end' && angle === 0) || (angle !== 0 && !isLeft && (options.x + rotatedLabelSize.width) > rect.x + rect.width) || (anchor === 'end' && options.x > rect.x + rect.width))) {\n                            if (elementSize.width > intervalLength && axis.labelIntersectAction === 'Trim' && angle === 0) {\n                                intervalLength -= (options.x + width - (rect.x + rect.width));\n                            }\n                            else if (angle !== 0) {\n                                if (rotatedLabelSize.width < intervalLength) {\n                                    intervalLength = rotatedLabelSize.width;\n                                }\n                            }\n                            else {\n                                intervalLength = width;\n                            }\n                            if (angle !== 0) {\n                                options.x = pointX = rect.x + rect.width - intervalLength + padding;\n                            }\n                            else {\n                                options.x = pointX = !isHorizontalAngle ? rect.x + rect.width - intervalLength / 2 : rect.x + rect.width - intervalLength;\n                            }\n                        }\n                        break;\n                }\n            }\n            options.text = this.getLabelText(label, axis, intervalLength);\n            options.labelRotation = angle;\n            // ------- Hide Calculation (Start) -------------\n            // Currect label actual start value (Start)\n            var xValue = void 0;\n            var xValue2 = void 0;\n            if (isAxisBreakLabel && angle === 0) {\n                if (axis.lineBreakAlignment === 'Right') {\n                    xValue = (options.x - width);\n                    xValue2 = options.x;\n                }\n                else if (axis.lineBreakAlignment === 'Center') {\n                    xValue = (options.x - (width / 2));\n                    xValue2 = options.x + (width / 2);\n                }\n                else {\n                    xValue = options.x;\n                    xValue2 = options.x + width;\n                }\n            }\n            else {\n                xValue = options.x;\n                xValue2 = options.x + width;\n            }\n            // Currect label actual start value (End)\n            if (angle === 0 && axis.labelIntersectAction === 'Hide' && i !== 0 &&\n                (!isInverse ? xValue <= previousEnd : xValue2 >= previousEnd)) {\n                continue;\n            }\n            // Previous label actual end value (Start)\n            if (isAxisBreakLabel) {\n                if (axis.lineBreakAlignment === 'Right') {\n                    previousEnd = isInverse ? (options.x - width) : options.x;\n                }\n                else if (axis.lineBreakAlignment === 'Center') {\n                    previousEnd = isInverse ? (options.x - (width / 2)) : options.x + (width / 2);\n                }\n                else {\n                    previousEnd = isInverse ? options.x : options.x + width;\n                }\n            }\n            else {\n                previousEnd = isInverse ? options.x : options.x + width;\n            }\n            // Previous label actual end value (End)\n            // ------- Hide Calculation (End) -------------\n            // label Rotataion calculation (Start)\n            if (angle !== 0) {\n                var height = void 0;\n                var rect_1 = void 0;\n                if (isAxisBreakLabel) {\n                    var xAdjustment = 0;\n                    var yAdjustment = 0;\n                    height = (label.breakLabelSize.height);\n                    yAdjustment = (label.breakLabelSize.height) - 4; // 4 for label bound correction\n                    // xAdjustment (Start)\n                    if (axis.lineBreakAlignment === 'Center') {\n                        xAdjustment = -(label.breakLabelSize.width / 2);\n                    }\n                    else if (axis.lineBreakAlignment === 'Right') {\n                        xAdjustment = -label.breakLabelSize.width;\n                    }\n                    // xAdjustment (End)\n                    if (isLabelUnderAxisLine) {\n                        yAdjustment = (label.breakLabelSize.height) / (options.text.length + 1);\n                    }\n                    rect_1 = new Rect(options.x + xAdjustment, options.y - (yAdjustment), label.breakLabelSize.width, height);\n                }\n                else {\n                    height = (pointY) - (options.y - ((label.size.height / 2)));\n                    rect_1 = new Rect(options.x, options.y - ((label.size.height / 2) - 5), label.size.width, height);\n                }\n                var rectCoordinates = this.getRectanglePoints(rect_1);\n                var rectCenterX = isAxisBreakLabel ? rect_1.x + (rect_1.width / 2) : pointX;\n                var rectCenterY = isAxisBreakLabel ? rect_1.y + (rect_1.height / 2) : (pointY - (height / 2));\n                if (isAxisBreakLabel) {\n                    options.transform = 'rotate(' + angle + ',' + rectCenterX + ',' + rectCenterY + ')';\n                }\n                else {\n                    options.transform = 'rotate(' + angle + ',' + pointX + ',' + pointY + ')';\n                }\n                newPoints.push(getRotatedRectangleCoordinates(rectCoordinates, rectCenterX, rectCenterY, angle));\n                isRotatedLabelIntersect = false;\n                if (axis.labelIntersectAction !== 'None') {\n                    for (var index_1 = i; index_1 > 0; index_1--) {\n                        if (newPoints[i] && newPoints[index_1 - 1] && isRotatedRectIntersect(newPoints[i], newPoints[index_1 - 1])) {\n                            isRotatedLabelIntersect = true;\n                            newPoints[i] = null;\n                            break;\n                        }\n                    }\n                }\n                var rotateAngle = ((angle > 0 && angle < 90) || (angle > 180 && angle < 270) || (angle < -90 && angle > -180) || (angle < -270 && angle > -360));\n                var textRect = new Rect(options.x, options.y - (elementSize.height / 2 + padding / 2), label.size.width, height);\n                var textRectCoordinates = this.getRectanglePoints(textRect);\n                var rectPoints = [];\n                rectPoints.push(new ChartLocation(rotateAngle ? this.chart.availableSize.width : this.padding, axis.rect.y));\n                rectPoints.push(new ChartLocation(rotateAngle ? this.chart.availableSize.width : this.padding, axis.rect.y + axis.maxLabelSize.height));\n                textPoints.push(getRotatedRectangleCoordinates(textRectCoordinates, rectCenterX, rectCenterY, angle));\n                var newRect = new Rect(0, axis.rect.y, this.chart.availableSize.width, axis.maxLabelSize.height * 2);\n                for (var k = 0; k < textPoints[i].length; k++) {\n                    if (!axis.opposedPosition && !withInBounds(textPoints[i][k].x, textPoints[i][k].y, newRect) && typeof options.text === 'string') {\n                        var interSectPoint = this.calculateIntersection(textPoints[i][0], textPoints[i][1], rectPoints[0], rectPoints[1]);\n                        var rectPoint1 = rotateAngle ? this.chart.availableSize.width - pointX : pointX;\n                        var rectPoint2 = interSectPoint.y - axis.rect.y;\n                        var trimValue = Math.sqrt((rectPoint1 * rectPoint1) + (rectPoint2 * rectPoint2));\n                        options.text = textTrim(trimValue, label.text, label.labelStyle, chart.enableRtl, chart.themeStyle.axisLabelFont);\n                    }\n                }\n            }\n            // label Rotataion calculation (End)\n            textElement(chart.renderer, options, label.labelStyle, label.labelStyle.color || chart.themeStyle.axisLabelFont.color, labelElement, (axis.isAxisOpposedPosition !== (axis.labelPosition === 'Inside')), chart.redraw, true, null, null, null, label.size, isRotatedLabelIntersect, chart.enableCanvas, null, chart.themeStyle.axisLabelFont);\n        }\n        if (!this.chart.enableCanvas) {\n            if (!chart.delayRedraw) {\n                parent.appendChild(labelElement);\n            }\n            else if (axis.visible && axis.internalVisibility) {\n                this.createZoomingLabel(this.chart, labelElement, axis, index, rect);\n            }\n        }\n    };\n    CartesianAxisLayoutPanel.prototype.calculateIntersection = function (p1, p2, p3, p4) {\n        var c2x = p3.x - p4.x;\n        var c3x = p1.x - p2.x;\n        var c2y = p3.y - p4.y;\n        var c3y = p1.y - p2.y;\n        var d = c3x * c2y - c3y * c2x;\n        var u1 = p1.x * p2.y - p1.y * p2.x;\n        var u4 = p3.x * p4.y - p3.y * p4.x;\n        var px = (u1 * c2x - c3x * u4) / d;\n        var py = (u1 * c2y - c3y * u4) / d;\n        var p = { x: px, y: py };\n        return p;\n    };\n    /**\n     * To get text anchor value for line break labels.\n     *\n     * @param {Axis} axis axis model\n     * @returns {string} returns text anchor\n     */\n    CartesianAxisLayoutPanel.prototype.getAnchor = function (axis) {\n        return (axis.lineBreakAlignment === 'Center' ? 'middle' : (this.chart.enableRtl) ? (axis.lineBreakAlignment === 'Left' ? 'end' : 'start') : (axis.lineBreakAlignment === 'Left' ? 'start' : 'end'));\n    };\n    /**\n     * Get rect coordinates\n     *\n     * @param {Rect} rect rect\n     * @returns {ChartLocation[]} rectangle points\n     */\n    CartesianAxisLayoutPanel.prototype.getRectanglePoints = function (rect) {\n        var point1 = new ChartLocation(rect.x, rect.y);\n        var point2 = new ChartLocation(rect.x + rect.width, rect.y);\n        var point3 = new ChartLocation(rect.x + rect.width, rect.y + rect.height);\n        var point4 = new ChartLocation(rect.x, rect.y + rect.height);\n        return [point1, point2, point3, point4];\n    };\n    /**\n     * To get axis label text\n     *\n     * @param {VisibleLabels} label label\n     * @param {Axis} axis axis\n     * @param {number} intervalLength intervalLength\n     * @returns {string | string[]} label or label collection\n     */\n    CartesianAxisLayoutPanel.prototype.getLabelText = function (label, axis, intervalLength) {\n        if (isBreakLabel(label.originalText)) {\n            var result = [];\n            var str = void 0;\n            for (var index = 0; index < label.text.length; index++) {\n                str = this.findAxisLabel(axis, label.text[index], intervalLength);\n                result.push(str);\n            }\n            return result;\n        }\n        else {\n            return this.findAxisLabel(axis, label.text, intervalLength);\n        }\n    };\n    /**\n     * To render the x-axis label border.\n     *\n     * @param {Axis} axis axis\n     * @param {number} index index\n     * @param {Element} parent parent\n     * @param {Rect} axisRect axisRect\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.drawXAxisBorder = function (axis, index, parent, axisRect) {\n        if (axis.border.width > 0) {\n            var scrollBarHeight = axis.labelPosition === 'Outside' ? axis.scrollBarHeight : 0;\n            var isOpposed = axis.isAxisOpposedPosition;\n            var startX = void 0;\n            var startY = axisRect.y + ((isOpposed ? -1 : 1) * scrollBarHeight);\n            var padding = 10;\n            var pointX = void 0;\n            var gap = (axisRect.width / axis.visibleRange.delta) * (axis.valueType === 'DateTime' ? axis.dateTimeInterval\n                : axis.visibleRange.interval);\n            var endX = void 0;\n            var length_2 = axis.maxLabelSize.height +\n                ((axis.tickPosition === axis.labelPosition) ? axis.majorTickLines.height : 0);\n            var labelBorder = '';\n            var ticksbwtLabel = (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') ? -0.5 : 0;\n            var endY = ((isOpposed && axis.labelPosition === 'Inside') ||\n                (!isOpposed && axis.labelPosition === 'Outside')) ?\n                (axisRect.y + length_2 + padding + scrollBarHeight) : (axisRect.y - length_2 - padding - scrollBarHeight);\n            for (var i = 0, len = axis.visibleLabels.length; i < len; i++) {\n                pointX = valueToCoefficient(axis.visibleLabels[i].value + ticksbwtLabel, axis);\n                pointX = (axis.isAxisInverse ? (1 - pointX) : pointX) * axisRect.width;\n                if (axis.valueType === 'Category' && axis.labelPlacement === 'BetweenTicks') {\n                    startX = pointX + axisRect.x;\n                    endX = pointX + (gap) + axisRect.x;\n                }\n                else {\n                    startX = pointX - gap * 0.5 + axisRect.x;\n                    endX = pointX + gap * 0.5 + axisRect.x;\n                }\n                switch (axis.border.type) {\n                    case 'Rectangle':\n                    case 'WithoutTopBorder':\n                        if (startX < axisRect.x && axis.labelPlacement !== 'OnTicks') {\n                            labelBorder += ('M' + ' ' + axisRect.x + ' ' + endY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n                        }\n                        else if (Math.floor(endX) > axisRect.width + axisRect.x && !(axis.visibleLabels.length === 1) && !(i === axis.visibleLabels.length - 1)) {\n                            labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n                                'L' + ' ' + (axisRect.width + axisRect.x) + ' ' + endY + ' ');\n                        }\n                        else {\n                            startX = (i === 0 && axis.labelPlacement === 'OnTicks') ? axisRect.x : startX;\n                            endX = ((i === axis.visibleLabels.length - 1) && axis.labelPlacement === 'OnTicks') ? endX - gap * 0.5 : endX;\n                            labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' +\n                                endY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ');\n                            if (i === 0) {\n                                labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n                                    'M ' + startX + ' ' + endY + ' L ' + (axisRect.x) + ' ' + endY);\n                            }\n                            if (i === axis.visibleLabels.length - 1) {\n                                labelBorder += ('M' + ' ' + endX + ' ' + startY + ' ' + 'L' + ' ' + endX + ' ' + endY + ' ' +\n                                    'M ' + endX + ' ' + endY + ' L ' + (axisRect.width + axisRect.x) + ' ' + endY);\n                            }\n                        }\n                        break;\n                    case 'WithoutTopandBottomBorder':\n                        if (!(startX < axisRect.x) && !(Math.floor(endX) > axisRect.width + axisRect.x)) {\n                            labelBorder += ('M' + ' ' + startX + ' ' + startY + ' ' + 'L' + ' ' + startX + ' ' + endY + ' ' +\n                                'M ' + endX + ' ' + startY + ' L ' + endX + ' ' + endY);\n                        }\n                        break;\n                }\n            }\n            labelBorder += (axis.border.type === 'Rectangle' ? ('M ' + ' ' + axisRect.x + ' ' + startY + 'L' + ' ' +\n                (axisRect.x + axisRect.width) + ' ' + startY) : '');\n            if (labelBorder !== '') {\n                this.createAxisBorderElement(axis, index, labelBorder, parent);\n            }\n        }\n        for (var i = 0; i < this.chart.visibleSeries.length; i++) {\n            if (this.chart.multiLevelLabelModule && axis.multiLevelLabels.length > 0 && this.chart.visibleSeries[i].visible) {\n                this.chart.multiLevelLabelModule.renderXAxisMultiLevelLabels(axis, index, parent, axisRect);\n                break;\n            }\n        }\n    };\n    /**\n     * To create border element of the axis\n     *\n     * @param {Axis} axis axis\n     * @param {number} index index\n     * @param {string} labelBorder labelBorder\n     * @param {Element} parent parent\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.createAxisBorderElement = function (axis, index, labelBorder, parent) {\n        var element = getElement(this.chart.element.id + '_BorderLine_' + index);\n        var direction = element ? element.getAttribute('d') : '';\n        var borderElement = this.chart.renderer.drawPath(new PathOption(this.chart.element.id + '_BorderLine_' + index, 'transparent', axis.border.width, axis.border.color || this.chart.themeStyle.axisLine, 1, '', labelBorder));\n        borderElement.style.pointerEvents = 'none';\n        appendChildElement(this.chart.enableCanvas, parent, borderElement, this.chart.redraw, false, 'x', 'y', null, direction, true);\n    };\n    /**\n     * To find the axis label of the intersect action\n     *\n     * @param {Axis} axis axis\n     * @param {string} label label\n     * @param {number} width width\n     * @returns {string} label\n     */\n    CartesianAxisLayoutPanel.prototype.findAxisLabel = function (axis, label, width) {\n        return (axis.labelIntersectAction === 'Trim' ?\n            ((axis.angle % 360 === 0 && !axis.enableTrim) ? textTrim(width, label, axis.labelStyle, this.chart.enableRtl, this.chart.themeStyle.axisLabelFont) : label) : label);\n    };\n    /**\n     * X-Axis Title function performed\n     *\n     * @param {Axis} axis axis\n     * @param {number} index index\n     * @param {Element} parent parent\n     * @param {Rect} rect rect\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.drawXAxisTitle = function (axis, index, parent, rect) {\n        if (axis.title) {\n            var chart = this.chart;\n            var elementSize = measureText(axis.title, axis.titleStyle, this.chart.themeStyle.axisTitleFont);\n            var scrollBarHeight = isNullOrUndefined(axis.crossesAt) ? axis.scrollBarHeight : 0;\n            var padding = (axis.tickPosition === 'Inside' ? 0 : axis.majorTickLines.height + axis.titlePadding) +\n                (axis.labelPosition === 'Inside' ? 0 :\n                    axis.maxLabelSize.height + axis.multiLevelLabelHeight + axis.labelPadding);\n            var titleSize = (axis.titleSize.height * (axis.titleCollection.length - 1));\n            padding = axis.isAxisOpposedPosition ? -(padding + elementSize.height / 4 + scrollBarHeight + titleSize) : (padding + (3 *\n                elementSize.height / 4) + scrollBarHeight);\n            var labelRotation = axis.titleRotation ? axis.titleRotation : 0;\n            var x = void 0;\n            var y = rect.y + padding;\n            var anchor = void 0;\n            if (axis.titleStyle.textAlignment === 'Center') {\n                anchor = 'middle';\n                x = rect.x + rect.width * 0.5;\n            }\n            else if (axis.titleStyle.textAlignment === 'Near') {\n                anchor = 'start';\n                x = rect.x;\n            }\n            else {\n                anchor = 'end';\n                x = rect.x + rect.width;\n            }\n            if (labelRotation !== 0) {\n                y += axis.opposedPosition ? -(axis.titleSize.height / 2 + elementSize.height / 4) :\n                    axis.titleSize.height / 2 - elementSize.height / 4;\n            }\n            var options = new TextOption(chart.element.id + '_AxisTitle_' + index, x, y, anchor, axis.titleCollection, 'rotate(' + labelRotation + ',' + (x) + ',' + (y) + ')', null, labelRotation);\n            var element = textElement(chart.renderer, options, axis.titleStyle, axis.titleStyle.color || chart.themeStyle.axisTitleFont.color, parent, null, null, null, null, null, null, null, null, chart.enableCanvas, null, chart.themeStyle.axisTitleFont);\n            element.setAttribute('aria-hidden', 'true');\n        }\n    };\n    /**\n     * To render the axis grid and tick lines(Both Major and Minor)\n     *\n     * @param {Axis} axis axis\n     * @param {number} index index\n     * @param {string} gridDirection gridDirection\n     * @param {MajorTickLinesModel | MinorTickLinesModel | MajorGridLinesModel | MinorGridLinesModel} gridModel gridModel\n     * @param {string} gridId gridId\n     * @param {number} gridIndex gridIndex\n     * @param {Element} parent parent\n     * @param {string} themeColor themeColor\n     * @param {string} dashArray dashArray\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.renderGridLine = function (axis, index, gridDirection, gridModel, gridId, gridIndex, parent, themeColor, dashArray) {\n        if (dashArray === void 0) { dashArray = null; }\n        var chart = this.chart;\n        var direction;\n        var element;\n        if (gridModel.width > 0 && axis.visible && axis.internalVisibility && gridDirection) {\n            element = getElement(chart.element.id + gridId + index + '_' + gridIndex);\n            direction = element ? element.getAttribute('d') : null;\n            element = null;\n            this.htmlObject = chart.renderer.drawPath(new PathOption(chart.element.id + gridId + index + '_' + gridIndex, 'transparent', gridModel.width, gridModel.color || themeColor, null, dashArray, gridDirection));\n            appendChildElement(chart.enableCanvas, parent, this.htmlObject, chart.redraw, true, 'x', 'y', null, direction, true);\n        }\n    };\n    /**\n     * To Find the parent node of the axis\n     *\n     * @param {string} elementId elementId\n     * @param {Element} label label\n     * @param {number} index index\n     * @returns {Element} parent node of the axis\n     */\n    CartesianAxisLayoutPanel.prototype.findParentNode = function (elementId, label, index) {\n        if (document.getElementById(elementId + 'AxisGroup' + index + 'Inside').contains(document.getElementById(label.id))) {\n            return document.getElementById(elementId + 'AxisGroup' + index + 'Inside');\n        }\n        else {\n            return document.getElementById(elementId + 'AxisGroup' + index + 'Outside');\n        }\n    };\n    /**\n     * Create Zooming Labels Function Called here\n     *\n     * @param {Chart} chart chart\n     * @param {Element} labelElement labelElement\n     * @param {Axis} axis axis\n     * @param {number} index index\n     * @param {Rect} rect rect\n     * @returns {void}\n     */\n    CartesianAxisLayoutPanel.prototype.createZoomingLabel = function (chart, labelElement, axis, index, rect) {\n        var parentNode = this.findParentNode(chart.element.id, labelElement, index);\n        labelElement.setAttribute('opacity', '0.3');\n        var zoomElement = chart.renderer.createGroup({\n            id: chart.element.id + 'AxisLabels_Zoom' + index\n        });\n        zoomElement = createZoomingLabels(chart, axis, zoomElement, index, axis.orientation === 'Vertical', rect);\n        parentNode.replaceChild(labelElement, document.getElementById(labelElement.id));\n        if (getElement(chart.element.id + 'AxisLabels_Zoom' + index)) {\n            parentNode.replaceChild(zoomElement, document.getElementById(zoomElement.id));\n        }\n        else {\n            parentNode.appendChild(zoomElement);\n        }\n    };\n    return CartesianAxisLayoutPanel;\n}());\nexport { CartesianAxisLayoutPanel };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable jsdoc/check-param-names */\n/* eslint-disable jsdoc/require-param-type */\n/* eslint-disable jsdoc/require-param */\n/* eslint-disable jsdoc/require-param-description */\n/* eslint-disable valid-jsdoc */\nimport { drawSymbol } from '../../common/utils/helper';\nimport { PathOption, Size } from '@syncfusion/ej2-svg-base';\nimport { Browser, extend, remove, isNullOrUndefined, Animation } from '@syncfusion/ej2-base';\nimport { ChartData } from '../../chart/utils/get-data';\nimport { withInBounds, PointData, stopTimer } from '../../common/utils/helper';\nimport { colorNameToHex, convertHexToColor } from '../../common/utils/helper';\n/**\n * Marker Module used to render the marker for line type series.\n */\nvar MarkerExplode = /** @class */ (function (_super) {\n    __extends(MarkerExplode, _super);\n    /**\n     * Constructor for the marker module.\n     *\n     * @private\n     */\n    function MarkerExplode(chart) {\n        var _this = _super.call(this, chart) || this;\n        _this.elementId = chart.element.id;\n        _this.commonXvalues = [];\n        return _this;\n    }\n    /**\n     * @hidden\n     */\n    MarkerExplode.prototype.addEventListener = function () {\n        if (this.chart.isDestroyed) {\n            return;\n        }\n        this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n        this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n    };\n    /**\n     * @hidden\n     */\n    MarkerExplode.prototype.removeEventListener = function () {\n        if (this.chart.isDestroyed) {\n            return;\n        }\n        this.chart.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n        this.chart.off(Browser.touchEndEvent, this.mouseUpHandler);\n    };\n    /**\n     * @hidden\n     */\n    MarkerExplode.prototype.mouseUpHandler = function () {\n        var chart = this.chart;\n        if (chart.isTouch && !chart.crosshair.enable && !this.isSelected(chart)) {\n            this.markerMove(true);\n        }\n    };\n    /**\n     * @hidden\n     */\n    MarkerExplode.prototype.mouseMoveHandler = function () {\n        var chart = this.chart;\n        if ((chart.highlightMode !== 'None' || (chart.tooltip.enable)) && (!chart.isTouch || chart.startMove) && !this.isSelected(chart)) {\n            this.markerMove(false);\n        }\n    };\n    MarkerExplode.prototype.markerMove = function (remove) {\n        var _this = this;\n        var chart = this.chart;\n        this.currentPoints = [];\n        var data;\n        var previous;\n        var explodeSeries;\n        var series;\n        if (!chart.tooltip.shared || !chart.tooltip.enable) {\n            data = this.getData();\n            series = data.series;\n            previous = this.previousPoints[0];\n            explodeSeries = series && ((series.type === 'Bubble' || series.drawType === 'Scatter' || series.type === 'Scatter') ||\n                (((series.type !== 'Candle') && (series.type !== 'Hilo') && (series.type !== 'HiloOpenClose')) &&\n                    (series.marker.visible && series.marker.width !== 0 && series.marker.height !== 0)));\n            data.lierIndex = this.lierIndex;\n            if (data.point && explodeSeries && ((!previous || (previous.point !== data.point)) ||\n                (previous && previous.lierIndex > 3 && previous.lierIndex !== this.lierIndex))) {\n                this.currentPoints.push(data);\n            }\n            if (data.point && explodeSeries && chart.isPointMouseDown) {\n                this.currentPoints.push(data);\n            }\n        }\n        else {\n            if (!withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n                return null;\n            }\n            if (chart.tooltip.enable) {\n                var pointData = chart.chartAreaType === 'PolarRadar' ? this.getData() : null;\n                if (!this.chart.tooltip.showNearestPoint) {\n                    this.currentPoints = this.chart.tooltipModule.currentPoints;\n                }\n                else {\n                    for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n                        var chartSeries = _a[_i];\n                        if (!chartSeries.enableTooltip || chartSeries.category === 'Indicator') {\n                            continue;\n                        }\n                        if (chart.chartAreaType === 'Cartesian' && chartSeries.visible) {\n                            data = this.getClosestX(chart, chartSeries, this.commonXValue(this.chart.visibleSeries));\n                        }\n                        else if (chart.chartAreaType === 'PolarRadar' && chartSeries.visible && pointData.point !== null) {\n                            data = new PointData(chartSeries.points[pointData.point.index], chartSeries);\n                        }\n                        if (data) {\n                            this.currentPoints.push(data);\n                            data = null;\n                        }\n                    }\n                }\n            }\n        }\n        var length = this.previousPoints.length;\n        if (this.currentPoints.length > 0 || (length > 0 && chart.tooltip.shared)) {\n            if (length === 0 || chart.isPointMouseDown || (length > 0 && (this.currentPoints.length == 0 || (this.previousPoints[0].point !== this.currentPoints[0].point)))) {\n                if (length > 0) {\n                    for (var _b = 0, _c = this.previousPoints; _b < _c.length; _b++) {\n                        var previousPoint = _c[_b];\n                        if (!isNullOrUndefined(previousPoint)) {\n                            this.removeHighlightedMarker(previousPoint.series, previousPoint.point);\n                        }\n                    }\n                }\n                var _loop_1 = function (data_1) {\n                    if ((data_1 && data_1.point) || ((series.type !== 'Candle') &&\n                        (series.type !== 'Hilo') && (series.type !== 'HiloOpenClose'))) {\n                        stopTimer(this_1.markerExplode);\n                        this_1.isRemove = true;\n                        data_1.point.symbolLocations.map(function (location, index) {\n                            if (data_1.series.marker.allowHighlight && (!data_1.series.isRectSeries || data_1.point.marker.visible)) {\n                                _this.drawTrackBall(data_1.series, data_1.point, location, index);\n                            }\n                        });\n                    }\n                };\n                var this_1 = this;\n                for (var _d = 0, _e = this.currentPoints; _d < _e.length; _d++) {\n                    var data_1 = _e[_d];\n                    _loop_1(data_1);\n                }\n                this.previousPoints = extend([], this.currentPoints, null, true);\n            }\n        }\n        if (!chart.tooltip.enable && ((this.currentPoints.length === 0 && this.isRemove) || (remove && this.isRemove) ||\n            !withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect))) {\n            this.isRemove = false;\n            if (!isNullOrUndefined(this.previousPoints[0])) {\n                this.markerExplode = +setTimeout(function () {\n                    if (_this.previousPoints[0]) {\n                        _this.removeHighlightedMarker(_this.previousPoints[0].series, _this.previousPoints[0].point);\n                    }\n                }, 2000);\n            }\n        }\n        this.currentPoints = [];\n    };\n    MarkerExplode.prototype.animationDuration = function () {\n        var duration = 200;\n        if (this.chart.maxPointCount > 100) {\n            duration = 10;\n        }\n        else if (this.chart.maxPointCount > 50) {\n            duration = 100;\n        }\n        return duration;\n    };\n    MarkerExplode.prototype.drawTrackBall = function (series, point, location, index) {\n        var marker = point.marker;\n        var seriesMarker = series.marker;\n        var shape = marker.shape || seriesMarker.shape || 'Circle';\n        var svg;\n        if (shape === 'None' || shape === 'Image') {\n            return null;\n        }\n        var element = series.symbolElement || series.seriesElement;\n        var className;\n        if (this.chart.highlightModule && this.chart.highlightMode !== 'None') {\n            className = this.chart.highlightModule.generateStyle(series);\n        }\n        if (this.chart.selectionModule && this.chart.selectionMode !== 'None') {\n            className = this.chart.selectionModule.generateStyle(series);\n        }\n        var symbolId = this.elementId + '_Series_' + series.index + '_Point_' + point.index + '_Trackball' +\n            (index ? index : '');\n        var size = new Size((marker.width || seriesMarker.width) + 3, (marker.height || seriesMarker.height) + 3);\n        var border = (marker.border || series.border);\n        var explodeSeries = (series.type === 'BoxAndWhisker' || series.type === 'Bubble' || series.type === 'Scatter');\n        var borderColor = (border.color && border.color !== 'transparent') ? border.color :\n            marker.fill || point.interior || (explodeSeries ? point.color : series.interior);\n        var colorValue = convertHexToColor(colorNameToHex(borderColor));\n        var borderWidth = marker.border ? marker.border.width : seriesMarker.border.width;\n        var markerShadow = series.chart.themeStyle.markerShadow ||\n            'rgba(' + colorValue.r + ',' + colorValue.g + ',' + colorValue.b + ',0.2)';\n        var markerElement = document.getElementById(this.elementId + '_Series_' + series.index + '_Point_' +\n            point.index + '_Symbol');\n        if (!isNullOrUndefined(markerElement)) {\n            markerElement.setAttribute('visibility', 'hidden');\n        }\n        if (this.chart.enableCanvas) {\n            var trackElement = document.getElementById(this.chart.element.id + '_Secondary_Element');\n            svg = this.chart.svgRenderer.createSvg({\n                id: this.chart.element.id + '_trackball_svg',\n                width: this.chart.availableSize.width,\n                height: this.chart.availableSize.height\n            });\n            svg.style.cssText = 'position: absolute; pointer-events: none';\n            trackElement.appendChild(svg);\n        }\n        for (var i = 0; i < 2; i++) {\n            var options = new PathOption(symbolId + '_' + i, i ? (marker.fill || point.color || (explodeSeries ? series.interior : '#ffffff')) : 'transparent', borderWidth + (i ? 0 : 8), i ? borderColor : markerShadow, (marker.opacity || seriesMarker.opacity), null, null);\n            var symbol = drawSymbol(location, shape, size, marker.imageUrl, options, '', this.chart.svgRenderer, series.clipRect);\n            // incident: 252450 point click selection not working while maker explode\n            //symbol.setAttribute('style', 'pointer-events:none');\n            symbol.setAttribute('class', this.elementId + '_EJ2-Trackball_Series_' + series.index + '_Point_' + point.index);\n            var selectionId = element.id.indexOf('Symbol') !== -1 ? '_Symbol' : '';\n            var seletionElem = document.getElementById(this.elementId + '_Series_' + series.index + '_Point_' +\n                point.index + selectionId);\n            if (className !== '' && !isNullOrUndefined(className) && !isNullOrUndefined(seletionElem) &&\n                seletionElem.hasAttribute('class') && (className === seletionElem.getAttribute('class'))) {\n                symbol.classList.add(className);\n            }\n            symbol.setAttribute('clip-path', element.getAttribute('clip-path'));\n            symbol.setAttribute('transform', element.getAttribute('transform'));\n            if (this.chart.enableCanvas) {\n                svg.appendChild(symbol);\n            }\n            else {\n                this.chart.svgObject.appendChild(symbol);\n            }\n        }\n        this.doAnimation(series, point, false);\n    };\n    /**\n     * Animates the series.\n     *\n     * @param  {Series} series - Defines the series to animate.\n     * @returns {void}\n     */\n    MarkerExplode.prototype.doAnimation = function (series, point, endAnimate) {\n        if (endAnimate === void 0) { endAnimate = false; }\n        var duration = this.animationDuration();\n        var delay = series.animation.delay;\n        var rectElements = document.getElementsByClassName(this.elementId + '_EJ2-Trackball_Series_' + series.index + '_Point_' + point.index);\n        for (var i = 0, len = rectElements.length; i < len; i++) {\n            this.trackballAnimate(rectElements[i], delay, duration, series, point.index, point.symbolLocations[0], false, endAnimate);\n        }\n    };\n    /**\n     * Animation Effect Calculation End\n     *\n     * @private\n     */\n    MarkerExplode.prototype.trackballAnimate = function (elements, delays, durations, series, pointIndex, point, isLabel, endAnimate) {\n        var centerX = point.x;\n        var centerY = point.y;\n        var clipX = (series.type !== 'Polar' && series.type !== 'Radar') ? series.clipRect.x : 0;\n        var clipY = (series.type !== 'Polar' && series.type !== 'Radar') ? series.clipRect.y : 0;\n        var height = 0;\n        //(<HTMLElement>elements).style.visibility = 'hidden';\n        var reducedHeight = endAnimate ? -8 : 1;\n        var transform = elements.getAttribute('transform');\n        new Animation({}).animate(elements, {\n            duration: durations,\n            delay: delays,\n            progress: function (args) {\n                if (args.timeStamp > args.delay) {\n                    args.element.style.visibility = 'visible';\n                    height = ((args.timeStamp - args.delay) / args.duration);\n                    elements.setAttribute('transform', 'translate(' + (centerX + clipX)\n                        + ' ' + (centerY + clipY) + ') scale(1) translate(' + (-centerX) + ' ' + (-centerY) + ')');\n                }\n            },\n            end: function () {\n                elements.style.visibility = '';\n                elements.setAttribute('transform', transform);\n                if (!isLabel && (pointIndex === series.points.length - 1)) {\n                    series.chart.trigger('animationComplete', { series: series.chart.isBlazor ? {} : series });\n                }\n                if (endAnimate) {\n                    remove(elements);\n                }\n            }\n        });\n    };\n    /**\n     * @param series\n     * @param point\n     * @param fadeOut\n     * @param series\n     * @param point\n     * @param fadeOut\n     * @param series\n     * @param point\n     * @param fadeOut\n     * @hidden\n     */\n    MarkerExplode.prototype.removeHighlightedMarker = function (series, point, fadeOut) {\n        if (series === void 0) { series = null; }\n        if (point === void 0) { point = null; }\n        if (fadeOut === void 0) { fadeOut = false; }\n        if (!isNullOrUndefined(series) && !isNullOrUndefined(point)) {\n            var markerElement = document.getElementById(this.elementId + '_Series_' + series.index + '_Point_' +\n                point.index + '_Symbol');\n            var trackballElements = document.getElementsByClassName(this.elementId + '_EJ2-Trackball_Series_' + series.index + '_Point_' + point.index);\n            for (var i = 0, len = trackballElements.length; i < len; i++) {\n                remove(trackballElements[0]);\n            }\n            if (!isNullOrUndefined(markerElement)) {\n                markerElement.setAttribute('visibility', 'visible');\n            }\n        }\n        else {\n            for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n                var point_1 = _a[_i];\n                var elements = document.getElementsByClassName(this.elementId + '_EJ2-Trackball_Series_' + series.index + '_Point_' + point_1.index);\n                var markerElement = document.getElementById(this.elementId + '_Series_' + series.index + '_Point_' +\n                    point_1.index + '_Symbol');\n                for (var i = 0, len = elements.length; i < len; i++) {\n                    if (!isNullOrUndefined(markerElement)) {\n                        markerElement.setAttribute('visibility', 'visible');\n                    }\n                    remove(elements[0]);\n                }\n            }\n        }\n        if (fadeOut) {\n            this.previousPoints = [];\n        }\n    };\n    return MarkerExplode;\n}(ChartData));\nexport { MarkerExplode };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-param */\nimport { RectOption, appendChildElement, getElement, appendClipElement } from '../../common/utils/helper';\nimport { findlElement, drawSymbol, markerAnimate, CircleOption } from '../../common/utils/helper';\nimport { PathOption, Size } from '@syncfusion/ej2-svg-base';\nimport { animationMode, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { pointRender } from '../../common/model/constants';\nimport { MarkerExplode } from './marker-explode';\nimport { getSaturationColor } from '../../common/utils/helper';\nexport var markerShapes = [\"Circle\", \"Triangle\", \"Diamond\", \"Rectangle\", \"Pentagon\", \"InvertedTriangle\", \"VerticalLine\", \"Cross\", \"Plus\", \"HorizontalLine\"];\n/**\n * Marker module used to render the marker for line type series.\n */\nvar Marker = /** @class */ (function (_super) {\n    __extends(Marker, _super);\n    /**\n     * Constructor for the marker module.\n     *\n     * @private\n     */\n    function Marker(chart) {\n        var _this = _super.call(this, chart) || this;\n        _this.addEventListener();\n        return _this;\n    }\n    /**\n     * Render the marker for series.\n     *\n     * @returns {void}\n     * @private\n     */\n    Marker.prototype.render = function (series) {\n        var _this = this;\n        var redraw = series.chart.redraw;\n        this.createElement(series, redraw);\n        var _loop_1 = function (point) {\n            if (point.visible && point.symbolLocations && point.symbolLocations.length) {\n                point.symbolLocations.map(function (location, index) {\n                    if (series.marker.shape !== 'None') {\n                        _this.renderMarker(series, point, location, index, redraw);\n                    }\n                });\n            }\n        };\n        for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n            var point = _a[_i];\n            _loop_1(point);\n        }\n    };\n    Marker.prototype.renderMarker = function (series, point, location, index, redraw) {\n        var seriesIndex = series.index === undefined ? series.category : series.index;\n        var marker = series.marker;\n        series.marker.shape = series.marker.shape ? series.marker.shape : markerShapes[seriesIndex % 10];\n        var border = {\n            color: marker.border.color,\n            width: marker.border.width\n        };\n        var borderColor = marker.border.color;\n        var previousLocation;\n        var previousPath;\n        var circlePath;\n        var shapeOption;\n        location.x = location.x + marker.offset.x;\n        location.y = location.y - marker.offset.y;\n        var isBoxPlot = series.type === 'BoxAndWhisker';\n        var fill = marker.fill || ((isBoxPlot || series.marker.isFilled) ? point.interior || series.interior : '#ffffff');\n        var markerElement;\n        var parentElement = isBoxPlot ?\n            findlElement(series.seriesElement.childNodes, 'Series_' + series.index + '_Point_' + point.index)\n            : series.symbolElement;\n        border.color = borderColor || series.setPointColor(point, series.interior);\n        var symbolId = this.elementId + '_Series_' + seriesIndex + '_Point_' + point.index + '_Symbol' +\n            (index ? index : '');\n        var argsData = {\n            cancel: false, name: pointRender, series: series, point: point,\n            fill: point.isEmpty ? (series.emptyPointSettings.fill || fill) : fill,\n            border: {\n                color: series.type === 'BoxAndWhisker' ?\n                    (!isNullOrUndefined(borderColor) && borderColor !== 'transparent') ? borderColor :\n                        getSaturationColor(fill, -0.6)\n                    : border.color,\n                width: border.width\n            },\n            height: marker.height, width: marker.width, shape: marker.shape\n        };\n        argsData.border = series.setBorderColor(point, { width: argsData.border.width, color: argsData.border.color });\n        if (!series.isRectSeries || series.type === 'BoxAndWhisker') {\n            this.chart.trigger(pointRender, argsData);\n            point.color = argsData.fill;\n        }\n        point.color = argsData.fill;\n        if (!argsData.cancel) {\n            var y = void 0;\n            if (series.type === 'RangeArea' || series.type === 'RangeColumn' || series.drawType === 'RangeColumn'\n                || series.type === 'SplineRangeArea' || series.type === 'RangeStepArea') {\n                y = index ? point.low : point.high;\n            }\n            else if (isBoxPlot) {\n                y = point.outliers[index];\n            }\n            else {\n                y = point.y;\n            }\n            var markerFill = argsData.point.marker.fill || argsData.fill;\n            var markerBorder = void 0;\n            if (!isNullOrUndefined(argsData.point.marker.border)) {\n                markerBorder = {\n                    color: argsData.point.marker.border.color || argsData.border.color,\n                    width: argsData.point.marker.border.width || argsData.border.width\n                };\n            }\n            else {\n                markerBorder = { color: argsData.border.color, width: argsData.border.width };\n            }\n            var markerWidth = argsData.point.marker.width || argsData.width;\n            var markerHeight = argsData.point.marker.height || argsData.height;\n            var markerOpacity = argsData.point.marker.opacity || marker.opacity;\n            var markerShape = argsData.point.marker.shape || argsData.shape;\n            var imageURL = argsData.point.marker.imageUrl || marker.imageUrl;\n            shapeOption = new PathOption(symbolId, markerFill, markerBorder.width, markerBorder.color, markerOpacity, null);\n            if ((parentElement !== undefined && parentElement !== null) || this.chart.enableCanvas) {\n                if (redraw && getElement(shapeOption.id)) {\n                    markerElement = getElement(shapeOption.id);\n                    circlePath = markerShape === 'Circle' ? 'c' : '';\n                    previousLocation = {\n                        x: +markerElement.getAttribute(circlePath + 'x'), y: +markerElement.getAttribute(circlePath + 'y')\n                    };\n                    previousPath = markerElement.getAttribute('d');\n                }\n                markerElement = drawSymbol(location, markerShape, new Size(markerWidth, markerHeight), imageURL, shapeOption, point.x.toString() + ':' + y.toString(), this.chart.renderer, series.clipRect);\n                if (markerElement) {\n                    markerElement.setAttribute('role', 'img');\n                    markerElement.setAttribute('aria-label', (point.x + ': ' + point.y + ', ' + series.name));\n                }\n                appendChildElement(this.chart.enableCanvas, parentElement, markerElement, redraw, true, circlePath + 'x', circlePath + 'y', previousLocation, previousPath, false, false, null, series.chart.duration);\n            }\n            point.marker = {\n                border: markerBorder, fill: markerFill, height: markerHeight,\n                visible: true, shape: markerShape, width: markerWidth, imageUrl: imageURL\n            };\n        }\n        else {\n            location = null;\n            point.marker = {\n                visible: false\n            };\n        }\n    };\n    Marker.prototype.createElement = function (series, redraw) {\n        var markerClipRect;\n        var marker = series.marker;\n        // 8 for extend border value 5 for extend size value\n        var explodeValue = marker.border.width + 8 + 5;\n        var render = series.chart.svgRenderer;\n        var index = series.index === undefined ? series.category : series.index;\n        var options;\n        var transform = series.chart.chartAreaType === 'Cartesian' ? 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')' : '';\n        if (marker.visible) {\n            var markerHeight = (marker.height + explodeValue) / 2;\n            var markerWidth = (marker.width + explodeValue) / 2;\n            if (series.chart.chartAreaType === 'Cartesian') {\n                var isZoomed = series.xAxis.zoomFactor < 1 || series.xAxis.zoomPosition > 0;\n                options = new RectOption(this.elementId + '_ChartMarkerClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n                    x: isZoomed ? 0 : -markerWidth, y: -markerHeight,\n                    width: series.clipRect.width + (isZoomed ? 0 : markerWidth * 2),\n                    height: series.clipRect.height + markerHeight * 2\n                });\n                markerClipRect = appendClipElement(redraw, options, render);\n            }\n            else {\n                options = new CircleOption(this.elementId + '_ChartMarkerClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, series.clipRect.width / 2 + series.clipRect.x, series.clipRect.height / 2 + series.clipRect.y, series.chart.radius + Math.max(markerHeight, markerWidth));\n                markerClipRect = appendClipElement(redraw, options, render, 'drawCircularClipPath');\n            }\n            options = {\n                'id': this.elementId + 'SymbolGroup' + index,\n                'transform': transform,\n                'clip-path': 'url(#' + this.elementId + '_ChartMarkerClipRect_' + index + ')'\n            };\n            series.symbolElement = render.createGroup(options);\n            series.symbolElement.appendChild(markerClipRect);\n            if (this.chart.enableCanvas) {\n                var element = document.getElementById(this.chart.element.id + '_tooltip_svg');\n                element.appendChild(series.symbolElement);\n            }\n        }\n    };\n    Marker.prototype.getRangeLowPoint = function (region, series) {\n        var x = region.x;\n        var y = region.y;\n        if (series.chart.requireInvertedAxis) {\n            y += region.height / 2;\n            x += series.yAxis.isAxisInverse ? region.width : 0;\n        }\n        else {\n            y += series.yAxis.isAxisInverse ? 0 : region.height;\n            x += region.width / 2;\n        }\n        return { x: x, y: y };\n    };\n    /**\n     * Animates the marker.\n     *\n     * @returns {void}\n     * @private\n     */\n    Marker.prototype.doMarkerAnimation = function (series) {\n        if (!(series.type === 'Scatter' || series.type === 'Bubble' || series.type === 'Candle' || series.type === 'Hilo' ||\n            series.type === 'HiloOpenClose' || (series.chart.chartAreaType === 'PolarRadar' && (series.drawType === 'Scatter')))) {\n            var markerElements = series.symbolElement.childNodes;\n            var delay = series.animation.delay + (series.animation.duration === 0 && animationMode === 'Enable' ? 1000 : series.animation.duration);\n            var duration = series.chart.animated ? series.chart.duration : 200;\n            var j = 1;\n            var incFactor = (series.type === 'RangeArea' || series.type === 'RangeColumn' || series.type === 'SplineRangeArea' || series.type === 'RangeStepArea') ? 2 : 1;\n            for (var i = 0; i < series.points.length; i++) {\n                if (series.points[i].symbolLocations) {\n                    if (!series.points[i].symbolLocations.length || !markerElements[j]) {\n                        continue;\n                    }\n                    markerAnimate(markerElements[j], delay, duration, series, i, series.points[i].symbolLocations[0], false);\n                    if (incFactor === 2) {\n                        var lowPoint = this.getRangeLowPoint(series.points[i].regions[0], series);\n                        markerAnimate(markerElements[j + 1], delay, duration, series, i, lowPoint, false);\n                    }\n                    j += incFactor;\n                }\n            }\n        }\n    };\n    return Marker;\n}(MarkerExplode));\nexport { Marker };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-param */\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// <reference path='../series/chart-series-model.d.ts' />\nimport { Property, Complex } from '@syncfusion/ej2-base';\nimport { Connector } from '../../common/model/base';\nimport { SeriesBase } from '../series/chart-series';\nimport { firstToLowerCase } from '../../common/utils/helper';\nimport { Rect } from '@syncfusion/ej2-svg-base';\n/**\n * Defines how to represent the market trend using technical indicators\n */\nvar TechnicalIndicator = /** @class */ (function (_super) {\n    __extends(TechnicalIndicator, _super);\n    function TechnicalIndicator() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** @private */\n        _this.clipRect = new Rect(0, 0, 0, 0);\n        return _this;\n    }\n    /** @private */\n    TechnicalIndicator.prototype.setDataSource = function (series, chart) {\n        if (series) {\n            this.xData = series.xData;\n            this.yData = series.yData;\n            this.points = series.points;\n        }\n        var type = firstToLowerCase(this.type);\n        if (this.visible) {\n            chart[type + 'IndicatorModule'].initDataSource(this, chart);\n        }\n        chart.visibleSeriesCount += this.targetSeries.length;\n    };\n    __decorate([\n        Property('Sma')\n    ], TechnicalIndicator.prototype, \"type\", void 0);\n    __decorate([\n        Property(14)\n    ], TechnicalIndicator.prototype, \"period\", void 0);\n    __decorate([\n        Property(14)\n    ], TechnicalIndicator.prototype, \"kPeriod\", void 0);\n    __decorate([\n        Property(3)\n    ], TechnicalIndicator.prototype, \"dPeriod\", void 0);\n    __decorate([\n        Property(80)\n    ], TechnicalIndicator.prototype, \"overBought\", void 0);\n    __decorate([\n        Property(20)\n    ], TechnicalIndicator.prototype, \"overSold\", void 0);\n    __decorate([\n        Property(2)\n    ], TechnicalIndicator.prototype, \"standardDeviation\", void 0);\n    __decorate([\n        Property('Close')\n    ], TechnicalIndicator.prototype, \"field\", void 0);\n    __decorate([\n        Property(12)\n    ], TechnicalIndicator.prototype, \"slowPeriod\", void 0);\n    __decorate([\n        Property(26)\n    ], TechnicalIndicator.prototype, \"fastPeriod\", void 0);\n    __decorate([\n        Property(true)\n    ], TechnicalIndicator.prototype, \"showZones\", void 0);\n    __decorate([\n        Complex({ color: '#ff9933', width: 2 }, Connector)\n    ], TechnicalIndicator.prototype, \"macdLine\", void 0);\n    __decorate([\n        Property('Both')\n    ], TechnicalIndicator.prototype, \"macdType\", void 0);\n    __decorate([\n        Property('#2ecd71')\n    ], TechnicalIndicator.prototype, \"macdPositiveColor\", void 0);\n    __decorate([\n        Property('#e74c3d')\n    ], TechnicalIndicator.prototype, \"macdNegativeColor\", void 0);\n    __decorate([\n        Property('rgba(211,211,211,0.25)')\n    ], TechnicalIndicator.prototype, \"bandColor\", void 0);\n    __decorate([\n        Complex({ color: '#ffb735', width: 1 }, Connector)\n    ], TechnicalIndicator.prototype, \"upperLine\", void 0);\n    __decorate([\n        Complex({ color: '#f2ec2f', width: 1 }, Connector)\n    ], TechnicalIndicator.prototype, \"lowerLine\", void 0);\n    __decorate([\n        Complex({ color: '#f2ec2f', width: 1 }, Connector)\n    ], TechnicalIndicator.prototype, \"periodLine\", void 0);\n    __decorate([\n        Property('')\n    ], TechnicalIndicator.prototype, \"seriesName\", void 0);\n    return TechnicalIndicator;\n}(SeriesBase));\nexport { TechnicalIndicator };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable jsdoc/valid-types */\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable jsdoc/require-param-type */\n/* eslint-disable jsdoc/require-returns-description */\n/* eslint-disable @typescript-eslint/no-this-alias */\n/* eslint-disable curly */\n/* eslint-disable @typescript-eslint/tslint/config */\n/* eslint-disable no-case-declarations */\n/* eslint-disable max-len */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable jsdoc/require-param */\n/* eslint-disable valid-jsdoc */\nimport { Component, Property, NotifyPropertyChanges, Internationalization } from '@syncfusion/ej2-base';\nimport { L10n, setValue, isNullOrUndefined, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { ChildProperty } from '@syncfusion/ej2-base';\nimport { remove, extend } from '@syncfusion/ej2-base';\nimport { Browser, Touch } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, Complex, Collection } from '@syncfusion/ej2-base';\nimport { findClipRect, showTooltip, ImageOption, removeElement, appendChildElement, blazorTemplatesReset, withInBounds } from '../common/utils/helper';\nimport { textElement, RectOption, createSvg, firstToLowerCase, titlePositionX, redrawElement, getTextAnchor } from '../common/utils/helper';\nimport { appendClipElement, ChartLocation } from '../common/utils/helper';\nimport { getSeriesColor, getThemeColor } from '../common/model/theme';\nimport { Margin, Border, ChartArea, Indexes, TooltipSettings, titleSettings } from '../common/model/base';\nimport { Row, Column, Axis } from './axis/axis';\nimport { CartesianAxisLayoutPanel } from './axis/cartesian-panel';\nimport { Rect, measureText, TextOption, Size, SvgRenderer } from '@syncfusion/ej2-svg-base';\nimport { ChartData } from './utils/get-data';\nimport { Series } from './series/chart-series';\nimport { Data } from '../common/model/data';\nimport { Marker, markerShapes } from './series/marker';\nimport { LegendSettings } from '../common/legend/legend';\nimport { TechnicalIndicator } from './technical-indicators/technical-indicator';\nimport { chartMouseClick, chartDoubleClick, pointClick, pointDoubleClick, axisLabelClick, beforeResize } from '../common/model/constants';\nimport { chartMouseDown, chartMouseMove, chartMouseUp, load, pointMove, chartMouseLeave, resized } from '../common/model/constants';\nimport { ChartAnnotationSettings } from './model/chart-base';\nimport { getElement, getTitle } from '../common/utils/helper';\nimport { PrintUtils } from '../common/utils/print';\n/**\n * Configures the RangeColorSetting in the chart.\n */\nvar RangeColorSetting = /** @class */ (function (_super) {\n    __extends(RangeColorSetting, _super);\n    function RangeColorSetting() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property()\n    ], RangeColorSetting.prototype, \"start\", void 0);\n    __decorate([\n        Property()\n    ], RangeColorSetting.prototype, \"end\", void 0);\n    __decorate([\n        Property([])\n    ], RangeColorSetting.prototype, \"colors\", void 0);\n    __decorate([\n        Property('')\n    ], RangeColorSetting.prototype, \"label\", void 0);\n    return RangeColorSetting;\n}(ChildProperty));\nexport { RangeColorSetting };\n/**\n * Configures the crosshair in the chart.\n */\nvar CrosshairSettings = /** @class */ (function (_super) {\n    __extends(CrosshairSettings, _super);\n    function CrosshairSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(false)\n    ], CrosshairSettings.prototype, \"enable\", void 0);\n    __decorate([\n        Property('')\n    ], CrosshairSettings.prototype, \"dashArray\", void 0);\n    __decorate([\n        Complex({ color: null, width: 1 }, Border)\n    ], CrosshairSettings.prototype, \"line\", void 0);\n    __decorate([\n        Property('Both')\n    ], CrosshairSettings.prototype, \"lineType\", void 0);\n    __decorate([\n        Property('')\n    ], CrosshairSettings.prototype, \"verticalLineColor\", void 0);\n    __decorate([\n        Property('')\n    ], CrosshairSettings.prototype, \"horizontalLineColor\", void 0);\n    __decorate([\n        Property(1)\n    ], CrosshairSettings.prototype, \"opacity\", void 0);\n    return CrosshairSettings;\n}(ChildProperty));\nexport { CrosshairSettings };\n/**\n * Configures the zooming behavior for the chart.\n */\nvar ZoomSettings = /** @class */ (function (_super) {\n    __extends(ZoomSettings, _super);\n    function ZoomSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(false)\n    ], ZoomSettings.prototype, \"enableSelectionZooming\", void 0);\n    __decorate([\n        Property(false)\n    ], ZoomSettings.prototype, \"enablePinchZooming\", void 0);\n    __decorate([\n        Property(false)\n    ], ZoomSettings.prototype, \"showToolbar\", void 0);\n    __decorate([\n        Property(false)\n    ], ZoomSettings.prototype, \"enableMouseWheelZooming\", void 0);\n    __decorate([\n        Property(true)\n    ], ZoomSettings.prototype, \"enableDeferredZooming\", void 0);\n    __decorate([\n        Property('XY')\n    ], ZoomSettings.prototype, \"mode\", void 0);\n    __decorate([\n        Property(['Zoom', 'ZoomIn', 'ZoomOut', 'Pan', 'Reset'])\n    ], ZoomSettings.prototype, \"toolbarItems\", void 0);\n    __decorate([\n        Property(false)\n    ], ZoomSettings.prototype, \"enablePan\", void 0);\n    __decorate([\n        Property(false)\n    ], ZoomSettings.prototype, \"enableScrollbar\", void 0);\n    return ZoomSettings;\n}(ChildProperty));\nexport { ZoomSettings };\n/**\n * Represents the Chart control.\n * ```html\n * <div id=\"chart\"/>\n * <script>\n *   var chartObj = new Chart({ isResponsive : true });\n *   chartObj.appendTo(\"#chart\");\n * </script>\n * ```\n *\n * @public\n */\nvar Chart = /** @class */ (function (_super) {\n    __extends(Chart, _super);\n    /**\n     * Constructor for creating the widget\n     *\n     * @hidden\n     */\n    function Chart(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        /** @private */\n        _this.rotatedDataLabelCollections = [];\n        /** @public */\n        _this.animated = false;\n        /** @private */\n        _this.isPointMouseDown = false;\n        /** @private */\n        _this.isScrolling = false;\n        /** @private */\n        _this.checkResize = 0;\n        /** @private */\n        _this.visible = 0;\n        /** @private */\n        _this.clickCount = 0;\n        /** @private */\n        _this.maxPointCount = 0;\n        /** @private */\n        _this.singleClickTimer = 0;\n        /** @private */\n        _this.chartAreaType = 'Cartesian';\n        /** @private */\n        _this.isRtlEnabled = false;\n        /** @private */\n        _this.scaleX = 1;\n        /** @private */\n        _this.scaleY = 1;\n        _this.isCrosshair = true;\n        _this.chartid = 57723;\n        /** @private */\n        _this.isLegendClicked = false;\n        _this.isZoomed = false;\n        _this.previousTargetId = '';\n        _this.currentPointIndex = 0;\n        _this.currentSeriesIndex = 0;\n        _this.currentLegendIndex = 0;\n        _this.previousPageX = null;\n        _this.previousPageY = null;\n        _this.allowPan = false;\n        setValue('mergePersistData', _this.mergePersistChartData, _this);\n        return _this;\n    }\n    /**\n     * To manage persist chart data\n     */\n    Chart.prototype.mergePersistChartData = function () {\n        var data = window.localStorage.getItem(this.getModuleName() + this.element.id);\n        if (!(isNullOrUndefined(data) || (data === ''))) {\n            var dataObj = JSON.parse(data);\n            var keys = Object.keys(dataObj);\n            this.isProtectedOnChange = true;\n            for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n                var key = keys_1[_i];\n                if ((typeof this[key] === 'object') && !isNullOrUndefined(this[key])) {\n                    extend(this[key], dataObj[key]);\n                }\n                else {\n                    this[key] = dataObj[key];\n                }\n            }\n            this.isProtectedOnChange = false;\n        }\n    };\n    /**\n     *\n     * @param elementId\n     * Return the proper ID when the special character exist in the ID\n     */\n    Chart.prototype.isIdHasSpecialCharacter = function (elementId) {\n        var regex = /^[A-Za-z ]+$/;\n        var numberRegex = /^[0-9 ]+$/;\n        var childElementId = '';\n        if (!regex.test(elementId)) {\n            var start = 0;\n            if (numberRegex.test(elementId[0])) {\n                childElementId += ('\\\\3' + elementId[0]);\n                start = 1;\n            }\n            for (var i = start; i < elementId.length; i++) {\n                if (!regex.test(elementId[i]) && elementId.indexOf('-') === -1 &&\n                    elementId.indexOf('_') === -1 && elementId.indexOf('\\\\') === -1 && !numberRegex.test(elementId[i])) {\n                    childElementId += ('\\\\' + elementId[i]);\n                }\n                else {\n                    childElementId += elementId[i];\n                }\n            }\n            return childElementId;\n        }\n        else {\n            return elementId;\n        }\n    };\n    /**\n     * Initialize the event handler.\n     */\n    Chart.prototype.preRender = function () {\n        this.element.id = this.isIdHasSpecialCharacter(this.element.id);\n        // It is used for checking blazor framework or not.\n        var blazor = 'Blazor';\n        this.isBlazor = window[blazor];\n        this.allowServerDataBinding = false;\n        this.markerIndex = 0;\n        this.unWireEvents();\n        this.initPrivateVariable();\n        this.setCulture();\n        this.wireEvents();\n        if (this.stockChart) {\n            if (this.stockChart.tooltip.header === null) {\n                this.tooltip.header = '<b>${point.x}</b>';\n            }\n            if (this.stockChart.tooltip.format === null) {\n                this.tooltip.format = 'High : <b>${point.high}</b><br/>Low :' +\n                    ' <b>${point.low}</b><br/>Open : <b>${point.open}</b><br/>Close : <b>${point.close}</b>';\n            }\n        }\n        this.element.setAttribute('dir', this.enableRtl ? 'rtl' : '');\n    };\n    Chart.prototype.initPrivateVariable = function () {\n        this.animateSeries = true;\n        this.delayRedraw = false;\n        this.dragY = null;\n        this.horizontalAxes = [];\n        this.verticalAxes = [];\n        this.refreshAxis();\n        this.refreshDefinition(this.rows);\n        this.refreshDefinition(this.columns);\n        if (this.tooltipModule) {\n            this.tooltipModule.previousPoints = [];\n        }\n        this.element.setAttribute('role', 'region');\n        this.element.setAttribute('tabindex', '0');\n        this.element.setAttribute('aria-label', this.description || this.title + '. Syncfusion interactive chart.');\n        if (!(this.element.classList.contains(\"e-chart-focused\"))) {\n            this.element.setAttribute('class', this.element.getAttribute('class') + ' e-chart-focused');\n        }\n        if (this.element.id === '') {\n            var collection = document.getElementsByClassName('e-chart').length;\n            var elementid = 'chart_' + this.chartid + '_' + collection;\n            while (document.getElementById(elementid)) {\n                collection++;\n                elementid = 'chart_' + this.chartid + '_' + collection;\n            }\n            this.element.id = 'chart_' + this.chartid + '_' + collection;\n        }\n        //seperate ID to differentiate chart and stock chart\n        this.svgId = this.stockChart ? this.stockChart.element.id + '_stockChart_chart' :\n            this.element.id + (this.enableCanvas ? '_canvas' : '_svg');\n    };\n    /**\n     * To Initialize the control rendering.\n     */\n    Chart.prototype.render = function () {\n        var _this = this;\n        this.svgRenderer = new SvgRenderer(this.element.id);\n        var loadEventData = {\n            chart: this.isBlazor ? {} : this, theme: this.theme, name: load, cancel: false\n        };\n        if (!this.stockChart) {\n            /**\n             * Load event for the chart will be triggered only chart componet, if this is stock chart, load event did not triggered.\n             */\n            this.trigger(load, loadEventData, function () {\n                if (!loadEventData.cancel) {\n                    _this.cartesianChartRendering(loadEventData);\n                }\n            });\n        }\n        else {\n            // The fix is specific for nextjs app, as window is set as not defined for server side application like nextjs.\n            this.isRtlEnabled = (window.getComputedStyle(document.querySelector('body')).direction === 'rtl');\n            this.cartesianChartRendering(loadEventData);\n        }\n        this.applyZoomkit();\n    };\n    Chart.prototype.cartesianChartRendering = function (beforeRenderData) {\n        this.theme = this.isBlazor ? beforeRenderData.theme : this.theme;\n        this.setTheme();\n        this.createChartSvg();\n        this.markerRender = new Marker(this);\n        this.calculateAreaType();\n        this.calculateVisibleSeries();\n        this.initTechnicalIndicators();\n        this.initTrendLines();\n        this.calculateVisibleAxis();\n        this.processData();\n        this.renderComplete();\n        this.mouseMoveEvent();\n        this.allowServerDataBinding = true;\n    };\n    /**\n     * Gets the localized label by locale keyword.\n     *\n     * @param  {string} key key\n     * @returns {string} localized label\n     */\n    Chart.prototype.getLocalizedLabel = function (key) {\n        return this.localeObject.getConstant(key);\n    };\n    /**\n     * Animate the series bounds.\n     *\n     * @private\n     */\n    Chart.prototype.animate = function (duration) {\n        this.redraw = true;\n        this.animated = true; //used to set duration as 1000 for animation at default 300\n        this.duration = duration ? duration : 1000;\n        if (this.tooltipModule) {\n            this.tooltipModule.removeHighlightedMarker(this.tooltipModule.previousPoints, true);\n        }\n        else if (this.markerRender.previousPoints) {\n            for (var previousPoint = 0; previousPoint < this.markerRender.previousPoints.length; previousPoint++)\n                this.markerRender.removeHighlightedMarker(this.markerRender.previousPoints[previousPoint].series, this.markerRender.previousPoints[previousPoint].point);\n        }\n    };\n    /**\n     * Refresh the chart bounds.\n     *\n     * @private\n     */\n    Chart.prototype.refreshBound = function () {\n        this.rotatedDataLabelCollections = [];\n        if (this.legendModule && this.legendSettings.visible) {\n            this.legendModule.getLegendOptions(this.visibleSeries, this);\n        }\n        /**\n         * I264230, EJ2-36761\n         * Issue: Tooltip doesnot appears after zooming and hovering on same point\n         * Root cause: While performing zoom, previous points in tooltip restore.\n         * Fix: previous points set to empty array\n         */\n        if (this.tooltip.enable && this.tooltipModule) {\n            this.tooltipModule.previousPoints = [];\n        }\n        this.calculateStackValues();\n        this.calculateBounds();\n        //this prevents the initial rendering of stock chart\n        if (this.stockChart && !this.stockChart.rangeFound) {\n            if (this.stockChart.enablePeriodSelector || this.stockChart.enableSelector) {\n                return null;\n            }\n        }\n        this.renderElements();\n        removeElement('chartmeasuretext');\n        this.removeSelection();\n        if (this.markerRender) {\n            this.markerRender.mergeXvalues(this.visibleSeries);\n        }\n    };\n    /**\n     * To calcualte the stack values\n     */\n    Chart.prototype.calculateStackValues = function () {\n        var series;\n        var isCalculateStacking = false;\n        for (var i = 0, len = this.visibleSeries.length; i < len; i++) {\n            series = this.visibleSeries[i];\n            series.position = series.rectCount = undefined;\n            if (((series.type.indexOf('Stacking') !== -1) || (series.drawType.indexOf('Stacking') !== -1\n                && this.chartAreaType === 'PolarRadar')) && !isCalculateStacking) {\n                series.calculateStackedValue(series.type.indexOf('100') > -1, this);\n                isCalculateStacking = true;\n            }\n        }\n    };\n    Chart.prototype.removeSelection = function () {\n        for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n            var series = _a[_i];\n            if (series.visible) {\n                for (var _b = 0, _c = series.points; _b < _c.length; _b++) {\n                    var point = _c[_b];\n                    point.isSelect = false;\n                }\n            }\n        }\n        if (getElement(this.element.id + '_ej2_drag_multi_group')) {\n            if (this.selectionMode.indexOf('Drag') > -1) {\n                this.selectionModule.filterArray = [];\n            }\n            removeElement(this.element.id + '_ej2_drag_multi_group');\n            this.selectionModule.calculateDragSelectedElements(this, new Rect(0, 0, 0, 0), true);\n        }\n        else if (getElement(this.element.id + '_ej2_drag_group')) {\n            if (this.selectionMode !== 'Lasso') {\n                this.selectionModule.filterArray = [];\n            }\n            removeElement(this.element.id + '_ej2_drag_group');\n            this.selectionModule.calculateDragSelectedElements(this, new Rect(0, 0, 0, 0), true);\n        }\n    };\n    Chart.prototype.renderElements = function () {\n        this.renderBorder();\n        this.renderTitle();\n        this.renderAreaBorder();\n        this.renderSeriesElements(this.renderAxes());\n        this.renderLegend();\n        this.applyZoomkit();\n        this.performSelection();\n        this.setSecondaryElementPosition();\n        for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n            var value = _a[_i];\n            updateBlazorTemplate(this.element.id + '_DataLabel', 'Template', value.marker.dataLabel);\n        }\n        this.renderAnnotation();\n    };\n    /**\n     * To render the legend\n     *\n     * @private\n     */\n    Chart.prototype.renderAxes = function () {\n        this.yAxisElements = this.renderer.createGroup({ id: this.element.id + 'yAxisCollection' });\n        var axisElement;\n        if (this.rows.length > 0 && this.columns.length > 0) {\n            axisElement = this.chartAxisLayoutPanel.renderAxes();\n        }\n        if (this.stripLineModule) {\n            this.stripLineModule.renderStripLine(this, 'Behind', this.axisCollections);\n        }\n        return axisElement;\n    };\n    /**\n     * To render the legend\n     */\n    Chart.prototype.renderLegend = function () {\n        if (this.legendModule && this.legendModule.legendCollections.length && this.legendSettings.visible) {\n            this.legendModule.calTotalPage = true;\n            var borderWidth = this.legendSettings.border.width;\n            var bounds = this.legendModule.legendBounds;\n            var rect = new Rect(bounds.x, bounds.y, bounds.width, bounds.height);\n            if (this.enableCanvas) {\n                rect = new Rect(rect.x - borderWidth / 2, rect.y - borderWidth / 2, rect.width + borderWidth, rect.height + borderWidth);\n                this.renderer.canvasClip(rect);\n            }\n            this.legendModule.renderLegend(this, this.legendSettings, bounds);\n            if (this.enableCanvas) {\n                this.renderer.canvasRestore();\n            }\n        }\n        if (!this.redraw) {\n            if (!this.stockChart) {\n                this.element.appendChild(this.svgObject);\n            }\n            else {\n                if (!getElement(this.stockChart.chartObject.id)) {\n                    this.stockChart.mainObject.appendChild(this.svgObject);\n                }\n            }\n        }\n    };\n    /**\n     * To set the left and top position for data label template for center aligned chart\n     */\n    Chart.prototype.setSecondaryElementPosition = function () {\n        var element = getElement(this.element.id + '_Secondary_Element');\n        if (!element) {\n            return;\n        }\n        var rect = this.element.getBoundingClientRect();\n        var svgRect = getElement(this.svgId).getBoundingClientRect();\n        element.style.left = Math.max(svgRect.left - rect.left, 0) + 'px';\n        element.style.top = Math.max(svgRect.top - rect.top, 0) + 'px';\n    };\n    Chart.prototype.initializeModuleElements = function () {\n        this.dataLabelCollections = [];\n        var elementId = this.element.id;\n        if (this.series.length) {\n            this.seriesElements = this.svgRenderer.createGroup({ id: elementId + 'SeriesCollection' });\n        }\n        if (this.indicators.length) {\n            this.indicatorElements = this.renderer.createGroup({ id: elementId + 'IndicatorCollection' });\n        }\n        if (this.hasTrendlines()) {\n            this.trendLineElements = this.renderer.createGroup({ id: elementId + 'TrendLineCollection' });\n        }\n        this.dataLabelElements = this.renderer.createGroup({ id: elementId + 'DataLabelCollection' });\n    };\n    Chart.prototype.hasTrendlines = function () {\n        var isTrendline;\n        for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n            var series = _a[_i];\n            isTrendline = series.trendlines.length ? true : false;\n            if (isTrendline) {\n                break;\n            }\n        }\n        return isTrendline;\n    };\n    Chart.prototype.renderSeriesElements = function (axisElement) {\n        // Initialize the series elements values\n        this.initializeModuleElements();\n        var elementId = this.element.id;\n        if (this.element.tagName !== 'g') {\n            var tooltipDiv = redrawElement(this.redraw, elementId + '_Secondary_Element') ||\n                this.createElement('div');\n            tooltipDiv.id = elementId + '_Secondary_Element';\n            tooltipDiv.style.cssText = 'position: relative';\n            appendChildElement(false, this.element, tooltipDiv, this.redraw);\n        }\n        // For canvas\n        if (this.enableCanvas) {\n            var tooltipdiv = document.getElementById(elementId + '_Secondary_Element');\n            tooltipdiv = !tooltipdiv ? this.createElement('div', { id: elementId + '_Secondary_Element',\n                attrs: { 'style': 'position: relative; left:0px; top:0px' } }) : tooltipdiv;\n            var svg = this.svgRenderer.createSvg({\n                id: elementId + '_tooltip_svg',\n                width: this.availableSize.width,\n                height: this.availableSize.height\n            });\n            svg.style.cssText = 'position: absolute; pointer-events: none';\n            tooltipdiv.appendChild(svg);\n        }\n        // For userInteraction\n        if (this.tooltip.enable) {\n            appendChildElement(this.enableCanvas, this.svgObject, this.renderer.createGroup({ id: elementId + '_UserInteraction', style: 'pointer-events:none;' }), this.redraw);\n        }\n        if (this.rows.length > 0 && this.columns.length > 0) {\n            this.initializeIndicator();\n            this.initializeTrendLine();\n            this.renderSeries();\n            // Trendline is append to DOM after the series\n            if (this.trendLineElements) {\n                appendChildElement(this.enableCanvas, this.svgObject, this.trendLineElements, this.redraw);\n            }\n            this.appendElementsAfterSeries(axisElement);\n        }\n    };\n    /**\n     * @private\n     */\n    Chart.prototype.renderSeries = function () {\n        var visibility;\n        if (this.enableCanvas) {\n            // To clip the series rect for canvas\n            this.renderer.canvasClip(this.chartAxisLayoutPanel.seriesClipRect);\n        }\n        for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n            var item = _a[_i];\n            if (item.category === 'TrendLine') {\n                visibility = this.series[item.sourceIndex].trendlines[item.index].visible;\n            }\n            else {\n                visibility = item.visible;\n            }\n            if (visibility) {\n                this.visible++;\n                findClipRect(item, this.enableCanvas);\n                if (this.enableCanvas) {\n                    // To render scatter and bubble series in canvas\n                    this.renderCanvasSeries(item);\n                }\n                item.renderSeries(this);\n            }\n        }\n        if (this.enableCanvas) {\n            this.renderer.canvasRestore();\n        }\n        this.visible = 0;\n        var options = {\n            'id': this.element.id + '_ChartAreaClipRect_',\n            'x': this.chartAxisLayoutPanel.seriesClipRect.x,\n            'y': this.chartAxisLayoutPanel.seriesClipRect.y,\n            'width': this.chartAxisLayoutPanel.seriesClipRect.width,\n            'height': this.chartAxisLayoutPanel.seriesClipRect.height,\n            'fill': 'transparent',\n            'stroke-width': 1,\n            'stroke': 'Gray'\n        };\n        if (!this.seriesElements) {\n            return;\n        }\n        var clipRectElement;\n        if (this.chartAreaType === 'PolarRadar') {\n            clipRectElement = appendClipElement(this.redraw, options, this.renderer, 'drawCircularClipPath');\n        }\n        else {\n            clipRectElement = appendClipElement(this.redraw, options, this.renderer);\n        }\n        if (!this.enableCanvas) {\n            this.seriesElements.appendChild(clipRectElement);\n        }\n        var seriesSvg = document.getElementById(this.element.id + '_series_svg');\n        if (seriesSvg) {\n            appendChildElement(false, seriesSvg, this.seriesElements, this.redraw);\n        }\n        else {\n            appendChildElement(this.enableCanvas, this.svgObject, this.seriesElements, this.redraw);\n        }\n    };\n    Chart.prototype.renderCanvasSeries = function (item) {\n        var svgElement;\n        // eslint-disable-next-line prefer-const\n        svgElement = (this.enableCanvas) ?\n            svgElement : this.svgObject;\n        var canvas = (this.enableCanvas) ?\n            false : this.enableCanvas;\n    };\n    Chart.prototype.initializeIndicator = function () {\n        for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n            var indicator = _a[_i];\n            if (this[firstToLowerCase(indicator.type) + 'IndicatorModule']) {\n                this[firstToLowerCase(indicator.type) + 'IndicatorModule'].createIndicatorElements(this, indicator, indicator.index);\n            }\n        }\n        if (this.indicatorElements) {\n            appendChildElement(this.enableCanvas, this.svgObject, this.indicatorElements, this.redraw);\n        }\n    };\n    Chart.prototype.initializeTrendLine = function () {\n        for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n            var series = _a[_i];\n            if (series.trendlines.length) {\n                this.trendLineModule.getTrendLineElements(series, this);\n            }\n        }\n    };\n    Chart.prototype.appendElementsAfterSeries = function (axisElement) {\n        if (this.chartAreaType === 'PolarRadar') {\n            appendChildElement(this.enableCanvas, this.svgObject, this.yAxisElements, this.redraw);\n        }\n        appendChildElement(this.enableCanvas, this.svgObject, axisElement, this.redraw);\n        if ((this.zoomModule && this.zoomSettings.enableScrollbar && this.scrollElement.childElementCount) ||\n            (this.scrollElement && this.scrollElement.childElementCount)) {\n            appendChildElement(false, getElement(this.element.id + '_Secondary_Element'), this.scrollElement, this.redraw);\n        }\n        if (this.stripLineModule) {\n            this.stripLineModule.renderStripLine(this, 'Over', this.axisCollections);\n        }\n        if (!this.tooltip.enable) {\n            appendChildElement(this.enableCanvas, this.svgObject, this.renderer.createGroup({ id: this.element.id + '_UserInteraction', style: 'pointer-events:none;' }), this.redraw);\n        }\n        if (this.stockChart) {\n            this.stockChart.calculateStockEvents();\n        }\n    };\n    Chart.prototype.applyZoomkit = function () {\n        /**\n         * Issue: Zoomkit not visible after performing refresh()\n         * Fix: this method called without checking `zoomModule.isZoomed`\n         */\n        if (this.chartAreaType === 'PolarRadar') {\n            return;\n        }\n        if (!this.redraw && this.zoomModule && (!this.zoomSettings.enablePan || this.zoomModule.performedUI || this.zoomSettings.showToolbar)) {\n            this.zoomModule.applyZoomToolkit(this, this.axisCollections);\n        }\n    };\n    /**\n     * Render annotation perform here\n     *\n     * @private\n     */\n    Chart.prototype.renderAnnotation = function () {\n        if (this.annotationModule) {\n            //for stock chart, stock chart's id is added to render the annotations\n            this.annotationModule.renderAnnotations(getElement((this.stockChart ? this.stockChart.element.id : this.element.id) + '_Secondary_Element'));\n        }\n    };\n    Chart.prototype.performSelection = function () {\n        var selectedDataIndexes = [];\n        if (this.selectionModule) {\n            selectedDataIndexes = extend([], this.selectionModule.selectedDataIndexes, null, true);\n            this.selectionModule.invokeSelection(this);\n        }\n        if (this.highlightModule) {\n            this.highlightModule.invokeHighlight(this);\n        }\n        if (selectedDataIndexes.length > 0) {\n            this.selectionModule.selectedDataIndexes = selectedDataIndexes;\n            this.selectionModule.redrawSelection(this, this.selectionMode);\n        }\n    };\n    Chart.prototype.processData = function (render) {\n        if (render === void 0) { render = true; }\n        this.visibleSeriesCount = 0;\n        var check = true;\n        var prevPointCount = 0;\n        for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n            var series = _a[_i];\n            if (!series.visible && !this.legendSettings.visible) {\n                this.visibleSeriesCount++;\n                continue;\n            }\n            if (series.category !== 'Indicator' && series.category !== 'TrendLine') {\n                this.initializeDataModule(series);\n            }\n        }\n        for (var _b = 0, _c = this.indicators; _b < _c.length; _b++) {\n            var indicator = _c[_b];\n            if (indicator.dataSource) {\n                var techIndicator = indicator;\n                this.initializeDataModule(techIndicator);\n                check = false;\n            }\n        }\n        if (render && (!this.visibleSeries.length || this.visibleSeriesCount === this.visibleSeries.length && check)) {\n            this.refreshBound();\n            this.trigger('loaded', { chart: this.isBlazor ? {} : this });\n        }\n        if (!this.stockChart && this.visibleSeries.length > 0) {\n            for (var _d = 0, _e = this.visibleSeries; _d < _e.length; _d++) {\n                var series = _e[_d];\n                if (!isNullOrUndefined(series.points)) {\n                    this.maxPointCount = Math.max(prevPointCount, series.points.length);\n                    prevPointCount = series.points.length;\n                }\n            }\n        }\n    };\n    Chart.prototype.initializeDataModule = function (series) {\n        series.xData = [];\n        series.yData = [];\n        var dataSource;\n        var isAngular = 'isAngular';\n        if (this[isAngular]) {\n            dataSource = Object.keys(series.dataSource).length ? series.dataSource : this.dataSource;\n        }\n        else {\n            dataSource = series.dataSource || this.dataSource;\n        }\n        series.dataModule = new Data(dataSource, series.query);\n        series.points = [];\n        series.refreshDataManager(this);\n    };\n    Chart.prototype.calculateBounds = function () {\n        var margin = this.margin;\n        // Title Height;\n        var titleHeight = 0;\n        var subTitleHeight = 0;\n        var titleWidth = 0;\n        var padding = this.titleStyle.position === 'Top' || (this.titleStyle.position === 'Bottom' && !this.legendSettings.visible) ? 15 : 5;\n        var left = margin.left + this.border.width;\n        var width = this.availableSize.width - left - margin.right - this.border.width;\n        var elementSpacing = 0;\n        this.titleCollection = [];\n        this.subTitleCollection = [];\n        if (this.title) {\n            this.titleCollection = getTitle(this.title, this.titleStyle, width, this.enableRtl, this.themeStyle.chartTitleFont);\n            titleHeight = (measureText(this.title, this.titleStyle, this.themeStyle.chartTitleFont).height * this.titleCollection.length) + padding;\n            if (this.subTitle) {\n                this.subTitleCollection = getTitle(this.subTitle, this.subTitleStyle, width, this.enableRtl, this.themeStyle.chartSubTitleFont);\n                subTitleHeight = (measureText(this.subTitle, this.subTitleStyle, this.themeStyle.chartSubTitleFont).height * this.subTitleCollection.length) +\n                    padding;\n            }\n        }\n        else if (this.legendSettings.position !== 'Top' && this.border.width) {\n            elementSpacing = 10;\n        }\n        var top = margin.top + elementSpacing + this.border.width + this.chartArea.border.width * 0.5;\n        var height = this.availableSize.height - top - this.border.width - margin.bottom;\n        var marginTotal = subTitleHeight + titleHeight + this.titleStyle.border.width + this.subTitleStyle.border.width;\n        switch (this.titleStyle.position) {\n            case 'Top':\n                top += marginTotal;\n                height -= marginTotal;\n                break;\n            case 'Bottom':\n                height -= marginTotal;\n                break;\n            case 'Left':\n                left += marginTotal;\n                width -= marginTotal;\n                break;\n            case 'Right':\n                left -= (this.titleStyle.border.width + this.subTitleStyle.border.width);\n                width -= marginTotal;\n                break;\n        }\n        if (this.stockChart && this.stockChart.legendSettings.visible && this.stockChart.stockLegendModule) {\n            if (this.stockChart.legendSettings.position === 'Top') {\n                top += this.stockChart.stockLegendModule.legendBounds.height;\n            }\n            else if (this.stockChart.legendSettings.position === 'Left') {\n                left += this.stockChart.stockLegendModule.legendBounds.width;\n            }\n        }\n        this.initialClipRect = new Rect(left, top, width, height);\n        if (this.legendModule && this.legendSettings.visible) {\n            this.legendModule.calculateLegendBounds(this.initialClipRect, this.availableSize, null);\n        }\n        this.chartAxisLayoutPanel.measureAxis(this.initialClipRect);\n    };\n    /**\n     * Handles the print method for chart control.\n     */\n    Chart.prototype.print = function (id) {\n        var exportChart = new PrintUtils(this);\n        var width = this.width;\n        if (this.getModuleName() == 'chart' && parseInt(this.width) >= 80 && this.width.indexOf('%') > -1) {\n            this.width = '80%';\n            this.dataBind();\n        }\n        exportChart.print(id);\n        if (this.getModuleName() == 'chart' && parseInt(this.width) >= 80 && this.width.indexOf('%') > -1) {\n            this.width = width;\n            this.dataBind();\n        }\n    };\n    /**\n     * Defines the trendline initialization\n     */\n    Chart.prototype.initTrendLines = function () {\n        this.isProtectedOnChange = true;\n        for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n            var series = _a[_i];\n            var trendIndex = 0;\n            for (var _b = 0, _c = series.trendlines; _b < _c.length; _b++) {\n                var trendline = _c[_b];\n                var trendLine = trendline;\n                if (this.trendLineModule) {\n                    trendLine.index = trendIndex;\n                    trendLine.sourceIndex = series.index;\n                    this.trendLineModule.initSeriesCollection(trendLine, this);\n                    if (trendLine.targetSeries) {\n                        trendLine.targetSeries.xAxisName = series.xAxisName;\n                        trendLine.targetSeries.yAxisName = series.yAxisName;\n                        this.visibleSeries.push(trendLine.targetSeries);\n                    }\n                }\n                trendIndex++;\n            }\n        }\n        this.isProtectedOnChange = false;\n    };\n    Chart.prototype.calculateAreaType = function () {\n        var series = this.series[0];\n        this.chartArea.border.width = this.stockChart ? 0 : this.chartArea.border.width;\n        if (series) {\n            this.requireInvertedAxis = ((series.type.indexOf('Bar') !== -1) && !this.isTransposed) ||\n                ((series.type.indexOf('Bar') === -1) && this.isTransposed && this.chartAreaType !== 'PolarRadar');\n        }\n        this.chartAxisLayoutPanel = this.chartAreaType === 'PolarRadar' ? (this.polarSeriesModule || this.radarSeriesModule)\n            : new CartesianAxisLayoutPanel(this);\n    };\n    /**\n     * Calculate the visible axis\n     *\n     * @private\n     */\n    Chart.prototype.calculateVisibleAxis = function () {\n        var axis;\n        var axes = [this.primaryXAxis, this.primaryYAxis];\n        axes = this.chartAreaType === 'Cartesian' ? axes.concat(this.axes) : axes;\n        if (this.paretoSeriesModule && this.series[0].type === 'Pareto') {\n            axes = axes.concat(this.paretoSeriesModule.paretoAxes);\n        }\n        this.axisCollections = [];\n        if (this.zoomModule) {\n            this.zoomModule.isPanning = this.zoomModule.isAxisZoomed(axes) && this.zoomSettings.enablePan;\n            this.svgObject.setAttribute('cursor', this.zoomModule.isPanning ? 'pointer' : 'auto');\n            if (this.scrollBarModule) {\n                this.scrollBarModule.axes = axes;\n            }\n        }\n        if (this.scrollSettingEnabled) {\n            if (this.scrollBarModule) {\n                this.scrollBarModule.axes = axes;\n            }\n        }\n        for (var i = 0, len = axes.length; i < len; i++) {\n            axis = axes[i];\n            axis.series = [];\n            axis.labels = [];\n            axis.indexLabels = {};\n            axis.orientation = (i == 0) ? (this.requireInvertedAxis ? 'Vertical' : 'Horizontal') :\n                (i == 1) ? (this.requireInvertedAxis ? 'Horizontal' : 'Vertical') : axis.orientation;\n            for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n                var series = _a[_i];\n                this.initAxis(series, axis, true);\n                if (series.category == 'Pareto' && series.type == 'Line' && series.yAxis) {\n                    series.yAxis.internalVisibility = series.paretoOptions.showAxis;\n                }\n            }\n            for (var _b = 0, _c = this.indicators; _b < _c.length; _b++) {\n                var indicator = _c[_b];\n                this.initAxis(indicator, axis, false);\n            }\n            if (this.scrollBarModule && !axis.zoomingScrollBar) {\n                this.scrollBarModule.injectTo(axis, this);\n            }\n            if (axis.orientation != null) {\n                this.axisCollections.push(axis);\n            }\n        }\n        if (this.rows.length > 0 && this.columns.length > 0) {\n            this.chartAxisLayoutPanel.measure();\n        }\n    };\n    Chart.prototype.initAxis = function (series, axis, isSeries) {\n        if (series.xAxisName === axis.name || (series.xAxisName == null && axis.name === 'primaryXAxis')) {\n            axis.orientation = this.requireInvertedAxis ? 'Vertical' : 'Horizontal';\n            series.xAxis = axis;\n            if (isSeries) {\n                axis.series.push(series);\n            }\n        }\n        else if (series.yAxisName === axis.name || (series.yAxisName == null && axis.name === 'primaryYAxis')) {\n            axis.orientation = this.requireInvertedAxis ? 'Horizontal' : 'Vertical';\n            series.yAxis = axis;\n            if (isSeries) {\n                axis.series.push(series);\n            }\n        }\n    };\n    Chart.prototype.initTechnicalIndicators = function () {\n        var i = 0;\n        for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n            var indicator = _a[_i];\n            var techIndicator = indicator;\n            var type = firstToLowerCase(techIndicator.type);\n            if (this[type + 'IndicatorModule']) {\n                techIndicator.index = i;\n                this[type + 'IndicatorModule'].initSeriesCollection(techIndicator, this);\n                for (var _b = 0, _c = techIndicator.targetSeries; _b < _c.length; _b++) {\n                    var targetSeries = _c[_b];\n                    if (indicator.seriesName || indicator.dataSource) {\n                        this.visibleSeries.push(targetSeries);\n                    }\n                }\n            }\n            i++;\n        }\n    };\n    /** @private */\n    Chart.prototype.refreshTechnicalIndicator = function (series) {\n        if (this.indicators.length) {\n            var targetIndicator = null;\n            if (series instanceof Series && series.category !== 'Indicator') {\n                for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n                    var indicator = _a[_i];\n                    if (indicator.seriesName === series.name && !indicator.dataSource) {\n                        targetIndicator = indicator;\n                        targetIndicator.setDataSource(series, this);\n                    }\n                }\n            }\n            else if (series instanceof TechnicalIndicator) {\n                targetIndicator = series;\n                targetIndicator.setDataSource(series instanceof Series ? series : null, this);\n            }\n        }\n    };\n    Chart.prototype.calculateVisibleSeries = function () {\n        var series;\n        this.visibleSeries = [];\n        var colors = this.palettes.length ? this.palettes : getSeriesColor(this.theme);\n        var count = colors.length;\n        var seriesCollection = this.series.sort(function (a, b) { return a.zOrder - b.zOrder; });\n        for (var i = 0, len = seriesCollection.length; i < len; i++) {\n            series = seriesCollection[i];\n            // for y axis label issue during chart navigation\n            series.category = seriesCollection[0].type === 'Pareto' ? 'Pareto' : 'Series';\n            series.index = i;\n            series.interior = series.fill || colors[i % count];\n            if (!series.marker.shape && (series.marker.visible || series.type === 'Scatter' || series.drawType === 'Scatter')) {\n                series.marker.shape = markerShapes[this.markerIndex % 10];\n                this.markerIndex++;\n            }\n            if (this.isSecondaryAxis(series.xAxis)) {\n                series.xAxis.internalVisibility = series.xAxis.series.some(function (value) { return (value.visible); });\n            }\n            if (this.isSecondaryAxis(series.yAxis)) {\n                series.yAxis.internalVisibility = series.yAxis.series.some(function (value) { return (value.visible); });\n            }\n            switch (series.type) {\n                case 'Bar':\n                case 'StackingBar':\n                case 'StackingBar100':\n                    if (seriesCollection[0].type.indexOf('Bar') === -1) {\n                        continue;\n                    }\n                    break;\n                case 'Polar':\n                case 'Radar':\n                    if (this.chartAreaType !== 'PolarRadar') {\n                        continue;\n                    }\n                    if (this.chartAreaType === 'PolarRadar' && ((series.xAxisName !== null && (this.primaryXAxis.name !== series.xAxisName)) ||\n                        (series.yAxisName !== null && (this.primaryYAxis.name !== series.yAxisName)))) {\n                        continue;\n                    }\n                    break;\n                case 'Pareto':\n                    this.visibleSeries.push(series);\n                    this.paretoSeriesModule.initSeries(series, this);\n                    continue;\n                default:\n                    if (this.chartAreaType === 'PolarRadar' || seriesCollection[0].type.indexOf('Bar') > -1) {\n                        continue;\n                    }\n                    break;\n            }\n            this.visibleSeries.push(series);\n            seriesCollection[i] = series;\n        }\n    };\n    Chart.prototype.isSecondaryAxis = function (axis) {\n        return (this.axes.indexOf(axis) > -1);\n    };\n    Chart.prototype.renderTitle = function () {\n        var rect;\n        var margin = this.margin;\n        var elementSpacing = 5;\n        if (this.title) {\n            var getAnchor = getTextAnchor(this.titleStyle.textAlignment, this.enableRtl);\n            var elementSize = measureText(this.title, this.titleStyle, this.themeStyle.chartTitleFont);\n            rect = new Rect(margin.left, 0, this.availableSize.width - margin.left - margin.right, 0);\n            var borderWidth = this.titleStyle.border.width;\n            var positionY = this.margin.top + ((elementSize.height) * 3 / 4);\n            var positionX = titlePositionX(rect, this.titleStyle || this.themeStyle.chartTitleFont) + borderWidth;\n            var rotation = void 0;\n            var alignment = this.titleStyle.textAlignment;\n            var subtitleSize = measureText(this.subTitle, this.subTitleStyle, this.themeStyle.chartSubTitleFont);\n            switch (this.titleStyle.position) {\n                case 'Top':\n                    positionY += borderWidth * 0.5;\n                    positionX += getAnchor === 'start' ? borderWidth * 0.5 + this.border.width :\n                        getAnchor === 'end' ? ((-borderWidth * 2) - this.border.width) : 0;\n                    break;\n                case 'Bottom':\n                    positionX += getAnchor === 'start' ? (borderWidth * 0.5) + this.border.width :\n                        getAnchor === 'end' ? (-borderWidth * 2) - this.border.width : 0;\n                    positionY = this.availableSize.height - this.margin.bottom - subtitleSize.height - (elementSize.height / 2) -\n                        (borderWidth * 0.5) - (this.subTitleStyle.border.width * 0.5);\n                    break;\n                case 'Left':\n                    positionX = this.margin.left + ((elementSize.height) * 3 / 4) + (borderWidth * 0.5);\n                    positionY = alignment == 'Near' ? margin.bottom + (borderWidth * 0.5) + this.border.width :\n                        alignment == 'Far' ? this.availableSize.height - margin.bottom - (borderWidth * 0.5) - this.border.width : this.availableSize.height / 2;\n                    getAnchor = alignment == 'Near' ? 'end' : alignment == 'Far' ? 'start' : 'middle';\n                    getAnchor = this.enableRtl ? (getAnchor === 'end' ? 'start' : getAnchor === 'start' ? 'end' : getAnchor) : getAnchor;\n                    rotation = 'rotate(' + -90 + ',' + positionX + ',' + positionY + ')';\n                    break;\n                case 'Right':\n                    positionX = this.availableSize.width - this.margin.right - ((elementSize.height) * 3 / 4) - (borderWidth * 0.5);\n                    positionY = alignment == 'Near' ? margin.bottom + (borderWidth * 0.5) + this.border.width :\n                        alignment == 'Far' ? this.availableSize.height - margin.bottom - (borderWidth * 0.5) - this.border.width : this.availableSize.height / 2;\n                    getAnchor = alignment == 'Near' ? 'start' : alignment == 'Far' ? 'end' : 'middle';\n                    getAnchor = this.enableRtl ? (getAnchor === 'end' ? 'start' : getAnchor === 'start' ? 'end' : getAnchor) : getAnchor;\n                    rotation = 'rotate(' + 90 + ',' + positionX + ',' + positionY + ')';\n                    break;\n                case 'Custom':\n                    positionX = this.titleStyle.x;\n                    positionY = this.titleStyle.y;\n                    getAnchor = 'middle';\n                    break;\n            }\n            var borderOptions = {\n                'id': this.element.id + '_ChartTitleBorder',\n                'x': positionX - (getAnchor === 'middle' ? (elementSize.width / 2) + elementSpacing : getAnchor === 'end' ? elementSize.width + elementSpacing : elementSpacing),\n                'y': positionY - elementSize.height + (elementSize.height / 4),\n                'rx': this.titleStyle.border.cornerRadius,\n                'ry': this.titleStyle.border.cornerRadius,\n                'width': elementSize.width + (elementSpacing * 2),\n                'height': elementSize.height * this.titleCollection.length,\n                'fill': this.titleStyle.background,\n                'stroke-width': borderWidth,\n                'stroke': this.titleStyle.border.color,\n                'transform': rotation ? rotation : '',\n                'd': ''\n            };\n            var htmlObject = redrawElement(this.redraw, this.element.id + '_ChartTitleBorder', borderOptions, this.renderer)\n                || this.renderer.drawRectangle(borderOptions);\n            appendChildElement(this.enableCanvas, this.svgObject, htmlObject, this.redraw);\n            var options = new TextOption(this.element.id + '_ChartTitle', positionX, positionY, getAnchor, this.titleCollection, rotation, 'auto');\n            var element = redrawElement(this.redraw, this.element.id + '_ChartTitle', options, this.renderer) ||\n                textElement(this.renderer, options, this.titleStyle, this.titleStyle.color || this.themeStyle.chartTitleFont.color, this.svgObject, null, null, null, null, null, null, null, null, this.enableCanvas, null, this.themeStyle.chartTitleFont);\n            if (element) {\n                element.setAttribute('tabindex', '0');\n                element.setAttribute('class', 'e-chart-focused');\n            }\n            if (this.subTitle) {\n                this.renderSubTitle(options);\n            }\n        }\n    };\n    Chart.prototype.renderSubTitle = function (options) {\n        var maxWidth = 0;\n        var titleWidth = 0;\n        var padding = 10;\n        var alignment = this.titleStyle.textAlignment;\n        for (var _i = 0, _a = this.titleCollection; _i < _a.length; _i++) {\n            var titleText = _a[_i];\n            titleWidth = measureText(titleText, this.titleStyle, this.themeStyle.chartSubTitleFont).width;\n            maxWidth = titleWidth > maxWidth ? titleWidth : maxWidth;\n        }\n        var subTitleElementSize = measureText(this.subTitleCollection.reduce(function (a, b) { return (a.length > b.length ? a : b); }), this.subTitleStyle, this.themeStyle.chartSubTitleFont);\n        var getAnchor = getTextAnchor(this.subTitleStyle.textAlignment, this.enableRtl);\n        var rect = new Rect(alignment === 'Center' ? (options.x - maxWidth * 0.5) : alignment === 'Far' ? options.x - maxWidth : options.x, 0, maxWidth, 0);\n        if (this.titleStyle.position === 'Left') {\n            rect.x = alignment === 'Center' ? (options.x - maxWidth * 0.5) : alignment == 'Far' ? this.margin.left + ((subTitleElementSize.height) * 3 / 4) : (options.x - maxWidth);\n        }\n        var elementSize = measureText(this.title, this.titleStyle, this.themeStyle.chartTitleFont);\n        var positionY = options.y * options.text.length + subTitleElementSize.height + (padding / 2) + this.titleStyle.border.width + (this.subTitleStyle.border.width * 0.5);\n        if (this.titleStyle.position === 'Bottom') {\n            positionY = options.y * options.text.length + (padding / 2) + (elementSize.height / 2) + (subTitleElementSize.height / 2);\n        }\n        var borderOptions = {\n            'id': this.element.id + '_ChartSubTitleBorder',\n            'x': titlePositionX(rect, this.subTitleStyle) - (getAnchor === 'middle' ? (subTitleElementSize.width / 2) + padding / 2 : getAnchor === 'end' ? subTitleElementSize.width + padding / 2 : padding / 2),\n            'y': positionY - subTitleElementSize.height + (subTitleElementSize.height / 4),\n            'rx': this.subTitleStyle.border.cornerRadius,\n            'ry': this.subTitleStyle.border.cornerRadius,\n            'width': subTitleElementSize.width + padding,\n            'height': subTitleElementSize.height * this.subTitleCollection.length,\n            'fill': this.subTitleStyle.background,\n            'stroke-width': this.subTitleStyle.border.width,\n            'stroke': this.subTitleStyle.border.color,\n            'transform': options.transform,\n            'd': ''\n        };\n        var htmlObject = redrawElement(this.redraw, this.element.id + '_ChartSubTitleBorder', borderOptions, this.renderer)\n            || this.renderer.drawRectangle(borderOptions);\n        appendChildElement(this.enableCanvas, this.svgObject, htmlObject, this.redraw);\n        var subTitleOptions = new TextOption(this.element.id + '_ChartSubTitle', titlePositionX(rect, this.subTitleStyle), positionY, getTextAnchor(this.subTitleStyle.textAlignment, this.enableRtl), this.subTitleCollection, options.transform, 'auto');\n        var element = redrawElement(this.redraw, this.element.id + '_ChartSubTitle', subTitleOptions, this.renderer) ||\n            textElement(this.renderer, subTitleOptions, this.subTitleStyle, this.subTitleStyle.color || this.themeStyle.chartSubTitleFont.color, this.svgObject, null, null, null, null, null, null, null, null, this.enableCanvas, null, this.themeStyle.chartSubTitleFont);\n    };\n    Chart.prototype.renderBorder = function () {\n        var x = 0;\n        var y = 0;\n        var width = this.border.width;\n        var backGroundImage = this.backgroundImage;\n        var fillColor = backGroundImage ? 'transparent' : (this.background || this.themeStyle.background);\n        if (this.stockChart && this.stockChart.legendSettings.visible && this.stockChart.stockLegendModule) {\n            if (this.stockChart.legendSettings.position === 'Top') {\n                y += this.stockChart.stockLegendModule.legendBounds.height;\n            }\n            else if (this.stockChart.legendSettings.position === 'Left') {\n                x += this.stockChart.stockLegendModule.legendBounds.width;\n            }\n        }\n        var rect = new RectOption(this.element.id + '_ChartBorder', fillColor, this.border, 1, new Rect(width * 0.5 + x, width * 0.5 + y, this.availableSize.width - width, this.availableSize.height - width));\n        this.htmlObject = redrawElement(this.redraw, this.element.id + '_ChartBorder', rect, this.renderer)\n            || this.renderer.drawRectangle(rect);\n        this.htmlObject.setAttribute('aria-hidden', 'true');\n        appendChildElement(this.enableCanvas, this.svgObject, this.htmlObject, this.redraw);\n        // to draw back ground image for chart\n        if (backGroundImage) {\n            var image = new ImageOption(this.availableSize.height - width, this.availableSize.width - width, backGroundImage, 0, 0, this.element.id + '_ChartBackground', 'visible', 'none');\n            this.htmlObject = redrawElement(this.redraw, this.element.id + '_ChartBackground', image, this.renderer)\n                || this.renderer.drawImage(image);\n            appendChildElement(this.enableCanvas, this.svgObject, this.htmlObject, this.redraw);\n        }\n    };\n    /**\n     * @private\n     */\n    Chart.prototype.renderAreaBorder = function () {\n        if (this.chartAreaType === 'PolarRadar') {\n            return null;\n        }\n        else {\n            var element = getElement(this.element.id + '_ChartAreaBorder');\n            var previousRect = element ?\n                new Rect(+element.getAttribute('x'), +element.getAttribute('y'), +element.getAttribute('width'), +element.getAttribute('height')) : null;\n            var rect = new RectOption(this.element.id + '_ChartAreaBorder', this.chartArea.background, { width: this.chartArea.border.width, color: this.chartArea.border.color || this.themeStyle.areaBorder }, this.chartArea.opacity, this.chartAxisLayoutPanel.seriesClipRect);\n            this.htmlObject = this.renderer.drawRectangle(rect);\n            this.htmlObject.setAttribute('aria-hidden', 'true');\n            appendChildElement(this.enableCanvas, this.svgObject, this.htmlObject, this.redraw, true, 'x', 'y', null, null, true, true, previousRect);\n            this.htmlObject = null;\n        }\n        // to draw back ground image for chart area\n        var backGroundImage = this.chartArea.backgroundImage;\n        if (backGroundImage) {\n            var width = this.chartArea.border.width;\n            var image = new ImageOption(this.initialClipRect.height - width, this.initialClipRect.width - width, backGroundImage, this.initialClipRect.x, this.initialClipRect.y, this.element.id + '_ChartAreaBackground', 'visible', 'none');\n            this.htmlObject = this.renderer.drawImage(image);\n            appendChildElement(this.enableCanvas, this.svgObject, this.htmlObject, this.redraw, true, 'x', 'y', null, null, true, true);\n        }\n    };\n    /**\n     * To add series for the chart\n     *\n     * @param {SeriesModel[]} seriesCollection - Defines the series collection to be added in chart.\n     * @returns {void}.\n     */\n    Chart.prototype.addSeries = function (seriesCollection) {\n        for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n            var series = seriesCollection_1[_i];\n            series = new Series(this, 'series', series);\n            this.series.push(series);\n        }\n        this.refresh();\n    };\n    /**\n     * To Remove series for the chart\n     *\n     * @param {number} index - Defines the series index to be remove in chart series\n     * @returns {void}\n     */\n    Chart.prototype.removeSeries = function (index) {\n        this.redraw = false; //fix for remove svg not working when use animatemethod.\n        if (this.visibleSeries[index]) {\n            this.visibleSeries[index].xAxis.orientation = null;\n            this.visibleSeries[index].yAxis.orientation = null;\n        }\n        for (var i = 0; i < this.axes.length; i++) {\n            if (this.axes[i].orientation === null) {\n                this.axes.splice(i, 1);\n            }\n        }\n        this.series.splice(index, 1);\n        this.refresh();\n    };\n    /**\n     * To Clear all series for the chart\n     *\n     * @returns {void}.\n     */\n    Chart.prototype.clearSeries = function () {\n        this.series = [];\n        this.refresh();\n    };\n    /**\n     * To add secondary axis for the chart\n     *\n     * @param {AxisModel[]} axisCollection - Defines the axis collection to be added in chart.\n     * @returns {void}.\n     */\n    Chart.prototype.addAxes = function (axisCollection) {\n        for (var _i = 0, axisCollection_1 = axisCollection; _i < axisCollection_1.length; _i++) {\n            var axis = axisCollection_1[_i];\n            axis = new Axis(this, 'axes', axis);\n            if (this.isBlazor) {\n                axis.interval = isNaN(axis.interval) ? null : axis.interval;\n                axis.desiredIntervals = isNaN(axis.desiredIntervals) ? null : axis.desiredIntervals;\n            }\n            this.axes.push(axis);\n        }\n        this.refresh();\n    };\n    /**\n     * To remove secondary axis for the chart\n     *\n     * @param {number} index - Defines the axis collection to be removed in chart.\n     * @returns {void}\n     */\n    Chart.prototype.removeAxis = function (index) {\n        this.redraw = false;\n        this.axes.splice(index, 1);\n        this.refresh();\n    };\n    /**\n     * To destroy the widget\n     *\n     * @function destroy\n     * @returns {void}.\n     * @member of Chart\n     */\n    Chart.prototype.destroy = function () {\n        if (this.scrollBarModule) {\n            this.scrollBarModule.destroy();\n        }\n        if (this.markerRender) {\n            this.markerRender.removeEventListener();\n            this.markerRender = null;\n        }\n        this.horizontalAxes = [];\n        this.verticalAxes = [];\n        this.visibleSeries = [];\n        this.axisCollections = [];\n        this.rotatedDataLabelCollections = [];\n        this.seriesElements = null;\n        this.chartAxisLayoutPanel = null;\n        this.dataLabelCollections = null;\n        this.dataLabelElements = null;\n        this.yAxisElements = null;\n        var element = document.getElementById(this.element.id + 'Keyboard_chart_focus');\n        if (element) {\n            element.remove();\n        }\n        var highlightElement = document.getElementById(this.element.id + '_ej2_chart_highlight');\n        if (highlightElement) {\n            highlightElement.remove();\n        }\n        removeElement('chartmeasuretext');\n        /**\n         * To fix react timeout destroy issue.\n         */\n        if (this.element) {\n            this.unWireEvents();\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            if (this.isReact) {\n                this.clearTemplate();\n            }\n            _super.prototype.destroy.call(this);\n            if (!this.enableCanvas) {\n                this.removeSvg();\n                this.svgObject = null;\n            }\n        }\n    };\n    /**\n     * Get component name\n     */\n    Chart.prototype.getModuleName = function () {\n        return 'chart';\n    };\n    /**\n     * Get the properties to be maintained in the persisted state.\n     *\n     * @private\n     */\n    Chart.prototype.getPersistData = function () {\n        var keyEntity = ['loaded', 'animationComplete', 'primaryXAxis', 'primaryYAxis'];\n        return this.addOnPersist(keyEntity);\n    };\n    /**\n     * Method to create SVG element.\n     */\n    Chart.prototype.createChartSvg = function () {\n        this.removeSvg();\n        createSvg(this);\n    };\n    /**\n     * Method to bind events for chart\n     */\n    Chart.prototype.unWireEvents = function () {\n        var startEvent = Browser.touchStartEvent;\n        var moveEvent = Browser.touchMoveEvent;\n        var stopEvent = Browser.touchEndEvent;\n        var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n        /*! UnBind the Event handler */\n        EventHandler.remove(this.element, startEvent, this.chartOnMouseDown);\n        EventHandler.remove(this.element, moveEvent, this.mouseMove);\n        EventHandler.remove(this.element, stopEvent, this.mouseEnd);\n        EventHandler.remove(this.element, 'click', this.chartOnMouseClick);\n        EventHandler.remove(this.element, 'dblclick', this.chartOnDoubleClick);\n        EventHandler.remove(this.element, 'contextmenu', this.chartRightClick);\n        EventHandler.remove(this.element, cancelEvent, this.mouseLeave);\n        EventHandler.remove(this.element, 'keydown', this.chartKeyDown);\n        EventHandler.remove(document.body, 'keydown', this.documentKeyHandler);\n        EventHandler.remove(this.element, 'keyup', this.chartKeyUp);\n        window.removeEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.resizeBound);\n        /**\n         * To fix memory issue\n         */\n        if (this.touchObject) {\n            this.touchObject.destroy();\n            this.touchObject = null;\n        }\n    };\n    Chart.prototype.wireEvents = function () {\n        /**\n         * To fix react timeout destroy issue.\n         */\n        if (!this.element) {\n            return;\n        }\n        /*! Find the Events type */\n        var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n        /*! Bind the Event handler */\n        EventHandler.add(this.element, Browser.touchStartEvent, this.chartOnMouseDown, this);\n        EventHandler.add(this.element, Browser.touchMoveEvent, this.mouseMove, this);\n        EventHandler.add(this.element, Browser.touchEndEvent, this.mouseEnd, this);\n        EventHandler.add(this.element, 'click', this.chartOnMouseClick, this);\n        EventHandler.add(this.element, 'dblclick', this.chartOnDoubleClick, this);\n        EventHandler.add(this.element, 'contextmenu', this.chartRightClick, this);\n        EventHandler.add(this.element, cancelEvent, this.mouseLeave, this);\n        EventHandler.add(this.element, 'keydown', this.chartKeyDown, this);\n        EventHandler.add(document.body, 'keydown', this.documentKeyHandler, this);\n        EventHandler.add(this.element, 'keyup', this.chartKeyUp, this);\n        this.resizeBound = this.chartResize.bind(this);\n        window.addEventListener((Browser.isTouch && ('orientation' in window && 'onorientationchange' in window)) ? 'orientationchange' : 'resize', this.resizeBound);\n        this.longPressBound = this.longPress.bind(this);\n        this.touchObject = new Touch(this.element, { tapHold: this.longPressBound, tapHoldThreshold: 500 });\n        /*! Apply the style for chart */\n        this.setStyle(this.element);\n    };\n    Chart.prototype.chartRightClick = function (event) {\n        if (this.crosshair.enable && this.crosshairModule &&\n            (event.buttons === 2 || event.which === 0 || event.pointerType === 'touch')) {\n            event.preventDefault();\n            event.stopPropagation();\n            return false;\n        }\n        return true;\n    };\n    Chart.prototype.setStyle = function (element) {\n        var zooming = this.zoomSettings;\n        var disableScroll = zooming.enableSelectionZooming || zooming.enablePinchZooming ||\n            this.selectionMode !== 'None' || this.crosshair.enable || this.highlightMode !== 'None';\n        element.style.touchAction = disableScroll ? 'none' : 'element';\n        element.style.msTouchAction = disableScroll ? 'none' : 'element';\n        element.style.msContentZooming = 'none';\n        element.style.msUserSelect = 'none';\n        element.style.webkitUserSelect = 'none';\n        element.style.position = 'relative';\n        element.style.display = 'block';\n        // To fix angular and react tooltip div scrollbar issue\n        element.style.overflow = 'hidden';\n        element.style.height = (element.style.height || (this.height && this.height.indexOf('%') === -1)) ? element.style.height : 'inherit';\n    };\n    /**\n     * Finds the orientation.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    Chart.prototype.isOrientation = function () {\n        return ('orientation' in window && 'onorientationchange' in window);\n    };\n    /**\n     * Handles the long press on chart.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Chart.prototype.longPress = function (e) {\n        this.mouseX = (e && e.originalEvent.changedTouches) ? (e.originalEvent.changedTouches[0].clientX) : 0;\n        this.mouseY = (e && e.originalEvent.changedTouches) ? (e.originalEvent.changedTouches[0].clientY) : 0;\n        this.startMove = true;\n        this.allowPan = this.stockChart ? false : this.allowPan;\n        this.setMouseXY(this.mouseX, this.mouseY);\n        this.notify('tapHold', e);\n        return false;\n    };\n    /**\n     * To find mouse x, y for aligned chart element svg position\n     */\n    Chart.prototype.setMouseXY = function (pageX, pageY) {\n        if (getElement(this.svgId)) {\n            var svgRect = getElement(this.svgId).getBoundingClientRect();\n            var rect = this.element.getBoundingClientRect();\n            this.mouseY = ((pageY - rect.top) - Math.max(svgRect.top - rect.top, 0) / this.scaleX);\n            this.mouseX = ((pageX - rect.left) - Math.max(svgRect.left - rect.left, 0) / this.scaleY);\n            if (this.stockChart) {\n                this.mouseX += this.stockChart.legendSettings.position === 'Left' ? this.stockChart.stockLegendModule.legendBounds.width : 0;\n                this.mouseY += this.stockChart.legendSettings.position === 'Top' ? this.stockChart.stockLegendModule.legendBounds.height : 0;\n            }\n        }\n    };\n    /**\n     * Export method for the chart.\n     */\n    Chart.prototype.export = function (type, fileName) {\n        if (this.exportModule) {\n            this.exportModule.export(type, fileName);\n            if (this.afterExport) {\n                this.exportModule.getDataUrl(this);\n            }\n        }\n    };\n    /**\n     * Handles the chart resize.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Chart.prototype.chartResize = function () {\n        var _this = this;\n        this.animateSeries = false;\n        var arg = {\n            chart: this,\n            name: resized,\n            currentSize: new Size(0, 0),\n            previousSize: new Size(this.availableSize.width, this.availableSize.height)\n        };\n        var beforeResizeArgs = { name: 'beforeResize', cancelResizedEvent: false };\n        if (this.resizeTo) {\n            clearTimeout(this.resizeTo);\n        }\n        this.trigger(beforeResize, beforeResizeArgs);\n        if (!beforeResizeArgs.cancelResizedEvent) {\n            this.resizeTo = +setTimeout(function () {\n                if (_this.isDestroyed || _this.stockChart) {\n                    clearTimeout(_this.resizeTo);\n                    return;\n                }\n                _this.createChartSvg();\n                arg.currentSize = _this.availableSize;\n                _this.trigger(resized, arg);\n                _this.refreshAxis();\n                _this.refreshBound();\n                _this.trigger('loaded', { chart: _this.isBlazor ? {} : _this });\n            }, 500);\n        }\n        return false;\n    };\n    /**\n     * Handles the mouse move.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Chart.prototype.mouseMove = function (e) {\n        var pageX;\n        var pageY;\n        var touchArg;\n        if (this.allowPan) {\n            return false;\n        }\n        if (e.type === 'touchmove') {\n            this.isTouch = true;\n            touchArg = e;\n            pageX = touchArg.changedTouches[0].clientX;\n            pageY = touchArg.changedTouches[0].clientY;\n        }\n        else {\n            this.isTouch = e.pointerType === 'touch' || e.pointerType === '2' || this.isTouch;\n            pageX = e.clientX;\n            pageY = e.clientY;\n        }\n        this.previousPageX = pageX;\n        this.previousPageY = pageY;\n        if (getElement(this.svgId)) {\n            this.setMouseXY(pageX, pageY);\n            this.chartOnMouseMove(e);\n        }\n        return false;\n    };\n    /**\n     * Handles the mouse leave.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Chart.prototype.mouseLeave = function (e) {\n        var pageX;\n        var pageY;\n        var touchArg;\n        if (this.stockChart && this.stockChart.onPanning) {\n            return false;\n        }\n        if (e.type === 'touchleave') {\n            this.isTouch = true;\n            touchArg = e;\n            pageX = touchArg.changedTouches[0].clientX;\n            pageY = touchArg.changedTouches[0].clientY;\n        }\n        else {\n            this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n            pageX = e.clientX;\n            pageY = e.clientY;\n        }\n        this.previousPageX = null;\n        this.previousPageY = null;\n        this.setMouseXY(pageX, pageY);\n        this.chartOnMouseLeave(e);\n        return false;\n    };\n    /**\n     * Handles the mouse leave on chart.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Chart.prototype.chartOnMouseLeave = function (e) {\n        var element = e.target;\n        var cancelEvent = Browser.isPointer ? 'pointerleave' : 'mouseleave';\n        this.trigger(chartMouseLeave, { target: element.id, x: this.mouseX, y: this.mouseY });\n        removeElement(this.element.id + '_EJ2_AxisLabel_Tooltip');\n        this.isChartDrag = this.isPointMouseDown = false;\n        this.notify(cancelEvent, e);\n        return false;\n    };\n    /**\n     * Handles the mouse double click on chart.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Chart.prototype.chartOnDoubleClick = function (e) {\n        var element = e.target;\n        this.trigger(chartDoubleClick, { target: element.id, x: this.mouseX, y: this.mouseY });\n        return false;\n    };\n    /**\n     * Handles the keyboard onkeydown on chart.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Chart.prototype.chartKeyDown = function (e) {\n        var actionKey = '';\n        if ((this.isZoomed && e.code === 'Tab') || e.code === 'Space') {\n            e.preventDefault();\n        }\n        if (this.tooltip.enable && ((e.code === 'Tab' && this.previousTargetId.indexOf('Series') > -1) || e.code === 'Escape')) {\n            actionKey = 'ESC';\n        }\n        if (this.highlightMode !== 'None' && e.code === 'Tab' && this.previousTargetId.indexOf('_chart_legend_') > -1) {\n            if (this.highlightModule) {\n                this.highlightModule.removeLegendHighlightStyles();\n            }\n        }\n        if (e.ctrlKey && (e.key === '+' || e.code === 'Equal' || e.key === '-' || e.code === 'Minus')) {\n            e.preventDefault();\n            this.isZoomed = this.zoomModule && (this.zoomSettings.enableDeferredZooming || this.zoomSettings.enableSelectionZooming ||\n                this.zoomSettings.enablePinchZooming || this.zoomSettings.enableMouseWheelZooming);\n            //this.tooltipModule.fadeOut(this.element);\n            actionKey = this.isZoomed ? e.code : '';\n        }\n        else if (e['keyCode'] === 82 && this.isZoomed) { // KeyCode 82 (R) for reseting\n            e.preventDefault();\n            this.isZoomed = false;\n            actionKey = 'R';\n        }\n        else if (e.code.indexOf('Arrow') > -1) {\n            e.preventDefault();\n            actionKey = this.isZoomed ? e.code : '';\n        }\n        if (e.ctrlKey && (e.key === 'p')) {\n            e.preventDefault();\n            actionKey = 'CtrlP';\n        }\n        if (actionKey !== '')\n            this.chartKeyboardNavigations(e, e.target.id, actionKey);\n        return false;\n    };\n    /**\n     * Handles the keyboard onkeydown on chart.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Chart.prototype.chartKeyUp = function (e) {\n        var actionKey = '';\n        var targetId = e.target['id'];\n        var groupElement;\n        var markerGroup;\n        var targetElement = e.target;\n        var titleElement = getElement(this.element.id + '_ChartTitle');\n        var seriesElement = getElement(this.element.id + 'SeriesCollection');\n        var legendElement = getElement(this.element.id + '_chart_legend_translate_g');\n        var pagingElement = getElement(this.element.id + '_chart_legend_pageup');\n        if (titleElement) {\n            titleElement.setAttribute('class', 'e-chart-focused');\n        }\n        if (seriesElement && seriesElement.firstElementChild && seriesElement.firstElementChild.children[1]) {\n            var firstChild = seriesElement.firstElementChild.children[1];\n            var className = firstChild.getAttribute('class');\n            if (className && className.indexOf('e-chart-focused') === -1) {\n                className = className + ' e-chart-focused';\n            }\n            else if (!className) {\n                className = 'e-chart-focused';\n            }\n            firstChild.setAttribute('class', className);\n        }\n        if (legendElement) {\n            var firstChild = legendElement.firstElementChild;\n            var className = firstChild.getAttribute('class');\n            if (className && className.indexOf('e-chart-focused') === -1) {\n                className = className + ' e-chart-focused';\n            }\n            else if (!className) {\n                className = 'e-chart-focused';\n            }\n            firstChild.setAttribute('class', className);\n        }\n        if (pagingElement) {\n            pagingElement.setAttribute('class', 'e-chart-focused');\n        }\n        if (e.code === 'Tab') {\n            if (this.previousTargetId !== '') {\n                if ((this.previousTargetId.indexOf('_Series_') > -1 && targetId.indexOf('_Series_') === -1)) {\n                    groupElement = getElement(this.element.id + 'SeriesCollection');\n                    var previousElement = this.previousTargetId.indexOf('_Symbol') > -1 ?\n                        getElement(this.element.id + 'SymbolGroup' + this.currentSeriesIndex).children[this.currentPointIndex + 1] :\n                        (this.previousTargetId.indexOf('_Point_') > -1 ?\n                            groupElement.children[this.currentSeriesIndex].children[this.currentPointIndex + 1] :\n                            groupElement.children[this.currentSeriesIndex]);\n                    this.setTabIndex(previousElement, groupElement.firstElementChild);\n                    this.currentPointIndex = 0;\n                    this.currentSeriesIndex = 0;\n                }\n                else if (this.previousTargetId.indexOf('_chart_legend_page') > -1 && targetId.indexOf('_chart_legend_page') === -1\n                    && targetId.indexOf('_chart_legend_g_') === -1) {\n                    this.setTabIndex(e.target, getElement(this.element.id + '_chart_legend_pageup'));\n                }\n                else if (this.previousTargetId.indexOf('_chart_legend_g_') > -1 && targetId.indexOf('_chart_legend_g_') === -1) {\n                    groupElement = getElement(this.element.id + '_chart_legend_translate_g');\n                    this.setTabIndex(groupElement.children[this.currentLegendIndex], groupElement.firstElementChild);\n                }\n            }\n            this.previousTargetId = targetId;\n            if (targetId.indexOf('SeriesGroup') > -1) {\n                this.currentSeriesIndex = +targetId.split('SeriesGroup')[1];\n                targetElement.removeAttribute('tabindex');\n                targetElement.blur();\n                if (targetElement.children[1].id.indexOf('_Point_') === -1) {\n                    markerGroup = getElement(this.element.id + 'SymbolGroup' + targetId.split('SeriesGroup')[1]);\n                }\n                targetId = this.focusChild((markerGroup != null ? markerGroup.children[1] : targetElement.children[1]));\n            }\n            actionKey = this.highlightMode !== 'None' || this.tooltip.enable ? 'Tab' : '';\n        }\n        else if (e.code.indexOf('Arrow') > -1) {\n            e.preventDefault();\n            this.previousTargetId = targetId;\n            if (targetId.indexOf('_chart_legend_page') > -1) {\n                if (e.code === 'ArrowLeft') {\n                    getElement(this.element.id + '_chart_legend_pagedown').removeAttribute('tabindex');\n                    this.focusChild(getElement(this.element.id + '_chart_legend_pageup'));\n                }\n                else if (e.code === 'ArrowRight') {\n                    getElement(this.element.id + '_chart_legend_pageup').removeAttribute('tabindex');\n                    this.focusChild(getElement(this.element.id + '_chart_legend_pagedown'));\n                }\n            }\n            else if ((targetId.indexOf('_chart_legend_') > -1)) {\n                var legendElement_1 = targetElement.parentElement.children;\n                legendElement_1[this.currentLegendIndex].removeAttribute('tabindex');\n                this.currentLegendIndex += (e.code === 'ArrowUp' || e.code === 'ArrowRight') ? +1 : -1;\n                this.currentLegendIndex = this.getActualIndex(this.currentLegendIndex, legendElement_1.length);\n                var currentLegend = legendElement_1[this.currentLegendIndex];\n                this.focusChild(currentLegend);\n                targetId = currentLegend.children[1].id;\n                actionKey = this.highlightMode !== 'None' ? 'ArrowMove' : '';\n            }\n            else if (targetId.indexOf('_Series_') > -1) {\n                groupElement = targetElement.parentElement.parentElement;\n                var currentPoint = e.target;\n                targetElement.removeAttribute('tabindex');\n                targetElement.blur();\n                if (e.code === 'ArrowRight' || e.code === 'ArrowLeft') {\n                    var seriesIndexes = [];\n                    for (var i = 0; i < groupElement.children.length; i++) {\n                        if (groupElement.children[i].id.indexOf('SeriesGroup') > -1) {\n                            seriesIndexes.push(+groupElement.children[i].id.split('SeriesGroup')[1]);\n                        }\n                    }\n                    this.currentSeriesIndex = seriesIndexes.indexOf(this.currentSeriesIndex) + (e.code === 'ArrowRight' ? 1 : -1);\n                    this.currentSeriesIndex = seriesIndexes[this.getActualIndex(this.currentSeriesIndex, seriesIndexes.length)];\n                }\n                else {\n                    this.currentPointIndex += e.code === 'ArrowUp' ? 1 : -1;\n                }\n                if (targetId.indexOf('_Symbol') > -1) {\n                    this.currentPointIndex = this.getActualIndex(this.currentPointIndex, getElement(this.element.id + 'SymbolGroup' + this.currentSeriesIndex).childElementCount - 1);\n                    currentPoint = getElement(this.element.id + '_Series_' + this.currentSeriesIndex + '_Point_' +\n                        this.currentPointIndex + '_Symbol');\n                }\n                else if (targetId.indexOf('_Point_') > -1) {\n                    this.currentPointIndex = this.getActualIndex(this.currentPointIndex, getElement(this.element.id + 'SeriesGroup' + this.currentSeriesIndex).childElementCount - 1);\n                    currentPoint = getElement(this.element.id + '_Series_' + this.currentSeriesIndex + '_Point_' +\n                        this.currentPointIndex);\n                }\n                targetId = this.focusChild(currentPoint);\n                actionKey = this.tooltip.enable || this.highlightMode !== 'None' ? 'ArrowMove' : '';\n            }\n        }\n        else if ((e.code === 'Enter' || e.code === 'Space') && ((targetId.indexOf('_chart_legend_') > -1) ||\n            (targetId.indexOf('_Point_') > -1))) {\n            targetId = (targetId.indexOf('_chart_legend_page') > -1) ? targetId : ((targetId.indexOf('_chart_legend_') > -1) ?\n                targetElement.children[1].id : targetId);\n            actionKey = 'Enter';\n        }\n        if (actionKey !== '') {\n            this.chartKeyboardNavigations(e, targetId, actionKey);\n        }\n        return false;\n    };\n    Chart.prototype.setTabIndex = function (previousElement, currentElement) {\n        if (previousElement) {\n            previousElement.removeAttribute('tabindex');\n        }\n        if (currentElement) {\n            currentElement.setAttribute('tabindex', '0');\n        }\n    };\n    Chart.prototype.getActualIndex = function (index, totalLength) {\n        return index > totalLength - 1 ? 0 : (index < 0 ? totalLength - 1 : index);\n    };\n    Chart.prototype.focusChild = function (element) {\n        element.setAttribute('tabindex', '0');\n        var className = element.getAttribute('class');\n        element.setAttribute('tabindex', '0');\n        if (className && className.indexOf('e-chart-focused') === -1) {\n            className = 'e-chart-focused ' + className;\n        }\n        else if (!className) {\n            className = 'e-chart-focused';\n        }\n        element.setAttribute('class', className);\n        element.focus();\n        return element.id;\n    };\n    /**\n     * Handles the document onkey.\n     *\n     * @private\n     */\n    Chart.prototype.documentKeyHandler = function (e) {\n        // 74 - J\n        if (e.altKey && e.keyCode === 74 && !isNullOrUndefined(this.element)) {\n            this.element.focus();\n        }\n    };\n    Chart.prototype.chartKeyboardNavigations = function (e, targetId, actionKey) {\n        this.isLegendClicked = false;\n        switch (actionKey) {\n            case 'Tab':\n            case 'ArrowMove':\n                if (this.highlightModule) {\n                    this.highlightModule.removeLegendHighlightStyles();\n                }\n                if (targetId.indexOf('_Point_') > -1) {\n                    var seriesIndex = +(targetId.split('_Series_')[1].split('_Point_')[0]);\n                    var pointIndex = +(targetId.split('_Series_')[1].replace('_Symbol', '').split('_Point_')[1]);\n                    var pointRegion = this.visibleSeries[seriesIndex].points[pointIndex].symbolLocations[0];\n                    this.mouseX = pointRegion.x + this.initialClipRect.x;\n                    this.mouseY = pointRegion.y + this.initialClipRect.y;\n                    if (this.highlightModule) {\n                        this.highlightModule.highlightChart(document.getElementById(targetId), 'mousemove');\n                        this.highlightModule.completeSelection(document.getElementById(targetId), 'mousemove');\n                    }\n                    if (this.tooltipModule) {\n                        this.tooltipModule.tooltip();\n                    }\n                }\n                if (this.highlightModule && this.highlightMode !== 'None') {\n                    targetId = targetId.indexOf('_chart_legend_g_') > -1 ? document.getElementById(targetId).firstChild['id'] : targetId;\n                    var legendID = this.element.id + '_chart_legend';\n                    var legendItemsId = [legendID + '_text_', legendID + '_shape_marker_',\n                        legendID + '_shape_'];\n                    for (var i = 0; i < legendItemsId.length; i++) {\n                        var id = legendItemsId[i];\n                        if (targetId.indexOf(id) > -1) {\n                            document.getElementById(targetId).setAttribute('class', '');\n                            this.highlightModule.legendSelection(this, parseInt(targetId.split(id)[1], 10), document.getElementById(targetId), 'mousemove');\n                            break;\n                        }\n                    }\n                }\n                break;\n            case 'Enter':\n            case 'Space':\n                if (targetId.indexOf('_chart_legend_') > -1) {\n                    this.isLegendClicked = true;\n                    this.legendModule.click(e);\n                    this.focusChild(document.getElementById(targetId).parentElement);\n                }\n                else {\n                    this.selectionModule.calculateSelectedElements(document.getElementById(targetId), 'click');\n                }\n                break;\n            case 'CtrlP':\n                this.print();\n                break;\n            case 'ESC':\n                this.tooltipModule.removeTooltip(1);\n                break;\n            case 'Equal':\n            case 'Minus':\n                this.zoomModule.isZoomed = this.zoomModule.performedUI = true;\n                this.zoomModule.isPanning = this.isChartDrag = false;\n                if (actionKey === 'Equal') {\n                    this.zoomModule.toolkit.zoomInOutCalculation(1, this, this.axisCollections, this.zoomSettings.mode);\n                }\n                else {\n                    this.zoomModule.toolkit.zoomInOutCalculation(-1, this, this.axisCollections, this.zoomSettings.mode);\n                }\n                this.zoomModule.performZoomRedraw(this);\n                this.element.focus();\n                break;\n            case 'ArrowUp':\n            case 'ArrowDown':\n            case 'ArrowLeft':\n            case 'ArrowRight':\n                var yArrowPadding = actionKey === 'ArrowUp' ? 10 : (actionKey === 'ArrowDown' ? -10 : 0);\n                var xArrowPadding = actionKey === 'ArrowLeft' ? -10 : (actionKey === 'ArrowRight' ? 10 : 0);\n                this.zoomModule.isPanning = this.isChartDrag = true;\n                this.zoomModule.doPan(this, this.axisCollections, xArrowPadding, yArrowPadding);\n                this.zoomModule.performZoomRedraw(this);\n                this.element.focus();\n                break;\n            case 'R':\n                this.zoomModule.toolkit.reset(e);\n                break;\n        }\n    };\n    /**\n     * Handles the mouse click on chart.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Chart.prototype.chartOnMouseClick = function (e) {\n        var _this = this;\n        var element = e.target;\n        var chart = this;\n        this.clickCount++;\n        var timeInterval = 400;\n        if (this.clickCount === 1) {\n            this.singleClickTimer = +setTimeout(function () {\n                chart.clickCount = 0;\n                chart.trigger(chartMouseClick, { target: element.id, x: chart.mouseX, y: chart.mouseY });\n            }, timeInterval);\n        }\n        else if (this.clickCount === 2 && !this.pointDoubleClick) {\n            clearTimeout(this.singleClickTimer);\n            this.clickCount = 0;\n        }\n        var isAngular = 'isAngular';\n        if (this[isAngular]) {\n            var observers = 'observers';\n            timeInterval = this.pointDoubleClick[observers].length > 0 ? 400 : 0;\n        }\n        else {\n            timeInterval = this.pointDoubleClick ? 400 : 0;\n        }\n        if (this.clickCount === 1 && this.pointClick) {\n            this.singleClickTimer = +setTimeout(function () {\n                _this.clickCount = 0;\n                _this.triggerPointEvent(pointClick, e);\n            }, timeInterval);\n        }\n        else if (this.clickCount === 2 && this.pointDoubleClick) {\n            clearTimeout(this.singleClickTimer);\n            this.clickCount = 0;\n            this.triggerPointEvent(pointDoubleClick, e);\n        }\n        if (this.axisLabelClick) {\n            this.triggerAxisLabelClickEvent(axisLabelClick, e);\n        }\n        this.notify('click', e);\n        return false;\n    };\n    Chart.prototype.triggerPointEvent = function (event, e) {\n        var evt = e;\n        var data = new ChartData(this);\n        var pointData = data.getData();\n        if (pointData.series && pointData.point) {\n            this.trigger(event, {\n                series: this.isBlazor ? {} : pointData.series,\n                point: pointData.point,\n                seriesIndex: pointData.series.index, pointIndex: pointData.point.index,\n                x: this.mouseX, y: this.mouseY, pageX: evt.pageX, pageY: evt.pageY\n            });\n        }\n    };\n    Chart.prototype.triggerAxisLabelClickEvent = function (event, e) {\n        var targetElement = e.target;\n        var clickEvt = e;\n        if (targetElement.id.indexOf('_AxisLabel_') !== -1) {\n            var index = targetElement.id.split('_AxisLabel_');\n            var axisIndex = +index[0].slice(-1);\n            var labelIndex = +index[1];\n            var currentAxis = this.axisCollections[axisIndex];\n            if (currentAxis.visible && (axisIndex === 0 || axisIndex === 1)) {\n                this.trigger(event, {\n                    chart: this,\n                    axis: currentAxis,\n                    text: currentAxis.visibleLabels[labelIndex].text,\n                    labelID: targetElement.id,\n                    index: labelIndex,\n                    location: new ChartLocation(clickEvt.pageX, clickEvt.pageY),\n                    value: currentAxis.visibleLabels[labelIndex].value\n                });\n            }\n        }\n    };\n    /**\n     * Handles the mouse move on chart.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Chart.prototype.chartOnMouseMove = function (e) {\n        var element = e.target;\n        this.trigger(chartMouseMove, { target: element.id, x: this.mouseX, y: this.mouseY });\n        if (this.pointMove) {\n            this.triggerPointEvent(pointMove, e);\n        }\n        // Tooltip for chart series.\n        if (!this.isTouch) {\n            this.titleTooltip(e, this.mouseX, this.mouseY);\n            this.axisTooltip(e, this.mouseX, this.mouseY);\n        }\n        if (this.dataEditingModule) {\n            this.dataEditingModule.pointMouseMove(e);\n        }\n        this.notify(Browser.touchMoveEvent, e);\n        this.isTouch = false;\n        return false;\n    };\n    Chart.prototype.titleTooltip = function (event, x, y, isTouch) {\n        var targetId = event.target.id;\n        var id = (targetId === (this.element.id + '_ChartTitle') || targetId === (this.element.id + '_ChartSubTitle') ||\n            targetId.indexOf('_AxisTitle') > -1 || targetId.indexOf('_legend_title') > -1);\n        var index = 0;\n        if (targetId.indexOf('_AxisTitle') > -1) {\n            index = parseInt(((targetId.replace(this.element.id, '')).replace('AxisLabel_', '')).split('_')[2], 10);\n        }\n        if (id && (event.target.textContent.indexOf('...') > -1)) {\n            var title = (targetId === (this.element.id + '_ChartTitle')) ? this.title :\n                targetId.indexOf('_AxisTitle') > -1 ? this.axisCollections[index].title :\n                    targetId.indexOf('_ChartSubTitle') > -1 ? this.subTitle : this.legendSettings.title;\n            showTooltip(title, x, y, this.element.offsetWidth, this.element.id + '_EJ2_Title_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch);\n        }\n        else {\n            removeElement(this.element.id + '_EJ2_Title_Tooltip');\n        }\n    };\n    Chart.prototype.axisTooltip = function (event, x, y, isTouch) {\n        var targetId = event.target.id;\n        if (((targetId.indexOf('AxisLabel') > -1) || targetId.indexOf('Axis_MultiLevelLabel') > -1) &&\n            (event.target.textContent.indexOf('...') > -1)) {\n            var isTitleOrLegendEnabled = (this.legendSettings.visible || this.primaryXAxis.title === '');\n            showTooltip(this.findAxisLabel(targetId), x, y, this.element.offsetWidth, this.element.id + '_EJ2_AxisLabel_Tooltip', getElement(this.element.id + '_Secondary_Element'), isTouch, isTitleOrLegendEnabled);\n        }\n        else {\n            removeElement(this.element.id + '_EJ2_AxisLabel_Tooltip');\n        }\n    };\n    Chart.prototype.findAxisLabel = function (text) {\n        var texts;\n        if (text.indexOf('AxisLabel') > -1) {\n            texts = ((text.replace(this.element.id, '')).replace('AxisLabel_', '')).split('_');\n            return this.axisCollections[parseInt(texts[0], 10)].visibleLabels[parseInt(texts[1], 10)].originalText;\n        }\n        else {\n            texts = ((text.replace(this.element.id, '')).replace('Axis_MultiLevelLabel_Level_', '').replace('Text_', '')).split('_');\n            return (this.axisCollections[parseInt(texts[0], 10)].multiLevelLabels[parseInt(texts[1], 10)]\n                .categories[parseInt(texts[2], 10)].text);\n        }\n    };\n    /**\n     * Handles the mouse down on chart.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Chart.prototype.chartOnMouseDown = function (e) {\n        var pageX;\n        var pageY;\n        var target;\n        var touchArg;\n        var offset = Browser.isDevice ? 20 : 30;\n        var rect = this.element.getBoundingClientRect();\n        var element = e.target;\n        if (this.stockChart && this.stockChart.zoomSettings.enablePan) {\n            this.allowPan = true;\n        }\n        this.trigger(chartMouseDown, { target: element.id, x: this.mouseX, y: this.mouseY });\n        if (e.type === 'touchstart') {\n            this.isTouch = true;\n            touchArg = e;\n            pageX = touchArg.changedTouches[0].clientX;\n            pageY = touchArg.changedTouches[0].clientY;\n            target = touchArg.target;\n        }\n        else {\n            this.isTouch = e.pointerType === 'touch';\n            pageX = e.clientX;\n            pageY = e.clientY;\n            target = e.target;\n        }\n        var svgRect = getElement(this.svgId).getBoundingClientRect();\n        this.mouseDownX = this.previousMouseMoveX = (pageX - rect.left) - Math.max(svgRect.left - rect.left, 0);\n        this.mouseDownY = this.previousMouseMoveY = (pageY - rect.top) - Math.max(svgRect.top - rect.top, 0);\n        if (this.isTouch) {\n            this.isDoubleTap = (new Date().getTime() < this.threshold && target.id.indexOf(this.element.id + '_Zooming_') === -1 &&\n                (this.mouseDownX - offset >= this.mouseX || this.mouseDownX + offset >= this.mouseX) &&\n                (this.mouseDownY - offset >= this.mouseY || this.mouseDownY + offset >= this.mouseY) &&\n                (this.mouseX - offset >= this.mouseDownX || this.mouseX + offset >= this.mouseDownX) &&\n                (this.mouseY - offset >= this.mouseDownY || this.mouseY + offset >= this.mouseDownY));\n        }\n        if (this.dataEditingModule) {\n            this.dataEditingModule.pointMouseDown();\n        }\n        this.notify(Browser.touchStartEvent, e);\n        return false;\n    };\n    /**\n     * Handles the mouse up.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Chart.prototype.mouseEnd = function (e) {\n        var pageY;\n        var pageX;\n        var touchArg;\n        if (e.type === 'touchend') {\n            touchArg = e;\n            pageX = touchArg.changedTouches[0].clientX;\n            this.isTouch = true;\n            pageY = touchArg.changedTouches[0].clientY;\n        }\n        else {\n            pageY = e.clientY;\n            pageX = e.clientX;\n            this.isTouch = e.pointerType === 'touch' || e.pointerType === '2';\n        }\n        this.setMouseXY(pageX, pageY);\n        this.chartOnMouseUp(e);\n        return false;\n    };\n    /**\n     * Handles the mouse up.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    Chart.prototype.chartOnMouseUp = function (e) {\n        var element = e.target;\n        this.trigger(chartMouseUp, { target: element.id, x: this.mouseX, y: this.mouseY });\n        this.isChartDrag = false;\n        this.allowPan = false;\n        if (this.isTouch) {\n            this.titleTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n            this.axisTooltip(e, this.mouseX, this.mouseY, this.isTouch);\n            this.threshold = new Date().getTime() + 300;\n        }\n        if (this.dataEditingModule) {\n            this.dataEditingModule.pointMouseUp();\n        }\n        if (!this.enableCanvas && this.seriesElements) {\n            this.seriesElements.removeAttribute('clip-path');\n        }\n        this.notify(Browser.touchEndEvent, e);\n        return false;\n    };\n    /**\n     * Method to set culture for chart\n     */\n    Chart.prototype.setCulture = function () {\n        this.intl = new Internationalization();\n        this.setLocaleConstants();\n        this.localeObject = new L10n(this.getModuleName(), this.defaultLocalConstants, this.locale);\n    };\n    /**\n     * Method to set the annotation content dynamically for chart.\n     */\n    Chart.prototype.setAnnotationValue = function (annotationIndex, content) {\n        var parentNode = getElement(this.element.id + '_Annotation_Collections');\n        var annotation = this.annotations[annotationIndex];\n        var element;\n        if (content !== null) {\n            annotation.content = content;\n            if (parentNode) {\n                removeElement(this.element.id + '_Annotation_' + annotationIndex);\n                element = this.createElement('div');\n                this.annotationModule.processAnnotation(annotation, annotationIndex, element);\n                parentNode.appendChild(element.children[0]);\n            }\n            else {\n                this.annotationModule.renderAnnotations(getElement(this.element.id + '_Secondary_Element'));\n            }\n        }\n    };\n    /**\n     * Method to set locale constants\n     */\n    Chart.prototype.setLocaleConstants = function () {\n        this.defaultLocalConstants = {\n            ZoomIn: 'Zoom in',\n            Zoom: 'Zoom',\n            ZoomOut: 'Zoom out',\n            Pan: 'Pan',\n            Reset: 'Reset',\n            ResetZoom: 'Reset Zoom'\n        };\n    };\n    /**\n     * Theming for chart\n     */\n    Chart.prototype.setTheme = function () {\n        /*! Set theme */\n        this.themeStyle = getThemeColor(this.theme, this.enableCanvas);\n        if (!(document.getElementById(this.element.id + 'Keyboard_chart_focus'))) {\n            var style = document.createElement('style');\n            style.setAttribute('id', this.element.id + 'Keyboard_chart_focus');\n            style.innerText = '.e-chart-focused:focus, path[class*=_ej2_chart_selection_series]:focus,' +\n                'path[id*=_Point_]:focus, text[id*=_ChartTitle]:focus {outline: none } .e-chart-focused:focus-visible, path[class*=_ej2_chart_selection_series]:focus-visible,' +\n                'path[id*=_Point_]:focus-visible, text[id*=_ChartTitle]:focus-visible {outline: 1.5px ' + this.themeStyle.tabColor + ' solid}';\n            document.body.appendChild(style);\n        }\n    };\n    /**\n     * To provide the array of modules needed for control rendering\n     *\n     * @returns {ModuleDeclaration[]}\n     * @private\n     */\n    /* eslint-disable  */\n    Chart.prototype.requiredModules = function () {\n        var _this = this;\n        var modules = [];\n        var series = this.series;\n        var enableAnnotation = false;\n        var moduleName;\n        var errorBarVisible = false;\n        var isPointDrag = false;\n        var dataLabelEnable = false;\n        var zooming = this.zoomSettings;\n        this.chartAreaType = (series.length > 0 && (series[0].type === 'Polar' || series[0].type === 'Radar')) ? 'PolarRadar' : 'Cartesian';\n        if (this.tooltip.enable) {\n            modules.push({\n                member: 'Tooltip',\n                args: [this]\n            });\n        }\n        series.map(function (value) {\n            _this.isLegend = (_this.legendSettings.visible && ((value.name !== '') || !!_this.isLegend));\n            moduleName = value.type.indexOf('100') !== -1 ? value.type.replace('100', '') + 'Series' : value.type + 'Series';\n            errorBarVisible = value.errorBar.visible || errorBarVisible;\n            dataLabelEnable = value.marker.dataLabel.visible || dataLabelEnable || (value.type == 'Pareto' && value.paretoOptions.marker.dataLabel.visible);\n            isPointDrag = value.dragSettings.enable || isPointDrag;\n            if (!modules.some(function (currentModule) {\n                return currentModule.member === moduleName;\n            })) {\n                modules.push({\n                    member: moduleName,\n                    args: [_this, series]\n                });\n            }\n            if (_this.chartAreaType === 'PolarRadar') {\n                modules.push({\n                    member: value.drawType + 'Series',\n                    args: [_this, series]\n                });\n            }\n            if (value.type === 'Pareto') {\n                modules.push({\n                    member: 'ColumnSeries',\n                    args: [_this, series]\n                });\n                modules.push({\n                    member: 'LineSeries',\n                    args: [_this, series]\n                });\n            }\n        });\n        this.findIndicatorModules(modules);\n        this.findTrendLineModules(modules);\n        modules = this.findAxisModule(modules);\n        enableAnnotation = this.annotations.some(function (value) {\n            return (value.content !== null);\n        });\n        if (errorBarVisible) {\n            modules.push({\n                member: 'ErrorBar',\n                args: [this, series]\n            });\n        }\n        if (this.isLegend) {\n            modules.push({\n                member: 'Legend',\n                args: [this]\n            });\n        }\n        if (this.enableExport || this.allowExport) {\n            modules.push({\n                member: 'Export',\n                args: [this]\n            });\n        }\n        if (this.chartAreaType !== 'PolarRadar' && this.crosshair.enable) {\n            modules.push({\n                member: 'Crosshair',\n                args: [this]\n            });\n        }\n        if (this.chartAreaType !== 'PolarRadar' && !this.scrollSettingEnabled && (zooming.enableSelectionZooming\n            || zooming.enableMouseWheelZooming || zooming.enablePinchZooming || zooming.enablePan || zooming.enableScrollbar || zooming.showToolbar)) {\n            modules.push({\n                member: 'Zoom',\n                args: [this, this.zoomSettings]\n            });\n            if (zooming.enableScrollbar) {\n                modules.push({\n                    member: 'ScrollBar',\n                    args: [this]\n                });\n            }\n        }\n        if (this.selectionMode !== 'None' && !(this.chartAreaType === 'PolarRadar' &&\n            this.selectionMode.indexOf('Drag') > -1)) {\n            modules.push({\n                member: 'Selection',\n                args: [this]\n            });\n        }\n        if (this.highlightMode !== 'None' || this.legendSettings.enableHighlight) {\n            modules.push({\n                member: 'Highlight',\n                args: [this]\n            });\n        }\n        if (dataLabelEnable) {\n            modules.push({\n                member: 'DataLabel',\n                args: [this, series]\n            });\n        }\n        if (isPointDrag) {\n            modules.push({\n                member: 'DataEditing',\n                args: [this]\n            });\n        }\n        if (enableAnnotation) {\n            modules.push({\n                member: 'Annotation',\n                args: [this]\n            });\n        }\n        return modules;\n    };\n    Chart.prototype.findAxisModule = function (modules) {\n        var axisCollections = [];\n        axisCollections.push(this.primaryXAxis);\n        axisCollections.push(this.primaryYAxis);\n        axisCollections = axisCollections.concat(this.axes);\n        var datetimeEnabled = false;\n        var categoryEnabled = false;\n        var logarithmicEnabled = false;\n        var striplineEnabled = false;\n        var dateTimeCategoryEnabled = false;\n        var multiLevelEnabled = false;\n        for (var _i = 0, axisCollections_1 = axisCollections; _i < axisCollections_1.length; _i++) {\n            var axis = axisCollections_1[_i];\n            datetimeEnabled = axis.valueType === 'DateTime' || datetimeEnabled;\n            categoryEnabled = axis.valueType === 'Category' || categoryEnabled;\n            logarithmicEnabled = axis.valueType === 'Logarithmic' || logarithmicEnabled;\n            dateTimeCategoryEnabled = axis.valueType === 'DateTimeCategory' || dateTimeCategoryEnabled;\n            striplineEnabled = this.findStriplineVisibility(axis.stripLines) || striplineEnabled;\n            multiLevelEnabled = axis.multiLevelLabels.length > 0 || multiLevelEnabled;\n            this.scrollSettingEnabled = axis.scrollbarSettings.enable ? true : this.scrollSettingEnabled;\n        }\n        if (datetimeEnabled) {\n            modules.push({\n                member: 'DateTime',\n                args: [this]\n            });\n        }\n        if (categoryEnabled) {\n            modules.push({\n                member: 'Category',\n                args: [this]\n            });\n        }\n        if (logarithmicEnabled) {\n            modules.push({\n                member: 'Logarithmic',\n                args: [this]\n            });\n        }\n        if (striplineEnabled) {\n            modules.push({\n                member: 'StripLine',\n                args: [this]\n            });\n        }\n        if (multiLevelEnabled) {\n            modules.push({\n                member: 'MultiLevelLabel',\n                args: [this]\n            });\n        }\n        if (dateTimeCategoryEnabled) {\n            modules.push({\n                member: 'DateTimeCategory',\n                args: [this]\n            });\n        }\n        if (this.scrollSettingEnabled) {\n            modules.push({\n                member: 'ScrollBar',\n                args: [this]\n            });\n        }\n        return modules;\n    };\n    Chart.prototype.findIndicatorModules = function (modules) {\n        var macdEnable;\n        var bandEnable;\n        var indicators = this.indicators;\n        if (this.indicators.length) {\n            modules.push({\n                member: 'LineSeries',\n                args: [this]\n            });\n            indicators.map(function (indicator) {\n                macdEnable = macdEnable || indicator.type === 'Macd';\n                bandEnable = bandEnable || indicator.type === 'BollingerBands';\n            });\n            if (macdEnable) {\n                modules.push({\n                    member: 'ColumnSeries',\n                    args: [this]\n                });\n            }\n            if (bandEnable) {\n                modules.push({\n                    member: 'RangeAreaSeries',\n                    args: [this]\n                });\n            }\n            if (bandEnable) {\n                modules.push({\n                    member: 'SplineRangeAreaSeries',\n                    args: [this]\n                });\n            }\n            for (var _i = 0, _a = this.indicators; _i < _a.length; _i++) {\n                var indicator = _a[_i];\n                modules.push({\n                    member: indicator.type + 'Indicator',\n                    args: [this]\n                });\n            }\n        }\n    };\n    Chart.prototype.findTrendLineModules = function (modules) {\n        var isLine;\n        var isSpline;\n        var _loop_1 = function (series) {\n            var markerEnable;\n            series.trendlines.map(function (trendline) {\n                markerEnable = markerEnable || trendline.marker.visible;\n                isLine = isLine || (trendline.type === 'Linear' || trendline.type === 'MovingAverage') ? true : false;\n                isSpline = isSpline || (!isLine || (trendline.type === 'Exponential' || trendline.type === 'Logarithmic' || trendline.type === 'Power' || trendline.type === 'Polynomial')) ? true : false;\n            });\n            if (markerEnable) {\n                modules.push({\n                    member: 'Marker',\n                    args: [this_1, series]\n                });\n            }\n        };\n        var this_1 = this;\n        for (var _i = 0, _a = this.series; _i < _a.length; _i++) {\n            var series = _a[_i];\n            _loop_1(series);\n        }\n        if (isLine || isSpline) {\n            modules.push({\n                member: 'TrendLine',\n                args: [this]\n            });\n        }\n        if (isLine) {\n            modules.push({\n                member: 'LineSeries',\n                args: [this]\n            });\n        }\n        if (isSpline) {\n            modules.push({\n                member: 'SplineSeries',\n                args: [this]\n            });\n        }\n    };\n    Chart.prototype.findStriplineVisibility = function (striplines) {\n        var visible = false;\n        for (var _i = 0, striplines_1 = striplines; _i < striplines_1.length; _i++) {\n            var stripline = striplines_1[_i];\n            if (stripline.visible) {\n                visible = true;\n                break;\n            }\n        }\n        return visible;\n    };\n    /**\n     * To Remove the SVG.\n     * @return {boolean}\n     * @private\n     */\n    Chart.prototype.removeSvg = function () {\n        if (this.redraw) {\n            return null;\n        }\n        blazorTemplatesReset(this);\n        if (this.enableCanvas && this.svgObject && this.svgObject.tagName === 'CANVAS') {\n            this.renderer.clearRect(new Rect(0, 0, this.availableSize.width, this.availableSize.height));\n            if (this.svgObject.parentNode) {\n                remove(this.svgObject);\n            }\n            return null;\n        }\n        removeElement(this.element.id + '_Secondary_Element');\n        if (this.isReact) {\n            this.clearTemplate();\n        }\n        var removeLength = 0;\n        if (this.zoomModule && this.zoomModule.pinchTarget) {\n            this.zoomModule.pinchTarget.id = '';\n            this.zoomModule.pinchTarget.setAttribute('opacity', '0');\n            this.svgObject.appendChild(this.zoomModule.pinchTarget);\n            removeLength = 1;\n        }\n        // Fix for blazor resize issue\n        if (!isNullOrUndefined(this.resizeTo)) {\n            if (this.resizeTo !== this.checkResize && this.isBlazor && this.element.childElementCount) {\n                var containerCollection = document.querySelectorAll('.e-chart');\n                for (var index = 0; index < containerCollection.length; index++) {\n                    var container = containerCollection[index];\n                    while (container.firstChild) {\n                        remove(container.firstChild);\n                    }\n                }\n            }\n            this.checkResize = this.resizeTo;\n        }\n        if (this.svgObject) {\n            while (this.svgObject.childNodes.length > removeLength) {\n                this.svgObject.removeChild(this.svgObject.firstChild);\n            }\n            if (!this.svgObject.hasChildNodes() && this.svgObject.parentNode && !(this.stockChart)) {\n                remove(this.svgObject);\n            }\n        }\n    };\n    Chart.prototype.refreshDefinition = function (definitions) {\n        for (var _i = 0, definitions_1 = definitions; _i < definitions_1.length; _i++) {\n            var item = definitions_1[_i];\n            item.axes = [];\n        }\n    };\n    /**\n     * Refresh the axis default value.\n     *\n     * @returns {boolean}\n     * @private\n     */\n    Chart.prototype.refreshAxis = function () {\n        var axis = this.primaryXAxis;\n        axis.rect = new Rect(undefined, undefined, 0, 0);\n        axis = this.primaryYAxis;\n        axis.isStack100 = false;\n        axis.rect = new Rect(undefined, undefined, 0, 0);\n        for (var _i = 0, _a = this.axes; _i < _a.length; _i++) {\n            var item = _a[_i];\n            axis = item;\n            axis.rect = new Rect(undefined, undefined, 0, 0);\n            axis.isStack100 = false;\n        }\n        if (this.paretoSeriesModule && this.series[0].type === 'Pareto') {\n            for (var _b = 0, _c = this.paretoSeriesModule.paretoAxes; _b < _c.length; _b++) {\n                var item = _c[_b];\n                axis = item;\n                axis.rect = new Rect(undefined, undefined, 0, 0);\n                axis.isStack100 = false;\n            }\n        }\n    };\n    Chart.prototype.axisChange = function (axis) {\n        if (!axis.name && !axis.valueType) {\n            return false;\n        }\n        this.refreshDefinition(this.columns);\n        this.refreshDefinition(this.rows);\n        this.calculateVisibleAxis();\n        this.processData();\n        return true;\n    };\n    /**\n     * Get visible series by index\n     */\n    Chart.prototype.getVisibleSeries = function (visibleSeries, index) {\n        for (var _i = 0, visibleSeries_1 = visibleSeries; _i < visibleSeries_1.length; _i++) {\n            var series = visibleSeries_1[_i];\n            if (index === series.index) {\n                return series;\n            }\n        }\n        return null;\n    };\n    /**\n     * Fix for live data update flicker issue\n     */\n    Chart.prototype.refreshLiveData = function () {\n        this.calculateVisibleSeries();\n        this.initTechnicalIndicators();\n        this.initTrendLines();\n        this.refreshDefinition(this.columns);\n        this.refreshDefinition(this.rows);\n        this.calculateVisibleAxis();\n        this.processData(false);\n        if (!this.isBlazor) {\n            this.enableCanvas ? this.createChartSvg() : this.removeSvg();\n            this.refreshAxis();\n            this.refreshBound();\n            this.trigger('loaded', { chart: this.isBlazor ? {} : this });\n        }\n    };\n    /**\n     * To remove style element\n     */\n    Chart.prototype.removeStyles = function () {\n        removeElement(this.element.id + '_ej2_chart_selection');\n        removeElement(this.element.id + '_ej2_chart_highlight');\n    };\n    /**\n     * To trigger the manual mouse move event for live chart tooltip\n     */\n    Chart.prototype.mouseMoveEvent = function () {\n        if (this.tooltip.enable && this.previousPageX !== null && this.previousPageY !== null) {\n            var mousemove = document.createEvent('MouseEvent');\n            mousemove.initMouseEvent('mousemove', true, false, window, 1, 100, 100, this.previousPageX, this.previousPageY, false, false, false, false, 0, null);\n            this.element.dispatchEvent(mousemove);\n        }\n    };\n    /**\n     * Displays a tooltip for the data points.\n     *\n     * @param {object} x - Specifies the x value of the point or x coordinate.\n     * @param {number} y - Specifies the x value of the point or y coordinate.\n     * @param {boolean} isPoint - Specifies whether x and y are data point or chart coordinates.\n     * @returns {void}\n     */\n    Chart.prototype.showTooltip = function (x, y, isPoint) {\n        if (isPoint === void 0) { isPoint = false; }\n        if (isPoint) {\n            for (var _i = 0, _a = this.visibleSeries; _i < _a.length; _i++) {\n                var series = _a[_i];\n                for (var _b = 0, _c = series.points; _b < _c.length; _b++) {\n                    var point = _c[_b];\n                    var pointX = series.xAxis.valueType == 'DateTime' ? point.xValue : point.x;\n                    var xValue = x;\n                    if (series.xAxis.valueType == 'DateTime') {\n                        xValue = new Date(xValue).getTime();\n                    }\n                    if (x == pointX && y === point.yValue) {\n                        this.mouseX = point.regions[0].x + this.chartAxisLayoutPanel.seriesClipRect.x;\n                        this.mouseY = point.regions[0].y + this.chartAxisLayoutPanel.seriesClipRect.y;\n                        this.tooltipModule.tooltip();\n                        this.markerRender.mouseMoveHandler();\n                        break;\n                    }\n                }\n            }\n        }\n        else {\n            if (this.isTouch) {\n                this.startMove = true;\n            }\n            this.mouseX = x;\n            this.mouseY = y;\n            this.tooltipModule.mouseMoveHandler();\n            this.markerRender.mouseMoveHandler();\n        }\n    };\n    /**\n     * Hides a tooltip in the chart.\n     *\n     * @returns {void}\n     */\n    Chart.prototype.hideTooltip = function () {\n        this.tooltipModule.removeTooltip(Browser.isDevice ? 2000 : 1000);\n    };\n    /**\n     * Displays a crosshair for the chart.\n     *\n     * @param {object} x - Specifies the x value of the point or x coordinate.\n     * @param {number} y - Specifies the x value of the point or y coordinate.\n     * @returns {void}\n     */\n    Chart.prototype.showCrosshair = function (x, y) {\n        this.mouseX = x;\n        this.mouseY = y;\n        this.isCrosshair = false;\n        if (withInBounds(this.mouseX, this.mouseY, this.chartAxisLayoutPanel.seriesClipRect)) {\n            this.crosshairModule.crosshair();\n        }\n        else {\n            this.hideCrosshair();\n        }\n        this.isCrosshair = true;\n    };\n    /**\n     * Hides a tooltip in the chart.\n     *\n     * @returns {void}\n     */\n    Chart.prototype.hideCrosshair = function () {\n        this.crosshairModule.removeCrosshair(Browser.isDevice ? 2000 : 1000);\n    };\n    /**\n     * Called internally if any of the property value changed.\n     * @private\n     */\n    // tslint:disable-next-line:max-func-body-length\n    Chart.prototype.onPropertyChanged = function (newProp, oldProp) {\n        var renderer = false;\n        var refreshBounds = false;\n        this.animateSeries = false;\n        var axis;\n        if (!this.delayRedraw) {\n            for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n                var prop = _a[_i];\n                switch (prop) {\n                    case 'primaryXAxis':\n                        axis = newProp.primaryXAxis;\n                        refreshBounds = this.axisChange(axis);\n                        if (newProp.primaryXAxis.edgeLabelPlacement) {\n                            renderer = true;\n                        }\n                        if (!newProp.primaryXAxis.crosshairTooltip) {\n                            refreshBounds = true;\n                        }\n                        if (!isNullOrUndefined(axis.isInversed) || !isNullOrUndefined(axis.opposedPosition)) {\n                            this.primaryXAxis.setIsInversedAndOpposedPosition();\n                        }\n                        break;\n                    case 'primaryYAxis':\n                        axis = newProp.primaryYAxis;\n                        refreshBounds = this.axisChange(axis);\n                        if (newProp.primaryYAxis.edgeLabelPlacement) {\n                            renderer = true;\n                        }\n                        if (!newProp.primaryYAxis.crosshairTooltip) {\n                            refreshBounds = true;\n                        }\n                        if (!isNullOrUndefined(axis.isInversed) || !isNullOrUndefined(axis.opposedPosition)) {\n                            this.primaryYAxis.setIsInversedAndOpposedPosition();\n                        }\n                        break;\n                    case 'axes':\n                        for (var _b = 0, _c = Object.keys(newProp.axes); _b < _c.length; _b++) {\n                            var index = _c[_b];\n                            axis = newProp.axes[index];\n                            refreshBounds = refreshBounds || this.axisChange(axis);\n                            if (!axis.crosshairTooltip) {\n                                refreshBounds = true;\n                            }\n                            if (!isNullOrUndefined(axis.isInversed) || !isNullOrUndefined(axis.opposedPosition)) {\n                                this.axes[index].setIsInversedAndOpposedPosition();\n                            }\n                        }\n                        break;\n                    case 'height':\n                    case 'width':\n                        this.createChartSvg();\n                        refreshBounds = true;\n                        break;\n                    case 'subTitle':\n                    case 'title':\n                        refreshBounds = true;\n                        break;\n                    case 'titleStyle':\n                        if (newProp.titleStyle && (newProp.titleStyle.size || newProp.titleStyle.textOverflow)) {\n                            refreshBounds = true;\n                        }\n                        else {\n                            renderer = true;\n                        }\n                        break;\n                    case 'subTitleStyle':\n                        if (newProp.subTitleStyle && (newProp.subTitleStyle.size || newProp.subTitleStyle.textOverflow)) {\n                            refreshBounds = true;\n                        }\n                        else {\n                            renderer = true;\n                        }\n                        break;\n                    case 'border':\n                        renderer = true;\n                        break;\n                    case 'dataSource':\n                        this.processData(false);\n                        refreshBounds = true;\n                        break;\n                    case 'enableCanvas':\n                        this.refresh();\n                        break;\n                    case 'series':\n                        var len = this.series.length;\n                        var seriesRefresh = false;\n                        var series = void 0;\n                        var blazorProp = void 0;\n                        for (var i = 0; i < len; i++) {\n                            series = newProp.series[i];\n                            // I264774 blazor series visible property binding not working issue fixed.\n                            if (this.isBlazor && series && ((series.visible !== oldProp.series[i].visible) || series.isClosed ||\n                                series.marker || series.emptyPointSettings || series.type || series.boxPlotMode || series.showMean)) {\n                                blazorProp = true;\n                            }\n                            if (!isNullOrUndefined(series) && (series.dataSource || series.query || series.errorBar || series.xName ||\n                                series.yName || series.size || series.high || series.low || series.open || series.close || series.trendlines ||\n                                series.fill || series.name || series.marker || series.width || series.binInterval || series.type || (series.visible !== oldProp.series[i].visible) || blazorProp)) {\n                                extend(this.getVisibleSeries(this.visibleSeries, i), series, null, true);\n                                seriesRefresh = true;\n                            }\n                        }\n                        if (seriesRefresh) {\n                            this.calculateVisibleSeries();\n                            this.initTechnicalIndicators();\n                            this.initTrendLines();\n                            this.refreshDefinition(this.columns);\n                            this.refreshDefinition(this.rows);\n                            this.calculateVisibleAxis();\n                            this.processData(false);\n                            refreshBounds = true;\n                        }\n                        break;\n                    case 'indicators':\n                        refreshBounds = true;\n                        break;\n                    case 'zoomSettings':\n                        if (newProp.zoomSettings.enableScrollbar || oldProp.zoomSettings.enableScrollbar) {\n                            refreshBounds = true;\n                        }\n                        renderer = true;\n                        break;\n                    case 'background':\n                        renderer = true;\n                        break;\n                    case 'chartArea':\n                        if (newProp.chartArea.border && newProp.chartArea.border.width) {\n                            refreshBounds = true;\n                        }\n                        renderer = true;\n                        break;\n                    case 'legendSettings':\n                        if (!newProp.legendSettings.background || !newProp.legendSettings.opacity) {\n                            refreshBounds = true;\n                        }\n                        renderer = true;\n                        break;\n                    case 'palettes':\n                        this.calculateVisibleSeries();\n                        renderer = true;\n                        break;\n                    case 'selectedDataIndexes':\n                        if (this.selectionModule) {\n                            this.selectionModule.currentMode = this.selectionMode;\n                            this.selectionModule.selectedDataIndexes = this.selectedDataIndexes;\n                            this.selectionModule.styleId = this.element.id + '_ej2_chart_selection';\n                            this.selectionModule.redrawSelection(this, oldProp.selectionMode, true);\n                        }\n                        else if (this.highlightModule) {\n                            this.highlightModule.currentMode = this.highlightMode;\n                            this.highlightModule.highlightDataIndexes = this.selectedDataIndexes;\n                            this.highlightModule.styleId = this.element.id + '_ej2_chart_highlight';\n                            this.highlightModule.redrawSelection(this, oldProp.selectionMode, true);\n                        }\n                        break;\n                    case 'selectionMode':\n                        if (this.selectionModule && newProp.selectionMode && newProp.selectionMode.indexOf('Drag') === -1) {\n                            this.selectionModule.currentMode = this.selectionMode;\n                            this.selectionModule.styleId = this.element.id + '_ej2_chart_selection';\n                            this.selectionModule.redrawSelection(this, oldProp.selectionMode, true);\n                        }\n                        break;\n                    case 'isMultiSelect':\n                        if (this.selectionModule && !newProp.isMultiSelect && this.selectionModule.selectedDataIndexes.length > 1) {\n                            this.selectionModule.currentMode = this.selectionMode;\n                            this.selectionModule.styleId = this.element.id + '_ej2_chart_selection';\n                            this.selectionModule.redrawSelection(this, oldProp.selectionMode);\n                        }\n                        break;\n                    case 'highlightMode':\n                    case 'selectionPattern':\n                    case 'highlightPattern':\n                        this.removeStyles();\n                        renderer = true;\n                        break;\n                    case 'theme':\n                        this.animateSeries = true;\n                        break;\n                    case 'enableRtl':\n                    case 'locale':\n                    case 'currencyCode':\n                        if (this.isBlazor) {\n                            this.setCulture();\n                            renderer = true;\n                        }\n                        else {\n                            this.refresh();\n                        }\n                        break;\n                    case 'tooltip':\n                        if (this.tooltipModule) { // To check the tooltip enable is true.\n                            this.tooltipModule.previousPoints = [];\n                            if (this.tooltip.template) {\n                                this.tooltipModule.template = this.tooltip.template;\n                            }\n                        }\n                        break;\n                }\n            }\n            if (!refreshBounds && renderer) {\n                this.rotatedDataLabelCollections = [];\n                this.removeSvg();\n                this.renderElements();\n                this.trigger('loaded', { chart: this.isBlazor ? {} : this });\n            }\n            if (refreshBounds) {\n                this.enableCanvas ? this.createChartSvg() : this.removeSvg();\n                if (this.isReact) {\n                    this.clearTemplate();\n                }\n                this.dragY = null;\n                this.refreshAxis();\n                this.refreshBound();\n                this.trigger('loaded', { chart: this.isBlazor ? {} : this });\n                this.redraw = false;\n                this.animated = false;\n            }\n        }\n    };\n    __decorate([\n        Property(null)\n    ], Chart.prototype, \"width\", void 0);\n    __decorate([\n        Property(null)\n    ], Chart.prototype, \"height\", void 0);\n    __decorate([\n        Property('')\n    ], Chart.prototype, \"title\", void 0);\n    __decorate([\n        Property('')\n    ], Chart.prototype, \"dataSource\", void 0);\n    __decorate([\n        Complex({ fontFamily: null, size: \"16px\", fontStyle: 'Normal', fontWeight: '600', color: null }, titleSettings)\n    ], Chart.prototype, \"titleStyle\", void 0);\n    __decorate([\n        Property('')\n    ], Chart.prototype, \"subTitle\", void 0);\n    __decorate([\n        Complex({ fontFamily: null, size: \"14px\", fontStyle: 'Normal', fontWeight: '400', color: null }, titleSettings)\n    ], Chart.prototype, \"subTitleStyle\", void 0);\n    __decorate([\n        Complex({}, Margin)\n    ], Chart.prototype, \"margin\", void 0);\n    __decorate([\n        Complex({ color: '#DDDDDD', width: 0 }, Border)\n    ], Chart.prototype, \"border\", void 0);\n    __decorate([\n        Property(null)\n    ], Chart.prototype, \"background\", void 0);\n    __decorate([\n        Complex({ border: { color: null, width: 0.5 }, background: 'transparent' }, ChartArea)\n    ], Chart.prototype, \"chartArea\", void 0);\n    __decorate([\n        Complex({ name: 'primaryXAxis' }, Axis)\n    ], Chart.prototype, \"primaryXAxis\", void 0);\n    __decorate([\n        Complex({ name: 'primaryYAxis' }, Axis)\n    ], Chart.prototype, \"primaryYAxis\", void 0);\n    __decorate([\n        Collection([{}], Row)\n    ], Chart.prototype, \"rows\", void 0);\n    __decorate([\n        Collection([{}], Column)\n    ], Chart.prototype, \"columns\", void 0);\n    __decorate([\n        Collection([{}], Axis)\n    ], Chart.prototype, \"axes\", void 0);\n    __decorate([\n        Collection([{}], Series)\n    ], Chart.prototype, \"series\", void 0);\n    __decorate([\n        Collection([{}], ChartAnnotationSettings)\n    ], Chart.prototype, \"annotations\", void 0);\n    __decorate([\n        Property([])\n    ], Chart.prototype, \"palettes\", void 0);\n    __decorate([\n        Property('Material')\n    ], Chart.prototype, \"theme\", void 0);\n    __decorate([\n        Complex({}, TooltipSettings)\n    ], Chart.prototype, \"tooltip\", void 0);\n    __decorate([\n        Complex({}, CrosshairSettings)\n    ], Chart.prototype, \"crosshair\", void 0);\n    __decorate([\n        Complex({}, LegendSettings)\n    ], Chart.prototype, \"legendSettings\", void 0);\n    __decorate([\n        Collection([{}], RangeColorSetting)\n    ], Chart.prototype, \"rangeColorSettings\", void 0);\n    __decorate([\n        Complex({}, ZoomSettings)\n    ], Chart.prototype, \"zoomSettings\", void 0);\n    __decorate([\n        Property('')\n    ], Chart.prototype, \"highlightColor\", void 0);\n    __decorate([\n        Property('None')\n    ], Chart.prototype, \"selectionMode\", void 0);\n    __decorate([\n        Property('None')\n    ], Chart.prototype, \"highlightMode\", void 0);\n    __decorate([\n        Property('None')\n    ], Chart.prototype, \"selectionPattern\", void 0);\n    __decorate([\n        Property('None')\n    ], Chart.prototype, \"highlightPattern\", void 0);\n    __decorate([\n        Property(false)\n    ], Chart.prototype, \"isMultiSelect\", void 0);\n    __decorate([\n        Property(false)\n    ], Chart.prototype, \"allowMultiSelection\", void 0);\n    __decorate([\n        Property(true)\n    ], Chart.prototype, \"enableExport\", void 0);\n    __decorate([\n        Property(false)\n    ], Chart.prototype, \"allowExport\", void 0);\n    __decorate([\n        Collection([], Indexes)\n    ], Chart.prototype, \"selectedDataIndexes\", void 0);\n    __decorate([\n        Property(false)\n    ], Chart.prototype, \"useGroupingSeparator\", void 0);\n    __decorate([\n        Property(false)\n    ], Chart.prototype, \"enableAutoIntervalOnBothAxis\", void 0);\n    __decorate([\n        Property(false)\n    ], Chart.prototype, \"isTransposed\", void 0);\n    __decorate([\n        Property(false)\n    ], Chart.prototype, \"enableCanvas\", void 0);\n    __decorate([\n        Property(null)\n    ], Chart.prototype, \"backgroundImage\", void 0);\n    __decorate([\n        Collection([], TechnicalIndicator)\n    ], Chart.prototype, \"indicators\", void 0);\n    __decorate([\n        Property(true)\n    ], Chart.prototype, \"enableAnimation\", void 0);\n    __decorate([\n        Property(null)\n    ], Chart.prototype, \"description\", void 0);\n    __decorate([\n        Property(1)\n    ], Chart.prototype, \"tabIndex\", void 0);\n    __decorate([\n        Property(true)\n    ], Chart.prototype, \"enableSideBySidePlacement\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"resized\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"beforeResize\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"annotationRender\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"beforePrint\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"loaded\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"beforeExport\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"afterExport\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"load\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"animationComplete\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"legendRender\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"textRender\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"pointRender\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"seriesRender\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"axisLabelRender\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"axisLabelClick\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"axisRangeCalculated\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"axisMultiLabelRender\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"legendClick\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"multiLevelLabelClick\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"tooltipRender\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"sharedTooltipRender\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"chartMouseMove\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"chartMouseClick\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"chartDoubleClick\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"pointClick\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"pointDoubleClick\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"pointMove\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"chartMouseLeave\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"chartMouseDown\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"chartMouseUp\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"dragComplete\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"selectionComplete\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"zoomComplete\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"onZooming\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"scrollStart\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"scrollEnd\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"scrollChanged\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"dragStart\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"drag\", void 0);\n    __decorate([\n        Event()\n    ], Chart.prototype, \"dragEnd\", void 0);\n    __decorate([\n        Property('USD')\n    ], Chart.prototype, \"currencyCode\", void 0);\n    Chart = __decorate([\n        NotifyPropertyChanges\n    ], Chart);\n    return Chart;\n}(Component));\nexport { Chart };\n","/**\n * Function helps to find which highlightSearch is to call based on your data.\n *\n * @param  {HTMLElement} element - Specifies an li element.\n * @param  {string} query - Specifies the string to be highlighted.\n * @param  {boolean} ignoreCase - Specifies the ignoreCase option.\n * @param  {HightLightType} type - Specifies the type of highlight.\n * @returns {void}\n */\nexport function highlightSearch(element, query, ignoreCase, type) {\n    if (query === '') {\n        return;\n    }\n    else {\n        var ignoreRegex = ignoreCase ? 'gim' : 'gm';\n        // eslint-disable-next-line\n        query = /^[a-zA-Z0-9- ]*$/.test(query) ? query : query.replace(/[\\-\\[\\]\\/\\{\\}\\(\\)\\*\\+\\?\\.\\\\\\^\\$\\|]/g, '\\\\$&');\n        var replaceQuery = type === 'StartsWith' ? '^(' + query + ')' : type === 'EndsWith' ?\n            '(' + query + ')$' : '(' + query + ')';\n        // eslint-disable-next-line security/detect-non-literal-regexp\n        findTextNode(element, new RegExp(replaceQuery, ignoreRegex));\n    }\n}\n/* eslint-enable jsdoc/require-param, valid-jsdoc */\n/**\n *\n * @param {HTMLElement} element - Specifies the element.\n * @param {RegExp} pattern - Specifies the regex to match the searched text.\n * @returns {void}\n */\nfunction findTextNode(element, pattern) {\n    for (var index = 0; element.childNodes && (index < element.childNodes.length); index++) {\n        if (element.childNodes[index].nodeType === 3 && element.childNodes[index].textContent.trim() !== '') {\n            var value = element.childNodes[index].nodeValue.trim().replace(pattern, '<span class=\"e-highlight\">$1</span>');\n            element.childNodes[index].nodeValue = '';\n            element.innerHTML = element.innerHTML.trim() + value;\n            break;\n        }\n        else {\n            findTextNode(element.childNodes[index], pattern);\n        }\n    }\n}\n/**\n * Function helps to remove highlighted element based on your data.\n *\n * @param  {HTMLElement} content - Specifies an content element.\n * @returns {void}\n */\nexport function revertHighlightSearch(content) {\n    var contentElement = content.querySelectorAll('.e-highlight');\n    for (var i = contentElement.length - 1; i >= 0; i--) {\n        var parent_1 = contentElement[i].parentNode;\n        var text = document.createTextNode(contentElement[i].textContent);\n        parent_1.replaceChild(text, contentElement[i]);\n    }\n}\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// <reference path='../combo-box/combo-box-model.d.ts'/>\nimport { Property, EventHandler, isNullOrUndefined, detach } from '@syncfusion/ej2-base';\nimport { Event, Complex } from '@syncfusion/ej2-base';\nimport { removeClass, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { ComboBox } from '../combo-box/combo-box';\nimport { highlightSearch, revertHighlightSearch } from '../common/highlight-search';\nimport { Search } from '../common/incremental-search';\nimport { FieldSettings } from '../drop-down-base/drop-down-base';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\ndropDownListClasses.root = 'e-autocomplete';\ndropDownListClasses.icon = 'e-input-group-icon e-ddl-icon e-search-icon';\n/**\n * The AutoComplete component provides the matched suggestion list when type into the input,\n * from which the user can select one.\n * ```html\n * <input id=\"list\" type=\"text\"/>\n * ```\n * ```typescript\n *   let atcObj:AutoComplete = new AutoComplete();\n *   atcObj.appendTo(\"#list\");\n * ```\n */\nvar AutoComplete = /** @class */ (function (_super) {\n    __extends(AutoComplete, _super);\n    /**\n     * * Constructor for creating the widget\n     *\n     * @param {AutoCompleteModel} options - Specifies the AutoComplete model.\n     * @param {string | HTMLElement} element - Specifies the element to render as component.\n     * @private\n     */\n    function AutoComplete(options, element) {\n        var _this_1 = _super.call(this, options, element) || this;\n        _this_1.isFiltered = false;\n        _this_1.searchList = false;\n        return _this_1;\n    }\n    /**\n     * Initialize the event handler\n     *\n     * @private\n     * @returns {void}\n     */\n    AutoComplete.prototype.preRender = function () {\n        _super.prototype.preRender.call(this);\n    };\n    AutoComplete.prototype.getLocaleName = function () {\n        return 'auto-complete';\n    };\n    AutoComplete.prototype.getNgDirective = function () {\n        return 'EJS-AUTOCOMPLETE';\n    };\n    AutoComplete.prototype.getQuery = function (query) {\n        var filterQuery = query ? query.clone() : this.query ? this.query.clone() : new Query();\n        var filterType = (this.queryString === '' && !isNullOrUndefined(this.value)) ? 'equal' : this.filterType;\n        var queryString = (this.queryString === '' && !isNullOrUndefined(this.value)) ? this.value : this.queryString;\n        if (this.isFiltered) {\n            return filterQuery;\n        }\n        if (this.queryString !== null && this.queryString !== '') {\n            var dataType = this.typeOfData(this.dataSource).typeof;\n            if (!(this.dataSource instanceof DataManager) && dataType === 'string' || dataType === 'number') {\n                filterQuery.where('', filterType, queryString, this.ignoreCase, this.ignoreAccent);\n            }\n            else if ((!this.enableVirtualization) || (this.enableVirtualization && (!(this.dataSource instanceof DataManager) || (this.dataSource instanceof DataManager && this.virtualGroupDataSource)))) {\n                var mapping = !isNullOrUndefined(this.fields.value) ? this.fields.value : '';\n                filterQuery.where(mapping, filterType, queryString, this.ignoreCase, this.ignoreAccent);\n            }\n        }\n        if (!isNullOrUndefined(this.suggestionCount) && !this.enableVirtualization) {\n            // Since defualt value of suggestioncount is 20, checked the condition\n            if (this.suggestionCount !== 20) {\n                for (var queryElements = 0; queryElements < filterQuery.queries.length; queryElements++) {\n                    if (filterQuery.queries[queryElements].fn === 'onTake') {\n                        filterQuery.queries.splice(queryElements, 1);\n                    }\n                }\n            }\n            filterQuery.take(this.suggestionCount);\n        }\n        if (this.enableVirtualization && (!(this.dataSource instanceof DataManager) || (this.dataSource instanceof DataManager && this.virtualGroupDataSource))) {\n            var takeValue = this.getTakeValue();\n            filterQuery.skip(this.virtualItemStartIndex);\n            filterQuery.take(takeValue);\n            filterQuery.requiresCount();\n        }\n        return filterQuery;\n    };\n    AutoComplete.prototype.searchLists = function (e) {\n        var _this_1 = this;\n        this.isTyped = true;\n        this.isDataFetched = this.isSelectCustom = false;\n        this.checkAndResetCache();\n        if (isNullOrUndefined(this.list)) {\n            _super.prototype.renderList.call(this, e, true);\n        }\n        this.queryString = this.filterInput.value;\n        if (e.type !== 'mousedown' && (e.keyCode === 40 || e.keyCode === 38)) {\n            this.queryString = this.queryString === '' ? null : this.queryString;\n            this.beforePopupOpen = true;\n            this.resetList(this.dataSource, this.fields, null, e);\n            return;\n        }\n        this.isSelected = false;\n        this.activeIndex = null;\n        var eventArgs = {\n            preventDefaultAction: false,\n            text: this.filterInput.value,\n            updateData: function (dataSource, query, fields) {\n                if (eventArgs.cancel) {\n                    return;\n                }\n                _this_1.isFiltered = true;\n                _this_1.filterAction(dataSource, query, fields);\n            },\n            cancel: false\n        };\n        this.trigger('filtering', eventArgs, function (eventArgs) {\n            if (!eventArgs.cancel && !_this_1.isFiltered && !eventArgs.preventDefaultAction) {\n                _this_1.searchList = true;\n                _this_1.filterAction(_this_1.dataSource, null, _this_1.fields, e);\n            }\n        });\n    };\n    /**\n     * To filter the data from given data source by using query\n     *\n     * @param {Object[] | DataManager } dataSource - Set the data source to filter.\n     * @param {Query} query - Specify the query to filter the data.\n     * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n     * @returns {void}\n\n     */\n    AutoComplete.prototype.filter = function (dataSource, query, fields) {\n        this.isFiltered = true;\n        this.filterAction(dataSource, query, fields);\n    };\n    AutoComplete.prototype.filterAction = function (dataSource, query, fields, e) {\n        this.beforePopupOpen = true;\n        var isNoDataElement = this.list.classList.contains('e-nodata');\n        if (this.queryString !== '' && (this.queryString.length >= this.minLength)) {\n            if (this.enableVirtualization && this.isFiltering() && this.isTyped) {\n                this.isPreventScrollAction = true;\n                this.list.scrollTop = 0;\n                this.previousStartIndex = 0;\n                this.virtualListInfo = null;\n            }\n            this.resetList(dataSource, fields, query, e);\n            if (this.enableVirtualization && isNoDataElement && !this.list.classList.contains('e-nodata')) {\n                if (!this.list.querySelector('.e-virtual-ddl-content')) {\n                    this.list.appendChild(this.createElement('div', {\n                        className: 'e-virtual-ddl-content',\n                        styles: this.getTransformValues()\n                    })).appendChild(this.list.querySelector('.e-list-parent'));\n                }\n                if (!this.list.querySelector('.e-virtual-ddl')) {\n                    var virualElement = this.createElement('div', {\n                        id: this.element.id + '_popup', className: 'e-virtual-ddl', styles: this.GetVirtualTrackHeight()\n                    });\n                    document.getElementsByClassName('e-popup')[0].querySelector('.e-dropdownbase').appendChild(virualElement);\n                }\n            }\n            if ((this.getModuleName() === 'autocomplete' && !(this.dataSource instanceof DataManager)) || (this.getModuleName() === 'autocomplete' && (this.dataSource instanceof DataManager) && this.totalItemCount != 0)) {\n                this.getFilteringSkeletonCount();\n            }\n        }\n        else {\n            this.hidePopup(e);\n            this.beforePopupOpen = false;\n        }\n        this.renderReactTemplates();\n    };\n    AutoComplete.prototype.clearAll = function (e, property) {\n        if (isNullOrUndefined(property) || (!isNullOrUndefined(property) && isNullOrUndefined(property.dataSource))) {\n            _super.prototype.clearAll.call(this, e);\n            this.checkAndResetCache();\n        }\n        if (this.beforePopupOpen) {\n            this.hidePopup();\n        }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    AutoComplete.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n        if (!this.enableVirtualization) {\n            this.fixedHeaderElement = null;\n        }\n        if ((this.getModuleName() === 'autocomplete' && !(this.dataSource instanceof DataManager)) || (this.getModuleName() === 'autocomplete' && (this.dataSource instanceof DataManager) && this.totalItemCount != 0)) {\n            this.getFilteringSkeletonCount();\n        }\n        _super.prototype.onActionComplete.call(this, ulElement, list, e);\n        var item = this.list.querySelector('.' + dropDownListClasses.li);\n        if (!isNullOrUndefined(item)) {\n            removeClass([item], dropDownListClasses.focus);\n        }\n        this.postBackAction();\n    };\n    AutoComplete.prototype.postBackAction = function () {\n        if (this.autofill && !isNullOrUndefined(this.liCollections[0]) && this.searchList) {\n            var items = [this.liCollections[0]];\n            var dataSource = this.listData;\n            var type = this.typeOfData(dataSource).typeof;\n            var searchItem = Search(this.inputElement.value, items, 'StartsWith', this.ignoreCase, dataSource, this.fields, type);\n            this.searchList = false;\n            if (!isNullOrUndefined(searchItem.item)) {\n                _super.prototype.setAutoFill.call(this, this.liCollections[0], true);\n            }\n        }\n    };\n    AutoComplete.prototype.setSelection = function (li, e) {\n        if (!this.isValidLI(li)) {\n            this.selectedLI = li;\n            return;\n        }\n        if (!isNullOrUndefined(e) && e.type === 'keydown' && e.action !== 'enter'\n            && e.action !== 'tab' && this.isValidLI(li)) {\n            var value = this.getFormattedValue(li.getAttribute('data-value'));\n            this.activeIndex = this.getIndexByValue(value);\n            this.setHoverList(li);\n            this.selectedLI = li;\n            this.setScrollPosition(e);\n            if (this.autofill && this.isPopupOpen) {\n                this.preventAutoFill = false;\n                var isKeyNavigate = (e && e.action === 'down' || e.action === 'up' ||\n                    e.action === 'home' || e.action === 'end' || e.action === 'pageUp' || e.action === 'pageDown');\n                _super.prototype.setAutoFill.call(this, li, isKeyNavigate);\n            }\n        }\n        else {\n            _super.prototype.setSelection.call(this, li, e);\n        }\n    };\n    AutoComplete.prototype.listOption = function (dataSource, fieldsSettings) {\n        var _this_1 = this;\n        var fields = _super.prototype.listOption.call(this, dataSource, fieldsSettings);\n        if (isNullOrUndefined(fields.itemCreated)) {\n            fields.itemCreated = function (e) {\n                if (_this_1.highlight) {\n                    if (_this_1.element.tagName === _this_1.getNgDirective() && _this_1.itemTemplate) {\n                        setTimeout(function () {\n                            highlightSearch(e.item, _this_1.queryString, _this_1.ignoreCase, _this_1.filterType);\n                        }, 0);\n                    }\n                    else {\n                        var isHtmlElement = /<[^>]*>/g.test(e.item.innerText);\n                        if (isHtmlElement) {\n                            e.item.innerText = e.item.innerText.replace(/[\\u00A0-\\u9999<>&]/g, function (match) { return \"&#\" + match.charCodeAt(0) + \";\"; });\n                        }\n                        highlightSearch(e.item, _this_1.queryString, _this_1.ignoreCase, _this_1.filterType);\n                    }\n                }\n            };\n        }\n        else {\n            var itemCreated_1 = fields.itemCreated;\n            fields.itemCreated = function (e) {\n                if (_this_1.highlight) {\n                    highlightSearch(e.item, _this_1.queryString, _this_1.ignoreCase, _this_1.filterType);\n                }\n                itemCreated_1.apply(_this_1, [e]);\n            };\n        }\n        return fields;\n    };\n    AutoComplete.prototype.isFiltering = function () {\n        return true;\n    };\n    AutoComplete.prototype.renderPopup = function (e) {\n        if (!this.enableVirtualization) {\n            this.list.scrollTop = 0;\n        }\n        _super.prototype.renderPopup.call(this, e);\n    };\n    AutoComplete.prototype.isEditTextBox = function () {\n        return false;\n    };\n    AutoComplete.prototype.isPopupButton = function () {\n        return this.showPopupButton;\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    AutoComplete.prototype.isSelectFocusItem = function (element) {\n        return false;\n    };\n    AutoComplete.prototype.setInputValue = function (newProp, oldProp) {\n        var oldValue = oldProp && oldProp.text ? oldProp.text : oldProp ? oldProp.value : oldProp;\n        var value = newProp && newProp.text ? newProp.text : newProp && newProp.value ? newProp.value : this.value;\n        if (value && this.typedString === '' && !this.allowCustom && !(this.dataSource instanceof DataManager)) {\n            var checkFields_1_1 = this.typeOfData(this.dataSource).typeof === 'string' ? '' : this.fields.value;\n            var listLength_1 = this.getItems().length;\n            var query = new Query();\n            var _this_2 = this;\n            new DataManager(this.dataSource).executeQuery(query.where(new Predicate(checkFields_1_1, 'equal', value)))\n                .then(function (e) {\n                if (e.result.length > 0) {\n                    _this_2.value = checkFields_1_1 !== '' ? e.result[0][_this_2.fields.value].toString() : e.result[0].toString();\n                    _this_2.addItem(e.result, listLength_1);\n                    _this_2.updateValues();\n                }\n                else {\n                    newProp && newProp.text ? _this_2.setOldText(oldValue) : newProp && newProp.value ? _this_2.setOldValue(oldValue) : _this_2.updateValues();\n                }\n            });\n        }\n        else if (newProp) {\n            newProp.text ? this.setOldText(oldValue) : this.setOldValue(oldValue);\n        }\n    };\n    /**\n     * Search the entered text and show it in the suggestion list if available.\n     *\n     * @returns {void}\n\n     */\n    AutoComplete.prototype.showPopup = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        if (this.beforePopupOpen) {\n            this.refreshPopup();\n            return;\n        }\n        this.beforePopupOpen = true;\n        this.preventAutoFill = true;\n        if (isNullOrUndefined(this.list)) {\n            this.renderList(e);\n        }\n        else {\n            this.resetList(this.dataSource, this.fields, null, e);\n        }\n    };\n    /**\n     * Hides the popup if it is in open state.\n     *\n     * @returns {void}\n     */\n    AutoComplete.prototype.hidePopup = function (e) {\n        _super.prototype.hidePopup.call(this, e);\n        this.activeIndex = null;\n        this.virtualListInfo = this.viewPortInfo;\n        this.previousStartIndex = this.viewPortInfo.startIndex;\n        this.startIndex = this.viewPortInfo.startIndex;\n        this.previousEndIndex = this.viewPortInfo.endIndex;\n    };\n    /**\n     * Dynamically change the value of properties.\n     *\n     * @param {AutoCompleteModel} newProp - Returns the dynamic property value of the component.\n     * @param {AutoCompleteModel} oldProp - Returns the previous property value of the component.\n     * @private\n     * @returns {void}\n     */\n    AutoComplete.prototype.onPropertyChanged = function (newProp, oldProp) {\n        if (this.getModuleName() === 'autocomplete') {\n            this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n        }\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'showPopupButton':\n                    if (this.showPopupButton) {\n                        var button = Input.appendSpan(dropDownListClasses.icon, this.inputWrapper.container, this.createElement);\n                        this.inputWrapper.buttons[0] = button;\n                        Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n                        if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n                            this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n                        }\n                        if (this.inputWrapper && this.inputWrapper.buttons && this.inputWrapper.buttons[0]) {\n                            EventHandler.add(this.inputWrapper.buttons[0], 'click', this.dropDownClick, this);\n                        }\n                    }\n                    else {\n                        detach(this.inputWrapper.buttons[0]);\n                        this.inputWrapper.buttons[0] = null;\n                    }\n                    break;\n                default: {\n                    // eslint-disable-next-line max-len\n                    var atcProps = this.getPropObject(prop, newProp, oldProp);\n                    _super.prototype.onPropertyChanged.call(this, atcProps.newProperty, atcProps.oldProperty);\n                    break;\n                }\n            }\n        }\n    };\n    AutoComplete.prototype.renderHightSearch = function () {\n        if (this.highlight) {\n            for (var i = 0; i < this.liCollections.length; i++) {\n                var isHighlight = this.ulElement.querySelector('.e-active');\n                if (!isHighlight) {\n                    revertHighlightSearch(this.liCollections[i]);\n                    highlightSearch(this.liCollections[i], this.queryString, this.ignoreCase, this.filterType);\n                }\n            }\n        }\n    };\n    /**\n     * Return the module name of this component.\n     *\n     * @private\n     * @returns {string} Return the module name of this component.\n     */\n    AutoComplete.prototype.getModuleName = function () {\n        return 'autocomplete';\n    };\n    /**\n     * To initialize the control rendering\n     *\n     * @private\n     * @returns {void}\n     */\n    AutoComplete.prototype.render = function () {\n        _super.prototype.render.call(this);\n    };\n    __decorate([\n        Complex({ value: null, iconCss: null, groupBy: null }, FieldSettings)\n    ], AutoComplete.prototype, \"fields\", void 0);\n    __decorate([\n        Property(true)\n    ], AutoComplete.prototype, \"ignoreCase\", void 0);\n    __decorate([\n        Property(false)\n    ], AutoComplete.prototype, \"showPopupButton\", void 0);\n    __decorate([\n        Property(false)\n    ], AutoComplete.prototype, \"highlight\", void 0);\n    __decorate([\n        Property(20)\n    ], AutoComplete.prototype, \"suggestionCount\", void 0);\n    __decorate([\n        Property({})\n    ], AutoComplete.prototype, \"htmlAttributes\", void 0);\n    __decorate([\n        Property(null)\n    ], AutoComplete.prototype, \"query\", void 0);\n    __decorate([\n        Property(1)\n    ], AutoComplete.prototype, \"minLength\", void 0);\n    __decorate([\n        Property('Contains')\n    ], AutoComplete.prototype, \"filterType\", void 0);\n    __decorate([\n        Event()\n    ], AutoComplete.prototype, \"filtering\", void 0);\n    __decorate([\n        Property(null)\n    ], AutoComplete.prototype, \"index\", void 0);\n    __decorate([\n        Property('Never')\n    ], AutoComplete.prototype, \"floatLabelType\", void 0);\n    __decorate([\n        Property(null)\n    ], AutoComplete.prototype, \"valueTemplate\", void 0);\n    __decorate([\n        Property(null)\n    ], AutoComplete.prototype, \"filterBarPlaceholder\", void 0);\n    __decorate([\n        Property(false)\n    ], AutoComplete.prototype, \"allowFiltering\", void 0);\n    __decorate([\n        Property(null)\n    ], AutoComplete.prototype, \"text\", void 0);\n    AutoComplete = __decorate([\n        NotifyPropertyChanges\n    ], AutoComplete);\n    return AutoComplete;\n}(ComboBox));\nexport { AutoComplete };\n","/**\n * Specifies class names\n */\n/** @hidden */\nexport var rowCell = 'e-rowcell';\n/** @hidden */\nexport var gridHeader = 'e-gridheader';\n/** @hidden */\nexport var gridContent = 'e-gridcontent';\n/** @hidden */\nexport var gridFooter = 'e-gridfooter';\n/** @hidden */\nexport var headerContent = 'e-headercontent';\n/** @hidden */\nexport var movableContent = 'e-movablecontent';\n/** @hidden */\nexport var movableHeader = 'e-movableheader';\n/** @hidden */\nexport var frozenContent = 'e-frozencontent';\n/** @hidden */\nexport var frozenHeader = 'e-frozenheader';\n/** @hidden */\nexport var content = 'e-content';\n/** @hidden */\nexport var table = 'e-table';\n/** @hidden */\nexport var row = 'e-row';\n/** @hidden */\nexport var gridChkBox = 'e-gridchkbox';\n/** @hidden */\nexport var editedRow = 'e-editedrow';\n/** @hidden */\nexport var addedRow = 'e-addedrow';\n/**\n * Specifies repeated strings\n */\n/** @hidden */\nexport var changedRecords = 'changedRecords';\n/** @hidden */\nexport var addedRecords = 'addedRecords';\n/** @hidden */\nexport var deletedRecords = 'deletedRecords';\n/** @hidden */\nexport var leftRight = 'Left-Right';\n/** @hidden */\nexport var frozenRight = 'frozen-right';\n/** @hidden */\nexport var frozenLeft = 'frozen-left';\n/** @hidden */\nexport var dataColIndex = 'data-colindex';\n/** @hidden */\nexport var ariaColIndex = 'aria-colindex';\n/** @hidden */\nexport var dataRowIndex = 'data-rowindex';\n/** @hidden */\nexport var ariaRowIndex = 'aria-rowindex';\n/** @hidden */\nexport var tbody = 'tbody';\n/** @hidden */\nexport var colGroup = 'colgroup';\n/** @hidden */\nexport var open = 'open';\n/** @hidden */\nexport var change = 'change';\n/** @hidden */\nexport var focus = 'focus';\n/** @hidden */\nexport var create = 'created';\n/** @hidden */\nexport var beforeOpen = 'beforeOpen';\n/** @hidden */\nexport var downArrow = 'downArrow';\n/** @hidden */\nexport var upArrow = 'upArrow';\n/** @hidden */\nexport var pageUp = 'PageUp';\n/** @hidden */\nexport var pageDown = 'PageDown';\n/** @hidden */\nexport var enter = 'enter';\n/** @hidden */\nexport var shiftEnter = 'shiftEnter';\n/** @hidden */\nexport var tab = 'tab';\n/** @hidden */\nexport var shiftTab = 'shiftTab';\n/** @hidden */\nexport var initialFrozenColumnIndex = 'initialFrozenColumnIndex';\n","//! moment.js locale configuration\n//! locale : English (Canada) [en-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enCa = moment.defineLocale('en-ca', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'YYYY-MM-DD',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY h:mm A',\n            LLLL: 'dddd, MMMM D, YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    return enCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (United Kingdom) [en-gb]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enGb = moment.defineLocale('en-gb', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enGb;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, rippleEffect, NotifyPropertyChanges, Property, closest, setValue } from '@syncfusion/ej2-base';\nimport { addClass, getInstance, getUniqueID, isRippleEnabled, removeClass, attributes, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { detach, Event, EventHandler, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler } from './../common/common';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-radio-wrapper';\nvar ATTRIBUTES = ['title', 'class', 'style', 'disabled', 'readonly', 'name', 'value', 'id'];\n/**\n * The RadioButton is a graphical user interface element that allows you to select one option from the choices.\n * It contains checked and unchecked states.\n * ```html\n * <input type=\"radio\" id=\"radio\"/>\n * <script>\n * var radioObj = new RadioButton({ label: \"Default\" });\n * radioObj.appendTo(\"#radio\");\n * </script>\n * ```\n */\nvar RadioButton = /** @class */ (function (_super) {\n    __extends(RadioButton, _super);\n    /**\n     * Constructor for creating the widget\n     *\n     * @private\n     * @param {RadioButtonModel} options - Specifies Radio button model\n     * @param {string | HTMLInputElement} element - Specifies target element\n     */\n    function RadioButton(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.isFocused = false;\n        return _this;\n    }\n    RadioButton_1 = RadioButton;\n    RadioButton.prototype.changeHandler = function (event) {\n        this.checked = true;\n        this.dataBind();\n        var value = this.element.getAttribute('value');\n        value = this.isVue && value ? this.element.value : this.value;\n        var type = typeof this.value;\n        if (this.isVue && type === 'boolean') {\n            value = value === 'true' ? true : false;\n        }\n        this.trigger('change', { value: value, event: event });\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        if (this.isAngular) {\n            event.stopPropagation();\n        }\n    };\n    RadioButton.prototype.updateChange = function () {\n        var input;\n        var instance;\n        var radioGrp = this.getRadioGroup();\n        for (var i = 0; i < radioGrp.length; i++) {\n            input = radioGrp[i];\n            if (input !== this.element) {\n                instance = getInstance(input, RadioButton_1);\n                instance.checked = false;\n                if (this.tagName === 'EJS-RADIOBUTTON') {\n                    instance.angularValue = this.value;\n                }\n            }\n        }\n    };\n    /**\n     * Destroys the widget.\n     *\n     * @returns {void}\n     */\n    RadioButton.prototype.destroy = function () {\n        var _this = this;\n        var radioWrap = this.wrapper;\n        _super.prototype.destroy.call(this);\n        if (radioWrap) {\n            if (!this.disabled) {\n                this.unWireEvents();\n            }\n            if (this.tagName === 'INPUT') {\n                if (radioWrap.parentNode) {\n                    radioWrap.parentNode.insertBefore(this.element, radioWrap);\n                }\n                detach(radioWrap);\n                this.element.checked = false;\n                ['name', 'value', 'disabled'].forEach(function (key) {\n                    _this.element.removeAttribute(key);\n                });\n            }\n            else {\n                ['role', 'aria-checked', 'class'].forEach(function (key) {\n                    radioWrap.removeAttribute(key);\n                });\n                radioWrap.innerHTML = '';\n                this.element = this.wrapper;\n                if (this.refreshing) {\n                    ['e-control', 'e-radio', 'e-lib'].forEach(function (key) {\n                        _this.element.classList.add(key);\n                    });\n                    setValue('ej2_instances', [this], this.element);\n                }\n            }\n        }\n    };\n    RadioButton.prototype.focusHandler = function () {\n        this.isFocused = true;\n    };\n    RadioButton.prototype.focusOutHandler = function () {\n        var label = this.getLabel();\n        if (label) {\n            label.classList.remove('e-focus');\n        }\n    };\n    RadioButton.prototype.getModuleName = function () {\n        return 'radio';\n    };\n    /**\n     * To get the value of selected radio button in a group.\n     *\n     * @method getSelectedValue\n     * @returns {string} - Selected Value\n     */\n    RadioButton.prototype.getSelectedValue = function () {\n        var input;\n        var radioGrp = this.getRadioGroup();\n        for (var i = 0, len = radioGrp.length; i < len; i++) {\n            input = radioGrp[i];\n            if (input.checked) {\n                return input.value;\n            }\n        }\n        return '';\n    };\n    RadioButton.prototype.getRadioGroup = function () {\n        return document.querySelectorAll('input.e-radio[name=\"' + this.element.getAttribute('name') + '\"]');\n    };\n    /**\n     * Gets the properties to be maintained in the persistence state.\n     *\n     * @private\n     * @returns {string} - Persist Data\n     */\n    RadioButton.prototype.getPersistData = function () {\n        return this.addOnPersist(['checked']);\n    };\n    RadioButton.prototype.getWrapper = function () {\n        if (this.element) {\n            return this.element.parentElement;\n        }\n        else {\n            return null;\n        }\n    };\n    RadioButton.prototype.getLabel = function () {\n        if (this.element) {\n            return this.element.nextElementSibling;\n        }\n        else {\n            return null;\n        }\n    };\n    RadioButton.prototype.initialize = function () {\n        if (isNullOrUndefined(this.initialCheckedValue)) {\n            this.initialCheckedValue = this.checked;\n        }\n        this.initWrapper();\n        this.updateHtmlAttribute();\n        if (this.name) {\n            this.element.setAttribute('name', this.name);\n        }\n        var value = this.element.getAttribute('value');\n        var type = typeof this.value;\n        if (this.isVue && type === 'boolean') {\n            value = value === 'true' ? true : false;\n        }\n        if (this.isVue ? this.value && type !== 'boolean' && !value : this.value) {\n            this.element.setAttribute('value', this.value);\n        }\n        if (this.checked) {\n            this.element.checked = true;\n        }\n        if (this.disabled) {\n            this.setDisabled();\n        }\n    };\n    RadioButton.prototype.initWrapper = function () {\n        var rippleSpan;\n        var wrapper = this.element.parentElement;\n        if (!wrapper.classList.contains(WRAPPER)) {\n            wrapper = this.createElement('div', { className: WRAPPER });\n            this.element.parentNode.insertBefore(wrapper, this.element);\n        }\n        var label = this.createElement('label', { attrs: { for: this.element.id } });\n        wrapper.appendChild(this.element);\n        wrapper.appendChild(label);\n        if (isRippleEnabled) {\n            rippleSpan = this.createElement('span', { className: (RIPPLE) });\n            label.appendChild(rippleSpan);\n            rippleEffect(rippleSpan, {\n                duration: 400,\n                isCenterRipple: true\n            });\n        }\n        wrapper.classList.add('e-wrapper');\n        if (this.enableRtl) {\n            label.classList.add(RTL);\n        }\n        if (this.cssClass) {\n            addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n        }\n        if (this.label) {\n            this.setText(this.label);\n        }\n    };\n    RadioButton.prototype.keyUpHandler = function () {\n        if (this.isFocused) {\n            this.getLabel().classList.add('e-focus');\n        }\n    };\n    RadioButton.prototype.labelMouseDownHandler = function (e) {\n        var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n        rippleMouseHandler(e, rippleSpan);\n    };\n    RadioButton.prototype.labelMouseLeaveHandler = function (e) {\n        var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n        if (rippleSpan) {\n            var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n            for (var i = rippleElem.length - 1; i > 0; i--) {\n                rippleSpan.removeChild(rippleSpan.childNodes[i]);\n            }\n            rippleMouseHandler(e, rippleSpan);\n        }\n    };\n    RadioButton.prototype.labelMouseUpHandler = function (e) {\n        var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n        if (rippleSpan) {\n            var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n            for (var i = rippleElem.length - 1; i > 0; i--) {\n                rippleSpan.removeChild(rippleSpan.childNodes[i]);\n            }\n            rippleMouseHandler(e, rippleSpan);\n        }\n    };\n    RadioButton.prototype.formResetHandler = function () {\n        this.checked = this.initialCheckedValue;\n        if (this.initialCheckedValue) {\n            attributes(this.element, { 'checked': 'true' });\n        }\n    };\n    /**\n     * Called internally if any of the property value changes.\n     *\n     * @private\n     * @param {RadioButtonModel} newProp - Specifies New Properties\n     * @param {RadioButtonModel} oldProp - Specifies Old Properties\n     * @returns {void}\n     */\n    RadioButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n        var wrap = this.getWrapper();\n        var label = this.getLabel();\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'checked':\n                    if (newProp.checked) {\n                        this.updateChange();\n                    }\n                    this.element.checked = newProp.checked;\n                    break;\n                case 'disabled':\n                    if (newProp.disabled) {\n                        this.setDisabled();\n                        this.unWireEvents();\n                    }\n                    else {\n                        this.element.disabled = false;\n                        this.wireEvents();\n                    }\n                    break;\n                case 'cssClass':\n                    if (oldProp.cssClass) {\n                        removeClass([wrap], oldProp.cssClass.split(' '));\n                    }\n                    if (newProp.cssClass) {\n                        addClass([wrap], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n                    }\n                    break;\n                case 'enableRtl':\n                    if (newProp.enableRtl) {\n                        label.classList.add(RTL);\n                    }\n                    else {\n                        label.classList.remove(RTL);\n                    }\n                    break;\n                case 'label':\n                    this.setText(newProp.label);\n                    break;\n                case 'labelPosition':\n                    if (newProp.labelPosition === 'Before') {\n                        label.classList.add('e-right');\n                    }\n                    else {\n                        label.classList.remove('e-right');\n                    }\n                    break;\n                case 'name':\n                    this.element.setAttribute('name', newProp.name);\n                    break;\n                case 'value':\n                    var type = typeof this.htmlAttributes.value;\n                    if (!isNullOrUndefined(this.htmlAttributes) && (this.htmlAttributes.value || type === 'boolean' && !this.htmlAttributes.value)) {\n                        break;\n                    }\n                    this.element.setAttribute('value', newProp.value);\n                    break;\n                case 'htmlAttributes':\n                    this.updateHtmlAttribute();\n                    break;\n            }\n        }\n    };\n    /**\n     * Initialize checked Property, Angular and React and Unique ID support.\n     *\n     * @private\n     * @returns {void}\n     */\n    RadioButton.prototype.preRender = function () {\n        var element = this.element;\n        this.formElement = closest(this.element, 'form');\n        this.tagName = this.element.tagName;\n        element = wrapperInitialize(this.createElement, 'EJS-RADIOBUTTON', 'radio', element, WRAPPER, 'radio');\n        this.element = element;\n        if (this.element.getAttribute('type') !== 'radio') {\n            this.element.setAttribute('type', 'radio');\n        }\n        if (!this.element.id) {\n            this.element.id = getUniqueID('e-' + this.getModuleName());\n        }\n        if (this.tagName === 'EJS-RADIOBUTTON') {\n            var formControlName = this.element.getAttribute('formcontrolname');\n            if (formControlName) {\n                this.setProperties({ 'name': formControlName }, true);\n                this.element.setAttribute('name', formControlName);\n            }\n        }\n    };\n    /**\n     * Initialize the control rendering\n     *\n     * @private\n     * @returns {void}\n     */\n    RadioButton.prototype.render = function () {\n        this.initialize();\n        if (!this.disabled) {\n            this.wireEvents();\n        }\n        this.renderComplete();\n        this.wrapper = this.getWrapper();\n    };\n    RadioButton.prototype.setDisabled = function () {\n        this.element.disabled = true;\n    };\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    RadioButton.prototype.setText = function (text) {\n        var label = this.getLabel();\n        var textLabel = label.getElementsByClassName(LABEL)[0];\n        if (textLabel) {\n            textLabel.textContent = text;\n        }\n        else {\n            text = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(text) : text;\n            textLabel = this.createElement('span', { className: LABEL, innerHTML: text });\n            label.appendChild(textLabel);\n        }\n        if (this.labelPosition === 'Before') {\n            this.getLabel().classList.add('e-right');\n        }\n        else {\n            this.getLabel().classList.remove('e-right');\n        }\n    };\n    RadioButton.prototype.updateHtmlAttribute = function () {\n        if (!isNullOrUndefined(this.htmlAttributes)) {\n            for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n                var key = _a[_i];\n                var wrapper = this.element.parentElement;\n                if (ATTRIBUTES.indexOf(key) > -1) {\n                    if (key === 'class') {\n                        addClass([wrapper], this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ').trim().split(' '));\n                    }\n                    else if (key === 'title' || key === 'style') {\n                        wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                    }\n                    else {\n                        this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                    }\n                }\n                else {\n                    wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                }\n            }\n        }\n    };\n    RadioButton.prototype.unWireEvents = function () {\n        var label = this.wrapper;\n        EventHandler.remove(this.element, 'change', this.changeHandler);\n        EventHandler.remove(this.element, 'focus', this.focusHandler);\n        EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n        EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n        var rippleLabel = label.getElementsByTagName('label')[0];\n        if (rippleLabel) {\n            EventHandler.remove(rippleLabel, 'mousedown', this.labelMouseDownHandler);\n            EventHandler.remove(rippleLabel, 'mouseup', this.labelMouseUpHandler);\n            EventHandler.remove(rippleLabel, 'mouseleave', this.labelMouseLeaveHandler);\n        }\n        if (this.formElement) {\n            EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n        }\n    };\n    RadioButton.prototype.wireEvents = function () {\n        var label = this.getLabel();\n        EventHandler.add(this.element, 'change', this.changeHandler, this);\n        EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n        EventHandler.add(this.element, 'focus', this.focusHandler, this);\n        EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n        var rippleLabel = label.getElementsByClassName(LABEL)[0];\n        if (rippleLabel) {\n            EventHandler.add(rippleLabel, 'mousedown', this.labelMouseDownHandler, this);\n            EventHandler.add(rippleLabel, 'mouseup', this.labelMouseUpHandler, this);\n            EventHandler.add(rippleLabel, 'mouseleave', this.labelMouseLeaveHandler, this);\n        }\n        if (this.formElement) {\n            EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n        }\n    };\n    /**\n     * Click the RadioButton element\n     * its native method\n     *\n     * @public\n     * @returns {void}\n     */\n    RadioButton.prototype.click = function () {\n        this.element.click();\n    };\n    /**\n     * Sets the focus to RadioButton\n     * its native method\n     *\n     * @public\n     * @returns {void}\n     */\n    RadioButton.prototype.focusIn = function () {\n        this.element.focus();\n    };\n    var RadioButton_1;\n    __decorate([\n        Event()\n    ], RadioButton.prototype, \"change\", void 0);\n    __decorate([\n        Event()\n    ], RadioButton.prototype, \"created\", void 0);\n    __decorate([\n        Property(false)\n    ], RadioButton.prototype, \"checked\", void 0);\n    __decorate([\n        Property('')\n    ], RadioButton.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(false)\n    ], RadioButton.prototype, \"disabled\", void 0);\n    __decorate([\n        Property('')\n    ], RadioButton.prototype, \"label\", void 0);\n    __decorate([\n        Property('After')\n    ], RadioButton.prototype, \"labelPosition\", void 0);\n    __decorate([\n        Property('')\n    ], RadioButton.prototype, \"name\", void 0);\n    __decorate([\n        Property('')\n    ], RadioButton.prototype, \"value\", void 0);\n    __decorate([\n        Property(false)\n    ], RadioButton.prototype, \"enableHtmlSanitizer\", void 0);\n    __decorate([\n        Property({})\n    ], RadioButton.prototype, \"htmlAttributes\", void 0);\n    RadioButton = RadioButton_1 = __decorate([\n        NotifyPropertyChanges\n    ], RadioButton);\n    return RadioButton;\n}(Component));\nexport { RadioButton };\n","//! moment.js locale configuration\n//! locale : Marathi [mr]\n//! author : Harshad Kale : https://github.com/kalehv\n//! author : Vivek Athalye : https://github.com/vnathalye\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    function relativeTimeMr(number, withoutSuffix, string, isFuture) {\n        var output = '';\n        if (withoutSuffix) {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंद';\n                    break;\n                case 'ss':\n                    output = '%d सेकंद';\n                    break;\n                case 'm':\n                    output = 'एक मिनिट';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटे';\n                    break;\n                case 'h':\n                    output = 'एक तास';\n                    break;\n                case 'hh':\n                    output = '%d तास';\n                    break;\n                case 'd':\n                    output = 'एक दिवस';\n                    break;\n                case 'dd':\n                    output = '%d दिवस';\n                    break;\n                case 'M':\n                    output = 'एक महिना';\n                    break;\n                case 'MM':\n                    output = '%d महिने';\n                    break;\n                case 'y':\n                    output = 'एक वर्ष';\n                    break;\n                case 'yy':\n                    output = '%d वर्षे';\n                    break;\n            }\n        } else {\n            switch (string) {\n                case 's':\n                    output = 'काही सेकंदां';\n                    break;\n                case 'ss':\n                    output = '%d सेकंदां';\n                    break;\n                case 'm':\n                    output = 'एका मिनिटा';\n                    break;\n                case 'mm':\n                    output = '%d मिनिटां';\n                    break;\n                case 'h':\n                    output = 'एका तासा';\n                    break;\n                case 'hh':\n                    output = '%d तासां';\n                    break;\n                case 'd':\n                    output = 'एका दिवसा';\n                    break;\n                case 'dd':\n                    output = '%d दिवसां';\n                    break;\n                case 'M':\n                    output = 'एका महिन्या';\n                    break;\n                case 'MM':\n                    output = '%d महिन्यां';\n                    break;\n                case 'y':\n                    output = 'एका वर्षा';\n                    break;\n                case 'yy':\n                    output = '%d वर्षां';\n                    break;\n            }\n        }\n        return output.replace(/%d/i, number);\n    }\n\n    var mr = moment.defineLocale('mr', {\n        months: 'जानेवारी_फेब्रुवारी_मार्च_एप्रिल_मे_जून_जुलै_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जाने._फेब्रु._मार्च._एप्रि._मे._जून._जुलै._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'रविवार_सोमवार_मंगळवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगळ_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm वाजता',\n            LTS: 'A h:mm:ss वाजता',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm वाजता',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm वाजता',\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[उद्या] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[मागील] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमध्ये',\n            past: '%sपूर्वी',\n            s: relativeTimeMr,\n            ss: relativeTimeMr,\n            m: relativeTimeMr,\n            mm: relativeTimeMr,\n            h: relativeTimeMr,\n            hh: relativeTimeMr,\n            d: relativeTimeMr,\n            dd: relativeTimeMr,\n            M: relativeTimeMr,\n            MM: relativeTimeMr,\n            y: relativeTimeMr,\n            yy: relativeTimeMr,\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /पहाटे|सकाळी|दुपारी|सायंकाळी|रात्री/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'पहाटे' || meridiem === 'सकाळी') {\n                return hour;\n            } else if (\n                meridiem === 'दुपारी' ||\n                meridiem === 'सायंकाळी' ||\n                meridiem === 'रात्री'\n            ) {\n                return hour >= 12 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour >= 0 && hour < 6) {\n                return 'पहाटे';\n            } else if (hour < 12) {\n                return 'सकाळी';\n            } else if (hour < 17) {\n                return 'दुपारी';\n            } else if (hour < 20) {\n                return 'सायंकाळी';\n            } else {\n                return 'रात्री';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return mr;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-param */\nimport { Property, Complex, ChildProperty, Collection, extend, Browser } from '@syncfusion/ej2-base';\nimport { Font, Border } from '../../common/model/base';\nimport { rotateTextSize, firstToLowerCase, valueToCoefficient, inside, isBreakLabel, isZoomSet, getTitle } from '../../common/utils/helper';\nimport { Size, Rect, measureText } from '@syncfusion/ej2-svg-base';\nimport { DoubleRange } from '../utils/double-range';\nimport { Double } from '../axis/double-axis';\nimport { axisRangeCalculated } from '../../common/model/constants';\nimport { StripLineSettings, MultiLevelLabels, LabelBorder, ScrollbarSettings } from '../model/chart-base';\nimport { textWrap } from '../../common/utils/helper';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * Configures the `rows` of the chart.\n */\nvar Row = /** @class */ (function (_super) {\n    __extends(Row, _super);\n    function Row() {\n        /**\n         * The height of the row as a string accept input both as '100px' and '100%'.\n         * If specified as '100%, row renders to the full height of its chart.\n         *\n         * @default '100%'\n         */\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** @private */\n        _this.axes = [];\n        /** @private */\n        _this.nearSizes = [];\n        /** @private */\n        _this.farSizes = [];\n        /** @private */\n        _this.insideFarSizes = [];\n        /** @private */\n        _this.insideNearSizes = [];\n        return _this;\n    }\n    /**\n     * Measure the row size\n     *\n     * @returns {void}\n     * @private\n     */\n    Row.prototype.computeSize = function (axis, scrollBarHeight, definition, chart) {\n        var width = 0;\n        var innerPadding = (axis.labelPosition === 'Inside' && (chart.axes.indexOf(axis) > -1)) ? -5 : 5;\n        if (axis.visible && axis.internalVisibility) {\n            width += (axis.findTickSize(axis.crossInAxis) + scrollBarHeight +\n                axis.findLabelSize(axis.crossInAxis, innerPadding, definition, chart) + axis.lineStyle.width * 0.5);\n        }\n        if (axis.isAxisOpposedPosition) {\n            this.farSizes.push(width);\n        }\n        else {\n            this.nearSizes.push(width);\n        }\n    };\n    __decorate([\n        Property('100%')\n    ], Row.prototype, \"height\", void 0);\n    __decorate([\n        Complex({}, Border)\n    ], Row.prototype, \"border\", void 0);\n    return Row;\n}(ChildProperty));\nexport { Row };\n/**\n * Configures the `columns` of the chart.\n */\nvar Column = /** @class */ (function (_super) {\n    __extends(Column, _super);\n    function Column() {\n        /**\n         * The width of the column as a string accepts input both as like '100px' or '100%'.\n         * If specified as '100%, column renders to the full width of its chart.\n         *\n         * @default '100%'\n         */\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        /** @private */\n        _this.axes = [];\n        /** @private */\n        _this.nearSizes = [];\n        /** @private */\n        _this.farSizes = [];\n        /** @private */\n        _this.insideFarSizes = [];\n        /** @private */\n        _this.insideNearSizes = [];\n        /** @private */\n        _this.padding = 0;\n        return _this;\n    }\n    /**\n     * Measure the column size\n     *\n     * @returns {void}\n     * @private\n     */\n    Column.prototype.computeSize = function (axis, scrollBarHeight, definition, chart) {\n        var height = 0;\n        var innerPadding = 5;\n        if (axis.visible && axis.internalVisibility) {\n            height += (axis.findTickSize(axis.crossInAxis) + scrollBarHeight +\n                axis.findLabelSize(axis.crossInAxis, innerPadding, definition, chart) + axis.lineStyle.width * 0.5);\n        }\n        if (axis.isAxisOpposedPosition) {\n            this.farSizes.push(height);\n        }\n        else {\n            this.nearSizes.push(height);\n        }\n    };\n    __decorate([\n        Property('100%')\n    ], Column.prototype, \"width\", void 0);\n    __decorate([\n        Complex({}, Border)\n    ], Column.prototype, \"border\", void 0);\n    return Column;\n}(ChildProperty));\nexport { Column };\n/**\n * Configures the major grid lines in the `axis`.\n */\nvar MajorGridLines = /** @class */ (function (_super) {\n    __extends(MajorGridLines, _super);\n    function MajorGridLines() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(1)\n    ], MajorGridLines.prototype, \"width\", void 0);\n    __decorate([\n        Property('')\n    ], MajorGridLines.prototype, \"dashArray\", void 0);\n    __decorate([\n        Property(null)\n    ], MajorGridLines.prototype, \"color\", void 0);\n    return MajorGridLines;\n}(ChildProperty));\nexport { MajorGridLines };\n/**\n * Configures the minor grid lines in the `axis`.\n */\nvar MinorGridLines = /** @class */ (function (_super) {\n    __extends(MinorGridLines, _super);\n    function MinorGridLines() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(0.7)\n    ], MinorGridLines.prototype, \"width\", void 0);\n    __decorate([\n        Property('')\n    ], MinorGridLines.prototype, \"dashArray\", void 0);\n    __decorate([\n        Property(null)\n    ], MinorGridLines.prototype, \"color\", void 0);\n    return MinorGridLines;\n}(ChildProperty));\nexport { MinorGridLines };\n/**\n * Configures the axis line of a chart.\n */\nvar AxisLine = /** @class */ (function (_super) {\n    __extends(AxisLine, _super);\n    function AxisLine() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(1)\n    ], AxisLine.prototype, \"width\", void 0);\n    __decorate([\n        Property('')\n    ], AxisLine.prototype, \"dashArray\", void 0);\n    __decorate([\n        Property(null)\n    ], AxisLine.prototype, \"color\", void 0);\n    return AxisLine;\n}(ChildProperty));\nexport { AxisLine };\n/**\n * Configures the major tick lines.\n */\nvar MajorTickLines = /** @class */ (function (_super) {\n    __extends(MajorTickLines, _super);\n    function MajorTickLines() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(1)\n    ], MajorTickLines.prototype, \"width\", void 0);\n    __decorate([\n        Property(5)\n    ], MajorTickLines.prototype, \"height\", void 0);\n    __decorate([\n        Property(null)\n    ], MajorTickLines.prototype, \"color\", void 0);\n    return MajorTickLines;\n}(ChildProperty));\nexport { MajorTickLines };\n/**\n * Configures the minor tick lines.\n */\nvar MinorTickLines = /** @class */ (function (_super) {\n    __extends(MinorTickLines, _super);\n    function MinorTickLines() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(0.7)\n    ], MinorTickLines.prototype, \"width\", void 0);\n    __decorate([\n        Property(5)\n    ], MinorTickLines.prototype, \"height\", void 0);\n    __decorate([\n        Property(null)\n    ], MinorTickLines.prototype, \"color\", void 0);\n    return MinorTickLines;\n}(ChildProperty));\nexport { MinorTickLines };\n/**\n * Configures the crosshair ToolTip.\n */\nvar CrosshairTooltip = /** @class */ (function (_super) {\n    __extends(CrosshairTooltip, _super);\n    function CrosshairTooltip() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(false)\n    ], CrosshairTooltip.prototype, \"enable\", void 0);\n    __decorate([\n        Property(null)\n    ], CrosshairTooltip.prototype, \"fill\", void 0);\n    __decorate([\n        Complex({ fontFamily: null, size: \"12px\", fontStyle: 'Normal', fontWeight: '400', color: null }, Font)\n    ], CrosshairTooltip.prototype, \"textStyle\", void 0);\n    return CrosshairTooltip;\n}(ChildProperty));\nexport { CrosshairTooltip };\n/**\n * Configures the axes in the chart.\n *\n * @public\n */\nvar Axis = /** @class */ (function (_super) {\n    __extends(Axis, _super);\n    // eslint-disable-next-line @typescript-eslint/explicit-module-boundary-types\n    function Axis(parent, propName, defaultValue, isArray) {\n        var _this = _super.call(this, parent, propName, defaultValue, isArray) || this;\n        /** @private */\n        _this.visibleLabels = [];\n        /** @private */\n        _this.series = [];\n        /** @private */\n        _this.rect = new Rect(undefined, undefined, 0, 0);\n        /** @private */\n        _this.axisBottomLine = null;\n        /** @private */\n        _this.intervalDivs = [10, 5, 2, 1];\n        /** @private */\n        _this.isStack100 = false;\n        /** @private */\n        _this.crossAt = null;\n        /** @private */\n        _this.updatedRect = null;\n        /** @private */\n        _this.multiLevelLabelHeight = 0;\n        /** @private */\n        _this.isChart = true;\n        /** @private */\n        _this.isIntervalInDecimal = true;\n        /** @private */\n        _this.titleCollection = [];\n        /** @private */\n        _this.titleSize = new Size(0, 0);\n        /**\n         * Task: BLAZ-2044\n         * This property used to hide the axis when series hide from legend click\n         *\n         * @private\n         */\n        _this.internalVisibility = true;\n        /**\n         * This property is used to place the vertical axis in opposed position and horizontal axis in inversed\n         * when RTL is enabled in chart\n         *\n         * @private */\n        _this.isRTLEnabled = false;\n        _this.angle = _this.labelRotation;\n        return _this;\n    }\n    /**\n     * The function used to find tick size.\n     *\n     * @returns {number} tick line size\n     * @private\n     */\n    Axis.prototype.findTickSize = function (crossAxis) {\n        if (this.tickPosition === 'Inside') {\n            return 0;\n        }\n        if (crossAxis && (!crossAxis.visibleRange || this.isInside(crossAxis.visibleRange))) {\n            return 0;\n        }\n        return this.majorTickLines.height;\n    };\n    /**\n     * The function used to find axis position.\n     *\n     * @returns {number}\n     * @private\n     */\n    Axis.prototype.isInside = function (range) {\n        return (inside(this.crossAt, range) ||\n            (!this.isAxisOpposedPosition && this.crossAt >= range.max) || (this.isAxisOpposedPosition && this.crossAt <= range.min));\n    };\n    /**\n     * The function used to find label Size.\n     *\n     * @returns {number} labelSize\n     * @private\n     */\n    Axis.prototype.findLabelSize = function (crossAxis, innerPadding, definition, chart) {\n        var titleSize = 0;\n        var isHorizontal = this.orientation === 'Horizontal';\n        if (this.title) {\n            var angle = this.titleRotation;\n            if ((isNullOrUndefined(angle))) {\n                this.titleSize = measureText(this.title, this.titleStyle, chart.themeStyle.axisTitleFont);\n                titleSize = this.titleSize.height + innerPadding;\n            }\n            else {\n                this.titleSize = rotateTextSize(this.titleStyle, this.title, angle, chart);\n                titleSize = (this.orientation === 'Vertical' ? this.titleSize.width : this.titleSize.height) + innerPadding;\n            }\n            if (this.rect.width || this.rect.height) {\n                var length_1 = isHorizontal ? this.rect.width : this.rect.height;\n                this.titleCollection = getTitle(this.title, this.titleStyle, length_1, chart.enableRtl, chart.themeStyle.legendLabelFont);\n                titleSize = (titleSize * this.titleCollection.length);\n            }\n        }\n        var diff;\n        var value;\n        var labelSize = titleSize + innerPadding + this.titlePadding + this.labelPadding +\n            ((this.orientation === 'Vertical') ? this.maxLabelSize.width : this.maxLabelSize.height) + this.multiLevelLabelHeight;\n        if (crossAxis && this.placeNextToAxisLine) {\n            var range = crossAxis.visibleRange;\n            var size = (crossAxis.orientation === 'Horizontal') ? crossAxis.rect.width : crossAxis.rect.height;\n            if (!range || !size) {\n                return 0;\n            }\n            else if (this.isInside(range)) {\n                value = this.findDifference(crossAxis);\n                diff = (value) * (size / range.delta);\n                diff = (value) * ((size - (diff < labelSize ? (labelSize - diff) : 0)) / range.delta);\n                labelSize = (diff < labelSize) ? (labelSize - diff) : 0;\n            }\n        }\n        if (this.isAxisOpposedPosition) {\n            definition.insideFarSizes.push(labelSize);\n        }\n        else {\n            definition.insideNearSizes.push(labelSize);\n        }\n        if (this.labelPosition === 'Inside') {\n            return titleSize + innerPadding;\n        }\n        return labelSize;\n    };\n    /**\n     * The function used to find axis position.\n     *\n     * @returns {void}\n     * @private\n     */\n    Axis.prototype.updateCrossValue = function () {\n        var value = this.crossAt;\n        if (value === null || !this.isInside(this.crossInAxis.visibleRange)) {\n            this.updatedRect = this.rect;\n            return null;\n        }\n        var range = this.crossInAxis.visibleRange;\n        if (!this.isAxisOpposedPosition) {\n            if (this.crossAt > range.max) {\n                value = range.max;\n            }\n        }\n        else {\n            if (this.crossAt < range.min) {\n                value = range.min;\n            }\n        }\n        this.updatedRect = extend({}, this.rect, null, true);\n        if (this.orientation === 'Horizontal') {\n            value = this.crossInAxis.rect.height - (valueToCoefficient(value, this.crossInAxis) * this.crossInAxis.rect.height);\n            this.updatedRect.y = this.crossInAxis.rect.y + value;\n        }\n        else {\n            value = valueToCoefficient(value, this.crossInAxis) * this.crossInAxis.rect.width;\n            this.updatedRect.x = this.crossInAxis.rect.x + value;\n        }\n    };\n    Axis.prototype.findDifference = function (crossAxis) {\n        var value = 0;\n        if (this.isAxisOpposedPosition) {\n            value = crossAxis.isAxisInverse ? crossAxis.visibleRange.min : crossAxis.visibleRange.max;\n        }\n        else {\n            value = crossAxis.isAxisInverse ? crossAxis.visibleRange.max : crossAxis.visibleRange.min;\n        }\n        return Math.abs(this.crossAt - value);\n    };\n    /**\n     * Calculate visible range for axis.\n     *\n     * @returns {void}\n     * @private\n     */\n    Axis.prototype.calculateVisibleRangeOnZooming = function (size) {\n        if (isZoomSet(this)) {\n            var baseRange = this.actualRange;\n            var start = void 0;\n            var end = void 0;\n            if (!this.isAxisInverse) {\n                start = this.actualRange.min + this.zoomPosition * this.actualRange.delta;\n                end = start + this.zoomFactor * this.actualRange.delta;\n            }\n            else {\n                start = this.actualRange.max - (this.zoomPosition * this.actualRange.delta);\n                end = start - (this.zoomFactor * this.actualRange.delta);\n            }\n            if (start < baseRange.min) {\n                end = end + (baseRange.min - start);\n                start = baseRange.min;\n            }\n            if (end > baseRange.max) {\n                start = start - (end - baseRange.max);\n                end = baseRange.max;\n            }\n            this.doubleRange = new DoubleRange(start, end);\n            this.visibleRange = { min: this.doubleRange.start, max: this.doubleRange.end,\n                delta: this.doubleRange.delta, interval: this.visibleRange.interval };\n        }\n    };\n    /**\n     * Triggers the event.\n     *\n     * @returns {void}\n     * @private\n     */\n    Axis.prototype.triggerRangeRender = function (chart, minimum, maximum, interval) {\n        var argsData = {\n            cancel: false, name: axisRangeCalculated, axis: this,\n            minimum: minimum, maximum: maximum, interval: interval\n        };\n        chart.trigger(axisRangeCalculated, argsData);\n        if (!argsData.cancel) {\n            this.visibleRange = { min: argsData.minimum, max: argsData.maximum, interval: argsData.interval,\n                delta: argsData.maximum - argsData.minimum };\n        }\n    };\n    /**\n     * Calculate padding for the axis.\n     *\n     * @returns {string}\n     * @private\n     */\n    Axis.prototype.getRangePadding = function (chart) {\n        var padding = this.rangePadding;\n        if (padding !== 'Auto') {\n            return padding;\n        }\n        switch (this.orientation) {\n            case 'Horizontal':\n                if (chart.requireInvertedAxis) {\n                    padding = (this.isStack100 || this.baseModule.chart.stockChart ? 'Round' : 'Normal');\n                }\n                else {\n                    padding = 'None';\n                }\n                break;\n            case 'Vertical':\n                if (!chart.requireInvertedAxis) {\n                    padding = (this.isStack100 || this.baseModule.chart.stockChart ? 'Round' : 'Normal');\n                }\n                else {\n                    padding = 'None';\n                }\n                break;\n        }\n        return padding;\n    };\n    /**\n     * Calculate maximum label width for the axis.\n     *\n     * @returns {void}\n     * @private\n     */\n    Axis.prototype.getMaxLabelWidth = function (chart) {\n        var pointX;\n        var previousEnd = 0;\n        var isIntersect = false;\n        var isAxisLabelBreak;\n        this.angle = this.labelRotation;\n        this.maxLabelSize = new Size(0, 0);\n        var action = this.labelIntersectAction;\n        var label;\n        for (var i = 0, len = this.visibleLabels.length; i < len; i++) {\n            label = this.visibleLabels[i];\n            isAxisLabelBreak = isBreakLabel(label.originalText);\n            if (isAxisLabelBreak) {\n                label.size = measureText(label.originalText.replace(/<br>/g, ' '), this.labelStyle, chart.themeStyle.axisLabelFont);\n                label.breakLabelSize = measureText(this.enableTrim ? label.text.join('<br>') : label.originalText, this.labelStyle, chart.themeStyle.axisLabelFont);\n            }\n            else {\n                label.size = measureText(label.text, this.labelStyle, chart.themeStyle.axisLabelFont);\n            }\n            var width = isAxisLabelBreak ? label.breakLabelSize.width : label.size.width;\n            if (width > this.maxLabelSize.width) {\n                this.maxLabelSize.width = width;\n                this.rotatedLabel = label.text;\n            }\n            var height = isAxisLabelBreak ? label.breakLabelSize.height : label.size.height;\n            if (height > this.maxLabelSize.height) {\n                this.maxLabelSize.height = height;\n            }\n            if (isAxisLabelBreak) {\n                label.text = this.enableTrim ? label.text : label.originalText.split('<br>');\n            }\n            if (action === 'None' || action === 'Hide' || action === 'Trim') {\n                continue;\n            }\n            if ((action !== 'None' || this.angle % 360 === 0) && this.orientation === 'Horizontal' &&\n                this.rect.width > 0 && !isIntersect) {\n                var width1 = isAxisLabelBreak ? label.breakLabelSize.width : label.size.width;\n                pointX = (valueToCoefficient(label.value, this) * this.rect.width) + this.rect.x;\n                pointX -= width1 / 2;\n                if (this.edgeLabelPlacement === 'Shift') {\n                    if (i === 0 && pointX < this.rect.x) {\n                        pointX = this.rect.x;\n                    }\n                    if (i === this.visibleLabels.length - 1 && ((pointX + width1) > (this.rect.x + this.rect.width))) {\n                        pointX = this.rect.x + this.rect.width - width1;\n                    }\n                }\n                switch (action) {\n                    case 'MultipleRows':\n                        if (i > 0) {\n                            this.findMultiRows(i, pointX, label, isAxisLabelBreak);\n                        }\n                        break;\n                    case 'Rotate45':\n                    case 'Rotate90':\n                        if (i > 0 && (!this.isAxisInverse ? pointX <= previousEnd : pointX + width1 >= previousEnd)) {\n                            this.angle = (action === 'Rotate45') ? 45 : 90;\n                            isIntersect = true;\n                        }\n                        break;\n                    default:\n                        if (isAxisLabelBreak) {\n                            var result = void 0;\n                            var result1 = [];\n                            var str = void 0;\n                            for (var index = 0; index < label.text.length; index++) {\n                                result = textWrap(label.text[index], this.rect.width / this.visibleLabels.length, this.labelStyle, chart.enableRtl, null, null, chart.themeStyle.axisLabelFont);\n                                if (result.length > 1) {\n                                    for (var j = 0; j < result.length; j++) {\n                                        str = result[j];\n                                        result1.push(str);\n                                    }\n                                }\n                                else {\n                                    result1.push(result[0]);\n                                }\n                            }\n                            label.text = result1;\n                        }\n                        else {\n                            label.text = textWrap(label.text, this.rect.width / this.visibleLabels.length, this.labelStyle, chart.enableRtl, null, null, chart.themeStyle.axisLabelFont);\n                        }\n                        // eslint-disable-next-line no-case-declarations\n                        var height_1 = (label.size.height * label.text.length);\n                        if (height_1 > this.maxLabelSize.height) {\n                            this.maxLabelSize.height = height_1;\n                        }\n                        break;\n                }\n                previousEnd = this.isAxisInverse ? pointX : pointX + width1;\n            }\n        }\n        if (this.angle !== 0 && this.orientation === 'Horizontal') {\n            //I264474: Fix for datasource bind im mounted console error ocurred\n            this.rotatedLabel = isNullOrUndefined(this.rotatedLabel) ? '' : this.rotatedLabel;\n            var isHorizontalAngle = this.angle === -360 || this.angle === 0 || this.angle === -180 ||\n                this.angle === 180 || this.angle === 360;\n            // To avoid overlap axis label with chart title or chart legend when it is outside.\n            if (this.labelPosition === 'Outside' && !isHorizontalAngle && isBreakLabel(this.rotatedLabel)) {\n                this.maxLabelSize = new Size(this.maxLabelSize.height, this.maxLabelSize.width);\n            }\n            else {\n                this.maxLabelSize = rotateTextSize(this.labelStyle, this.rotatedLabel, this.angle, chart);\n            }\n        }\n        else if (this.angle !== 0 && this.orientation === 'Vertical') {\n            //I264474: Fix for datasource bind im mounted console error ocurred\n            this.rotatedLabel = isNullOrUndefined(this.rotatedLabel) ? '' : this.rotatedLabel;\n            var isHorizontalAngle = this.angle === -360 || this.angle === 0 || this.angle === -180 ||\n                this.angle === 180 || this.angle === 360;\n            // To avoid overlap axis label with chart title or chart legend when it is outside.\n            if (this.labelPosition === 'Outside' && !isHorizontalAngle && isBreakLabel(this.rotatedLabel)) {\n                this.maxLabelSize = new Size(this.maxLabelSize.height, this.maxLabelSize.width);\n            }\n            else {\n                this.maxLabelSize = rotateTextSize(this.labelStyle, this.rotatedLabel, this.angle, chart);\n            }\n        }\n        if (chart.multiLevelLabelModule && this.multiLevelLabels.length > 0) {\n            chart.multiLevelLabelModule.getMultilevelLabelsHeight(this);\n        }\n    };\n    /**\n     * Finds the multiple rows for axis.\n     *\n     * @returns {void}\n     */\n    Axis.prototype.findMultiRows = function (length, currentX, currentLabel, isBreakLabels) {\n        var label;\n        var pointX;\n        var width2;\n        var store = [];\n        var isMultiRows;\n        for (var i = length - 1; i >= 0; i--) {\n            label = this.visibleLabels[i];\n            width2 = isBreakLabels ? label.breakLabelSize.width : label.size.width;\n            pointX = (valueToCoefficient(label.value, this) * this.rect.width) + this.rect.x;\n            isMultiRows = !this.isAxisInverse ? currentX < (pointX + width2 * 0.5) :\n                currentX + currentLabel.size.width > (pointX - width2 * 0.5);\n            if (isMultiRows) {\n                store.push(label.index);\n                currentLabel.index = (currentLabel.index > label.index) ? currentLabel.index : label.index + 1;\n            }\n            else {\n                currentLabel.index = store.indexOf(label.index) > -1 ? currentLabel.index : label.index;\n            }\n        }\n        var height = ((isBreakLabels ? currentLabel.breakLabelSize.height : currentLabel.size.height) * currentLabel.index) +\n            (5 * (currentLabel.index - 1));\n        if (height > this.maxLabelSize.height) {\n            this.maxLabelSize.height = height;\n        }\n    };\n    /**\n     * Finds the default module for axis.\n     *\n     * @returns {void}\n     * @private\n     */\n    Axis.prototype.getModule = function (chart) {\n        if (this.valueType === 'Double') {\n            this.baseModule = new Double(chart);\n        }\n        else {\n            this.baseModule = chart[firstToLowerCase(this.valueType) + 'Module'];\n        }\n    };\n    /**\n     * Set the axis `opposedPosition` and `isInversed` properties.\n     *\n     * @returns {void}\n     * @private\n     */\n    Axis.prototype.setIsInversedAndOpposedPosition = function (isPolar) {\n        if (isPolar === void 0) { isPolar = false; }\n        this.isAxisOpposedPosition = this.opposedPosition || (!isPolar && this.isRTLEnabled && this.orientation === 'Vertical');\n        if (this.opposedPosition && (!isPolar && this.isRTLEnabled && this.orientation === 'Vertical')) {\n            this.isAxisOpposedPosition = false;\n        }\n        this.isAxisInverse = this.isInversed || (this.isRTLEnabled && this.orientation === 'Horizontal');\n        if (this.isInversed && (!isPolar && this.isRTLEnabled && this.orientation === 'Horizontal')) {\n            this.isAxisInverse = false;\n        }\n    };\n    __decorate([\n        Complex({ fontFamily: null, size: \"12px\", fontStyle: 'Normal', fontWeight: '400', color: null }, Font)\n    ], Axis.prototype, \"labelStyle\", void 0);\n    __decorate([\n        Complex({}, CrosshairTooltip)\n    ], Axis.prototype, \"crosshairTooltip\", void 0);\n    __decorate([\n        Property('')\n    ], Axis.prototype, \"title\", void 0);\n    __decorate([\n        Complex({ fontFamily: null, size: \"14px\", fontStyle: 'Normal', fontWeight: '600', color: null }, Font)\n    ], Axis.prototype, \"titleStyle\", void 0);\n    __decorate([\n        Property('')\n    ], Axis.prototype, \"labelFormat\", void 0);\n    __decorate([\n        Property('')\n    ], Axis.prototype, \"skeleton\", void 0);\n    __decorate([\n        Property('DateTime')\n    ], Axis.prototype, \"skeletonType\", void 0);\n    __decorate([\n        Property('Center')\n    ], Axis.prototype, \"lineBreakAlignment\", void 0);\n    __decorate([\n        Property(0)\n    ], Axis.prototype, \"plotOffset\", void 0);\n    __decorate([\n        Property(null)\n    ], Axis.prototype, \"plotOffsetLeft\", void 0);\n    __decorate([\n        Property(null)\n    ], Axis.prototype, \"plotOffsetTop\", void 0);\n    __decorate([\n        Property(null)\n    ], Axis.prototype, \"plotOffsetRight\", void 0);\n    __decorate([\n        Property(null)\n    ], Axis.prototype, \"plotOffsetBottom\", void 0);\n    __decorate([\n        Property(false)\n    ], Axis.prototype, \"isIndexed\", void 0);\n    __decorate([\n        Property(10)\n    ], Axis.prototype, \"logBase\", void 0);\n    __decorate([\n        Property(0)\n    ], Axis.prototype, \"columnIndex\", void 0);\n    __decorate([\n        Property(0)\n    ], Axis.prototype, \"rowIndex\", void 0);\n    __decorate([\n        Property(1)\n    ], Axis.prototype, \"span\", void 0);\n    __decorate([\n        Property(null)\n    ], Axis.prototype, \"desiredIntervals\", void 0);\n    __decorate([\n        Property(3)\n    ], Axis.prototype, \"maximumLabels\", void 0);\n    __decorate([\n        Property(1)\n    ], Axis.prototype, \"zoomFactor\", void 0);\n    __decorate([\n        Property(0)\n    ], Axis.prototype, \"zoomPosition\", void 0);\n    __decorate([\n        Property(true)\n    ], Axis.prototype, \"enableScrollbarOnZooming\", void 0);\n    __decorate([\n        Property(false)\n    ], Axis.prototype, \"opposedPosition\", void 0);\n    __decorate([\n        Property(true)\n    ], Axis.prototype, \"enableAutoIntervalOnZooming\", void 0);\n    __decorate([\n        Property('Auto')\n    ], Axis.prototype, \"rangePadding\", void 0);\n    __decorate([\n        Property('Double')\n    ], Axis.prototype, \"valueType\", void 0);\n    __decorate([\n        Property('None')\n    ], Axis.prototype, \"edgeLabelPlacement\", void 0);\n    __decorate([\n        Property('Auto')\n    ], Axis.prototype, \"intervalType\", void 0);\n    __decorate([\n        Property('BetweenTicks')\n    ], Axis.prototype, \"labelPlacement\", void 0);\n    __decorate([\n        Property('Outside')\n    ], Axis.prototype, \"tickPosition\", void 0);\n    __decorate([\n        Property('Outside')\n    ], Axis.prototype, \"labelPosition\", void 0);\n    __decorate([\n        Property('')\n    ], Axis.prototype, \"name\", void 0);\n    __decorate([\n        Property(true)\n    ], Axis.prototype, \"visible\", void 0);\n    __decorate([\n        Property(0)\n    ], Axis.prototype, \"minorTicksPerInterval\", void 0);\n    __decorate([\n        Property(0)\n    ], Axis.prototype, \"labelRotation\", void 0);\n    __decorate([\n        Property(null)\n    ], Axis.prototype, \"titleRotation\", void 0);\n    __decorate([\n        Property(null)\n    ], Axis.prototype, \"crossesAt\", void 0);\n    __decorate([\n        Property(true)\n    ], Axis.prototype, \"placeNextToAxisLine\", void 0);\n    __decorate([\n        Property(null)\n    ], Axis.prototype, \"crossesInAxis\", void 0);\n    __decorate([\n        Property(null)\n    ], Axis.prototype, \"minimum\", void 0);\n    __decorate([\n        Property(null)\n    ], Axis.prototype, \"maximum\", void 0);\n    __decorate([\n        Property(null)\n    ], Axis.prototype, \"interval\", void 0);\n    __decorate([\n        Property(34)\n    ], Axis.prototype, \"maximumLabelWidth\", void 0);\n    __decorate([\n        Property(false)\n    ], Axis.prototype, \"enableTrim\", void 0);\n    __decorate([\n        Property(5)\n    ], Axis.prototype, \"labelPadding\", void 0);\n    __decorate([\n        Property(5)\n    ], Axis.prototype, \"titlePadding\", void 0);\n    __decorate([\n        Complex({}, MajorTickLines)\n    ], Axis.prototype, \"majorTickLines\", void 0);\n    __decorate([\n        Complex({}, MinorTickLines)\n    ], Axis.prototype, \"minorTickLines\", void 0);\n    __decorate([\n        Complex({}, MajorGridLines)\n    ], Axis.prototype, \"majorGridLines\", void 0);\n    __decorate([\n        Complex({}, MinorGridLines)\n    ], Axis.prototype, \"minorGridLines\", void 0);\n    __decorate([\n        Complex({}, AxisLine)\n    ], Axis.prototype, \"lineStyle\", void 0);\n    __decorate([\n        Property(Browser.isDevice ? 'Rotate45' : 'Trim')\n    ], Axis.prototype, \"labelIntersectAction\", void 0);\n    __decorate([\n        Property(false)\n    ], Axis.prototype, \"isInversed\", void 0);\n    __decorate([\n        Property(100)\n    ], Axis.prototype, \"coefficient\", void 0);\n    __decorate([\n        Property(0)\n    ], Axis.prototype, \"startAngle\", void 0);\n    __decorate([\n        Property(true)\n    ], Axis.prototype, \"startFromZero\", void 0);\n    __decorate([\n        Property(null)\n    ], Axis.prototype, \"description\", void 0);\n    __decorate([\n        Property(2)\n    ], Axis.prototype, \"tabIndex\", void 0);\n    __decorate([\n        Collection([], StripLineSettings)\n    ], Axis.prototype, \"stripLines\", void 0);\n    __decorate([\n        Collection([], MultiLevelLabels)\n    ], Axis.prototype, \"multiLevelLabels\", void 0);\n    __decorate([\n        Complex({ color: null, width: 0, type: 'Rectangle' }, LabelBorder)\n    ], Axis.prototype, \"border\", void 0);\n    __decorate([\n        Complex({}, ScrollbarSettings)\n    ], Axis.prototype, \"scrollbarSettings\", void 0);\n    return Axis;\n}(ChildProperty));\nexport { Axis };\n/** @private */\nvar VisibleLabels = /** @class */ (function () {\n    function VisibleLabels(text, value, labelStyle, originalText, size, breakLabelSize, index) {\n        if (size === void 0) { size = new Size(0, 0); }\n        if (breakLabelSize === void 0) { breakLabelSize = new Size(0, 0); }\n        if (index === void 0) { index = 1; }\n        this.text = text;\n        this.originalText = originalText;\n        this.value = value;\n        this.labelStyle = labelStyle;\n        this.size = size;\n        this.breakLabelSize = breakLabelSize;\n        this.index = index;\n    }\n    return VisibleLabels;\n}());\nexport { VisibleLabels };\n","//! moment.js locale configuration\n//! locale : Nepalese [ne]\n//! author : suvash : https://github.com/suvash\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        };\n\n    var ne = moment.defineLocale('ne', {\n        months: 'जनवरी_फेब्रुवरी_मार्च_अप्रिल_मई_जुन_जुलाई_अगष्ट_सेप्टेम्बर_अक्टोबर_नोभेम्बर_डिसेम्बर'.split(\n            '_'\n        ),\n        monthsShort:\n            'जन._फेब्रु._मार्च_अप्रि._मई_जुन_जुलाई._अग._सेप्ट._अक्टो._नोभे._डिसे.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आइतबार_सोमबार_मङ्गलबार_बुधबार_बिहिबार_शुक्रबार_शनिबार'.split(\n            '_'\n        ),\n        weekdaysShort: 'आइत._सोम._मङ्गल._बुध._बिहि._शुक्र._शनि.'.split('_'),\n        weekdaysMin: 'आ._सो._मं._बु._बि._शु._श.'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'Aको h:mm बजे',\n            LTS: 'Aको h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, Aको h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, Aको h:mm बजे',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /राति|बिहान|दिउँसो|साँझ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राति') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'बिहान') {\n                return hour;\n            } else if (meridiem === 'दिउँसो') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'साँझ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 3) {\n                return 'राति';\n            } else if (hour < 12) {\n                return 'बिहान';\n            } else if (hour < 16) {\n                return 'दिउँसो';\n            } else if (hour < 20) {\n                return 'साँझ';\n            } else {\n                return 'राति';\n            }\n        },\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[भोलि] LT',\n            nextWeek: '[आउँदो] dddd[,] LT',\n            lastDay: '[हिजो] LT',\n            lastWeek: '[गएको] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sमा',\n            past: '%s अगाडि',\n            s: 'केही क्षण',\n            ss: '%d सेकेण्ड',\n            m: 'एक मिनेट',\n            mm: '%d मिनेट',\n            h: 'एक घण्टा',\n            hh: '%d घण्टा',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महिना',\n            MM: '%d महिना',\n            y: 'एक बर्ष',\n            yy: '%d बर्ष',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return ne;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Macau) [zh-mo]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Tan Yuanhong : https://github.com/le0tan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhMo = moment.defineLocale('zh-mo', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s內',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhMo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tajik [tg]\n//! author : Orif N. Jr. : https://github.com/orif-jr\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-ум',\n        1: '-ум',\n        2: '-юм',\n        3: '-юм',\n        4: '-ум',\n        5: '-ум',\n        6: '-ум',\n        7: '-ум',\n        8: '-ум',\n        9: '-ум',\n        10: '-ум',\n        12: '-ум',\n        13: '-ум',\n        20: '-ум',\n        30: '-юм',\n        40: '-ум',\n        50: '-ум',\n        60: '-ум',\n        70: '-ум',\n        80: '-ум',\n        90: '-ум',\n        100: '-ум',\n    };\n\n    var tg = moment.defineLocale('tg', {\n        months: {\n            format: 'январи_феврали_марти_апрели_майи_июни_июли_августи_сентябри_октябри_ноябри_декабри'.split(\n                '_'\n            ),\n            standalone:\n                'январ_феврал_март_апрел_май_июн_июл_август_сентябр_октябр_ноябр_декабр'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'янв_фев_мар_апр_май_июн_июл_авг_сен_окт_ноя_дек'.split('_'),\n        weekdays: 'якшанбе_душанбе_сешанбе_чоршанбе_панҷшанбе_ҷумъа_шанбе'.split(\n            '_'\n        ),\n        weekdaysShort: 'яшб_дшб_сшб_чшб_пшб_ҷум_шнб'.split('_'),\n        weekdaysMin: 'яш_дш_сш_чш_пш_ҷм_шб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Имрӯз соати] LT',\n            nextDay: '[Фардо соати] LT',\n            lastDay: '[Дирӯз соати] LT',\n            nextWeek: 'dddd[и] [ҳафтаи оянда соати] LT',\n            lastWeek: 'dddd[и] [ҳафтаи гузашта соати] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'баъди %s',\n            past: '%s пеш',\n            s: 'якчанд сония',\n            m: 'як дақиқа',\n            mm: '%d дақиқа',\n            h: 'як соат',\n            hh: '%d соат',\n            d: 'як рӯз',\n            dd: '%d рӯз',\n            M: 'як моҳ',\n            MM: '%d моҳ',\n            y: 'як сол',\n            yy: '%d сол',\n        },\n        meridiemParse: /шаб|субҳ|рӯз|бегоҳ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'шаб') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'субҳ') {\n                return hour;\n            } else if (meridiem === 'рӯз') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'бегоҳ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'шаб';\n            } else if (hour < 11) {\n                return 'субҳ';\n            } else if (hour < 16) {\n                return 'рӯз';\n            } else if (hour < 19) {\n                return 'бегоҳ';\n            } else {\n                return 'шаб';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ум|юм)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1th is the first week of the year.\n        },\n    });\n\n    return tg;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { merge, isNullOrUndefined, extend, Property } from '@syncfusion/ej2-base';\nimport { Query, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getUid, templateCompiler, getForeignData, getObject } from '../base/util';\n/**\n * Represents Grid `Column` model class.\n */\nvar Column = /** @class */ (function () {\n    function Column(options, parent) {\n        var _this = this;\n        /**\n         * If `disableHtmlEncode` is set to true, it encodes the HTML of the header and content cells.\n         *\n         * @default true\n         */\n        this.disableHtmlEncode = true;\n        /**\n         * If `allowSorting` set to false, then it disables sorting option of a particular column.\n         * By default all columns are sortable.\n         *\n         * @default true\n         */\n        this.allowSorting = true;\n        /**\n         * If `allowResizing` is set to false, it disables resize option of a particular column.\n         * By default all the columns can be resized.\n         *\n         * @default true\n         */\n        this.allowResizing = true;\n        /**\n         * If `allowFiltering` set to false, then it disables filtering option and filter bar element of a particular column.\n         * By default all columns are filterable.\n         *\n         * @default true\n         */\n        this.allowFiltering = true;\n        /**\n         * If `allowGrouping` set to false, then it disables grouping of a particular column.\n         * By default all columns are groupable.\n         *\n         * @default true\n         */\n        this.allowGrouping = true;\n        /**\n         * If `allowReordering` set to false, then it disables reorder of a particular column.\n         * By default all columns can be reorder.\n         *\n         * @default true\n         */\n        this.allowReordering = true;\n        /**\n         * If `showColumnMenu` set to false, then it disable the column menu of a particular column.\n         * By default column menu will show for all columns\n         *\n         * @default true\n         */\n        this.showColumnMenu = true;\n        /**\n         * If `enableGroupByFormat` set to true, then it groups the particular column by formatted values.\n         *\n         * @default true\n         */\n        this.enableGroupByFormat = false;\n        /**\n         * If `allowEditing` set to false, then it disables editing of a particular column.\n         * By default all columns are editable.\n         *\n         * @default true\n         */\n        this.allowEditing = true;\n        /**\n         *  It is used to customize the default filter options for a specific columns.\n         * * type -  Specifies the filter type as menu or checkbox.\n         * * ui - to render custom component for specific column it has following functions.\n         * * ui.create – It is used for creating custom components.\n         * * ui.read -  It is used for read the value from the component.\n         * * ui.write - It is used to apply component model as dynamically.\n         * {% codeBlock src=\"grid/filter-menu-api/index.ts\" %}{% endcodeBlock %}\n         *\n         * > Check the [`Filter UI`](../../grid/filtering/filter-menu/#custom-component-in-filter-menu) for its customization.\n         *\n         *  @default {}\n         */\n        this.filter = {};\n        /**\n         * If `showInColumnChooser` set to false, then hide the particular column in column chooser.\n         *  By default all columns are displayed in column Chooser.\n         *\n         * @default true\n         */\n        this.showInColumnChooser = true;\n        /**\n         * Defines the `IEditCell` object to customize default edit cell.\n         *\n         * @default {}\n         */\n        this.edit = {};\n        /**\n         * If `allowSearching` set to false, then it disables Searching of a particular column.\n         * By default all columns allow Searching.\n         *\n         * @default true\n         */\n        this.allowSearching = true;\n        /**\n         * If `autoFit` set to true, then the particular column content width will be\n         * adjusted based on its content in the initial rendering itself.\n         * Setting this property as true is equivalent to calling `autoFitColumns` method in the `dataBound` event.\n         *\n         * @default false\n         */\n        this.autoFit = false;\n        this.sortDirection = 'Descending';\n        /**\n         * @returns {Function} returns the edit template\n         * @hidden */\n        this.getEditTemplate = function () { return _this.editTemplateFn; };\n        /**\n         * @returns {Function} returns the filter template\n         * @hidden */\n        this.getFilterTemplate = function () { return _this.filterTemplateFn; };\n        merge(this, options);\n        this.parent = parent;\n        if (this.type === 'none') {\n            this.type = null;\n        }\n        else if (this.type) {\n            this.type = typeof (this.type) === 'string' ? this.type.toLowerCase() : undefined;\n        }\n        if (this.editType) {\n            this.editType = this.editType.toLowerCase();\n        }\n        if (isNullOrUndefined(this.uid)) {\n            this.uid = getUid('grid-column');\n        }\n        var valueFormatter = new ValueFormatter();\n        if (options.format && (options.format.skeleton || (options.format.format &&\n            typeof options.format.format === 'string'))) {\n            this.setFormatter(valueFormatter.getFormatFunction(extend({}, options.format)));\n            this.setParser(valueFormatter.getParserFunction(options.format));\n        }\n        this.toJSON = function () {\n            var col = {};\n            var skip = ['filter', 'dataSource', 'headerText', 'template', 'headerTemplate', 'edit',\n                'editTemplate', 'filterTemplate', 'commandsTemplate', 'parent'];\n            var keys = Object.keys(_this);\n            for (var i = 0; i < keys.length; i++) {\n                if (keys[parseInt(i.toString(), 10)] === 'columns') {\n                    col[keys[parseInt(i.toString(), 10)]] = [];\n                    for (var j = 0; j < _this[keys[parseInt(i.toString(), 10)]].length; j++) {\n                        col[keys[parseInt(i.toString(), 10)]].push(_this[keys[parseInt(i.toString(), 10)]][parseInt(j.toString(), 10)].toJSON());\n                    }\n                }\n                else if (skip.indexOf(keys[parseInt(i.toString(), 10)]) < 0) {\n                    col[keys[parseInt(i.toString(), 10)]] = _this[keys[parseInt(i.toString(), 10)]];\n                }\n            }\n            return col;\n        };\n        if (!this.field) {\n            this.allowFiltering = false;\n            this.allowGrouping = false;\n            this.allowSorting = false;\n            if (this.columns) {\n                this.allowResizing = this.columns.some(function (col) {\n                    return col.allowResizing;\n                });\n            }\n        }\n        if (this.commands && !this.textAlign) {\n            this.textAlign = 'Right';\n        }\n        if (this.template || this.commandsTemplate) {\n            this.templateFn = templateCompiler(this.template || this.commandsTemplate);\n        }\n        if (this.headerTemplate) {\n            this.headerTemplateFn = templateCompiler(this.headerTemplate);\n        }\n        if (!isNullOrUndefined(this.filter) && this.filter.itemTemplate) {\n            this.fltrTemplateFn = templateCompiler(this.filter.itemTemplate);\n        }\n        if (this.editTemplate) {\n            this.editTemplateFn = templateCompiler(this.editTemplate);\n        }\n        if (this.filterTemplate) {\n            this.filterTemplateFn = templateCompiler(this.filterTemplate);\n        }\n        if (this.isForeignColumn() &&\n            (isNullOrUndefined(this.editType) || this.editType === 'dropdownedit' || this.editType === 'defaultedit')) {\n            this.editType = 'dropdownedit';\n            if (this.edit.params && this.edit.params.dataSource) {\n                this.edit.params.ddEditedData = true;\n            }\n            this.edit.params = extend({\n                dataSource: this.dataSource,\n                query: new Query(), fields: { value: this.foreignKeyField || this.field, text: this.foreignKeyValue }\n            }, this.edit.params);\n        }\n        if (this.sortComparer) {\n            var a_1 = this.sortComparer;\n            this.sortComparer = function (x, y, xObj, yObj) {\n                if (typeof a_1 === 'string') {\n                    a_1 = getObject(a_1, window);\n                }\n                if (_this.sortDirection === 'Descending') {\n                    var z = x;\n                    x = y;\n                    y = z;\n                    var obj = xObj;\n                    xObj = yObj;\n                    yObj = obj;\n                }\n                return a_1(x, y, xObj, yObj);\n            };\n        }\n        if (!this.sortComparer && this.isForeignColumn()) {\n            this.sortComparer = function (x, y) {\n                x = getObject(_this.foreignKeyValue, getForeignData(_this, {}, x)[0]);\n                y = getObject(_this.foreignKeyValue, getForeignData(_this, {}, y)[0]);\n                return _this.sortDirection === 'Descending' ? DataUtil.fnDescending(x, y) : DataUtil.fnAscending(x, y);\n            };\n        }\n    }\n    /**\n     * @returns {string} returns the sort direction\n     * @hidden */\n    Column.prototype.getSortDirection = function () {\n        return this.sortDirection;\n    };\n    /**\n     * @param {string} direction - specifies the direction\n     * @returns {void}\n     * @hidden\n     */\n    Column.prototype.setSortDirection = function (direction) {\n        this.sortDirection = direction;\n    };\n    /**\n     * @returns {freezeTable} returns the FreezeTable\n     * @hidden */\n    Column.prototype.getFreezeTableName = function () {\n        return this.freezeTable;\n    };\n    /**\n     * @param {Column} column - specifies the column\n     * @returns {void}\n     * @hidden\n     */\n    Column.prototype.setProperties = function (column) {\n        //Angular two way binding\n        var keys = Object.keys(column);\n        for (var i = 0; i < keys.length; i++) {\n            this[keys[parseInt(i.toString(), 10)]] = column[keys[parseInt(i.toString(), 10)]];\n            //Refresh the react columnTemplates on state change\n            if (this.parent && this.parent.isReact) {\n                if (keys[parseInt(i.toString(), 10)] === 'template') {\n                    this.templateFn = templateCompiler(column[keys[parseInt(i.toString(), 10)]]);\n                    this.parent.refreshReactColumnTemplateByUid(this.uid, true);\n                }\n                else if (keys[parseInt(i.toString(), 10)] === 'headerTemplate') {\n                    this.headerTemplateFn = templateCompiler(column[keys[parseInt(i.toString(), 10)]]);\n                    this.parent.refreshReactHeaderTemplateByUid(this.uid);\n                }\n                else if (keys[parseInt(i.toString(), 10)] === 'editTemplate') {\n                    this.editTemplateFn = templateCompiler(column[keys[parseInt(i.toString(), 10)]]);\n                }\n            }\n        }\n    };\n    /**\n     * @returns {boolean} returns true for foreign column\n     * @hidden\n     * It defines the column is foreign key column or not.\n     */\n    Column.prototype.isForeignColumn = function () {\n        return !!(this.dataSource && this.foreignKeyValue);\n    };\n    /**\n     * @returns {Function} returns the function\n     * @hidden\n     */\n    Column.prototype.getFormatter = function () {\n        return this.formatFn;\n    };\n    /**\n     * @param {Function} value - specifies the value\n     * @returns {void}\n     * @hidden\n     */\n    Column.prototype.setFormatter = function (value) {\n        this.formatFn = value;\n    };\n    /**\n     * @returns {Function} returns the function\n     * @hidden */\n    Column.prototype.getParser = function () {\n        return this.parserFn;\n    };\n    /**\n     * @param {Function} value - specifies the value\n     * @returns {void}\n     * @hidden\n     */\n    Column.prototype.setParser = function (value) {\n        this.parserFn = value;\n    };\n    /**\n     * @returns {Function} returns the function\n     * @hidden */\n    Column.prototype.getColumnTemplate = function () {\n        return this.templateFn;\n    };\n    /**\n     * @returns {Function} returns the function\n     * @hidden */\n    Column.prototype.getHeaderTemplate = function () {\n        return this.headerTemplateFn;\n    };\n    /**\n     * @returns {Function} returns the function\n     * @hidden */\n    Column.prototype.getFilterItemTemplate = function () {\n        return this.fltrTemplateFn;\n    };\n    /**\n     * @returns {string} returns the string\n     * @hidden */\n    Column.prototype.getDomSetter = function () {\n        return this.disableHtmlEncode ? 'textContent' : 'innerHTML';\n    };\n    return Column;\n}());\nexport { Column };\n/**\n * Define options for custom command buttons.\n */\nvar CommandColumnModel = /** @class */ (function () {\n    function CommandColumnModel() {\n    }\n    __decorate([\n        Property()\n    ], CommandColumnModel.prototype, \"title\", void 0);\n    __decorate([\n        Property()\n    ], CommandColumnModel.prototype, \"type\", void 0);\n    __decorate([\n        Property()\n    ], CommandColumnModel.prototype, \"buttonOption\", void 0);\n    return CommandColumnModel;\n}());\nexport { CommandColumnModel };\n/**\n * Defines Grid column\n */\nvar GridColumn = /** @class */ (function (_super) {\n    __extends(GridColumn, _super);\n    function GridColumn() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(null)\n    ], GridColumn.prototype, \"columns\", void 0);\n    return GridColumn;\n}(Column));\nexport { GridColumn };\n/**\n * Defines stacked grid column\n */\nvar StackedColumn = /** @class */ (function (_super) {\n    __extends(StackedColumn, _super);\n    function StackedColumn() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return StackedColumn;\n}(GridColumn));\nexport { StackedColumn };\n","import { Browser, EventHandler } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { formatUnit, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { getScrollBarWidth, getUpdateUsingRaf } from '../base/util';\nimport { scroll, contentReady, uiUpdate, onEmpty, headerRefreshed, textWrapRefresh, virtualScrollEdit, infiniteScrollHandler, closeFilterDialog } from '../base/constant';\nimport { lazyLoadScrollHandler, checkScrollReset } from '../base/constant';\nimport { ColumnWidthService } from '../services/width-controller';\nimport * as literals from '../base/string-literals';\nimport * as events from '../base/constant';\n/**\n * The `Scroll` module is used to handle scrolling behaviour.\n */\nvar Scroll = /** @class */ (function () {\n    /**\n     * Constructor for the Grid scrolling.\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @hidden\n     */\n    function Scroll(parent) {\n        //To maintain scroll state on grid actions.\n        this.previousValues = { top: 0, left: 0 };\n        this.oneTimeReady = true;\n        this.parent = parent;\n        this.widthService = new ColumnWidthService(parent);\n        this.addEventListener();\n    }\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    Scroll.prototype.getModuleName = function () {\n        return 'scroll';\n    };\n    /**\n     * @param {boolean} uiupdate - specifies the uiupdate\n     * @returns {void}\n     * @hidden\n     */\n    Scroll.prototype.setWidth = function (uiupdate) {\n        this.parent.element.style.width = formatUnit(this.parent.width);\n        if (uiupdate) {\n            this.widthService.setWidthToColumns();\n        }\n        if (this.parent.toolbarModule && this.parent.toolbarModule.toolbar &&\n            this.parent.toolbarModule.toolbar.element) {\n            var tlbrElement = this.parent.toolbarModule.toolbar.element;\n            var tlbrLeftElement = tlbrElement.querySelector('.e-toolbar-left');\n            var tlbrCenterElement = tlbrElement.querySelector('.e-toolbar-center');\n            var tlbrRightElement = tlbrElement.querySelector('.e-toolbar-right');\n            var tlbrItems = tlbrElement.querySelector('.e-toolbar-items');\n            var tlbrLeftWidth = tlbrLeftElement ? tlbrLeftElement.clientWidth : 0;\n            var tlbrCenterWidth = tlbrCenterElement ? tlbrCenterElement.clientWidth : 0;\n            var tlbrRightWidth = tlbrRightElement ? tlbrRightElement.clientWidth : 0;\n            var tlbrItemsWidth = tlbrItems ? tlbrItems.clientWidth : 0;\n            var tlbrWidth = tlbrElement ? tlbrElement.clientWidth : 0;\n            if (!this.parent.enableAdaptiveUI || tlbrLeftWidth > tlbrWidth || tlbrCenterWidth > tlbrWidth || tlbrRightWidth > tlbrWidth ||\n                tlbrItemsWidth > tlbrWidth) {\n                this.parent.toolbarModule.toolbar.refreshOverflow();\n            }\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Scroll.prototype.setHeight = function () {\n        var mHdrHeight = 0;\n        var content = this.parent.getContent().querySelector('.' + literals.content);\n        var height = this.parent.height;\n        if (this.parent.enableColumnVirtualization && this.parent.isFrozenGrid() && this.parent.height !== 'auto'\n            && this.parent.height.toString().indexOf('%') < 0) {\n            height = parseInt(height, 10) - Scroll.getScrollBarWidth();\n        }\n        if (!this.parent.enableVirtualization && this.parent.frozenRows && this.parent.height !== 'auto') {\n            var tbody = this.parent.getHeaderContent()\n                .querySelector(literals.tbody + ':not(.e-masked-tbody)');\n            mHdrHeight = tbody ? tbody.offsetHeight : 0;\n            if (tbody && mHdrHeight) {\n                var add = tbody.getElementsByClassName(literals.addedRow).length;\n                var height_1 = add * this.parent.getRowHeight();\n                mHdrHeight -= height_1;\n            }\n            else if (!this.parent.isInitialLoad && this.parent.loadingIndicator.indicatorType === 'Shimmer'\n                && this.parent.getHeaderContent().querySelector('.e-masked-table')) {\n                height = parseInt(height, 10) - (this.parent.frozenRows * this.parent.getRowHeight());\n            }\n            content.style.height = formatUnit(height - mHdrHeight);\n        }\n        else {\n            content.style.height = formatUnit(height);\n        }\n        this.ensureOverflow(content);\n        if (this.parent.isFrozenGrid()) {\n            this.refresh();\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Scroll.prototype.setPadding = function () {\n        var content = this.parent.getHeaderContent();\n        var scrollWidth = Scroll.getScrollBarWidth() - this.getThreshold();\n        var cssProps = this.getCssProperties();\n        content.querySelector('.' + literals.headerContent).style[cssProps.border] = scrollWidth > 0 ? '1px' : '0px';\n        content.style[cssProps.padding] = scrollWidth > 0 ? scrollWidth + 'px' : '0px';\n    };\n    /**\n     * @param {boolean} rtl - specifies the rtl\n     * @returns {void}\n     * @hidden\n     */\n    Scroll.prototype.removePadding = function (rtl) {\n        var cssProps = this.getCssProperties(rtl);\n        var hDiv = this.parent.getHeaderContent().querySelector('.' + literals.headerContent);\n        hDiv.style[cssProps.border] = '';\n        hDiv.parentElement.style[cssProps.padding] = '';\n        var footerDiv = this.parent.getFooterContent();\n        if (footerDiv && footerDiv.classList.contains('e-footerpadding')) {\n            footerDiv.classList.remove('e-footerpadding');\n        }\n    };\n    /**\n     * Refresh makes the Grid adoptable with the height of parent container.\n     *\n     * > The [`height`](./#height) must be set to 100%.\n     *\n     * @returns {void}\n     */\n    Scroll.prototype.refresh = function () {\n        if (this.parent.height !== '100%') {\n            return;\n        }\n        var content = this.parent.getContent();\n        this.parent.element.style.height = '100%';\n        var height = this.widthService.getSiblingsHeight(content);\n        content.style.height = 'calc(100% - ' + height + 'px)'; //Set the height to the  '.' + literals.gridContent;\n    };\n    Scroll.prototype.getThreshold = function () {\n        /* Some browsers places the scroller outside the content,\n         * hence the padding should be adjusted.*/\n        var appName = Browser.info.name;\n        if (appName === 'mozilla') {\n            return 0.5;\n        }\n        return 1;\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Scroll.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.on(onEmpty, this.wireEvents, this);\n        this.parent.on(contentReady, this.wireEvents, this);\n        this.parent.on(uiUpdate, this.onPropertyChanged, this);\n        this.parent.on(textWrapRefresh, this.wireEvents, this);\n        this.parent.on(headerRefreshed, this.setScrollLeft, this);\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Scroll.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.off(onEmpty, this.wireEvents);\n        this.parent.off(contentReady, this.wireEvents);\n        this.parent.off(uiUpdate, this.onPropertyChanged);\n        this.parent.off(textWrapRefresh, this.wireEvents);\n        this.parent.off(headerRefreshed, this.setScrollLeft);\n        this.unwireEvents();\n    };\n    Scroll.prototype.unwireEvents = function () {\n        if (this.parent.frozenRows && this.header) {\n            EventHandler.remove(this.header, 'touchstart pointerdown', this.setPageXY);\n            EventHandler.remove(this.header, 'touchmove pointermove', this.onTouchScroll);\n        }\n        var mScrollBar = this.parent.getContent() ? this.parent.getContent().querySelector('.e-movablescrollbar') : null;\n        if (this.parent.isFrozenGrid() && this.parent.enableColumnVirtualization) {\n            if (mScrollBar) {\n                EventHandler.remove(mScrollBar, 'scroll', this.onCustomScrollbarScroll);\n            }\n            if (this.content) {\n                EventHandler.remove(this.content, 'scroll', this.onCustomScrollbarScroll);\n                EventHandler.remove(this.content, 'touchstart pointerdown', this.setPageXY);\n                if (!(/macintosh|ipad/.test(Browser.userAgent.toLowerCase()) && Browser.isDevice)) {\n                    EventHandler.remove(this.content, 'touchmove pointermove', this.onTouchScroll);\n                }\n            }\n            if (this.header) {\n                EventHandler.remove(this.header, 'scroll', this.onCustomScrollbarScroll);\n                EventHandler.remove(this.header, 'touchstart pointerdown', this.setPageXY);\n                EventHandler.remove(this.header, 'touchmove pointermove', this.onTouchScroll);\n            }\n        }\n        if (this.content) {\n            EventHandler.remove(this.content, 'scroll', this.contentScrollHandler);\n        }\n        if (this.header) {\n            EventHandler.remove(this.header, 'scroll', this.headerScrollHandler);\n        }\n        this.contentScrollHandler = null;\n        this.headerScrollHandler = null;\n        if (this.parent.aggregates.length && this.parent.getFooterContent()) {\n            EventHandler.remove(this.parent.getFooterContent().firstChild, 'scroll', this.onContentScroll);\n        }\n    };\n    Scroll.prototype.setScrollLeft = function () {\n        this.parent.getHeaderContent().querySelector('.' + literals.headerContent).scrollLeft = this.previousValues.left;\n    };\n    Scroll.prototype.onContentScroll = function (scrollTarget) {\n        var _this = this;\n        var element = scrollTarget;\n        var isHeader = element.classList.contains(literals.headerContent);\n        return function (e) {\n            if (_this.content.querySelector(literals.tbody) === null || _this.parent.isPreventScrollEvent) {\n                return;\n            }\n            var target = e.target;\n            if (_this.parent.frozenRows) {\n                if (_this.content.scrollTop > 0 && _this.parent.frozenRows) {\n                    addClass([_this.parent.element], 'e-top-shadow');\n                }\n                else {\n                    removeClass([_this.parent.element], 'e-top-shadow');\n                }\n            }\n            if (_this.parent.element.querySelectorAll('.e-leftfreeze,.e-fixedfreeze,.e-rightfreeze').length) {\n                var errorFreeze = _this.parent.getContent().querySelectorAll('.e-freezeerror:not([style*=\"display: none\"])');\n                var errorFixed = _this.parent.getContent().querySelectorAll('.e-fixederror:not([style*=\"display: none\"])');\n                if (target.scrollLeft !== 0 && _this.parent.getVisibleFrozenLeftCount()) {\n                    addClass([_this.parent.element], 'e-left-shadow');\n                }\n                else {\n                    removeClass([_this.parent.element], 'e-left-shadow');\n                }\n                var widthVal = Math.round((_this.parent.enableRtl ? target.scrollWidth + target.scrollLeft : target.scrollWidth - target.scrollLeft) +\n                    (_this.parent.height === 'auto' ? 0 : 1));\n                if (widthVal === target.offsetWidth && _this.parent.getVisibleFrozenRightCount()) {\n                    removeClass([_this.parent.element], 'e-right-shadow');\n                }\n                else {\n                    addClass([_this.parent.element], 'e-right-shadow');\n                }\n                var rows = [].slice.call(_this.parent.getContent().querySelectorAll('.e-row:not(.e-hiddenrow)'));\n                if (((rows.length === 1 && errorFreeze.length) ||\n                    (_this.parent.element.querySelector('.e-freeze-autofill:not([style*=\"display: none\"])')) ||\n                    errorFixed.length) && target.scrollLeft !== _this.previousValues.left) {\n                    target.scrollLeft = _this.previousValues.left;\n                    return;\n                }\n                if (rows.length !== 1 && (errorFreeze.length || errorFixed.length) && target.scrollTop !== _this.previousValues.top) {\n                    target.scrollTop = _this.previousValues.top;\n                    return;\n                }\n            }\n            var left = target.scrollLeft;\n            if (!isNullOrUndefined(_this.parent.infiniteScrollModule) && _this.parent.enableInfiniteScrolling && !_this.parent.isEdit) {\n                _this.parent.notify(infiniteScrollHandler, { target: e.target, isLeft: _this.previousValues.left !== left });\n            }\n            if (_this.parent.groupSettings.columns.length && _this.parent.groupSettings.enableLazyLoading) {\n                var isDown = _this.previousValues.top < _this.parent.getContent().firstElementChild.scrollTop;\n                _this.parent.notify(lazyLoadScrollHandler, { scrollDown: isDown });\n            }\n            _this.parent.notify(virtualScrollEdit, {});\n            var isFooter = target.classList.contains('e-summarycontent');\n            if (_this.previousValues.left === left) {\n                _this.previousValues.top = !isHeader ? _this.previousValues.top : target.scrollTop;\n                return;\n            }\n            _this.parent.notify(closeFilterDialog, e);\n            element.scrollLeft = left;\n            if (isFooter) {\n                _this.header.scrollLeft = left;\n            }\n            _this.previousValues.left = left;\n            _this.parent.notify(scroll, { left: left });\n        };\n    };\n    Scroll.prototype.onCustomScrollbarScroll = function (cont, hdr) {\n        var _this = this;\n        var content = cont;\n        var header = hdr;\n        return function (e) {\n            if (_this.content.querySelector(literals.tbody) === null) {\n                return;\n            }\n            var target = e.target;\n            var left = target.scrollLeft;\n            if (_this.previousValues.left === left) {\n                return;\n            }\n            content.scrollLeft = left;\n            header.scrollLeft = left;\n            _this.previousValues.left = left;\n            _this.parent.notify(scroll, { left: left });\n            if (_this.parent.isDestroyed) {\n                return;\n            }\n        };\n    };\n    Scroll.prototype.onTouchScroll = function (scrollTarget) {\n        var _this = this;\n        var element = scrollTarget;\n        return function (e) {\n            if (e.pointerType === 'mouse') {\n                return;\n            }\n            var isFrozen = _this.parent.isFrozenGrid();\n            var pageXY = _this.getPointXY(e);\n            var left = element.scrollLeft + (_this.pageXY.x - pageXY.x);\n            var mHdr = _this.parent.getHeaderContent().querySelector('.' + literals.headerContent);\n            var mCont = _this.parent.getContent().querySelector('.' + literals.content);\n            if (_this.previousValues.left === left || (left < 0 || (mHdr.scrollWidth - mHdr.clientWidth) < left)) {\n                return;\n            }\n            e.preventDefault();\n            mHdr.scrollLeft = left;\n            mCont.scrollLeft = left;\n            if (isFrozen && _this.parent.enableColumnVirtualization) {\n                var scrollBar = _this.parent.getContent().querySelector('.e-movablescrollbar');\n                scrollBar.scrollLeft = left;\n            }\n            _this.pageXY.x = pageXY.x;\n            _this.previousValues.left = left;\n        };\n    };\n    Scroll.prototype.setPageXY = function () {\n        var _this = this;\n        return function (e) {\n            if (e.pointerType === 'mouse') {\n                return;\n            }\n            _this.pageXY = _this.getPointXY(e);\n        };\n    };\n    Scroll.prototype.getPointXY = function (e) {\n        var pageXY = { x: 0, y: 0 };\n        if (e.touches && e.touches.length) {\n            pageXY.x = e.touches[0].pageX;\n            pageXY.y = e.touches[0].pageY;\n        }\n        else {\n            pageXY.x = e.pageX;\n            pageXY.y = e.pageY;\n        }\n        return pageXY;\n    };\n    Scroll.prototype.getScrollbleParent = function (node) {\n        if (node === null) {\n            return null;\n        }\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        var parent = isNullOrUndefined(node.tagName) ? node.scrollingElement : node;\n        var overflowY = document.defaultView.getComputedStyle(parent, null).overflowY;\n        if (parent.scrollHeight > parent.clientHeight && overflowY !== 'hidden'\n            && overflowY !== 'visible' || node.tagName === 'HTML' || node.tagName === 'BODY') {\n            return node;\n        }\n        else {\n            return this.getScrollbleParent(node.parentNode);\n        }\n    };\n    /**\n     * @param {boolean} isAdd - specifies whether adding/removing the event\n     * @returns {void}\n     * @hidden\n     */\n    Scroll.prototype.addStickyListener = function (isAdd) {\n        this.parentElement = this.getScrollbleParent(this.parent.element.parentElement);\n        if (isAdd && this.parentElement) {\n            this.eventElement = this.parentElement.tagName === 'HTML' || this.parentElement.tagName === 'BODY' ? document :\n                this.parentElement;\n            EventHandler.add(this.eventElement, 'scroll', this.makeStickyHeader, this);\n        }\n        else if (this.eventElement) {\n            EventHandler.remove(this.eventElement, 'scroll', this.makeStickyHeader);\n            this.eventElement = null;\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Scroll.prototype.resizeFrozenRowBorder = function () {\n        var div;\n        if (!this.parent.element.querySelector('.e-frozenrow-border')) {\n            div = this.parent.createElement('div', { className: 'e-frozenrow-border' });\n            this.parent.element.insertBefore(div, this.parent.element.querySelector('.e-gridcontent'));\n        }\n        else {\n            div = this.parent.element.querySelector('.e-frozenrow-border');\n        }\n        var scrollWidth = this.parent.height !== 'auto' ? Scroll.getScrollBarWidth() : 0;\n        div.style.width = (this.parent.element.offsetWidth - scrollWidth) - 0.5 + 'px';\n    };\n    Scroll.prototype.wireEvents = function () {\n        var _this = this;\n        if (this.oneTimeReady) {\n            var frzCols = this.parent.isFrozenGrid();\n            this.content = this.parent.getContent().querySelector('.' + literals.content);\n            this.header = this.parent.getHeaderContent().querySelector('.' + literals.headerContent);\n            var mScrollBar = this.parent.getContent().querySelector('.e-movablescrollbar');\n            if (this.parent.frozenRows && this.header && this.content) {\n                EventHandler.add(this.header, 'touchstart pointerdown', this.setPageXY(), this);\n                EventHandler.add(this.header, 'touchmove pointermove', this.onTouchScroll(this.content), this);\n            }\n            if (frzCols && mScrollBar && this.parent.enableColumnVirtualization) {\n                EventHandler.add(mScrollBar, 'scroll', this.onCustomScrollbarScroll(this.content, this.header), this);\n                EventHandler.add(this.content, 'scroll', this.onCustomScrollbarScroll(mScrollBar, this.header), this);\n                EventHandler.add(this.header, 'scroll', this.onCustomScrollbarScroll(mScrollBar, this.content), this);\n                EventHandler.add(this.header, 'touchstart pointerdown', this.setPageXY(), this);\n                EventHandler.add(this.header, 'touchmove pointermove', this.onTouchScroll(this.content), this);\n                EventHandler.add(this.content, 'touchstart pointerdown', this.setPageXY(), this);\n                if (!(/macintosh|ipad/.test(Browser.userAgent.toLowerCase()) && Browser.isDevice)) {\n                    EventHandler.add(this.content, 'touchmove pointermove', this.onTouchScroll(this.header), this);\n                }\n            }\n            this.contentScrollHandler = this.onContentScroll(this.header);\n            this.headerScrollHandler = this.onContentScroll(this.content);\n            EventHandler.add(this.content, 'scroll', this.contentScrollHandler, this);\n            EventHandler.add(this.header, 'scroll', this.headerScrollHandler, this);\n            if (this.parent.aggregates.length) {\n                EventHandler.add(this.parent.getFooterContent().firstChild, 'scroll', this.onContentScroll(this.content), this);\n            }\n            if (this.parent.enableStickyHeader) {\n                this.addStickyListener(true);\n            }\n            this.refresh();\n            this.oneTimeReady = false;\n        }\n        var table = this.parent.getContentTable();\n        var sLeft;\n        var sHeight;\n        var clientHeight;\n        getUpdateUsingRaf(function () {\n            sLeft = _this.header.scrollLeft;\n            sHeight = table.scrollHeight;\n            clientHeight = _this.parent.getContent().clientHeight;\n        }, function () {\n            var args = { cancel: false };\n            _this.parent.notify(checkScrollReset, args);\n            if (sHeight < clientHeight && _this.parent.height !== 'auto') {\n                _this.setLastRowCell();\n            }\n            if (_this.parent.frozenRows) {\n                _this.resizeFrozenRowBorder();\n            }\n            if (!_this.parent.enableVirtualization && !_this.parent.enableInfiniteScrolling) {\n                if (!args.cancel) {\n                    _this.header.scrollLeft = _this.previousValues.left;\n                    _this.content.scrollLeft = _this.previousValues.left;\n                    _this.content.scrollTop = _this.previousValues.top;\n                }\n            }\n            if (!_this.parent.enableColumnVirtualization) {\n                _this.content.scrollLeft = sLeft;\n                if (_this.parent.isFrozenGrid()) {\n                    _this.previousValues.left = sLeft;\n                }\n            }\n        });\n        this.parent.isPreventScrollEvent = false;\n    };\n    /**\n     * @returns {void} returns void\n     * @hidden\n     */\n    Scroll.prototype.setLastRowCell = function () {\n        var table = this.parent.getContentTable();\n        if (table.querySelector('tr:nth-last-child(2)')) {\n            removeClass(table.querySelector('tr:nth-last-child(2)').querySelectorAll('td'), 'e-lastrowcell');\n        }\n        addClass(table.querySelectorAll('tr:last-child td'), 'e-lastrowcell');\n    };\n    /**\n     * @param {boolean} rtl - specifies the rtl\n     * @returns {ScrollCss} returns the ScrollCss\n     * @hidden\n     */\n    Scroll.prototype.getCssProperties = function (rtl) {\n        var css = {};\n        var enableRtl = isNullOrUndefined(rtl) ? this.parent.enableRtl : rtl;\n        css.border = enableRtl ? 'borderLeftWidth' : 'borderRightWidth';\n        css.padding = enableRtl ? 'paddingLeft' : 'paddingRight';\n        return css;\n    };\n    Scroll.prototype.ensureOverflow = function (content) {\n        content.style.overflowY = this.parent.height === 'auto' ? 'auto' : 'scroll';\n    };\n    Scroll.prototype.onPropertyChanged = function (e) {\n        if (e.module !== this.getModuleName()) {\n            return;\n        }\n        this.setPadding();\n        this.oneTimeReady = true;\n        if (this.parent.height === 'auto') {\n            this.removePadding();\n        }\n        this.wireEvents();\n        this.setHeight();\n        var width = 'width';\n        this.setWidth(!isNullOrUndefined(e.properties[\"\" + width]));\n    };\n    Scroll.prototype.makeStickyHeader = function () {\n        if (this.parent.enableStickyHeader && this.parent.element && this.parent.getContent()) {\n            var contentRect = this.parent.getContent().getClientRects()[0];\n            if (contentRect) {\n                var headerEle = this.parent.getHeaderContent();\n                var toolbarEle = this.parent.element.querySelector('.e-toolbar');\n                var groupHeaderEle = this.parent.element.querySelector('.e-groupdroparea');\n                var height = headerEle.offsetHeight + (toolbarEle ? toolbarEle.offsetHeight : 0) +\n                    (groupHeaderEle ? groupHeaderEle.offsetHeight : 0);\n                var parentTop = this.parentElement.getClientRects()[0].top;\n                var top_1 = contentRect.top - (parentTop < 0 ? 0 : parentTop);\n                var left = contentRect.left;\n                var colMenuEle = document.body.querySelector('#' + this.parent.element.id + '_columnmenu');\n                if (top_1 < height && contentRect.bottom > 0) {\n                    headerEle.classList.add('e-sticky');\n                    var elemTop = 0;\n                    if (groupHeaderEle && this.parent.groupSettings.showDropArea) {\n                        this.setSticky(groupHeaderEle, elemTop, contentRect.width, left, true);\n                        elemTop += groupHeaderEle.getClientRects()[0].height;\n                    }\n                    if (toolbarEle) {\n                        this.setSticky(toolbarEle, elemTop, contentRect.width, left, true);\n                        elemTop += toolbarEle.getClientRects()[0].height;\n                    }\n                    this.setSticky(headerEle, elemTop, contentRect.width, left, true);\n                    if (!isNullOrUndefined(colMenuEle)) {\n                        colMenuEle.style.position = 'fixed';\n                        colMenuEle.style.top = height + 'px';\n                    }\n                }\n                else {\n                    if (headerEle.classList.contains('e-sticky')) {\n                        this.setSticky(headerEle, null, null, null, false);\n                        if (toolbarEle) {\n                            this.setSticky(toolbarEle, null, null, null, false);\n                        }\n                        if (groupHeaderEle) {\n                            this.setSticky(groupHeaderEle, null, null, null, false);\n                        }\n                        var ccDlg = this.parent.element.querySelector('.e-ccdlg');\n                        if (ccDlg) {\n                            ccDlg.classList.remove('e-sticky');\n                        }\n                        if (!isNullOrUndefined(colMenuEle)) {\n                            colMenuEle.style.position = 'absolute';\n                            var topStyle = contentRect.top - parentTop;\n                            colMenuEle.style.top = topStyle + 'px';\n                        }\n                    }\n                }\n                this.parent.notify(events.stickyScrollComplete, {});\n            }\n        }\n    };\n    Scroll.prototype.setSticky = function (ele, top, width, left, isAdd) {\n        if (isAdd) {\n            ele.style.width = width + 'px';\n            ele.classList.add('e-sticky');\n        }\n        else {\n            ele.classList.remove('e-sticky');\n        }\n        ele.style.top = top != null ? top + 'px' : '';\n        ele.style.left = left !== null ? parseInt(ele.style.left, 10) !== left ? left + 'px' : ele.style.left : '';\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Scroll.prototype.destroy = function () {\n        var gridElement = this.parent.element;\n        if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n            return;\n        }\n        this.removeEventListener();\n        //Remove Dom event\n        var cont = this.parent.getContent().querySelector('.' + literals.content);\n        EventHandler.remove(cont, 'scroll', this.onContentScroll);\n        if (this.parent.enableStickyHeader) {\n            this.addStickyListener(false);\n        }\n        //Remove padding\n        this.removePadding();\n        removeClass([this.parent.getHeaderContent().querySelector('.' + literals.headerContent)], literals.headerContent);\n        removeClass([cont], literals.content);\n        //Remove height\n        cont.style.height = '';\n        //Remove width\n        this.parent.element.style.width = '';\n    };\n    /**\n     * Function to get the scrollbar width of the browser.\n     *\n     * @returns {number} return the width\n     * @hidden\n     */\n    Scroll.getScrollBarWidth = function () {\n        return getScrollBarWidth();\n    };\n    return Scroll;\n}());\nexport { Scroll };\n","//! moment.js locale configuration\n//! locale : Czech [cs]\n//! author : petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = {\n            format: 'leden_únor_březen_duben_květen_červen_červenec_srpen_září_říjen_listopad_prosinec'.split(\n                '_'\n            ),\n            standalone:\n                'ledna_února_března_dubna_května_června_července_srpna_září_října_listopadu_prosince'.split(\n                    '_'\n                ),\n        },\n        monthsShort = 'led_úno_bře_dub_kvě_čvn_čvc_srp_zář_říj_lis_pro'.split('_'),\n        monthsParse = [\n            /^led/i,\n            /^úno/i,\n            /^bře/i,\n            /^dub/i,\n            /^kvě/i,\n            /^(čvn|červen$|června)/i,\n            /^(čvc|červenec|července)/i,\n            /^srp/i,\n            /^zář/i,\n            /^říj/i,\n            /^lis/i,\n            /^pro/i,\n        ],\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsRegex =\n            /^(leden|únor|březen|duben|květen|červenec|července|červen|června|srpen|září|říjen|listopad|prosinec|led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i;\n\n    function plural(n) {\n        return n > 1 && n < 5 && ~~(n / 10) !== 1;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekund' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekund');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minuta' : isFuture ? 'minutu' : 'minutou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minuty' : 'minut');\n                } else {\n                    return result + 'minutami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodin');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'den' : 'dnem';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dny' : 'dní');\n                } else {\n                    return result + 'dny';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'měsíc' : 'měsícem';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'měsíce' : 'měsíců');\n                } else {\n                    return result + 'měsíci';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokem';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'let');\n                } else {\n                    return result + 'lety';\n                }\n        }\n    }\n\n    var cs = moment.defineLocale('cs', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        // NOTE: 'červen' is substring of 'červenec'; therefore 'červenec' must precede 'červen' in the regex to be fully matched.\n        // Otherwise parser matches '1. červenec' as '1. červen' + 'ec'.\n        monthsStrictRegex:\n            /^(leden|ledna|února|únor|březen|března|duben|dubna|květen|května|červenec|července|červen|června|srpen|srpna|září|říjen|října|listopadu|listopad|prosinec|prosince)/i,\n        monthsShortStrictRegex:\n            /^(led|úno|bře|dub|kvě|čvn|čvc|srp|zář|říj|lis|pro)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'neděle_pondělí_úterý_středa_čtvrtek_pátek_sobota'.split('_'),\n        weekdaysShort: 'ne_po_út_st_čt_pá_so'.split('_'),\n        weekdaysMin: 'ne_po_út_st_čt_pá_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n            l: 'D. M. YYYY',\n        },\n        calendar: {\n            sameDay: '[dnes v] LT',\n            nextDay: '[zítra v] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [v] LT';\n                    case 3:\n                        return '[ve středu v] LT';\n                    case 4:\n                        return '[ve čtvrtek v] LT';\n                    case 5:\n                        return '[v pátek v] LT';\n                    case 6:\n                        return '[v sobotu v] LT';\n                }\n            },\n            lastDay: '[včera v] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulou neděli v] LT';\n                    case 1:\n                    case 2:\n                        return '[minulé] dddd [v] LT';\n                    case 3:\n                        return '[minulou středu v] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [v] LT';\n                    case 6:\n                        return '[minulou sobotu v] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'před %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return cs;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { Row } from '../models/row';\nimport { Column } from '../models/column';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { calculateAggregate, getUid } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\n/**\n * Summary row model generator\n *\n * @hidden\n */\nvar SummaryModelGenerator = /** @class */ (function () {\n    /**\n     * Constructor for Summary row model generator\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     */\n    function SummaryModelGenerator(parent) {\n        this.parent = parent;\n    }\n    SummaryModelGenerator.prototype.getData = function () {\n        var _this = this;\n        var rows = [];\n        var row = this.parent.aggregates.slice();\n        for (var i = 0; i < row.length; i++) {\n            var columns = row[parseInt(i.toString(), 10)].columns.filter(function (column) {\n                return !(column.footerTemplate || column.groupFooterTemplate || column.groupCaptionTemplate)\n                    || _this.columnSelector(column);\n            });\n            if (columns.length) {\n                rows.push({ columns: columns });\n            }\n        }\n        return rows;\n    };\n    SummaryModelGenerator.prototype.columnSelector = function (column) {\n        return column.footerTemplate !== undefined;\n    };\n    SummaryModelGenerator.prototype.getColumns = function (start) {\n        var columns = [];\n        if (this.parent.detailTemplate || !isNullOrUndefined(this.parent.childGrid)) {\n            columns.push(new Column({}));\n        }\n        if (this.parent.allowGrouping) {\n            for (var i = 0; i < this.parent.groupSettings.columns.length; i++) {\n                columns.push(new Column({}));\n            }\n        }\n        if (this.parent.isRowDragable() && !start) {\n            columns.push(new Column({}));\n        }\n        columns.push.apply(columns, this.parent.getColumns());\n        return columns;\n    };\n    SummaryModelGenerator.prototype.generateRows = function (input, args, start, end, columns) {\n        if (input.length === 0) {\n            if (args === undefined || !args.count) {\n                return [];\n            }\n        }\n        var data = this.buildSummaryData(input, args);\n        var rows = [];\n        var row = this.getData();\n        for (var i = 0; i < row.length; i++) {\n            rows.push(this.getGeneratedRow(row[parseInt(i.toString(), 10)], data[parseInt(i.toString(), 10)], args ? args.level : undefined, start, end, args ? args.parentUid : undefined, columns));\n        }\n        return rows;\n    };\n    SummaryModelGenerator.prototype.getGeneratedRow = function (summaryRow, data, raw, start, end, parentUid, columns) {\n        var tmp = [];\n        var indents = this.getIndentByLevel();\n        var isDetailGridAlone = !isNullOrUndefined(this.parent.childGrid);\n        var indentLength = this.parent.getIndentCount();\n        if (this.parent.groupSettings.columns.length && this.parent.allowRowDragAndDrop) {\n            indents.push('e-indentcelltop');\n        }\n        else if (this.parent.isRowDragable() && !start) {\n            indents = ['e-indentcelltop'];\n        }\n        var values = columns ? columns : this.getColumns(start);\n        for (var i = 0; i < values.length; i++) {\n            tmp.push(this.getGeneratedCell(values[parseInt(i.toString(), 10)], summaryRow, i >= indentLength ? this.getCellType() :\n                i === 0 && this.parent.childGrid ? CellType.DetailFooterIntent : CellType.Indent, indents[parseInt(i.toString(), 10)], isDetailGridAlone));\n        }\n        var row = new Row({ data: data, attributes: { class: 'e-summaryrow' } });\n        row.cells = tmp;\n        row.uid = getUid('grid-row');\n        row.parentUid = parentUid;\n        row.isAggregateRow = true;\n        row.visible = tmp.some(function (cell) { return cell.isDataCell && cell.visible; });\n        return row;\n    };\n    SummaryModelGenerator.prototype.getGeneratedCell = function (column, summaryRow, cellType, indent, isDetailGridAlone) {\n        //Get the summary column by display\n        var sColumn = summaryRow.columns.filter(function (scolumn) { return scolumn.columnName === column.field; })[0];\n        var attrs = {\n            'style': { 'textAlign': column.textAlign },\n            'e-mappinguid': column.uid, index: column.index\n        };\n        if (indent) {\n            attrs.class = indent;\n        }\n        if (isNullOrUndefined(indent) && isDetailGridAlone) {\n            attrs.class = 'e-detailindentcelltop';\n        }\n        var opt = {\n            'visible': column.visible,\n            'isDataCell': !isNullOrUndefined(sColumn),\n            'isTemplate': sColumn && !isNullOrUndefined(sColumn.footerTemplate\n                || sColumn.groupFooterTemplate || sColumn.groupCaptionTemplate),\n            'column': sColumn || {},\n            'attributes': attrs,\n            'cellType': cellType\n        };\n        opt.column.headerText = column.headerText;\n        return new Cell(opt);\n    };\n    SummaryModelGenerator.prototype.buildSummaryData = function (data, args) {\n        var dummy = [];\n        var summaryRows = this.getData();\n        var single = {};\n        for (var i = 0; i < summaryRows.length; i++) {\n            single = {};\n            var column = summaryRows[parseInt(i.toString(), 10)].columns;\n            for (var j = 0; j < column.length; j++) {\n                single = this.setTemplate(column[parseInt(j.toString(), 10)], (args && args.aggregates) ? args : data, single);\n            }\n            dummy.push(single);\n        }\n        return dummy;\n    };\n    SummaryModelGenerator.prototype.getIndentByLevel = function () {\n        return this.parent.groupSettings.columns.map(function () { return 'e-indentcelltop'; });\n    };\n    SummaryModelGenerator.prototype.setTemplate = function (column, data, single) {\n        var types = column.type;\n        var helper = {};\n        var formatFn = column.getFormatter() || (function () { return function (a) { return a; }; })();\n        var group = data;\n        if (!(types instanceof Array)) {\n            types = [column.type];\n        }\n        for (var i = 0; i < types.length; i++) {\n            var key = column.field + ' - ' + types[parseInt(i.toString(), 10)].toLowerCase();\n            var disp = column.columnName;\n            var val = types[parseInt(i.toString(), 10)] !== 'Custom' && group.aggregates && key in group.aggregates ? group.aggregates[\"\" + key] :\n                calculateAggregate(types[parseInt(i.toString(), 10)], group.aggregates ? group : data, column, this.parent);\n            single[\"\" + disp] = single[\"\" + disp] || {};\n            single[\"\" + disp][\"\" + key] = val;\n            single[\"\" + disp][types[parseInt(i.toString(), 10)]] = !isNullOrUndefined(val) ? formatFn(val) : ' ';\n            if (group.field) {\n                single[\"\" + disp].field = group.field;\n                single[\"\" + disp].key = group.key;\n            }\n        }\n        helper.format = column.getFormatter();\n        column.setTemplate(helper);\n        return single;\n    };\n    SummaryModelGenerator.prototype.getCellType = function () {\n        return CellType.Summary;\n    };\n    return SummaryModelGenerator;\n}());\nexport { SummaryModelGenerator };\nvar GroupSummaryModelGenerator = /** @class */ (function (_super) {\n    __extends(GroupSummaryModelGenerator, _super);\n    function GroupSummaryModelGenerator() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    GroupSummaryModelGenerator.prototype.columnSelector = function (column) {\n        return column.groupFooterTemplate !== undefined;\n    };\n    GroupSummaryModelGenerator.prototype.getIndentByLevel = function (level) {\n        if (level === void 0) { level = this.parent.groupSettings.columns.length; }\n        if (this.parent.allowRowDragAndDrop && this.parent.groupSettings.columns.length) {\n            level -= 1;\n        }\n        return this.parent.groupSettings.columns.map(function (v, indx) { return indx <= level - 1 ? '' : 'e-indentcelltop'; });\n    };\n    GroupSummaryModelGenerator.prototype.getCellType = function () {\n        return CellType.GroupSummary;\n    };\n    return GroupSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { GroupSummaryModelGenerator };\nvar CaptionSummaryModelGenerator = /** @class */ (function (_super) {\n    __extends(CaptionSummaryModelGenerator, _super);\n    function CaptionSummaryModelGenerator() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    CaptionSummaryModelGenerator.prototype.columnSelector = function (column) {\n        return column.groupCaptionTemplate !== undefined;\n    };\n    CaptionSummaryModelGenerator.prototype.getData = function () {\n        var initVal = { columns: [] };\n        return [_super.prototype.getData.call(this).reduce(function (prev, cur) {\n                prev.columns = prev.columns.concat(cur.columns);\n                return prev;\n            }, initVal)];\n    };\n    CaptionSummaryModelGenerator.prototype.isEmpty = function () {\n        return (this.getData()[0].columns || []).length === 0;\n    };\n    CaptionSummaryModelGenerator.prototype.getCellType = function () {\n        return CellType.CaptionSummary;\n    };\n    return CaptionSummaryModelGenerator;\n}(SummaryModelGenerator));\nexport { CaptionSummaryModelGenerator };\n","//! moment.js locale configuration\n//! locale : Tamil [ta]\n//! author : Arjunkumar Krishnamoorthy : https://github.com/tk120404\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '௧',\n            2: '௨',\n            3: '௩',\n            4: '௪',\n            5: '௫',\n            6: '௬',\n            7: '௭',\n            8: '௮',\n            9: '௯',\n            0: '௦',\n        },\n        numberMap = {\n            '௧': '1',\n            '௨': '2',\n            '௩': '3',\n            '௪': '4',\n            '௫': '5',\n            '௬': '6',\n            '௭': '7',\n            '௮': '8',\n            '௯': '9',\n            '௦': '0',\n        };\n\n    var ta = moment.defineLocale('ta', {\n        months: 'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n            '_'\n        ),\n        monthsShort:\n            'ஜனவரி_பிப்ரவரி_மார்ச்_ஏப்ரல்_மே_ஜூன்_ஜூலை_ஆகஸ்ட்_செப்டெம்பர்_அக்டோபர்_நவம்பர்_டிசம்பர்'.split(\n                '_'\n            ),\n        weekdays:\n            'ஞாயிற்றுக்கிழமை_திங்கட்கிழமை_செவ்வாய்கிழமை_புதன்கிழமை_வியாழக்கிழமை_வெள்ளிக்கிழமை_சனிக்கிழமை'.split(\n                '_'\n            ),\n        weekdaysShort: 'ஞாயிறு_திங்கள்_செவ்வாய்_புதன்_வியாழன்_வெள்ளி_சனி'.split(\n            '_'\n        ),\n        weekdaysMin: 'ஞா_தி_செ_பு_வி_வெ_ச'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, HH:mm',\n            LLLL: 'dddd, D MMMM YYYY, HH:mm',\n        },\n        calendar: {\n            sameDay: '[இன்று] LT',\n            nextDay: '[நாளை] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[நேற்று] LT',\n            lastWeek: '[கடந்த வாரம்] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s இல்',\n            past: '%s முன்',\n            s: 'ஒரு சில விநாடிகள்',\n            ss: '%d விநாடிகள்',\n            m: 'ஒரு நிமிடம்',\n            mm: '%d நிமிடங்கள்',\n            h: 'ஒரு மணி நேரம்',\n            hh: '%d மணி நேரம்',\n            d: 'ஒரு நாள்',\n            dd: '%d நாட்கள்',\n            M: 'ஒரு மாதம்',\n            MM: '%d மாதங்கள்',\n            y: 'ஒரு வருடம்',\n            yy: '%d ஆண்டுகள்',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}வது/,\n        ordinal: function (number) {\n            return number + 'வது';\n        },\n        preparse: function (string) {\n            return string.replace(/[௧௨௩௪௫௬௭௮௯௦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // refer http://ta.wikipedia.org/s/1er1\n        meridiemParse: /யாமம்|வைகறை|காலை|நண்பகல்|எற்பாடு|மாலை/,\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 2) {\n                return ' யாமம்';\n            } else if (hour < 6) {\n                return ' வைகறை'; // வைகறை\n            } else if (hour < 10) {\n                return ' காலை'; // காலை\n            } else if (hour < 14) {\n                return ' நண்பகல்'; // நண்பகல்\n            } else if (hour < 18) {\n                return ' எற்பாடு'; // எற்பாடு\n            } else if (hour < 22) {\n                return ' மாலை'; // மாலை\n            } else {\n                return ' யாமம்';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'யாமம்') {\n                return hour < 2 ? hour : hour + 12;\n            } else if (meridiem === 'வைகறை' || meridiem === 'காலை') {\n                return hour;\n            } else if (meridiem === 'நண்பகல்') {\n                return hour >= 10 ? hour : hour + 12;\n            } else {\n                return hour + 12;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return ta;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kannada [kn]\n//! author : Rajeev Naik : https://github.com/rajeevnaikte\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '೧',\n            2: '೨',\n            3: '೩',\n            4: '೪',\n            5: '೫',\n            6: '೬',\n            7: '೭',\n            8: '೮',\n            9: '೯',\n            0: '೦',\n        },\n        numberMap = {\n            '೧': '1',\n            '೨': '2',\n            '೩': '3',\n            '೪': '4',\n            '೫': '5',\n            '೬': '6',\n            '೭': '7',\n            '೮': '8',\n            '೯': '9',\n            '೦': '0',\n        };\n\n    var kn = moment.defineLocale('kn', {\n        months: 'ಜನವರಿ_ಫೆಬ್ರವರಿ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂಬರ್_ಅಕ್ಟೋಬರ್_ನವೆಂಬರ್_ಡಿಸೆಂಬರ್'.split(\n            '_'\n        ),\n        monthsShort:\n            'ಜನ_ಫೆಬ್ರ_ಮಾರ್ಚ್_ಏಪ್ರಿಲ್_ಮೇ_ಜೂನ್_ಜುಲೈ_ಆಗಸ್ಟ್_ಸೆಪ್ಟೆಂ_ಅಕ್ಟೋ_ನವೆಂ_ಡಿಸೆಂ'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'ಭಾನುವಾರ_ಸೋಮವಾರ_ಮಂಗಳವಾರ_ಬುಧವಾರ_ಗುರುವಾರ_ಶುಕ್ರವಾರ_ಶನಿವಾರ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ಭಾನು_ಸೋಮ_ಮಂಗಳ_ಬುಧ_ಗುರು_ಶುಕ್ರ_ಶನಿ'.split('_'),\n        weekdaysMin: 'ಭಾ_ಸೋ_ಮಂ_ಬು_ಗು_ಶು_ಶ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[ಇಂದು] LT',\n            nextDay: '[ನಾಳೆ] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ನಿನ್ನೆ] LT',\n            lastWeek: '[ಕೊನೆಯ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ನಂತರ',\n            past: '%s ಹಿಂದೆ',\n            s: 'ಕೆಲವು ಕ್ಷಣಗಳು',\n            ss: '%d ಸೆಕೆಂಡುಗಳು',\n            m: 'ಒಂದು ನಿಮಿಷ',\n            mm: '%d ನಿಮಿಷ',\n            h: 'ಒಂದು ಗಂಟೆ',\n            hh: '%d ಗಂಟೆ',\n            d: 'ಒಂದು ದಿನ',\n            dd: '%d ದಿನ',\n            M: 'ಒಂದು ತಿಂಗಳು',\n            MM: '%d ತಿಂಗಳು',\n            y: 'ಒಂದು ವರ್ಷ',\n            yy: '%d ವರ್ಷ',\n        },\n        preparse: function (string) {\n            return string.replace(/[೧೨೩೪೫೬೭೮೯೦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /ರಾತ್ರಿ|ಬೆಳಿಗ್ಗೆ|ಮಧ್ಯಾಹ್ನ|ಸಂಜೆ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ರಾತ್ರಿ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ಬೆಳಿಗ್ಗೆ') {\n                return hour;\n            } else if (meridiem === 'ಮಧ್ಯಾಹ್ನ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ಸಂಜೆ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ರಾತ್ರಿ';\n            } else if (hour < 10) {\n                return 'ಬೆಳಿಗ್ಗೆ';\n            } else if (hour < 17) {\n                return 'ಮಧ್ಯಾಹ್ನ';\n            } else if (hour < 20) {\n                return 'ಸಂಜೆ';\n            } else {\n                return 'ರಾತ್ರಿ';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ನೇ)/,\n        ordinal: function (number) {\n            return number + 'ನೇ';\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return kn;\n\n})));\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('CRow',[_c('CCol',{attrs:{\"col\":\"\"}},[_c('div',{staticClass:\"col-lg-12 control-section\",staticStyle:{\"padding\":\"10px\",\"position\":\"relative\"}},[_c('div',{staticStyle:{\"width\":\"100%\"}},[_c('ejs-grid',{ref:\"grid\",attrs:{\"id\":\"statusAlertGridId\",\"dataSource\":_vm.data,\"allowFiltering\":true,\"commandClick\":_vm.commandClick,\"allowPaging\":true,\"allowTextWrap\":true,\"textWrapSettings\":_vm.wrapSettings,\"allowResizing\":true,\"query\":_vm.gridQuery,\"toolbarClick\":_vm.toolbarClick,\"allowExcelExport\":true,\"excelExportComplete\":_vm.excelExportComplete,\"allowReordering\":true,\"allowSorting\":true,\"editSettings\":_vm.editSettings,\"toolbar\":_vm.toolbar,\"pageSettings\":_vm.pageSettings,\"actionComplete\":_vm.actionComplete,\"actionBegin\":_vm.actionBegin,\"actionFailure\":_vm.actionFailure,\"filterSettings\":_vm.filterOptions,\"queryCellInfo\":_vm.customiseCell,\"width\":\"100%\",\"height\":\"100%\"}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"triggerAlertId\",\"headerText\":\"Id\",\"width\":\"120\",\"isPrimaryKey\":true,\"visible\":false}}),_c('e-column',{attrs:{\"field\":\"triggerDate\",\"headerText\":\"Alert Date\",\"textAlign\":\"Right\",\"format\":_vm.dateFormatOptions,\"type\":\"date\",\"width\":\"150\"}}),_c('e-column',{attrs:{\"field\":\"alertType\",\"headerText\":\"Alert\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"clientName\",\"headerText\":\"Client\",\"allowEditing\":false,\"width\":\"210\"}}),_c('e-column',{attrs:{\"field\":\"stateName\",\"headerText\":\"Country\",\"allowEditing\":false,\"width\":\"150\"}}),_c('e-column',{attrs:{\"field\":\"companyName\",\"headerText\":\"Company\",\"allowEditing\":false,\"width\":\"210\"}}),_c('e-column',{attrs:{\"field\":\"contractName\",\"headerText\":\"Contract\",\"allowEditing\":false,\"width\":\"300\"}}),_c('e-column',{attrs:{\"field\":\"productName\",\"headerText\":\"Product\",\"allowEditing\":false,\"width\":\"150\"}}),_c('e-column',{attrs:{\"field\":\"pricingAreaName\",\"headerText\":\"Price Area\",\"textAlign\":\"Left\",\"width\":\"150\",\"type\":\"string\"}}),_c('e-column',{attrs:{\"field\":\"tradeablePeriodName\",\"headerText\":\"Period\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"triggerTypeName\",\"headerText\":\"Trigger Type\",\"visible\":true,\"width\":\"150\",\"textAlign\":\"Right\"}}),_c('e-column',{attrs:{\"field\":\"triggerPrice\",\"headerText\":\"Price\",\"textAlign\":\"Right\",\"validationRules\":_vm.percentageRules,\"type\":\"number\",\"format\":\"n3\",\"editType\":\"numericedit\",\"edit\":_vm.numericParams,\"width\":\"150\"}}),_c('e-column',{attrs:{\"headerText\":\"Watched Window\",\"columns\":_vm.dateColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"alertStatus\",\"headerText\":\"Status\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"headerText\":\"Actions\",\"width\":\"230\",\"textAlign\":\"left\",\"commands\":_vm.commands}}),_c('e-column',{attrs:{\"field\":\"utilityTypeName\",\"headerText\":\"Commodity\",\"allowEditing\":false,\"visible\":false,\"width\":\"90\"}}),_c('e-column',{attrs:{\"field\":\"tradeablePeriodId\",\"headerText\":\"Watched Period\",\"textAlign\":\"Right\",\"visible\":false,\"validationRules\":_vm.requiredRules,\"editType\":\"dropdownedit\",\"edit\":_vm.tradebalePeriodParams,\"foreignKeyField\":\"id\",\"foreignKeyValue\":\"name\",\"dataSource\":_vm.tradebalePeriods,\"width\":\"50\"}}),_c('e-column',{attrs:{\"field\":\"unit\",\"headerText\":\"Unit\",\"visible\":false,\"width\":\"60\"}}),_c('e-column',{attrs:{\"field\":\"tolerance\",\"headerText\":\"Tolerance\",\"visible\":false,\"textAlign\":\"Right\",\"validationRules\":_vm.percentageRules,\"type\":\"number\",\"format\":\"n1\",\"editType\":\"numericedit\",\"edit\":_vm.percentageParams,\"width\":\"70\"}}),_c('e-column',{attrs:{\"field\":\"referenceTypeId\",\"headerText\":\"Reference Type\",\"textAlign\":\"Right\",\"visible\":false,\"validationRules\":_vm.requiredRules,\"editType\":\"dropdownedit\",\"edit\":_vm.referenceTypeParams,\"foreignKeyField\":\"id\",\"foreignKeyValue\":\"name\",\"dataSource\":_vm.referenceTypes,\"width\":\"110\"}}),_c('e-column',{attrs:{\"field\":\"referenceTypeName\",\"headerText\":\"Reference Type\",\"visible\":false,\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"applyUntilEnd\",\"headerText\":\"Apply until Default Deadline\",\"displayAsCheckBox\":\"true\",\"visible\":false,\"edit\":_vm.checkboxParams,\"editType\":\"booleanedit\",\"type\":\"boolean\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"notifyOnSystem\",\"headerText\":\"Notify On System\",\"defaultValue\":\"true\",\"displayAsCheckBox\":\"true\",\"visible\":false,\"allowEditing\":false,\"editType\":\"booleanedit\",\"type\":\"boolean\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"notifyEmailAddresses\",\"headerText\":\"Notify Email Addresses\",\"multiline\":\"true\",\"edit\":_vm.multilineParams,\"visible\":false,\"width\":\"120\"}})],1)],1)],1),_c('ejs-dialog',{ref:\"alertDialog\",attrs:{\"buttons\":_vm.alertDlgButtons,\"cssClass\":\"greyBackground\",\"id\":\"statusAlertDialog\",\"visible\":false,\"animationSettings\":_vm.animationSettings,\"showCloseIcon\":_vm.showCloseIcon,\"open\":_vm.dialogOpen,\"close\":_vm.dialogClose,\"width\":_vm.alertWidth,\"header\":_vm.header,\"allowDragging\":_vm.draggable,\"position\":_vm.position}},[_c('h5',{staticClass:\"ml-5\",attrs:{\"id\":\"graphHeader\"}},[_vm._v(\" \"+_vm._s(_vm.alertType)+\" Trigger\")]),_c('br'),_c('label',{staticClass:\"mr-5 float-right\"},[_vm._v(\"Alert issued on : \"+_vm._s(_vm.triggerDate))]),_c('br'),_c('br'),_c('label',{staticClass:\"ml-5\"},[_vm._v(_vm._s(_vm.alertText))]),_c('br'),_c('br'),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"column ml-3\"},[_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Client\")]),_vm._v(\": \"+_vm._s(_vm.client))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Country\")]),_vm._v(\": \"+_vm._s(_vm.country))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Price Area\")]),_vm._v(\": \"+_vm._s(_vm.pricingAreaName))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Utility\")]),_vm._v(\": \"+_vm._s(_vm.utility))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Product\")]),_vm._v(\": \"+_vm._s(_vm.product))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Company\")]),_vm._v(\": \"+_vm._s(_vm.company))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Contract Name\")]),_vm._v(\": \"+_vm._s(_vm.contractName))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Contract ID\")]),_vm._v(\": \"+_vm._s(_vm.contractId))]),_c('br'),_c('br')]),_c('div',{staticClass:\"column ml-5\"},[_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Watch Period\")]),_vm._v(\": \"+_vm._s(_vm.watchPeriod))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Trigger Type\")]),_vm._v(\": \"+_vm._s(_vm.type))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Trigger Price\")]),_vm._v(\": \"+_vm._s(_vm.triggerPrice)+\" \"+_vm._s(_vm.contractUnits))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Market Price\")]),_vm._v(\": \"+_vm._s(_vm.marketPrice)+\" \"+_vm._s(_vm.contractUnits))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Delta to Trigger\")]),_vm._v(\": \"+_vm._s(_vm.delta)+\" \"+_vm._s(_vm.contractUnits))]),_c('br'),_c('br')])]),_c('ejs-chart',{attrs:{\"id\":\"alertChartContainer\",\"title\":_vm.title,\"zoomSettings\":_vm.zoom,\"primaryXAxis\":_vm.primaryXAxis,\"primaryYAxis\":_vm.primaryYAxis,\"tooltip\":_vm.tooltip,\"textRender\":_vm.textRender,\"titleStyle\":_vm.titleStyle,\"width\":\"700px\",\"height\":\"350px\"}},[_c('e-series-collection',[_c('e-series',{attrs:{\"xName\":\"x\",\"yName\":\"y\",\"name\":\"Market Price\",\"type\":\"MultiColoredLine\",\"pointColorMapping\":\"color\",\"marker\":_vm.marker}})],1)],1)],1)],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <CRow>\r\n        <CCol col>\r\n            <div class=\"col-lg-12 control-section\" style=\"padding:10px;position:relative;\">\r\n                <div style=\"width:100%;\">\r\n                    <ejs-grid ref='grid' id=\"statusAlertGridId\" :dataSource=\"data\" :allowFiltering='true' :commandClick='commandClick' :allowPaging=\"true\"\r\n                              :allowTextWrap='true' :textWrapSettings='wrapSettings' :allowResizing='true' :query='gridQuery'\r\n                              :toolbarClick='toolbarClick' :allowExcelExport='true' :excelExportComplete='excelExportComplete'\r\n                              :allowReordering='true' :allowSorting='true' :editSettings='editSettings' :toolbar='toolbar' \r\n                              :pageSettings='pageSettings' :actionComplete='actionComplete' :actionBegin=\"actionBegin\"\r\n                              :actionFailure=\"actionFailure\" :filterSettings='filterOptions' :queryCellInfo='customiseCell' width=\"100%\" height=\"100%\">\r\n                        <e-columns>\r\n                            <e-column field='triggerAlertId' headerText='Id' width=120 :isPrimaryKey='true' :visible='false'></e-column>\r\n                            <e-column field='triggerDate' headerText='Alert Date' textAlign='Right' :format='dateFormatOptions' type='date' width=150></e-column>\r\n                            <e-column field='alertType' headerText='Alert' width=120></e-column>\r\n                            <e-column field='clientName' headerText='Client' :allowEditing=\"false\" width=210></e-column>\r\n                            <e-column field='stateName' headerText='Country' :allowEditing=\"false\" width=150></e-column>\r\n                            <e-column field='companyName' headerText='Company' :allowEditing=\"false\" width=210></e-column>\r\n                            <e-column field='contractName' headerText='Contract' :allowEditing=\"false\" width=300></e-column>\r\n                            <e-column field='productName' headerText='Product' :allowEditing=\"false\" width=150></e-column>\r\n                            <e-column field='pricingAreaName' headerText='Price Area' textAlign='Left' width=150 type=\"string\"></e-column>\r\n                            <e-column field='tradeablePeriodName' headerText='Period' width=120></e-column>\r\n                            <!--<e-column field='triggerTypeId' headerText='Trigger Type' textAlign='Right' :validationRules=\"requiredRules\" editType='dropdownedit' :edit='triggerTypeParams' foreignKeyField=\"id\" foreignKeyValue='name' :dataSource='triggerTypes' width=150></e-column>-->\r\n                            <e-column field='triggerTypeName' headerText='Trigger Type' :visible='true' width=150 textAlign='Right'></e-column>\r\n                            <e-column field='triggerPrice' headerText='Price' textAlign='Right' :validationRules=\"percentageRules\" type=\"number\" format=\"n3\" editType='numericedit' :edit='numericParams' width=150></e-column>\r\n                            <e-column headerText='Watched Window' :columns='dateColumns' textAlign=\"Center\"></e-column>\r\n                            <e-column field='alertStatus' headerText='Status' width=120></e-column>\r\n                            <e-column headerText='Actions' width=230 textAlign='left' :commands='commands'></e-column>\r\n                            <e-column field='utilityTypeName' headerText='Commodity' :allowEditing=\"false\" :visible='false' width=90></e-column>\r\n                            <e-column field='tradeablePeriodId' headerText='Watched Period' textAlign='Right' :visible='false' :validationRules=\"requiredRules\" editType='dropdownedit' :edit='tradebalePeriodParams' foreignKeyField=\"id\" foreignKeyValue='name' :dataSource='tradebalePeriods' width=50></e-column>\r\n                            <e-column field='unit' headerText='Unit' :visible='false' width=60></e-column>\r\n                            <e-column field='tolerance' headerText='Tolerance' :visible='false' textAlign='Right' :validationRules=\"percentageRules\" type=\"number\" format=\"n1\" editType='numericedit' :edit='percentageParams' width=70></e-column>\r\n                            <e-column field='referenceTypeId' headerText='Reference Type' textAlign='Right' :visible='false' :validationRules=\"requiredRules\" editType='dropdownedit' :edit='referenceTypeParams' foreignKeyField=\"id\" foreignKeyValue='name' :dataSource='referenceTypes' width=110></e-column>\r\n                            <e-column field='referenceTypeName' headerText='Reference Type' :visible='false' width=120></e-column>\r\n                            <e-column field='applyUntilEnd' headerText='Apply until Default Deadline' displayAsCheckBox='true' :visible='false' :edit='checkboxParams' editType='booleanedit' type='boolean' width=120></e-column>\r\n                            <e-column field='notifyOnSystem' headerText='Notify On System' defaultValue='true' displayAsCheckBox='true' :visible='false' :allowEditing=\"false\" editType='booleanedit' type='boolean' width=120></e-column>\r\n                            <e-column field='notifyEmailAddresses' headerText='Notify Email Addresses' multiline=\"true\" :edit=\"multilineParams\" :visible='false' width=120></e-column>\r\n                        </e-columns>\r\n                    </ejs-grid>\r\n                </div>\r\n                    <ejs-dialog :buttons='alertDlgButtons' cssClass=\"greyBackground\" ref=\"alertDialog\" id=\"statusAlertDialog\" v-bind:visible=\"false\" :animationSettings='animationSettings' :showCloseIcon='showCloseIcon' :open=\"dialogOpen\" :close=\"dialogClose\" :width='alertWidth' :header=\"header\" :allowDragging=\"draggable\" :position=\"position\">\r\n                        <h5 class=\"ml-5\" id=\"graphHeader\">  {{alertType}} Trigger</h5><br />\r\n                        <label class=\"mr-5 float-right\">Alert issued on : {{triggerDate}}</label><br />\r\n                        <br />\r\n                        <label class=\"ml-5\">{{alertText}}</label><br />\r\n                        <br />\r\n                        <div class=\"row\">\r\n                            <div class=\"column ml-3\">\r\n                                <label class=\"ml-5\"><b>Client</b>: {{client}}</label><br />\r\n                                <label class=\"ml-5\"><b>Country</b>: {{country}}</label><br />\r\n                                <label class=\"ml-5\"><b>Price Area</b>: {{pricingAreaName}}</label><br />\r\n                                <label class=\"ml-5\"><b>Utility</b>: {{utility}}</label><br />\r\n                                <label class=\"ml-5\"><b>Product</b>: {{product}}</label><br />\r\n                                <label class=\"ml-5\"><b>Company</b>: {{company}}</label><br />\r\n                                <label class=\"ml-5\"><b>Contract Name</b>: {{contractName}}</label><br />\r\n                                <label class=\"ml-5\"><b>Contract ID</b>: {{contractId}}</label><br />\r\n                                <br />\r\n\r\n                            </div>\r\n                            <div class=\"column ml-5\">\r\n                                <label class=\"ml-5\"><b>Watch Period</b>: {{watchPeriod}}</label><br />\r\n                                <label class=\"ml-5\"><b>Trigger Type</b>: {{type}}</label><br />\r\n                                <label class=\"ml-5\"><b>Trigger Price</b>: {{triggerPrice}} {{contractUnits}}</label><br />\r\n                                <label class=\"ml-5\"><b>Market Price</b>: {{marketPrice}} {{contractUnits}}</label><br />\r\n                                <label class=\"ml-5\"><b>Delta to Trigger</b>: {{delta}} {{contractUnits}}</label><br />\r\n                                <br />\r\n                            </div>\r\n                        </div>\r\n                        <!--<h1 class=\"expiredTriggerHeader\">  </h1>-->\r\n                        <ejs-chart id=\"alertChartContainer\" :title='title' :zoomSettings='zoom' :primaryXAxis='primaryXAxis' :primaryYAxis='primaryYAxis' :tooltip='tooltip' :textRender='textRender' :titleStyle=\"titleStyle\" width=\"700px\" height=\"350px\">\r\n                            <e-series-collection>\r\n                                <e-series xName='x' yName='y' name='Market Price' type='MultiColoredLine' pointColorMapping='color' :marker='marker'> </e-series>\r\n                            </e-series-collection>\r\n                        </ejs-chart>\r\n                    </ejs-dialog>\r\n                </div>\r\n</CCol>\r\n    </CRow>\r\n</template>\r\n\r\n<script>\r\n    import Vue from \"vue\";\r\n    import { GridPlugin, Edit, Page, Toolbar, Sort, Filter, Reorder, Resize, ExcelExport, ForeignKey, CommandColumn } from \"@syncfusion/ej2-vue-grids\";\r\n    import { DropDownList } from \"@syncfusion/ej2-dropdowns\";\r\n    import { UploaderPlugin } from '@syncfusion/ej2-vue-inputs';\r\n    import { DialogUtility } from '@syncfusion/ej2-popups';\r\n    import SyncHelper from '../../common/syncfusion';\r\n    import { Query } from '@syncfusion/ej2-data';\r\n    import gridOptions from '../../common/gridOptions'\r\n    import dates from '../../common/dates'\r\n    import urls from '../../common/urls';\r\n    import apis from '../../common/network'\r\n    import { DatePickerPlugin, DatePicker } from '@syncfusion/ej2-vue-calendars';\r\n    import { CheckBoxPlugin, CheckBox } from \"@syncfusion/ej2-vue-buttons\";\r\n    import { ChartPlugin, ColumnSeries, StripLine, LineSeries, DataLabel, Category, DateTime, Tooltip, ChartAnnotation, Zoom, MultiColoredLineSeries } from \"@syncfusion/ej2-vue-charts\";\r\n    import { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\r\n    import { DialogPlugin } from '@syncfusion/ej2-vue-popups';\r\n    import { ButtonPlugin } from '@syncfusion/ej2-vue-buttons';\r\n    import { enableRipple } from '@syncfusion/ej2-base';\r\n    import { TextBox } from \"@syncfusion/ej2-inputs\";\r\n    import store from '../../store';\r\n    import moment from 'moment';\r\n\r\n    Vue.use(ChartPlugin);\r\n    Vue.use(UploaderPlugin);\r\n    Vue.use(DialogUtility);\r\n    Vue.use(GridPlugin);\r\n\r\n    Vue.use(ButtonPlugin);\r\n    Vue.use(DialogPlugin);\r\n    enableRipple(true);\r\n\r\n   \r\n    let tradebalePeriodObj, tradebalePeriodElem, triggerTypeObj, triggerTypeElem, referenceTypeObj, referenceTypeElem, datePickerObj, elem, startDatePickerObj, startDateElem, checkboxElem, checkBoxObj;\r\n    let  multilineElem, multilineObj;\r\n    export default {\r\n        props: ['reportContractId', 'clientId', 'reportTradingGroupId'],\r\n        mounted() {\r\n            createSpinner({\r\n                target: document.getElementById('mainSpinner'),\r\n                width: '50',\r\n                type: 'Material',\r\n                label: 'Loading data...',\r\n                cssClass: 'loading'\r\n            });\r\n        },\r\n        data() {\r\n            return {\r\n                // needed because of form being loaded from tab,in such cases this isnt available and store is loaded from import\r\n                store: store,\r\n                // needed for vieweing dialog,initally not there then appears\r\n                showCloseIcon: false,\r\n                statusAlertcontractId: parseInt(this.reportContractId),// when form is loaded from contracts reporting ui, when not it will be undefined\r\n                alertWidth: '750px',\r\n                position: { X: 'center', Y: 'center' },\r\n                animationSettings: { effect: 'Zoom' },\r\n                alertDlgButtons: [{ click: this.alertDlgBtnClick, buttonModel: { content: 'Dismiss', isPrimary: true } }],\r\n                ShowBtn: true,\r\n                draggable: true,\r\n                header: \" \",\r\n                zoom:\r\n                {\r\n                    enableMouseWheelZooming: false,\r\n                    enablePinchZooming: false,\r\n                    enableSelectionZooming: true\r\n                },\r\n                gridQuery: new Query().addParams(\"triggerAlert\", \"status\").addParams(\"contractId\", this.reportContractId).addParams(\"clientId\", this.clientId).addParams(\"tradingGroupId\", this.reportTradingGroupId),\r\n                // this is done due to header column\r\n                dateColumns: [\r\n                    {\r\n                        field: 'triggerStartDate',\r\n                        headerText: 'Start Date',\r\n                        width: 150,\r\n                        textAlign: 'Right',\r\n                        minWidth: 10,\r\n                        format: { type: 'date', format: 'dd/MM/yyyy' },\r\n                        type: 'date',\r\n                        validationRules: { required: true },\r\n                        edit: {\r\n                            create: function () {\r\n                                startDateElem = document.createElement('input');\r\n                                return startDateElem;\r\n                            },\r\n                            read: () => {\r\n                                return startDatePickerObj.value;\r\n                            },\r\n                            destroy: () => {\r\n                                startDatePickerObj.destroy();\r\n                            },\r\n                            // start date cant be before today,as trigger can start at least from today,cant set it up to start from yesterday as the job wont do data retroactivly\r\n                            // max will be later set in the code to the last day of the period prior to the one chosen,as trading can be done until a period starts,and having trigger when you cant trade doesnt make sense\r\n                            write: (args) => {\r\n                                startDatePickerObj = new DatePicker({\r\n                                    value: new Date(args.rowData[args.column.field]),\r\n                                    floatLabelType: 'Always',\r\n                                    format: 'dd/MM/yyyy',\r\n                                    //sets the min.\r\n                                    min: dates.addDays(new Date(), 1),\r\n                                    placeholder: 'Start Date',\r\n                                    firstDayOfWeek: 1,\r\n                                });\r\n                                startDatePickerObj.appendTo(startDateElem);\r\n                            }\r\n                        }\r\n                    },\r\n                    {\r\n                        field: 'triggerEndDate',\r\n                        headerText: 'End Date',\r\n                        width: 150,\r\n                        textAlign: 'Right',\r\n                        minWidth: 10,\r\n                        format: { type: 'date', format: 'dd/MM/yyyy' },\r\n                        type: 'date',\r\n                        validationRules: { required: true, minlength: [(args) => { return this.dateValidation(args) }, 'End Date must be greater than Start Date.'] },\r\n                        edit: {\r\n                            create: function () {\r\n                                elem = document.createElement('input');\r\n                                return elem;\r\n                            },\r\n                            read: () => {\r\n                                return datePickerObj.value;\r\n                            },\r\n                            destroy: () => {\r\n                                datePickerObj.destroy();\r\n                            },\r\n                            // end date cant be before tomorow,as trigger can start at least from today,cant set it up to start from yesterday as the job wont do data retroactivly,and it must last for at least a day\r\n                            // max will be later set in the code to the last day of the period prior to the one chosen,as trading can be done until a period starts,and having trigger when you cant trade doesnt make sense\r\n                            write: (args) => {\r\n                                datePickerObj = new DatePicker({\r\n                                    value: new Date(args.rowData[args.column.field]),\r\n                                    floatLabelType: 'Always',\r\n                                    format: 'dd/MM/yyyy',\r\n                                    //sets the min after the startdate.\r\n                                    min: dates.addDays(new Date(), 1),\r\n                                    placeholder: 'End Date',\r\n                                    firstDayOfWeek: 1,\r\n                                });\r\n                                datePickerObj.appendTo(elem);\r\n                            }\r\n                        }\r\n                    }\r\n                ],\r\n                referenceTypes: SyncHelper.getDataManager('Utils/referenceTypes'),\r\n                triggerTypes: SyncHelper.getDataManager('Utils/triggerTypes'),\r\n                contractUnits: \"\",\r\n                units: \"\",\r\n                alertType: \"\",\r\n                triggerDate: \"\",\r\n                client: \"\",\r\n                country: \"\",\r\n                utility: \"\",\r\n                company: \"\",\r\n                contractName: \"\",\r\n                contractId: \"\",\r\n                watchPeriod: \"\",\r\n                triggerPrice: \"\",\r\n                marketPrice: \"\",\r\n                delta: \"\",\r\n                alertText: \"\",\r\n                type: \"\",\r\n                product: \"\",\r\n                pricingAreaName: \"\",\r\n                wrapSettings: { wrapMode: 'Header' },\r\n                commands: [{ buttonOption: { cssClass: 'e-primary view', content: 'View' } },\r\n                    { buttonOption: { cssClass: 'secondary mark', content: 'Mark as Seen' } }],\r\n                tradebalePeriods: SyncHelper.getDataManager('Utils/contractTradeablePeriods'),\r\n                dateFormatOptions: { type: 'date', format: 'dd/MM/yyyy' },\r\n                data: SyncHelper.getDataManager(\"TriggerAlert\"),\r\n                tradebalePeriodParams: {\r\n                    create: () => {\r\n                        tradebalePeriodElem = document.createElement('input');\r\n                        return tradebalePeriodElem;\r\n                    },\r\n                    read: () => {\r\n                        return tradebalePeriodObj.value;\r\n                    },\r\n                    destroy: () => {\r\n                        tradebalePeriodObj.destroy();\r\n                    },\r\n                    write: (args) => {\r\n                        tradebalePeriodObj = new DropDownList({\r\n                            query: new Query().addParams(\"contractId\", args.rowData.contractId),\r\n                            dataSource: this.tradebalePeriods,\r\n                            fields: { text: args.column.foreignKeyValue, value: args.column.foreignKeyField },\r\n                            value: ((args.foreignKeyData && args.foreignKeyData[0]) ? args.foreignKeyData[0][args.column.foreignKeyField] : null),\r\n                            placeholder: 'Tradeable Period',\r\n                            floatLabelType: 'Always',\r\n                            allowFiltering: true,\r\n                            showClearButton: true,\r\n                            change: (args) => {\r\n                                if (args.value != null) {\r\n                                    apis.protectedApi(`${urls.apiBaseUrl}ContractTrigger/PeriodDeadline/${args.value}`).then(it => {\r\n\r\n                                        if (checkBoxObj.checked) {\r\n\r\n                                            datePickerObj.value = it.data.lastDay;\r\n                                        }\r\n                                        startDatePickerObj.max = it.data.lastDay;\r\n                                        datePickerObj.max = it.data.lastDay;\r\n                                    }).catch(\r\n                                        response => {\r\n                                            var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                                            gridOptions.errorAlert(\"Error: \" + message);\r\n                                        }\r\n                                    );\r\n                                }\r\n                            }\r\n                        });\r\n                        tradebalePeriodObj.appendTo(tradebalePeriodElem);\r\n                    }\r\n                },\r\n                referenceTypeParams: {\r\n                    create: () => {\r\n                        referenceTypeElem = document.createElement('input');\r\n                        return referenceTypeElem;\r\n                    },\r\n                    read: () => {\r\n                        return referenceTypeObj.value;\r\n                    },\r\n                    destroy: () => {\r\n                        referenceTypeObj.destroy();\r\n                    },\r\n                    write: (args) => {\r\n                        referenceTypeObj = new DropDownList({\r\n                            dataSource: this.referenceTypes,\r\n                            fields: { text: args.column.foreignKeyValue, value: args.column.foreignKeyField },\r\n                            value: ((args.foreignKeyData && args.foreignKeyData[0]) ? args.foreignKeyData[0][args.column.foreignKeyField] : null),\r\n                            placeholder: 'Reference Type',\r\n                            floatLabelType: 'Always',\r\n                            allowFiltering: true,\r\n                            showClearButton: true,\r\n                        });\r\n                        referenceTypeObj.appendTo(referenceTypeElem);\r\n                    }\r\n                },\r\n                triggerTypeParams: {\r\n                    create: () => {\r\n                        triggerTypeElem = document.createElement('input');\r\n                        return triggerTypeElem;\r\n                    },\r\n                    read: () => {\r\n                        return triggerTypeObj.value;\r\n                    },\r\n                    destroy: () => {\r\n                        triggerTypeObj.destroy();\r\n                    },\r\n                    write: (args) => {\r\n                        triggerTypeObj = new DropDownList({\r\n                            cssClass: ((args.foreignKeyData && args.foreignKeyData[0]) ? args.foreignKeyData[0][args.column.foreignKeyValue] == 'Lower' ? 'greenBox' : 'redBox' : null),\r\n                            dataSource: this.triggerTypes,\r\n                            fields: { text: args.column.foreignKeyValue, value: args.column.foreignKeyField },\r\n                            value: ((args.foreignKeyData && args.foreignKeyData[0]) ? args.foreignKeyData[0][args.column.foreignKeyField] : null),\r\n                            placeholder: 'Trigger Type',\r\n                            floatLabelType: 'Always',\r\n                            allowFiltering: true,\r\n                            showClearButton: true,\r\n                            change: (args) => {\r\n                                if (args.itemData.name == 'Lower') {\r\n                                    args.element.parentElement.classList.remove('redBox');\r\n                                    args.element.parentElement.classList.add('greenBox');\r\n                                } else {\r\n                                    args.element.parentElement.classList.remove('greenBox');\r\n                                    args.element.parentElement.classList.add('redBox');\r\n                                }\r\n                            }\r\n                        });\r\n                        triggerTypeObj.appendTo(triggerTypeElem);\r\n\r\n                    }\r\n                },\r\n                checkboxParams: {\r\n                    create: function () {\r\n                        checkboxElem = document.createElement('input');\r\n                        return checkboxElem;\r\n                    },\r\n                    read: () => {\r\n                        return checkBoxObj.checked;\r\n                    },\r\n                    destroy: () => {\r\n                        checkBoxObj.destroy();\r\n                    },\r\n                    write: (args) => {\r\n                        checkBoxObj = new CheckBox({\r\n                            cssClass: 'e-primary',\r\n                            checked: args.rowData[args.column.field],\r\n                            disabled: false,\r\n                            //value: args.rowData[args.column.field],\r\n                            label: \"Apply until End Date\",\r\n                            change: (args) => {\r\n                                if (args.checked && tradebalePeriodObj.value != undefined) {\r\n                                    apis.protectedApi(`${urls.apiBaseUrl}ContractTrigger/PeriodDeadline/${tradebalePeriodObj.value}`).then(it => {\r\n                                        datePickerObj.value = it.data.lastDay;\r\n                                    }\r\n                                    ).catch(\r\n                                        response => {\r\n                                            var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                                            gridOptions.errorAlert(\"Error: \" + message);\r\n                                        }\r\n                                    );\r\n                                }\r\n                                if (args.checked == true) {\r\n                                    datePickerObj.enabled = false;\r\n                                } else {\r\n                                    datePickerObj.enabled = true;\r\n                                }\r\n                            }\r\n                        });\r\n                        checkBoxObj.appendTo(checkboxElem);\r\n                    }\r\n                },\r\n                multilineParams: {\r\n                    create: function () {\r\n                        multilineElem = document.createElement(\"textarea\");\r\n                        return multilineElem;\r\n                    },\r\n                    read: () => {\r\n                        return multilineObj.value;\r\n                    },\r\n                    destroy: () => {\r\n                        multilineObj.destroy();\r\n                    },\r\n                    write: args => {\r\n                        multilineObj = new TextBox({\r\n                            value: args.rowData[\"notifyEmailAddresses\"],\r\n                            floatLabelType: \"Always\",\r\n                            placeholder: 'Notify Email Addresses',\r\n                            multiline: true,\r\n\r\n                        });\r\n                        multilineObj.appendTo(multilineElem);\r\n                    }\r\n                },\r\n                //pageSettings: gridOptions.pageSettings,\r\n                pageSettings: { pageSizes: [10, 20, 50, 100], pageSize: 10, pageCount: 4 },\r\n                editSettings: {\r\n                    showConfirmDialog: true,\r\n                    showDeleteConfirmDialog: true,\r\n                    allowEditing: false,\r\n                    allowAdding: false,\r\n                    allowDeleting: store.state.permissions[\"Permissions.Triggers.Delete\"],\r\n                    mode: 'Dialog'\r\n                },\r\n                numericParams: {\r\n                    params: {\r\n                        validateDecimalOnType: true,\r\n                        decimals: 4,\r\n                        format: \"n4\"\r\n                    }\r\n                },\r\n                percentageParams: {\r\n                    params: {\r\n                        validateDecimalOnType: true,\r\n                        decimals: 1,\r\n                        format: \"n1\"\r\n                    }\r\n                },\r\n                toolbar: ['Delete', 'ExcelExport'],\r\n                requiredRules: { required: true },\r\n                percentageRules: { required: true, number: true },\r\n                nameRules: { required: true, maxLength: 50 },\r\n                editparams: { params: { popupHeight: '300px' } },\r\n                filterOptions: gridOptions.filterSettings,\r\n\r\n                seriesData: this.marketPricesPerDay,\r\n                primaryXAxis: {\r\n                    valueType: 'DateTime', intervalType: 'Days',\r\n                    title: 'Date',\r\n                    titleStyle: {\r\n                        size: '16px', color: '#4d4d4d',\r\n                        fontFamily: 'Arial Narrow', fontWeight: 'bold'\r\n                    }\r\n                },\r\n                primaryYAxis:\r\n                {\r\n                    title: 'Price',\r\n                    titleStyle: {\r\n                        size: '16px', color: '#4d4d4d',\r\n                        fontFamily: 'Arial Narrow', fontWeight: 'bold'\r\n                    },\r\n                    labelFormat: 'n3'\r\n                },\r\n                tooltip: { enable: true },\r\n                titleStyle: {\r\n                    //fontFamily: \"Arial\",\r\n                    //fontStyle: 'italic',\r\n                    //fontWeight: 'regular',\r\n                    //color: \"#E27F2D\",\r\n                    //size: '23px'\r\n                },\r\n                title: this.title,\r\n                marker: { dataLabel: { visible: true } },\r\n\r\n            };\r\n        },\r\n        methods: {\r\n            alertDlgBtnClick: function () {\r\n                this.$refs.alertDialog.hide();\r\n            },\r\n            dialogClose: function () {\r\n                this.ShowBtn = true;\r\n            },\r\n            dialogOpen: function () {\r\n                this.ShowBtn = false;\r\n            },\r\n            dateValidation: function (args) {\r\n                return startDatePickerObj.value <= datePickerObj.value;\r\n            },\r\n            textRender: function (args) {\r\n                //if (this.type != \"Lower\" && args.point.y >= this.lowerPrice) {\r\n                //    args.text = args.text + ' Trigger Hit';\r\n                //    args.color = 'yellow';\r\n                //}\r\n                //else if (this.type == \"Lower\" && args.point.y <= this.higherPrice) {\r\n                //    args.text = args.text + ' Trigger Hit';\r\n                //    args.color = 'yellow';\r\n                //}\r\n                //else { args.text = \"\"; }\r\n                args.text = \"\";\r\n            },\r\n            commandClick: function (args) {\r\n                var triggerAlertId = args.rowData.triggerAlertId;\r\n                if (args.target.classList.contains(\"view\")) {\r\n                    this.loadGraph(args.rowData);\r\n                }\r\n                else if (args.target.classList.contains(\"mark\")) {\r\n                    this.changeAlertStatus(triggerAlertId, this.$refs.grid);\r\n                }\r\n            },\r\n            changeAlertStatus: function (args, grid) {\r\n                apis.protectedApi.put(`${urls.apiBaseUrl}TriggerAlert/UpdateStatus/`, { triggerAlertId: args }).then(it => {\r\n                    grid.refresh();\r\n                }).catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    }\r\n                );\r\n            },\r\n            loadGraph: function (args) {\r\n                apis.protectedApi(`${urls.apiBaseUrl}ContractTrigger/TriggerGraphData/${args.triggerId}`).then(it => {\r\n                    this.higherPrice = it.data.higherPrice;\r\n                    this.lowerPrice = it.data.lowerPrice;\r\n                    this.marketPricesPerDay = it.data.marketPricesPerDay;\r\n                    this.title = it.data.title;\r\n                    this.type = it.data.type;\r\n                    args.triggerEndDate.setDate(args.triggerEndDate.getDate() + 1);\r\n                    this.alertText = args.alertType == \"Expired\" ? \"Your Trigger has expired on the \" + moment(String(args.triggerEndDate)).format('DD/MM/YYYY') +\". Reset your Watched Window End Date.\":\r\n                        \"Your Trigger has gone live on the \" + moment(String(args.triggerStartDate)).format('DD/MM/YYYY'); \r\n\r\n                    var chart = document.getElementById('alertChartContainer').ej2_instances[0];\r\n                    chart.primaryYAxis =\r\n                    {\r\n                        title: 'Price' + ' ' + it.data.unit\r\n                    };\r\n                    chart.primaryYAxis.stripLines =\r\n                        [//striplines are for the green/red part lines on the grid, we have one that is the span,and the upper and lower one that deffer depending on type\r\n                        {\r\n                            start: this.lowerPrice, end: this.higherPrice, text: this.type, color: this.type == \"Lower\" ? \"#1a9470\" : '#f25c54', visible: true, zIndex: 'Behind', opacity: 0.5 },\r\n\r\n                        { start: this.type == \"Lower\" ? this.higherPrice : this.lowerPrice, size: 1, text: this.type == \"Lower\" ? \"\" + this.higherPrice : \"\" + this.lowerPrice, textStyle: { size: 15, color: this.type == \"Lower\" ? '#1a9470' : '#f25c54' }, verticalAlignment: this.type == \"Lower\" ? \"End\" : \"Start\", horizontalAlignment: \"Start\", sizeType: 'Pixel', dashArray: \"10,5\", color: this.type == \"Lower\" ? \"#1a9470\" : '#f25c54' },\r\n                        { start: this.type == \"Lower\" ? this.lowerPrice : this.higherPrice, size: 1, text: this.type == \"Lower\" ? \"\" + this.lowerPrice : \"\" + this.higherPrice, textStyle: { size: 15, color: this.type == \"Lower\" ? \"#1a9470\" : '#f25c54' }, verticalAlignment: this.type == \"Lower\" ? \"Start\" : \"End\", horizontalAlignment: \"Start\", sizeType: 'Pixel', color: this.type == \"Lower\" ? \"#1a9470\" : '#f25c54' },\r\n\r\n                        ];\r\n                    chart.series[0].dataSource = this.marketPricesPerDay;\r\n                    chart.refresh();\r\n                    if (args.alertType == \"Expired\") {\r\n                        document.getElementById('graphHeader').classList.add('alertExpiredTriggerHeader');\r\n                        document.getElementById('graphHeader').classList.remove('alertLiveTriggerHeader');\r\n                    }\r\n                    else {\r\n                        document.getElementById('graphHeader').classList.add('alertLiveTriggerHeader');\r\n                        document.getElementById('graphHeader').classList.remove('alertExpiredTriggerHeader');\r\n                    }\r\n                    //aditional data on dialog above graph\r\n                    if (args.alertType == \"Watch Zone\") {\r\n                        this.alertType = args.alertType + \" \" + \"Entered\";\r\n                    } else {\r\n                        this.alertType = args.alertType;\r\n                    }\r\n                    this.contractUnits = args.unit;\r\n                    this.triggerDate = moment(String(args.triggerDate)).format('DD/MM/YYYY');\r\n                    this.client = args.clientName;\r\n                    this.country = args.stateName;\r\n                    this.utility = args.utilityTypeName;\r\n                    this.company = args.companyName;\r\n                    this.contractName = args.contractName;\r\n                    this.pricingAreaName = args.pricingAreaName;\r\n                    this.contractId = args.contractId;\r\n                    this.watchPeriod = args.tradeablePeriodName;\r\n                    this.triggerPrice = args.triggerPrice.toFixed(3);\r\n                    this.marketPrice = args.marketPrice.toFixed(3);\r\n                    this.delta = args.delta.toFixed(3);\r\n                    this.product = args.productName;\r\n                    this.$refs.alertDialog.show();\r\n                }\r\n                ).catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    }\r\n                );\r\n            },\r\n            toolbarClick(args) {\r\n                if (args.item.id.includes('excelexport')) {\r\n                    // hide and show dropdown columns and show text columns as they always have value but dropdowns if not on the page will not have values\r\n                    this.$refs.grid.getColumns()[11].visible = false;\r\n\r\n                    this.$refs.grid.getColumns()[12].visible = true;\r\n                }\r\n                gridOptions.excelExport(args, \"Contract Triggers.xlsx\", this.$refs);\r\n            },\r\n            excelExportComplete(args) {\r\n                this.$refs.grid.hideSpinner();\r\n                // hide and show dropdown columns and show text columns as they always have value but dropdowns if not on the page will not have values,and return to the state before export\r\n                this.$refs.grid.getColumns()[11].visible = true;\r\n\r\n                this.$refs.grid.getColumns()[12].visible = false;\r\n            },\r\n\r\n            actionBegin(args) {\r\n                gridOptions.actionBegin(args);\r\n                if (args.requestType == 'beginEdit') {\r\n\r\n                    if (args.rowData.alertType == 'Expired') {\r\n                        for (var i = 0; i < this.$refs.grid.getColumns().length; i++) {\r\n                            this.$refs.grid.getColumns()[i].isPrimaryKey = true;\r\n\r\n                        }\r\n                    } else {\r\n                        for (var i = 0; i < this.$refs.grid.getColumns().length; i++) {\r\n                            this.$refs.grid.getColumns()[i].isPrimaryKey = false;\r\n\r\n                        }\r\n                    }\r\n                }\r\n                if (args.requestType == 'save') {\r\n                    //args.dialog.dialogOpen = false;\r\n                    showSpinner(document.getElementById('mainSpinner'));\r\n                }\r\n                if (args.requestType == 'refresh') {\r\n\r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                }\r\n                if ((args.requestType === 'beginEdit' || args.requestType === 'add')) {\r\n                    for (var i = 0; i < this.$refs.grid.getColumns().length; i++) {\r\n                        if (this.$refs.grid.getColumns()[i].headerText == \"Apply until Default Deadline\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerActions\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerStatus\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"applyUntilEnd\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"notifyOnSystem\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"notifyEmailAddresses\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"statusDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"tradeablePeriodName\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"tradeablePeriodId\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"referenceTypeId\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerStartDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerEndDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        }  else if (this.$refs.grid.getColumns()[i].field == \"tolerance\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"alertType\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"alertStatus\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"utilityTypeName\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } \r\n                    }\r\n                }\r\n            },\r\n            actionComplete(args) {\r\n                gridOptions.actionComplete(args, this.$refs);\r\n                if (args.requestType == 'beginEdit') {\r\n\r\n                    if (args.rowData.alertType == 'Expired') {\r\n\r\n                        for (var i = 0; i < this.$refs.grid.getColumns().length; i++) {\r\n                            this.$refs.grid.getColumns()[i].isPrimaryKey = true;\r\n\r\n                        }\r\n                        referenceTypeObj.enabled = false;\r\n                        tradebalePeriodObj.enabled = false;\r\n                        startDatePickerObj.enabled = false;\r\n                        triggerTypeObj.enabled = false;\r\n                        referenceTypeObj.enabled = false;\r\n                        multilineObj.enabled = false;\r\n                        checkBoxObj.disabled = true;\r\n                      \r\n                    } else {\r\n                        for (var i = 0; i < this.$refs.grid.getColumns().length; i++) {\r\n                            this.$refs.grid.getColumns()[i].isPrimaryKey = false;\r\n\r\n                        }\r\n\r\n                        referenceTypeObj.enabled = true;\r\n                        tradebalePeriodObj.enabled = true;\r\n                        startDatePickerObj.enabled = true;\r\n                        triggerTypeObj.enabled = true;\r\n                        referenceTypeObj.enabled = true;\r\n                        multilineObj.enabled = true;\r\n                        checkBoxObj.disabled = false;\r\n                        \r\n                    }\r\n                }\r\n\r\n\r\n\r\n                if (args.requestType == \"refresh\") {\r\n                    \r\n                    if (this.reportContractId != undefined) {\r\n                        apis.protectedApi(`${urls.apiBaseUrl}TriggerAlert/GroupCounts?contractId=${this.reportContractId}`).then(it => {\r\n                            this.deadline = it.data.deadline;\r\n                            this.status = it.data.status;\r\n                            this.hit = it.data.hit;\r\n                            this.AlertsCount = this.hit + this.deadline + this.status;\r\n                            //this is for counter in header, count unseen alerts\r\n                            if (document.getElementsByClassName('dueLiveTriggerHeader').length > 0) {\r\n                                document.getElementsByClassName('dueLiveTriggerHeader')[0].innerHTML = \"<u>TRIGGERS STATUS\" + \" \" + this.status + \"</u>\";\r\n                                document.querySelectorAll('[role=\"presentation\"]')[6].innerHTML = \"Alerts\" + \"(\" + this.AlertsCount + \")\";\r\n                            }\r\n                        });\r\n\r\n                    }\r\n                    if (this.clientId != undefined) {\r\n                        apis.protectedApi(`${urls.apiBaseUrl}TriggerAlert/GroupCounts?clientId=${this.clientId}`).then(it => {\r\n                            this.deadline = it.data.deadline;\r\n                            this.status = it.data.status;\r\n                            this.hit = it.data.hit;\r\n                            this.AlertsCount = this.hit + this.deadline + this.status;\r\n                            //this is for counter in header, count unseen alerts\r\n                            if (document.getElementsByClassName('dueLiveTriggerHeader').length > 0) {\r\n                                document.getElementsByClassName('dueLiveTriggerHeader')[0].innerHTML = \"<u>TRIGGERS STATUS\" + \" \" + this.status + \"</u>\";\r\n                                document.querySelectorAll('[role=\"presentation\"]')[5].innerHTML = \"Alerts\" + \"(\" + this.AlertsCount + \")\";\r\n                            }\r\n                        });\r\n\r\n                    }\r\n                    if (this.reportTradingGroupId != undefined) {\r\n                        apis.protectedApi(`${urls.apiBaseUrl}TriggerAlert/GroupCountsATG?tradingGroupId=${this.reportTradingGroupId}`).then(it => {\r\n                            this.deadline = it.data.deadline;\r\n                            this.status = it.data.status;\r\n                            this.hit = it.data.hit;\r\n                            this.AlertsCount = this.hit + this.deadline + this.status;\r\n                            //this is for counter in header, count unseen alerts\r\n                            if (document.getElementsByClassName('dueLiveTriggerHeader').length > 0) {\r\n                                document.getElementsByClassName('dueLiveTriggerHeader')[0].innerHTML = \"<u>TRIGGERS STATUS\" + \" \" + this.status + \"</u>\";\r\n                                document.querySelectorAll('[role=\"presentation\"]')[6].innerHTML = \"Alerts\" + \"(\" + this.AlertsCount + \")\";\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                }\r\n\r\n                if ((args.requestType === 'beginEdit' || args.requestType === 'add')) {\r\n\r\n                    var applyEnd = args.rowData.applyUntilEnd;\r\n                    if (applyEnd == true) {\r\n\r\n                        datePickerObj.enabled = false;\r\n                    }\r\n\r\n                    args.dialog.height = \"80%\";\r\n                    args.dialog.width = \"50%\";\r\n                    let rows = args.form.querySelectorAll(\"tr\");\r\n                    for (var i = 0; i < rows.length; i = i + 2) {\r\n                        if (rows.length > i + 1) {\r\n                            rows[i].appendChild(\r\n                                args.form.querySelectorAll(\"tr\")[i + 1].cells[0]\r\n                            );\r\n                        }\r\n                    }\r\n    \r\n                    for (var i = 0; i < this.$refs.grid.getColumns().length; i++) {\r\n                        if (this.$refs.grid.getColumns()[i].headerText == \"Apply until Default Deadline\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerActions\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerStatus\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"applyUntilEnd\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"notifyOnSystem\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"notifyEmailAddresses\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        }  else if (this.$refs.grid.getColumns()[i].field == \"statusDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"tradeablePeriodName\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"tradeablePeriodId\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                            tradebalePeriodObj.value = args.rowData.tradeablePeriodId;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"utilityTypeName\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } \r\n                        else if (this.$refs.grid.getColumns()[i].field == \"referenceTypeId\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerStartDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerEndDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"tolerance\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"alertType\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"alertStatus\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } \r\n                    }\r\n                    if (args.requestType != 'add') {\r\n                      //  this.contractUnits = args.rowData.unit;\r\n                        this.units = args.rowData.unit;\r\n                        args.form[12].value = args.form[12].value + \"%\";\r\n                        args.form[10].value = args.form[10].value + \" [\" + this.units + \"]\";\r\n                    }\r\n                  \r\n                    args.form[12].addEventListener(\"focusout\", e => {\r\n                        if (e.target.classList.contains(\"e-numerictextbox\")) {\r\n                            e.target.value = e.target.value + \"%\";\r\n                        }\r\n                    });\r\n\r\n                 \r\n                    args.form[10].addEventListener(\"focusout\", e => {\r\n                        if (e.target.classList.contains(\"e-numerictextbox\")) {\r\n                            e.target.value = e.target.value + \" [\" + this.units + \"]\";\r\n                        }\r\n                    });\r\n                }\r\n            },\r\n            actionFailure(args) {\r\n                gridOptions.actionFailure(args);\r\n                hideSpinner(document.getElementById('mainSpinner'));\r\n            },\r\n            customiseCell: function (args) { // when setting up the grid this is rendering each column on its own\r\n                if (args.column.field === 'triggerTypeName') {\r\n                    if (args.data['triggerTypeName'] == 'Lower') {\r\n                        args.cell.classList.add('greenBox');\r\n                    } else {\r\n                        args.cell.classList.add('redBox');\r\n                    }\r\n                } else if (args.column.field === 'triggerPrice') {\r\n                    args.cell.textContent = args.cell.textContent + \" [\" + args.data['unit']  + \"]\";\r\n                } else if (args.column.field === 'tolerance') {\r\n                    args.cell.textContent = args.cell.textContent + \"%\";\r\n                } else if (args.column.headerText === \"Actions\") {\r\n                    if (args.data['alertStatus'] == 'Seen') {\r\n                        args.cell.querySelector(\"button[title='Mark as Seen']\").textContent = 'Mark as Unseen';\r\n                        args.cell.querySelector(\"button[title='Mark as Seen']\").title = 'Mark as Unseen';\r\n                    }\r\n                }\r\n            },\r\n            fetchUnit(id) {\r\n                apis.protectedApi(`${urls.apiBaseUrl}Contract/AditionalTriggerData/${id}`).then(it => {\r\n                    this.units = it.data.units;\r\n                    this.riskManager = it.data.riskManager;\r\n                }).catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    }\r\n                );\r\n\r\n            }\r\n\r\n        },\r\n        provide: {\r\n            grid: [Page, Edit, Toolbar, Sort, Filter, Reorder, Resize, ExcelExport, ForeignKey, CommandColumn],\r\n            chart: [ColumnSeries, StripLine, LineSeries, Category, DataLabel, DateTime, Tooltip, ChartAnnotation, Zoom, MultiColoredLineSeries]\r\n        }\r\n    };\r\n\r\n</script>\r\n<style>\r\n/*    .e-dialog {\r\n        max-height: 900px !important;\r\n        top: 0px !important;\r\n    }*/\r\n    /*@import \"../node_modules/@syncfusion/ej2-vue-grids/styles/material.css\";*/\r\n    .greenBox {\r\n        background-color: #7FB7BE !important;\r\n    }\r\n\r\n    .redBox {\r\n        background-color: #f78764 !important;\r\n    }\r\n\r\n    e-notFunctional {\r\n        background-color: grey;\r\n    }\r\n\r\n    .alertExpiredTriggerHeader {\r\n        text-transform: uppercase;\r\n        color: #f25c54;\r\n    }\r\n    .greyBackground{\r\n        background-color: lightgrey;\r\n    }\r\n    .alertLiveTriggerHeader {\r\n        text-transform: uppercase;\r\n        color: #001c55;\r\n    }\r\n    #alertChartContainer {\r\n        height: 350px;\r\n    }\r\n    #statusAlertDialog .e-dlg-content {\r\n        color: #4d4d4d !important;\r\n        font-family: 'Arial', Arial, sans-serif !important;\r\n        font-size: 14px;\r\n    }\r\n\r\n    #alertChartContainer_Series_0 {\r\n        stroke: #001c55 !important;\r\n    }\r\n\r\n    text[id=\"alertChartContainer_ChartTitle\"] {\r\n        fill: #4d4d4d !important;\r\n        font-family: 'Arial', Arial, sans-serif !important;\r\n        font-size: 16px;\r\n    }\r\n    [id^=\"alertChartContainer_EJ-Trackball_Series_0\"] {\r\n        color: #001c55 !important;\r\n    }\r\n\r\n    #alertChartContainer_tooltip_Trackball_0 {\r\n        fill: #001C55 !important;\r\n    }\r\n    #statusAlertGridId .e-content {\r\n        min-height: 0px !important;\r\n    }\r\n    #statusAlertDialog {\r\n        max-height: 100% !important;\r\n        z-index: 10000 !important;\r\n        height: 100vh !important;\r\n        position: fixed!important;\r\n        top: 0%!important;\r\n    }\r\n\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./StatusAlert.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./StatusAlert.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./StatusAlert.vue?vue&type=template&id=8cc5df1a\"\nimport script from \"./StatusAlert.vue?vue&type=script&lang=js\"\nexport * from \"./StatusAlert.vue?vue&type=script&lang=js\"\nimport style0 from \"./StatusAlert.vue?vue&type=style&index=0&id=8cc5df1a&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-param */\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { removeElement, RectOption, PolygonOption, createTooltip, minMax, getElement } from '../../common/utils/helper';\nimport { textElement } from '../../common/utils/helper';\nimport { PathOption, Rect, measureText, TextOption, SvgRenderer } from '@syncfusion/ej2-svg-base';\nimport { Zoom } from './zooming';\nimport { zoomComplete, onZooming } from '../../common/model/constants';\n/**\n * Zooming Toolkit created here\n *\n * @private\n */\nvar Toolkit = /** @class */ (function () {\n    /** @private */\n    function Toolkit(chart) {\n        this.iconRectOverFill = 'transparent';\n        this.iconRectSelectionFill = 'transparent';\n        /** @private */\n        this.zoomCompleteEvtCollection = [];\n        this.chart = chart;\n        this.elementId = chart.element.id;\n        this.chart.svgRenderer = new SvgRenderer(this.elementId);\n    }\n    /**\n     * To create the pan button.\n     *\n     * @returns {void}\n     * @private\n     */\n    Toolkit.prototype.createPanButton = function (childElement, parentElement) {\n        var render = this.chart.svgRenderer;\n        var fillColor = this.chart.zoomModule.isPanning ? this.chart.themeStyle.toolkitSelectionColor : this.chart.themeStyle.toolkitFill;\n        var direction = 'M5,3h2.3L7.275,5.875h1.4L8.65,3H11L8,0L5,3z M3,11V8.7l2.875,0.025v-1.4L3,7.35V5L0,8L3,';\n        direction += '11z M11,13H8.7l0.025-2.875h-1.4L7.35,13H5l3,3L11,13z M13,5v2.3l-2.875-0.025v1.4L13,8.65V11l3-3L13,5z';\n        //This is for setting low opacity to PAN Button\n        this.elementOpacity = !this.chart.zoomModule.isZoomed && this.chart.zoomSettings.showToolbar ? '0.2' : '1';\n        childElement.setAttribute('opacity', this.elementOpacity);\n        childElement.id = this.elementId + '_Zooming_Pan';\n        childElement.setAttribute('role', 'button');\n        childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Pan'));\n        this.panElements = childElement;\n        childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Pan_1', 'transparent', {}, 1, this.chart.themeStyle.toolkitIconRect)));\n        childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Pan_2', fillColor, null, null, 1, null, direction)));\n        parentElement.appendChild(childElement);\n        this.wireEvents(childElement, this.pan);\n    };\n    /**\n     * To create the zoom button.\n     *\n     * @returns {void}\n     * @private\n     */\n    Toolkit.prototype.createZoomButton = function (childElement, parentElement) {\n        var render = this.chart.svgRenderer;\n        //This is for selecting initial fill color to ZOOM button\n        var fillColor = this.chart.zoomModule.isPanning || (!this.chart.zoomModule.isZoomed &&\n            this.chart.zoomSettings.showToolbar) ? this.chart.themeStyle.toolkitFill : this.chart.themeStyle.toolkitSelectionColor;\n        this.elementOpacity = !this.chart.zoomModule.isPanning && !this.chart.zoomModule.isZoomed && this.chart.zoomSettings.showToolbar ? '0.2' : '1';\n        var rectColor = this.chart.zoomModule.isPanning ? 'transparent' : this.chart.themeStyle.toolkitIconRectSelectionFill;\n        var direction = 'M0.001,14.629L1.372,16l4.571-4.571v-0.685l0.228-0.274c1.051,0.868,2.423,1.417,3.885,1.417c3.291,0,';\n        direction += '5.943-2.651,5.943-5.943S13.395,0,10.103,0S4.16,2.651,4.16,5.943c0,1.508,0.503,2.834,1.417,3.885l-0.274,0.228H4.571';\n        direction = direction + 'L0.001,14.629L0.001,14.629z M5.943,5.943c0-2.285,1.828-4.114,4.114-4.114s4.114,1.828,4.114,';\n        childElement.id = this.elementId + '_Zooming_Zoom';\n        childElement.setAttribute('role', 'button');\n        childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Zoom'));\n        childElement.setAttribute('opacity', this.elementOpacity);\n        this.zoomElements = childElement;\n        this.selectedID = this.chart.zoomModule.isPanning ? this.chart.element.id + '_Zooming_Pan_1' : this.elementId + '_Zooming_Zoom_1';\n        childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Zoom_1', rectColor, {}, 1, this.chart.themeStyle.toolkitIconRect)));\n        childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Zoom_3', fillColor, null, null, 1, null, direction + '4.114s-1.828,4.114-4.114,4.114S5.943,8.229,5.943,5.943z')));\n        parentElement.appendChild(childElement);\n        this.wireEvents(childElement, this.zoom);\n    };\n    /**\n     * To create the ZoomIn button.\n     *\n     * @returns {void}\n     * @private\n     */\n    Toolkit.prototype.createZoomInButton = function (childElement, parentElement, chart) {\n        var render = this.chart.svgRenderer;\n        var fillColor = this.chart.themeStyle.toolkitFill;\n        var direction = 'M10.103,0C6.812,0,4.16,2.651,4.16,5.943c0,1.509,0.503,2.834,1.417,3.885l-0.274,0.229H4.571L0,';\n        direction += '14.628l0,0L1.372,16l4.571-4.572v-0.685l0.228-0.275c1.052,0.868,2.423,1.417,3.885,1.417c3.291,0,5.943-2.651,';\n        direction += '5.943-5.943C16,2.651,13.395,0,10.103,0z M10.058,10.058c-2.286,0-4.114-1.828-4.114-4.114c0-2.286,1.828-4.114,';\n        childElement.id = this.elementId + '_Zooming_ZoomIn';\n        childElement.setAttribute('role', 'button');\n        childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('ZoomIn'));\n        var polygonDirection = '12.749,5.466 10.749,5.466 10.749,3.466 9.749,3.466 9.749,5.466 7.749,5.466 7.749,6.466';\n        childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_ZoomIn_1', 'transparent', {}, 1, this.chart.themeStyle.toolkitIconRect)));\n        childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_ZoomIn_2', fillColor, null, null, 1, null, direction + '4.114-4.114c2.286,0,4.114,1.828,4.114,4.114C14.172,8.229,12.344,10.058,10.058,10.058z')));\n        childElement.appendChild(render.drawPolygon(new PolygonOption(this.elementId + '_Zooming_ZoomIn_3', polygonDirection + ' 9.749,6.466 9.749,8.466 10.749,8.466 10.749,6.466 12.749,6.466', fillColor)));\n        this.zoomInElements = childElement;\n        //This is for low opacity to ZOOM IN button\n        this.elementOpacity = chart.zoomModule.isPanning || (!chart.zoomModule.isZoomed && !chart.zoomSettings.showToolbar && !this.enableZoomButton) ? '0.2' : '1';\n        childElement.setAttribute('opacity', this.elementOpacity);\n        parentElement.appendChild(childElement);\n        this.wireEvents(childElement, this.zoomIn);\n    };\n    /**\n     * To create the ZoomOut button.\n     *\n     * @returns {void}\n     * @private\n     */\n    Toolkit.prototype.createZoomOutButton = function (childElement, parentElement, chart) {\n        var render = this.chart.svgRenderer;\n        var fillColor = this.chart.themeStyle.toolkitFill;\n        var direction = 'M0,14.622L1.378,16l4.533-4.533v-0.711l0.266-0.266c1.022,0.889,2.4,1.422,3.866,';\n        direction += '1.422c3.289,0,5.955-2.666,5.955-5.955S13.333,0,10.044,0S4.089,2.667,4.134,5.911c0,1.466,0.533,2.844,';\n        direction += '1.422,3.866l-0.266,0.266H4.578L0,14.622L0,14.622z M5.911,5.911c0-2.311,1.822-4.133,4.133-4.133s4.133,1.822,4.133,';\n        childElement.id = this.elementId + '_Zooming_ZoomOut';\n        childElement.setAttribute('role', 'button');\n        childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('ZoomOut'));\n        childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_ZoomOut_1', 'transparent', {}, 1, this.chart.themeStyle.toolkitIconRect)));\n        childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_ZoomOut_2', fillColor, null, null, 1, null, direction + '4.133s-1.866,4.133-4.133,4.133S5.911,8.222,5.911,5.911z M12.567,6.466h-5v-1h5V6.466z')));\n        this.zoomOutElements = childElement;\n        //This is for low opacity of ZOOM OUT button\n        this.elementOpacity = chart.zoomModule.isPanning || (!chart.zoomModule.isZoomed && chart.zoomSettings.showToolbar && !this.enableZoomButton) ? '0.2' : '1';\n        childElement.setAttribute('opacity', this.elementOpacity);\n        parentElement.appendChild(childElement);\n        this.wireEvents(childElement, this.zoomOut);\n    };\n    /**\n     * To create the Reset button.\n     *\n     * @returns {void}\n     * @private\n     */\n    Toolkit.prototype.createResetButton = function (childElement, parentElement, chart, isDevice) {\n        var render = this.chart.svgRenderer;\n        var fillColor = this.chart.themeStyle.toolkitFill;\n        var size;\n        var direction = 'M12.364,8h-2.182l2.909,3.25L16,8h-2.182c0-3.575-2.618-6.5-5.818-6.5c-1.128,0-2.218,0.366-3.091,';\n        direction += '1.016l1.055,1.178C6.581,3.328,7.272,3.125,8,3.125C10.4,3.125,12.363,5.319,12.364,8L12.364,8z M11.091,';\n        direction += '13.484l-1.055-1.178C9.419,12.672,8.728,12.875,8,12.875c-2.4,0-4.364-2.194-4.364-4.875h2.182L2.909,4.75L0,8h2.182c0,';\n        childElement.id = this.elementId + '_Zooming_Reset';\n        childElement.setAttribute('role', 'button');\n        childElement.setAttribute('aria-label', this.chart.getLocalizedLabel('Reset'));\n        //This is for low opacity to RESET button\n        this.elementOpacity = !chart.zoomModule.isZoomed && chart.zoomSettings.showToolbar ? '0.2' : '1';\n        childElement.setAttribute('opacity', this.elementOpacity);\n        if (!isDevice) {\n            childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Reset_1', 'transparent', {}, 1, this.chart.themeStyle.toolkitIconRect)));\n            childElement.appendChild(render.drawPath(new PathOption(this.elementId + '_Zooming_Reset_2', fillColor, null, null, 1, null, direction + '3.575,2.618,6.5,5.818,6.5C9.128,14.5,10.219,14.134,11.091,13.484L11.091,13.484z')));\n        }\n        else {\n            size = measureText(this.chart.getLocalizedLabel('ResetZoom'), { size: '12px' }, { size: '12px', fontStyle: 'Normal', fontWeight: '400', fontFamily: 'Segoe UI' });\n            childElement.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Reset_1', 'transparent', {}, 1, new Rect(0, 0, size.width, size.height))));\n            textElement(chart.renderer, new TextOption(this.elementId + '_Zooming_Reset_2', 0 + size.width / 2, 0 + size.height * 3 / 4, 'middle', this.chart.getLocalizedLabel('ResetZoom'), 'rotate(0,' + (0) + ',' + (0) + ')', 'auto'), { size: '12px' }, this.chart.theme === 'Material3Dark' ? 'White' : 'black', childElement, null, null, null, null, null, null, null, null, chart.enableCanvas, null, { size: '12px', fontStyle: 'Normal', fontWeight: '400', fontFamily: 'Segoe UI' });\n        }\n        parentElement.appendChild(childElement);\n        this.wireEvents(childElement, this.reset);\n    };\n    /**\n     * To bind events.\n     *\n     * @returns {void}\n     * @private\n     */\n    Toolkit.prototype.wireEvents = function (element, process) {\n        EventHandler.add(element, 'mousedown touchstart', process, this);\n        EventHandler.add(element, 'mouseover', this.showTooltip, this);\n        EventHandler.add(element, 'mouseout', this.removeTooltip, this);\n    };\n    /**\n     * To show tooltip.\n     *\n     * @returns {void}\n     * @private\n     */\n    Toolkit.prototype.showTooltip = function (event) {\n        var text = event.currentTarget.id.split('_Zooming_')[1];\n        var left = (event.pageX - (measureText(text, { size: '10px' }, { size: '10px', fontStyle: 'Normal', fontWeight: '400', fontFamily: 'Segoe UI' }).width + 5));\n        var rect = getElement(event.currentTarget.id + '_1');\n        var icon2 = getElement(event.currentTarget.id + '_2');\n        var icon3 = getElement(event.currentTarget.id + '_3');\n        if (event.currentTarget.getAttribute('opacity') === '1') {\n            event.currentTarget.setAttribute('cursor', 'pointer');\n        }\n        else {\n            event.currentTarget.setAttribute('cursor', 'auto');\n        }\n        if (rect) {\n            this.hoveredID = rect.id;\n            rect.setAttribute('fill', this.chart.themeStyle.toolkitIconRectOverFill);\n        }\n        if (icon2) {\n            icon2.setAttribute('fill', this.chart.themeStyle.toolkitSelectionColor);\n        }\n        if (icon3) {\n            icon3.setAttribute('fill', this.chart.themeStyle.toolkitSelectionColor);\n        }\n        if (!this.chart.isTouch) {\n            createTooltip('EJ2_Chart_ZoomTip', this.chart.getLocalizedLabel(text), (event.pageY + 10), left, '10px');\n        }\n    };\n    /** @private */\n    /* eslint-disable */\n    Toolkit.prototype.removeTooltip = function () {\n        if (this.hoveredID && getElement(this.hoveredID)) {\n            var rectColor = this.chart.zoomModule.isPanning ? (this.hoveredID.indexOf('_Pan_') > -1) ? this.chart.themeStyle.toolkitIconRectSelectionFill : 'transparent' : (this.hoveredID.indexOf('_Zoom_') > -1) ? this.chart.themeStyle.toolkitIconRectSelectionFill : 'transparent';\n            getElement(this.hoveredID).setAttribute('fill', rectColor);\n        }\n        var icon2 = this.hoveredID ? getElement(this.hoveredID.replace('_1', '_2')) : null;\n        var icon3 = this.hoveredID ? getElement(this.hoveredID.replace('_1', '_3')) : null;\n        if (icon2) {\n            var iconColor = this.chart.zoomModule.isPanning ? (this.hoveredID.indexOf('_Pan_') > -1) ? this.chart.themeStyle.toolkitSelectionColor : this.chart.themeStyle.toolkitFill : (this.hoveredID.indexOf('_Zoom_') > -1) ? this.chart.themeStyle.toolkitSelectionColor : this.chart.themeStyle.toolkitFill;\n            icon2.setAttribute('fill', iconColor);\n        }\n        if (icon3) {\n            //This is used for change color while hover on ZOOM button\n            var iconColor = this.chart.zoomModule.isPanning || (!this.chart.isZoomed && this.chart.zoomSettings.showToolbar) ? this.chart.themeStyle.toolkitFill : (this.hoveredID.indexOf('_Zoom_') > -1) ? this.chart.themeStyle.toolkitSelectionColor : this.chart.themeStyle.toolkitFill;\n            icon3.setAttribute('fill', iconColor);\n        }\n        removeElement('EJ2_Chart_ZoomTip');\n    };\n    // Toolkit events function calculation here.\n    /** @private */\n    Toolkit.prototype.reset = function (event) {\n        var _this = this;\n        if (!this.chart.zoomModule.isZoomed) {\n            return false;\n        }\n        var chart = this.chart;\n        this.enableZoomButton = false;\n        if (!chart.zoomModule.isDevice) {\n            remove(chart.zoomModule.toolkitElements);\n        }\n        else if (event.type == 'touchstart') {\n            event.stopPropagation();\n        }\n        var argsData;\n        this.removeTooltip();\n        chart.svgObject.setAttribute('cursor', 'auto');\n        var zoomingEventArgs;\n        var zoomedAxisCollection = [];\n        this.zoomCompleteEvtCollection = [];\n        for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n            var axis = _a[_i];\n            argsData = {\n                cancel: false, name: zoomComplete, axis: axis, previousZoomFactor: axis.zoomFactor,\n                previousZoomPosition: axis.zoomPosition, currentZoomFactor: 1, currentZoomPosition: 0,\n                previousVisibleRange: axis.visibleRange, currentVisibleRange: null\n            };\n            axis.zoomFactor = 1;\n            axis.zoomPosition = 0;\n            if (axis.zoomingScrollBar) {\n                axis.zoomingScrollBar.isScrollUI = false;\n            }\n            if (!argsData.cancel) {\n                axis.zoomFactor = argsData.currentZoomFactor;\n                axis.zoomPosition = argsData.currentZoomPosition;\n                this.zoomCompleteEvtCollection.push(argsData);\n            }\n            zoomedAxisCollection.push({\n                zoomFactor: axis.zoomFactor, zoomPosition: axis.zoomFactor, axisName: axis.name,\n                axisRange: axis.visibleRange\n            });\n            if (chart.zoomModule.isDevice && !this.chart.isBlazor) {\n                chart.trigger(zoomComplete, argsData);\n            }\n        }\n        zoomingEventArgs = { cancel: false, axisCollection: zoomedAxisCollection, name: onZooming };\n        if (!zoomingEventArgs.cancel && this.chart.isBlazor) {\n            this.chart.trigger(onZooming, zoomingEventArgs, function () {\n                _this.setDefferedZoom(chart);\n            });\n            return false;\n        }\n        else {\n            return (this.setDefferedZoom(chart));\n        }\n    };\n    Toolkit.prototype.setDefferedZoom = function (chart) {\n        chart.disableTrackTooltip = false;\n        chart.zoomModule.isZoomed = chart.zoomModule.isPanning = chart.isChartDrag = chart.delayRedraw = false;\n        chart.zoomModule.touchMoveList = chart.zoomModule.touchStartList = [];\n        chart.zoomModule.pinchTarget = null;\n        chart.removeSvg();\n        chart.refreshAxis();\n        chart.refreshBound();\n        this.elementOpacity = '1';\n        return false;\n    };\n    Toolkit.prototype.zoomIn = function (e) {\n        this.zoomInOutCalculation(1, this.chart, this.chart.axisCollections, this.chart.zoomSettings.mode);\n        return false;\n    };\n    Toolkit.prototype.zoomOut = function (e) {\n        this.enableZoomButton = false;\n        this.zoomInOutCalculation(-1, this.chart, this.chart.axisCollections, this.chart.zoomSettings.mode);\n        return false;\n    };\n    Toolkit.prototype.zoom = function (e) {\n        this.chart.zoomModule.isPanning = false;\n        var zoomModule = this.chart.zoomModule;\n        this.elementOpacity = '1';\n        this.chart.svgObject.setAttribute('cursor', 'auto');\n        this.zoomInElements.setAttribute('opacity', this.elementOpacity);\n        this.elementOpacity = (!this.chart.zoomModule.isZoomed && this.chart.zoomSettings.showToolbar) ? '0.2' : '1';\n        this.zoomOutElements.setAttribute('opacity', this.elementOpacity);\n        this.applySelection(this.zoomElements.childNodes, this.chart.themeStyle.toolkitSelectionColor);\n        this.applySelection(this.panElements.childNodes, '#737373');\n        if (getElement(this.selectedID)) {\n            getElement(this.selectedID).setAttribute('fill', 'transparent');\n        }\n        this.selectedID = this.chart.element.id + '_Zooming_Zoom_1';\n        getElement(this.selectedID).setAttribute('fill', this.chart.themeStyle.toolkitIconRectSelectionFill);\n        return false;\n    };\n    /** @private */\n    Toolkit.prototype.pan = function () {\n        if (!this.chart.zoomModule.isZoomed) {\n            return false;\n        }\n        var element;\n        this.chart.zoomModule.isPanning = true;\n        this.chart.svgObject.setAttribute('cursor', 'pointer');\n        this.elementOpacity = '0.2';\n        element = this.zoomInElements ? this.zoomInElements.setAttribute('opacity', this.elementOpacity) : null;\n        element = this.zoomOutElements ? this.zoomOutElements.setAttribute('opacity', this.elementOpacity) : null;\n        element = this.panElements ? this.applySelection(this.panElements.childNodes, this.chart.themeStyle.toolkitSelectionColor) : null;\n        element = this.zoomElements ? this.applySelection(this.zoomElements.childNodes, '#737373') : null;\n        if (getElement(this.selectedID)) {\n            getElement(this.selectedID).setAttribute('fill', 'transparent');\n        }\n        this.selectedID = this.chart.element.id + '_Zooming_Pan_1';\n        getElement(this.selectedID).setAttribute('fill', this.chart.themeStyle.toolkitIconRectSelectionFill);\n        return false;\n    };\n    Toolkit.prototype.zoomInOutCalculation = function (scale, chart, axes, mode) {\n        var _this = this;\n        if (chart.zoomSettings.showToolbar) {\n            this.elementOpacity = this.zoomInElements.getAttribute('opacity');\n        }\n        if (!chart.zoomModule.isPanning && this.elementOpacity !== '0.2') {\n            if ((chart.zoomSettings.showToolbar && !chart.isZoomed)) {\n                chart.zoomModule.isZoomed = true;\n            }\n            var zoomFactor = void 0;\n            var zoomPosition = void 0;\n            var cumulative = void 0;\n            chart.disableTrackTooltip = true;\n            chart.delayRedraw = true;\n            var argsData = void 0;\n            this.zoomCompleteEvtCollection = [];\n            var zoomedAxisCollection = [];\n            for (var _i = 0, _a = axes; _i < _a.length; _i++) {\n                var axis = _a[_i];\n                argsData = {\n                    cancel: false, name: zoomComplete, axis: axis, previousZoomFactor: axis.zoomFactor,\n                    previousZoomPosition: axis.zoomPosition, currentZoomFactor: axis.zoomFactor, currentZoomPosition: axis.zoomPosition,\n                    previousVisibleRange: axis.visibleRange, currentVisibleRange: null\n                };\n                if ((axis.orientation === 'Horizontal' && mode !== 'Y') ||\n                    (axis.orientation === 'Vertical')) {\n                    cumulative = Math.max(Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1) + (0.25 * scale), 1);\n                    zoomFactor = (cumulative === 1) ? 1 : minMax(1 / cumulative, 0, 1);\n                    zoomPosition = (cumulative === 1) ? 0 : axis.zoomPosition + ((axis.zoomFactor - zoomFactor) * 0.5);\n                    if (axis.zoomPosition !== zoomPosition || axis.zoomFactor !== zoomFactor) {\n                        zoomFactor = (zoomPosition + zoomFactor) > 1 ? (1 - zoomPosition) : zoomFactor;\n                    }\n                    argsData.currentZoomFactor = zoomFactor;\n                    argsData.currentZoomPosition = zoomPosition;\n                    if (!argsData.cancel) {\n                        axis.zoomFactor = argsData.currentZoomFactor;\n                        axis.zoomPosition = argsData.currentZoomPosition;\n                        this.zoomCompleteEvtCollection.push(argsData);\n                    }\n                    zoomedAxisCollection.push({\n                        zoomFactor: axis.zoomFactor, zoomPosition: axis.zoomFactor, axisName: axis.name,\n                        axisRange: axis.visibleRange\n                    });\n                }\n            }\n            var zoomingEventArgs_1 = { cancel: false, axisCollection: zoomedAxisCollection, name: onZooming };\n            this.chart.trigger(onZooming, zoomingEventArgs_1, function () {\n                if (zoomingEventArgs_1.cancel) {\n                    var zoom = new Zoom(chart);\n                    zoom.zoomCancel(axes, _this.zoomCompleteEvtCollection);\n                }\n            });\n        }\n    };\n    Toolkit.prototype.applySelection = function (elements, color) {\n        for (var i = 1, length_1 = elements.length; i < length_1; i++) {\n            elements[i].setAttribute('fill', color);\n        }\n    };\n    return Toolkit;\n}());\nexport { Toolkit };\n","import { EventHandler, Browser, createElement } from '@syncfusion/ej2-base';\nimport { getRectLocation, minMax, getElement, ChartLocation, RectOption } from '../../common/utils/helper';\nimport { Rect, measureText } from '@syncfusion/ej2-svg-base';\nimport { Toolkit } from './zooming-toolkit';\nimport { zoomComplete, onZooming } from '../../common/model/constants';\nimport { withInBounds } from '../../common/utils/helper';\n/**\n * `Zooming` module handles the zooming for chart.\n */\nvar Zoom = /** @class */ (function () {\n    /**\n     * Constructor for Zooming module.\n     *\n     * @private\n     */\n    function Zoom(chart) {\n        this.zoomCompleteEvtCollection = [];\n        this.chart = chart;\n        this.isPointer = Browser.isPointer;\n        this.browserName = Browser.info.name;\n        this.wheelEvent = this.browserName === 'mozilla' ? (this.isPointer ? 'mousewheel' : 'DOMMouseScroll') : 'mousewheel';\n        this.cancelEvent = this.isPointer ? 'pointerleave' : 'mouseleave';\n        this.addEventListener();\n        this.isDevice = Browser.isDevice;\n        var zooming = chart.zoomSettings;\n        this.toolkit = new Toolkit(chart);\n        this.zooming = zooming;\n        this.elementId = chart.element.id;\n        this.zoomingRect = new Rect(0, 0, 0, 0);\n        this.zoomAxes = [];\n        this.zoomkitOpacity = 1;\n        this.isIOS = Browser.isIos || Browser.isIos7;\n        this.isZoomed = this.performedUI = this.zooming.enablePan ||\n            ((this.chart.primaryXAxis.zoomFactor < 1 && this.chart.primaryXAxis.zoomPosition > 0) ||\n                (this.chart.primaryYAxis.zoomFactor < 1 && this.chart.primaryYAxis.zoomPosition > 0) || this.isAxisZoomed(this.chart.axes));\n        if (zooming.enableScrollbar) {\n            chart.scrollElement = createElement('div', { id: chart.element.id + '_scrollElement' });\n        }\n    }\n    /**\n     * Function that handles the Rectangular zooming.\n     *\n     * @returns {void}\n     */\n    Zoom.prototype.renderZooming = function (e, chart, isTouch) {\n        this.calculateZoomAxesRange(chart);\n        if (this.zooming.enableSelectionZooming && (!isTouch\n            || (chart.isDoubleTap && this.touchStartList.length === 1)) && (!this.isPanning || chart.isDoubleTap)) {\n            this.isPanning = this.isDevice ? true : this.isPanning;\n            this.performedUI = true;\n            this.drawZoomingRectangle(chart);\n        }\n        else if (this.isPanning && chart.isChartDrag) {\n            if (!isTouch || (isTouch && this.touchStartList.length === 1)) {\n                this.pinchTarget = isTouch ? e.target : null;\n                this.doPan(chart, chart.axisCollections);\n            }\n        }\n    };\n    // Zooming rectangle drawn here\n    Zoom.prototype.drawZoomingRectangle = function (chart) {\n        var areaBounds = chart.chartAxisLayoutPanel.seriesClipRect;\n        var startLocation = new ChartLocation(chart.previousMouseMoveX, chart.previousMouseMoveY);\n        var endLocation = new ChartLocation(chart.mouseX, chart.mouseY);\n        var rect = this.zoomingRect = getRectLocation(startLocation, endLocation, areaBounds);\n        if (rect.width > 0 && rect.height > 0) {\n            this.isZoomed = true;\n            chart.disableTrackTooltip = true;\n            chart.svgObject.setAttribute('cursor', 'crosshair');\n            if (this.zooming.mode === 'Y') {\n                rect.width = areaBounds.width;\n                rect.x = areaBounds.x;\n            }\n            var svg = chart.enableCanvas ? document.getElementById(this.elementId + '_tooltip_svg') : chart.svgObject;\n            svg.appendChild(chart.svgRenderer.drawRectangle(new RectOption(this.elementId + '_ZoomArea', chart.themeStyle.selectionRectFill, { color: chart.themeStyle.selectionRectStroke, width: 1 }, 1, rect, 0, 0, '', '3')));\n        }\n    };\n    // Panning performed here\n    Zoom.prototype.doPan = function (chart, axes, xDifference, yDifference) {\n        var _this = this;\n        if (xDifference === void 0) { xDifference = 0; }\n        if (yDifference === void 0) { yDifference = 0; }\n        if (chart.startMove && chart.crosshair.enable) {\n            return null;\n        }\n        var currentScale;\n        var offset;\n        this.isZoomed = true;\n        this.offset = !chart.delayRedraw ? chart.chartAxisLayoutPanel.seriesClipRect : this.offset;\n        chart.delayRedraw = true;\n        this.zoomCompleteEvtCollection = [];\n        chart.disableTrackTooltip = true;\n        var argsData;\n        var zoomedAxisCollection = [];\n        for (var _i = 0, _a = axes; _i < _a.length; _i++) {\n            var axis = _a[_i];\n            argsData = {\n                cancel: false, name: zoomComplete, axis: axis, previousZoomFactor: axis.zoomFactor,\n                previousZoomPosition: axis.zoomPosition, currentZoomFactor: axis.zoomFactor,\n                currentZoomPosition: axis.zoomPosition, previousVisibleRange: axis.visibleRange,\n                currentVisibleRange: null\n            };\n            currentScale = Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1);\n            if (axis.orientation === 'Horizontal') {\n                offset = (xDifference !== 0 ? xDifference : (chart.previousMouseMoveX - chart.mouseX)) / axis.rect.width / currentScale;\n                argsData.currentZoomPosition = minMax(axis.zoomPosition + offset, 0, (1 - axis.zoomFactor));\n            }\n            else {\n                offset = (yDifference !== 0 ? yDifference : (chart.previousMouseMoveY - chart.mouseY)) / axis.rect.height / currentScale;\n                argsData.currentZoomPosition = minMax(axis.zoomPosition - offset, 0, (1 - axis.zoomFactor));\n            }\n            if (!argsData.cancel) {\n                axis.zoomFactor = argsData.currentZoomFactor;\n                axis.zoomPosition = argsData.currentZoomPosition;\n                this.zoomCompleteEvtCollection.push(argsData);\n            }\n            zoomedAxisCollection.push({\n                zoomFactor: axis.zoomFactor, zoomPosition: axis.zoomFactor, axisName: axis.name,\n                axisRange: axis.visibleRange\n            });\n        }\n        var zoomingEventArgs = { cancel: false, axisCollection: zoomedAxisCollection, name: onZooming };\n        if (!zoomingEventArgs.cancel && this.chart.isBlazor) {\n            this.chart.trigger(onZooming, zoomingEventArgs, function () {\n                if (zoomingEventArgs.cancel) {\n                    _this.zoomCancel(axes, _this.zoomCompleteEvtCollection);\n                }\n                else {\n                    _this.performDefferedZoom(chart);\n                }\n            });\n        }\n        else {\n            this.chart.trigger(onZooming, zoomingEventArgs, function () {\n                if (zoomingEventArgs.cancel) {\n                    _this.zoomCancel(axes, _this.zoomCompleteEvtCollection);\n                }\n                else {\n                    _this.performDefferedZoom(chart);\n                    _this.redrawOnZooming(chart, false);\n                }\n            });\n        }\n    };\n    Zoom.prototype.performDefferedZoom = function (chart) {\n        var translateX;\n        var translateY;\n        if (this.zooming.enableDeferredZooming) {\n            translateX = chart.mouseX - chart.mouseDownX;\n            translateY = chart.mouseY - chart.mouseDownY;\n            switch (this.zooming.mode) {\n                case 'Y':\n                    translateX = 0;\n                    break;\n            }\n            this.setTransform(translateX, translateY, null, null, chart, false);\n            this.refreshAxis(chart.chartAxisLayoutPanel, chart, chart.axisCollections);\n            if (chart.enableCanvas) {\n                this.performZoomRedraw(chart);\n            }\n        }\n        else {\n            this.performZoomRedraw(chart);\n        }\n        chart.previousMouseMoveX = chart.mouseX;\n        chart.previousMouseMoveY = chart.mouseY;\n    };\n    /**\n     * Redraw the chart on zooming.\n     *\n     * @returns {void}\n     * @private\n     */\n    Zoom.prototype.performZoomRedraw = function (chart) {\n        var rect = this.zoomingRect;\n        chart.animateSeries = false;\n        if (this.isZoomed) {\n            if (rect.width > 0 && rect.height > 0) {\n                this.performedUI = true;\n                chart.svgObject.setAttribute('cursor', 'auto');\n                this.doZoom(chart, chart.axisCollections, chart.chartAxisLayoutPanel.seriesClipRect);\n                chart.isDoubleTap = false;\n            }\n            else if (chart.disableTrackTooltip) {\n                chart.disableTrackTooltip = false;\n                chart.delayRedraw = false;\n                chart.enableCanvas ? chart.createChartSvg() : chart.removeSvg();\n                chart.refreshAxis();\n                chart.refreshBound();\n            }\n        }\n    };\n    Zoom.prototype.refreshAxis = function (layout, chart, axes) {\n        var mode = chart.zoomSettings.mode;\n        layout.measureAxis(new Rect(chart.initialClipRect.x, chart.initialClipRect.y, chart.initialClipRect.width, chart.initialClipRect.height));\n        axes.map(function (axis, index) {\n            if (axis.orientation === 'Horizontal' && mode !== 'Y') {\n                layout.drawXAxisLabels(axis, index, null, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n            }\n            if (axis.orientation === 'Vertical') {\n                layout.drawYAxisLabels(axis, index, null, (axis.placeNextToAxisLine ? axis.updatedRect : axis.rect));\n            }\n        });\n    };\n    // Rectangular zoom calculated here performed here\n    Zoom.prototype.doZoom = function (chart, axes, bounds) {\n        var _this = this;\n        var zoomRect = this.zoomingRect;\n        var mode = this.zooming.mode;\n        var argsData;\n        this.isPanning = chart.zoomSettings.enablePan || this.isPanning;\n        var zoomedAxisCollections = [];\n        this.zoomCompleteEvtCollection = [];\n        for (var _i = 0, _a = axes; _i < _a.length; _i++) {\n            var axis = _a[_i];\n            argsData = {\n                cancel: false, name: zoomComplete, axis: axis,\n                previousZoomFactor: axis.zoomFactor,\n                previousZoomPosition: axis.zoomPosition,\n                currentZoomFactor: axis.zoomFactor,\n                currentZoomPosition: axis.zoomPosition,\n                previousVisibleRange: axis.visibleRange, currentVisibleRange: null\n            };\n            if (axis.orientation === 'Horizontal') {\n                if (mode !== 'Y') {\n                    argsData.currentZoomPosition += Math.abs((zoomRect.x - bounds.x) / (bounds.width)) * axis.zoomFactor;\n                    argsData.currentZoomFactor *= (zoomRect.width / bounds.width);\n                }\n            }\n            else {\n                argsData.currentZoomPosition += (1 - Math.abs((zoomRect.height + (zoomRect.y - bounds.y)) / (bounds.height)))\n                    * axis.zoomFactor;\n                argsData.currentZoomFactor *= (zoomRect.height / bounds.height);\n            }\n            if (parseFloat(argsData.currentZoomFactor.toFixed(3)) <= 0.001) {\n                argsData.currentZoomFactor = argsData.previousZoomFactor;\n                argsData.currentZoomPosition = argsData.previousZoomPosition;\n            }\n            if (!argsData.cancel) {\n                axis.zoomFactor = argsData.currentZoomFactor;\n                axis.zoomPosition = argsData.currentZoomPosition;\n                this.zoomCompleteEvtCollection.push(argsData);\n            }\n            zoomedAxisCollections.push({\n                zoomFactor: axis.zoomFactor, zoomPosition: axis.zoomFactor, axisName: axis.name,\n                axisRange: axis.visibleRange\n            });\n        }\n        var onZoomingEventArg = { cancel: false, axisCollection: zoomedAxisCollections, name: onZooming };\n        if (!onZoomingEventArg.cancel && this.chart.isBlazor) {\n            this.chart.trigger(onZooming, onZoomingEventArg, function () {\n                if (onZoomingEventArg.cancel) {\n                    _this.zoomCancel(axes, _this.zoomCompleteEvtCollection);\n                }\n                else {\n                    _this.zoomingRect = new Rect(0, 0, 0, 0);\n                    _this.performZoomRedraw(chart);\n                }\n            });\n        }\n        else {\n            this.chart.trigger(onZooming, onZoomingEventArg, function () {\n                if (onZoomingEventArg.cancel) {\n                    _this.zoomCancel(axes, _this.zoomCompleteEvtCollection);\n                }\n                else {\n                    _this.zoomingRect = new Rect(0, 0, 0, 0);\n                    _this.redrawOnZooming(chart);\n                }\n            });\n        }\n    };\n    /** It is used to redraw the chart and trigger zoomComplete event */\n    Zoom.prototype.redrawOnZooming = function (chart, isRedraw, isMouseUp) {\n        if (isRedraw === void 0) { isRedraw = true; }\n        if (isMouseUp === void 0) { isMouseUp = false; }\n        var zoomCompleteCollection = isMouseUp ? this.toolkit.zoomCompleteEvtCollection :\n            this.zoomCompleteEvtCollection;\n        if (isRedraw) {\n            this.performZoomRedraw(chart);\n        }\n        var argsData;\n        for (var i = 0; i < zoomCompleteCollection.length; i++) {\n            if (!zoomCompleteCollection[i].cancel) {\n                argsData = {\n                    cancel: false, name: zoomComplete,\n                    axis: chart.axisCollections[i],\n                    previousZoomFactor: zoomCompleteCollection[i].previousZoomFactor,\n                    previousZoomPosition: zoomCompleteCollection[i].previousZoomPosition,\n                    currentZoomFactor: chart.axisCollections[i].zoomFactor,\n                    currentZoomPosition: chart.axisCollections[i].zoomPosition,\n                    currentVisibleRange: chart.axisCollections[i].visibleRange,\n                    previousVisibleRange: zoomCompleteCollection[i].previousVisibleRange\n                };\n                chart.trigger(zoomComplete, argsData);\n            }\n        }\n    };\n    /**\n     * Function that handles the Mouse wheel zooming.\n     *\n     * @returns {void}\n     * @private\n     */\n    Zoom.prototype.performMouseWheelZooming = function (e, mouseX, mouseY, chart, axes) {\n        var _this = this;\n        var direction = (this.browserName === 'mozilla' && !this.isPointer) ?\n            -(e.detail) / 3 > 0 ? 1 : -1 : (e['wheelDelta'] > 0 ? 1 : -1);\n        var mode = this.zooming.mode;\n        var origin = 0.5;\n        var cumulative;\n        var zoomFactor;\n        var zoomPosition;\n        this.isZoomed = true;\n        this.calculateZoomAxesRange(chart);\n        chart.disableTrackTooltip = true;\n        this.performedUI = true;\n        this.isPanning = chart.zoomSettings.enablePan || this.isPanning;\n        this.zoomCompleteEvtCollection = [];\n        var argsData;\n        var zoomedAxisCollection = [];\n        for (var _i = 0, _a = axes; _i < _a.length; _i++) {\n            var axis = _a[_i];\n            argsData = {\n                cancel: false, name: zoomComplete, axis: axis, previousZoomFactor: axis.zoomFactor,\n                previousZoomPosition: axis.zoomPosition,\n                currentZoomFactor: axis.zoomFactor,\n                currentZoomPosition: axis.zoomPosition, currentVisibleRange: null,\n                previousVisibleRange: axis.visibleRange\n            };\n            if ((axis.orientation === 'Vertical') ||\n                (axis.orientation === 'Horizontal' && mode !== 'Y')) {\n                cumulative = Math.max(Math.max(1 / minMax(axis.zoomFactor, 0, 1), 1) + (0.25 * direction), 1);\n                cumulative = (cumulative > 50000000000) ? 50000000000 : cumulative;\n                if (cumulative >= 1) {\n                    origin = axis.orientation === 'Horizontal' ? mouseX / axis.rect.width : 1 - (mouseY / axis.rect.height);\n                    origin = origin > 1 ? 1 : origin < 0 ? 0 : origin;\n                    zoomFactor = (cumulative === 1) ? 1 : minMax((direction > 0 ? 0.9 : 1.1) / cumulative, 0, 1);\n                    zoomPosition = (cumulative === 1) ? 0 : axis.zoomPosition + ((axis.zoomFactor - zoomFactor) * origin);\n                    if (axis.zoomPosition !== zoomPosition || axis.zoomFactor !== zoomFactor) {\n                        zoomFactor = (zoomPosition + zoomFactor) > 1 ? (1 - zoomPosition) : zoomFactor;\n                    }\n                    argsData.currentZoomFactor = zoomFactor;\n                    argsData.currentZoomPosition = zoomPosition;\n                }\n                if (argsData.currentZoomFactor === argsData.previousZoomFactor && argsData.currentZoomPosition === argsData.previousZoomPosition) {\n                    chart.disableTrackTooltip = false;\n                }\n                if (!argsData.cancel) {\n                    axis.zoomFactor = argsData.currentZoomFactor;\n                    axis.zoomPosition = argsData.currentZoomPosition;\n                    this.zoomCompleteEvtCollection.push(argsData);\n                }\n            }\n            zoomedAxisCollection.push({\n                zoomFactor: axis.zoomFactor, zoomPosition: axis.zoomFactor, axisName: axis.name,\n                axisRange: axis.visibleRange\n            });\n        }\n        var onZoomingEventArgs = { cancel: false, axisCollection: zoomedAxisCollection, name: onZooming };\n        if (!onZoomingEventArgs.cancel && this.chart.isBlazor) {\n            this.chart.trigger(onZooming, onZoomingEventArgs, function () {\n                if (onZoomingEventArgs.cancel) {\n                    _this.zoomCancel(axes, _this.zoomCompleteEvtCollection);\n                }\n                else {\n                    _this.performZoomRedraw(chart);\n                }\n            });\n        }\n        else {\n            this.chart.trigger(onZooming, onZoomingEventArgs, function () {\n                if (onZoomingEventArgs.cancel) {\n                    _this.zoomCancel(axes, _this.zoomCompleteEvtCollection);\n                }\n                else {\n                    _this.redrawOnZooming(chart);\n                }\n            });\n        }\n    };\n    /**\n     * Function that handles the Pinch zooming.\n     *\n     * @returns {void}\n     * @private\n     */\n    Zoom.prototype.performPinchZooming = function (e, chart) {\n        if ((this.zoomingRect.width > 0 && this.zoomingRect.height > 0) || (chart.startMove && chart.crosshair.enable)) {\n            return false;\n        }\n        this.calculateZoomAxesRange(chart);\n        this.isZoomed = true;\n        this.isPanning = true;\n        this.performedUI = true;\n        this.offset = !chart.delayRedraw ? chart.chartAxisLayoutPanel.seriesClipRect : this.offset;\n        chart.delayRedraw = true;\n        chart.disableTrackTooltip = true;\n        var elementOffset = chart.element.getBoundingClientRect();\n        var touchDown = this.touchStartList;\n        var touchMove = this.touchMoveList;\n        var touch0StartX = touchDown[0].pageX - elementOffset.left;\n        var touch0StartY = touchDown[0].pageY - elementOffset.top;\n        var touch0EndX = touchMove[0].pageX - elementOffset.left;\n        var touch0EndY = touchMove[0].pageY - elementOffset.top;\n        var touch1StartX = touchDown[1].pageX - elementOffset.left;\n        var touch1StartY = touchDown[1].pageY - elementOffset.top;\n        var touch1EndX = touchMove[1].pageX - elementOffset.left;\n        var touch1EndY = touchMove[1].pageY - elementOffset.top;\n        var scaleX = Math.abs(touch0EndX - touch1EndX) / Math.abs(touch0StartX - touch1StartX);\n        var scaleY = Math.abs(touch0EndY - touch1EndY) / Math.abs(touch0StartY - touch1StartY);\n        var clipX = ((this.offset.x - touch0EndX) / scaleX) + touch0StartX;\n        var clipY = ((this.offset.y - touch0EndY) / scaleY) + touch0StartY;\n        var pinchRect = new Rect(clipX, clipY, this.offset.width / scaleX, this.offset.height / scaleY);\n        var translateXValue = (touch0EndX - (scaleX * touch0StartX));\n        var translateYValue = (touch0EndY - (scaleY * touch0StartY));\n        if (!isNaN(scaleX - scaleX) && !isNaN(scaleY - scaleY)) {\n            switch (this.zooming.mode) {\n                case 'XY':\n                case 'X':\n                    this.setTransform(translateXValue, translateYValue, scaleX, scaleY, chart, true);\n                    break;\n                case 'Y':\n                    this.setTransform(0, translateYValue, 1, scaleY, chart, true);\n                    break;\n            }\n        }\n        if (!this.calculatePinchZoomFactor(chart, pinchRect)) {\n            this.refreshAxis(chart.chartAxisLayoutPanel, chart, chart.axisCollections);\n            this.redrawOnZooming(chart, false);\n        }\n        return true;\n    };\n    Zoom.prototype.calculatePinchZoomFactor = function (chart, pinchRect) {\n        var mode = this.zooming.mode;\n        var selectionMin;\n        var selectionMax;\n        var rangeMin;\n        var rangeMax;\n        var value;\n        var axisTrans;\n        var argsData;\n        var currentZF;\n        var currentZP;\n        var zoomedAxisCollection = [];\n        this.zoomCompleteEvtCollection = [];\n        for (var index = 0; index < chart.axisCollections.length; index++) {\n            var axis = chart.axisCollections[index];\n            if ((axis.orientation === 'Horizontal' && mode !== 'Y') ||\n                (axis.orientation === 'Vertical')) {\n                currentZF = axis.zoomFactor;\n                currentZP = axis.zoomPosition;\n                argsData = {\n                    cancel: false, name: zoomComplete, axis: axis, previousZoomFactor: axis.zoomFactor,\n                    previousZoomPosition: axis.zoomPosition, currentZoomFactor: currentZF,\n                    currentZoomPosition: currentZP, previousVisibleRange: axis.visibleRange,\n                    currentVisibleRange: null\n                };\n                if (axis.orientation === 'Horizontal') {\n                    value = pinchRect.x - this.offset.x;\n                    axisTrans = axis.rect.width / this.zoomAxes[index].delta;\n                    rangeMin = value / axisTrans + this.zoomAxes[index].min;\n                    value = pinchRect.x + pinchRect.width - this.offset.x;\n                    rangeMax = value / axisTrans + this.zoomAxes[index].min;\n                }\n                else {\n                    value = pinchRect.y - this.offset.y;\n                    axisTrans = axis.rect.height / this.zoomAxes[index].delta;\n                    rangeMin = (value * -1 + axis.rect.height) / axisTrans + this.zoomAxes[index].min;\n                    value = pinchRect.y + pinchRect.height - this.offset.y;\n                    rangeMax = (value * -1 + axis.rect.height) / axisTrans + this.zoomAxes[index].min;\n                }\n                selectionMin = Math.min(rangeMin, rangeMax);\n                selectionMax = Math.max(rangeMin, rangeMax);\n                currentZP = (selectionMin - this.zoomAxes[index].actualMin) / this.zoomAxes[index].actualDelta;\n                currentZF = (selectionMax - selectionMin) / this.zoomAxes[index].actualDelta;\n                argsData.currentZoomPosition = currentZP < 0 ? 0 : currentZP;\n                argsData.currentZoomFactor = currentZF > 1 ? 1 : (currentZF < 0.03) ? 0.03 : currentZF;\n                if (!argsData.cancel) {\n                    axis.zoomFactor = argsData.currentZoomFactor;\n                    axis.zoomPosition = argsData.currentZoomPosition;\n                    this.zoomCompleteEvtCollection.push(argsData);\n                }\n                zoomedAxisCollection.push({\n                    zoomFactor: axis.zoomFactor, zoomPosition: axis.zoomFactor, axisName: axis.name,\n                    axisRange: axis.visibleRange\n                });\n            }\n        }\n        var onZoomingEventArgs = { cancel: false, axisCollection: zoomedAxisCollection, name: onZooming };\n        if (!onZoomingEventArgs.cancel) {\n            this.chart.trigger(onZooming, onZoomingEventArgs);\n            if (onZoomingEventArgs.cancel) {\n                this.zoomCancel(chart.axisCollections, this.zoomCompleteEvtCollection);\n                return true;\n            }\n        }\n        return false;\n    };\n    // Series transformation style applied here.\n    Zoom.prototype.setTransform = function (transX, transY, scaleX, scaleY, chart, isPinch) {\n        if (!chart.enableCanvas) {\n            chart.seriesElements.setAttribute('clip-path', 'url(#' + this.elementId + '_ChartAreaClipRect_)');\n        }\n        if (chart.indicatorElements) {\n            chart.indicatorElements.setAttribute('clip-path', 'url(#' + this.elementId + '_ChartAreaClipRect_)');\n        }\n        var translate;\n        var xAxisLoc;\n        var yAxisLoc;\n        var element;\n        if (transX !== null && transY !== null) {\n            for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n                var value = _a[_i];\n                xAxisLoc = chart.requireInvertedAxis ? value.yAxis.rect.x : value.xAxis.rect.x;\n                yAxisLoc = chart.requireInvertedAxis ? value.xAxis.rect.y : value.yAxis.rect.y;\n                translate = 'translate(' + (transX + (isPinch ? (scaleX * xAxisLoc) : xAxisLoc)) +\n                    ',' + (transY + (isPinch ? (scaleY * yAxisLoc) : yAxisLoc)) + ')';\n                translate = (scaleX || scaleY) ? translate + ' scale(' + scaleX + ' ' + scaleY + ')' : translate;\n                if (value.visible) {\n                    if (value.category === 'Indicator') {\n                        value.seriesElement.parentNode.setAttribute('transform', translate);\n                    }\n                    else {\n                        if (!chart.enableCanvas) {\n                            value.seriesElement.setAttribute('transform', translate);\n                        }\n                    }\n                    element = getElement(chart.element.id + '_Series_' + value.index + '_DataLabelCollections');\n                    if (value.errorBarElement) {\n                        value.errorBarElement.setAttribute('transform', translate);\n                    }\n                    if (value.symbolElement) {\n                        value.symbolElement.setAttribute('transform', translate);\n                    }\n                    if (value.textElement) {\n                        value.textElement.setAttribute('visibility', 'hidden');\n                        value.shapeElement.setAttribute('visibility', 'hidden');\n                    }\n                    if (element) {\n                        element.style.visibility = 'hidden';\n                    }\n                }\n            }\n        }\n    };\n    Zoom.prototype.calculateZoomAxesRange = function (chart) {\n        var range;\n        var axisRange;\n        for (var index = 0; index < chart.axisCollections.length; index++) {\n            var axis = chart.axisCollections[index];\n            axisRange = axis.visibleRange;\n            if (this.zoomAxes[index]) {\n                if (!chart.delayRedraw) {\n                    this.zoomAxes[index].min = axisRange.min;\n                    this.zoomAxes[index].delta = axisRange.delta;\n                }\n            }\n            else {\n                range = {\n                    actualMin: axis.actualRange.min,\n                    actualDelta: axis.actualRange.delta,\n                    min: axisRange.min,\n                    delta: axisRange.delta\n                };\n                this.zoomAxes[index] = range;\n            }\n        }\n    };\n    // Zooming Toolkit created here\n    Zoom.prototype.showZoomingToolkit = function (chart) {\n        var toolboxItems = this.zooming.toolbarItems;\n        var areaBounds = chart.chartAxisLayoutPanel.seriesClipRect;\n        var spacing = 10;\n        var render = chart.svgRenderer;\n        var length = this.isDevice ? 1 : toolboxItems.length;\n        var iconSize = this.isDevice ? measureText('Reset Zoom', { size: '12px' }, { size: '12px', fontStyle: 'Normal', fontWeight: '400', fontFamily: 'Segoe UI' }).width : 16;\n        var height = this.isDevice ? measureText('Reset Zoom', { size: '12px' }, { size: '12px', fontStyle: 'Normal', fontWeight: '400', fontFamily: 'Segoe UI' }).height : 22;\n        var width = (length * iconSize) + ((length + 1) * spacing) + ((length - 1) * spacing);\n        var transX = areaBounds.x + areaBounds.width - width - spacing;\n        var transY = (areaBounds.y + spacing);\n        var xPosition = spacing;\n        var toolkit = this.toolkit;\n        var element;\n        var shadowElement = '<filter id=\"chart_shadow\" height=\"130%\"><feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"5\"/>';\n        shadowElement += '<feOffset dx=\"-3\" dy=\"4\" result=\"offsetblur\"/><feComponentTransfer><feFuncA type=\"linear\" slope=\"1\"/>';\n        shadowElement += '</feComponentTransfer><feMerge><feMergeNode/><feMergeNode in=\"SourceGraphic\"/></feMerge></filter>';\n        if (length === 0 || getElement(this.elementId + '_Zooming_KitCollection')) {\n            return false;\n        }\n        var defElement = render.createDefs();\n        toolboxItems = this.isDevice ? ['Reset'] : toolboxItems;\n        defElement.innerHTML = shadowElement;\n        this.toolkitElements = render.createGroup({\n            id: this.elementId + '_Zooming_KitCollection',\n            transform: 'translate(' + transX + ',' + transY + ')'\n        });\n        this.toolkitElements.appendChild(defElement);\n        var zoomFillColor = this.chart.theme === 'Tailwind' ? '#F3F4F6' : this.chart.theme === 'Fluent' ? '#F3F2F1' :\n            (this.chart.theme === 'Material3' ? '#FFFFFF' : this.chart.theme === 'Material3Dark' ? '#1C1B1F' : '#fafafa');\n        this.toolkitElements.appendChild(render.drawRectangle(new RectOption(this.elementId + '_Zooming_Rect', zoomFillColor, { color: 'transparent', width: 1 }, 1, new Rect(0, 0, width, (height + (spacing * 2))), 4, 4)));\n        var outerElement = render.drawRectangle(new RectOption(this.elementId + '_Zooming_Rect', zoomFillColor, { color: 'transparent', width: 1 }, 0.1, new Rect(0, 0, width, (height + (spacing * 2))), 4, 4));\n        if (this.chart.theme === 'Tailwind' || this.chart.theme === 'TailwindDark') {\n            outerElement.setAttribute('box-shadow', '0px 1px 2px rgba(0, 0, 0, 0.06), 0px 1px 3px rgba(0, 0, 0, 0.1)');\n        }\n        else if (this.chart.theme === 'Material3' || this.chart.theme === 'Material3Dark') {\n            outerElement.setAttribute('filter', 'drop-shadow(0px 1px 3px rgba(0, 0, 0, 0.15)) drop-shadow(0px 1px 2px rgba(0, 0, 0, 0.3))');\n            outerElement.setAttribute('fill', this.chart.theme === 'Material3' ? '#FFFFFF' : '#1C1B1F');\n            outerElement.setAttribute('rx', '4px');\n            outerElement.setAttribute('ry', '4px');\n            outerElement.setAttribute('opacity', '1');\n        }\n        else {\n            outerElement.setAttribute('filter', 'url(#chart_shadow)');\n        }\n        this.toolkitElements.appendChild(outerElement);\n        var currentItem;\n        var panIcon = false;\n        for (var i = 1; i <= length; i++) {\n            currentItem = toolboxItems[i - 1];\n            element = render.createGroup({\n                transform: 'translate(' + xPosition + ',' + (this.isDevice ? spacing : (spacing + 3)) + ')'\n            });\n            // for desktop toolkit hight is 32 and top padding is 8 icon size 16\n            switch (currentItem) {\n                case 'Pan':\n                    toolkit.createPanButton(element, this.toolkitElements);\n                    panIcon = true;\n                    break;\n                case 'Zoom':\n                    toolkit.createZoomButton(element, this.toolkitElements);\n                    break;\n                case 'ZoomIn':\n                    toolkit.createZoomInButton(element, this.toolkitElements, chart);\n                    break;\n                case 'ZoomOut':\n                    toolkit.createZoomOutButton(element, this.toolkitElements, chart);\n                    break;\n                case 'Reset':\n                    toolkit.createResetButton(element, this.toolkitElements, chart, this.isDevice);\n                    break;\n            }\n            xPosition += iconSize + (spacing * 2);\n        }\n        this.toolkitElements.setAttribute('opacity', this.isDevice ? '1' : '' + this.zoomkitOpacity);\n        this.toolkitElements.setAttribute('cursor', 'auto');\n        if (chart.enableCanvas) {\n            var zoomDiv = document.createElement('div');\n            zoomDiv.id = chart.element.id + '_zoom';\n            zoomDiv.style.cssText = 'position:absolute; z-index:1';\n            var zoomheight = chart.availableSize.height / 2;\n            var svg = chart.svgRenderer.createSvg({\n                id: chart.element.id + '_zoomkit_svg',\n                width: chart.availableSize.width,\n                height: zoomheight\n            });\n            svg.style.position = 'absolute';\n            svg.appendChild(this.toolkitElements);\n            zoomDiv.appendChild(svg);\n            document.getElementById(this.elementId + '_Secondary_Element').appendChild(zoomDiv);\n        }\n        else {\n            chart.svgObject.appendChild(this.toolkitElements);\n        }\n        if (!this.isDevice) {\n            EventHandler.add(this.toolkitElements, 'mousemove touchstart', this.zoomToolkitMove, this);\n            EventHandler.add(this.toolkitElements, 'mouseleave touchend', this.zoomToolkitLeave, this);\n            if (this.isPanning && panIcon) {\n                toolkit.pan();\n            }\n        }\n        return true;\n    };\n    /**\n     * To the show the zooming toolkit.\n     *\n     * @returns {void}\n     * @private\n     */\n    Zoom.prototype.applyZoomToolkit = function (chart, axes) {\n        var showToolkit = this.isAxisZoomed(axes);\n        if (showToolkit) {\n            this.showZoomingToolkit(chart);\n            this.isZoomed = true;\n        }\n        else if (chart.zoomSettings.showToolbar) {\n            this.isZoomed = showToolkit;\n            this.showZoomingToolkit(chart);\n        }\n        else {\n            this.toolkit.removeTooltip();\n            this.isPanning = false;\n            this.isZoomed = false;\n            chart.isZoomed = false;\n            chart.svgObject.setAttribute('cursor', 'auto');\n        }\n    };\n    /**\n     * To cancel zoom event.\n     *\n     * @returns {void}\n     * @public\n     */\n    Zoom.prototype.zoomCancel = function (axes, zoomCompleteEventCollection) {\n        for (var _i = 0, _a = zoomCompleteEventCollection; _i < _a.length; _i++) {\n            var zoomCompleteEvent = _a[_i];\n            for (var _b = 0, _c = axes; _b < _c.length; _b++) {\n                var axis = _c[_b];\n                if (axis.name === zoomCompleteEvent.axis.name) {\n                    axis.zoomFactor = zoomCompleteEvent.previousZoomFactor;\n                    axis.zoomPosition = zoomCompleteEvent.previousZoomPosition;\n                    axis.visibleRange = zoomCompleteEvent.previousVisibleRange;\n                    break;\n                }\n            }\n        }\n    };\n    /**\n     * Return boolean property to show zooming toolkit.\n     *\n     * @returns {void}\n     * @private\n     */\n    Zoom.prototype.isAxisZoomed = function (axes) {\n        var showToolkit = false;\n        for (var _i = 0, _a = axes; _i < _a.length; _i++) {\n            var axis = _a[_i];\n            showToolkit = (showToolkit || (axis.zoomFactor !== 1 || axis.zoomPosition !== 0));\n        }\n        return showToolkit;\n    };\n    Zoom.prototype.zoomToolkitMove = function () {\n        var element = this.toolkitElements;\n        this.zoomkitOpacity = 1;\n        element.setAttribute('opacity', '' + this.zoomkitOpacity);\n        return false;\n    };\n    Zoom.prototype.zoomToolkitLeave = function () {\n        var element = this.toolkitElements;\n        this.zoomkitOpacity = 1;\n        element.setAttribute('opacity', '' + this.zoomkitOpacity);\n        return false;\n    };\n    /**\n     * @hidden\n     */\n    Zoom.prototype.addEventListener = function () {\n        if (this.chart.isDestroyed) {\n            return;\n        }\n        EventHandler.add(this.chart.element, this.wheelEvent, this.chartMouseWheel, this);\n        this.chart.on(Browser.touchMoveEvent, this.mouseMoveHandler, this);\n        this.chart.on(Browser.touchStartEvent, this.mouseDownHandler, this);\n        this.chart.on(Browser.touchEndEvent, this.mouseUpHandler, this);\n        this.chart.on(this.cancelEvent, this.mouseCancelHandler, this);\n    };\n    /**\n     * @hidden\n     */\n    Zoom.prototype.removeEventListener = function () {\n        if (this.chart.isDestroyed) {\n            return;\n        }\n        EventHandler.remove(this.chart.element, this.wheelEvent, this.chartMouseWheel);\n        this.chart.off(Browser.touchMoveEvent, this.mouseMoveHandler);\n        this.chart.off(Browser.touchStartEvent, this.mouseDownHandler);\n        this.chart.off(Browser.touchEndEvent, this.mouseUpHandler);\n        this.chart.off(this.cancelEvent, this.mouseCancelHandler);\n    };\n    /**\n     * Handles the mouse wheel on chart.\n     *\n     * @returns {boolean} false\n     * @private\n     */\n    Zoom.prototype.chartMouseWheel = function (e) {\n        var chart = this.chart;\n        var offset = chart.element.getBoundingClientRect();\n        var svgRect = getElement(chart.svgId).getBoundingClientRect();\n        var mouseX = (e.clientX - offset.left) - Math.max(svgRect.left - offset.left, 0);\n        var mouseY = (e.clientY - offset.top) - Math.max(svgRect.top - offset.top, 0);\n        if (this.zooming.enableMouseWheelZooming &&\n            withInBounds(mouseX, mouseY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n            e.preventDefault();\n            this.performMouseWheelZooming(e, mouseX, mouseY, chart, chart.axisCollections);\n        }\n        return false;\n    };\n    /**\n     * @hidden\n     */\n    Zoom.prototype.mouseMoveHandler = function (e) {\n        //Zooming for chart\n        var chart = this.chart;\n        var touches = null;\n        if (e.type === 'touchmove') {\n            if (e.preventDefault && this.isIOS &&\n                (this.isPanning || (chart.isDoubleTap)\n                    || (this.zooming.enablePinchZooming && this.touchStartList.length > 1))) {\n                e.preventDefault();\n            }\n            touches = e.touches;\n        }\n        if (chart.isChartDrag) {\n            if (chart.isTouch) {\n                this.touchMoveList = this.addTouchPointer(this.touchMoveList, e, touches);\n                if (this.zooming.enablePinchZooming && this.touchMoveList.length > 1\n                    && this.touchStartList.length > 1) {\n                    this.performPinchZooming(e, chart);\n                }\n            }\n            this.renderZooming(e, chart, chart.isTouch);\n        }\n    };\n    /**\n     * @hidden\n     */\n    Zoom.prototype.mouseDownHandler = function (e) {\n        //Zooming for chart\n        var chart = this.chart;\n        var touches = null;\n        var target;\n        if (e.type === 'touchstart') {\n            touches = e.touches;\n            target = e.target;\n        }\n        else {\n            target = e.target;\n        }\n        if (target.id.indexOf(chart.element.id + '_Zooming_') === -1 &&\n            (chart.zoomSettings.enablePinchZooming || chart.zoomSettings.enableSelectionZooming) &&\n            withInBounds(chart.previousMouseMoveX, chart.previousMouseMoveY, chart.chartAxisLayoutPanel.seriesClipRect)) {\n            chart.isChartDrag = true;\n        }\n        if (chart.isTouch) {\n            this.touchStartList = this.addTouchPointer(this.touchStartList, e, touches);\n        }\n    };\n    /**\n     * @hidden\n     */\n    Zoom.prototype.mouseUpHandler = function (e) {\n        var chart = this.chart;\n        var performZoomRedraw = e.target.id.indexOf(chart.element.id + '_ZoomOut_') === -1 ||\n            e.target.id.indexOf(chart.element.id + '_ZoomIn_') === -1;\n        if (chart.isChartDrag || performZoomRedraw) {\n            this.redrawOnZooming(chart, true, true);\n        }\n        if (chart.isTouch) {\n            if (chart.isDoubleTap && withInBounds(chart.mouseX, chart.mouseY, chart.chartAxisLayoutPanel.seriesClipRect)\n                && this.touchStartList.length === 1 && this.isZoomed) {\n                this.toolkit.reset(e);\n            }\n            this.touchStartList = [];\n            chart.isDoubleTap = false;\n        }\n    };\n    /**\n     * @hidden\n     */\n    Zoom.prototype.mouseCancelHandler = function () {\n        if (this.isZoomed) {\n            this.performZoomRedraw(this.chart);\n        }\n        this.pinchTarget = null;\n        this.touchStartList = [];\n        this.touchMoveList = [];\n    };\n    /**\n     * Handles the touch pointer.\n     *\n     * @returns {ITouches[]} touchList collection\n     * @private\n     */\n    Zoom.prototype.addTouchPointer = function (touchList, e, touches) {\n        if (touches) {\n            touchList = [];\n            for (var i = 0, length_1 = touches.length; i < length_1; i++) {\n                touchList.push({ pageX: touches[i].clientX, pageY: touches[i].clientY, pointerId: null });\n            }\n        }\n        else {\n            touchList = touchList ? touchList : [];\n            if (touchList.length === 0) {\n                touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n            }\n            else {\n                for (var i = 0, length_2 = touchList.length; i < length_2; i++) {\n                    if (touchList[i].pointerId === e.pointerId) {\n                        touchList[i] = { pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId };\n                    }\n                    else {\n                        touchList.push({ pageX: e.clientX, pageY: e.clientY, pointerId: e.pointerId });\n                    }\n                }\n            }\n        }\n        return touchList;\n    };\n    /**\n     * Get module name.\n     */\n    Zoom.prototype.getModuleName = function () {\n        // Returns te module name\n        return 'Zoom';\n    };\n    /**\n     * To destroy the zooming.\n     *\n     * @returns {void}\n     * @private\n     */\n    Zoom.prototype.destroy = function () {\n        // Destroy method performed here\n        this.removeEventListener();\n    };\n    return Zoom;\n}());\nexport { Zoom };\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var ButtonsDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-buttons';\n        }\n    }\n});\nexport var ButtonsPlugin = {\n    name: 'e-buttons',\n    install: function (Vue) {\n        Vue.component(ButtonsPlugin.name, ButtonsDirective);\n    }\n};\n/**\n * 'e-button' directive represent a button of Vue Dialog\n * It must be contained in a Dialog component(`ejs-dialog`).\n * ```html\n * <ejs-Dialog id='dialog' :showCloseIcon=true>\n *   <e-buttons>\n *    <e-dialogbutton :buttonModal='okButton'></e-dialogbutton>\n *    <e-dialogbutton :buttonModal='cancelButton'></e-dialogbutton>\n *   </e-buttons>\n * </ejs-Dialog>\n * ```\n */\nexport var DialogButtonDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-dialogbutton';\n        }\n    }\n});\nexport var DialogButtonPlugin = {\n    name: 'e-dialogbutton',\n    install: function (Vue) {\n        Vue.component(DialogButtonPlugin.name, DialogButtonDirective);\n    }\n};\n","import { ComponentBase, gh, getProps, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { isUndefined } from '@syncfusion/ej2-base';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { ButtonsDirective, DialogButtonDirective, ButtonsPlugin, DialogButtonPlugin } from './buttons.directive';\nexport var properties = ['isLazyUpdate', 'plugins', 'allowDragging', 'animationSettings', 'buttons', 'closeOnEscape', 'content', 'cssClass', 'enableHtmlSanitizer', 'enablePersistence', 'enableResize', 'enableRtl', 'footerTemplate', 'header', 'height', 'isModal', 'locale', 'minHeight', 'position', 'resizeHandles', 'showCloseIcon', 'target', 'visible', 'width', 'zIndex', 'beforeClose', 'beforeOpen', 'beforeSanitizeHtml', 'close', 'created', 'destroyed', 'drag', 'dragStart', 'dragStop', 'open', 'overlayClick', 'resizeStart', 'resizeStop', 'resizing'];\nexport var modelProps = ['visible'];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0], watch = testProp[1], emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged', 'update:modelValue');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n    var props_1 = modelProps_1[_i];\n    emitProbs.push('update:' + props_1);\n}\n/**\n * Represents the VueJS Dialog component\n * ```html\n * <ejs-dialog></ejs-dialog>\n * ```\n */\nexport var DialogComponent = vueDefineComponent({\n    name: 'DialogComponent',\n    mixins: [ComponentBase],\n    props: props,\n    watch: watch,\n    emits: emitProbs,\n    model: { event: 'modelchanged' },\n    provide: function () { return { custom: this.custom }; },\n    data: function () {\n        return {\n            ej2Instances: new Dialog({}),\n            propKeys: properties,\n            models: modelProps,\n            hasChildDirective: true,\n            hasInjectedModules: false,\n            tagMapper: { \"e-buttons\": \"e-dialogbutton\" },\n            tagNameMapper: {},\n            isVue3: !isExecute,\n            templateCollection: {},\n        };\n    },\n    created: function () {\n        this.ej2Instances._trigger = this.ej2Instances.trigger;\n        this.ej2Instances.trigger = this.trigger;\n        this.bindProperties();\n        this.ej2Instances._setProperties = this.ej2Instances.setProperties;\n        this.ej2Instances.setProperties = this.setProperties;\n        this.ej2Instances.clearTemplate = this.clearTemplate;\n        this.updated = this.updated;\n    },\n    render: function (createElement) {\n        var h = !isExecute ? gh : createElement;\n        var slots = null;\n        if (!isNullOrUndefined(this.$slots.default)) {\n            slots = !isExecute ? this.$slots.default() : this.$slots.default;\n        }\n        return h('div', slots);\n    },\n    methods: {\n        clearTemplate: function (templateNames) {\n            if (!templateNames) {\n                templateNames = Object.keys(this.templateCollection || {});\n            }\n            if (templateNames.length && this.templateCollection) {\n                for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n                    var tempName = templateNames_1[_i];\n                    var elementCollection = this.templateCollection[tempName];\n                    if (elementCollection && elementCollection.length) {\n                        for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n                            var ele = elementCollection_1[_a];\n                            var destroy = getValue('__vue__.$destroy', ele);\n                            if (destroy) {\n                                ele.__vue__.$destroy();\n                            }\n                            if (ele.innerHTML) {\n                                ele.innerHTML = '';\n                            }\n                        }\n                        delete this.templateCollection[tempName];\n                    }\n                }\n            }\n        },\n        setProperties: function (prop, muteOnChange) {\n            var _this = this;\n            if (this.isVue3) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if (this.ej2Instances && this.ej2Instances._setProperties) {\n                this.ej2Instances._setProperties(prop, muteOnChange);\n            }\n            if (prop && this.models && this.models.length) {\n                Object.keys(prop).map(function (key) {\n                    _this.models.map(function (model) {\n                        if ((key === model) && !(/datasource/i.test(key))) {\n                            if (_this.isVue3) {\n                                _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n                            }\n                            else {\n                                _this.$emit('update:' + key, prop[key]);\n                                _this.$emit('modelchanged', prop[key]);\n                            }\n                        }\n                    });\n                });\n            }\n        },\n        trigger: function (eventName, eventProp, successHandler) {\n            if (!isExecute) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if ((eventName === 'change' || eventName === 'input') && this.models && (this.models.length !== 0)) {\n                var key = this.models.toString().match(/checked|value/) || [];\n                var propKey = key[0];\n                if (eventProp && key && !isUndefined(eventProp[propKey])) {\n                    if (!isExecute) {\n                        this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('update:modelValue', eventProp[propKey]);\n                    }\n                    else {\n                        if (eventName === 'change' || (this.$props && !this.$props.isLazyUpdate)) {\n                            this.$emit('update:' + propKey, eventProp[propKey]);\n                            this.$emit('modelchanged', eventProp[propKey]);\n                        }\n                    }\n                }\n            }\n            else if ((eventName === 'actionBegin' && eventProp.requestType === 'dateNavigate') && this.models && (this.models.length !== 0)) {\n                var key = this.models.toString().match(/currentView|selectedDate/) || [];\n                var propKey = key[0];\n                if (eventProp && key && !isUndefined(eventProp[propKey])) {\n                    if (!isExecute) {\n                        this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n                    }\n                    else {\n                        this.$emit('update:' + propKey, eventProp[propKey]);\n                        this.$emit('modelchanged', eventProp[propKey]);\n                    }\n                }\n            }\n            if ((this.ej2Instances && this.ej2Instances._trigger)) {\n                this.ej2Instances._trigger(eventName, eventProp, successHandler);\n            }\n        },\n        custom: function () {\n            this.updated();\n        },\n        getButtons: function (index) {\n            return this.ej2Instances.getButtons(index);\n        },\n        getDimension: function () {\n            return this.ej2Instances.getDimension();\n        },\n        hide: function (event) {\n            return this.ej2Instances.hide(event);\n        },\n        refreshPosition: function () {\n            return this.ej2Instances.refreshPosition();\n        },\n        sanitizeHelper: function (value) {\n            return this.ej2Instances.sanitizeHelper(value);\n        },\n        show: function (isFullScreen) {\n            return this.ej2Instances.show(isFullScreen);\n        },\n    }\n});\nexport var DialogPlugin = {\n    name: 'ejs-dialog',\n    install: function (Vue) {\n        Vue.component(DialogPlugin.name, DialogComponent);\n        Vue.component(DialogButtonPlugin.name, DialogButtonDirective);\n        Vue.component(ButtonsPlugin.name, ButtonsDirective);\n    }\n};\n","//! moment.js locale configuration\n//! locale : Arabic (Kuwait) [ar-kw]\n//! author : Nusret Parlak: https://github.com/nusretparlak\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arKw = moment.defineLocale('ar-kw', {\n        months: 'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_ماي_يونيو_يوليوز_غشت_شتنبر_أكتوبر_نونبر_دجنبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإتنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'احد_اتنين_ثلاثاء_اربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return arKw;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * Worksheets class\n * @private\n */\nvar Worksheets = /** @class */ (function (_super) {\n    __extends(Worksheets, _super);\n    function Worksheets() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    return Worksheets;\n}(Array));\nexport { Worksheets };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * Worksheet class\n * @private\n */\nvar Worksheet = /** @class */ (function () {\n    function Worksheet() {\n        this.isSummaryRowBelow = true;\n        this.showGridLines = true;\n        this.enableRtl = false;\n    }\n    return Worksheet;\n}());\nexport { Worksheet };\n/**\n * Hyperlink class\n * @private\n */\nvar HyperLink = /** @class */ (function () {\n    function HyperLink() {\n    }\n    return HyperLink;\n}());\nexport { HyperLink };\n/**\n * Grouping class\n * @private\n */\nvar Grouping = /** @class */ (function () {\n    function Grouping() {\n    }\n    return Grouping;\n}());\nexport { Grouping };\n/**\n * FreezePane class\n * @private\n */\nvar FreezePane = /** @class */ (function () {\n    function FreezePane() {\n    }\n    return FreezePane;\n}());\nexport { FreezePane };\n/**\n * MergeCell\n * @private\n */\nvar MergeCell = /** @class */ (function () {\n    function MergeCell() {\n    }\n    return MergeCell;\n}());\nexport { MergeCell };\n/**\n * MergeCells class\n * @private\n */\nvar MergeCells = /** @class */ (function (_super) {\n    __extends(MergeCells, _super);\n    function MergeCells() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.add = function (mergeCell) {\n            var inserted = false;\n            var count = 0;\n            for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n                var mCell = _a[_i];\n                if (MergeCells.isIntersecting(mCell, mergeCell)) {\n                    var intersectingCell = new MergeCell();\n                    intersectingCell.x = Math.min(mCell.x, mergeCell.x);\n                    intersectingCell.y = Math.min(mCell.Y, mergeCell.y);\n                    intersectingCell.width = Math.max(mCell.Width + mCell.X, mergeCell.width + mergeCell.x);\n                    intersectingCell.height = Math.max(mCell.Height + mCell.Y, mergeCell.height + mergeCell.y);\n                    intersectingCell.ref = (_this[count].ref.split(':')[0]) + ':' + (mergeCell.ref.split(':')[1]);\n                    _this[count] = intersectingCell;\n                    mergeCell = intersectingCell;\n                    inserted = true;\n                }\n                count++;\n            }\n            if (!inserted) {\n                _this.push(mergeCell);\n            }\n            return mergeCell;\n        };\n        return _this;\n    }\n    MergeCells.isIntersecting = function (base, compare) {\n        return (base.x <= compare.x + compare.width)\n            && (compare.x <= base.x + base.width)\n            && (base.y <= compare.y + compare.height)\n            && (compare.y <= base.y + base.height);\n    };\n    return MergeCells;\n}(Array));\nexport { MergeCells };\n","/**\n * CellStyle class\n * @private\n */\nvar CellStyle = /** @class */ (function () {\n    function CellStyle() {\n        this.numFmtId = 0;\n        this.backColor = 'none';\n        this.fontName = 'Calibri';\n        this.fontSize = 10.5;\n        this.fontColor = '#000000';\n        this.italic = false;\n        this.bold = false;\n        this.underline = false;\n        this.strikeThrough = false;\n        this.wrapText = false;\n        this.hAlign = 'general';\n        this.vAlign = 'bottom';\n        this.indent = 0;\n        this.rotation = 0;\n        this.numberFormat = 'GENERAL';\n        this.type = 'datetime';\n        this.borders = new Borders();\n        this.isGlobalStyle = false;\n    }\n    return CellStyle;\n}());\nexport { CellStyle };\n/**\n * Font Class\n * @private\n */\nvar Font = /** @class */ (function () {\n    function Font() {\n        this.sz = 10.5;\n        this.name = 'Calibri';\n        this.u = false;\n        this.b = false;\n        this.i = false;\n        this.color = 'FF000000';\n        this.strike = false;\n    }\n    return Font;\n}());\nexport { Font };\n/**\n * CellXfs class\n * @private\n */\nvar CellXfs = /** @class */ (function () {\n    function CellXfs() {\n    }\n    return CellXfs;\n}());\nexport { CellXfs };\n/**\n * Alignment class\n * @private\n */\nvar Alignment = /** @class */ (function () {\n    function Alignment() {\n    }\n    return Alignment;\n}());\nexport { Alignment };\n/**\n * CellStyleXfs class\n * @private\n */\nvar CellStyleXfs = /** @class */ (function () {\n    function CellStyleXfs() {\n    }\n    return CellStyleXfs;\n}());\nexport { CellStyleXfs };\n/**\n * CellStyles class\n * @private\n */\nvar CellStyles = /** @class */ (function () {\n    function CellStyles() {\n        this.name = 'Normal';\n        this.xfId = 0;\n    }\n    return CellStyles;\n}());\nexport { CellStyles };\n/**\n * NumFmt class\n * @private\n */\nvar NumFmt = /** @class */ (function () {\n    function NumFmt(id, code) {\n        this.numFmtId = id;\n        this.formatCode = code;\n    }\n    return NumFmt;\n}());\nexport { NumFmt };\n/**\n * Border class\n * @private\n */\nvar Border = /** @class */ (function () {\n    function Border(mLine, mColor) {\n        this.lineStyle = mLine;\n        this.color = mColor;\n    }\n    return Border;\n}());\nexport { Border };\n/**\n * Borders class\n * @private\n */\nvar Borders = /** @class */ (function () {\n    function Borders() {\n        this.left = new Border('none', '#FFFFFF');\n        this.right = new Border('none', '#FFFFFF');\n        this.top = new Border('none', '#FFFFFF');\n        this.bottom = new Border('none', '#FFFFFF');\n        this.all = new Border('none', '#FFFFFF');\n    }\n    return Borders;\n}());\nexport { Borders };\n","/**\n * Column class\n * @private\n */\nvar Column = /** @class */ (function () {\n    function Column() {\n    }\n    return Column;\n}());\nexport { Column };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * Row class\n * @private\n */\nvar Row = /** @class */ (function () {\n    function Row() {\n    }\n    return Row;\n}());\nexport { Row };\n/**\n * Rows class\n * @private\n */\nvar Rows = /** @class */ (function (_super) {\n    __extends(Rows, _super);\n    function Rows() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.add = function (row) {\n            _this.push(row);\n        };\n        return _this;\n    }\n    return Rows;\n}(Array));\nexport { Rows };\n","/**\n * Image class\n * @private\n */\nvar Image = /** @class */ (function () {\n    function Image() {\n    }\n    return Image;\n}());\nexport { Image };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/**\n * Worksheet class\n * @private\n */\nvar Cell = /** @class */ (function () {\n    function Cell() {\n    }\n    return Cell;\n}());\nexport { Cell };\n/**\n * Cells class\n * @private\n */\nvar Cells = /** @class */ (function (_super) {\n    __extends(Cells, _super);\n    function Cells() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.add = function (cell) {\n            var inserted = false;\n            var count = 0;\n            for (var _i = 0, _a = _this; _i < _a.length; _i++) {\n                var c = _a[_i];\n                if (c.index === cell.index) {\n                    _this[count] = cell;\n                    inserted = true;\n                }\n                count++;\n            }\n            if (!inserted) {\n                _this.push(cell);\n            }\n        };\n        return _this;\n    }\n    return Cells;\n}(Array));\nexport { Cells };\n","/* eslint-disable */\nvar Utils = /** @class */ (function () {\n    function Utils() {\n    }\n    Utils.bitReverse = function (value) {\n        return (Utils.reverseBits[value & 15] << 12\n            | Utils.reverseBits[(value >> 4) & 15] << 8\n            | Utils.reverseBits[(value >> 8) & 15] << 4\n            | Utils.reverseBits[value >> 12]);\n    };\n    Utils.bitConverterToInt32 = function (value, index) {\n        return value[index] | value[index + 1] << 8 | value[index + 2] << 16 | value[index + 3] << 24;\n    };\n    Utils.bitConverterToInt16 = function (value, index) {\n        return value[index] | value[index + 1] << 8;\n    };\n    Utils.bitConverterToUInt32 = function (value) {\n        var uint = new Uint32Array(1);\n        uint[0] = value;\n        return uint[0];\n    };\n    Utils.bitConverterToUInt16 = function (value, index) {\n        var uint = new Uint16Array(1);\n        uint[0] = (value[index] | value[index + 1] << 8);\n        return uint[0];\n    };\n    Utils.bitConverterUintToInt32 = function (value) {\n        var uint = new Int32Array(1);\n        uint[0] = value;\n        return uint[0];\n    };\n    Utils.bitConverterInt32ToUint = function (value) {\n        var uint = new Uint32Array(1);\n        uint[0] = value;\n        return uint[0];\n    };\n    Utils.bitConverterInt32ToInt16 = function (value) {\n        var uint = new Int16Array(1);\n        uint[0] = value;\n        return uint[0];\n    };\n    Utils.byteToString = function (value) {\n        var str = '';\n        for (var i = 0; i < value.length; i++) {\n            str += String.fromCharCode(value[i]);\n        }\n        return str;\n    };\n    Utils.byteIntToString = function (value) {\n        var str = '';\n        for (var i = 0; i < value.length; i++) {\n            str += String.fromCharCode(value[i]);\n        }\n        return str;\n    };\n    Utils.arrayCopy = function (source, sourceIndex, destination, destinationIndex, dataToCopy) {\n        var temp = new Uint8Array(source.buffer, sourceIndex);\n        var data = temp.subarray(0, dataToCopy);\n        destination.set(data, destinationIndex);\n    };\n    Utils.mergeArray = function (arrayOne, arrayTwo) {\n        var mergedArray = new Uint8Array(arrayOne.length + arrayTwo.length);\n        mergedArray.set(arrayOne);\n        mergedArray.set(arrayTwo, arrayOne.length);\n        return mergedArray;\n    };\n    /**\n     * @private\n     */\n    Utils.encodedString = function (input) {\n        var keyStr = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=';\n        var chr1;\n        var chr2;\n        var chr3;\n        var encode1;\n        var encode2;\n        var encode3;\n        var encode4;\n        var count = 0;\n        var resultIndex = 0;\n        /*let dataUrlPrefix: string = 'data:';*/\n        input = input.replace(/[^A-Za-z0-9\\+\\/\\=]/g, '');\n        var totalLength = input.length * 3 / 4;\n        if (input.charAt(input.length - 1) === keyStr.charAt(64)) {\n            totalLength--;\n        }\n        if (input.charAt(input.length - 2) === keyStr.charAt(64)) {\n            totalLength--;\n        }\n        if (totalLength % 1 !== 0) {\n            // totalLength is not an integer, the length does not match a valid\n            // base64 content. That can happen if:\n            // - the input is not a base64 content\n            // - the input is *almost* a base64 content, with a extra chars at the\n            // beginning or at the end\n            // - the input uses a base64 variant (base64url for example)\n            throw new Error('Invalid base64 input, bad content length.');\n        }\n        var output = new Uint8Array(totalLength | 0);\n        while (count < input.length) {\n            encode1 = keyStr.indexOf(input.charAt(count++));\n            encode2 = keyStr.indexOf(input.charAt(count++));\n            encode3 = keyStr.indexOf(input.charAt(count++));\n            encode4 = keyStr.indexOf(input.charAt(count++));\n            chr1 = (encode1 << 2) | (encode2 >> 4);\n            chr2 = ((encode2 & 15) << 4) | (encode3 >> 2);\n            chr3 = ((encode3 & 3) << 6) | encode4;\n            output[resultIndex++] = chr1;\n            if (encode3 !== 64) {\n                output[resultIndex++] = chr2;\n            }\n            if (encode4 !== 64) {\n                output[resultIndex++] = chr3;\n            }\n        }\n        return output;\n    };\n    Utils.reverseBits = [0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15];\n    Utils.huffCodeLengthOrders = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n    return Utils;\n}());\nexport { Utils };\n/* eslint-enable */ \n","/* eslint-disable */\nimport { Utils } from './index';\nvar DecompressorHuffmanTree = /** @class */ (function () {\n    function DecompressorHuffmanTree(lengths) {\n        this.buildTree(lengths);\n    }\n    DecompressorHuffmanTree.init = function () {\n        var lengths;\n        var index;\n        // Generate huffman tree for lengths.\n        lengths = new Uint8Array(288);\n        index = 0;\n        while (index < 144) {\n            lengths[index++] = 8;\n        }\n        while (index < 256) {\n            lengths[index++] = 9;\n        }\n        while (index < 280) {\n            lengths[index++] = 7;\n        }\n        while (index < 288) {\n            lengths[index++] = 8;\n        }\n        DecompressorHuffmanTree.m_LengthTree = new DecompressorHuffmanTree(lengths);\n        // Generate huffman tree for distances.\n        lengths = new Uint8Array(32);\n        index = 0;\n        while (index < 32) {\n            lengths[index++] = 5;\n        }\n        DecompressorHuffmanTree.m_DistanceTree = new DecompressorHuffmanTree(lengths);\n    };\n    /// <summary>\n    /// Prepares data for generating huffman tree.\n    /// </summary>\n    /// <param name=\"blCount\">Array of counts of each code length.</param>\n    /// <param name=\"nextCode\">Numerical values of the smallest code for each code length.</param>\n    /// <param name=\"lengths\">Array of code lengths.</param>\n    /// <param name=\"treeSize\">Calculated tree size.</param>\n    /// <returns>Code.</returns>\n    DecompressorHuffmanTree.prototype.prepareData = function (blCount, nextCode, lengths) {\n        var code = 0;\n        var treeSize = 512;\n        // Count number of codes for each code length.\n        for (var i = 0; i < lengths.length; i++) {\n            var length_1 = lengths[i];\n            if (length_1 > 0) {\n                blCount[length_1]++;\n            }\n        }\n        for (var bits = 1; bits <= DecompressorHuffmanTree.MAX_BITLEN; bits++) {\n            nextCode[bits] = code;\n            code += blCount[bits] << (16 - bits);\n            if (bits >= 10) {\n                var start = nextCode[bits] & 0x1ff80;\n                var end = code & 0x1ff80;\n                treeSize += (end - start) >> (16 - bits);\n            }\n        }\n        /*      if( code != 65536 )\n          throw new ZipException( \"Code lengths don't add up properly.\" );*/\n        return { 'code': code, 'treeSize': treeSize };\n    };\n    /// <summary>\n    /// Generates huffman tree.\n    /// </summary>\n    /// <param name=\"blCount\">Array of counts of each code length.</param>\n    /// <param name=\"nextCode\">Numerical values of the smallest code for each code length.</param>\n    /// <param name=\"code\">Precalculated code.</param>\n    /// <param name=\"lengths\">Array of code lengths.</param>\n    /// <param name=\"treeSize\">Calculated size of the tree.</param>\n    /// <returns>Generated tree.</returns>\n    DecompressorHuffmanTree.prototype.treeFromData = function (blCount, nextCode, lengths, code, treeSize) {\n        var tree = new Int16Array(treeSize);\n        var pointer = 512;\n        var increment = 1 << 7;\n        for (var bits = DecompressorHuffmanTree.MAX_BITLEN; bits >= 10; bits--) {\n            var end = code & 0x1ff80;\n            code -= blCount[bits] << (16 - bits);\n            var start = code & 0x1ff80;\n            for (var i = start; i < end; i += increment) {\n                tree[Utils.bitReverse(i)] = Utils.bitConverterInt32ToInt16((-pointer << 4) | bits);\n                pointer += 1 << (bits - 9);\n            }\n        }\n        for (var i = 0; i < lengths.length; i++) {\n            var bits = lengths[i];\n            if (bits == 0) {\n                continue;\n            }\n            code = nextCode[bits];\n            var revcode = Utils.bitReverse(code);\n            if (bits <= 9) {\n                do {\n                    tree[revcode] = Utils.bitConverterInt32ToInt16((i << 4) | bits);\n                    revcode += 1 << bits;\n                } while (revcode < 512);\n            }\n            else {\n                var subTree = tree[revcode & 511];\n                var treeLen = 1 << (subTree & 15);\n                subTree = -(subTree >> 4);\n                do {\n                    tree[subTree | (revcode >> 9)] = Utils.bitConverterInt32ToInt16((i << 4) | bits);\n                    revcode += 1 << bits;\n                } while (revcode < treeLen);\n            }\n            nextCode[bits] = code + (1 << (16 - bits));\n        }\n        return tree;\n    };\n    /// <summary>\n    /// Builds huffman tree from array of code lengths.\n    /// </summary>\n    /// <param name=\"lengths\">Array of code lengths.</param>\n    DecompressorHuffmanTree.prototype.buildTree = function (lengths) {\n        // Count of codes for each code length.\n        var blCount = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        // Numerical value of the smallest code for each code length.\n        var nextCode = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0];\n        var prepareData = this.prepareData(blCount, nextCode, lengths);\n        this.m_Tree = this.treeFromData(blCount, nextCode, lengths, prepareData.code, prepareData.treeSize);\n    };\n    /// <summary>\n    /// Reads and decompresses one symbol.\n    /// </summary>\n    /// <param name=\"input\"></param>\n    /// <returns></returns>\n    DecompressorHuffmanTree.prototype.unpackSymbol = function (input) {\n        var lookahead;\n        var symbol;\n        if ((lookahead = input.peekBits(9)) >= 0) {\n            if ((symbol = this.m_Tree[lookahead]) >= 0) {\n                input.skipBits((symbol & 15));\n                return symbol >> 4;\n            }\n            var subtree = -(symbol >> 4);\n            var bitlen = symbol & 15;\n            if ((lookahead = input.peekBits(bitlen)) >= 0) {\n                symbol = this.m_Tree[subtree | (lookahead >> 9)];\n                input.skipBits((symbol & 15));\n                return symbol >> 4;\n            }\n            else {\n                var bits = input.availableBits;\n                lookahead = input.peekBits(bits);\n                symbol = this.m_Tree[subtree | (lookahead >> 9)];\n                if ((symbol & 15) <= bits) {\n                    input.skipBits((symbol & 15));\n                    return symbol >> 4;\n                }\n                else {\n                    return -1;\n                }\n            }\n        }\n        else {\n            var bits = input.availableBits;\n            lookahead = input.peekBits(bits);\n            symbol = this.m_Tree[lookahead];\n            if (symbol >= 0 && (symbol & 15) <= bits) {\n                input.skipBits((symbol & 15));\n                return symbol >> 4;\n            }\n            else {\n                return -1;\n            }\n        }\n    };\n    Object.defineProperty(DecompressorHuffmanTree, \"lengthTree\", {\n        /// <summary>\n        /// GET huffman tree for encoding and decoding lengths.\n        /// </summary>\n        get: function () {\n            return this.m_LengthTree;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DecompressorHuffmanTree, \"distanceTree\", {\n        /// <summary>\n        /// GET huffman tree for encoding and decoding distances.\n        /// </summary>\n        get: function () {\n            return this.m_DistanceTree;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /// <summary>\n    /// Maximum count of bits.\n    /// </summary>\n    DecompressorHuffmanTree.MAX_BITLEN = 15;\n    return DecompressorHuffmanTree;\n}());\nexport { DecompressorHuffmanTree };\n/* eslint-enable */ \n","/* eslint-disable */\n/// <summary>\n/// Checksum calculator, based on Adler32 algorithm.\n/// </summary>\nvar ChecksumCalculator = /** @class */ (function () {\n    function ChecksumCalculator() {\n    }\n    /// <summary>\n    /// Updates checksum by calculating checksum of the\n    /// given buffer and adding it to current value.\n    /// </summary>\n    /// <param name=\"checksum\">Current checksum.</param>\n    /// <param name=\"buffer\">Data byte array.</param>\n    /// <param name=\"offset\">Offset in the buffer.</param>\n    /// <param name=\"length\">Length of data to be used from the stream.</param>\n    ChecksumCalculator.ChecksumUpdate = function (checksum, buffer, offset, length) {\n        var checkSumUInt = checksum;\n        var s1 = checkSumUInt & 65535;\n        var s2 = checkSumUInt >> this.DEF_CHECKSUM_BIT_OFFSET;\n        while (length > 0) {\n            var steps = Math.min(length, this.DEF_CHECKSUM_ITERATIONSCOUNT);\n            length -= steps;\n            while (--steps >= 0) {\n                s1 = s1 + (buffer[offset++] & 255);\n                s2 = s2 + s1;\n            }\n            s1 %= this.DEF_CHECKSUM_BASE;\n            s2 %= this.DEF_CHECKSUM_BASE;\n        }\n        checkSumUInt = (s2 << this.DEF_CHECKSUM_BIT_OFFSET) | s1;\n        checksum = checkSumUInt;\n    };\n    /// <summary>\n    /// Generates checksum by calculating checksum of the\n    /// given buffer.\n    /// </summary>\n    /// <param name=\"buffer\">Data byte array.</param>\n    /// <param name=\"offset\">Offset in the buffer.</param>\n    /// <param name=\"length\">Length of data to be used from the stream.</param>\n    ChecksumCalculator.ChecksumGenerate = function (buffer, offset, length) {\n        var result = 1;\n        ChecksumCalculator.ChecksumUpdate(result, buffer, offset, length);\n        return result;\n    };\n    /// <summary>\n    /// Bits offset, used in adler checksum calculation.\n    /// </summary>\n    ChecksumCalculator.DEF_CHECKSUM_BIT_OFFSET = 16;\n    /// <summary>\n    /// Lagrest prime, less than 65535\n    /// </summary>\n    ChecksumCalculator.DEF_CHECKSUM_BASE = 65521;\n    /// <summary>\n    /// Count of iteration used in calculated of the adler checksumm.\n    /// </summary>\n    ChecksumCalculator.DEF_CHECKSUM_ITERATIONSCOUNT = 3800;\n    return ChecksumCalculator;\n}());\nexport { ChecksumCalculator };\n/* eslint-enable */ \n","/* eslint-disable */\nimport { DecompressorHuffmanTree } from './decompressor-huffman-tree';\nimport { Utils } from './utils';\nimport { ChecksumCalculator } from './checksum-calculator';\nvar CompressedStreamReader = /** @class */ (function () {\n    function CompressedStreamReader(stream, bNoWrap) {\n        /// <summary>\n        /// Code lengths for the code length alphabet.\n        /// </summary>\n        this.defaultHuffmanDynamicTree = [16, 17, 18, 0, 8, 7, 9, 6, 10, 5, 11, 4, 12, 3, 13, 2, 14, 1, 15];\n        /// <summary>\n        /// Mask for compression method to be decoded from 16-bit header.\n        /// </summary>\n        this.DEF_HEADER_METHOD_MASK = 15 << 8;\n        /// <summary>\n        /// Mask for compression info to be decoded from 16-bit header.\n        /// </summary>\n        this.DEF_HEADER_INFO_MASK = 240 << 8;\n        /// <summary>\n        /// Mask for check bits to be decoded from 16-bit header.\n        /// </summary>\n        this.DEF_HEADER_FLAGS_FCHECK = 31;\n        /// <summary>\n        /// Mask for dictionary presence to be decoded from 16-bit header.\n        /// </summary>\n        this.DEF_HEADER_FLAGS_FDICT = 32;\n        /// <summary>\n        /// Mask for compression level to be decoded from 16-bit header.\n        /// </summary>\n        this.DEF_HEADER_FLAGS_FLEVEL = 192;\n        /// <summary>\n        /// Maximum size of the data window.\n        /// </summary>\n        this.DEF_MAX_WINDOW_SIZE = 65535;\n        /// <summary>\n        /// Maximum length of the repeatable block.\n        /// </summary>\n        this.DEF_HUFFMAN_REPEATE_MAX = 258;\n        /// <summary>\n        /// End of the block sign.\n        /// </summary>\n        this.DEF_HUFFMAN_END_BLOCK = 256;\n        /// <summary>\n        /// Minimal length code.\n        /// </summary>\n        this.DEF_HUFFMAN_LENGTH_MINIMUMCODE = 257;\n        /// <summary>\n        /// Maximal length code.\n        /// </summary>\n        this.DEF_HUFFMAN_LENGTH_MAXIMUMCODE = 285;\n        /// <summary>\n        /// Maximal distance code.\n        /// </summary>\n        this.DEF_HUFFMAN_DISTANCE_MAXIMUMCODE = 29;\n        /// <summary>\n        /// Currently calculated checksum,\n        /// based on Adler32 algorithm.\n        /// </summary>\n        this.mCheckSum = 1;\n        /// <summary>\n        /// Currently read 4 bytes.\n        /// </summary>\n        this.tBuffer = 0;\n        /// <summary>\n        /// Count of bits that are in buffer.\n        /// </summary>\n        this.mBufferedBits = 0;\n        /// <summary>\n        /// Temporary buffer.\n        /// </summary>\n        this.mTempBuffer = new Uint8Array(4);\n        /// <summary>\n        /// 32k buffer for unpacked data.\n        /// </summary>\n        this.mBlockBuffer = new Uint8Array(this.DEF_MAX_WINDOW_SIZE);\n        /// <summary>\n        /// No wrap mode.\n        /// </summary>\n        this.mbNoWrap = false;\n        /// <summary>\n        /// Window size, can not be larger than 32k.\n        /// </summary>\n        this.mWindowSize = 0;\n        /// <summary>\n        /// Current position in output stream.\n        /// Current in-block position can be extracted by applying Int16.MaxValue mask.\n        /// </summary>\n        this.mCurrentPosition = 0;\n        /// <summary>\n        /// Data length.\n        /// Current in-block position can be extracted by applying Int16.MaxValue mask.\n        /// </summary>\n        this.mDataLength = 0;\n        /// <summary>\n        /// Specifies wheather next block can to be read.\n        /// Reading can be denied because the header of the last block have been read.\n        /// </summary>\n        this.mbCanReadNextBlock = true;\n        /// <summary>\n        /// Specifies wheather user can read more data from stream.\n        /// </summary>\n        this.mbCanReadMoreData = true;\n        /// <summary>\n        /// Specifies wheather checksum has been read.\n        /// </summary>\n        this.mbCheckSumRead = false;\n        if (stream == null) {\n            throw new DOMException('stream');\n        }\n        if (stream.length === 0) {\n            throw new DOMException('stream - string can not be empty');\n        }\n        DecompressorHuffmanTree.init();\n        this.mInputStream = new Stream(stream);\n        this.mbNoWrap = bNoWrap;\n        if (!this.mbNoWrap) {\n            this.readZLibHeader();\n        }\n        this.decodeBlockHeader();\n    }\n    Object.defineProperty(CompressedStreamReader.prototype, \"mBuffer\", {\n        get: function () {\n            return this.tBuffer;\n        },\n        set: function (value) {\n            this.tBuffer = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Initializes compressor and writes ZLib header if needed.\n     * @param {boolean} noWrap - optional if true, ZLib header and checksum will not be written.\n     */\n    /// <summary>\n    /// Reads specified count of bits without adjusting position.\n    /// </summary>\n    /// <param name=\"count\">Count of bits to be read.</param>\n    /// <returns>Read value.</returns>\n    CompressedStreamReader.prototype.peekBits = function (count) {\n        if (count < 0) {\n            throw new DOMException('count', 'Bits count can not be less than zero.');\n        }\n        if (count > 32) {\n            throw new DOMException('count', 'Count of bits is too large.');\n        }\n        // If buffered data is not enough to give result,\n        // fill buffer.\n        if (this.mBufferedBits < count) {\n            this.fillBuffer();\n        }\n        // If you want to read 4 bytes and there is partial data in\n        // buffer, than you will fail.\n        if (this.mBufferedBits < count) {\n            return -1;\n        }\n        // Create bitmask for reading of count bits\n        var bitMask = ~(4294967295 << count);\n        var result = Utils.bitConverterUintToInt32(this.mBuffer & bitMask);\n        //Debug.WriteLine( /*new string( ' ', 32 - mBufferedBits + (int)( ( 32 - mBufferedBits ) / 8 ) ) + BitsToString( (int)mBuffer, mBufferedBits ) + \" \" + BitsToString( result, count ) +*/ \" \" + result.ToString() );\n        return result;\n    };\n    CompressedStreamReader.prototype.fillBuffer = function () {\n        var length = 4 - (this.mBufferedBits >> 3) -\n            (((this.mBufferedBits & 7) !== 0) ? 1 : 0);\n        if (length === 0) {\n            return;\n        }\n        //TODO: fix this\n        var bytesRead = this.mInputStream.read(this.mTempBuffer, 0, length);\n        for (var i = 0; i < bytesRead; i++) {\n            this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer |\n                (Utils.bitConverterInt32ToUint(this.mTempBuffer[i] << this.mBufferedBits)));\n            this.mBufferedBits += 8;\n        }\n        //TODO: fix this\n    };\n    /// <summary>\n    /// Skips specified count of bits.\n    /// </summary>\n    /// <param name=\"count\">Count of bits to be skipped.</param>\n    CompressedStreamReader.prototype.skipBits = function (count) {\n        if (count < 0) {\n            throw new DOMException('count', 'Bits count can not be less than zero.');\n        }\n        if (count === 0) {\n            return;\n        }\n        if (count >= this.mBufferedBits) {\n            count -= this.mBufferedBits;\n            this.mBufferedBits = 0;\n            this.mBuffer = 0;\n            // if something left, skip it.\n            if (count > 0) {\n                // Skip entire bytes.\n                this.mInputStream.position += (count >> 3); //TODO: fix this\n                count &= 7;\n                // Skip bits.\n                if (count > 0) {\n                    this.fillBuffer();\n                    this.mBufferedBits -= count;\n                    this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> count);\n                }\n            }\n        }\n        else {\n            this.mBufferedBits -= count;\n            this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> count);\n        }\n    };\n    Object.defineProperty(CompressedStreamReader.prototype, \"availableBits\", {\n        get: function () {\n            return this.mBufferedBits;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /// <summary>\n    /// Reads ZLib header with compression method and flags.\n    /// </summary>\n    CompressedStreamReader.prototype.readZLibHeader = function () {\n        // first 8 bits - compression Method and flags\n        // 8 other - flags\n        var header = this.readInt16();\n        //Debug.WriteLine( BitsToString( header ) );\n        if (header === -1) {\n            throw new DOMException('Header of the stream can not be read.');\n        }\n        if (header % 31 !== 0) {\n            throw new DOMException('Header checksum illegal');\n        }\n        if ((header & this.DEF_HEADER_METHOD_MASK) !== (8 << 8)) {\n            throw new DOMException('Unsupported compression method.');\n        }\n        this.mWindowSize = Math.pow(2, ((header & this.DEF_HEADER_INFO_MASK) >> 12) + 8);\n        if (this.mWindowSize > 65535) {\n            throw new DOMException('Unsupported window size for deflate compression method.');\n        }\n        if ((header & this.DEF_HEADER_FLAGS_FDICT) >> 5 === 1) {\n            // Get dictionary.\n            throw new DOMException('Custom dictionary is not supported at the moment.');\n        }\n    };\n    /// <summary>\n    /// TODO: place correct comment here\n    /// </summary>\n    /// <returns>\n    /// TODO: place correct comment here\n    /// </returns>\n    CompressedStreamReader.prototype.readInt16 = function () {\n        var result = (this.readBits(8) << 8);\n        result |= this.readBits(8);\n        return result;\n    };\n    /// <summary>\n    /// Reads specified count of bits from stream.\n    /// </summary>\n    /// <param name=\"count\">Count of bits to be read.</param>\n    /// <returns>\n    /// TODO: place correct comment here\n    /// </returns>\n    CompressedStreamReader.prototype.readBits = function (count) {\n        var result = this.peekBits(count);\n        if (result === -1) {\n            return -1;\n        }\n        this.mBufferedBits -= count;\n        this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> count);\n        return result;\n    };\n    /// <summary>\n    /// Reads and decodes block of data.\n    /// </summary>\n    /// <returns>True if buffer was empty and new data was read, otherwise - False.</returns>\n    CompressedStreamReader.prototype.decodeBlockHeader = function () {\n        if (!this.mbCanReadNextBlock) {\n            return false;\n        }\n        var bFinalBlock = this.readBits(1);\n        if (bFinalBlock === -1) {\n            return false;\n        }\n        var blockType = this.readBits(2);\n        if (blockType === -1) {\n            return false;\n        }\n        this.mbCanReadNextBlock = (bFinalBlock === 0);\n        //      ChecksumReset();\n        switch (blockType) {\n            case 0:\n                // Uncompressed data\n                this.mbReadingUncompressed = true;\n                this.skipToBoundary();\n                var length_1 = this.readInt16Inverted();\n                var lengthComplement = this.readInt16Inverted();\n                if (length_1 !== (lengthComplement ^ 0xffff)) {\n                    throw new DOMException('Wrong block length.');\n                }\n                if (length_1 > 65535) {\n                    throw new DOMException('Uncompressed block length can not be more than 65535.');\n                }\n                this.mUncompressedDataLength = length_1;\n                this.mCurrentLengthTree = null;\n                this.mCurrentDistanceTree = null;\n                break;\n            case 1:\n                // Compressed data with fixed huffman codes.\n                this.mbReadingUncompressed = false;\n                this.mUncompressedDataLength = -1;\n                this.mCurrentLengthTree = DecompressorHuffmanTree.lengthTree;\n                this.mCurrentDistanceTree = DecompressorHuffmanTree.distanceTree;\n                break;\n            case 2:\n                // Compressed data with dynamic huffman codes.\n                this.mbReadingUncompressed = false;\n                this.mUncompressedDataLength = -1;\n                var trees = this.decodeDynamicHeader(this.mCurrentLengthTree, this.mCurrentDistanceTree);\n                this.mCurrentLengthTree = trees.lengthTree;\n                this.mCurrentDistanceTree = trees.distanceTree;\n                break;\n            default:\n                throw new DOMException('Wrong block type.');\n        }\n        return true;\n    };\n    /// <summary>\n    /// Discards left-most partially used byte.\n    /// </summary>\n    CompressedStreamReader.prototype.skipToBoundary = function () {\n        this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> (this.mBufferedBits & 7));\n        this.mBufferedBits &= ~7;\n    };\n    /// <summary>\n    /// TODO: place correct comment here\n    /// </summary>\n    /// <returns>\n    /// TODO: place correct comment here\n    /// </returns>\n    CompressedStreamReader.prototype.readInt16Inverted = function () {\n        var result = (this.readBits(8));\n        result |= this.readBits(8) << 8;\n        return result;\n    };\n    /// <summary>\n    /// Reades dynamic huffman codes from block header.\n    /// </summary>\n    /// <param name=\"lengthTree\">Literals/Lengths tree.</param>\n    /// <param name=\"distanceTree\">Distances tree.</param>\n    CompressedStreamReader.prototype.decodeDynamicHeader = function (lengthTree, distanceTree) {\n        var bLastSymbol = 0;\n        var iLengthsCount = this.readBits(5);\n        var iDistancesCount = this.readBits(5);\n        var iCodeLengthsCount = this.readBits(4);\n        if (iLengthsCount < 0 || iDistancesCount < 0 || iCodeLengthsCount < 0) {\n            throw new DOMException('Wrong dynamic huffman codes.');\n        }\n        iLengthsCount += 257;\n        iDistancesCount += 1;\n        var iResultingCodeLengthsCount = iLengthsCount + iDistancesCount;\n        var arrResultingCodeLengths = new Uint8Array(iResultingCodeLengthsCount);\n        var arrDecoderCodeLengths = new Uint8Array(19);\n        iCodeLengthsCount += 4;\n        var iCurrentCode = 0;\n        while (iCurrentCode < iCodeLengthsCount) {\n            var len = this.readBits(3);\n            if (len < 0) {\n                throw new DOMException('Wrong dynamic huffman codes.');\n            }\n            arrDecoderCodeLengths[this.defaultHuffmanDynamicTree[iCurrentCode++]] = len;\n        }\n        var treeInternalDecoder = new DecompressorHuffmanTree(arrDecoderCodeLengths);\n        iCurrentCode = 0;\n        for (;;) {\n            var symbol = void 0;\n            var bNeedBreak = false;\n            symbol = treeInternalDecoder.unpackSymbol(this);\n            while ((symbol & ~15) === 0) {\n                arrResultingCodeLengths[iCurrentCode++] = bLastSymbol = symbol;\n                if (iCurrentCode === iResultingCodeLengthsCount) {\n                    bNeedBreak = true;\n                    break;\n                }\n                symbol = treeInternalDecoder.unpackSymbol(this);\n            }\n            if (bNeedBreak) {\n                break;\n            }\n            if (symbol < 0) {\n                throw new DOMException('Wrong dynamic huffman codes.');\n            }\n            if (symbol >= 17) {\n                bLastSymbol = 0;\n            }\n            else if (iCurrentCode === 0) {\n                throw new DOMException('Wrong dynamic huffman codes.');\n            }\n            var miRepSymbol = symbol - 16;\n            var bits = CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_BITS[miRepSymbol];\n            var count = this.readBits(bits);\n            if (count < 0) {\n                throw new DOMException('Wrong dynamic huffman codes.');\n            }\n            count += CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_MINIMUMS[miRepSymbol];\n            if (iCurrentCode + count > iResultingCodeLengthsCount) {\n                throw new DOMException('Wrong dynamic huffman codes.');\n            }\n            while (count-- > 0) {\n                arrResultingCodeLengths[iCurrentCode++] = bLastSymbol;\n            }\n            if (iCurrentCode === iResultingCodeLengthsCount) {\n                break;\n            }\n        }\n        var tempArray = new Uint8Array(iLengthsCount);\n        tempArray.set(arrResultingCodeLengths.subarray(0, iLengthsCount), 0);\n        //sourceArray, sourceIndex, destinationArray, destinationIndex, length\n        //Array.copy( arrResultingCodeLengths, 0, tempArray, 0, iLengthsCount );\n        lengthTree = new DecompressorHuffmanTree(tempArray);\n        tempArray = arrResultingCodeLengths.slice(iLengthsCount, iLengthsCount + iDistancesCount);\n        //Array.copy( arrResultingCodeLengths, iLengthsCount, tempArray, 0, iDistancesCount );\n        distanceTree = new DecompressorHuffmanTree(tempArray);\n        return { 'lengthTree': lengthTree, 'distanceTree': distanceTree };\n    };\n    /// <summary>\n    /// Decodes huffman codes.\n    /// </summary>\n    /// <returns>True if some data was read.</returns>\n    CompressedStreamReader.prototype.readHuffman = function () {\n        var free = this.DEF_MAX_WINDOW_SIZE - (this.mDataLength - this.mCurrentPosition);\n        var dataRead = false;\n        //long maxdistance = DEF_MAX_WINDOW_SIZE >> 1;\n        var readdata = {};\n        // DEF_HUFFMAN_REPEATE_MAX - longest repeatable block, we should always reserve space for it because\n        // if we should not, we will have buffer overrun.\n        while (free >= this.DEF_HUFFMAN_REPEATE_MAX) {\n            var symbol = void 0;\n            symbol = this.mCurrentLengthTree.unpackSymbol(this);\n            // Only codes 0..255 are valid independent symbols.\n            while (((symbol) & ~0xff) === 0) {\n                readdata[(this.mDataLength + 1) % this.DEF_MAX_WINDOW_SIZE] = symbol;\n                this.mBlockBuffer[this.mDataLength++ % this.DEF_MAX_WINDOW_SIZE] = symbol;\n                dataRead = true;\n                if (--free < this.DEF_HUFFMAN_REPEATE_MAX) {\n                    return true;\n                }\n                //if( (mDataLength - mCurrentPosition ) < maxdistance ) return true;\n                symbol = this.mCurrentLengthTree.unpackSymbol(this);\n            }\n            if (symbol < this.DEF_HUFFMAN_LENGTH_MINIMUMCODE) {\n                if (symbol < this.DEF_HUFFMAN_END_BLOCK) {\n                    throw new DOMException('Illegal code.');\n                }\n                var numDataRead = dataRead ? 1 : 0;\n                this.mbCanReadMoreData = this.decodeBlockHeader();\n                var numReadMore = (this.mbCanReadMoreData) ? 1 : 0;\n                return (numDataRead | numReadMore) ? true : false;\n            }\n            if (symbol > this.DEF_HUFFMAN_LENGTH_MAXIMUMCODE) {\n                throw new DOMException('Illegal repeat code length.');\n            }\n            var iRepeatLength = CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_BASE[symbol -\n                this.DEF_HUFFMAN_LENGTH_MINIMUMCODE];\n            var iRepeatExtraBits = CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_EXTENSION[symbol -\n                this.DEF_HUFFMAN_LENGTH_MINIMUMCODE];\n            if (iRepeatExtraBits > 0) {\n                var extra = this.readBits(iRepeatExtraBits);\n                if (extra < 0) {\n                    throw new DOMException('Wrong data.');\n                }\n                iRepeatLength += extra;\n            }\n            // Unpack repeat distance.\n            symbol = this.mCurrentDistanceTree.unpackSymbol(this);\n            if (symbol < 0 || symbol > CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_BASE.length) {\n                throw new DOMException('Wrong distance code.');\n            }\n            var iRepeatDistance = CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_BASE[symbol];\n            iRepeatExtraBits = CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_EXTENSION[symbol];\n            if (iRepeatExtraBits > 0) {\n                var extra = this.readBits(iRepeatExtraBits);\n                if (extra < 0) {\n                    throw new DOMException('Wrong data.');\n                }\n                iRepeatDistance += extra;\n            }\n            // Copy data in slow repeat mode\n            for (var i = 0; i < iRepeatLength; i++) {\n                this.mBlockBuffer[this.mDataLength % this.DEF_MAX_WINDOW_SIZE] =\n                    this.mBlockBuffer[(this.mDataLength - iRepeatDistance) % this.DEF_MAX_WINDOW_SIZE];\n                this.mDataLength++;\n                free--;\n            }\n            dataRead = true;\n        }\n        return dataRead;\n    };\n    /// <summary>\n    /// Reads data to buffer.\n    /// </summary>\n    /// <param name=\"buffer\">Output buffer for data.</param>\n    /// <param name=\"offset\">Offset in output data.</param>\n    /// <param name=\"length\">Length of the data to be read.</param>\n    /// <returns>Count of bytes actually read.</returns>\n    CompressedStreamReader.prototype.read = function (buffer, offset, length) {\n        if (buffer == null) {\n            throw new DOMException('buffer');\n        }\n        if (offset < 0 || offset > buffer.length - 1) {\n            throw new DOMException('offset', 'Offset does not belong to specified buffer.');\n        }\n        if (length < 0 || length > buffer.length - offset) {\n            throw new DOMException('length', 'Length is illegal.');\n        }\n        var initialLength = length;\n        while (length > 0) {\n            // Read from internal buffer.\n            if (this.mCurrentPosition < this.mDataLength) {\n                // Position in buffer array.\n                var inBlockPosition = (this.mCurrentPosition % this.DEF_MAX_WINDOW_SIZE);\n                // We can not read more than we have in buffer at once,\n                // and we not read more than till the array end.\n                var dataToCopy = Math.min(this.DEF_MAX_WINDOW_SIZE - inBlockPosition, (this.mDataLength - this.mCurrentPosition));\n                // Reading not more, than the rest of the buffer.\n                dataToCopy = Math.min(dataToCopy, length);\n                //sourceArray, sourceIndex, destinationArray, destinationIndex, length\n                // Copy data.\n                //Array.Copy( mBlockBuffer, inBlockPosition, buffer, offset, dataToCopy );\n                //buffer.set(this.mBlockBuffer.slice(inBlockPosition, dataToCopy), offset);\n                Utils.arrayCopy(this.mBlockBuffer, inBlockPosition, buffer, offset, dataToCopy);\n                // Correct position, length,\n                this.mCurrentPosition += dataToCopy;\n                offset += dataToCopy;\n                length -= dataToCopy;\n            }\n            else {\n                if (!this.mbCanReadMoreData) {\n                    break;\n                }\n                var oldDataLength = this.mDataLength;\n                if (!this.mbReadingUncompressed) {\n                    if (!this.readHuffman()) {\n                        break;\n                    }\n                }\n                else {\n                    if (this.mUncompressedDataLength === 0) {\n                        // If there is no more data in stream, just exit.\n                        this.mbCanReadMoreData = this.decodeBlockHeader();\n                        if (!(this.mbCanReadMoreData)) {\n                            break;\n                        }\n                    }\n                    else {\n                        // Position of the data end in block buffer.\n                        var inBlockPosition = (this.mDataLength % this.DEF_MAX_WINDOW_SIZE);\n                        var dataToRead = Math.min(this.mUncompressedDataLength, this.DEF_MAX_WINDOW_SIZE - inBlockPosition);\n                        var dataRead = this.readPackedBytes(this.mBlockBuffer, inBlockPosition, dataToRead);\n                        if (dataToRead !== dataRead) {\n                            throw new DOMException('Not enough data in stream.');\n                        }\n                        this.mUncompressedDataLength -= dataRead;\n                        this.mDataLength += dataRead;\n                    }\n                }\n                if (oldDataLength < this.mDataLength) {\n                    var start = (oldDataLength % this.DEF_MAX_WINDOW_SIZE);\n                    var end = (this.mDataLength % this.DEF_MAX_WINDOW_SIZE);\n                    if (start < end) {\n                        this.checksumUpdate(this.mBlockBuffer, start, end - start);\n                    }\n                    else {\n                        this.checksumUpdate(this.mBlockBuffer, start, this.DEF_MAX_WINDOW_SIZE - start);\n                        if (end > 0) {\n                            this.checksumUpdate(this.mBlockBuffer, 0, end);\n                        }\n                    }\n                }\n            }\n        }\n        if (!this.mbCanReadMoreData && !this.mbCheckSumRead && !this.mbNoWrap) {\n            this.skipToBoundary();\n            var checkSum = this.readInt32();\n            //Debug.Assert( checkSum == mCheckSum, \"\" );\n            if (checkSum !== this.mCheckSum) {\n                throw new DOMException('Checksum check failed.');\n            }\n            this.mbCheckSumRead = true;\n        }\n        return initialLength - length;\n    };\n    /// <summary>\n    /// Reads array of bytes.\n    /// </summary>\n    /// <param name=\"buffer\">Output buffer.</param>\n    /// <param name=\"offset\">Offset in output buffer.</param>\n    /// <param name=\"length\">Length of the data to be read.</param>\n    /// <returns>Count of bytes actually read to the buffer.</returns>\n    CompressedStreamReader.prototype.readPackedBytes = function (buffer, offset, length) {\n        if (buffer == null) {\n            throw new DOMException('buffer');\n        }\n        if (offset < 0 || offset > buffer.length - 1) {\n            throw new DOMException('offset\", \"Offset can not be less than zero or greater than buffer length - 1.');\n        }\n        if (length < 0) {\n            throw new DOMException('length\", \"Length can not be less than zero.');\n        }\n        if (length > buffer.length - offset) {\n            throw new DOMException('length\", \"Length is too large.');\n        }\n        if ((this.mBufferedBits & 7) !== 0) {\n            throw new DOMException('Reading of unalligned data is not supported.');\n        }\n        if (length === 0) {\n            return 0;\n        }\n        var result = 0;\n        while (this.mBufferedBits > 0 && length > 0) {\n            buffer[offset++] = (this.mBuffer);\n            this.mBufferedBits -= 8;\n            this.mBuffer = Utils.bitConverterInt32ToUint(this.mBuffer >>> 8);\n            length--;\n            result++;\n        }\n        if (length > 0) {\n            //TODO: Fix this.\n            result += this.mInputStream.read(buffer, offset, length);\n        }\n        return result;\n    };\n    /// <summary>\n    /// TODO: place correct comment here\n    /// </summary>\n    /// <returns>\n    /// TODO: place correct comment here\n    /// </returns>\n    CompressedStreamReader.prototype.readInt32 = function () {\n        var result = this.readBits(8) << 24;\n        result |= this.readBits(8) << 16;\n        result |= this.readBits(8) << 8;\n        result |= this.readBits(8);\n        return result;\n    };\n    /// <summary>\n    /// Updates checksum by calculating checksum of the\n    /// given buffer and adding it to current value.\n    /// </summary>\n    /// <param name=\"buffer\">Data byte array.</param>\n    /// <param name=\"offset\">Offset in the buffer.</param>\n    /// <param name=\"length\">Length of data to be used from the stream.</param>\n    CompressedStreamReader.prototype.checksumUpdate = function (buffer, offset, length) {\n        ChecksumCalculator.ChecksumUpdate(this.mCheckSum, buffer, offset, length);\n    };\n    CompressedStreamReader.DEF_REVERSE_BITS = new Uint8Array([0, 8, 4, 12, 2, 10, 6, 14, 1, 9, 5, 13, 3, 11, 7, 15]);\n    /// <summary>\n    /// Minimum count of repetions.\n    /// </summary>\n    CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_MINIMUMS = [3, 3, 11];\n    /// <summary>\n    /// Bits, that responds for different repetion modes.\n    /// </summary>\n    CompressedStreamReader.DEF_HUFFMAN_DYNTREE_REPEAT_BITS = [2, 3, 7];\n    /// <summary>\n    /// Length bases.\n    /// </summary>\n    CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_BASE = [\n        3, 4, 5, 6, 7, 8, 9, 10, 11, 13, 15, 17, 19, 23, 27, 31,\n        35, 43, 51, 59, 67, 83, 99, 115, 131, 163, 195, 227, 258\n    ];\n    /// <summary>\n    /// Length extended bits count.\n    /// </summary>\n    CompressedStreamReader.DEF_HUFFMAN_REPEAT_LENGTH_EXTENSION = [\n        0, 0, 0, 0, 0, 0, 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,\n        3, 3, 3, 3, 4, 4, 4, 4, 5, 5, 5, 5, 0\n    ];\n    /// <summary>\n    /// Distance bases.\n    /// </summary>\n    CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_BASE = [\n        1, 2, 3, 4, 5, 7, 9, 13, 17, 25, 33, 49, 65, 97, 129, 193,\n        257, 385, 513, 769, 1025, 1537, 2049, 3073, 4097, 6145,\n        8193, 12289, 16385, 24577\n    ];\n    /// <summary>\n    /// Distance extanded bits count.\n    /// </summary>\n    CompressedStreamReader.DEF_HUFFMAN_REPEAT_DISTANCE_EXTENSION = [\n        0, 0, 0, 0, 1, 1, 2, 2, 3, 3, 4, 4, 5, 5, 6, 6,\n        7, 7, 8, 8, 9, 9, 10, 10, 11, 11,\n        12, 12, 13, 13\n    ];\n    return CompressedStreamReader;\n}());\nexport { CompressedStreamReader };\nvar Stream = /** @class */ (function () {\n    function Stream(input) {\n        this.position = 0;\n        this.inputStream = new Uint8Array(input.buffer);\n    }\n    Object.defineProperty(Stream.prototype, \"length\", {\n        get: function () {\n            return this.inputStream.buffer.byteLength;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Stream.prototype.read = function (buffer, start, length) {\n        var temp = new Uint8Array(this.inputStream.buffer, this.position + start);\n        var data = temp.subarray(0, length);\n        buffer.set(data, 0);\n        this.position += data.byteLength;\n        return data.byteLength;\n    };\n    Stream.prototype.readByte = function () {\n        return this.inputStream[this.position++];\n    };\n    Stream.prototype.write = function (inputBuffer, offset, count) {\n        Utils.arrayCopy(inputBuffer, 0, this.inputStream, this.position + offset, count);\n        // this.inputStream = new Uint8Array(this.inputStream.buffer, this.position + offset);\n        // this.inputStream.set(inputBuffer, offset);\n        this.position += count;\n    };\n    Stream.prototype.toByteArray = function () {\n        return new Uint8Array(this.inputStream.buffer);\n    };\n    return Stream;\n}());\nexport { Stream };\n/* eslint-enable */ \n","/* eslint-disable */\nimport { CompressedStreamWriter, Stream, CompressedStreamReader } from './index';\nimport { Save } from '@syncfusion/ej2-file-utils';\nimport { Utils } from './utils';\nvar CRC32TABLE = [];\n/// <summary>\n/// Size of the int value in bytes.\n/// </summary>\nvar INT_SIZE = 4;\n/// <summary>\n/// Size of the short value in bytes.\n/// </summary>\nvar SHORT_SIZE = 2;\n/// <summary>\n/// End of central directory signature.\n/// </summary>\nvar CentralDirectoryEndSignature = 0x06054b50;\n/// <summary>\n/// Offset to the size field in the End of central directory record.\n/// </summary>\nvar CentralDirSizeOffset = 12;\n/// <summary>\n/// Central header signature.\n/// </summary>\nvar CentralHeaderSignature = 0x02014b50;\n/// <summary>\n/// Buffer size.\n/// </summary>\nvar BufferSize = 4096;\n/**\n * class provide compression library\n * ```typescript\n * let archive = new ZipArchive();\n * archive.compressionLevel = 'Normal';\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * archive.addItem(archiveItem);\n * archive.save(fileName.zip);\n * ```\n */\nvar ZipArchive = /** @class */ (function () {\n    /**\n     * constructor for creating ZipArchive instance\n     */\n    function ZipArchive() {\n        if (CRC32TABLE.length === 0) {\n            ZipArchive.initCrc32Table();\n        }\n        this.files = [];\n        this.level = 'Normal';\n        Save.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n    }\n    Object.defineProperty(ZipArchive.prototype, \"items\", {\n        get: function () {\n            return this.files;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(ZipArchive.prototype, \"compressionLevel\", {\n        /**\n         * gets compression level\n         */\n        get: function () {\n            return this.level;\n        },\n        /**\n         * sets compression level\n         */\n        set: function (level) {\n            this.level = level;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(ZipArchive.prototype, \"length\", {\n        /**\n         * gets items count\n         */\n        get: function () {\n            if (this.files === undefined) {\n                return 0;\n            }\n            return this.files.length;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * add new item to archive\n     * @param {ZipArchiveItem} item - item to be added\n     * @returns {void}\n     */\n    ZipArchive.prototype.addItem = function (item) {\n        if (item === null || item === undefined) {\n            throw new Error('ArgumentException: item cannot be null or undefined');\n        }\n        for (var i = 0; i < this.files.length; i++) {\n            var file = this.files[i];\n            if (file instanceof ZipArchiveItem) {\n                if (file.name === item.name) {\n                    throw new Error('item with same name already exist');\n                }\n            }\n        }\n        this.files.push(item);\n    };\n    /**\n     * add new directory to archive\n     * @param directoryName directoryName to be created\n     * @returns {void}\n     */\n    ZipArchive.prototype.addDirectory = function (directoryName) {\n        if (directoryName === null || directoryName === undefined) {\n            throw new Error('ArgumentException: string cannot be null or undefined');\n        }\n        if (directoryName.length === 0) {\n            throw new Error('ArgumentException: string cannot be empty');\n        }\n        if (directoryName.slice(-1) !== '/') {\n            directoryName += '/';\n        }\n        if (this.files.indexOf(directoryName) !== -1) {\n            throw new Error('item with same name already exist');\n        }\n        this.files.push(directoryName);\n    };\n    /**\n     * gets item at specified index\n     * @param {number} index - item index\n     * @returns {ZipArchiveItem}\n     */\n    ZipArchive.prototype.getItem = function (index) {\n        if (index >= 0 && index < this.files.length) {\n            return this.files[index];\n        }\n        return undefined;\n    };\n    /**\n     * determines whether an element is in the collection\n     * @param {string | ZipArchiveItem} item - item to search\n     * @returns {boolean}\n     */\n    ZipArchive.prototype.contains = function (item) {\n        return this.files.indexOf(item) !== -1 ? true : false;\n    };\n    ZipArchive.prototype.open = function (base64String) {\n        //return promise = new Promise((resolve: Function, reject: Function) => {\n        var zipArchive = this;\n        var zipByteArray = Utils.encodedString(base64String);\n        if (zipByteArray.length == 0)\n            throw new DOMException(\"stream\");\n        var stream = new Stream(zipByteArray);\n        //let lCentralDirEndPosition = this.findValueFromEnd( arrBuffer, Constants.CentralDirectoryEndSignature, 65557 );\n        var lCentralDirEndPosition = ZipArchive.findValueFromEnd(stream, CentralDirectoryEndSignature, 65557);\n        if (lCentralDirEndPosition < 0)\n            throw new DOMException(\"Can't locate end of central directory record. Possible wrong file format or archive is corrupt.\");\n        // Step2. Locate central directory and iterate through all items\n        stream.position = lCentralDirEndPosition + CentralDirSizeOffset;\n        var iCentralDirSize = ZipArchive.ReadInt32(stream);\n        var lCentralDirPosition = lCentralDirEndPosition - iCentralDirSize;\n        // verify that this is really central directory\n        stream.position = lCentralDirPosition;\n        this.readCentralDirectoryDataAndExtractItems(stream);\n        //});\n        // let zipArchive: ZipArchive = this;\n        //let promise: Promise<ZipArchive>;\n        // return promise = new Promise((resolve: Function, reject: Function) => {\n        //     let reader: FileReader = new FileReader();\n        //     reader.onload = (e: Event) => {\n        //         let data: Uint8Array = new Uint8Array((e.target as any).result);\n        //         let zipReader: ZipReader = new ZipReader(data);\n        //         zipReader.readEntries().then((entries: ZipEntry[]) => {\n        //             for (let i: number = 0; i < entries.length; i++) {\n        //                 let entry: ZipEntry = entries[i];\n        //                 let item: ZipArchiveItem = new ZipArchiveItem(zipArchive, entry.fileName);\n        //                 item.data = entry.data;\n        //                 item.compressionMethod = entry.compressionMethod;\n        //                 item.crc = entry.crc;\n        //                 item.lastModified = entry.lastModified;\n        //                 item.lastModifiedDate = entry.lastModifiedDate;\n        //                 item.size = entry.size;\n        //                 item.uncompressedSize = entry.uncompressedSize;\n        //                 zipArchive.addItem(item);\n        //             }\n        //             resolve(zipArchive);\n        //         });\n        //     };\n        //     reader.readAsArrayBuffer(fileName);\n        // });\n    };\n    /// <summary>\n    /// Read central directory record from the stream.\n    /// </summary>\n    /// <param name=\"stream\">Stream to read from.</param>\n    ZipArchive.prototype.readCentralDirectoryDataAndExtractItems = function (stream) {\n        if (stream == null)\n            throw new DOMException(\"stream\");\n        var itemHelper;\n        while (ZipArchive.ReadInt32(stream) == CentralHeaderSignature) {\n            itemHelper = new ZipArchiveItemHelper();\n            itemHelper.readCentralDirectoryData(stream);\n            itemHelper;\n            // let item: ZipArchiveItem = new ZipArchiveItem(this);\n            // item.ReadCentralDirectoryData(stream);\n            // m_arrItems.Add(item);\n        }\n        itemHelper.readData(stream, itemHelper.checkCrc);\n        itemHelper.decompressData();\n        this.files.push(new ZipArchiveItem(itemHelper.unCompressedStream.buffer, itemHelper.name));\n    };\n    /**\n     * save archive with specified file name\n     * @param {string} fileName save archive with specified file name\n     * @returns {Promise<ZipArchive>}\n     */\n    ZipArchive.prototype.save = function (fileName) {\n        if (fileName === null || fileName === undefined || fileName.length === 0) {\n            throw new Error('ArgumentException: fileName cannot be null or undefined');\n        }\n        if (this.files.length === 0) {\n            throw new Error('InvalidOperation');\n        }\n        var zipArchive = this;\n        var promise;\n        return promise = new Promise(function (resolve, reject) {\n            zipArchive.saveInternal(fileName, false).then(function () {\n                resolve(zipArchive);\n            });\n        });\n    };\n    /**\n     * Save archive as blob\n     * @return {Promise<Blob>}\n     */\n    ZipArchive.prototype.saveAsBlob = function () {\n        var zipArchive = this;\n        var promise;\n        return promise = new Promise(function (resolve, reject) {\n            zipArchive.saveInternal('', true).then(function (blob) {\n                resolve(blob);\n            });\n        });\n    };\n    ZipArchive.prototype.saveInternal = function (fileName, skipFileSave) {\n        var _this = this;\n        var zipArchive = this;\n        var promise;\n        return promise = new Promise(function (resolve, reject) {\n            var zipData = [];\n            var dirLength = 0;\n            for (var i = 0; i < zipArchive.files.length; i++) {\n                var compressedObject = _this.getCompressedData(_this.files[i]);\n                compressedObject.then(function (data) {\n                    dirLength = zipArchive.constructZippedObject(zipData, data, dirLength, data.isDirectory);\n                    if (zipData.length === zipArchive.files.length) {\n                        var blob = zipArchive.writeZippedContent(fileName, zipData, dirLength, skipFileSave);\n                        resolve(blob);\n                    }\n                });\n            }\n        });\n    };\n    /**\n     * release allocated un-managed resource\n     * @returns {void}\n     */\n    ZipArchive.prototype.destroy = function () {\n        if (this.files !== undefined && this.files.length > 0) {\n            for (var i = 0; i < this.files.length; i++) {\n                var file = this.files[i];\n                if (file instanceof ZipArchiveItem) {\n                    file.destroy();\n                }\n                file = undefined;\n            }\n            this.files = [];\n        }\n        this.files = undefined;\n        this.level = undefined;\n    };\n    ZipArchive.prototype.getCompressedData = function (item) {\n        var zipArchive = this;\n        var promise = new Promise(function (resolve, reject) {\n            if (item instanceof ZipArchiveItem) {\n                var reader_1 = new FileReader();\n                reader_1.onload = function () {\n                    var input = new Uint8Array(reader_1.result);\n                    var data = {\n                        fileName: item.name, crc32Value: 0, compressedData: [],\n                        compressedSize: undefined, uncompressedDataSize: input.length, compressionType: undefined,\n                        isDirectory: false\n                    };\n                    if (zipArchive.level === 'Normal') {\n                        zipArchive.compressData(input, data, CRC32TABLE);\n                        var length_1 = 0;\n                        for (var i = 0; i < data.compressedData.length; i++) {\n                            length_1 += data.compressedData[i].length;\n                        }\n                        data.compressedSize = length_1;\n                        data.compressionType = '\\x08\\x00'; //Deflated = 8\n                    }\n                    else {\n                        data.compressedSize = input.length;\n                        data.crc32Value = zipArchive.calculateCrc32Value(0, input, CRC32TABLE);\n                        data.compressionType = '\\x00\\x00'; // Stored = 0\n                        data.compressedData.push(input);\n                    }\n                    resolve(data);\n                };\n                reader_1.readAsArrayBuffer(item.data);\n            }\n            else {\n                var data = {\n                    fileName: item, crc32Value: 0, compressedData: '', compressedSize: 0, uncompressedDataSize: 0,\n                    compressionType: '\\x00\\x00', isDirectory: true\n                };\n                resolve(data);\n            }\n        });\n        return promise;\n    };\n    ZipArchive.prototype.compressData = function (input, data, crc32Table) {\n        var compressor = new CompressedStreamWriter(true);\n        var currentIndex = 0;\n        var nextIndex = 0;\n        do {\n            if (currentIndex >= input.length) {\n                compressor.close();\n                break;\n            }\n            nextIndex = Math.min(input.length, currentIndex + 16384);\n            var subArray = input.subarray(currentIndex, nextIndex);\n            data.crc32Value = this.calculateCrc32Value(data.crc32Value, subArray, crc32Table);\n            compressor.write(subArray, 0, nextIndex - currentIndex);\n            currentIndex = nextIndex;\n        } while (currentIndex <= input.length);\n        data.compressedData = compressor.compressedData;\n        compressor.destroy();\n    };\n    ZipArchive.prototype.constructZippedObject = function (zipParts, data, dirLength, isDirectory) {\n        var extFileAttr = 0;\n        var date = new Date();\n        if (isDirectory) {\n            extFileAttr = extFileAttr | 0x00010; // directory flag\n        }\n        extFileAttr = extFileAttr | (0 & 0x3F);\n        var header = this.writeHeader(data, date);\n        var localHeader = 'PK\\x03\\x04' + header + data.fileName;\n        var centralDir = this.writeCentralDirectory(data, header, dirLength, extFileAttr);\n        zipParts.push({ localHeader: localHeader, centralDir: centralDir, compressedData: data });\n        return dirLength + localHeader.length + data.compressedSize;\n    };\n    ZipArchive.prototype.writeHeader = function (data, date) {\n        var zipHeader = '';\n        zipHeader += '\\x0A\\x00' + '\\x00\\x00'; // version needed to extract & general purpose bit flag\n        zipHeader += data.compressionType; // compression method Deflate=8,Stored=0\n        zipHeader += this.getBytes(this.getModifiedTime(date), 2); // last modified Time\n        zipHeader += this.getBytes(this.getModifiedDate(date), 2); // last modified date\n        zipHeader += this.getBytes(data.crc32Value, 4); // crc-32 value\n        zipHeader += this.getBytes(data.compressedSize, 4); // compressed file size\n        zipHeader += this.getBytes(data.uncompressedDataSize, 4); // uncompressed file size\n        zipHeader += this.getBytes(data.fileName.length, 2); // file name length\n        zipHeader += this.getBytes(0, 2); // extra field length\n        return zipHeader;\n    };\n    ZipArchive.prototype.writeZippedContent = function (fileName, zipData, localDirLen, skipFileSave) {\n        var cenDirLen = 0;\n        var buffer = [];\n        for (var i = 0; i < zipData.length; i++) {\n            var item = zipData[i];\n            cenDirLen += item.centralDir.length;\n            buffer.push(this.getArrayBuffer(item.localHeader));\n            while (item.compressedData.compressedData.length) {\n                buffer.push(item.compressedData.compressedData.shift().buffer);\n            }\n        }\n        for (var i = 0; i < zipData.length; i++) {\n            buffer.push(this.getArrayBuffer(zipData[i].centralDir));\n        }\n        buffer.push(this.getArrayBuffer(this.writeFooter(zipData, cenDirLen, localDirLen)));\n        var blob = new Blob(buffer, { type: 'application/zip' });\n        if (!skipFileSave) {\n            Save.save(fileName, blob);\n        }\n        return blob;\n    };\n    ZipArchive.prototype.writeCentralDirectory = function (data, localHeader, offset, externalFileAttribute) {\n        var directoryHeader = 'PK\\x01\\x02' +\n            this.getBytes(0x0014, 2) + localHeader + // inherit from file header\n            this.getBytes(0, 2) + // comment length\n            '\\x00\\x00' + '\\x00\\x00' + // internal file attributes \n            this.getBytes(externalFileAttribute, 4) + // external file attributes\n            this.getBytes(offset, 4) + // local fileHeader relative offset\n            data.fileName;\n        return directoryHeader;\n    };\n    ZipArchive.prototype.writeFooter = function (zipData, centralLength, localLength) {\n        var dirEnd = 'PK\\x05\\x06' + '\\x00\\x00' + '\\x00\\x00' +\n            this.getBytes(zipData.length, 2) + this.getBytes(zipData.length, 2) +\n            this.getBytes(centralLength, 4) + this.getBytes(localLength, 4) +\n            this.getBytes(0, 2);\n        return dirEnd;\n    };\n    ZipArchive.prototype.getArrayBuffer = function (input) {\n        var a = new Uint8Array(input.length);\n        for (var j = 0; j < input.length; ++j) {\n            a[j] = input.charCodeAt(j) & 0xFF;\n        }\n        return a.buffer;\n    };\n    ZipArchive.prototype.getBytes = function (value, offset) {\n        var bytes = '';\n        for (var i = 0; i < offset; i++) {\n            bytes += String.fromCharCode(value & 0xff);\n            value = value >>> 8;\n        }\n        return bytes;\n    };\n    ZipArchive.prototype.getModifiedTime = function (date) {\n        var modTime = date.getHours();\n        modTime = modTime << 6;\n        modTime = modTime | date.getMinutes();\n        modTime = modTime << 5;\n        return modTime = modTime | date.getSeconds() / 2;\n    };\n    ZipArchive.prototype.getModifiedDate = function (date) {\n        var modiDate = date.getFullYear() - 1980;\n        modiDate = modiDate << 4;\n        modiDate = modiDate | (date.getMonth() + 1);\n        modiDate = modiDate << 5;\n        return modiDate = modiDate | date.getDate();\n    };\n    ZipArchive.prototype.calculateCrc32Value = function (crc32Value, input, crc32Table) {\n        crc32Value ^= -1;\n        for (var i = 0; i < input.length; i++) {\n            crc32Value = (crc32Value >>> 8) ^ crc32Table[(crc32Value ^ input[i]) & 0xFF];\n        }\n        return (crc32Value ^ (-1));\n    };\n    /**\n     * construct cyclic redundancy code table\n     * @private\n     */\n    ZipArchive.initCrc32Table = function () {\n        var i;\n        for (var j = 0; j < 256; j++) {\n            i = j;\n            for (var k = 0; k < 8; k++) {\n                i = ((i & 1) ? (0xEDB88320 ^ (i >>> 1)) : (i >>> 1));\n            }\n            CRC32TABLE[j] = i;\n        }\n    };\n    ZipArchive.findValueFromEnd = function (stream, value, maxCount) {\n        if (stream == null)\n            throw new DOMException(\"stream\");\n        //   if( !stream.CanSeek || !stream.CanRead )\n        //     throw new ArgumentOutOfRangeException( \"We need to have seekable and readable stream.\" );\n        // read last 4 bytes and compare with required value\n        var lStreamSize = stream.inputStream.buffer.byteLength;\n        if (lStreamSize < 4)\n            return -1;\n        var arrBuffer = new Uint8Array(4);\n        var lLastPos = Math.max(0, lStreamSize - maxCount);\n        var lCurrentPosition = lStreamSize - 1 - INT_SIZE;\n        stream.position = lCurrentPosition;\n        stream.read(arrBuffer, 0, INT_SIZE);\n        var uiCurValue = arrBuffer[0];\n        var bFound = (uiCurValue == value);\n        if (!bFound) {\n            while (lCurrentPosition > lLastPos) {\n                // remove unnecessary byte and replace it with new value.\n                uiCurValue <<= 8;\n                lCurrentPosition--;\n                stream.position = lCurrentPosition;\n                uiCurValue += stream.readByte();\n                if (uiCurValue == value) {\n                    bFound = true;\n                    break;\n                }\n            }\n        }\n        return bFound ? lCurrentPosition : -1;\n    };\n    /// <summary>\n    /// Extracts Int32 value from the stream.\n    /// </summary>\n    /// <param name=\"stream\">Stream to read data from.</param>\n    /// <returns>Extracted value.</returns>\n    ZipArchive.ReadInt32 = function (stream) {\n        var buffer = new Uint8Array(INT_SIZE);\n        if (stream.read(buffer, 0, INT_SIZE) != INT_SIZE) {\n            throw new DOMException(\"Unable to read value at the specified position - end of stream was reached.\");\n        }\n        return Utils.bitConverterToInt32(buffer, 0);\n    };\n    /// <summary>\n    /// Extracts Int16 value from the stream.\n    /// </summary>\n    /// <param name=\"stream\">Stream to read data from.</param>\n    /// <returns>Extracted value.</returns>\n    ZipArchive.ReadInt16 = function (stream) {\n        var buffer = new Uint8Array(SHORT_SIZE);\n        if (stream.read(buffer, 0, SHORT_SIZE) != SHORT_SIZE) {\n            throw new DOMException(\"Unable to read value at the specified position - end of stream was reached.\");\n        }\n        return Utils.bitConverterToInt16(buffer, 0);\n    };\n    /// <summary>\n    /// Extracts unsigned Int16 value from the stream.\n    /// </summary>\n    /// <param name=\"stream\">Stream to read data from.</param>\n    /// <returns>Extracted value.</returns>\n    ZipArchive.ReadUInt16 = function (stream) {\n        {\n            var buffer = new Uint8Array(SHORT_SIZE);\n            if (stream.read(buffer, 0, SHORT_SIZE) != SHORT_SIZE) {\n                throw new DOMException(\"Unable to read value at the specified position - end of stream was reached.\");\n            }\n            return Utils.bitConverterToInt16(buffer, 0);\n        }\n    };\n    return ZipArchive;\n}());\nexport { ZipArchive };\nvar ZipArchiveItemHelper = /** @class */ (function () {\n    function ZipArchiveItemHelper() {\n        /// <summary>\n        /// Zip header signature.\n        /// </summary>\n        this.headerSignature = 0x04034b50;\n        /// <summary>\n        /// Indicates whether we should check Crc value when reading item's data. Check\n        /// is performed when user gets access to decompressed data for the first time.\n        /// </summary>\n        this.checkCrc = true;\n        /// <summary>\n        /// Crc.\n        /// </summary>\n        this.crc32 = 0;\n    }\n    /// <summary>\n    /// Read data from the stream based on the central directory.\n    /// </summary>\n    /// <param name=\"stream\">Stream to read data from, stream.Position must point at just after correct file header.</param>\n    ZipArchiveItemHelper.prototype.readCentralDirectoryData = function (stream) {\n        // on the current moment we ignore \"version made by\" and \"version needed to extract\" fields.\n        stream.position += 4;\n        this.options = ZipArchive.ReadInt16(stream);\n        this.compressionMethod = ZipArchive.ReadInt16(stream);\n        this.checkCrc = (this.compressionMethod != 99); //COmpression.Defalte != SecurityConstants.AES\n        //m_bCompressed = true;\n        // on the current moment we ignore \"last mod file time\" and \"last mod file date\" fields.\n        var lastModified = ZipArchive.ReadInt32(stream);\n        //LastModified = ConvertToDateTime(lastModified);\n        this.crc32 = Utils.bitConverterToUInt32(ZipArchive.ReadInt32(stream));\n        this.compressedSize = ZipArchive.ReadInt32(stream);\n        this.originalSize = ZipArchive.ReadInt32(stream);\n        var iFileNameLength = ZipArchive.ReadInt16(stream);\n        var iExtraFieldLenth = ZipArchive.ReadInt16(stream);\n        var iCommentLength = ZipArchive.ReadInt16(stream);\n        // on the current moment we ignore and \"disk number start\" (2 bytes),\n        // \"internal file attributes\" (2 bytes).\n        stream.position += 4;\n        this.externalAttributes = ZipArchive.ReadInt32(stream);\n        this.localHeaderOffset = ZipArchive.ReadInt32(stream);\n        var arrBuffer = new Uint8Array(iFileNameLength);\n        stream.read(arrBuffer, 0, iFileNameLength);\n        var m_strItemName = Utils.byteToString(arrBuffer);\n        m_strItemName = m_strItemName.replace(\"\\\\\", \"/\");\n        this.name = m_strItemName;\n        stream.position += iExtraFieldLenth + iCommentLength;\n        if (this.options != 0)\n            this.options = 0;\n    };\n    /// <summary>\n    /// Reads zipped data from the stream.\n    /// </summary>\n    /// <param name=\"stream\">Stream to read data from.</param>\n    /// <param name=\"checkCrc\">Indicates whether we should check crc value after data decompression.</param>\n    ZipArchiveItemHelper.prototype.readData = function (stream, checkCrc) {\n        if (stream.length == 0)\n            throw new DOMException(\"stream\");\n        stream.position = this.localHeaderOffset;\n        this.checkCrc = checkCrc;\n        this.readLocalHeader(stream);\n        this.readCompressedData(stream);\n    };\n    ZipArchiveItemHelper.prototype.decompressData = function () {\n        if (this.compressionMethod == 8) {\n            if (this.originalSize > 0) {\n                this.decompressDataOld();\n            }\n        }\n    };\n    ZipArchiveItemHelper.prototype.decompressDataOld = function () {\n        var reader = new CompressedStreamReader(this.compressedStream, true);\n        var decompressedData;\n        if (this.originalSize > 0)\n            decompressedData = new Stream(new Uint8Array(this.originalSize));\n        var arrBuffer = new Uint8Array(BufferSize);\n        var iReadBytes;\n        var past = new Uint8Array(0);\n        while ((iReadBytes = reader.read(arrBuffer, 0, BufferSize)) > 0) {\n            //             past = new Uint8Array(decompressedData.length);\n            // let currentBlock: Uint8Array = arrBuffer.subarray(0, iReadBytes);\n            decompressedData.write(arrBuffer.subarray(0, iReadBytes), 0, iReadBytes);\n        }\n        this.unCompressedStream = decompressedData.toByteArray();\n        //   this.originalSize = decompressedData.Length;\n        //   m_bControlStream = true;\n        //   m_streamData = decompressedData;\n        //   decompressedData.SetLength( m_lOriginalSize );\n        //   decompressedData.Capacity = ( int )m_lOriginalSize;\n        if (this.checkCrc) {\n            //TODO: fix this\n            //CheckCrc(decompressedData.ToArray());\n        }\n        //m_streamData.Position = 0;\n    };\n    /// <summary>\n    /// Extracts local header from the stream.\n    /// </summary>\n    /// <param name=\"stream\">Stream to read data from.</param>\n    ZipArchiveItemHelper.prototype.readLocalHeader = function (stream) {\n        if (stream.length == 0)\n            throw new DOMException(\"stream\");\n        if (ZipArchive.ReadInt32(stream) != this.headerSignature)\n            throw new DOMException(\"Can't find local header signature - wrong file format or file is corrupt.\");\n        // TODO: it is good to verify data read from the central directory record,\n        // but on the current moment we simply skip it.\n        stream.position += 22;\n        var iNameLength = ZipArchive.ReadInt16(stream);\n        var iExtraLength = ZipArchive.ReadUInt16(stream);\n        if (this.compressionMethod == 99) //SecurityConstants.AES\n         {\n            // stream.Position += iNameLength + 8;\n            // m_archive.EncryptionAlgorithm = (EncryptionAlgorithm)stream.ReadByte();\n            // m_actualCompression = new byte[2];\n            // stream.Read(m_actualCompression, 0, 2);\n        }\n        else if (iExtraLength > 2) {\n            stream.position += iNameLength;\n            var headerVal = ZipArchive.ReadInt16(stream);\n            if (headerVal == 0x0017) //PKZipEncryptionHeader\n                throw new DOMException(\"UnSupported\");\n            else\n                stream.position += iExtraLength - 2;\n        }\n        else\n            stream.position += iNameLength + iExtraLength;\n    };\n    /// <summary>\n    /// Extracts compressed data from the stream.\n    /// </summary>\n    /// <param name=\"stream\">Stream to read data from.</param>\n    ZipArchiveItemHelper.prototype.readCompressedData = function (stream) {\n        var dataStream;\n        if (this.compressedSize > 0) {\n            var iBytesLeft = this.compressedSize;\n            dataStream = new Stream(new Uint8Array(iBytesLeft));\n            var arrBuffer = new Uint8Array(BufferSize);\n            while (iBytesLeft > 0) {\n                var iBytesToRead = Math.min(iBytesLeft, BufferSize);\n                if (stream.read(arrBuffer, 0, iBytesToRead) != iBytesToRead)\n                    throw new DOMException(\"End of file reached - wrong file format or file is corrupt.\");\n                dataStream.write(arrBuffer.subarray(0, iBytesToRead), 0, iBytesToRead);\n                iBytesLeft -= iBytesToRead;\n            }\n            // if(m_archive.Password != null)\n            // {\n            //     byte[] dataBuffer = new byte[dataStream.Length];\n            //     dataBuffer = dataStream.ToArray();\n            //     dataStream=new MemoryStream( Decrypt(dataBuffer));\n            // }\n            this.compressedStream = new Uint8Array(dataStream.inputStream);\n            // m_bControlStream = true;\n        }\n        else if (this.compressedSize < 0) //If compression size is negative, then read until the next header signature reached.\n         {\n            //   MemoryStream dataStream = new MemoryStream();\n            //   int bt = 0;\n            //   bool proceed=true;\n            //   while (proceed)\n            //   {\n            //       if ((bt = stream.ReadByte()) == Constants.HeaderSignatureStartByteValue)\n            //       {\n            //           stream.Position -= 1;\n            //           int headerSignature = ZipArchive.ReadInt32(stream);\n            //           if (headerSignature==Constants.CentralHeaderSignature || headerSignature==Constants.CentralHeaderSignature)\n            //           {\n            //               proceed = false;\n            //           }\n            //           stream.Position -= 3;\n            //       }\n            //       if (proceed)\n            //           dataStream.WriteByte((byte)bt);\n            //   }\n            //   m_streamData = dataStream;\n            //   m_lCompressedSize = m_streamData.Length;\n            //   m_bControlStream = true;\n        }\n        else if (this.compressedSize == 0) {\n            //  m_streamData = new MemoryStream();\n        }\n    };\n    return ZipArchiveItemHelper;\n}());\nexport { ZipArchiveItemHelper };\n/**\n * Class represent unique ZipArchive item\n * ```typescript\n * let archiveItem = new ZipArchiveItem(archive, 'directoryName\\fileName.txt');\n * ```\n */\nvar ZipArchiveItem = /** @class */ (function () {\n    /**\n     * constructor for creating {ZipArchiveItem} instance\n     * @param {Blob|ArrayBuffer} data file data\n     * @param {itemName} itemName absolute file path\n     */\n    function ZipArchiveItem(data, itemName) {\n        if (data === null || data === undefined) {\n            throw new Error('ArgumentException: data cannot be null or undefined');\n        }\n        if (itemName === null || itemName === undefined) {\n            throw new Error('ArgumentException: string cannot be null or undefined');\n        }\n        if (itemName.length === 0) {\n            throw new Error('string cannot be empty');\n        }\n        this.data = data;\n        this.name = itemName;\n    }\n    Object.defineProperty(ZipArchiveItem.prototype, \"dataStream\", {\n        get: function () {\n            return this.decompressedStream;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(ZipArchiveItem.prototype, \"name\", {\n        /**\n         * Get the name of archive item\n         * @returns string\n         */\n        get: function () {\n            return this.fileName;\n        },\n        /**\n         * Set the name of archive item\n         * @param  {string} value\n         */\n        set: function (value) {\n            this.fileName = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * release allocated un-managed resource\n     * @returns {void}\n     */\n    ZipArchiveItem.prototype.destroy = function () {\n        this.fileName = undefined;\n        this.data = undefined;\n    };\n    return ZipArchiveItem;\n}());\nexport { ZipArchiveItem };\n/* eslint-enable */ \n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization } from '@syncfusion/ej2-base';\n// import { IValueFormatter } from '../base/interface';\n/**\n * ValueFormatter class to globalize the value.\n * @private\n */\nvar ValueFormatter = /** @class */ (function () {\n    function ValueFormatter(cultureName) {\n        this.intl = new Internationalization();\n        // if (!isNullOrUndefined(cultureName)) {\n        //     this.intl.culture = cultureName;\n        // }\n    }\n    ValueFormatter.prototype.getFormatFunction = function (format, isServerRendered) {\n        if (format.type) {\n            if (isServerRendered) {\n                format.isServerRendered = true;\n            }\n            return this.intl.getDateFormat(format);\n        }\n        else {\n            return this.intl.getNumberFormat(format);\n        }\n    };\n    // public getParserFunction(format: NumberFormatOptions | DateFormatOptions): Function {\n    //     if ((<DateFormatOptions>format).type) {\n    //         return this.intl.getDateParser(<DateFormatOptions>format);\n    //     } else {\n    //         return this.intl.getNumberParser(<DateFormatOptions>format);\n    //     }\n    // }\n    // public fromView(value: string, format: Function, type?: string): string | number | Date {\n    //     if (type === 'date' || type === 'datetime' || type === 'number') {\n    //         return format(value);\n    //     } else {\n    //         return value;\n    //     }\n    // }\n    ValueFormatter.prototype.toView = function (value, format) {\n        var result = value;\n        if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n            result = format(value);\n        }\n        return result;\n    };\n    // public setCulture(cultureName: string): void {\n    //     if (!isNullOrUndefined(cultureName)) {\n    //         setCulture(cultureName);\n    //     }\n    // }\n    /* tslint:disable:no-any */\n    ValueFormatter.prototype.displayText = function (value, format, isServerRendered) {\n        return this.toView(value, this.getFormatFunction(format, isServerRendered));\n    };\n    return ValueFormatter;\n}());\nexport { ValueFormatter };\n","import { ValueFormatter } from './value-formatter';\nimport { Encoding } from '@syncfusion/ej2-file-utils';\n/**\n * CsvHelper class\n * @private\n */\nvar CsvHelper = /** @class */ (function () {\n    /* tslint:disable:no-any */\n    function CsvHelper(json, separator) {\n        this.csvStr = '';\n        if (separator === null || separator === undefined) {\n            this.separator = ',';\n        }\n        else {\n            this.separator = separator;\n        }\n        this.formatter = new ValueFormatter();\n        this.isMicrosoftBrowser = !(!navigator.msSaveBlob);\n        if (json.isServerRendered !== null && json.isServerRendered !== undefined) {\n            this.isServerRendered = json.isServerRendered;\n        }\n        if (json.styles !== null && json.styles !== undefined) {\n            this.globalStyles = new Map();\n            for (var i = 0; i < json.styles.length; i++) {\n                if (json.styles[i].name !== undefined && json.styles[i].numberFormat !== undefined) {\n                    this.globalStyles.set(json.styles[i].name, json.styles[i].numberFormat);\n                }\n            }\n        }\n        // Parses Worksheets data to DOM.        \n        if (json.worksheets !== null && json.worksheets !== undefined) {\n            this.parseWorksheet(json.worksheets[0]);\n        }\n        //this.csvStr = 'a1,a2,a3\\nb1,b2,b3';\n    }\n    CsvHelper.prototype.parseWorksheet = function (json) {\n        //Rows\n        if (json.rows !== null && json.rows !== undefined) {\n            this.parseRows(json.rows);\n        }\n    };\n    /* tslint:disable:no-any */\n    CsvHelper.prototype.parseRows = function (rows) {\n        var count = 1;\n        for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n            var row = rows_1[_i];\n            //Row index\n            if (row.index !== null && row.index !== undefined) {\n                while (count < row.index) {\n                    this.csvStr += '\\r\\n';\n                    count++;\n                }\n                this.parseRow(row);\n            }\n            else {\n                throw Error('Row index is missing.');\n            }\n        }\n        this.csvStr += '\\r\\n';\n    };\n    /* tslint:disable:no-any */\n    CsvHelper.prototype.parseRow = function (row) {\n        if (row.cells !== null && row.cells !== undefined) {\n            var count = 1;\n            for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n                var cell = _a[_i];\n                //cell index\n                if (cell.index !== null && cell.index !== undefined) {\n                    while (count < cell.index) {\n                        this.csvStr += this.separator;\n                        count++;\n                    }\n                    this.parseCell(cell);\n                }\n                else {\n                    throw Error('Cell index is missing.');\n                }\n            }\n        }\n    };\n    /* tslint:disable:no-any */\n    CsvHelper.prototype.parseCell = function (cell) {\n        var csv = this.csvStr;\n        if (cell.value !== undefined) {\n            if (cell.value instanceof Date) {\n                if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n                    /* tslint:disable-next-line:max-line-length */\n                    try {\n                        csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: cell.style.numberFormat }, this.isServerRendered));\n                    }\n                    catch (error) {\n                        /* tslint:disable-next-line:max-line-length */\n                        csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', format: cell.style.numberFormat }, this.isServerRendered));\n                    }\n                }\n                else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n                    /* tslint:disable-next-line:max-line-length */\n                    try {\n                        csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', skeleton: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n                    }\n                    catch (error) {\n                        /* tslint:disable-next-line:max-line-length */\n                        csv += this.parseCellValue(this.formatter.displayText(cell.value, { type: 'dateTime', format: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n                    }\n                }\n                else {\n                    csv += cell.value;\n                }\n            }\n            else if (typeof (cell.value) === 'boolean') {\n                csv += cell.value ? 'TRUE' : 'FALSE';\n            }\n            else if (typeof (cell.value) === 'number') {\n                if (cell.style !== undefined && cell.style.numberFormat !== undefined) {\n                    /* tslint:disable-next-line:max-line-length */\n                    csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: cell.style.numberFormat }, this.isServerRendered));\n                }\n                else if (cell.style !== undefined && cell.style.name !== undefined && this.globalStyles.has(cell.style.name)) {\n                    /* tslint:disable-next-line:max-line-length */\n                    csv += this.parseCellValue(this.formatter.displayText(cell.value, { format: this.globalStyles.get(cell.style.name) }, this.isServerRendered));\n                }\n                else {\n                    csv += cell.value;\n                }\n            }\n            else {\n                csv += this.parseCellValue(cell.value);\n            }\n        }\n        this.csvStr = csv;\n    };\n    CsvHelper.prototype.parseCellValue = function (value) {\n        var val = '';\n        var length = value.length;\n        for (var start = 0; start < length; start++) {\n            if (value[start] === '\\\"') {\n                val += value[start].replace('\\\"', '\\\"\\\"');\n            }\n            else {\n                val += value[start];\n            }\n        }\n        value = val;\n        if (value.indexOf(this.separator) !== -1 || value.indexOf('\\n') !== -1 || value.indexOf('\\\"') !== -1) {\n            return value = '\\\"' + value + '\\\"';\n        }\n        else {\n            return value;\n        }\n    };\n    /**\n     * Saves the file with specified name and sends the file to client browser\n     * @param  {string} fileName- file name to save.\n     * @param  {Blob} buffer- the content to write in file\n     */\n    CsvHelper.prototype.save = function (fileName) {\n        this.buffer = new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n        if (this.isMicrosoftBrowser) {\n            navigator.msSaveBlob(this.buffer, fileName);\n        }\n        else {\n            var dataUrl_1 = window.URL.createObjectURL(this.buffer);\n            var dwlLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n            dwlLink.download = fileName;\n            dwlLink.href = dataUrl_1;\n            var event_1 = document.createEvent('MouseEvent');\n            event_1.initEvent('click', true, true);\n            dwlLink.dispatchEvent(event_1);\n            setTimeout(function () {\n                window.URL.revokeObjectURL(dataUrl_1);\n            });\n        }\n    };\n    /**\n    * Returns a Blob object containing CSV data with optional encoding.\n    * @param {string} [encodingType] - The supported encoding types are \"ansi\", \"unicode\" and \"utf8\".\n    */\n    /* tslint:disable:no-any */\n    CsvHelper.prototype.saveAsBlob = function (encodingType) {\n        if (encodingType != undefined) {\n            var encoding = new Encoding();\n            var encodeString = 'UTF-8';\n            if (encodingType.toUpperCase() == \"ANSI\") {\n                encoding.type = 'Ansi';\n                encodeString = 'ANSI';\n            }\n            else if (encodingType.toUpperCase() == \"UNICODE\") {\n                encoding.type = 'Unicode';\n                encodeString = 'UNICODE';\n            }\n            else {\n                encoding.type = 'Utf8';\n                encodeString = 'UTF-8';\n            }\n            var buffer = encoding.getBytes(this.csvStr, 0, this.csvStr.length);\n            return new Blob([buffer], { type: 'text/csv;charset=' + encodeString });\n        }\n        else\n            return new Blob(['\\ufeff' + this.csvStr], { type: 'text/csv;charset=UTF-8' });\n    };\n    return CsvHelper;\n}());\nexport { CsvHelper };\n","/**\n * BlobHelper class\n * @private\n */\nvar BlobHelper = /** @class */ (function () {\n    function BlobHelper() {\n        /* tslint:disable:no-any */\n        this.parts = [];\n    }\n    /* tslint:disable:no-any */\n    BlobHelper.prototype.append = function (part) {\n        this.parts.push(part);\n        this.blob = undefined; // Invalidate the blob\n    };\n    BlobHelper.prototype.getBlob = function () {\n        return new Blob(this.parts, { type: 'text/plain' });\n    };\n    return BlobHelper;\n}());\nexport { BlobHelper };\n","/**\n * AutoFilters class\n * @private\n */\nvar AutoFilters = /** @class */ (function () {\n    function AutoFilters() {\n    }\n    return AutoFilters;\n}());\nexport { AutoFilters };\n","import { Worksheets } from './worksheets';\nimport { Worksheet, FreezePane, MergeCell, MergeCells, HyperLink, Grouping } from './worksheet';\nimport { CellStyle, Font, Borders, CellXfs, Alignment, NumFmt, CellStyleXfs, CellStyles } from './cell-style';\nimport { Column } from './column';\nimport { Row, Rows } from './row';\nimport { Image } from './image';\nimport { Cell, Cells } from './cell';\nimport { ZipArchive, ZipArchiveItem } from '@syncfusion/ej2-compression';\nimport { CsvHelper } from './csv-helper';\nimport { Internationalization, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { BlobHelper } from './blob-helper';\nimport { AutoFilters } from './auto-filters';\n/**\n * Workbook class\n */\nvar Workbook = /** @class */ (function () {\n    /* tslint:disable:no-any */\n    function Workbook(json, saveType, culture, currencyString, separator) {\n        this.sharedStringCount = 0;\n        this.unitsProportions = [\n            96 / 75.0,\n            96 / 300.0,\n            96,\n            96 / 25.4,\n            96 / 2.54,\n            1,\n            96 / 72.0,\n            96 / 72.0 / 12700,\n        ];\n        /* tslint:disable:no-any */\n        this.hyperlinkStyle = { fontColor: '#0000FF', underline: true };\n        if (culture !== undefined) {\n            this.culture = culture;\n        }\n        else {\n            this.culture = 'en-US';\n        }\n        if (currencyString !== undefined) {\n            this.currency = currencyString;\n        }\n        else {\n            this.currency = 'USD';\n        }\n        this.intl = new Internationalization(this.culture);\n        this.mSaveType = saveType;\n        if (saveType === 'xlsx') {\n            this.mArchive = new ZipArchive();\n            this.sharedString = [];\n            this.mFonts = [];\n            this.mBorders = [];\n            this.mStyles = [];\n            this.printTitles = new Map();\n            this.cellStyles = new Map();\n            this.mNumFmt = new Map();\n            this.mFills = new Map();\n            this.mStyles.push(new CellStyle());\n            this.mFonts.push(new Font());\n            /* tslint:disable */\n            this.cellStyles.set('Normal', new CellStyles());\n            /* tslint:enable */\n            this.mCellXfs = [];\n            this.mCellStyleXfs = [];\n            this.drawingCount = 0;\n            this.imageCount = 0;\n            if (json.styles !== null && json.styles !== undefined) {\n                /* tslint:disable-next-line:no-any */\n                this.globalStyles = new Map();\n                for (var i = 0; i < json.styles.length; i++) {\n                    if (json.styles[i].name !== undefined) {\n                        if (!this.cellStyles.has(json.styles[i].name)) {\n                            var cellStyle = new CellStyle();\n                            cellStyle.isGlobalStyle = true;\n                            this.parserCellStyle(json.styles[i], cellStyle, 'none');\n                            var cellStylesIn = new CellStyles();\n                            cellStylesIn.name = cellStyle.name;\n                            cellStylesIn.xfId = (cellStyle.index - 1);\n                            this.cellStyles.set(cellStylesIn.name, cellStylesIn);\n                            /* tslint:disable-next-line:no-any */\n                            var tFormat = {};\n                            if (json.styles[i].numberFormat !== undefined) {\n                                tFormat.format = json.styles[i].numberFormat;\n                            }\n                            if (json.styles[i].type !== undefined) {\n                                tFormat.type = json.styles[i].type;\n                            }\n                            else {\n                                tFormat.type = 'datetime';\n                            }\n                            if (tFormat.format !== undefined) {\n                                this.globalStyles.set(json.styles[i].name, tFormat);\n                            }\n                        }\n                        else {\n                            throw Error('Style name ' + json.styles[i].name + ' is already existed');\n                        }\n                    }\n                }\n            }\n            // Parses Worksheets data to DOM.        \n            if (json.worksheets !== null && json.worksheets !== undefined) {\n                this.parserWorksheets(json.worksheets);\n            }\n            else {\n                throw Error('Worksheet is expected.');\n            }\n            // Parses the BuiltInProperties data to DOM.        \n            if (json.builtInProperties !== null && json.builtInProperties !== undefined) {\n                this.builtInProperties = new BuiltInProperties();\n                this.parserBuiltInProperties(json.builtInProperties, this.builtInProperties);\n            }\n        }\n        else {\n            this.csvHelper = new CsvHelper(json, separator);\n        }\n    }\n    /* tslint:disable:no-any */\n    Workbook.prototype.parserBuiltInProperties = function (jsonBuiltInProperties, builtInProperties) {\n        //Author\n        if (jsonBuiltInProperties.author !== null && jsonBuiltInProperties.author !== undefined) {\n            builtInProperties.author = jsonBuiltInProperties.author;\n        }\n        //Comments\n        if (jsonBuiltInProperties.comments !== null && jsonBuiltInProperties.comments !== undefined) {\n            builtInProperties.comments = jsonBuiltInProperties.comments;\n        }\n        //Category\n        if (jsonBuiltInProperties.category !== null && jsonBuiltInProperties.category !== undefined) {\n            builtInProperties.category = jsonBuiltInProperties.category;\n        }\n        //Company\n        if (jsonBuiltInProperties.company !== null && jsonBuiltInProperties.company !== undefined) {\n            builtInProperties.company = jsonBuiltInProperties.company;\n        }\n        //Manager\n        if (jsonBuiltInProperties.manager !== null && jsonBuiltInProperties.manager !== undefined) {\n            builtInProperties.manager = jsonBuiltInProperties.manager;\n        }\n        //Subject\n        if (jsonBuiltInProperties.subject !== null && jsonBuiltInProperties.subject !== undefined) {\n            builtInProperties.subject = jsonBuiltInProperties.subject;\n        }\n        //Title\n        if (jsonBuiltInProperties.title !== null && jsonBuiltInProperties.title !== undefined) {\n            builtInProperties.title = jsonBuiltInProperties.title;\n        }\n        //Creation date\n        if (jsonBuiltInProperties.createdDate !== null && jsonBuiltInProperties.createdDate !== undefined) {\n            builtInProperties.createdDate = jsonBuiltInProperties.createdDate;\n        }\n        //Modified date\n        if (jsonBuiltInProperties.modifiedDate !== null && jsonBuiltInProperties.modifiedDate !== undefined) {\n            builtInProperties.modifiedDate = jsonBuiltInProperties.modifiedDate;\n        }\n        //Tags\n        if (jsonBuiltInProperties.tags !== null && jsonBuiltInProperties.tags !== undefined) {\n            builtInProperties.tags = jsonBuiltInProperties.tags;\n        }\n        //Status\n        if (jsonBuiltInProperties.status !== null && jsonBuiltInProperties.status !== undefined) {\n            builtInProperties.status = jsonBuiltInProperties.status;\n        }\n    };\n    /* tslint:disable:no-any */\n    Workbook.prototype.parserWorksheets = function (json) {\n        this.worksheets = new Worksheets();\n        var length = json.length;\n        for (var i = 0; i < length; i++) {\n            var jsonSheet = json[i];\n            var sheet = new Worksheet();\n            this.mergeCells = new MergeCells();\n            this.mergedCellsStyle = new Map();\n            this.mHyperLinks = [];\n            //Name\n            if (jsonSheet.name !== null && jsonSheet.name !== undefined) {\n                sheet.name = jsonSheet.name;\n            }\n            else {\n                sheet.name = 'Sheet' + (i + 1).toString();\n            }\n            if (jsonSheet.enableRtl !== null && jsonSheet.enableRtl !== undefined) {\n                sheet.enableRtl = jsonSheet.enableRtl;\n            }\n            sheet.index = (i + 1);\n            //Columns\n            if (jsonSheet.columns !== null && jsonSheet.columns !== undefined) {\n                this.parserColumns(jsonSheet.columns, sheet);\n            }\n            //Rows\n            if (jsonSheet.rows !== null && jsonSheet.rows !== undefined) {\n                this.parserRows(jsonSheet.rows, sheet);\n            }\n            //showGridLines\n            if (jsonSheet.showGridLines !== null && jsonSheet.showGridLines !== undefined) {\n                sheet.showGridLines = jsonSheet.showGridLines;\n            }\n            //FreezePanes\n            if (jsonSheet.freeze !== null && jsonSheet.freeze !== undefined) {\n                this.parserFreezePanes(jsonSheet.freeze, sheet);\n            }\n            //Print Title\n            if (jsonSheet.printTitle !== null && jsonSheet.printTitle !== undefined) {\n                this.parserPrintTitle(jsonSheet.printTitle, sheet);\n            }\n            if (jsonSheet.pageSetup !== undefined) {\n                if (jsonSheet.pageSetup.isSummaryRowBelow !== undefined) {\n                    sheet.isSummaryRowBelow = jsonSheet.pageSetup.isSummaryRowBelow;\n                }\n            }\n            if (jsonSheet.images !== undefined) {\n                this.parserImages(jsonSheet.images, sheet);\n            }\n            if (jsonSheet.autoFilters !== null && jsonSheet.autoFilters !== undefined) {\n                this.parseFilters(jsonSheet.autoFilters, sheet);\n            }\n            sheet.index = (i + 1);\n            sheet.mergeCells = this.mergeCells;\n            sheet.hyperLinks = this.mHyperLinks;\n            this.worksheets.push(sheet);\n        }\n    };\n    /* tslint:disable:no-any */\n    Workbook.prototype.mergeOptions = function (fromJson, toJson) {\n        /* tslint:disable:no-any */\n        var result = {};\n        this.applyProperties(fromJson, result);\n        this.applyProperties(toJson, result);\n        return result;\n    };\n    /* tslint:disable:no-any */\n    Workbook.prototype.applyProperties = function (sourceJson, destJson) {\n        var keys = Object.keys(sourceJson);\n        for (var index = 0; index < keys.length; index++) {\n            if (keys[index] !== 'name') {\n                destJson[keys[index]] = sourceJson[keys[index]];\n            }\n        }\n    };\n    Workbook.prototype.getCellName = function (row, column) {\n        return this.getColumnName(column) + row.toString();\n    };\n    Workbook.prototype.getColumnName = function (col) {\n        col--;\n        var strColumnName = '';\n        do {\n            var iCurrentDigit = col % 26;\n            col = col / 26 - 1;\n            strColumnName = String.fromCharCode(65 + iCurrentDigit) + strColumnName;\n        } while (col >= 0);\n        return strColumnName;\n    };\n    /* tslint:disable:no-any */\n    Workbook.prototype.parserPrintTitle = function (json, sheet) {\n        var printTitleName = '';\n        var titleRowName;\n        if (json.fromRow !== null && json.fromRow !== undefined) {\n            var fromRow = json.fromRow;\n            var toRow = void 0;\n            if (json.toRow !== null && json.toRow !== undefined) {\n                toRow = json.toRow;\n            }\n            else {\n                toRow = json.fromRow;\n            }\n            titleRowName = '$' + fromRow + ':$' + toRow;\n        }\n        var titleColName;\n        if (json.fromColumn !== null && json.fromColumn !== undefined) {\n            var fromColumn = json.fromColumn;\n            var toColumn = void 0;\n            if (json.toColumn !== null && json.toColumn !== undefined) {\n                toColumn = json.toColumn;\n            }\n            else {\n                toColumn = json.fromColumn;\n            }\n            titleColName = '$' + this.getColumnName(fromColumn) + ':$' + this.getColumnName(toColumn);\n        }\n        if (titleRowName !== undefined) {\n            printTitleName += (sheet.name + '!' + titleRowName);\n        }\n        if (titleColName !== undefined && titleRowName !== undefined) {\n            printTitleName += ',' + (sheet.name + '!' + titleColName);\n        }\n        else if (titleColName !== undefined) {\n            printTitleName += (sheet.name + '!' + titleColName);\n        }\n        if (printTitleName !== '') {\n            this.printTitles.set(sheet.index - 1, printTitleName);\n        }\n    };\n    /* tslint:disable:no-any */\n    Workbook.prototype.parserFreezePanes = function (json, sheet) {\n        sheet.freezePanes = new FreezePane();\n        if (json.row !== null && json.row !== undefined) {\n            sheet.freezePanes.row = json.row;\n        }\n        else {\n            sheet.freezePanes.row = 0;\n        }\n        if (json.column !== null && json.column !== undefined) {\n            sheet.freezePanes.column = json.column;\n        }\n        else {\n            sheet.freezePanes.column = 0;\n        }\n        sheet.freezePanes.leftCell = this.getCellName(sheet.freezePanes.row + 1, sheet.freezePanes.column + 1);\n    };\n    /* tslint:disable:no-any */\n    Workbook.prototype.parserColumns = function (json, sheet) {\n        var columnsLength = json.length;\n        sheet.columns = [];\n        for (var column = 0; column < columnsLength; column++) {\n            var col = new Column();\n            if (json[column].index !== null && json[column].index !== undefined) {\n                col.index = json[column].index;\n            }\n            else {\n                throw Error('Column index is missing.');\n            }\n            if (json[column].width !== null && json[column].width !== undefined) {\n                col.width = json[column].width;\n            }\n            sheet.columns.push(col);\n        }\n    };\n    /* tslint:disable:no-any */\n    Workbook.prototype.parserRows = function (json, sheet) {\n        var rowsLength = json.length;\n        sheet.rows = new Rows();\n        var rowId = 0;\n        for (var r = 0; r < rowsLength; r++) {\n            var row = this.parserRow(json[r], rowId);\n            rowId = row.index;\n            sheet.rows.add(row);\n        }\n        this.insertMergedCellsStyle(sheet);\n    };\n    Workbook.prototype.insertMergedCellsStyle = function (sheet) {\n        var _this = this;\n        if (this.mergeCells.length > 0) {\n            this.mergedCellsStyle.forEach(function (value, key) {\n                var row = sheet.rows.filter(function (item) {\n                    return item.index === value.y;\n                })[0];\n                if (!isNullOrUndefined(row)) {\n                    var cell = row.cells.filter(function (item) {\n                        return item.index === value.x;\n                    })[0];\n                    if (!isNullOrUndefined(cell)) {\n                        cell.styleIndex = value.styleIndex;\n                    }\n                    else {\n                        var cells = row.cells.filter(function (item) {\n                            return item.index <= value.x;\n                        });\n                        var insertIndex = 0;\n                        if (cells.length > 0) {\n                            insertIndex = row.cells.indexOf(cells[cells.length - 1]) + 1;\n                        }\n                        row.cells.splice(insertIndex, 0, _this.createCell(value, key));\n                    }\n                }\n                else {\n                    var rows = sheet.rows.filter(function (item) {\n                        return item.index <= value.y;\n                    });\n                    var rowToInsert = new Row();\n                    rowToInsert.index = value.y;\n                    rowToInsert.cells = new Cells();\n                    rowToInsert.cells.add(_this.createCell(value, key));\n                    var insertIndex = 0;\n                    if (rows.length > 0) {\n                        insertIndex = sheet.rows.indexOf(rows[rows.length - 1]) + 1;\n                    }\n                    sheet.rows.splice(insertIndex, 0, rowToInsert);\n                }\n            });\n        }\n    };\n    Workbook.prototype.createCell = function (value, key) {\n        var cellToInsert = new Cell();\n        cellToInsert.refName = key;\n        cellToInsert.index = value.x;\n        cellToInsert.cellStyle = new CellStyle();\n        cellToInsert.styleIndex = value.styleIndex;\n        return cellToInsert;\n    };\n    /* tslint:disable:no-any */\n    Workbook.prototype.parserRow = function (json, rowIndex) {\n        var row = new Row();\n        //Row Height\n        if (json.height !== null && json.height !== undefined) {\n            row.height = json.height;\n        }\n        //Row index\n        if (json.index !== null && json.index !== undefined) {\n            row.index = json.index;\n        }\n        else {\n            throw Error('Row index is missing.');\n        }\n        if (json.grouping !== null && json.grouping !== undefined) {\n            this.parseGrouping(json.grouping, row);\n        }\n        this.parseCells(json.cells, row);\n        return row;\n    };\n    /* tslint:disable:no-any */\n    Workbook.prototype.parseGrouping = function (json, row) {\n        row.grouping = new Grouping();\n        if (json.outlineLevel !== undefined) {\n            row.grouping.outlineLevel = json.outlineLevel;\n        }\n        if (json.isCollapsed !== undefined) {\n            row.grouping.isCollapsed = json.isCollapsed;\n        }\n        if (json.isHidden !== undefined) {\n            row.grouping.isHidden = json.isHidden;\n        }\n    };\n    /* tslint:disable:no-any */\n    Workbook.prototype.parseCells = function (json, row) {\n        row.cells = new Cells();\n        var cellsLength = json !== undefined ? json.length : 0;\n        var spanMin = 1;\n        var spanMax = 1;\n        var curCellIndex = 0;\n        for (var cellId = 0; cellId < cellsLength; cellId++) {\n            /* tslint:disable:no-any */\n            var jsonCell = json[cellId];\n            var cell = new Cell();\n            //cell index\n            if (jsonCell.index !== null && jsonCell.index !== undefined) {\n                cell.index = jsonCell.index;\n            }\n            else {\n                throw Error('Cell index is missing.');\n            }\n            if (cell.index < spanMin) {\n                spanMin = cell.index;\n            }\n            else if (cell.index > spanMax) {\n                spanMax = cell.index;\n            }\n            //Update the Cell name\n            cell.refName = this.getCellName(row.index, cell.index);\n            //Row span\n            if (jsonCell.rowSpan !== null && jsonCell.rowSpan !== undefined) {\n                cell.rowSpan = jsonCell.rowSpan - 1;\n            }\n            else {\n                cell.rowSpan = 0;\n            }\n            //Column span\n            if (jsonCell.colSpan !== null && jsonCell.colSpan !== undefined) {\n                cell.colSpan = jsonCell.colSpan - 1;\n            }\n            else {\n                cell.colSpan = 0;\n            }\n            //Hyperlink\n            if (jsonCell.hyperlink !== null && jsonCell.hyperlink !== undefined) {\n                var hyperLink = new HyperLink();\n                if (jsonCell.hyperlink.target !== undefined) {\n                    hyperLink.target = jsonCell.hyperlink.target;\n                    if (jsonCell.hyperlink.displayText !== undefined) {\n                        cell.value = jsonCell.hyperlink.displayText;\n                    }\n                    else {\n                        cell.value = jsonCell.hyperlink.target;\n                    }\n                    cell.type = this.getCellValueType(cell.value);\n                    hyperLink.ref = cell.refName;\n                    hyperLink.rId = (this.mHyperLinks.length + 1);\n                    this.mHyperLinks.push(hyperLink);\n                    cell.cellStyle = new CellStyle();\n                    /* tslint:disable-next-line:max-line-length */\n                    this.parserCellStyle((jsonCell.style !== undefined ? this.mergeOptions(jsonCell.style, this.hyperlinkStyle) : this.hyperlinkStyle), cell.cellStyle, 'string');\n                    cell.styleIndex = cell.cellStyle.index;\n                }\n            }\n            // formulas\n            if (jsonCell.formula !== null && jsonCell.formula !== undefined) {\n                cell.formula = jsonCell.formula;\n                cell.type = 'formula';\n            }\n            //Cell value\n            if (jsonCell.value !== null && jsonCell.value !== undefined) {\n                if (cell.formula !== undefined) {\n                    cell.value = 0;\n                }\n                else {\n                    cell.value = jsonCell.value;\n                    cell.type = this.getCellValueType(cell.value);\n                }\n            }\n            if (jsonCell.style !== null && jsonCell.style !== undefined && cell.styleIndex === undefined) {\n                cell.cellStyle = new CellStyle();\n                if (cell.value instanceof Date) {\n                    this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type, 14);\n                }\n                else {\n                    this.parserCellStyle(jsonCell.style, cell.cellStyle, cell.type);\n                }\n                cell.styleIndex = cell.cellStyle.index;\n            }\n            else if (cell.value instanceof Date) {\n                cell.cellStyle = new CellStyle();\n                this.parserCellStyle({}, cell.cellStyle, cell.type, 14);\n                cell.styleIndex = cell.cellStyle.index;\n            }\n            this.parseCellType(cell);\n            this.mergeCells = this.processMergeCells(cell, row.index, this.mergeCells);\n            row.cells.add(cell);\n            curCellIndex = (cell.index + 1);\n        }\n        row.spans = (spanMin) + ':' + (spanMax);\n    };\n    Workbook.prototype.GetColors = function () {\n        var colors;\n        colors = new Map();\n        /* tslint:disable */\n        colors.set('WHITE', 'FFFFFFFF');\n        /* tslint:disable */\n        colors.set('SILVER', 'FFC0C0C0');\n        /* tslint:disable */\n        colors.set('GRAY', 'FF808080');\n        /* tslint:disable */\n        colors.set('BLACK', 'FF000000');\n        /* tslint:disable */\n        colors.set('RED', 'FFFF0000');\n        /* tslint:disable */\n        colors.set('MAROON', 'FF800000');\n        /* tslint:disable */\n        colors.set('YELLOW', 'FFFFFF00');\n        /* tslint:disable */\n        colors.set('OLIVE', 'FF808000');\n        /* tslint:disable */\n        colors.set('LIME', 'FF00FF00');\n        /* tslint:disable */\n        colors.set('GREEN', 'FF008000');\n        /* tslint:disable */\n        colors.set('AQUA', 'FF00FFFF');\n        /* tslint:disable */\n        colors.set('TEAL', 'FF008080');\n        /* tslint:disable */\n        colors.set('BLUE', 'FF0000FF');\n        /* tslint:disable */\n        colors.set('NAVY', 'FF000080');\n        /* tslint:disable */\n        colors.set('FUCHSIA', 'FFFF00FF');\n        /* tslint:disable */\n        colors.set('PURPLE', 'FF800080');\n        return colors;\n    };\n    Workbook.prototype.processColor = function (colorVal) {\n        if (colorVal.indexOf('#') === 0) {\n            return colorVal.replace('#', 'FF');\n        }\n        colorVal = colorVal.toUpperCase();\n        this.rgbColors = this.GetColors();\n        if (this.rgbColors.has(colorVal)) {\n            colorVal = this.rgbColors.get(colorVal);\n        }\n        else {\n            colorVal = 'FF000000';\n        }\n        return colorVal;\n    };\n    Workbook.prototype.processCellValue = function (value, cell) {\n        var cellValue = value;\n        if (value.indexOf(\"<font\") !== -1 || value.indexOf(\"<a\") !== -1 || value.indexOf(\"<b>\") !== -1 ||\n            value.indexOf(\"<i>\") !== -1 || value.indexOf(\"<u>\") !== -1) {\n            var processedVal = '';\n            var startindex = value.indexOf('<', 0);\n            var endIndex = value.indexOf('>', startindex + 1);\n            if (startindex >= 0 && endIndex >= 0) {\n                if (startindex !== 0) {\n                    processedVal += '<r><t xml:space=\"preserve\">' + this.processString(value.substring(0, startindex)) + '</t></r>';\n                }\n                while (startindex >= 0 && endIndex >= 0) {\n                    endIndex = value.indexOf('>', startindex + 1);\n                    if (endIndex >= 0) {\n                        var subString = value.substring(startindex + 1, endIndex);\n                        startindex = value.indexOf('<', endIndex + 1);\n                        if (startindex < 0) {\n                            startindex = cellValue.length;\n                        }\n                        var text = cellValue.substring(endIndex + 1, startindex);\n                        if (text.length !== 0) {\n                            var subSplit = subString.split(' ');\n                            if (subSplit.length > 0) {\n                                processedVal += '<r><rPr>';\n                            }\n                            if (subSplit.length > 1) {\n                                for (var _i = 0, subSplit_1 = subSplit; _i < subSplit_1.length; _i++) {\n                                    var element = subSplit_1[_i];\n                                    var start = element.trim().substring(0, 5);\n                                    switch (start) {\n                                        case 'size=':\n                                            processedVal += '<sz val=\"' + element.substring(6, element.length - 1) + '\"/>';\n                                            break;\n                                        case 'face=':\n                                            processedVal += '<rFont val=\"' + element.substring(6, element.length - 1) + '\"/>';\n                                            break;\n                                        case 'color':\n                                            processedVal += '<color rgb=\"' + this.processColor(element.substring(7, element.length - 1)) + '\"/>';\n                                            break;\n                                        case 'href=':\n                                            var hyperLink = new HyperLink();\n                                            hyperLink.target = element.substring(6, element.length - 1).trim();\n                                            hyperLink.ref = cell.refName;\n                                            hyperLink.rId = (this.mHyperLinks.length + 1);\n                                            this.mHyperLinks.push(hyperLink);\n                                            processedVal += '<color rgb=\"FF0000FF\"/><u/><b/>';\n                                            break;\n                                    }\n                                }\n                            }\n                            else if (subSplit.length === 1) {\n                                var style = subSplit[0].trim();\n                                switch (style) {\n                                    case 'b':\n                                        processedVal += '<b/>';\n                                        break;\n                                    case 'i':\n                                        processedVal += '<i/>';\n                                        break;\n                                    case 'u':\n                                        processedVal += '<u/>';\n                                        break;\n                                }\n                            }\n                            processedVal += '</rPr><t xml:space=\"preserve\">' + this.processString(text) + '</t></r>';\n                        }\n                    }\n                }\n                if (processedVal === '') {\n                    return cellValue;\n                }\n                return processedVal;\n            }\n            else {\n                return cellValue;\n            }\n        }\n        else {\n            return cellValue;\n        }\n    };\n    Workbook.prototype.applyGlobalStyle = function (json, cellStyle) {\n        var index = 0;\n        if (this.cellStyles.has(json.name)) {\n            cellStyle.index = this.mStyles.filter(function (a) { return (a.name === json.name); })[0].index;\n            cellStyle.name = json.name;\n        }\n    };\n    /* tslint:disable:no-any */\n    Workbook.prototype.parserCellStyle = function (json, cellStyle, cellType, defStyleIndex) {\n        //name\n        if (json.name !== null && json.name !== undefined) {\n            if (cellStyle.isGlobalStyle) {\n                cellStyle.name = json.name;\n            }\n            else {\n                this.applyGlobalStyle(json, cellStyle);\n                return;\n            }\n        }\n        //background color\n        if (json.backColor !== null && json.backColor !== undefined) {\n            cellStyle.backColor = json.backColor;\n        }\n        //borders\n        //leftBorder\n        cellStyle.borders = new Borders();\n        //AllBorder\n        if (json.borders !== null && json.borders !== undefined) {\n            this.parserBorder(json.borders, cellStyle.borders.all);\n        }\n        //leftborder\n        if (json.leftBorder !== null && json.leftBorder !== undefined) {\n            this.parserBorder(json.leftBorder, cellStyle.borders.left);\n        }\n        //rightBorder\n        if (json.rightBorder !== null && json.rightBorder !== undefined) {\n            this.parserBorder(json.rightBorder, cellStyle.borders.right);\n        }\n        //topBorder\n        if (json.topBorder !== null && json.topBorder !== undefined) {\n            this.parserBorder(json.topBorder, cellStyle.borders.top);\n        }\n        //bottomBorder\n        if (json.bottomBorder !== null && json.bottomBorder !== undefined) {\n            this.parserBorder(json.bottomBorder, cellStyle.borders.bottom);\n        }\n        //fontName\n        if (json.fontName !== null && json.fontName !== undefined) {\n            cellStyle.fontName = json.fontName;\n        }\n        //fontSize\n        if (json.fontSize !== null && json.fontSize !== undefined) {\n            cellStyle.fontSize = json.fontSize;\n        }\n        //fontColor\n        if (json.fontColor !== null && json.fontColor !== undefined) {\n            cellStyle.fontColor = json.fontColor;\n        }\n        //italic\n        if (json.italic !== null && json.italic !== undefined) {\n            cellStyle.italic = json.italic;\n        }\n        //bold\n        if (json.bold !== null && json.bold !== undefined) {\n            cellStyle.bold = json.bold;\n        }\n        //hAlign\n        if (json.hAlign !== null && json.hAlign !== undefined) {\n            cellStyle.hAlign = json.hAlign.toLowerCase();\n        }\n        //indent\n        if (json.indent !== null && json.indent !== undefined) {\n            cellStyle.indent = json.indent;\n            if (!(cellStyle.hAlign === 'left' || cellStyle.hAlign === 'right')) {\n                cellStyle.hAlign = 'left';\n            }\n        }\n        if (json.rotation !== null && json.rotation !== undefined) {\n            cellStyle.rotation = json.rotation;\n        }\n        //vAlign\n        if (json.vAlign !== null && json.vAlign !== undefined) {\n            cellStyle.vAlign = json.vAlign.toLowerCase();\n        }\n        //underline\n        if (json.underline !== null && json.underline !== undefined) {\n            cellStyle.underline = json.underline;\n        }\n        //strikeThrough\n        if (json.strikeThrough !== null && json.strikeThrough !== undefined) {\n            cellStyle.strikeThrough = json.strikeThrough;\n        }\n        //wrapText\n        if (json.wrapText !== null && json.wrapText !== undefined) {\n            cellStyle.wrapText = json.wrapText;\n        }\n        //numberFormat\n        if (json.numberFormat !== null && json.numberFormat !== undefined) {\n            if (json.type !== null && json.type !== undefined) {\n                cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, json.type);\n            }\n            else {\n                cellStyle.numberFormat = this.getNumberFormat(json.numberFormat, cellType);\n            }\n        }\n        else if (defStyleIndex !== undefined) {\n            cellStyle.numFmtId = 14;\n            cellStyle.numberFormat = 'GENERAL';\n        }\n        else {\n            cellStyle.numberFormat = 'GENERAL';\n        }\n        cellStyle.index = this.processCellStyle(cellStyle);\n    };\n    Workbook.prototype.switchNumberFormat = function (numberFormat, type) {\n        var format = this.getNumberFormat(numberFormat, type);\n        if (format !== numberFormat) {\n            var numFmt = this.mNumFmt.get(numberFormat);\n            if (numFmt !== undefined) {\n                numFmt.formatCode = format;\n                if (this.mNumFmt.has(format)) {\n                    for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n                        var cellStyleXfs = _a[_i];\n                        if (cellStyleXfs.numFmtId === numFmt.numFmtId) {\n                            cellStyleXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n                        }\n                    }\n                    for (var _b = 0, _c = this.mCellXfs; _b < _c.length; _b++) {\n                        var cellXfs = _c[_b];\n                        if (cellXfs.numFmtId === numFmt.numFmtId) {\n                            cellXfs.numFmtId = this.mNumFmt.get(format).numFmtId;\n                        }\n                    }\n                }\n            }\n        }\n    };\n    Workbook.prototype.changeNumberFormats = function (value) {\n        if (typeof value == \"string\") {\n            var regex = new RegExp(this.currency, 'g');\n            value = value.replace(regex, '[$' + this.currency + ']');\n        }\n        else if (typeof value == \"object\") {\n            for (var i = 0; i < value.length; i++) {\n                value[i] = value[i].replace(this.currency, '[$' + this.currency + ']');\n            }\n        }\n        return value;\n    };\n    Workbook.prototype.getNumberFormat = function (numberFormat, type) {\n        var returnFormat;\n        switch (type) {\n            case 'number':\n                try {\n                    returnFormat = this.intl.getNumberPattern({ format: numberFormat, currency: this.currency, useGrouping: true }, true);\n                    if (this.currency.length > 1) {\n                        returnFormat = this.changeNumberFormats(returnFormat);\n                    }\n                }\n                catch (error) {\n                    returnFormat = numberFormat;\n                }\n                break;\n            case 'datetime':\n                try {\n                    returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'dateTime' }, true);\n                }\n                catch (error) {\n                    try {\n                        returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'dateTime' }, true);\n                    }\n                    catch (error) {\n                        returnFormat = numberFormat;\n                    }\n                }\n                break;\n            case 'date':\n                try {\n                    returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'date' }, true);\n                }\n                catch (error) {\n                    try {\n                        returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'date' }, true);\n                    }\n                    catch (error) {\n                        returnFormat = numberFormat;\n                    }\n                }\n                break;\n            case 'time':\n                try {\n                    returnFormat = this.intl.getDatePattern({ skeleton: numberFormat, type: 'time' }, true);\n                }\n                catch (error) {\n                    try {\n                        returnFormat = this.intl.getDatePattern({ format: numberFormat, type: 'time' }, true);\n                    }\n                    catch (error) {\n                        returnFormat = numberFormat;\n                    }\n                }\n                break;\n            default:\n                returnFormat = numberFormat;\n                break;\n        }\n        return returnFormat;\n    };\n    /* tslint:disable:no-any */\n    Workbook.prototype.parserBorder = function (json, border) {\n        if (json.color !== null && json.color !== undefined) {\n            border.color = json.color;\n        }\n        else {\n            border.color = '#000000';\n        }\n        if (json.lineStyle !== null && json.lineStyle !== undefined) {\n            border.lineStyle = json.lineStyle;\n        }\n        else {\n            border.lineStyle = 'thin';\n        }\n    };\n    Workbook.prototype.processCellStyle = function (style) {\n        if (style.isGlobalStyle) {\n            this.processNumFormatId(style);\n            this.mStyles.push(style);\n            return this.mStyles.length;\n        }\n        else {\n            var compareResult = this.compareStyle(style);\n            if (!compareResult.result) {\n                this.processNumFormatId(style);\n                this.mStyles.push(style);\n                return this.mStyles.length;\n            }\n            else {\n                //Return the index of the already existing style.\n                return compareResult.index;\n            }\n        }\n    };\n    Workbook.prototype.processNumFormatId = function (style) {\n        if (style.numberFormat !== 'GENERAL' && !this.mNumFmt.has(style.numberFormat)) {\n            var id = this.mNumFmt.size + 164;\n            this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n        }\n    };\n    Workbook.prototype.isNewFont = function (toCompareStyle) {\n        var result = false;\n        var index = 0;\n        for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n            var font = _a[_i];\n            index++;\n            var fontColor = undefined;\n            if (toCompareStyle.fontColor !== undefined) {\n                fontColor = ('FF' + toCompareStyle.fontColor.replace('#', ''));\n            }\n            result = font.color === fontColor &&\n                font.b === toCompareStyle.bold &&\n                font.i === toCompareStyle.italic &&\n                font.u === toCompareStyle.underline &&\n                font.strike === toCompareStyle.strikeThrough &&\n                font.name === toCompareStyle.fontName &&\n                font.sz === toCompareStyle.fontSize;\n            if (result) {\n                break;\n            }\n        }\n        index = index - 1;\n        return { index: index, result: result };\n    };\n    Workbook.prototype.isNewBorder = function (toCompareStyle) {\n        var bStyle = new CellStyle();\n        if (this.isAllBorder(toCompareStyle.borders)) {\n            return (bStyle.borders.all.color === toCompareStyle.borders.all.color &&\n                bStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle);\n        }\n        else {\n            return (bStyle.borders.left.color === toCompareStyle.borders.left.color &&\n                bStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n                bStyle.borders.right.color === toCompareStyle.borders.right.color &&\n                bStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n                bStyle.borders.top.color === toCompareStyle.borders.top.color &&\n                bStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n                bStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n                bStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle);\n        }\n    };\n    Workbook.prototype.isAllBorder = function (toCompareBorder) {\n        var allBorderStyle = new CellStyle();\n        return allBorderStyle.borders.all.color !== toCompareBorder.all.color &&\n            allBorderStyle.borders.all.lineStyle !== toCompareBorder.all.lineStyle;\n    };\n    Workbook.prototype.compareStyle = function (toCompareStyle) {\n        var result = true;\n        var index = 0;\n        var globalStyleIndex = 0;\n        for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n            var baseStyle = _a[_i];\n            result = baseStyle.isGlobalStyle ? false : (baseStyle.backColor === toCompareStyle.backColor &&\n                baseStyle.bold === toCompareStyle.bold &&\n                baseStyle.numFmtId === toCompareStyle.numFmtId &&\n                baseStyle.numberFormat === toCompareStyle.numberFormat &&\n                baseStyle.type === toCompareStyle.type &&\n                baseStyle.fontColor === toCompareStyle.fontColor &&\n                baseStyle.fontName === toCompareStyle.fontName &&\n                baseStyle.fontSize === toCompareStyle.fontSize &&\n                baseStyle.hAlign === toCompareStyle.hAlign &&\n                baseStyle.italic === toCompareStyle.italic &&\n                baseStyle.underline === toCompareStyle.underline &&\n                baseStyle.strikeThrough === toCompareStyle.strikeThrough &&\n                baseStyle.vAlign === toCompareStyle.vAlign &&\n                baseStyle.indent === toCompareStyle.indent &&\n                baseStyle.rotation === toCompareStyle.rotation &&\n                baseStyle.wrapText === toCompareStyle.wrapText &&\n                (baseStyle.borders.all.color === toCompareStyle.borders.all.color &&\n                    baseStyle.borders.all.lineStyle === toCompareStyle.borders.all.lineStyle) &&\n                (baseStyle.borders.left.color === toCompareStyle.borders.left.color &&\n                    baseStyle.borders.left.lineStyle === toCompareStyle.borders.left.lineStyle &&\n                    baseStyle.borders.right.color === toCompareStyle.borders.right.color &&\n                    baseStyle.borders.right.lineStyle === toCompareStyle.borders.right.lineStyle &&\n                    baseStyle.borders.top.color === toCompareStyle.borders.top.color &&\n                    baseStyle.borders.top.lineStyle === toCompareStyle.borders.top.lineStyle &&\n                    baseStyle.borders.bottom.color === toCompareStyle.borders.bottom.color &&\n                    baseStyle.borders.bottom.lineStyle === toCompareStyle.borders.bottom.lineStyle));\n            if (result) {\n                index = baseStyle.index;\n                break;\n            }\n        }\n        return { index: index, result: result };\n    };\n    Workbook.prototype.contains = function (array, item) {\n        var index = array.indexOf(item);\n        return index > -1 && index < array.length;\n    };\n    Workbook.prototype.getCellValueType = function (value) {\n        if (value instanceof Date) {\n            return 'datetime';\n        }\n        else if (typeof (value) === 'boolean') {\n            return 'boolean';\n        }\n        else if (typeof (value) === 'number') {\n            return 'number';\n        }\n        else {\n            return 'string';\n        }\n    };\n    Workbook.prototype.parseCellType = function (cell) {\n        var type = cell.type;\n        var saveType;\n        var value = cell.value;\n        switch (type) {\n            case 'datetime':\n                value = this.toOADate(value);\n                if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n                    if (this.globalStyles.has(cell.cellStyle.name)) {\n                        var value_1 = this.globalStyles.get(cell.cellStyle.name);\n                        this.switchNumberFormat(value_1.format, value_1.type);\n                    }\n                }\n                saveType = 'n';\n                break;\n            //TODO: Update the number format index and style\n            case 'boolean':\n                value = value ? 1 : 0;\n                saveType = 'b';\n                break;\n            case 'number':\n                saveType = 'n';\n                if (cell.cellStyle !== undefined && cell.cellStyle.name !== undefined) {\n                    if (this.globalStyles.has(cell.cellStyle.name)) {\n                        this.switchNumberFormat(this.globalStyles.get(cell.cellStyle.name).format, 'number');\n                    }\n                }\n                break;\n            case 'string':\n                this.sharedStringCount++;\n                saveType = 's';\n                var sstvalue = this.processCellValue(value, cell);\n                if (!this.contains(this.sharedString, sstvalue)) {\n                    this.sharedString.push(sstvalue);\n                }\n                value = this.sharedString.indexOf(sstvalue);\n                break;\n            default:\n                break;\n        }\n        cell.saveType = saveType;\n        cell.value = value;\n    };\n    Workbook.prototype.parserImages = function (json, sheet) {\n        var imagesLength = json.length;\n        sheet.images = [];\n        var imageId = 0;\n        for (var p = 0; p < imagesLength; p++) {\n            var image = this.parserImage(json[p]);\n            sheet.images.push(image);\n        }\n    };\n    Workbook.prototype.parseFilters = function (json, sheet) {\n        sheet.autoFilters = new AutoFilters();\n        if (json.row !== null && json.row !== undefined)\n            sheet.autoFilters.row = json.row;\n        else\n            throw new Error('Argument Null Exception: row null or empty');\n        if (json.lastRow !== null && json.lastRow !== undefined)\n            sheet.autoFilters.lastRow = json.lastRow;\n        else\n            throw new Error('Argument Null Exception: lastRow cannot be null or empty');\n        if (json.column !== null && json.column !== undefined)\n            sheet.autoFilters.column = json.column;\n        else\n            throw new Error('Argument Null Exception: column cannot be null or empty');\n        if (json.lastColumn !== null && json.row !== undefined)\n            sheet.autoFilters.lastColumn = json.lastColumn;\n        else\n            throw new Error('Argument Null Exception: lastColumn cannot be null or empty');\n    };\n    Workbook.prototype.parserImage = function (json) {\n        var image = new Image();\n        if (json.image !== null && json.image !== undefined) {\n            image.image = json.image;\n        }\n        if (json.row !== null && json.row !== undefined) {\n            image.row = json.row;\n        }\n        if (json.column !== null && json.column !== undefined) {\n            image.column = json.column;\n        }\n        if (json.lastRow !== null && json.lastRow !== undefined) {\n            image.lastRow = json.lastRow;\n        }\n        if (json.lastColumn !== null && json.lastColumn !== undefined) {\n            image.lastColumn = json.lastColumn;\n        }\n        if (json.width !== null && json.width !== undefined) {\n            image.width = json.width;\n        }\n        if (json.height !== null && json.height !== undefined) {\n            image.height = json.height;\n        }\n        if (json.horizontalFlip !== null && json.horizontalFlip !== undefined) {\n            image.horizontalFlip = json.horizontalFlip;\n        }\n        if (json.verticalFlip !== null && json.verticalFlip !== undefined) {\n            image.verticalFlip = json.verticalFlip;\n        }\n        if (json.rotation !== null && json.rotation !== undefined) {\n            image.rotation = json.rotation;\n        }\n        return image;\n    };\n    /**\n     * Returns a Promise with a Blob based on the specified BlobSaveType and optional encoding.\n     * @param {BlobSaveType} blobSaveType - A string indicating the type of Blob to generate ('text/csv' or other).\n     * @param {string} [encodingType] - The supported encoding types are \"ansi\", \"unicode\" and \"utf8\".\n     */\n    /* tslint:disable:no-any */\n    Workbook.prototype.saveAsBlob = function (blobSaveType, encodingType) {\n        var _this = this;\n        switch (blobSaveType) {\n            case 'text/csv':\n                return new Promise(function (resolve, reject) {\n                    var obj = {};\n                    obj.blobData = _this.csvHelper.saveAsBlob(encodingType);\n                    resolve(obj);\n                });\n            default:\n                return new Promise(function (resolve, reject) {\n                    _this.saveInternal();\n                    _this.mArchive.saveAsBlob().then(function (blob) {\n                        var obj = {};\n                        obj.blobData = new Blob([blob], { type: 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet' });\n                        resolve(obj);\n                    });\n                });\n        }\n    };\n    Workbook.prototype.save = function (fileName, proxyUrl) {\n        var _this = this;\n        if (fileName === null || fileName === undefined || fileName === '') {\n            throw new Error('Argument Null Exception: fileName cannot be null or empty');\n        }\n        var xlsxMatch = fileName.match('.xlsx$');\n        var csvMatch = fileName.match('.csv$');\n        if (xlsxMatch !== null && xlsxMatch[0] === ('.' + this.mSaveType)) {\n            this.saveInternal();\n            this.mArchive.save(fileName).then(function () {\n                _this.mArchive.destroy();\n            });\n        }\n        else if (csvMatch !== null && csvMatch[0] === ('.' + this.mSaveType)) {\n            this.csvHelper.save(fileName);\n        }\n        else {\n            throw Error('Save type and file extension is different.');\n        }\n    };\n    Workbook.prototype.saveInternal = function () {\n        this.saveWorkbook();\n        this.saveWorksheets();\n        this.saveSharedString();\n        this.saveStyles();\n        this.saveApp(this.builtInProperties);\n        this.saveCore(this.builtInProperties);\n        this.saveContentType();\n        this.saveTopLevelRelation();\n        this.saveWorkbookRelation();\n    };\n    Workbook.prototype.saveWorkbook = function () {\n        /* tslint:disable-next-line:max-line-length */\n        var workbookTemp = '<?xml version=\"1.0\" encoding=\"utf-8\"?><workbook xmlns:r = \"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns= \"http://schemas.openxmlformats.org/spreadsheetml/2006/main\"><workbookPr codeName=\"ThisWorkbook\" defaultThemeVersion= \"153222\"/><bookViews><workbookView activeTab=\"0\"/></bookViews>';\n        var sheets = '<sheets>';\n        var length = this.worksheets.length;\n        for (var i = 0; i < length; i++) {\n            /* tslint:disable-next-line:max-line-length */\n            var sheetName = this.worksheets[i].name;\n            sheetName = sheetName.replace(\"&\", \"&amp;\");\n            sheetName = sheetName.replace(\"<\", \"&lt;\");\n            sheetName = sheetName.replace(\">\", \"&gt;\");\n            sheetName = sheetName.replace(\"\\\"\", \"&quot;\");\n            sheets += '<sheet name=\"' + sheetName + '\" sheetId=\"' + (i + 1).toString() + '\" r:id =\"rId' + (i + 1).toString() + '\" />';\n        }\n        sheets += '</sheets>';\n        workbookTemp += sheets;\n        if (this.printTitles.size > 0) {\n            var printTitle_1 = '<definedNames>';\n            this.printTitles.forEach(function (value, key) {\n                printTitle_1 += '<definedName name=\"_xlnm.Print_Titles\" localSheetId=\"' + key + '\">' + value + '</definedName>';\n            });\n            printTitle_1 += '</definedNames>';\n            workbookTemp += printTitle_1;\n        }\n        this.addToArchive(workbookTemp + '</workbook>', 'xl/workbook.xml');\n    };\n    Workbook.prototype.saveWorksheets = function () {\n        var length = this.worksheets.length;\n        for (var i = 0; i < length; i++) {\n            this.saveWorksheet(this.worksheets[i], i);\n        }\n    };\n    Workbook.prototype.saveWorksheet = function (sheet, index) {\n        var sheetBlob = new BlobHelper();\n        /* tslint:disable-next-line:max-line-length */\n        var sheetString = '<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><worksheet xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" xmlns:x14=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/main\" xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">';\n        if (!sheet.isSummaryRowBelow) {\n            sheetString += ('<sheetPr>' + '<outlinePr ' + 'summaryBelow=\"0\" >' + '</outlinePr>' + '</sheetPr>');\n        }\n        else {\n            sheetString += ('<sheetPr />');\n        }\n        sheetString += this.saveSheetView(sheet);\n        if (sheet.columns !== undefined) {\n            var colString = '<cols>';\n            for (var _i = 0, _a = sheet.columns; _i < _a.length; _i++) {\n                var column = _a[_i];\n                /* tslint:disable-next-line:max-line-length */\n                if (column.width !== undefined) {\n                    colString += '<col min=\"' + (column.index) + '\" max=\"' + (column.index) + '\" width=\"' + this.pixelsToColumnWidth(column.width) + '\" customWidth=\"1\" />';\n                }\n                else {\n                    colString += '<col min=\"' + (column.index) + '\" max=\"' + (column.index) + '\" width=\"' + '8.43' + '\" customWidth=\"1\" />';\n                }\n            }\n            sheetString += (colString + '</cols>');\n        }\n        sheetString += ('<sheetData>');\n        sheetBlob.append(sheetString);\n        sheetString = '';\n        if (sheet.rows !== undefined) {\n            for (var _b = 0, _c = sheet.rows; _b < _c.length; _b++) {\n                var row = _c[_b];\n                var rowString = '<row r=\"' + (row.index) + '\" ';\n                if (!isNullOrUndefined(row.spans)) {\n                    rowString += 'spans=\"' + row.spans + '\" ';\n                }\n                if (row.height !== undefined) {\n                    rowString += ('ht=\"' + this.pixelsToRowHeight(row.height) + '\" customHeight=\"1\" ');\n                }\n                if (row.grouping !== undefined) {\n                    if (row.grouping.isHidden) {\n                        rowString += ('hidden=\"1\" ');\n                    }\n                    if (row.grouping.outlineLevel !== undefined) {\n                        rowString += ('outlineLevel=\"' + row.grouping.outlineLevel + '\" ');\n                    }\n                    if (row.grouping.isCollapsed) {\n                        rowString += ('collapsed=\"1\" ');\n                    }\n                }\n                rowString += ('>');\n                for (var _d = 0, _e = row.cells; _d < _e.length; _d++) {\n                    var cell = _e[_d];\n                    if (cell !== undefined && (cell.value !== undefined || cell.cellStyle !== undefined)) {\n                        rowString += ('<c r=\"' + cell.refName + '\" ');\n                        if (cell.saveType !== undefined) {\n                            rowString += ('t=\"' + cell.saveType + '\" ');\n                        }\n                        if (cell.styleIndex !== undefined) {\n                            rowString += ('s=\"' + cell.styleIndex + '\" ');\n                        }\n                        rowString += (' >');\n                        if (cell.formula !== undefined) {\n                            rowString += ('<f>' + cell.formula + '</f>');\n                        }\n                        if (cell.value !== undefined) {\n                            rowString += ('<v>' + cell.value + '</v></c>');\n                        }\n                        else {\n                            rowString += ('</c>');\n                        }\n                    }\n                }\n                rowString += ('</row>');\n                sheetBlob.append(rowString);\n            }\n        }\n        sheetString += ('</sheetData>');\n        /* tslint:disable-next-line:max-line-length */\n        if (sheet.autoFilters !== null && sheet.autoFilters !== undefined)\n            sheetString += ('<autoFilter ref=\"' + this.getCellName(sheet.autoFilters.row, sheet.autoFilters.column) + ':' + this.getCellName(sheet.autoFilters.lastRow, sheet.autoFilters.lastColumn) + '\"/>');\n        if (sheet.mergeCells.length > 0) {\n            sheetString += ('<mergeCells count=\"' + sheet.mergeCells.length + '\">');\n            for (var _f = 0, _g = sheet.mergeCells; _f < _g.length; _f++) {\n                var mCell = _g[_f];\n                sheetString += ('<mergeCell ref=\"' + mCell.ref + '\" />');\n            }\n            sheetString += ('</mergeCells>');\n        }\n        if (sheet.hyperLinks.length > 0) {\n            sheetString += ('<hyperlinks>');\n            for (var _h = 0, _j = sheet.hyperLinks; _h < _j.length; _h++) {\n                var hLink = _j[_h];\n                sheetString += ('<hyperlink ref=\"' + hLink.ref + '\" r:id=\"rId' + hLink.rId + '\" />');\n            }\n            sheetString += ('</hyperlinks>');\n        }\n        /* tslint:disable-next-line:max-line-length */\n        sheetString += ('<pageMargins left=\"0.75\" right=\"0.75\" top=\"1\" bottom=\"1\" header=\"0.5\" footer=\"0.5\" /><headerFooter scaleWithDoc=\"1\" alignWithMargins=\"0\" differentFirst=\"0\" differentOddEven=\"0\" />');\n        if (sheet.images != undefined && sheet.images.length > 0) {\n            this.drawingCount++;\n            this.saveDrawings(sheet, sheet.index);\n            sheetString += '<drawing r:id=\"rId' + (sheet.hyperLinks.length + 1) + '\"/>';\n        }\n        this.addToArchive(this.saveSheetRelations(sheet), ('xl/worksheets/_rels/sheet' + sheet.index + '.xml.rels'));\n        sheetBlob.append(sheetString + '</worksheet>');\n        this.addToArchive(sheetBlob.getBlob(), 'xl/worksheets' + '/sheet' + (index + 1) + '.xml');\n    };\n    Workbook.prototype.saveDrawings = function (sheet, index) {\n        var drawings = new BlobHelper();\n        /* tslint:disable-next-line:max-line-length */\n        var sheetDrawingString = '<xdr:wsDr xmlns:xdr=\"http://schemas.openxmlformats.org/drawingml/2006/spreadsheetDrawing\" xmlns:a=\"http://schemas.openxmlformats.org/drawingml/2006/main\">';\n        if (sheet.images !== undefined) {\n            var imgId = 0;\n            for (var _i = 0, _a = sheet.images; _i < _a.length; _i++) {\n                var pic = _a[_i];\n                if (pic.height !== undefined && pic.width !== undefined) {\n                    this.updatelastRowOffset(sheet, pic);\n                    this.updatelastColumnOffSet(sheet, pic);\n                    pic.lastRow -= 1;\n                    pic.lastColumn -= 1;\n                }\n                else if (pic.lastRow !== undefined && pic.lastColumn !== undefined) {\n                    pic.lastRowOffset = 0;\n                    pic.lastColOffset = 0;\n                }\n                imgId++;\n                sheetDrawingString += '<xdr:twoCellAnchor editAs=\"oneCell\">';\n                sheetDrawingString += '<xdr:from><xdr:col>';\n                //col\n                sheetDrawingString += pic.column - 1;\n                sheetDrawingString += '</xdr:col><xdr:colOff>';\n                //colOff\n                sheetDrawingString += 0;\n                sheetDrawingString += '</xdr:colOff><xdr:row>';\n                //row\n                sheetDrawingString += pic.row - 1;\n                sheetDrawingString += '</xdr:row><xdr:rowOff>';\n                //rowOff\n                sheetDrawingString += 0;\n                sheetDrawingString += '</xdr:rowOff></xdr:from>';\n                sheetDrawingString += '<xdr:to><xdr:col>';\n                //col\n                sheetDrawingString += pic.lastColumn;\n                sheetDrawingString += '</xdr:col><xdr:colOff>';\n                //colOff\n                sheetDrawingString += pic.lastColOffset;\n                sheetDrawingString += '</xdr:colOff><xdr:row>';\n                //row\n                sheetDrawingString += pic.lastRow;\n                sheetDrawingString += '</xdr:row><xdr:rowOff>';\n                //rowOff\n                sheetDrawingString += pic.lastRowOffset;\n                sheetDrawingString += '</xdr:rowOff></xdr:to>';\n                sheetDrawingString += '<xdr:pic>';\n                sheetDrawingString += '<xdr:nvPicPr>';\n                sheetDrawingString += '<xdr:cNvPr id=\"' + imgId + '\" name=\"Picture ' + imgId + '\"> </xdr:cNvPr>';\n                sheetDrawingString += '<xdr:cNvPicPr><a:picLocks noChangeAspect=\"1\"/></xdr:cNvPicPr> </xdr:nvPicPr>';\n                sheetDrawingString += '<xdr:blipFill>';\n                /* tslint:disable-next-line:max-line-length */\n                sheetDrawingString += '<a:blip xmlns:r=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships\" r:embed=\"rId' + imgId + '\" cstate=\"print\">';\n                sheetDrawingString += '</a:blip><a:stretch><a:fillRect /></a:stretch></xdr:blipFill>';\n                sheetDrawingString += '<xdr:spPr>';\n                sheetDrawingString += '<a:xfrm';\n                if (pic.rotation != undefined && pic.rotation <= 3600 && pic.rotation >= -3600) {\n                    sheetDrawingString += ' rot=\"' + (pic.rotation * 60000) + '\"';\n                }\n                if (pic.verticalFlip != undefined && pic.verticalFlip != false) {\n                    sheetDrawingString += ' flipV=\"1\"';\n                }\n                if (pic.horizontalFlip != undefined && pic.horizontalFlip != false) {\n                    sheetDrawingString += ' flipH=\"1\"';\n                }\n                sheetDrawingString += '/>';\n                sheetDrawingString += '<a:prstGeom prst=\"rect\"><a:avLst /></a:prstGeom></xdr:spPr>';\n                sheetDrawingString += '</xdr:pic><xdr:clientData /></xdr:twoCellAnchor>';\n                var imageFile = new BlobHelper();\n                var imageData = this.convertBase64toImage(pic.image);\n                this.imageCount += 1;\n                this.addToArchive(imageData, 'xl/media/image' + this.imageCount + '.png');\n            }\n            drawings.append(sheetDrawingString);\n            drawings.append('</xdr:wsDr>');\n            this.saveDrawingRelations(sheet);\n            this.addToArchive(drawings.getBlob(), 'xl/drawings/drawing' + this.drawingCount + '.xml');\n        }\n    };\n    Workbook.prototype.updatelastRowOffset = function (sheet, picture) {\n        var iCurHeight = picture.height;\n        var iCurRow = picture.row;\n        var iCurOffset = 0;\n        while (iCurHeight >= 0) {\n            var iRowHeight = 0;\n            if (sheet.rows !== undefined && sheet.rows[iCurRow - 1] !== undefined)\n                iRowHeight = this.convertToPixels(sheet.rows[iCurRow - 1].height === undefined ? 15 : sheet.rows[iCurRow - 1].height);\n            else\n                iRowHeight = this.convertToPixels(15);\n            var iSpaceInCell = iRowHeight - (iCurOffset * iRowHeight / 256);\n            if (iSpaceInCell > iCurHeight) {\n                picture.lastRow = iCurRow;\n                picture.lastRowOffset = iCurOffset + (iCurHeight * 256 / iRowHeight);\n                var rowHiddenHeight = 0;\n                if (sheet.rows !== undefined && sheet.rows[iCurRow - 1] !== undefined)\n                    rowHiddenHeight = this.convertToPixels(sheet.rows[iCurRow - 1].height === undefined ? 15 : sheet.rows[iCurRow - 1].height);\n                else\n                    rowHiddenHeight = this.convertToPixels(15);\n                picture.lastRowOffset = (rowHiddenHeight * picture.lastRowOffset) / 256;\n                picture.lastRowOffset = Math.round(picture.lastRowOffset / this.unitsProportions[7]);\n                break;\n            }\n            else {\n                iCurHeight -= iSpaceInCell;\n                iCurRow++;\n                iCurOffset = 0;\n            }\n        }\n    };\n    Workbook.prototype.updatelastColumnOffSet = function (sheet, picture) {\n        var iCurWidth = picture.width;\n        var iCurCol = picture.column;\n        var iCurOffset = 0;\n        while (iCurWidth >= 0) {\n            var iColWidth = 0;\n            if (sheet.columns !== undefined && sheet.columns[iCurCol - 1] !== undefined)\n                iColWidth = this.ColumnWidthToPixels(sheet.columns[iCurCol - 1].width === undefined ? 8.43 : sheet.columns[iCurCol - 1].width);\n            else\n                iColWidth = this.ColumnWidthToPixels(8.43);\n            var iSpaceInCell = iColWidth - (iCurOffset * iColWidth / 1024);\n            if (iSpaceInCell > iCurWidth) {\n                picture.lastColumn = iCurCol;\n                picture.lastColOffset = iCurOffset + (iCurWidth * 1024 / iColWidth);\n                var colHiddenWidth = 0;\n                if (sheet.columns !== undefined && sheet.columns[iCurCol - 1] !== undefined)\n                    colHiddenWidth = this.ColumnWidthToPixels(sheet.columns[iCurCol - 1].width === undefined ? 8.43 : sheet.columns[iCurCol - 1].width);\n                else\n                    colHiddenWidth = this.ColumnWidthToPixels(8.43);\n                picture.lastColOffset = (colHiddenWidth * picture.lastColOffset) / 1024;\n                picture.lastColOffset = Math.round(picture.lastColOffset / this.unitsProportions[7]);\n                break;\n            }\n            else {\n                iCurWidth -= iSpaceInCell;\n                iCurCol++;\n                iCurOffset = 0;\n            }\n        }\n    };\n    Workbook.prototype.convertToPixels = function (value) {\n        return value * this.unitsProportions[6];\n    };\n    Workbook.prototype.convertBase64toImage = function (img) {\n        var byteStr = window.atob(img);\n        var buffer = new ArrayBuffer(byteStr.length);\n        var data = new Uint8Array(buffer);\n        for (var i = 0; i < byteStr.length; i++) {\n            data[i] = byteStr.charCodeAt(i);\n        }\n        var blob = new Blob([data], { type: 'image/png' });\n        return blob;\n    };\n    Workbook.prototype.saveDrawingRelations = function (sheet) {\n        /* tslint:disable-next-line:max-line-length */\n        var drawingRelation = '<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">';\n        var length = sheet.images.length;\n        var id = this.imageCount - sheet.images.length;\n        for (var i = 1; i <= length; i++) {\n            id++;\n            /* tslint:disable-next-line:max-line-length */\n            drawingRelation += '<Relationship Id=\"rId' + i + '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/image\" Target=\"../media/image' + id + '.png\" />';\n        }\n        this.addToArchive((drawingRelation + '</Relationships>'), 'xl/drawings/_rels/drawing' + this.drawingCount + '.xml.rels');\n    };\n    Workbook.prototype.pixelsToColumnWidth = function (pixels) {\n        var dDigitWidth = 7;\n        var val = (pixels > dDigitWidth + 5) ?\n            this.trunc((pixels - 5) / dDigitWidth * 100 + 0.5) / 100 :\n            pixels / (dDigitWidth + 5);\n        return (val > 1) ?\n            ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n            (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n    };\n    Workbook.prototype.ColumnWidthToPixels = function (val) {\n        var dDigitWidth = 7;\n        var fileWidth = (val > 1) ?\n            ((val * dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0 :\n            (val * (dDigitWidth + 5) / dDigitWidth * 256.0) / 256.0;\n        return this.trunc(((256 * fileWidth + this.trunc(128 / dDigitWidth)) / 256) * dDigitWidth);\n    };\n    Workbook.prototype.trunc = function (x) {\n        var n = x - x % 1;\n        return n === 0 && (x < 0 || (x === 0 && (1 / x !== 1 / 0))) ? -0 : n;\n    };\n    Workbook.prototype.pixelsToRowHeight = function (pixels) {\n        return (pixels * this.unitsProportions[5] / this.unitsProportions[6]);\n    };\n    Workbook.prototype.saveSheetRelations = function (sheet) {\n        /* tslint:disable-next-line:max-line-length */\n        var relStr = '<?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">';\n        for (var _i = 0, _a = sheet.hyperLinks; _i < _a.length; _i++) {\n            var hLink = _a[_i];\n            /* tslint:disable-next-line:max-line-length */\n            relStr += '<Relationship Id=\"rId' + hLink.rId + '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/hyperlink\" Target=\"' + this.processString(hLink.target) + '\" TargetMode=\"External\" />';\n        }\n        if (sheet.images != undefined && sheet.images.length > 0) {\n            /* tslint:disable-next-line:max-line-length */\n            relStr += '<Relationship Id=\"rId' + (sheet.hyperLinks.length + 1) + '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/drawing\" Target=\"../drawings/drawing' + this.drawingCount + '.xml\" />';\n        }\n        relStr += '</Relationships>';\n        return relStr;\n    };\n    Workbook.prototype.saveSheetView = function (sheet) {\n        var paneString = '<sheetViews><sheetView workbookViewId=\"0\" ';\n        if (sheet.enableRtl === true) {\n            paneString += 'rightToLeft=\"1\"';\n        }\n        if (sheet.showGridLines === false) {\n            paneString += 'showGridLines=\"0\" >';\n        }\n        else {\n            paneString += '>';\n        }\n        if (sheet.freezePanes !== undefined) {\n            paneString += '<pane state=\"frozen\"' +\n                ' topLeftCell=\"' + sheet.freezePanes.leftCell + '\" ';\n            if (sheet.freezePanes.row !== 0) {\n                paneString += 'ySplit=\"' + sheet.freezePanes.row + '\" ';\n            }\n            if (sheet.freezePanes.column !== 0) {\n                paneString += 'xSplit=\"' + sheet.freezePanes.column + '\" ';\n            }\n            paneString += '/>';\n        }\n        paneString += '</sheetView></sheetViews > ';\n        return paneString;\n    };\n    Workbook.prototype.saveSharedString = function () {\n        var length = this.sharedString.length;\n        if (length > 0) {\n            /* tslint:disable-next-line:max-line-length */\n            var sstStart = '<?xml version=\"1.0\" encoding=\"utf-8\"?><sst uniqueCount=\"' + length + '\" count=\"' + this.sharedStringCount + '\" xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">';\n            var si = '';\n            for (var i = 0; i < length; i++) {\n                if (this.sharedString[i].indexOf('<r>') !== 0) {\n                    si += '<si><t>';\n                    si += this.processString(this.sharedString[i]);\n                    si += '</t></si>';\n                }\n                else {\n                    si += '<si>';\n                    si += this.sharedString[i];\n                    si += '</si>';\n                }\n            }\n            si += '</sst>';\n            this.addToArchive(sstStart + si, 'xl/sharedStrings.xml');\n        }\n    };\n    Workbook.prototype.processString = function (value) {\n        if (typeof value == \"string\") {\n            if (value.indexOf('&') !== -1) {\n                value = value.replace(/&/g, '&amp;');\n            }\n            if (value.indexOf('<') !== -1) {\n                value = value.replace(/</g, '&lt;');\n            }\n            if (value.indexOf('>') !== -1) {\n                value = value.replace(/>/g, '&gt;');\n            }\n            if (value.indexOf('\\v') !== -1) {\n                value = value.replace(/\\v/g, '_x000B_');\n            }\n        }\n        else if (typeof value == \"object\") {\n            for (var i = 0; i < value.length; i++) {\n                if (value[i].indexOf('&') !== -1) {\n                    value[i] = value[i].replace(/&/g, '&amp;');\n                }\n                if (value[i].indexOf('<') !== -1) {\n                    value[i] = value[i].replace(/</g, '&lt;');\n                }\n                if (value[i].indexOf('>') !== -1) {\n                    value[i] = value[i].replace(/>/g, '&gt;');\n                }\n                if (value[i].indexOf('\\v') !== -1) {\n                    value[i] = value[i].replace(/\\v/g, '_x000B_');\n                }\n            }\n        }\n        return value;\n    };\n    Workbook.prototype.saveStyles = function () {\n        this.updateCellXfsStyleXfs();\n        /* tslint:disable-next-line:max-line-length */\n        var styleTemp = '<?xml version=\"1.0\" encoding=\"utf-8\"?><styleSheet xmlns:mc=\"http://schemas.openxmlformats.org/markup-compatibility/2006\" mc:Ignorable=\"x14ac\" xmlns:x14ac=\"http://schemas.microsoft.com/office/spreadsheetml/2009/9/ac\" xmlns=\"http://schemas.openxmlformats.org/spreadsheetml/2006/main\">';\n        styleTemp += this.saveNumberFormats();\n        styleTemp += this.saveFonts();\n        styleTemp += this.saveFills();\n        styleTemp += this.saveBorders();\n        styleTemp += this.saveCellStyleXfs();\n        styleTemp += this.saveCellXfs();\n        styleTemp += this.saveCellStyles();\n        this.addToArchive(styleTemp + '</styleSheet>', 'xl/styles.xml');\n    };\n    Workbook.prototype.updateCellXfsStyleXfs = function () {\n        for (var _i = 0, _a = this.mStyles; _i < _a.length; _i++) {\n            var style = _a[_i];\n            var cellXfs = undefined;\n            if (style.isGlobalStyle) {\n                cellXfs = new CellStyleXfs();\n                cellXfs.xfId = (style.index - 1);\n            }\n            else {\n                cellXfs = new CellXfs();\n                cellXfs.xfId = 0;\n            }\n            //Add font\n            var compareFontResult = this.isNewFont(style);\n            if (!compareFontResult.result) {\n                var font = new Font();\n                font.b = style.bold;\n                font.i = style.italic;\n                font.name = style.fontName;\n                font.sz = style.fontSize;\n                font.u = style.underline;\n                font.strike = style.strikeThrough;\n                font.color = ('FF' + style.fontColor.replace('#', ''));\n                this.mFonts.push(font);\n                cellXfs.fontId = this.mFonts.length - 1;\n            }\n            else {\n                cellXfs.fontId = compareFontResult.index;\n            }\n            //Add fill\n            if (style.backColor !== 'none') {\n                var backColor = 'FF' + style.backColor.replace('#', '');\n                if (this.mFills.has(backColor)) {\n                    var fillId = this.mFills.get(backColor);\n                    cellXfs.fillId = fillId;\n                }\n                else {\n                    var fillId = this.mFills.size + 2;\n                    this.mFills.set(backColor, fillId);\n                    cellXfs.fillId = (fillId);\n                }\n            }\n            else {\n                cellXfs.fillId = 0;\n            }\n            //Add border            \n            if (!this.isNewBorder(style)) {\n                this.mBorders.push(style.borders);\n                cellXfs.borderId = this.mBorders.length;\n            }\n            else {\n                cellXfs.borderId = 0;\n            }\n            //Add Number Format            \n            if (style.numberFormat !== 'GENERAL') {\n                if (this.mNumFmt.has(style.numberFormat)) {\n                    var numFmt = this.mNumFmt.get(style.numberFormat);\n                    cellXfs.numFmtId = numFmt.numFmtId;\n                }\n                else {\n                    var id = this.mNumFmt.size + 164;\n                    this.mNumFmt.set(style.numberFormat, new NumFmt(id, style.numberFormat));\n                    cellXfs.numFmtId = id;\n                }\n            }\n            else {\n                if (style.numberFormat === 'GENERAL' && style.numFmtId === 14) {\n                    cellXfs.numFmtId = 14;\n                }\n                else {\n                    cellXfs.numFmtId = 0;\n                }\n            }\n            //Add alignment            \n            if (!style.isGlobalStyle) {\n                cellXfs.applyAlignment = 1;\n            }\n            cellXfs.alignment = new Alignment();\n            cellXfs.alignment.indent = style.indent;\n            cellXfs.alignment.horizontal = style.hAlign;\n            cellXfs.alignment.vertical = style.vAlign;\n            cellXfs.alignment.wrapText = style.wrapText ? 1 : 0;\n            cellXfs.alignment.rotation = style.rotation;\n            if (style.isGlobalStyle) {\n                this.mCellStyleXfs.push(cellXfs);\n                this.mCellXfs.push(cellXfs);\n            }\n            else {\n                //Add cellxfs\n                this.mCellXfs.push(cellXfs);\n            }\n        }\n    };\n    Workbook.prototype.saveNumberFormats = function () {\n        if (this.mNumFmt.size >= 1) {\n            var numFmtStyle_1 = '<numFmts count=\"' + (this.mNumFmt.size) + '\">';\n            this.mNumFmt.forEach(function (value, key) {\n                numFmtStyle_1 += '<numFmt numFmtId=\"' + value.numFmtId + '\" formatCode=\"' + value.formatCode.replace(/\"/g, '&quot;') + '\" />';\n            });\n            return (numFmtStyle_1 += '</numFmts>');\n        }\n        else {\n            return '';\n        }\n    };\n    Workbook.prototype.saveFonts = function () {\n        /* tslint:disable-next-line:max-line-length */\n        var fontStyle = '<fonts count=\"' + (this.mFonts.length) + '\">';\n        if (this.mFonts.length >= 1) {\n            for (var _i = 0, _a = this.mFonts; _i < _a.length; _i++) {\n                var font = _a[_i];\n                fontStyle += '<font>';\n                if (font.b) {\n                    fontStyle += '<b />';\n                }\n                if (font.i) {\n                    fontStyle += '<i />';\n                }\n                if (font.u) {\n                    fontStyle += '<u />';\n                }\n                if (font.strike) {\n                    fontStyle += '<strike />';\n                }\n                fontStyle += '<sz val=\"' + font.sz + '\" />';\n                fontStyle += '<color rgb=\"' + font.color + '\" />';\n                fontStyle += '<name val=\"' + font.name + '\" /></font>';\n            }\n        }\n        return fontStyle + '</fonts>';\n    };\n    Workbook.prototype.saveFills = function () {\n        /* tslint:disable-next-line:max-line-length */\n        var fillsStyle = '<fills count=\"' + (this.mFills.size + 2) + '\"><fill><patternFill patternType=\"none\"></patternFill></fill><fill><patternFill patternType=\"gray125\"></patternFill></fill>';\n        if (this.mFills.size >= 1) {\n            this.mFills.forEach(function (value, key) {\n                /* tslint:disable-next-line:max-line-length */\n                fillsStyle += '<fill><patternFill patternType=\"solid\"><fgColor rgb=\"' + key + '\" /><bgColor rgb=\"FFFFFFFF\" /></patternFill></fill>';\n            });\n        }\n        return fillsStyle + '</fills>';\n    };\n    Workbook.prototype.saveBorders = function () {\n        /* tslint:disable-next-line:max-line-length */\n        var bordersStyle = '<borders count=\"' + (this.mBorders.length + 1) + '\"><border><left /><right /><top /><bottom /><diagonal /></border>';\n        if (this.mBorders.length >= 1) {\n            for (var _i = 0, _a = this.mBorders; _i < _a.length; _i++) {\n                var borders = _a[_i];\n                if (this.isAllBorder(borders)) {\n                    var color = borders.all.color.replace('#', '');\n                    var lineStyle = borders.all.lineStyle;\n                    /* tslint:disable-next-line:max-line-length */\n                    bordersStyle += '<border><left style=\"' + lineStyle + '\"><color rgb=\"FF' + color + '\" /></left><right style=\"' + lineStyle + '\"><color rgb=\"FF' + color + '\" /></right><top style=\"' + lineStyle + '\"><color rgb=\"FF' + color + '\" /></top><bottom style=\"' + lineStyle + '\"><color rgb=\"FF' + color + '\" /></bottom></border>';\n                }\n                else {\n                    /* tslint:disable-next-line:max-line-length */\n                    bordersStyle += '<border><left style=\"' + borders.left.lineStyle + '\"><color rgb=\"FF' + borders.left.color.replace('#', '') + '\" /></left><right style=\"' + borders.right.lineStyle + '\"><color rgb=\"FF' + borders.right.color.replace('#', '') + '\" /></right><top style=\"' + borders.top.lineStyle + '\"><color rgb=\"FF' + borders.top.color.replace('#', '') + '\" /></top><bottom style=\"' + borders.bottom.lineStyle + '\"><color rgb=\"FF' + borders.bottom.color.replace('#', '') + '\" /></bottom></border>';\n                }\n            }\n        }\n        return bordersStyle + '</borders>';\n    };\n    Workbook.prototype.saveCellStyles = function () {\n        var _this = this;\n        var cellStyleString = '<cellStyles  count=\"' + (this.cellStyles.size) + '\">';\n        this.cellStyles.forEach(function (value, key) {\n            cellStyleString += '<cellStyle name=\"' + key + '\" xfId=\"' + _this.cellStyles.get(key).xfId + '\"';\n            if (key === 'Normal') {\n                cellStyleString += ' builtinId=\"0\"';\n            }\n            cellStyleString += ' />';\n        });\n        return cellStyleString += '</cellStyles>';\n    };\n    Workbook.prototype.saveCellStyleXfs = function () {\n        /* tslint:disable-next-line:max-line-length */\n        var cellXfsStyle = '<cellStyleXfs count=\"' + (this.mCellStyleXfs.length + 1) + '\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" />';\n        if (this.mCellStyleXfs.length >= 1) {\n            for (var _i = 0, _a = this.mCellStyleXfs; _i < _a.length; _i++) {\n                var cellStyleXf = _a[_i];\n                /* tslint:disable-next-line:max-line-length */\n                cellXfsStyle += '<xf numFmtId=\"' + cellStyleXf.numFmtId + '\" fontId=\"' + cellStyleXf.fontId + '\" fillId=\"' + cellStyleXf.fillId + '\" borderId=\"' + cellStyleXf.borderId + '\" ';\n                if (cellStyleXf.alignment !== undefined) {\n                    cellXfsStyle += '>' + this.saveAlignment(cellStyleXf) + '</xf>';\n                }\n                else {\n                    cellXfsStyle += ' />';\n                }\n            }\n        }\n        return cellXfsStyle + '</cellStyleXfs>';\n    };\n    Workbook.prototype.saveCellXfs = function () {\n        /* tslint:disable-next-line:max-line-length */\n        var cellXfsStyle = '<cellXfs count=\"' + (this.mCellXfs.length + 1) + '\"><xf numFmtId=\"0\" fontId=\"0\" fillId=\"0\" borderId=\"0\" xfId=\"0\" />';\n        if (this.mCellXfs.length >= 1) {\n            for (var _i = 0, _a = this.mCellXfs; _i < _a.length; _i++) {\n                var cellXf = _a[_i];\n                /* tslint:disable-next-line:max-line-length */\n                cellXfsStyle += '<xf numFmtId=\"' + cellXf.numFmtId + '\" fontId=\"' + cellXf.fontId + '\" fillId=\"' + cellXf.fillId + '\" borderId=\"' + cellXf.borderId + '\" xfId=\"' + cellXf.xfId + '\" ';\n                if (cellXf.applyAlignment === 1) {\n                    cellXfsStyle += 'applyAlignment=\"1\"';\n                }\n                cellXfsStyle += '>' + this.saveAlignment(cellXf) + '</xf>';\n            }\n        }\n        return cellXfsStyle + '</cellXfs>';\n    };\n    Workbook.prototype.saveAlignment = function (cellXf) {\n        var alignString = '<alignment ';\n        if (cellXf.alignment.horizontal !== undefined) {\n            alignString += 'horizontal=\"' + cellXf.alignment.horizontal + '\" ';\n        }\n        if (cellXf.alignment.indent !== undefined && cellXf.alignment.indent !== 0) {\n            alignString += 'indent=\"' + cellXf.alignment.indent + '\" ';\n        }\n        else if (cellXf.alignment.rotation !== undefined && cellXf.alignment.rotation !== 0) {\n            alignString += 'textRotation=\"' + cellXf.alignment.rotation + '\" ';\n        }\n        if (cellXf.alignment.vertical !== undefined) {\n            alignString += 'vertical=\"' + cellXf.alignment.vertical + '\" ';\n        }\n        alignString += 'wrapText=\"' + cellXf.alignment.wrapText + '\" />';\n        return alignString;\n    };\n    Workbook.prototype.saveApp = function (builtInProperties) {\n        /* tslint:disable-next-line:max-line-length */\n        var appString = '<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Properties xmlns=\"http://schemas.openxmlformats.org/officeDocument/2006/extended-properties\"><Application>Essential XlsIO</Application>';\n        if (builtInProperties !== undefined) {\n            if (builtInProperties.manager !== undefined) {\n                appString += '<Manager>' + builtInProperties.manager + '</Manager>';\n            }\n            if (builtInProperties.company !== undefined) {\n                appString += '<Company>' + builtInProperties.company + '</Company>';\n            }\n        }\n        this.addToArchive((appString + '</Properties>'), 'docProps/app.xml');\n    };\n    Workbook.prototype.saveCore = function (builtInProperties) {\n        var createdDate = new Date();\n        /* tslint:disable-next-line:max-line-length */\n        var coreString = '<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><cp:coreProperties xmlns:dc=\"http://purl.org/dc/elements/1.1/\" xmlns:dcterms=\"http://purl.org/dc/terms/\" xmlns:dcmitype=\"http://purl.org/dc/dcmitype/\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:cp=\"http://schemas.openxmlformats.org/package/2006/metadata/core-properties\">';\n        if (this.builtInProperties !== undefined) {\n            if (builtInProperties.author !== undefined) {\n                coreString += '<dc:creator>' + builtInProperties.author + '</dc:creator>';\n            }\n            if (builtInProperties.subject !== undefined) {\n                coreString += '<dc:subject>' + builtInProperties.subject + '</dc:subject>';\n            }\n            if (builtInProperties.category !== undefined) {\n                coreString += '<cp:category>' + builtInProperties.category + '</cp:category>';\n            }\n            if (builtInProperties.comments !== undefined) {\n                coreString += '<dc:description>' + builtInProperties.comments + '</dc:description>';\n            }\n            if (builtInProperties.title !== undefined) {\n                coreString += '<dc:title>' + builtInProperties.title + '</dc:title>';\n            }\n            if (builtInProperties.tags !== undefined) {\n                coreString += '<cp:keywords>' + builtInProperties.tags + '</cp:keywords>';\n            }\n            if (builtInProperties.status !== undefined) {\n                coreString += '<cp:contentStatus>' + builtInProperties.status + '</cp:contentStatus>';\n            }\n            if (builtInProperties.createdDate !== undefined) {\n                /* tslint:disable-next-line:max-line-length */\n                coreString += '<dcterms:created xsi:type=\"dcterms:W3CDTF\">' + builtInProperties.createdDate.toISOString() + '</dcterms:created>';\n            }\n            else {\n                coreString += '<dcterms:created xsi:type=\"dcterms:W3CDTF\">' + createdDate.toISOString() + '</dcterms:created>';\n            }\n            if (builtInProperties.modifiedDate !== undefined) {\n                /* tslint:disable-next-line:max-line-length */\n                coreString += '<dcterms:modified xsi:type=\"dcterms:W3CDTF\">' + builtInProperties.modifiedDate.toISOString() + '</dcterms:modified>';\n            }\n            else {\n                coreString += '<dcterms:modified xsi:type=\"dcterms:W3CDTF\">' + createdDate.toISOString() + '</dcterms:modified>';\n            }\n        }\n        else {\n            coreString += '<dcterms:created xsi:type=\"dcterms:W3CDTF\">' + createdDate.toISOString() + '</dcterms:created>';\n            coreString += '<dcterms:modified xsi:type=\"dcterms:W3CDTF\">' + createdDate.toISOString() + '</dcterms:modified>';\n        }\n        /* tslint:disable-next-line:max-line-length */\n        coreString += '</cp:coreProperties>';\n        this.addToArchive(coreString, 'docProps/core.xml');\n    };\n    Workbook.prototype.saveTopLevelRelation = function () {\n        /* tslint:disable-next-line:max-line-length */\n        var topRelation = '<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\"><Relationship Id=\"rId1\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/officeDocument\" Target=\"xl/workbook.xml\" /><Relationship Id=\"rId2\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/extended-properties\" Target=\"docProps/app.xml\" /><Relationship Id=\"rId3\" Type=\"http://schemas.openxmlformats.org/package/2006/relationships/metadata/core-properties\" Target=\"docProps/core.xml\" /></Relationships>';\n        this.addToArchive(topRelation, '_rels/.rels');\n    };\n    Workbook.prototype.saveWorkbookRelation = function () {\n        /* tslint:disable-next-line:max-line-length */\n        var wbRelation = '<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Relationships xmlns=\"http://schemas.openxmlformats.org/package/2006/relationships\">';\n        var length = this.worksheets.length;\n        var count = 0;\n        for (var i = 0; i < length; i++, count++) {\n            /* tslint:disable-next-line:max-line-length */\n            wbRelation += '<Relationship Id=\"rId' + (i + 1).toString() + '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/worksheet\" Target=\"worksheets/sheet' + (i + 1).toString() + '.xml\" />';\n        }\n        /* tslint:disable-next-line:max-line-length */\n        wbRelation += '<Relationship Id=\"rId' + (++count).toString() + '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/styles\" Target=\"styles.xml\" />';\n        if (this.sharedStringCount > 0) {\n            /* tslint:disable-next-line:max-line-length */\n            wbRelation += '<Relationship Id=\"rId' + (++count).toString() + '\" Type=\"http://schemas.openxmlformats.org/officeDocument/2006/relationships/sharedStrings\" Target=\"sharedStrings.xml\" />';\n        }\n        this.addToArchive((wbRelation + '</Relationships>'), 'xl/_rels/workbook.xml.rels');\n    };\n    Workbook.prototype.saveContentType = function () {\n        /* tslint:disable-next-line:max-line-length */\n        var contentTypeString = '<?xml version=\"1.0\" encoding=\"utf-8\" standalone=\"yes\"?><Types xmlns=\"http://schemas.openxmlformats.org/package/2006/content-types\"><Default Extension=\"xml\" ContentType=\"application/xml\" /><Default Extension=\"rels\" ContentType=\"application/vnd.openxmlformats-package.relationships+xml\" /><Override PartName=\"/xl/styles.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.styles+xml\" /><Override PartName=\"/xl/workbook.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet.main+xml\" /><Override PartName=\"/docProps/app.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.extended-properties+xml\" /><Override PartName=\"/docProps/core.xml\" ContentType=\"application/vnd.openxmlformats-package.core-properties+xml\" />';\n        var sheetsOverride = '';\n        var length = this.worksheets.length;\n        var drawingIndex = 0;\n        for (var i = 0; i < length; i++) {\n            /* tslint:disable-next-line:max-line-length */\n            sheetsOverride += '<Override PartName=\"/xl/worksheets/sheet' + (i + 1).toString() + '.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.worksheet+xml\" />';\n            if (this.worksheets[i].images != undefined && this.worksheets[i].images.length > 0) {\n                drawingIndex++;\n                /* tslint:disable-next-line:max-line-length */\n                sheetsOverride += '<Override PartName=\"/xl/drawings/drawing' + (drawingIndex).toString() + '.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.drawing+xml\" />';\n            }\n        }\n        if (this.imageCount > 0)\n            sheetsOverride += '<Default Extension=\"png\" ContentType=\"image/png\" />';\n        if (this.sharedStringCount > 0) {\n            /* tslint:disable-next-line:max-line-length */\n            contentTypeString += '<Override PartName=\"/xl/sharedStrings.xml\" ContentType=\"application/vnd.openxmlformats-officedocument.spreadsheetml.sharedStrings+xml\" />';\n        }\n        this.addToArchive((contentTypeString + sheetsOverride + '</Types>'), '[Content_Types].xml');\n    };\n    Workbook.prototype.addToArchive = function (xmlString, itemName) {\n        if (typeof (xmlString) === 'string') {\n            var blob = new Blob([xmlString], { type: 'text/plain' });\n            var archiveItem = new ZipArchiveItem(blob, itemName);\n            this.mArchive.addItem(archiveItem);\n        }\n        else {\n            var archiveItem = new ZipArchiveItem(xmlString, itemName);\n            this.mArchive.addItem(archiveItem);\n        }\n    };\n    Workbook.prototype.processMergeCells = function (cell, rowIndex, mergeCells) {\n        if (cell.rowSpan !== 0 || cell.colSpan !== 0) {\n            var mCell = new MergeCell();\n            mCell.x = cell.index;\n            mCell.width = cell.colSpan;\n            mCell.y = rowIndex;\n            mCell.height = cell.rowSpan;\n            var startCell = this.getCellName(mCell.y, mCell.x);\n            var endCell = this.getCellName(rowIndex + mCell.height, cell.index + mCell.width);\n            mCell.ref = startCell + ':' + endCell;\n            var mergedCell = mergeCells.add(mCell);\n            var start = { x: mCell.x, y: mCell.y };\n            var end = {\n                x: (cell.index + mCell.width), y: (rowIndex + mCell.height)\n            };\n            this.updatedMergedCellStyles(start, end, cell);\n        }\n        return mergeCells;\n    };\n    Workbook.prototype.updatedMergedCellStyles = function (sCell, eCell, cell) {\n        for (var x = sCell.x; x <= eCell.x; x++) {\n            for (var y = sCell.y; y <= eCell.y; y++) {\n                this.mergedCellsStyle.set(this.getCellName(y, x), { x: x, y: y, styleIndex: cell.styleIndex });\n            }\n        }\n    };\n    /**\n     * Returns the tick count corresponding to the given year, month, and day.\n     * @param year number value of year\n     * @param month number value of month\n     * @param day number value of day\n     */\n    Workbook.prototype.dateToTicks = function (year, month, day) {\n        var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n        var daysToMonth365 = [0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365];\n        var daysToMonth366 = [0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366];\n        if (year >= 1 && year <= 9999 && month >= 1 && month <= 12) {\n            var days = this.isLeapYear(year) ? daysToMonth366 : daysToMonth365;\n            var y = year - 1;\n            var n = y * 365 + ((y / 4) | 0) - ((y / 100) | 0) + ((y / 400) | 0) + days[month - 1] + day - 1;\n            return n * ticksPerDay;\n        }\n        throw new Error('Not a valid date');\n    };\n    /**\n     * Return the tick count corresponding to the given hour, minute, second.\n     * @param hour number value of hour\n     * @param minute number value if minute\n     * @param second number value of second\n     */\n    Workbook.prototype.timeToTicks = function (hour, minute, second) {\n        if (hour >= 0 && hour < 24 && minute >= 0 && minute < 60 && second >= 0 && second < 60) {\n            var totalSeconds = hour * 3600 + minute * 60 + second;\n            return totalSeconds * 10000 * 1000;\n        }\n        throw new Error('Not valid time');\n    };\n    /**\n     * Checks if given year is a leap year.\n     * @param year Year value.\n     */\n    Workbook.prototype.isLeapYear = function (year) {\n        return year % 4 === 0 && (year % 100 !== 0 || year % 400 === 0);\n    };\n    /**\n     * Converts `DateTime` to the equivalent OLE Automation date.\n     */\n    Workbook.prototype.toOADate = function (date) {\n        var ticks = 0;\n        /* tslint:disable-next-line:max-line-length */\n        ticks = this.dateToTicks(date.getFullYear(), (date.getMonth() + 1), date.getDate()) + this.timeToTicks(date.getHours(), date.getMinutes(), date.getSeconds());\n        if (ticks === 0) {\n            return 0.0;\n        }\n        var ticksPerDay = 10000 * 1000 * 60 * 60 * 24;\n        var daysTo1899 = (((365 * 4 + 1) * 25 - 1) * 4 + 1) * 4 + ((365 * 4 + 1) * 25 - 1) * 3 - 367;\n        var doubleDateOffset = daysTo1899 * ticksPerDay;\n        var oaDateMinAsTicks = (((365 * 4 + 1) * 25 - 1) - 365) * ticksPerDay;\n        if (ticks < oaDateMinAsTicks) {\n            throw new Error('Arg_OleAutDateInvalid');\n        }\n        var millisPerDay = 1000 * 60 * 60 * 24;\n        return ((ticks - doubleDateOffset) / 10000) / millisPerDay;\n    };\n    return Workbook;\n}());\nexport { Workbook };\n/**\n * BuiltInProperties Class\n * @private\n */\nvar BuiltInProperties = /** @class */ (function () {\n    function BuiltInProperties() {\n    }\n    return BuiltInProperties;\n}());\nexport { BuiltInProperties };\n","/**\n * AriaService\n *\n * @hidden\n */\nvar AriaService = /** @class */ (function () {\n    function AriaService() {\n    }\n    AriaService.prototype.setOptions = function (target, options) {\n        var props = Object.keys(options);\n        for (var i = 0; i < props.length; i++) {\n            setStateAndProperties(target, config[props[parseInt(i.toString(), 10)]], options[props[parseInt(i.toString(), 10)]]);\n        }\n    };\n    AriaService.prototype.setExpand = function (target, expand) {\n        setStateAndProperties(target, config.expand, expand);\n    };\n    AriaService.prototype.setSort = function (target, direction) {\n        setStateAndProperties(target, config.sort, direction, typeof direction === 'boolean');\n    };\n    AriaService.prototype.setBusy = function (target, isBusy) {\n        setStateAndProperties(target, config.busy, isBusy);\n        setStateAndProperties(target, config.invalid, null, true);\n    };\n    AriaService.prototype.setGrabbed = function (target, isGrabbed, remove) {\n        setStateAndProperties(target, config.grabbed, isGrabbed, remove);\n    };\n    AriaService.prototype.setDropTarget = function (target, isTarget) {\n        setStateAndProperties(target, config.dropeffect, 'copy', !isTarget);\n    };\n    return AriaService;\n}());\nexport { AriaService };\n/**\n * @param {HTMLElement} target - specifies the target\n * @param {string} attribute - specifies the attribute\n * @param {ValueType} value - specifies the value\n * @param {boolean} remove - specifies the boolean for remove\n * @returns {void}\n * @hidden\n */\nfunction setStateAndProperties(target, attribute, value, remove) {\n    if (remove && target) {\n        target.removeAttribute(attribute);\n        return;\n    }\n    if (target) {\n        target.setAttribute(attribute, value);\n    }\n}\nvar config = {\n    expand: 'aria-expanded',\n    role: 'role',\n    datarole: 'data-role',\n    selected: 'aria-selected',\n    multiselectable: 'aria-multiselectable',\n    sort: 'aria-sort',\n    busy: 'aria-busy',\n    invalid: 'aria-invalid',\n    grabbed: 'aria-grabbed',\n    dropeffect: 'aria-dropeffect',\n    haspopup: 'aria-haspopup',\n    level: 'aria-level',\n    colcount: 'aria-colcount',\n    rowcount: 'aria-rowcount'\n};\n","//! moment.js locale configuration\n//! locale : Luxembourgish [lb]\n//! author : mweimerskirch : https://github.com/mweimerskirch\n//! author : David Raison : https://github.com/kwisatz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eng Minutt', 'enger Minutt'],\n            h: ['eng Stonn', 'enger Stonn'],\n            d: ['een Dag', 'engem Dag'],\n            M: ['ee Mount', 'engem Mount'],\n            y: ['ee Joer', 'engem Joer'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n    function processFutureTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'a ' + string;\n        }\n        return 'an ' + string;\n    }\n    function processPastTime(string) {\n        var number = string.substr(0, string.indexOf(' '));\n        if (eifelerRegelAppliesToNumber(number)) {\n            return 'viru ' + string;\n        }\n        return 'virun ' + string;\n    }\n    /**\n     * Returns true if the word before the given number loses the '-n' ending.\n     * e.g. 'an 10 Deeg' but 'a 5 Deeg'\n     *\n     * @param number {integer}\n     * @returns {boolean}\n     */\n    function eifelerRegelAppliesToNumber(number) {\n        number = parseInt(number, 10);\n        if (isNaN(number)) {\n            return false;\n        }\n        if (number < 0) {\n            // Negative Number --> always true\n            return true;\n        } else if (number < 10) {\n            // Only 1 digit\n            if (4 <= number && number <= 7) {\n                return true;\n            }\n            return false;\n        } else if (number < 100) {\n            // 2 digits\n            var lastDigit = number % 10,\n                firstDigit = number / 10;\n            if (lastDigit === 0) {\n                return eifelerRegelAppliesToNumber(firstDigit);\n            }\n            return eifelerRegelAppliesToNumber(lastDigit);\n        } else if (number < 10000) {\n            // 3 or 4 digits --> recursively check first digit\n            while (number >= 10) {\n                number = number / 10;\n            }\n            return eifelerRegelAppliesToNumber(number);\n        } else {\n            // Anything larger than 4 digits: recursively check first n-3 digits\n            number = number / 1000;\n            return eifelerRegelAppliesToNumber(number);\n        }\n    }\n\n    var lb = moment.defineLocale('lb', {\n        months: 'Januar_Februar_Mäerz_Abrëll_Mee_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Febr._Mrz._Abr._Mee_Jun._Jul._Aug._Sept._Okt._Nov._Dez.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'Sonndeg_Méindeg_Dënschdeg_Mëttwoch_Donneschdeg_Freideg_Samschdeg'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mé._Dë._Më._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mé_Dë_Më_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm [Auer]',\n            LTS: 'H:mm:ss [Auer]',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm [Auer]',\n            LLLL: 'dddd, D. MMMM YYYY H:mm [Auer]',\n        },\n        calendar: {\n            sameDay: '[Haut um] LT',\n            sameElse: 'L',\n            nextDay: '[Muer um] LT',\n            nextWeek: 'dddd [um] LT',\n            lastDay: '[Gëschter um] LT',\n            lastWeek: function () {\n                // Different date string for 'Dënschdeg' (Tuesday) and 'Donneschdeg' (Thursday) due to phonological rule\n                switch (this.day()) {\n                    case 2:\n                    case 4:\n                        return '[Leschten] dddd [um] LT';\n                    default:\n                        return '[Leschte] dddd [um] LT';\n                }\n            },\n        },\n        relativeTime: {\n            future: processFutureTime,\n            past: processPastTime,\n            s: 'e puer Sekonnen',\n            ss: '%d Sekonnen',\n            m: processRelativeTime,\n            mm: '%d Minutten',\n            h: processRelativeTime,\n            hh: '%d Stonnen',\n            d: processRelativeTime,\n            dd: '%d Deeg',\n            M: processRelativeTime,\n            MM: '%d Méint',\n            y: processRelativeTime,\n            yy: '%d Joer',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lb;\n\n})));\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeReportTemplate.vue?vue&type=style&index=0&id=bf5bedbe&prod&lang=css\"","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Component, EventHandler, Property, Event } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, isVisible, closest, attributes, detach, classList, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { selectAll, setStyleAttribute as setStyle, select } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined as isNOU, getUniqueID, formatUnit, Collection, compile as templateCompiler } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, Browser, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { HScroll } from '../common/h-scroll';\nimport { VScroll } from '../common/v-scroll';\nvar CLS_VERTICAL = 'e-vertical';\nvar CLS_ITEMS = 'e-toolbar-items';\nvar CLS_ITEM = 'e-toolbar-item';\nvar CLS_RTL = 'e-rtl';\nvar CLS_SEPARATOR = 'e-separator';\nvar CLS_POPUPICON = 'e-popup-up-icon';\nvar CLS_POPUPDOWN = 'e-popup-down-icon';\nvar CLS_POPUPOPEN = 'e-popup-open';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_POPUPTEXT = 'e-toolbar-text';\nvar CLS_TBARTEXT = 'e-popup-text';\nvar CLS_TBAROVERFLOW = 'e-overflow-show';\nvar CLS_POPOVERFLOW = 'e-overflow-hide';\nvar CLS_TBARBTN = 'e-tbar-btn';\nvar CLS_TBARNAV = 'e-hor-nav';\nvar CLS_TBARSCRLNAV = 'e-scroll-nav';\nvar CLS_TBARRIGHT = 'e-toolbar-right';\nvar CLS_TBARLEFT = 'e-toolbar-left';\nvar CLS_TBARCENTER = 'e-toolbar-center';\nvar CLS_TBARPOS = 'e-tbar-pos';\nvar CLS_HSCROLLCNT = 'e-hscroll-content';\nvar CLS_VSCROLLCNT = 'e-vscroll-content';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_POPUPNAV = 'e-hor-nav';\nvar CLS_POPUPCLASS = 'e-toolbar-pop';\nvar CLS_POPUP = 'e-toolbar-popup';\nvar CLS_TBARBTNTEXT = 'e-tbar-btn-text';\nvar CLS_TBARNAVACT = 'e-nav-active';\nvar CLS_TBARIGNORE = 'e-ignore';\nvar CLS_POPPRI = 'e-popup-alone';\nvar CLS_HIDDEN = 'e-hidden';\nvar CLS_MULTIROW = 'e-toolbar-multirow';\nvar CLS_MULTIROWPOS = 'e-multirow-pos';\nvar CLS_MULTIROW_SEPARATOR = 'e-multirow-separator';\nvar CLS_EXTENDABLE_SEPARATOR = 'e-extended-separator';\nvar CLS_EXTEANDABLE_TOOLBAR = 'e-extended-toolbar';\nvar CLS_EXTENDABLECLASS = 'e-toolbar-extended';\nvar CLS_EXTENDPOPUP = 'e-expended-nav';\nvar CLS_EXTENDEDPOPOPEN = 'e-tbar-extended';\n/**\n * An item object that is used to configure Toolbar commands.\n */\nvar Item = /** @class */ (function (_super) {\n    __extends(Item, _super);\n    function Item() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('')\n    ], Item.prototype, \"id\", void 0);\n    __decorate([\n        Property('')\n    ], Item.prototype, \"text\", void 0);\n    __decorate([\n        Property('auto')\n    ], Item.prototype, \"width\", void 0);\n    __decorate([\n        Property('')\n    ], Item.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(false)\n    ], Item.prototype, \"showAlwaysInPopup\", void 0);\n    __decorate([\n        Property(false)\n    ], Item.prototype, \"disabled\", void 0);\n    __decorate([\n        Property('')\n    ], Item.prototype, \"prefixIcon\", void 0);\n    __decorate([\n        Property('')\n    ], Item.prototype, \"suffixIcon\", void 0);\n    __decorate([\n        Property(true)\n    ], Item.prototype, \"visible\", void 0);\n    __decorate([\n        Property('None')\n    ], Item.prototype, \"overflow\", void 0);\n    __decorate([\n        Property('')\n    ], Item.prototype, \"template\", void 0);\n    __decorate([\n        Property('Button')\n    ], Item.prototype, \"type\", void 0);\n    __decorate([\n        Property('Both')\n    ], Item.prototype, \"showTextOn\", void 0);\n    __decorate([\n        Property(null)\n    ], Item.prototype, \"htmlAttributes\", void 0);\n    __decorate([\n        Property('')\n    ], Item.prototype, \"tooltipText\", void 0);\n    __decorate([\n        Property('Left')\n    ], Item.prototype, \"align\", void 0);\n    __decorate([\n        Event()\n    ], Item.prototype, \"click\", void 0);\n    __decorate([\n        Property(-1)\n    ], Item.prototype, \"tabIndex\", void 0);\n    return Item;\n}(ChildProperty));\nexport { Item };\n/**\n * The Toolbar control contains a group of commands that are aligned horizontally.\n * ```html\n * <div id=\"toolbar\"/>\n * <script>\n *   var toolbarObj = new Toolbar();\n *   toolbarObj.appendTo(\"#toolbar\");\n * </script>\n * ```\n */\nvar Toolbar = /** @class */ (function (_super) {\n    __extends(Toolbar, _super);\n    /**\n     * Initializes a new instance of the Toolbar class.\n     *\n     * @param {ToolbarModel} options  - Specifies Toolbar model properties as options.\n     * @param { string | HTMLElement} element  - Specifies the element that is rendered as a Toolbar.\n     */\n    function Toolbar(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.resizeContext = _this.resize.bind(_this);\n        _this.orientationChangeContext = _this.orientationChange.bind(_this);\n        /**\n         * Contains the keyboard configuration of the Toolbar.\n         */\n        _this.keyConfigs = {\n            moveLeft: 'leftarrow',\n            moveRight: 'rightarrow',\n            moveUp: 'uparrow',\n            moveDown: 'downarrow',\n            popupOpen: 'enter',\n            popupClose: 'escape',\n            tab: 'tab',\n            home: 'home',\n            end: 'end'\n        };\n        return _this;\n    }\n    /**\n     * Removes the control from the DOM and also removes all its related events.\n     *\n     * @returns {void}.\n     */\n    Toolbar.prototype.destroy = function () {\n        var _this = this;\n        if (this.isReact || this.isAngular) {\n            this.clearTemplate();\n        }\n        var btnItems = this.element.querySelectorAll('.e-control.e-btn');\n        [].slice.call(btnItems).forEach(function (el) {\n            if (!isNOU(el) && !isNOU(el.ej2_instances) && !isNOU(el.ej2_instances[0]) && !(el.ej2_instances[0].isDestroyed)) {\n                el.ej2_instances[0].destroy();\n            }\n        });\n        this.unwireEvents();\n        this.tempId.forEach(function (ele) {\n            if (!isNOU(_this.element.querySelector(ele))) {\n                document.body.appendChild(_this.element.querySelector(ele)).style.display = 'none';\n            }\n        });\n        this.destroyItems();\n        while (this.element.lastElementChild) {\n            this.element.removeChild(this.element.lastElementChild);\n        }\n        if (this.trgtEle) {\n            this.element.appendChild(this.ctrlTem);\n            this.trgtEle = null;\n            this.ctrlTem = null;\n        }\n        if (this.popObj) {\n            this.popObj.destroy();\n            detach(this.popObj.element);\n        }\n        if (this.activeEle) {\n            this.activeEle = null;\n        }\n        this.popObj = null;\n        this.tbarAlign = null;\n        this.tbarItemsCol = [];\n        this.remove(this.element, 'e-toolpop');\n        if (this.cssClass) {\n            removeClass([this.element], this.cssClass.split(' '));\n        }\n        this.element.removeAttribute('style');\n        ['aria-disabled', 'aria-orientation', 'role'].forEach(function (attrb) {\n            return _this.element.removeAttribute(attrb);\n        });\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * Initialize the event handler\n     *\n     * @private\n     * @returns {void}\n     */\n    Toolbar.prototype.preRender = function () {\n        var eventArgs = { enableCollision: this.enableCollision, scrollStep: this.scrollStep };\n        this.trigger('beforeCreate', eventArgs);\n        this.enableCollision = eventArgs.enableCollision;\n        this.scrollStep = eventArgs.scrollStep;\n        this.scrollModule = null;\n        this.popObj = null;\n        this.tempId = [];\n        this.tbarItemsCol = this.items;\n        this.isVertical = this.element.classList.contains(CLS_VERTICAL) ? true : false;\n        this.isExtendedOpen = false;\n        this.popupPriCount = 0;\n        if (this.enableRtl) {\n            this.add(this.element, CLS_RTL);\n        }\n    };\n    Toolbar.prototype.wireEvents = function () {\n        EventHandler.add(this.element, 'click', this.clickHandler, this);\n        window.addEventListener('resize', this.resizeContext);\n        window.addEventListener('orientationchange', this.orientationChangeContext);\n        if (this.allowKeyboard) {\n            this.wireKeyboardEvent();\n        }\n    };\n    Toolbar.prototype.wireKeyboardEvent = function () {\n        this.keyModule = new KeyboardEvents(this.element, {\n            keyAction: this.keyActionHandler.bind(this),\n            keyConfigs: this.keyConfigs\n        });\n        EventHandler.add(this.element, 'keydown', this.docKeyDown, this);\n        this.updateTabIndex('0');\n    };\n    Toolbar.prototype.updateTabIndex = function (tabIndex) {\n        var ele = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_HIDDEN + ' )');\n        if (!isNOU(ele) && !isNOU(ele.firstElementChild)) {\n            var dataTabIndex = ele.firstElementChild.getAttribute('data-tabindex');\n            if (dataTabIndex && dataTabIndex === '-1' && ele.firstElementChild.tagName !== 'INPUT') {\n                ele.firstElementChild.setAttribute('tabindex', tabIndex);\n            }\n        }\n    };\n    Toolbar.prototype.unwireKeyboardEvent = function () {\n        if (this.keyModule) {\n            EventHandler.remove(this.element, 'keydown', this.docKeyDown);\n            this.keyModule.destroy();\n            this.keyModule = null;\n        }\n    };\n    Toolbar.prototype.docKeyDown = function (e) {\n        if (e.target.tagName === 'INPUT') {\n            return;\n        }\n        var popCheck = !isNOU(this.popObj) && isVisible(this.popObj.element) && this.overflowMode !== 'Extended';\n        if (e.keyCode === 9 && e.target.classList.contains('e-hor-nav') === true && popCheck) {\n            this.popObj.hide({ name: 'FadeOut', duration: 100 });\n        }\n        var keyCheck = (e.keyCode === 40 || e.keyCode === 38 || e.keyCode === 35 || e.keyCode === 36);\n        if (keyCheck) {\n            e.preventDefault();\n        }\n    };\n    Toolbar.prototype.unwireEvents = function () {\n        EventHandler.remove(this.element, 'click', this.clickHandler);\n        this.destroyScroll();\n        this.unwireKeyboardEvent();\n        window.removeEventListener('resize', this.resizeContext);\n        window.removeEventListener('orientationchange', this.orientationChangeContext);\n        EventHandler.remove(document, 'scroll', this.docEvent);\n        EventHandler.remove(document, 'click', this.docEvent);\n    };\n    Toolbar.prototype.clearProperty = function () {\n        this.tbarEle = [];\n        this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n    };\n    Toolbar.prototype.docEvent = function (e) {\n        var popEle = closest(e.target, '.e-popup');\n        if (this.popObj && isVisible(this.popObj.element) && !popEle && this.overflowMode === 'Popup') {\n            this.popObj.hide({ name: 'FadeOut', duration: 100 });\n        }\n    };\n    Toolbar.prototype.destroyScroll = function () {\n        if (this.scrollModule) {\n            if (this.tbarAlign) {\n                this.add(this.scrollModule.element, CLS_TBARPOS);\n            }\n            this.scrollModule.destroy();\n            this.scrollModule = null;\n        }\n    };\n    Toolbar.prototype.destroyItems = function () {\n        if (this.element) {\n            [].slice.call(this.element.querySelectorAll('.' + CLS_ITEM)).forEach(function (el) { detach(el); });\n        }\n        if (this.tbarAlign) {\n            var tbarItems = this.element.querySelector('.' + CLS_ITEMS);\n            [].slice.call(tbarItems.children).forEach(function (el) {\n                detach(el);\n            });\n            this.tbarAlign = false;\n            this.remove(tbarItems, CLS_TBARPOS);\n        }\n        this.clearProperty();\n    };\n    Toolbar.prototype.destroyMode = function () {\n        if (this.scrollModule) {\n            this.remove(this.scrollModule.element, CLS_RTL);\n            this.destroyScroll();\n        }\n        this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n        this.remove(this.element, CLS_EXTEANDABLE_TOOLBAR);\n        var tempEle = this.element.querySelector('.e-toolbar-multirow');\n        if (tempEle) {\n            this.remove(tempEle, CLS_MULTIROW);\n        }\n        if (this.popObj) {\n            this.popupRefresh(this.popObj.element, true);\n        }\n    };\n    Toolbar.prototype.add = function (ele, val) {\n        ele.classList.add(val);\n    };\n    Toolbar.prototype.remove = function (ele, val) {\n        ele.classList.remove(val);\n    };\n    Toolbar.prototype.elementFocus = function (ele) {\n        var fChild = ele.firstElementChild;\n        if (fChild) {\n            fChild.focus();\n            this.activeEleSwitch(ele);\n        }\n        else {\n            ele.focus();\n        }\n    };\n    Toolbar.prototype.clstElement = function (tbrNavChk, trgt) {\n        var clst;\n        if (tbrNavChk && this.popObj && isVisible(this.popObj.element)) {\n            clst = this.popObj.element.querySelector('.' + CLS_ITEM);\n        }\n        else if (this.element === trgt || tbrNavChk) {\n            clst = this.element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_DISABLE + ' ):not(.' + CLS_SEPARATOR + ' ):not(.' + CLS_HIDDEN + ' )');\n        }\n        else {\n            clst = closest(trgt, '.' + CLS_ITEM);\n        }\n        return clst;\n    };\n    Toolbar.prototype.keyHandling = function (clst, e, trgt, navChk, scrollChk) {\n        var popObj = this.popObj;\n        var rootEle = this.element;\n        var popAnimate = { name: 'FadeOut', duration: 100 };\n        var value = e.action === 'moveUp' ? 'previous' : 'next';\n        var ele;\n        var nodes;\n        switch (e.action) {\n            case 'moveRight':\n                if (this.isVertical) {\n                    return;\n                }\n                if (rootEle === trgt) {\n                    this.elementFocus(clst);\n                }\n                else if (!navChk) {\n                    this.eleFocus(clst, 'next');\n                }\n                break;\n            case 'moveLeft':\n                if (this.isVertical) {\n                    return;\n                }\n                if (!navChk) {\n                    this.eleFocus(clst, 'previous');\n                }\n                break;\n            case 'home':\n            case 'end':\n                if (clst) {\n                    var popupCheck = closest(clst, '.e-popup');\n                    var extendedPopup = this.element.querySelector('.' + CLS_EXTENDABLECLASS);\n                    if (this.overflowMode === 'Extended' && extendedPopup && extendedPopup.classList.contains('e-popup-open')) {\n                        popupCheck = e.action === 'end' ? extendedPopup : null;\n                    }\n                    if (popupCheck) {\n                        if (isVisible(this.popObj.element)) {\n                            nodes = [].slice.call(popupCheck.children);\n                            if (e.action === 'home') {\n                                ele = this.focusFirstVisibleEle(nodes);\n                            }\n                            else {\n                                ele = this.focusLastVisibleEle(nodes);\n                            }\n                        }\n                    }\n                    else {\n                        nodes = this.element.querySelectorAll('.' + CLS_ITEMS + ' .' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + ')');\n                        if (e.action === 'home') {\n                            ele = this.focusFirstVisibleEle(nodes);\n                        }\n                        else {\n                            ele = this.focusLastVisibleEle(nodes);\n                        }\n                    }\n                    if (ele) {\n                        this.elementFocus(ele);\n                    }\n                }\n                break;\n            case 'moveUp':\n            case 'moveDown':\n                if (!this.isVertical) {\n                    if (popObj && closest(trgt, '.e-popup')) {\n                        var popEle = popObj.element;\n                        var popFrstEle = popEle.firstElementChild;\n                        if ((value === 'previous' && popFrstEle === clst)) {\n                            popEle.lastElementChild.firstChild.focus();\n                        }\n                        else if (value === 'next' && popEle.lastElementChild === clst) {\n                            popFrstEle.firstChild.focus();\n                        }\n                        else {\n                            this.eleFocus(clst, value);\n                        }\n                    }\n                    else if (e.action === 'moveDown' && popObj && isVisible(popObj.element)) {\n                        this.elementFocus(clst);\n                    }\n                }\n                else {\n                    if (e.action === 'moveUp') {\n                        this.eleFocus(clst, 'previous');\n                    }\n                    else {\n                        this.eleFocus(clst, 'next');\n                    }\n                }\n                break;\n            case 'tab':\n                if (!scrollChk && !navChk) {\n                    var ele_1 = clst.firstElementChild;\n                    if (rootEle === trgt) {\n                        if (this.activeEle) {\n                            this.activeEle.focus();\n                        }\n                        else {\n                            this.activeEleRemove(ele_1);\n                            ele_1.focus();\n                        }\n                    }\n                }\n                break;\n            case 'popupClose':\n                if (popObj && this.overflowMode !== 'Extended') {\n                    popObj.hide(popAnimate);\n                }\n                break;\n            case 'popupOpen':\n                if (!navChk) {\n                    return;\n                }\n                if (popObj && !isVisible(popObj.element)) {\n                    popObj.element.style.top = rootEle.offsetHeight + 'px';\n                    popObj.show({ name: 'FadeIn', duration: 100 });\n                }\n                else {\n                    popObj.hide(popAnimate);\n                }\n                break;\n        }\n    };\n    Toolbar.prototype.keyActionHandler = function (e) {\n        var trgt = e.target;\n        if (trgt.tagName === 'INPUT' || trgt.tagName === 'TEXTAREA' || this.element.classList.contains(CLS_DISABLE)) {\n            return;\n        }\n        e.preventDefault();\n        var tbrNavChk = trgt.classList.contains(CLS_TBARNAV);\n        var tbarScrollChk = trgt.classList.contains(CLS_TBARSCRLNAV);\n        var clst = this.clstElement(tbrNavChk, trgt);\n        if (clst || tbarScrollChk) {\n            this.keyHandling(clst, e, trgt, tbrNavChk, tbarScrollChk);\n        }\n    };\n    /**\n     * Specifies the value to disable/enable the Toolbar component.\n     * When set to `true`, the component will be disabled.\n     *\n     * @param  {boolean} value - Based on this Boolean value, Toolbar will be enabled (false) or disabled (true).\n     * @returns {void}.\n     */\n    Toolbar.prototype.disable = function (value) {\n        var rootEle = this.element;\n        if (value) {\n            rootEle.classList.add(CLS_DISABLE);\n        }\n        else {\n            rootEle.classList.remove(CLS_DISABLE);\n        }\n        if (this.activeEle) {\n            this.activeEle.setAttribute('tabindex', this.activeEle.getAttribute('data-tabindex'));\n        }\n        if (this.scrollModule) {\n            this.scrollModule.disable(value);\n        }\n        if (this.popObj) {\n            if (isVisible(this.popObj.element) && this.overflowMode !== 'Extended') {\n                this.popObj.hide();\n            }\n            rootEle.querySelector('#' + rootEle.id + '_nav').setAttribute('tabindex', !value ? '0' : '-1');\n        }\n    };\n    Toolbar.prototype.eleContains = function (el) {\n        return el.classList.contains(CLS_SEPARATOR) || el.classList.contains(CLS_DISABLE) || el.getAttribute('disabled') || el.classList.contains(CLS_HIDDEN) || !isVisible(el) || !el.classList.contains(CLS_ITEM);\n    };\n    Toolbar.prototype.focusFirstVisibleEle = function (nodes) {\n        var element;\n        var index = 0;\n        while (index < nodes.length) {\n            var ele = nodes[parseInt(index.toString(), 10)];\n            if (!ele.classList.contains(CLS_HIDDEN) && !ele.classList.contains(CLS_DISABLE)) {\n                return ele;\n            }\n            index++;\n        }\n        return element;\n    };\n    Toolbar.prototype.focusLastVisibleEle = function (nodes) {\n        var element;\n        var index = nodes.length - 1;\n        while (index >= 0) {\n            var ele = nodes[parseInt(index.toString(), 10)];\n            if (!ele.classList.contains(CLS_HIDDEN) && !ele.classList.contains(CLS_DISABLE)) {\n                return ele;\n            }\n            index--;\n        }\n        return element;\n    };\n    Toolbar.prototype.eleFocus = function (closest, pos) {\n        var sib = Object(closest)[pos + 'ElementSibling'];\n        if (sib) {\n            var skipEle = this.eleContains(sib);\n            if (skipEle) {\n                this.eleFocus(sib, pos);\n                return;\n            }\n            this.elementFocus(sib);\n        }\n        else if (this.tbarAlign) {\n            var elem = Object(closest.parentElement)[pos + 'ElementSibling'];\n            if (!isNOU(elem) && elem.children.length === 0) {\n                elem = Object(elem)[pos + 'ElementSibling'];\n            }\n            if (!isNOU(elem) && elem.children.length > 0) {\n                if (pos === 'next') {\n                    var el = elem.querySelector('.' + CLS_ITEM);\n                    if (this.eleContains(el)) {\n                        this.eleFocus(el, pos);\n                    }\n                    else {\n                        el.firstElementChild.focus();\n                        this.activeEleSwitch(el);\n                    }\n                }\n                else {\n                    var el = elem.lastElementChild;\n                    if (this.eleContains(el)) {\n                        this.eleFocus(el, pos);\n                    }\n                    else {\n                        this.elementFocus(el);\n                    }\n                }\n            }\n        }\n        else if (!isNOU(closest)) {\n            var tbrItems = this.element.querySelectorAll('.' + CLS_ITEMS + ' .' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + ')' + ':not(.' + CLS_DISABLE + ')' + ':not(.' + CLS_HIDDEN + ')');\n            if (pos === 'next' && tbrItems) {\n                this.elementFocus(tbrItems[0]);\n            }\n            else if (pos === 'previous' && tbrItems) {\n                this.elementFocus(tbrItems[tbrItems.length - 1]);\n            }\n        }\n    };\n    Toolbar.prototype.clickHandler = function (e) {\n        var _this = this;\n        var trgt = e.target;\n        var ele = this.element;\n        var isPopupElement = !isNOU(closest(trgt, '.' + CLS_POPUPCLASS));\n        var clsList = trgt.classList;\n        var popupNav = closest(trgt, ('.' + CLS_TBARNAV));\n        if (!popupNav) {\n            popupNav = trgt;\n        }\n        if (!ele.children[0].classList.contains('e-hscroll') && !ele.children[0].classList.contains('e-vscroll')\n            && (clsList.contains(CLS_TBARNAV))) {\n            clsList = trgt.querySelector('.e-icons').classList;\n        }\n        if (clsList.contains(CLS_POPUPICON) || clsList.contains(CLS_POPUPDOWN)) {\n            this.popupClickHandler(ele, popupNav, CLS_RTL);\n        }\n        var itemObj;\n        var clst = closest(e.target, '.' + CLS_ITEM);\n        if ((isNOU(clst) || clst.classList.contains(CLS_DISABLE)) && !popupNav.classList.contains(CLS_TBARNAV)) {\n            return;\n        }\n        if (clst) {\n            var tempItem = this.items[this.tbarEle.indexOf(clst)];\n            itemObj = tempItem;\n        }\n        var eventArgs = { originalEvent: e, item: itemObj };\n        if (itemObj && !isNOU(itemObj.click)) {\n            this.trigger('items[' + this.tbarEle.indexOf(clst) + '].click', eventArgs);\n        }\n        if (!eventArgs.cancel) {\n            this.trigger('clicked', eventArgs, function (clickedArgs) {\n                if (!isNOU(_this.popObj) && isPopupElement && !clickedArgs.cancel && _this.overflowMode === 'Popup' &&\n                    clickedArgs.item && clickedArgs.item.type !== 'Input') {\n                    _this.popObj.hide({ name: 'FadeOut', duration: 100 });\n                }\n            });\n        }\n    };\n    Toolbar.prototype.popupClickHandler = function (ele, popupNav, CLS_RTL) {\n        var popObj = this.popObj;\n        if (isVisible(popObj.element)) {\n            popupNav.classList.remove(CLS_TBARNAVACT);\n            popObj.hide({ name: 'FadeOut', duration: 100 });\n        }\n        else {\n            if (ele.classList.contains(CLS_RTL)) {\n                popObj.enableRtl = true;\n                popObj.position = { X: 'left', Y: 'top' };\n            }\n            if (popObj.offsetX === 0 && !ele.classList.contains(CLS_RTL)) {\n                popObj.enableRtl = false;\n                popObj.position = { X: 'right', Y: 'top' };\n            }\n            popObj.dataBind();\n            popObj.refreshPosition();\n            popObj.element.style.top = this.getElementOffsetY() + 'px';\n            if (this.overflowMode === 'Extended') {\n                popObj.element.style.minHeight = '0px';\n            }\n            popupNav.classList.add(CLS_TBARNAVACT);\n            popObj.show({ name: 'FadeIn', duration: 100 });\n        }\n    };\n    /**\n     * To Initialize the control rendering\n     *\n     * @private\n     * @returns {void}\n     */\n    Toolbar.prototype.render = function () {\n        var _this = this;\n        this.initialize();\n        this.renderControl();\n        this.wireEvents();\n        this.renderComplete();\n        if (this.isReact && this.portals && this.portals.length > 0) {\n            this.renderReactTemplates(function () {\n                _this.refreshOverflow();\n            });\n        }\n    };\n    Toolbar.prototype.initialize = function () {\n        var width = formatUnit(this.width);\n        var height = formatUnit(this.height);\n        if (Browser.info.name !== 'msie' || this.height !== 'auto' || this.overflowMode === 'MultiRow') {\n            setStyle(this.element, { 'height': height });\n        }\n        setStyle(this.element, { 'width': width });\n        var ariaAttr = {\n            'role': 'toolbar', 'aria-disabled': 'false',\n            'aria-orientation': !this.isVertical ? 'horizontal' : 'vertical'\n        };\n        attributes(this.element, ariaAttr);\n        if (this.cssClass) {\n            addClass([this.element], this.cssClass.split(' '));\n        }\n    };\n    Toolbar.prototype.renderControl = function () {\n        var ele = this.element;\n        this.trgtEle = (ele.children.length > 0) ? ele.querySelector('div') : null;\n        this.tbarAlgEle = { lefts: [], centers: [], rights: [] };\n        this.renderItems();\n        this.renderLayout();\n    };\n    Toolbar.prototype.renderLayout = function () {\n        this.renderOverflowMode();\n        if (this.tbarAlign) {\n            this.itemPositioning();\n        }\n        if (this.popObj && this.popObj.element.childElementCount > 1 && this.checkPopupRefresh(this.element, this.popObj.element)) {\n            this.popupRefresh(this.popObj.element, false);\n        }\n        this.separator();\n    };\n    Toolbar.prototype.itemsAlign = function (items, itemEleDom) {\n        var innerItem;\n        var innerPos;\n        if (!this.tbarEle) {\n            this.tbarEle = [];\n        }\n        for (var i = 0; i < items.length; i++) {\n            innerItem = this.renderSubComponent(items[parseInt(i.toString(), 10)], i);\n            if (this.tbarEle.indexOf(innerItem) === -1) {\n                this.tbarEle.push(innerItem);\n            }\n            if (!this.tbarAlign) {\n                this.tbarItemAlign(items[parseInt(i.toString(), 10)], itemEleDom, i);\n            }\n            innerPos = itemEleDom.querySelector('.e-toolbar-' + items[parseInt(i.toString(), 10)].align.toLowerCase());\n            if (innerPos) {\n                if (!(items[parseInt(i.toString(), 10)].showAlwaysInPopup && items[parseInt(i.toString(), 10)].overflow !== 'Show')) {\n                    this.tbarAlgEle[(items[parseInt(i.toString(), 10)].align + 's').toLowerCase()].push(innerItem);\n                }\n                innerPos.appendChild(innerItem);\n            }\n            else {\n                itemEleDom.appendChild(innerItem);\n            }\n        }\n        if (this.isReact) {\n            var portals = 'portals';\n            this.notify('render-react-toolbar-template', this[\"\" + portals]);\n            this.renderReactTemplates();\n        }\n    };\n    /**\n     * @hidden\n     * @returns {void}\n     */\n    Toolbar.prototype.changeOrientation = function () {\n        var ele = this.element;\n        if (this.isVertical) {\n            ele.classList.remove(CLS_VERTICAL);\n            this.isVertical = false;\n            if (this.height === 'auto' || this.height === '100%') {\n                ele.style.height = this.height;\n            }\n            ele.setAttribute('aria-orientation', 'horizontal');\n        }\n        else {\n            ele.classList.add(CLS_VERTICAL);\n            this.isVertical = true;\n            ele.setAttribute('aria-orientation', 'vertical');\n            setStyle(this.element, { 'height': formatUnit(this.height), 'width': formatUnit(this.width) });\n        }\n        this.destroyMode();\n        this.refreshOverflow();\n    };\n    Toolbar.prototype.initScroll = function (element, innerItems) {\n        if (!this.scrollModule && this.checkOverflow(element, innerItems[0])) {\n            if (this.tbarAlign) {\n                this.element.querySelector('.' + CLS_ITEMS + ' .' + CLS_TBARCENTER).removeAttribute('style');\n            }\n            if (this.isVertical) {\n                this.scrollModule = new VScroll({ scrollStep: this.scrollStep, enableRtl: this.enableRtl }, innerItems[0]);\n            }\n            else {\n                this.scrollModule = new HScroll({ scrollStep: this.scrollStep, enableRtl: this.enableRtl }, innerItems[0]);\n            }\n            if (this.cssClass) {\n                addClass([innerItems[0]], this.cssClass.split(' '));\n            }\n            var scrollEle = this.scrollModule.element.querySelector('.' + CLS_HSCROLLBAR + ', .' + 'e-vscroll-bar');\n            if (scrollEle) {\n                scrollEle.removeAttribute('tabindex');\n            }\n            this.remove(this.scrollModule.element, CLS_TBARPOS);\n            setStyle(this.element, { overflow: 'hidden' });\n        }\n    };\n    Toolbar.prototype.itemWidthCal = function (items) {\n        var _this = this;\n        var width = 0;\n        var style;\n        [].slice.call(selectAll('.' + CLS_ITEM, items)).forEach(function (el) {\n            if (isVisible(el)) {\n                style = window.getComputedStyle(el);\n                width += _this.isVertical ? el.offsetHeight : el.offsetWidth;\n                width += parseFloat(_this.isVertical ? style.marginTop : style.marginRight);\n                width += parseFloat(_this.isVertical ? style.marginBottom : style.marginLeft);\n            }\n        });\n        return width;\n    };\n    Toolbar.prototype.getScrollCntEle = function (innerItem) {\n        var trgClass = (this.isVertical) ? '.e-vscroll-content' : '.e-hscroll-content';\n        return innerItem.querySelector(trgClass);\n    };\n    Toolbar.prototype.checkOverflow = function (element, innerItem) {\n        if (isNOU(element) || isNOU(innerItem) || !isVisible(element)) {\n            return false;\n        }\n        var eleWidth = this.isVertical ? element.offsetHeight : element.offsetWidth;\n        var itemWidth = this.isVertical ? innerItem.offsetHeight : innerItem.offsetWidth;\n        if (this.tbarAlign || this.scrollModule || (eleWidth === itemWidth)) {\n            itemWidth = this.itemWidthCal(this.scrollModule ? this.getScrollCntEle(innerItem) : innerItem);\n        }\n        var popNav = element.querySelector('.' + CLS_TBARNAV);\n        var scrollNav = element.querySelector('.' + CLS_TBARSCRLNAV);\n        var navEleWidth = 0;\n        if (popNav) {\n            navEleWidth = this.isVertical ? popNav.offsetHeight : popNav.offsetWidth;\n        }\n        else if (scrollNav) {\n            navEleWidth = this.isVertical ? (scrollNav.offsetHeight * (2)) : (scrollNav.offsetWidth * 2);\n        }\n        if (itemWidth > eleWidth - navEleWidth) {\n            return true;\n        }\n        else {\n            return false;\n        }\n    };\n    /**\n     * Refresh the whole Toolbar component without re-rendering.\n     * - It is used to manually refresh the Toolbar overflow modes such as scrollable, popup, multi row, and extended.\n     * - It will refresh the Toolbar component after loading items dynamically.\n     *\n     * @returns {void}.\n     */\n    Toolbar.prototype.refreshOverflow = function () {\n        this.resize();\n    };\n    Toolbar.prototype.toolbarAlign = function (innerItems) {\n        if (this.tbarAlign) {\n            this.add(innerItems, CLS_TBARPOS);\n            this.itemPositioning();\n        }\n    };\n    Toolbar.prototype.renderOverflowMode = function () {\n        var ele = this.element;\n        var innerItems = ele.querySelector('.' + CLS_ITEMS);\n        var priorityCheck = this.popupPriCount > 0;\n        if (ele && ele.children.length > 0) {\n            this.offsetWid = ele.offsetWidth;\n            this.remove(this.element, 'e-toolpop');\n            if (Browser.info.name === 'msie' && this.height === 'auto') {\n                ele.style.height = '';\n            }\n            switch (this.overflowMode) {\n                case 'Scrollable':\n                    if (isNOU(this.scrollModule)) {\n                        this.initScroll(ele, [].slice.call(ele.getElementsByClassName(CLS_ITEMS)));\n                    }\n                    break;\n                case 'Popup':\n                    this.add(this.element, 'e-toolpop');\n                    if (this.tbarAlign) {\n                        this.removePositioning();\n                    }\n                    if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n                        this.setOverflowAttributes(ele);\n                    }\n                    this.toolbarAlign(innerItems);\n                    break;\n                case 'MultiRow':\n                    this.add(innerItems, CLS_MULTIROW);\n                    if (this.checkOverflow(ele, innerItems) && this.tbarAlign) {\n                        this.removePositioning();\n                        this.add(innerItems, CLS_MULTIROWPOS);\n                    }\n                    if (ele.style.overflow === 'hidden') {\n                        ele.style.overflow = '';\n                    }\n                    if (Browser.info.name === 'msie' || ele.style.height !== 'auto') {\n                        ele.style.height = 'auto';\n                    }\n                    break;\n                case 'Extended':\n                    this.add(this.element, CLS_EXTEANDABLE_TOOLBAR);\n                    if (this.checkOverflow(ele, innerItems) || priorityCheck) {\n                        if (this.tbarAlign) {\n                            this.removePositioning();\n                        }\n                        this.setOverflowAttributes(ele);\n                    }\n                    this.toolbarAlign(innerItems);\n            }\n        }\n    };\n    Toolbar.prototype.setOverflowAttributes = function (ele) {\n        this.createPopupEle(ele, [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, ele)));\n        var ariaAttr = {\n            'tabindex': '0', 'role': 'button', 'aria-haspopup': 'true',\n            'aria-label': 'overflow'\n        };\n        attributes(this.element.querySelector('.' + CLS_TBARNAV), ariaAttr);\n    };\n    Toolbar.prototype.separator = function () {\n        var element = this.element;\n        var eleItem = [].slice.call(element.querySelectorAll('.' + CLS_SEPARATOR));\n        var multiVar = element.querySelector('.' + CLS_MULTIROW_SEPARATOR);\n        var extendVar = element.querySelector('.' + CLS_EXTENDABLE_SEPARATOR);\n        var eleInlineItem = this.overflowMode === 'MultiRow' ? multiVar : extendVar;\n        if (eleInlineItem !== null) {\n            if (this.overflowMode === 'MultiRow') {\n                eleInlineItem.classList.remove(CLS_MULTIROW_SEPARATOR);\n            }\n            else if (this.overflowMode === 'Extended') {\n                eleInlineItem.classList.remove(CLS_EXTENDABLE_SEPARATOR);\n            }\n        }\n        for (var i = 0; i <= eleItem.length - 1; i++) {\n            if (eleItem[parseInt(i.toString(), 10)].offsetLeft < 30 && eleItem[parseInt(i.toString(), 10)].offsetLeft !== 0) {\n                if (this.overflowMode === 'MultiRow') {\n                    eleItem[parseInt(i.toString(), 10)].classList.add(CLS_MULTIROW_SEPARATOR);\n                }\n                else if (this.overflowMode === 'Extended') {\n                    eleItem[parseInt(i.toString(), 10)].classList.add(CLS_EXTENDABLE_SEPARATOR);\n                }\n            }\n        }\n    };\n    Toolbar.prototype.createPopupEle = function (ele, innerEle) {\n        var innerNav = ele.querySelector('.' + CLS_TBARNAV);\n        var vertical = this.isVertical;\n        if (!innerNav) {\n            this.createPopupIcon(ele);\n        }\n        innerNav = ele.querySelector('.' + CLS_TBARNAV);\n        var innerNavDom = (vertical ? innerNav.offsetHeight : innerNav.offsetWidth);\n        var eleWidth = ((vertical ? ele.offsetHeight : ele.offsetWidth) - (innerNavDom));\n        this.element.classList.remove('e-rtl');\n        setStyle(this.element, { direction: 'initial' });\n        this.checkPriority(ele, innerEle, eleWidth, true);\n        if (this.enableRtl) {\n            this.element.classList.add('e-rtl');\n        }\n        this.element.style.removeProperty('direction');\n        this.createPopup();\n    };\n    Toolbar.prototype.pushingPoppedEle = function (tbarObj, popupPri, ele, eleHeight, sepHeight) {\n        var element = tbarObj.element;\n        var poppedEle = [].slice.call(selectAll('.' + CLS_POPUP, element.querySelector('.' + CLS_ITEMS)));\n        var nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n        var nodeIndex = 0;\n        var nodePri = 0;\n        poppedEle.forEach(function (el, index) {\n            nodes = selectAll('.' + CLS_TBAROVERFLOW, ele);\n            if (el.classList.contains(CLS_TBAROVERFLOW) && nodes.length > 0) {\n                if (tbarObj.tbResize && nodes.length > index) {\n                    ele.insertBefore(el, nodes[parseInt(index.toString(), 10)]);\n                    ++nodePri;\n                }\n                else {\n                    ele.insertBefore(el, ele.children[nodes.length]);\n                    ++nodePri;\n                }\n            }\n            else if (el.classList.contains(CLS_TBAROVERFLOW)) {\n                ele.insertBefore(el, ele.firstChild);\n                ++nodePri;\n            }\n            else if (tbarObj.tbResize && el.classList.contains(CLS_POPOVERFLOW) && ele.children.length > 0 && nodes.length === 0) {\n                ele.insertBefore(el, ele.firstChild);\n                ++nodePri;\n            }\n            else if (el.classList.contains(CLS_POPOVERFLOW)) {\n                popupPri.push(el);\n            }\n            else if (tbarObj.tbResize) {\n                ele.insertBefore(el, ele.childNodes[nodeIndex + nodePri]);\n                ++nodeIndex;\n            }\n            else {\n                ele.appendChild(el);\n            }\n            if (el.classList.contains(CLS_SEPARATOR)) {\n                setStyle(el, { display: '', height: sepHeight + 'px' });\n            }\n            else {\n                setStyle(el, { display: '', height: eleHeight + 'px' });\n            }\n        });\n        popupPri.forEach(function (el) {\n            ele.appendChild(el);\n        });\n        var tbarEle = selectAll('.' + CLS_ITEM, element.querySelector('.' + CLS_ITEMS));\n        for (var i = tbarEle.length - 1; i >= 0; i--) {\n            var tbarElement = tbarEle[parseInt(i.toString(), 10)];\n            if (tbarElement.classList.contains(CLS_SEPARATOR) && this.overflowMode !== 'Extended') {\n                setStyle(tbarElement, { display: 'none' });\n            }\n            else {\n                break;\n            }\n        }\n    };\n    Toolbar.prototype.createPopup = function () {\n        var element = this.element;\n        var sepHeight;\n        var sepItem;\n        if (this.overflowMode === 'Extended') {\n            sepItem = element.querySelector('.' + CLS_SEPARATOR);\n            sepHeight =\n                (element.style.height === 'auto' || element.style.height === '') ? null : (sepItem && sepItem.offsetHeight);\n        }\n        var eleItem = element.querySelector('.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_POPUP + ')');\n        var eleHeight = (element.style.height === 'auto' || element.style.height === '') ? null : (eleItem && eleItem.offsetHeight);\n        var ele;\n        var popupPri = [];\n        if (select('#' + element.id + '_popup.' + CLS_POPUPCLASS, element)) {\n            ele = select('#' + element.id + '_popup.' + CLS_POPUPCLASS, element);\n        }\n        else {\n            var extendEle = this.createElement('div', {\n                id: element.id + '_popup', className: CLS_POPUPCLASS + ' ' + CLS_EXTENDABLECLASS\n            });\n            var popupEle = this.createElement('div', { id: element.id + '_popup', className: CLS_POPUPCLASS });\n            ele = this.overflowMode === 'Extended' ? extendEle : popupEle;\n        }\n        this.pushingPoppedEle(this, popupPri, ele, eleHeight, sepHeight);\n        this.popupInit(element, ele);\n    };\n    Toolbar.prototype.getElementOffsetY = function () {\n        return (this.overflowMode === 'Extended' && window.getComputedStyle(this.element).getPropertyValue('box-sizing') === 'border-box' ?\n            this.element.clientHeight : this.element.offsetHeight);\n    };\n    Toolbar.prototype.popupInit = function (element, ele) {\n        if (!this.popObj) {\n            element.appendChild(ele);\n            if (this.cssClass) {\n                addClass([ele], this.cssClass.split(' '));\n            }\n            setStyle(this.element, { overflow: '' });\n            var eleStyles = window.getComputedStyle(this.element);\n            var popup = new Popup(null, {\n                relateTo: this.element,\n                offsetY: (this.isVertical) ? 0 : this.getElementOffsetY(),\n                enableRtl: this.enableRtl,\n                open: this.popupOpen.bind(this),\n                close: this.popupClose.bind(this),\n                collision: { Y: this.enableCollision ? 'flip' : 'none' },\n                position: this.enableRtl ? { X: 'left', Y: 'top' } : { X: 'right', Y: 'top' }\n            });\n            if (this.overflowMode === 'Extended') {\n                popup.width = parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n                popup.offsetX = 0;\n            }\n            popup.appendTo(ele);\n            EventHandler.add(document, 'scroll', this.docEvent.bind(this));\n            EventHandler.add(document, 'click ', this.docEvent.bind(this));\n            popup.element.style.maxHeight = popup.element.offsetHeight + 'px';\n            if (this.isVertical) {\n                popup.element.style.visibility = 'hidden';\n            }\n            if (this.isExtendedOpen) {\n                var popupNav = this.element.querySelector('.' + CLS_TBARNAV);\n                popupNav.classList.add(CLS_TBARNAVACT);\n                classList(popupNav.firstElementChild, [CLS_POPUPICON], [CLS_POPUPDOWN]);\n                this.element.querySelector('.' + CLS_EXTENDABLECLASS).classList.add(CLS_POPUPOPEN);\n            }\n            else {\n                popup.hide();\n            }\n            this.popObj = popup;\n        }\n        else {\n            var popupEle = this.popObj.element;\n            setStyle(popupEle, { maxHeight: '', display: 'block' });\n            setStyle(popupEle, { maxHeight: popupEle.offsetHeight + 'px', display: '' });\n        }\n    };\n    Toolbar.prototype.tbarPopupHandler = function (isOpen) {\n        if (this.overflowMode === 'Extended') {\n            if (isOpen) {\n                this.add(this.element, CLS_EXTENDEDPOPOPEN);\n            }\n            else {\n                this.remove(this.element, CLS_EXTENDEDPOPOPEN);\n            }\n        }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    Toolbar.prototype.popupOpen = function (e) {\n        var popObj = this.popObj;\n        if (!this.isVertical) {\n            popObj.offsetY = this.getElementOffsetY();\n            popObj.dataBind();\n        }\n        var popupEle = this.popObj.element;\n        var toolEle = this.popObj.element.parentElement;\n        var popupNav = toolEle.querySelector('.' + CLS_TBARNAV);\n        popupNav.setAttribute('aria-expanded', 'true');\n        setStyle(popObj.element, { height: 'auto', maxHeight: '' });\n        popObj.element.style.maxHeight = popObj.element.offsetHeight + 'px';\n        if (this.overflowMode === 'Extended') {\n            popObj.element.style.minHeight = '';\n        }\n        var popupElePos = popupEle.offsetTop + popupEle.offsetHeight + calculatePosition(toolEle).top;\n        var popIcon = popupNav.firstElementChild;\n        popupNav.classList.add(CLS_TBARNAVACT);\n        classList(popIcon, [CLS_POPUPICON], [CLS_POPUPDOWN]);\n        this.tbarPopupHandler(true);\n        var scrollVal = isNOU(window.scrollY) ? 0 : window.scrollY;\n        if (!this.isVertical && ((window.innerHeight + scrollVal) < popupElePos) && (this.element.offsetTop < popupEle.offsetHeight)) {\n            var overflowHeight = (popupEle.offsetHeight - ((popupElePos - window.innerHeight - scrollVal) + 5));\n            popObj.height = overflowHeight + 'px';\n            for (var i = 0; i <= popupEle.childElementCount; i++) {\n                var ele = popupEle.children[parseInt(i.toString(), 10)];\n                if (ele.offsetTop + ele.offsetHeight > overflowHeight) {\n                    overflowHeight = ele.offsetTop;\n                    break;\n                }\n            }\n            setStyle(popObj.element, { maxHeight: overflowHeight + 'px' });\n        }\n        else if (this.isVertical) {\n            var tbEleData = this.element.getBoundingClientRect();\n            setStyle(popObj.element, { maxHeight: (tbEleData.top + this.element.offsetHeight) + 'px', bottom: 0, visibility: '' });\n        }\n        if (popObj) {\n            var popupOffset = popupEle.getBoundingClientRect();\n            if (popupOffset.right > document.documentElement.clientWidth && popupOffset.width > toolEle.getBoundingClientRect().width) {\n                popObj.collision = { Y: 'none' };\n                popObj.dataBind();\n            }\n            popObj.refreshPosition();\n        }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    Toolbar.prototype.popupClose = function (e) {\n        var element = this.element;\n        var popupNav = element.querySelector('.' + CLS_TBARNAV);\n        popupNav.setAttribute('aria-expanded', 'false');\n        var popIcon = popupNav.firstElementChild;\n        popupNav.classList.remove(CLS_TBARNAVACT);\n        classList(popIcon, [CLS_POPUPDOWN], [CLS_POPUPICON]);\n        this.tbarPopupHandler(false);\n    };\n    Toolbar.prototype.checkPriority = function (ele, inEle, eleWidth, pre) {\n        var popPriority = this.popupPriCount > 0;\n        var len = inEle.length;\n        var eleWid = eleWidth;\n        var eleOffset;\n        var checkoffset;\n        var sepCheck = 0;\n        var itemCount = 0;\n        var itemPopCount = 0;\n        var checkClass = function (ele, val) {\n            var rVal = false;\n            val.forEach(function (cls) {\n                if (ele.classList.contains(cls)) {\n                    rVal = true;\n                }\n            });\n            return rVal;\n        };\n        for (var i = len - 1; i >= 0; i--) {\n            var mrgn = void 0;\n            var compuStyle = window.getComputedStyle(inEle[parseInt(i.toString(), 10)]);\n            if (this.isVertical) {\n                mrgn = parseFloat((compuStyle).marginTop);\n                mrgn += parseFloat((compuStyle).marginBottom);\n            }\n            else {\n                mrgn = parseFloat((compuStyle).marginRight);\n                mrgn += parseFloat((compuStyle).marginLeft);\n            }\n            var fstEleCheck = inEle[parseInt(i.toString(), 10)] === this.tbarEle[0];\n            if (fstEleCheck) {\n                this.tbarEleMrgn = mrgn;\n            }\n            eleOffset = this.isVertical ? inEle[parseInt(i.toString(), 10)].offsetHeight : inEle[parseInt(i.toString(), 10)].offsetWidth;\n            var eleWid_1 = fstEleCheck ? (eleOffset + mrgn) : eleOffset;\n            if (checkClass(inEle[parseInt(i.toString(), 10)], [CLS_POPPRI]) && popPriority) {\n                inEle[parseInt(i.toString(), 10)].classList.add(CLS_POPUP);\n                if (this.isVertical) {\n                    setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minHeight: eleWid_1 + 'px' });\n                }\n                else {\n                    setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minWidth: eleWid_1 + 'px' });\n                }\n                itemPopCount++;\n            }\n            if (this.isVertical) {\n                checkoffset =\n                    (inEle[parseInt(i.toString(), 10)].offsetTop + inEle[parseInt(i.toString(), 10)].offsetHeight + mrgn) > eleWidth;\n            }\n            else {\n                checkoffset =\n                    (inEle[parseInt(i.toString(), 10)].offsetLeft + inEle[parseInt(i.toString(), 10)].offsetWidth + mrgn) > eleWidth;\n            }\n            if (checkoffset) {\n                if (inEle[parseInt(i.toString(), 10)].classList.contains(CLS_SEPARATOR)) {\n                    if (this.overflowMode === 'Extended') {\n                        var sepEle = inEle[parseInt(i.toString(), 10)];\n                        if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n                            inEle[parseInt(i.toString(), 10)].classList.add(CLS_POPUP);\n                            itemPopCount++;\n                        }\n                        itemCount++;\n                    }\n                    else if (this.overflowMode === 'Popup') {\n                        if (sepCheck > 0 && itemCount === itemPopCount) {\n                            var sepEle = inEle[i + itemCount + (sepCheck - 1)];\n                            if (checkClass(sepEle, [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n                                setStyle(sepEle, { display: 'none' });\n                            }\n                        }\n                        sepCheck++;\n                        itemCount = 0;\n                        itemPopCount = 0;\n                    }\n                }\n                else {\n                    itemCount++;\n                }\n                if (inEle[parseInt(i.toString(), 10)].classList.contains(CLS_TBAROVERFLOW) && pre) {\n                    eleWidth -= ((this.isVertical ? inEle[parseInt(i.toString(), 10)].offsetHeight :\n                        inEle[parseInt(i.toString(), 10)].offsetWidth) + (mrgn));\n                }\n                else if (!checkClass(inEle[parseInt(i.toString(), 10)], [CLS_SEPARATOR, CLS_TBARIGNORE])) {\n                    inEle[parseInt(i.toString(), 10)].classList.add(CLS_POPUP);\n                    if (this.isVertical) {\n                        setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minHeight: eleWid_1 + 'px' });\n                    }\n                    else {\n                        setStyle(inEle[parseInt(i.toString(), 10)], { display: 'none', minWidth: eleWid_1 + 'px' });\n                    }\n                    itemPopCount++;\n                }\n                else {\n                    eleWidth -= ((this.isVertical ? inEle[parseInt(i.toString(), 10)].offsetHeight :\n                        inEle[parseInt(i.toString(), 10)].offsetWidth) + (mrgn));\n                }\n            }\n        }\n        if (pre) {\n            var popedEle = selectAll('.' + CLS_ITEM + ':not(.' + CLS_POPUP + ')', this.element);\n            this.checkPriority(ele, popedEle, eleWid, false);\n        }\n    };\n    Toolbar.prototype.createPopupIcon = function (element) {\n        var id = element.id.concat('_nav');\n        var className = 'e-' + element.id.concat('_nav ' + CLS_POPUPNAV);\n        className = this.overflowMode === 'Extended' ? className + ' ' + CLS_EXTENDPOPUP : className;\n        var nav = this.createElement('div', { id: id, className: className });\n        if (Browser.info.name === 'msie' || Browser.info.name === 'edge') {\n            nav.classList.add('e-ie-align');\n        }\n        var navItem = this.createElement('div', { className: CLS_POPUPDOWN + ' e-icons' });\n        nav.appendChild(navItem);\n        nav.setAttribute('tabindex', '0');\n        nav.setAttribute('role', 'button');\n        element.appendChild(nav);\n    };\n    Toolbar.prototype.tbarPriRef = function (inEle, indx, sepPri, el, des, elWid, wid, ig, eleStyles) {\n        var ignoreCount = ig;\n        var popEle = this.popObj.element;\n        var query = '.' + CLS_ITEM + ':not(.' + CLS_SEPARATOR + '):not(.' + CLS_TBAROVERFLOW + ')';\n        var priEleCnt = selectAll('.' + CLS_POPUP + ':not(.' + CLS_TBAROVERFLOW + ')', popEle).length;\n        var checkClass = function (ele, val) {\n            return ele.classList.contains(val);\n        };\n        if (selectAll(query, inEle).length === 0) {\n            var eleSep = inEle.children[indx - (indx - sepPri) - 1];\n            var ignoreCheck = (!isNOU(eleSep) && checkClass(eleSep, CLS_TBARIGNORE));\n            if ((!isNOU(eleSep) && checkClass(eleSep, CLS_SEPARATOR) && !isVisible(eleSep)) || ignoreCheck) {\n                eleSep.style.display = 'unset';\n                var eleSepWidth = eleSep.offsetWidth + (parseFloat(window.getComputedStyle(eleSep).marginRight) * 2);\n                var prevSep = eleSep.previousElementSibling;\n                if ((elWid + eleSepWidth) < wid || des) {\n                    inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n                    if (!isNOU(prevSep)) {\n                        prevSep.style.display = '';\n                    }\n                }\n                else {\n                    setStyle(el, eleStyles);\n                    if (prevSep.classList.contains(CLS_SEPARATOR)) {\n                        prevSep.style.display = 'none';\n                    }\n                }\n                eleSep.style.display = '';\n            }\n            else {\n                inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - (indx - sepPri)]);\n            }\n        }\n        else {\n            inEle.insertBefore(el, inEle.children[(indx + ignoreCount) - priEleCnt]);\n        }\n    };\n    Toolbar.prototype.popupRefresh = function (popupEle, destroy) {\n        var _this = this;\n        var ele = this.element;\n        var isVer = this.isVertical;\n        var innerEle = ele.querySelector('.' + CLS_ITEMS);\n        var popNav = ele.querySelector('.' + CLS_TBARNAV);\n        if (isNOU(popNav)) {\n            return;\n        }\n        innerEle.removeAttribute('style');\n        popupEle.style.display = 'block';\n        var dimension;\n        if (isVer) {\n            dimension = ele.offsetHeight - (popNav.offsetHeight + innerEle.offsetHeight);\n        }\n        else {\n            dimension = ele.offsetWidth - (popNav.offsetWidth + innerEle.offsetWidth);\n        }\n        var popupEleWidth = 0;\n        [].slice.call(popupEle.children).forEach(function (el) {\n            popupEleWidth += _this.popupEleWidth(el);\n            setStyle(el, { 'position': '' });\n        });\n        if ((dimension + (isVer ? popNav.offsetHeight : popNav.offsetWidth)) > (popupEleWidth) && this.popupPriCount === 0) {\n            destroy = true;\n        }\n        this.popupEleRefresh(dimension, popupEle, destroy);\n        popupEle.style.display = '';\n        if (popupEle.children.length === 0 && popNav && this.popObj) {\n            detach(popNav);\n            popNav = null;\n            this.popObj.destroy();\n            detach(this.popObj.element);\n            this.popObj = null;\n        }\n    };\n    Toolbar.prototype.ignoreEleFetch = function (index, innerEle) {\n        var ignoreEle = [].slice.call(innerEle.querySelectorAll('.' + CLS_TBARIGNORE));\n        var ignoreInx = [];\n        var count = 0;\n        if (ignoreEle.length > 0) {\n            ignoreEle.forEach(function (ele) {\n                ignoreInx.push([].slice.call(innerEle.children).indexOf(ele));\n            });\n        }\n        else {\n            return 0;\n        }\n        ignoreInx.forEach(function (val) {\n            if (val <= index) {\n                count++;\n            }\n        });\n        return count;\n    };\n    Toolbar.prototype.checkPopupRefresh = function (root, popEle) {\n        popEle.style.display = 'block';\n        var elWid = this.popupEleWidth(popEle.firstElementChild);\n        popEle.firstElementChild.style.removeProperty('Position');\n        var tbarWidth = root.offsetWidth - root.querySelector('.' + CLS_TBARNAV).offsetWidth;\n        var tbarItemsWid = root.querySelector('.' + CLS_ITEMS).offsetWidth;\n        popEle.style.removeProperty('display');\n        if (tbarWidth > (elWid + tbarItemsWid)) {\n            return true;\n        }\n        return false;\n    };\n    Toolbar.prototype.popupEleWidth = function (el) {\n        el.style.position = 'absolute';\n        var elWidth = this.isVertical ? el.offsetHeight : el.offsetWidth;\n        var btnText = el.querySelector('.' + CLS_TBARBTNTEXT);\n        if (el.classList.contains('e-tbtn-align') || el.classList.contains(CLS_TBARTEXT)) {\n            var btn = el.children[0];\n            if (!isNOU(btnText) && el.classList.contains(CLS_TBARTEXT)) {\n                btnText.style.display = 'none';\n            }\n            else if (!isNOU(btnText) && el.classList.contains(CLS_POPUPTEXT)) {\n                btnText.style.display = 'block';\n            }\n            btn.style.minWidth = '0%';\n            elWidth = parseFloat(!this.isVertical ? el.style.minWidth : el.style.minHeight);\n            btn.style.minWidth = '';\n            btn.style.minHeight = '';\n            if (!isNOU(btnText)) {\n                btnText.style.display = '';\n            }\n        }\n        return elWidth;\n    };\n    Toolbar.prototype.popupEleRefresh = function (width, popupEle, destroy) {\n        var popPriority = this.popupPriCount > 0;\n        var eleSplice = this.tbarEle;\n        var priEleCnt;\n        var index;\n        var innerEle = this.element.querySelector('.' + CLS_ITEMS);\n        var ignoreCount = 0;\n        var _loop_1 = function (el) {\n            if (el.classList.contains(CLS_POPPRI) && popPriority && !destroy) {\n                return \"continue\";\n            }\n            var elWidth = this_1.popupEleWidth(el);\n            if (el === this_1.tbarEle[0]) {\n                elWidth += this_1.tbarEleMrgn;\n            }\n            el.style.position = '';\n            if (elWidth < width || destroy) {\n                var inlineStyles = { minWidth: el.style.minWidth, height: el.style.height, minHeight: el.style.minHeight };\n                setStyle(el, { minWidth: '', height: '', minHeight: '' });\n                if (!el.classList.contains(CLS_POPOVERFLOW)) {\n                    el.classList.remove(CLS_POPUP);\n                }\n                index = this_1.tbarEle.indexOf(el);\n                if (this_1.tbarAlign) {\n                    var pos = this_1.items[parseInt(index.toString(), 10)].align;\n                    index = this_1.tbarAlgEle[(pos + 's').toLowerCase()].indexOf(el);\n                    eleSplice = this_1.tbarAlgEle[(pos + 's').toLowerCase()];\n                    innerEle = this_1.element.querySelector('.' + CLS_ITEMS + ' .' + 'e-toolbar-' + pos.toLowerCase());\n                }\n                var sepBeforePri_1 = 0;\n                if (this_1.overflowMode !== 'Extended') {\n                    eleSplice.slice(0, index).forEach(function (el) {\n                        if (el.classList.contains(CLS_TBAROVERFLOW) || el.classList.contains(CLS_SEPARATOR)) {\n                            if (el.classList.contains(CLS_SEPARATOR)) {\n                                el.style.display = '';\n                                width -= el.offsetWidth;\n                            }\n                            sepBeforePri_1++;\n                        }\n                    });\n                }\n                ignoreCount = this_1.ignoreEleFetch(index, innerEle);\n                if (el.classList.contains(CLS_TBAROVERFLOW)) {\n                    this_1.tbarPriRef(innerEle, index, sepBeforePri_1, el, destroy, elWidth, width, ignoreCount, inlineStyles);\n                    width -= el.offsetWidth;\n                }\n                else if (index === 0) {\n                    innerEle.insertBefore(el, innerEle.firstChild);\n                    width -= el.offsetWidth;\n                }\n                else {\n                    priEleCnt = selectAll('.' + CLS_TBAROVERFLOW, this_1.popObj.element).length;\n                    innerEle.insertBefore(el, innerEle.children[(index + ignoreCount) - priEleCnt]);\n                    width -= el.offsetWidth;\n                }\n                el.style.height = '';\n            }\n            else {\n                return \"break\";\n            }\n        };\n        var this_1 = this;\n        for (var _i = 0, _a = [].slice.call(popupEle.children); _i < _a.length; _i++) {\n            var el = _a[_i];\n            var state_1 = _loop_1(el);\n            if (state_1 === \"break\")\n                break;\n        }\n        var checkOverflow = this.checkOverflow(this.element, this.element.getElementsByClassName(CLS_ITEMS)[0]);\n        if (checkOverflow && !destroy) {\n            this.renderOverflowMode();\n        }\n    };\n    Toolbar.prototype.removePositioning = function () {\n        var item = this.element.querySelector('.' + CLS_ITEMS);\n        if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n            return;\n        }\n        this.remove(item, CLS_TBARPOS);\n        var innerItem = [].slice.call(item.childNodes);\n        innerItem[1].removeAttribute('style');\n        innerItem[2].removeAttribute('style');\n    };\n    Toolbar.prototype.refreshPositioning = function () {\n        var item = this.element.querySelector('.' + CLS_ITEMS);\n        this.add(item, CLS_TBARPOS);\n        this.itemPositioning();\n    };\n    Toolbar.prototype.itemPositioning = function () {\n        var item = this.element.querySelector('.' + CLS_ITEMS);\n        var margin;\n        if (isNOU(item) || !item.classList.contains(CLS_TBARPOS)) {\n            return;\n        }\n        var popupNav = this.element.querySelector('.' + CLS_TBARNAV);\n        var innerItem;\n        if (this.scrollModule) {\n            var trgClass = (this.isVertical) ? CLS_VSCROLLCNT : CLS_HSCROLLCNT;\n            innerItem = [].slice.call(item.querySelector('.' + trgClass).children);\n        }\n        else {\n            innerItem = [].slice.call(item.childNodes);\n        }\n        if (this.isVertical) {\n            margin = innerItem[0].offsetHeight + innerItem[2].offsetHeight;\n        }\n        else {\n            margin = innerItem[0].offsetWidth + innerItem[2].offsetWidth;\n        }\n        var tbarWid = this.isVertical ? this.element.offsetHeight : this.element.offsetWidth;\n        if (popupNav) {\n            tbarWid -= (this.isVertical ? popupNav.offsetHeight : popupNav.offsetWidth);\n            var popWid = (this.isVertical ? popupNav.offsetHeight : popupNav.offsetWidth) + 'px';\n            innerItem[2].removeAttribute('style');\n            if (this.isVertical) {\n                if (this.enableRtl) {\n                    innerItem[2].style.top = popWid;\n                }\n                else {\n                    innerItem[2].style.bottom = popWid;\n                }\n            }\n            else {\n                if (this.enableRtl) {\n                    innerItem[2].style.left = popWid;\n                }\n                else {\n                    innerItem[2].style.right = popWid;\n                }\n            }\n        }\n        if (tbarWid <= margin) {\n            return;\n        }\n        var value = (((tbarWid - margin)) - (!this.isVertical ? innerItem[1].offsetWidth : innerItem[1].offsetHeight)) / 2;\n        innerItem[1].removeAttribute('style');\n        var mrgn = ((!this.isVertical ? innerItem[0].offsetWidth : innerItem[0].offsetHeight) + value) + 'px';\n        if (this.isVertical) {\n            if (this.enableRtl) {\n                innerItem[1].style.marginBottom = mrgn;\n            }\n            else {\n                innerItem[1].style.marginTop = mrgn;\n            }\n        }\n        else {\n            if (this.enableRtl) {\n                innerItem[1].style.marginRight = mrgn;\n            }\n            else {\n                innerItem[1].style.marginLeft = mrgn;\n            }\n        }\n    };\n    Toolbar.prototype.tbarItemAlign = function (item, itemEle, pos) {\n        var _this = this;\n        if (item.showAlwaysInPopup && item.overflow !== 'Show') {\n            return;\n        }\n        var alignDiv = [];\n        alignDiv.push(this.createElement('div', { className: CLS_TBARLEFT }));\n        alignDiv.push(this.createElement('div', { className: CLS_TBARCENTER }));\n        alignDiv.push(this.createElement('div', { className: CLS_TBARRIGHT }));\n        if (pos === 0 && item.align !== 'Left') {\n            alignDiv.forEach(function (ele) {\n                itemEle.appendChild(ele);\n            });\n            this.tbarAlign = true;\n            this.add(itemEle, CLS_TBARPOS);\n        }\n        else if (item.align !== 'Left') {\n            var alignEle = itemEle.childNodes;\n            var leftAlign_1 = alignDiv[0];\n            [].slice.call(alignEle).forEach(function (el) {\n                _this.tbarAlgEle.lefts.push(el);\n                leftAlign_1.appendChild(el);\n            });\n            itemEle.appendChild(leftAlign_1);\n            itemEle.appendChild(alignDiv[1]);\n            itemEle.appendChild(alignDiv[2]);\n            this.tbarAlign = true;\n            this.add(itemEle, CLS_TBARPOS);\n        }\n    };\n    Toolbar.prototype.ctrlTemplate = function () {\n        var _this = this;\n        this.ctrlTem = this.trgtEle.cloneNode(true);\n        this.add(this.trgtEle, CLS_ITEMS);\n        this.tbarEle = [];\n        var innerEle = [].slice.call(this.trgtEle.children);\n        innerEle.forEach(function (ele) {\n            if (ele.tagName === 'DIV') {\n                _this.tbarEle.push(ele);\n                if (!isNOU(ele.firstElementChild)) {\n                    ele.firstElementChild.setAttribute('aria-disabled', 'false');\n                }\n                _this.add(ele, CLS_ITEM);\n            }\n        });\n    };\n    Toolbar.prototype.renderItems = function () {\n        var ele = this.element;\n        var items = this.items;\n        if (this.trgtEle != null) {\n            this.ctrlTemplate();\n        }\n        else if (ele && items.length > 0) {\n            var itemEleDom = void 0;\n            if (ele && ele.children.length > 0) {\n                itemEleDom = ele.querySelector('.' + CLS_ITEMS);\n            }\n            if (!itemEleDom) {\n                itemEleDom = this.createElement('div', { className: CLS_ITEMS });\n            }\n            this.itemsAlign(items, itemEleDom);\n            ele.appendChild(itemEleDom);\n        }\n    };\n    Toolbar.prototype.setAttr = function (attr, element) {\n        var key = Object.keys(attr);\n        var keyVal;\n        for (var i = 0; i < key.length; i++) {\n            keyVal = key[parseInt(i.toString(), 10)];\n            if (keyVal === 'class') {\n                this.add(element, attr[\"\" + keyVal]);\n            }\n            else {\n                element.setAttribute(keyVal, attr[\"\" + keyVal]);\n            }\n        }\n    };\n    /**\n     * Enables or disables the specified Toolbar item.\n     *\n     * @param  {number|HTMLElement|NodeList} items - DOM element or an array of items to be enabled or disabled.\n     * @param  {boolean} isEnable  - Boolean value that determines whether the command should be enabled or disabled.\n     * By default, `isEnable` is set to true.\n     * @returns {void}.\n     */\n    Toolbar.prototype.enableItems = function (items, isEnable) {\n        var elements = items;\n        var len = elements.length;\n        var ele;\n        if (isNOU(isEnable)) {\n            isEnable = true;\n        }\n        var enable = function (isEnable, ele) {\n            if (isEnable) {\n                ele.classList.remove(CLS_DISABLE);\n                if (!isNOU(ele.firstElementChild)) {\n                    ele.firstElementChild.setAttribute('aria-disabled', 'false');\n                }\n            }\n            else {\n                ele.classList.add(CLS_DISABLE);\n                if (!isNOU(ele.firstElementChild)) {\n                    ele.firstElementChild.setAttribute('aria-disabled', 'true');\n                }\n            }\n        };\n        if (!isNOU(len) && len >= 1) {\n            for (var a = 0, element = [].slice.call(elements); a < len; a++) {\n                var itemElement = element[parseInt(a.toString(), 10)];\n                if (typeof (itemElement) === 'number') {\n                    ele = this.getElementByIndex(itemElement);\n                    if (isNOU(ele)) {\n                        return;\n                    }\n                    else {\n                        elements[parseInt(a.toString(), 10)] = ele;\n                    }\n                }\n                else {\n                    ele = itemElement;\n                }\n                enable(isEnable, ele);\n            }\n            if (isEnable) {\n                removeClass(elements, CLS_DISABLE);\n            }\n            else {\n                addClass(elements, CLS_DISABLE);\n            }\n        }\n        else {\n            if (typeof (elements) === 'number') {\n                ele = this.getElementByIndex(elements);\n                if (isNOU(ele)) {\n                    return;\n                }\n            }\n            else {\n                ele = items;\n            }\n            enable(isEnable, ele);\n        }\n    };\n    Toolbar.prototype.getElementByIndex = function (index) {\n        if (this.tbarEle[parseInt(index.toString(), 10)]) {\n            return this.tbarEle[parseInt(index.toString(), 10)];\n        }\n        return null;\n    };\n    /**\n     * Adds new items to the Toolbar that accepts an array as Toolbar items.\n     *\n     * @param  {ItemModel[]} items - DOM element or an array of items to be added to the Toolbar.\n     * @param  {number} index - Number value that determines where the command is to be added. By default, index is 0.\n     * @returns {void}.\n     */\n    Toolbar.prototype.addItems = function (items, index) {\n        var innerItems;\n        this.extendedOpen();\n        var itemsDiv = this.element.querySelector('.' + CLS_ITEMS);\n        if (isNOU(itemsDiv)) {\n            this.itemsRerender(items);\n            return;\n        }\n        var innerEle;\n        var itemAgn = 'Left';\n        if (isNOU(index)) {\n            index = 0;\n        }\n        items.forEach(function (e) {\n            if (!isNOU(e.align) && e.align !== 'Left' && itemAgn === 'Left') {\n                itemAgn = e.align;\n            }\n        });\n        for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n            var item = items_1[_i];\n            if (isNOU(item.type)) {\n                item.type = 'Button';\n            }\n            innerItems = selectAll('.' + CLS_ITEM, this.element);\n            item.align = itemAgn;\n            innerEle = this.renderSubComponent(item, index);\n            if (this.tbarEle.length >= index && innerItems.length >= 0) {\n                if (isNOU(this.scrollModule)) {\n                    this.destroyMode();\n                }\n                var algIndex = item.align[0] === 'L' ? 0 : item.align[0] === 'C' ? 1 : 2;\n                var ele = void 0;\n                if (!this.tbarAlign && itemAgn !== 'Left') {\n                    this.tbarItemAlign(item, itemsDiv, 1);\n                    this.tbarAlign = true;\n                    ele = closest(innerItems[0], '.' + CLS_ITEMS).children[parseInt(algIndex.toString(), 10)];\n                    ele.appendChild(innerEle);\n                    this.tbarAlgEle[(item.align + 's').toLowerCase()].push(innerEle);\n                    this.refreshPositioning();\n                }\n                else if (this.tbarAlign) {\n                    ele = closest(innerItems[0], '.' + CLS_ITEMS).children[parseInt(algIndex.toString(), 10)];\n                    ele.insertBefore(innerEle, ele.children[parseInt(index.toString(), 10)]);\n                    this.tbarAlgEle[(item.align + 's').toLowerCase()].splice(index, 0, innerEle);\n                    this.refreshPositioning();\n                }\n                else if (innerItems.length === 0) {\n                    innerItems = selectAll('.' + CLS_ITEMS, this.element);\n                    innerItems[0].appendChild(innerEle);\n                }\n                else {\n                    innerItems[0].parentNode.insertBefore(innerEle, innerItems[parseInt(index.toString(), 10)]);\n                }\n                this.items.splice(index, 0, item);\n                if (item.template) {\n                    this.tbarEle.splice(this.tbarEle.length - 1, 1);\n                }\n                this.tbarEle.splice(index, 0, innerEle);\n                index++;\n                this.offsetWid = itemsDiv.offsetWidth;\n            }\n        }\n        itemsDiv.style.width = '';\n        this.renderOverflowMode();\n        if (this.isReact) {\n            this.renderReactTemplates();\n        }\n    };\n    /**\n     * Removes the items from the Toolbar. Acceptable arguments are index of item/HTMLElement/node list.\n     *\n     * @param  {number|HTMLElement|NodeList|HTMLElement[]} args\n     * Index or DOM element or an Array of item which is to be removed from the Toolbar.\n     * @returns {void}.\n     */\n    Toolbar.prototype.removeItems = function (args) {\n        var elements = args;\n        var index;\n        var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n        if (typeof (elements) === 'number') {\n            index = parseInt(args.toString(), 10);\n            this.removeItemByIndex(index, innerItems);\n        }\n        else {\n            if (elements && elements.length > 1) {\n                for (var _i = 0, _a = [].slice.call(elements); _i < _a.length; _i++) {\n                    var ele = _a[_i];\n                    index = this.tbarEle.indexOf(ele);\n                    this.removeItemByIndex(index, innerItems);\n                    innerItems = selectAll('.' + CLS_ITEM, this.element);\n                }\n            }\n            else {\n                var ele = (elements && elements.length && elements.length === 1) ? elements[0] : args;\n                index = innerItems.indexOf(ele);\n                this.removeItemByIndex(index, innerItems);\n            }\n        }\n        this.resize();\n    };\n    Toolbar.prototype.removeItemByIndex = function (index, innerItems) {\n        if (this.tbarEle[parseInt(index.toString(), 10)] && innerItems[parseInt(index.toString(), 10)]) {\n            var eleIdx = this.tbarEle.indexOf(innerItems[parseInt(index.toString(), 10)]);\n            if (this.tbarAlign) {\n                var indexAgn = this.tbarAlgEle[(this.items[parseInt(eleIdx.toString(), 10)].align + 's').toLowerCase()].indexOf(this.tbarEle[parseInt(eleIdx.toString(), 10)]);\n                this.tbarAlgEle[(this.items[parseInt(eleIdx.toString(), 10)].align + 's').toLowerCase()].splice(parseInt(indexAgn.toString(), 10), 1);\n            }\n            if (this.isReact) {\n                this.clearToolbarTemplate(innerItems[parseInt(index.toString(), 10)]);\n            }\n            var btnItem = innerItems[parseInt(index.toString(), 10)].querySelector('.e-control.e-btn');\n            if (!isNOU(btnItem) && !isNOU(btnItem.ej2_instances[0]) && !(btnItem.ej2_instances[0].isDestroyed)) {\n                btnItem.ej2_instances[0].destroy();\n            }\n            detach(innerItems[parseInt(index.toString(), 10)]);\n            this.items.splice(eleIdx, 1);\n            this.tbarEle.splice(eleIdx, 1);\n        }\n    };\n    Toolbar.prototype.templateRender = function (templateProp, innerEle, item, index) {\n        var itemType = item.type;\n        var eleObj = templateProp;\n        var isComponent;\n        if (typeof (templateProp) === 'object') {\n            isComponent = typeof (eleObj.appendTo) === 'function';\n        }\n        if (typeof (templateProp) === 'string' || !isComponent) {\n            var templateFn = void 0;\n            var val = templateProp;\n            var regEx = new RegExp(/<(?=.*? .*?\\/ ?>|br|hr|input|!--|wbr)[a-z]+.*?>|<([a-z]+).*?<\\/\\1>/i);\n            val = (typeof (templateProp) === 'string') ? templateProp.trim() : templateProp;\n            try {\n                if (typeof (templateProp) === 'object' && !isNOU(templateProp.tagName)) {\n                    innerEle.appendChild(templateProp);\n                }\n                else if (typeof (templateProp) === 'string' && regEx.test(val)) {\n                    innerEle.innerHTML = val;\n                }\n                else if (document.querySelectorAll(val).length) {\n                    var ele = document.querySelector(val);\n                    var tempStr = ele.outerHTML.trim();\n                    innerEle.appendChild(ele);\n                    ele.style.display = '';\n                    if (!isNOU(tempStr)) {\n                        this.tempId.push(val);\n                    }\n                }\n                else {\n                    templateFn = templateCompiler(val);\n                }\n            }\n            catch (e) {\n                templateFn = templateCompiler(val);\n            }\n            var tempArray = void 0;\n            if (!isNOU(templateFn)) {\n                var toolbarTemplateID = this.element.id + index + '_template';\n                tempArray = templateFn({}, this, 'template', toolbarTemplateID, this.isStringTemplate, undefined, undefined, this.root);\n            }\n            if (!isNOU(tempArray) && tempArray.length > 0) {\n                [].slice.call(tempArray).forEach(function (ele) {\n                    if (!isNOU(ele.tagName)) {\n                        ele.style.display = '';\n                    }\n                    innerEle.appendChild(ele);\n                });\n            }\n        }\n        else if (itemType === 'Input') {\n            var ele = this.createElement('input');\n            if (item.id) {\n                ele.id = item.id;\n            }\n            else {\n                ele.id = getUniqueID('tbr-ipt');\n            }\n            innerEle.appendChild(ele);\n            eleObj.appendTo(ele);\n        }\n        this.add(innerEle, CLS_TEMPLATE);\n        var firstChild = innerEle.firstElementChild;\n        if (!isNOU(firstChild)) {\n            firstChild.setAttribute('tabindex', isNOU(firstChild.getAttribute(\"tabIndex\")) ? '-1' : this.getDataTabindex(firstChild));\n            firstChild.setAttribute('data-tabindex', isNOU(firstChild.getAttribute(\"tabIndex\")) ? '-1' : this.getDataTabindex(firstChild));\n        }\n        this.tbarEle.push(innerEle);\n    };\n    Toolbar.prototype.buttonRendering = function (item, innerEle) {\n        var dom = this.createElement('button', { className: CLS_TBARBTN });\n        dom.setAttribute('type', 'button');\n        var textStr = item.text;\n        var iconCss;\n        var iconPos;\n        if (item.id) {\n            dom.id = item.id;\n        }\n        else {\n            dom.id = getUniqueID('e-tbr-btn');\n        }\n        var btnTxt = this.createElement('span', { className: 'e-tbar-btn-text' });\n        if (textStr) {\n            btnTxt.innerHTML = this.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(textStr) : textStr;\n            dom.appendChild(btnTxt);\n            dom.classList.add('e-tbtn-txt');\n        }\n        else {\n            this.add(innerEle, 'e-tbtn-align');\n        }\n        if (item.prefixIcon || item.suffixIcon) {\n            if ((item.prefixIcon && item.suffixIcon) || item.prefixIcon) {\n                iconCss = item.prefixIcon + ' e-icons';\n                iconPos = 'Left';\n            }\n            else {\n                iconCss = item.suffixIcon + ' e-icons';\n                iconPos = 'Right';\n            }\n        }\n        var btnObj = new Button({ iconCss: iconCss, iconPosition: iconPos });\n        btnObj.createElement = this.createElement;\n        btnObj.appendTo(dom);\n        if (item.width) {\n            setStyle(dom, { 'width': formatUnit(item.width) });\n        }\n        return dom;\n    };\n    Toolbar.prototype.renderSubComponent = function (item, index) {\n        var dom;\n        var innerEle = this.createElement('div', { className: CLS_ITEM });\n        var tempDom = this.createElement('div', {\n            innerHTML: this.enableHtmlSanitizer && !isNOU(item.tooltipText) ?\n                SanitizeHtmlHelper.sanitize(item.tooltipText) : item.tooltipText\n        });\n        if (!this.tbarEle) {\n            this.tbarEle = [];\n        }\n        if (item.htmlAttributes) {\n            this.setAttr(item.htmlAttributes, innerEle);\n        }\n        if (item.tooltipText) {\n            innerEle.setAttribute('title', tempDom.textContent);\n        }\n        if (item.cssClass) {\n            innerEle.className = innerEle.className + ' ' + item.cssClass;\n        }\n        if (item.template) {\n            this.templateRender(item.template, innerEle, item, index);\n        }\n        else {\n            switch (item.type) {\n                case 'Button':\n                    dom = this.buttonRendering(item, innerEle);\n                    dom.setAttribute('tabindex', isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString());\n                    dom.setAttribute('data-tabindex', isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString());\n                    dom.setAttribute('aria-label', (item.text || item.tooltipText));\n                    dom.setAttribute('aria-disabled', 'false');\n                    innerEle.appendChild(dom);\n                    innerEle.addEventListener('click', this.itemClick.bind(this));\n                    break;\n                case 'Separator':\n                    this.add(innerEle, CLS_SEPARATOR);\n                    break;\n            }\n        }\n        if (item.showTextOn) {\n            var sTxt = item.showTextOn;\n            if (sTxt === 'Toolbar') {\n                this.add(innerEle, CLS_POPUPTEXT);\n                this.add(innerEle, 'e-tbtn-align');\n            }\n            else if (sTxt === 'Overflow') {\n                this.add(innerEle, CLS_TBARTEXT);\n            }\n        }\n        if (item.overflow) {\n            var overflow = item.overflow;\n            if (overflow === 'Show') {\n                this.add(innerEle, CLS_TBAROVERFLOW);\n            }\n            else if (overflow === 'Hide') {\n                if (!innerEle.classList.contains(CLS_SEPARATOR)) {\n                    this.add(innerEle, CLS_POPOVERFLOW);\n                }\n            }\n        }\n        if (item.overflow !== 'Show' && item.showAlwaysInPopup && !innerEle.classList.contains(CLS_SEPARATOR)) {\n            this.add(innerEle, CLS_POPPRI);\n            this.popupPriCount++;\n        }\n        if (item.disabled) {\n            this.add(innerEle, CLS_DISABLE);\n        }\n        if (item.visible === false) {\n            this.add(innerEle, CLS_HIDDEN);\n        }\n        return innerEle;\n    };\n    Toolbar.prototype.getDataTabindex = function (ele) {\n        return isNOU(ele.getAttribute('data-tabindex')) ? '-1' : ele.getAttribute('data-tabindex');\n    };\n    Toolbar.prototype.itemClick = function (e) {\n        this.activeEleSwitch(e.currentTarget);\n    };\n    Toolbar.prototype.activeEleSwitch = function (ele) {\n        this.activeEleRemove(ele.firstElementChild);\n        this.activeEle.focus();\n    };\n    Toolbar.prototype.activeEleRemove = function (curEle) {\n        if (!isNOU(this.activeEle)) {\n            this.activeEle.setAttribute('tabindex', this.getDataTabindex(this.activeEle));\n        }\n        this.activeEle = curEle;\n        if (this.getDataTabindex(this.activeEle) === '-1') {\n            if (isNOU(this.trgtEle) && !curEle.parentElement.classList.contains(CLS_TEMPLATE)) {\n                this.updateTabIndex('-1');\n                curEle.removeAttribute('tabindex');\n            }\n            else {\n                var tabIndex = parseInt(this.getDataTabindex(this.activeEle)) + 1;\n                this.activeEle.setAttribute('tabindex', tabIndex.toString());\n            }\n        }\n    };\n    Toolbar.prototype.getPersistData = function () {\n        return this.addOnPersist([]);\n    };\n    /**\n     * Returns the current module name.\n     *\n     * @returns {string} - Returns the module name as string.\n     * @private\n     */\n    Toolbar.prototype.getModuleName = function () {\n        return 'toolbar';\n    };\n    Toolbar.prototype.itemsRerender = function (newProp) {\n        this.items = this.tbarItemsCol;\n        if (this.isReact || this.isAngular) {\n            this.clearTemplate();\n        }\n        this.destroyMode();\n        this.destroyItems();\n        this.items = newProp;\n        this.tbarItemsCol = this.items;\n        this.renderItems();\n        this.renderOverflowMode();\n        if (this.isReact) {\n            this.renderReactTemplates();\n        }\n    };\n    Toolbar.prototype.resize = function () {\n        var ele = this.element;\n        this.tbResize = true;\n        if (this.tbarAlign) {\n            this.itemPositioning();\n        }\n        if (this.popObj && this.overflowMode === 'Popup') {\n            this.popObj.hide();\n        }\n        var checkOverflow = this.checkOverflow(ele, ele.getElementsByClassName(CLS_ITEMS)[0]);\n        if (!checkOverflow) {\n            this.destroyScroll();\n            var multirowele = ele.querySelector('.' + CLS_ITEMS);\n            if (!isNOU(multirowele)) {\n                this.remove(multirowele, CLS_MULTIROWPOS);\n                if (this.tbarAlign) {\n                    this.add(multirowele, CLS_TBARPOS);\n                }\n            }\n        }\n        if (checkOverflow && this.scrollModule && (this.offsetWid === ele.offsetWidth)) {\n            return;\n        }\n        if (this.offsetWid > ele.offsetWidth || checkOverflow) {\n            this.renderOverflowMode();\n        }\n        if (this.popObj) {\n            if (this.overflowMode === 'Extended') {\n                var eleStyles = window.getComputedStyle(this.element);\n                this.popObj.width = parseFloat(eleStyles.width) + ((parseFloat(eleStyles.borderRightWidth)) * 2);\n            }\n            if (this.tbarAlign) {\n                this.removePositioning();\n            }\n            this.popupRefresh(this.popObj.element, false);\n            if (this.tbarAlign) {\n                this.refreshPositioning();\n            }\n        }\n        if (this.element.querySelector('.' + CLS_HSCROLLBAR)) {\n            this.scrollStep = this.element.querySelector('.' + CLS_HSCROLLBAR).offsetWidth;\n        }\n        this.offsetWid = ele.offsetWidth;\n        this.tbResize = false;\n        this.separator();\n    };\n    Toolbar.prototype.orientationChange = function () {\n        var _this = this;\n        setTimeout(function () {\n            _this.resize();\n        }, 500);\n    };\n    Toolbar.prototype.extendedOpen = function () {\n        var sib = this.element.querySelector('.' + CLS_EXTENDABLECLASS);\n        if (this.overflowMode === 'Extended' && sib) {\n            this.isExtendedOpen = sib.classList.contains(CLS_POPUPOPEN);\n        }\n    };\n    Toolbar.prototype.updateHideEleTabIndex = function (ele, isHidden, isElement, eleIndex, innerItems) {\n        if (isElement) {\n            eleIndex = innerItems.indexOf(ele);\n        }\n        var nextEle = innerItems[++eleIndex];\n        while (nextEle) {\n            var skipEle = this.eleContains(nextEle);\n            if (!skipEle) {\n                var dataTabIndex = nextEle.firstElementChild.getAttribute('data-tabindex');\n                if (isHidden && dataTabIndex === '-1') {\n                    nextEle.firstElementChild.setAttribute('tabindex', '0');\n                }\n                else if (dataTabIndex !== nextEle.firstElementChild.getAttribute('tabindex')) {\n                    nextEle.firstElementChild.setAttribute('tabindex', dataTabIndex);\n                }\n                break;\n            }\n            nextEle = innerItems[++eleIndex];\n        }\n    };\n    Toolbar.prototype.clearToolbarTemplate = function (templateEle) {\n        if (this.registeredTemplate && this.registeredTemplate[\"\" + 'template']) {\n            var registeredTemplates = this.registeredTemplate;\n            for (var index = 0; index < registeredTemplates[\"\" + 'template'].length; index++) {\n                var registeredItem = registeredTemplates[\"\" + 'template'][parseInt(index.toString(), 10)].rootNodes[0];\n                var closestItem = closest(registeredItem, '.' + CLS_ITEM);\n                if (!isNOU(closestItem) && closestItem === templateEle) {\n                    this.clearTemplate(['template'], [registeredTemplates[\"\" + 'template'][parseInt(index.toString(), 10)]]);\n                    break;\n                }\n            }\n        }\n        else if (this.portals && this.portals.length > 0) {\n            var portals = this.portals;\n            for (var index = 0; index < portals.length; index++) {\n                var portalItem = portals[parseInt(index.toString(), 10)];\n                var closestItem = closest(portalItem.containerInfo, '.' + CLS_ITEM);\n                if (!isNOU(closestItem) && closestItem === templateEle) {\n                    this.clearTemplate(['template'], index);\n                    break;\n                }\n            }\n        }\n    };\n    /**\n     * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n     *\n     * @param  {ToolbarModel} newProp - It contains new value of the data.\n     * @param  {ToolbarModel} oldProp - It contains old value of the data.\n     * @returns {void}\n     * @private\n     */\n    Toolbar.prototype.onPropertyChanged = function (newProp, oldProp) {\n        var tEle = this.element;\n        var wid = tEle.offsetWidth;\n        this.extendedOpen();\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'items':\n                    if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n                        var changedProb = Object.keys(newProp.items);\n                        for (var i = 0; i < changedProb.length; i++) {\n                            var index = parseInt(Object.keys(newProp.items)[parseInt(i.toString(), 10)], 10);\n                            var property = Object.keys(newProp.items[parseInt(index.toString(), 10)])[0];\n                            var newProperty = Object(newProp.items[parseInt(index.toString(), 10)])[\"\" + property];\n                            if (this.tbarAlign || property === 'align') {\n                                this.refresh();\n                                this.trigger('created');\n                                break;\n                            }\n                            var popupPriCheck = property === 'showAlwaysInPopup' && !newProperty;\n                            var booleanCheck = property === 'overflow' && this.popupPriCount !== 0;\n                            if ((popupPriCheck) || (this.items[parseInt(index.toString(), 10)].showAlwaysInPopup) && booleanCheck) {\n                                --this.popupPriCount;\n                            }\n                            if (isNOU(this.scrollModule)) {\n                                this.destroyMode();\n                            }\n                            var itemCol = [].slice.call(selectAll('.' + CLS_ITEMS + ' .' + CLS_ITEM, tEle));\n                            if (this.isReact && this.items[parseInt(index.toString(), 10)].template) {\n                                this.clearToolbarTemplate(itemCol[parseInt(index.toString(), 10)]);\n                            }\n                            detach(itemCol[parseInt(index.toString(), 10)]);\n                            this.tbarEle.splice(index, 1);\n                            this.addItems([this.items[parseInt(index.toString(), 10)]], index);\n                            this.items.splice(index, 1);\n                            if (this.items[parseInt(index.toString(), 10)].template) {\n                                this.tbarEle.splice(this.items.length, 1);\n                            }\n                        }\n                    }\n                    else {\n                        this.itemsRerender(newProp.items);\n                    }\n                    break;\n                case 'width':\n                    setStyle(tEle, { 'width': formatUnit(newProp.width) });\n                    this.refreshOverflow();\n                    break;\n                case 'height':\n                    setStyle(this.element, { 'height': formatUnit(newProp.height) });\n                    break;\n                case 'overflowMode':\n                    this.destroyMode();\n                    this.renderOverflowMode();\n                    if (this.enableRtl) {\n                        this.add(tEle, CLS_RTL);\n                    }\n                    this.refreshOverflow();\n                    break;\n                case 'enableRtl':\n                    if (newProp.enableRtl) {\n                        this.add(tEle, CLS_RTL);\n                    }\n                    else {\n                        this.remove(tEle, CLS_RTL);\n                    }\n                    if (!isNOU(this.scrollModule)) {\n                        if (newProp.enableRtl) {\n                            this.add(this.scrollModule.element, CLS_RTL);\n                        }\n                        else {\n                            this.remove(this.scrollModule.element, CLS_RTL);\n                        }\n                    }\n                    if (!isNOU(this.popObj)) {\n                        if (newProp.enableRtl) {\n                            this.add(this.popObj.element, CLS_RTL);\n                        }\n                        else {\n                            this.remove(this.popObj.element, CLS_RTL);\n                        }\n                    }\n                    if (this.tbarAlign) {\n                        this.itemPositioning();\n                    }\n                    break;\n                case 'scrollStep':\n                    if (this.scrollModule) {\n                        this.scrollModule.scrollStep = this.scrollStep;\n                    }\n                    break;\n                case 'enableCollision':\n                    if (this.popObj) {\n                        this.popObj.collision = { Y: this.enableCollision ? 'flip' : 'none' };\n                    }\n                    break;\n                case 'cssClass':\n                    if (oldProp.cssClass) {\n                        removeClass([this.element], oldProp.cssClass.split(' '));\n                    }\n                    if (newProp.cssClass) {\n                        addClass([this.element], newProp.cssClass.split(' '));\n                    }\n                    break;\n                case 'allowKeyboard':\n                    this.unwireKeyboardEvent();\n                    if (newProp.allowKeyboard) {\n                        this.wireKeyboardEvent();\n                    }\n                    break;\n            }\n        }\n    };\n    /**\n     * Shows or hides the Toolbar item that is in the specified index.\n     *\n     * @param  {number | HTMLElement} index - Index value of target item or DOM element  of items to be hidden or shown.\n     * @param  {boolean} value - Based on this Boolean value, item will be hide (true) or show (false). By default, value is false.\n     * @returns {void}.\n     */\n    Toolbar.prototype.hideItem = function (index, value) {\n        var isElement = (typeof (index) === 'object') ? true : false;\n        var eleIndex = index;\n        var ele;\n        if (!isElement && isNOU(eleIndex)) {\n            return;\n        }\n        var innerItems = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n        if (isElement) {\n            ele = index;\n        }\n        else if (this.tbarEle[parseInt(eleIndex.toString(), 10)]) {\n            var innerItems_1 = [].slice.call(selectAll('.' + CLS_ITEM, this.element));\n            ele = innerItems_1[parseInt(eleIndex.toString(), 10)];\n        }\n        if (ele) {\n            if (value) {\n                ele.classList.add(CLS_HIDDEN);\n                if (!ele.classList.contains(CLS_SEPARATOR)) {\n                    if (isNOU(ele.firstElementChild.getAttribute('tabindex')) ||\n                        ele.firstElementChild.getAttribute('tabindex') !== '-1') {\n                        this.updateHideEleTabIndex(ele, value, isElement, eleIndex, innerItems);\n                    }\n                }\n            }\n            else {\n                ele.classList.remove(CLS_HIDDEN);\n                if (!ele.classList.contains(CLS_SEPARATOR)) {\n                    this.updateHideEleTabIndex(ele, value, isElement, eleIndex, innerItems);\n                }\n            }\n            this.refreshOverflow();\n        }\n    };\n    __decorate([\n        Collection([], Item)\n    ], Toolbar.prototype, \"items\", void 0);\n    __decorate([\n        Property('auto')\n    ], Toolbar.prototype, \"width\", void 0);\n    __decorate([\n        Property('auto')\n    ], Toolbar.prototype, \"height\", void 0);\n    __decorate([\n        Property('')\n    ], Toolbar.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property('Scrollable')\n    ], Toolbar.prototype, \"overflowMode\", void 0);\n    __decorate([\n        Property()\n    ], Toolbar.prototype, \"scrollStep\", void 0);\n    __decorate([\n        Property(true)\n    ], Toolbar.prototype, \"enableCollision\", void 0);\n    __decorate([\n        Property(true)\n    ], Toolbar.prototype, \"enableHtmlSanitizer\", void 0);\n    __decorate([\n        Property(true)\n    ], Toolbar.prototype, \"allowKeyboard\", void 0);\n    __decorate([\n        Event()\n    ], Toolbar.prototype, \"clicked\", void 0);\n    __decorate([\n        Event()\n    ], Toolbar.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], Toolbar.prototype, \"destroyed\", void 0);\n    __decorate([\n        Event()\n    ], Toolbar.prototype, \"beforeCreate\", void 0);\n    Toolbar = __decorate([\n        NotifyPropertyChanges\n    ], Toolbar);\n    return Toolbar;\n}(Component));\nexport { Toolbar };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-hscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_HSCROLLBAR = 'e-hscroll-bar';\nvar CLS_HSCROLLCON = 'e-hscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVRIGHTARROW = 'e-nav-right-arrow';\nvar CLS_NAVLEFTARROW = 'e-nav-left-arrow';\nvar CLS_HSCROLLNAV = 'e-scroll-nav';\nvar CLS_HSCROLLNAVRIGHT = 'e-scroll-right-nav';\nvar CLS_HSCROLLNAVLEFT = 'e-scroll-left-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_RIGHTOVERLAY = 'e-scroll-right-overlay';\nvar CLS_LEFTOVERLAY = 'e-scroll-left-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * HScroll module is introduces horizontal scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs horizontal scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n * <div id=\"scroll\"/>\n * <script>\n *   var scrollObj = new HScroll();\n *   scrollObj.appendTo(\"#scroll\");\n * </script>\n * ```\n */\nvar HScroll = /** @class */ (function (_super) {\n    __extends(HScroll, _super);\n    /**\n     * Initializes a new instance of the HScroll class.\n     *\n     * @param {HScrollModel} options  - Specifies HScroll model properties as options.\n     * @param {string | HTMLElement} element  - Specifies the element for which horizontal scrolling applies.\n     */\n    function HScroll(options, element) {\n        return _super.call(this, options, element) || this;\n    }\n    /**\n     * Initialize the event handler\n     *\n     * @private\n     * @returns {void}\n     */\n    HScroll.prototype.preRender = function () {\n        this.browser = Browser.info.name;\n        this.browserCheck = this.browser === 'mozilla';\n        this.isDevice = Browser.isDevice;\n        this.customStep = true;\n        var element = this.element;\n        this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n        this.initialize();\n        if (element.id === '') {\n            element.id = getUniqueID('hscroll');\n            this.uniqueId = true;\n        }\n        element.style.display = 'block';\n        if (this.enableRtl) {\n            element.classList.add(CLS_RTL);\n        }\n    };\n    /**\n     * To Initialize the horizontal scroll  rendering\n     *\n     * @private\n     * @returns {void}\n     */\n    HScroll.prototype.render = function () {\n        this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n        EventHandler.add(this.scrollEle, 'scroll', this.scrollHandler, this);\n        if (!this.isDevice) {\n            this.createNavIcon(this.element);\n        }\n        else {\n            this.element.classList.add(CLS_DEVICE);\n            this.createOverlay(this.element);\n        }\n        this.setScrollState();\n    };\n    HScroll.prototype.setScrollState = function () {\n        if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n            this.scrollStep = this.scrollEle.offsetWidth;\n            this.customStep = false;\n        }\n        else {\n            this.customStep = true;\n        }\n    };\n    HScroll.prototype.initialize = function () {\n        var scrollEle = this.createElement('div', { className: CLS_HSCROLLCON });\n        var scrollDiv = this.createElement('div', { className: CLS_HSCROLLBAR });\n        scrollDiv.setAttribute('tabindex', '-1');\n        var ele = this.element;\n        var innerEle = [].slice.call(ele.children);\n        for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n            var ele_1 = innerEle_1[_i];\n            scrollEle.appendChild(ele_1);\n        }\n        scrollDiv.appendChild(scrollEle);\n        ele.appendChild(scrollDiv);\n        scrollDiv.style.overflowX = 'hidden';\n        this.scrollEle = scrollDiv;\n        this.scrollItems = scrollEle;\n    };\n    HScroll.prototype.getPersistData = function () {\n        var keyEntity = ['scrollStep'];\n        return this.addOnPersist(keyEntity);\n    };\n    /**\n     * Returns the current module name.\n     *\n     * @returns {string} - It returns the current module name.\n     * @private\n     */\n    HScroll.prototype.getModuleName = function () {\n        return 'hScroll';\n    };\n    /**\n     * Removes the control from the DOM and also removes all its related events.\n     *\n     * @returns {void}\n     */\n    HScroll.prototype.destroy = function () {\n        var ele = this.element;\n        ele.style.display = '';\n        ele.classList.remove(CLS_ROOT);\n        ele.classList.remove(CLS_DEVICE);\n        ele.classList.remove(CLS_RTL);\n        var nav = selectAll('.e-' + ele.id + '_nav.' + CLS_HSCROLLNAV, ele);\n        var overlay = selectAll('.' + CLS_OVERLAY, ele);\n        [].slice.call(overlay).forEach(function (ele) {\n            detach(ele);\n        });\n        for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n            var elem = _a[_i];\n            ele.appendChild(elem);\n        }\n        if (this.uniqueId) {\n            this.element.removeAttribute('id');\n        }\n        detach(this.scrollEle);\n        if (nav.length > 0) {\n            detach(nav[0]);\n            if (!isNullOrUndefined(nav[1])) {\n                detach(nav[1]);\n            }\n        }\n        EventHandler.remove(this.scrollEle, 'scroll', this.scrollHandler);\n        this.touchModule.destroy();\n        this.touchModule = null;\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * Specifies the value to disable/enable the HScroll component.\n     * When set to `true` , the component will be disabled.\n     *\n     * @param  {boolean} value - Based on this Boolean value, HScroll will be enabled (false) or disabled (true).\n     * @returns {void}.\n     */\n    HScroll.prototype.disable = function (value) {\n        var navEles = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n        if (value) {\n            this.element.classList.add(CLS_DISABLE);\n        }\n        else {\n            this.element.classList.remove(CLS_DISABLE);\n        }\n        [].slice.call(navEles).forEach(function (el) {\n            el.setAttribute('tabindex', !value ? '0' : '-1');\n        });\n    };\n    HScroll.prototype.createOverlay = function (element) {\n        var id = element.id.concat('_nav');\n        var rightOverlayEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_RIGHTOVERLAY });\n        var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n        var rightEle = this.createElement('div', { id: id.concat('_right'), className: clsRight });\n        var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n        rightEle.appendChild(navItem);\n        var leftEle = this.createElement('div', { className: CLS_OVERLAY + ' ' + CLS_LEFTOVERLAY });\n        if (this.ieCheck) {\n            rightEle.classList.add('e-ie-align');\n        }\n        element.appendChild(rightOverlayEle);\n        element.appendChild(rightEle);\n        element.insertBefore(leftEle, element.firstChild);\n        this.eventBinding([rightEle]);\n    };\n    HScroll.prototype.createNavIcon = function (element) {\n        var id = element.id.concat('_nav');\n        var clsRight = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVRIGHT);\n        var rightAttributes = { 'role': 'button', 'id': id.concat('_right'), 'aria-label': 'Scroll right' };\n        var nav = this.createElement('div', { className: clsRight, attrs: rightAttributes });\n        nav.setAttribute('aria-disabled', 'false');\n        var navItem = this.createElement('div', { className: CLS_NAVRIGHTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n        var clsLeft = 'e-' + element.id.concat('_nav ' + CLS_HSCROLLNAV + ' ' + CLS_HSCROLLNAVLEFT);\n        var leftAttributes = { 'role': 'button', 'id': id.concat('_left'), 'aria-label': 'Scroll left' };\n        var navEle = this.createElement('div', { className: clsLeft + ' ' + CLS_DISABLE, attrs: leftAttributes });\n        navEle.setAttribute('aria-disabled', 'true');\n        var navLeftItem = this.createElement('div', { className: CLS_NAVLEFTARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n        navEle.appendChild(navLeftItem);\n        nav.appendChild(navItem);\n        element.appendChild(nav);\n        element.insertBefore(navEle, element.firstChild);\n        if (this.ieCheck) {\n            nav.classList.add('e-ie-align');\n            navEle.classList.add('e-ie-align');\n        }\n        this.eventBinding([nav, navEle]);\n    };\n    HScroll.prototype.onKeyPress = function (e) {\n        var _this = this;\n        if (e.key === 'Enter') {\n            var timeoutFun_1 = function () {\n                _this.keyTimeout = true;\n                _this.eleScrolling(10, e.target, true);\n            };\n            this.keyTimer = window.setTimeout(function () {\n                timeoutFun_1();\n            }, 100);\n        }\n    };\n    HScroll.prototype.onKeyUp = function (e) {\n        if (e.key !== 'Enter') {\n            return;\n        }\n        if (this.keyTimeout) {\n            this.keyTimeout = false;\n        }\n        else {\n            e.target.click();\n        }\n        clearTimeout(this.keyTimer);\n    };\n    HScroll.prototype.eventBinding = function (ele) {\n        var _this = this;\n        [].slice.call(ele).forEach(function (el) {\n            new Touch(el, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n            el.addEventListener('keydown', _this.onKeyPress.bind(_this));\n            el.addEventListener('keyup', _this.onKeyUp.bind(_this));\n            el.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n            el.addEventListener('touchend', _this.repeatScroll.bind(_this));\n            el.addEventListener('contextmenu', function (e) {\n                e.preventDefault();\n            });\n            EventHandler.add(el, 'click', _this.clickEventHandler, _this);\n        });\n    };\n    HScroll.prototype.repeatScroll = function () {\n        clearInterval(this.timeout);\n    };\n    HScroll.prototype.tabHoldHandler = function (e) {\n        var _this = this;\n        var trgt = e.originalEvent.target;\n        trgt = this.contains(trgt, CLS_HSCROLLNAV) ? trgt.firstElementChild : trgt;\n        var scrollDis = 10;\n        var timeoutFun = function () {\n            _this.eleScrolling(scrollDis, trgt, true);\n        };\n        this.timeout = window.setInterval(function () {\n            timeoutFun();\n        }, 50);\n    };\n    HScroll.prototype.contains = function (ele, className) {\n        return ele.classList.contains(className);\n    };\n    HScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n        var rootEle = this.element;\n        var classList = trgt.classList;\n        if (classList.contains(CLS_HSCROLLNAV)) {\n            classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n        }\n        if (this.contains(rootEle, CLS_RTL) && this.browserCheck) {\n            scrollDis = -scrollDis;\n        }\n        if ((!this.contains(rootEle, CLS_RTL) || this.browserCheck) || this.ieCheck) {\n            if (classList.contains(CLS_NAVRIGHTARROW)) {\n                this.frameScrollRequest(scrollDis, 'add', isContinuous);\n            }\n            else {\n                this.frameScrollRequest(scrollDis, '', isContinuous);\n            }\n        }\n        else {\n            if (classList.contains(CLS_NAVLEFTARROW)) {\n                this.frameScrollRequest(scrollDis, 'add', isContinuous);\n            }\n            else {\n                this.frameScrollRequest(scrollDis, '', isContinuous);\n            }\n        }\n    };\n    HScroll.prototype.clickEventHandler = function (e) {\n        this.eleScrolling(this.scrollStep, e.target, false);\n    };\n    HScroll.prototype.swipeHandler = function (e) {\n        var swipeEle = this.scrollEle;\n        var distance;\n        if (e.velocity <= 1) {\n            distance = e.distanceX / (e.velocity * 10);\n        }\n        else {\n            distance = e.distanceX / e.velocity;\n        }\n        var start = 0.5;\n        var animate = function () {\n            var step = Math.sin(start);\n            if (step <= 0) {\n                window.cancelAnimationFrame(step);\n            }\n            else {\n                if (e.swipeDirection === 'Left') {\n                    swipeEle.scrollLeft += distance * step;\n                }\n                else if (e.swipeDirection === 'Right') {\n                    swipeEle.scrollLeft -= distance * step;\n                }\n                start -= 0.5;\n                window.requestAnimationFrame(animate);\n            }\n        };\n        animate();\n    };\n    HScroll.prototype.scrollUpdating = function (scrollVal, action) {\n        if (action === 'add') {\n            this.scrollEle.scrollLeft += scrollVal;\n        }\n        else {\n            this.scrollEle.scrollLeft -= scrollVal;\n        }\n        if (this.enableRtl && this.scrollEle.scrollLeft > 0) {\n            this.scrollEle.scrollLeft = 0;\n        }\n    };\n    HScroll.prototype.frameScrollRequest = function (scrollVal, action, isContinuous) {\n        var _this = this;\n        var step = 10;\n        if (isContinuous) {\n            this.scrollUpdating(scrollVal, action);\n            return;\n        }\n        if (!this.customStep) {\n            [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n                scrollVal -= el.offsetWidth;\n            });\n        }\n        var animate = function () {\n            var scrollValue;\n            var scrollStep;\n            if (_this.contains(_this.element, CLS_RTL) && _this.browserCheck) {\n                scrollValue = -scrollVal;\n                scrollStep = -step;\n            }\n            else {\n                scrollValue = scrollVal;\n                scrollStep = step;\n            }\n            if (scrollValue < step) {\n                window.cancelAnimationFrame(scrollStep);\n            }\n            else {\n                _this.scrollUpdating(scrollStep, action);\n                scrollVal -= scrollStep;\n                window.requestAnimationFrame(animate);\n            }\n        };\n        animate();\n    };\n    HScroll.prototype.touchHandler = function (e) {\n        var ele = this.scrollEle;\n        var distance = e.distanceX;\n        if ((this.ieCheck) && this.contains(this.element, CLS_RTL)) {\n            distance = -distance;\n        }\n        if (e.scrollDirection === 'Left') {\n            ele.scrollLeft = ele.scrollLeft + distance;\n        }\n        else if (e.scrollDirection === 'Right') {\n            ele.scrollLeft = ele.scrollLeft - distance;\n        }\n    };\n    HScroll.prototype.arrowDisabling = function (addDisable, removeDisable) {\n        if (this.isDevice) {\n            var arrowEle = isNullOrUndefined(addDisable) ? removeDisable : addDisable;\n            var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n            if (isNullOrUndefined(addDisable)) {\n                classList(arrowIcon, [CLS_NAVRIGHTARROW], [CLS_NAVLEFTARROW]);\n            }\n            else {\n                classList(arrowIcon, [CLS_NAVLEFTARROW], [CLS_NAVRIGHTARROW]);\n            }\n        }\n        else if (addDisable && removeDisable) {\n            addDisable.classList.add(CLS_DISABLE);\n            addDisable.setAttribute('aria-disabled', 'true');\n            addDisable.removeAttribute('tabindex');\n            removeDisable.classList.remove(CLS_DISABLE);\n            removeDisable.setAttribute('aria-disabled', 'false');\n            removeDisable.setAttribute('tabindex', '0');\n        }\n        this.repeatScroll();\n    };\n    HScroll.prototype.scrollHandler = function (e) {\n        var target = e.target;\n        var width = target.offsetWidth;\n        var rootEle = this.element;\n        var navLeftEle = this.element.querySelector('.' + CLS_HSCROLLNAVLEFT);\n        var navRightEle = this.element.querySelector('.' + CLS_HSCROLLNAVRIGHT);\n        var leftOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n        var rightOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n        var scrollLeft = target.scrollLeft;\n        if (scrollLeft <= 0) {\n            scrollLeft = -scrollLeft;\n        }\n        if (this.isDevice) {\n            if (this.enableRtl && !(this.browserCheck || this.ieCheck)) {\n                leftOverlay = this.element.querySelector('.' + CLS_RIGHTOVERLAY);\n                rightOverlay = this.element.querySelector('.' + CLS_LEFTOVERLAY);\n            }\n            if (scrollLeft < OVERLAY_MAXWID) {\n                leftOverlay.style.width = scrollLeft + 'px';\n            }\n            else {\n                leftOverlay.style.width = '40px';\n            }\n            if ((target.scrollWidth - Math.ceil(width + scrollLeft)) < OVERLAY_MAXWID) {\n                rightOverlay.style.width = (target.scrollWidth - Math.ceil(width + scrollLeft)) + 'px';\n            }\n            else {\n                rightOverlay.style.width = '40px';\n            }\n        }\n        if (scrollLeft === 0) {\n            this.arrowDisabling(navLeftEle, navRightEle);\n        }\n        else if (Math.ceil(width + scrollLeft + .1) >= target.scrollWidth) {\n            this.arrowDisabling(navRightEle, navLeftEle);\n        }\n        else {\n            var disEle = this.element.querySelector('.' + CLS_HSCROLLNAV + '.' + CLS_DISABLE);\n            if (disEle) {\n                disEle.classList.remove(CLS_DISABLE);\n                disEle.setAttribute('aria-disabled', 'false');\n                disEle.setAttribute('tabindex', '0');\n            }\n        }\n    };\n    /**\n     * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n     *\n     * @param  {HScrollModel} newProp - It contains the new value of data.\n     * @param  {HScrollModel} oldProp - It contains the old value of data.\n     * @returns {void}\n     * @private\n     */\n    HScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'scrollStep':\n                    this.setScrollState();\n                    break;\n                case 'enableRtl':\n                    newProp.enableRtl ? this.element.classList.add(CLS_RTL) : this.element.classList.remove(CLS_RTL);\n                    break;\n            }\n        }\n    };\n    __decorate([\n        Property(null)\n    ], HScroll.prototype, \"scrollStep\", void 0);\n    HScroll = __decorate([\n        NotifyPropertyChanges\n    ], HScroll);\n    return HScroll;\n}(Component));\nexport { HScroll };\n","var map = {\n\t\"./af\": \"2bfb\",\n\t\"./af.js\": \"2bfb\",\n\t\"./ar\": \"8e73\",\n\t\"./ar-dz\": \"a356\",\n\t\"./ar-dz.js\": \"a356\",\n\t\"./ar-kw\": \"423e\",\n\t\"./ar-kw.js\": \"423e\",\n\t\"./ar-ly\": \"1cfd\",\n\t\"./ar-ly.js\": \"1cfd\",\n\t\"./ar-ma\": \"0a84\",\n\t\"./ar-ma.js\": \"0a84\",\n\t\"./ar-sa\": \"8230\",\n\t\"./ar-sa.js\": \"8230\",\n\t\"./ar-tn\": \"6d83\",\n\t\"./ar-tn.js\": \"6d83\",\n\t\"./ar.js\": \"8e73\",\n\t\"./az\": \"485c\",\n\t\"./az.js\": \"485c\",\n\t\"./be\": \"1fc1\",\n\t\"./be.js\": \"1fc1\",\n\t\"./bg\": \"84aa\",\n\t\"./bg.js\": \"84aa\",\n\t\"./bm\": \"a7fa\",\n\t\"./bm.js\": \"a7fa\",\n\t\"./bn\": \"9043\",\n\t\"./bn-bd\": \"9686\",\n\t\"./bn-bd.js\": \"9686\",\n\t\"./bn.js\": \"9043\",\n\t\"./bo\": \"d26a\",\n\t\"./bo.js\": \"d26a\",\n\t\"./br\": \"6887\",\n\t\"./br.js\": \"6887\",\n\t\"./bs\": \"2554\",\n\t\"./bs.js\": \"2554\",\n\t\"./ca\": \"d716\",\n\t\"./ca.js\": \"d716\",\n\t\"./cs\": \"3c0d\",\n\t\"./cs.js\": \"3c0d\",\n\t\"./cv\": \"03ec\",\n\t\"./cv.js\": \"03ec\",\n\t\"./cy\": \"9797\",\n\t\"./cy.js\": \"9797\",\n\t\"./da\": \"0f14\",\n\t\"./da.js\": \"0f14\",\n\t\"./de\": \"b469\",\n\t\"./de-at\": \"b3eb\",\n\t\"./de-at.js\": \"b3eb\",\n\t\"./de-ch\": \"bb71\",\n\t\"./de-ch.js\": \"bb71\",\n\t\"./de.js\": \"b469\",\n\t\"./dv\": \"598a\",\n\t\"./dv.js\": \"598a\",\n\t\"./el\": \"8d47\",\n\t\"./el.js\": \"8d47\",\n\t\"./en-au\": \"0e6b\",\n\t\"./en-au.js\": \"0e6b\",\n\t\"./en-ca\": \"3886\",\n\t\"./en-ca.js\": \"3886\",\n\t\"./en-gb\": \"39a6\",\n\t\"./en-gb.js\": \"39a6\",\n\t\"./en-ie\": \"e1d3\",\n\t\"./en-ie.js\": \"e1d3\",\n\t\"./en-il\": \"7333\",\n\t\"./en-il.js\": \"7333\",\n\t\"./en-in\": \"ec2e\",\n\t\"./en-in.js\": \"ec2e\",\n\t\"./en-nz\": \"6f50\",\n\t\"./en-nz.js\": \"6f50\",\n\t\"./en-sg\": \"b7e9\",\n\t\"./en-sg.js\": \"b7e9\",\n\t\"./eo\": \"65db\",\n\t\"./eo.js\": \"65db\",\n\t\"./es\": \"898b\",\n\t\"./es-do\": \"0a3c\",\n\t\"./es-do.js\": \"0a3c\",\n\t\"./es-mx\": \"b5b7\",\n\t\"./es-mx.js\": \"b5b7\",\n\t\"./es-us\": \"55c9\",\n\t\"./es-us.js\": \"55c9\",\n\t\"./es.js\": \"898b\",\n\t\"./et\": \"ec18\",\n\t\"./et.js\": \"ec18\",\n\t\"./eu\": \"0ff2\",\n\t\"./eu.js\": \"0ff2\",\n\t\"./fa\": \"8df4\",\n\t\"./fa.js\": \"8df4\",\n\t\"./fi\": \"81e9\",\n\t\"./fi.js\": \"81e9\",\n\t\"./fil\": \"d69a\",\n\t\"./fil.js\": \"d69a\",\n\t\"./fo\": \"0721\",\n\t\"./fo.js\": \"0721\",\n\t\"./fr\": \"9f26\",\n\t\"./fr-ca\": \"d9f8\",\n\t\"./fr-ca.js\": \"d9f8\",\n\t\"./fr-ch\": \"0e49\",\n\t\"./fr-ch.js\": \"0e49\",\n\t\"./fr.js\": \"9f26\",\n\t\"./fy\": \"7118\",\n\t\"./fy.js\": \"7118\",\n\t\"./ga\": \"5120\",\n\t\"./ga.js\": \"5120\",\n\t\"./gd\": \"f6b4\",\n\t\"./gd.js\": \"f6b4\",\n\t\"./gl\": \"8840\",\n\t\"./gl.js\": \"8840\",\n\t\"./gom-deva\": \"aaf2\",\n\t\"./gom-deva.js\": \"aaf2\",\n\t\"./gom-latn\": \"0caa\",\n\t\"./gom-latn.js\": \"0caa\",\n\t\"./gu\": \"e0c5\",\n\t\"./gu.js\": \"e0c5\",\n\t\"./he\": \"c7aa\",\n\t\"./he.js\": \"c7aa\",\n\t\"./hi\": \"dc4d\",\n\t\"./hi.js\": \"dc4d\",\n\t\"./hr\": \"4ba9\",\n\t\"./hr.js\": \"4ba9\",\n\t\"./hu\": \"5b14\",\n\t\"./hu.js\": \"5b14\",\n\t\"./hy-am\": \"d6b6\",\n\t\"./hy-am.js\": \"d6b6\",\n\t\"./id\": \"5038\",\n\t\"./id.js\": \"5038\",\n\t\"./is\": \"0558\",\n\t\"./is.js\": \"0558\",\n\t\"./it\": \"6e98\",\n\t\"./it-ch\": \"6f12\",\n\t\"./it-ch.js\": \"6f12\",\n\t\"./it.js\": \"6e98\",\n\t\"./ja\": \"079e\",\n\t\"./ja.js\": \"079e\",\n\t\"./jv\": \"b540\",\n\t\"./jv.js\": \"b540\",\n\t\"./ka\": \"201b\",\n\t\"./ka.js\": \"201b\",\n\t\"./kk\": \"6d79\",\n\t\"./kk.js\": \"6d79\",\n\t\"./km\": \"e81d\",\n\t\"./km.js\": \"e81d\",\n\t\"./kn\": \"3e92\",\n\t\"./kn.js\": \"3e92\",\n\t\"./ko\": \"22f8\",\n\t\"./ko.js\": \"22f8\",\n\t\"./ku\": \"2421\",\n\t\"./ku.js\": \"2421\",\n\t\"./ky\": \"9609\",\n\t\"./ky.js\": \"9609\",\n\t\"./lb\": \"440c\",\n\t\"./lb.js\": \"440c\",\n\t\"./lo\": \"b29d\",\n\t\"./lo.js\": \"b29d\",\n\t\"./lt\": \"26f9\",\n\t\"./lt.js\": \"26f9\",\n\t\"./lv\": \"b97c\",\n\t\"./lv.js\": \"b97c\",\n\t\"./me\": \"293c\",\n\t\"./me.js\": \"293c\",\n\t\"./mi\": \"688b\",\n\t\"./mi.js\": \"688b\",\n\t\"./mk\": \"6909\",\n\t\"./mk.js\": \"6909\",\n\t\"./ml\": \"02fb\",\n\t\"./ml.js\": \"02fb\",\n\t\"./mn\": \"958b\",\n\t\"./mn.js\": \"958b\",\n\t\"./mr\": \"39bd\",\n\t\"./mr.js\": \"39bd\",\n\t\"./ms\": \"ebe4\",\n\t\"./ms-my\": \"6403\",\n\t\"./ms-my.js\": \"6403\",\n\t\"./ms.js\": \"ebe4\",\n\t\"./mt\": \"1b45\",\n\t\"./mt.js\": \"1b45\",\n\t\"./my\": \"8689\",\n\t\"./my.js\": \"8689\",\n\t\"./nb\": \"6ce3\",\n\t\"./nb.js\": \"6ce3\",\n\t\"./ne\": \"3a39\",\n\t\"./ne.js\": \"3a39\",\n\t\"./nl\": \"facd\",\n\t\"./nl-be\": \"db29\",\n\t\"./nl-be.js\": \"db29\",\n\t\"./nl.js\": \"facd\",\n\t\"./nn\": \"b84c\",\n\t\"./nn.js\": \"b84c\",\n\t\"./oc-lnc\": \"167b\",\n\t\"./oc-lnc.js\": \"167b\",\n\t\"./pa-in\": \"f3ff\",\n\t\"./pa-in.js\": \"f3ff\",\n\t\"./pl\": \"8d57\",\n\t\"./pl.js\": \"8d57\",\n\t\"./pt\": \"f260\",\n\t\"./pt-br\": \"d2d4\",\n\t\"./pt-br.js\": \"d2d4\",\n\t\"./pt.js\": \"f260\",\n\t\"./ro\": \"972c\",\n\t\"./ro.js\": \"972c\",\n\t\"./ru\": \"957c\",\n\t\"./ru.js\": \"957c\",\n\t\"./sd\": \"6784\",\n\t\"./sd.js\": \"6784\",\n\t\"./se\": \"ffff\",\n\t\"./se.js\": \"ffff\",\n\t\"./si\": \"eda5\",\n\t\"./si.js\": \"eda5\",\n\t\"./sk\": \"7be6\",\n\t\"./sk.js\": \"7be6\",\n\t\"./sl\": \"8155\",\n\t\"./sl.js\": \"8155\",\n\t\"./sq\": \"c8f3\",\n\t\"./sq.js\": \"c8f3\",\n\t\"./sr\": \"cf1e\",\n\t\"./sr-cyrl\": \"13e9\",\n\t\"./sr-cyrl.js\": \"13e9\",\n\t\"./sr.js\": \"cf1e\",\n\t\"./ss\": \"52bd\",\n\t\"./ss.js\": \"52bd\",\n\t\"./sv\": \"5fbd\",\n\t\"./sv.js\": \"5fbd\",\n\t\"./sw\": \"74dc\",\n\t\"./sw.js\": \"74dc\",\n\t\"./ta\": \"3de5\",\n\t\"./ta.js\": \"3de5\",\n\t\"./te\": \"5cbb\",\n\t\"./te.js\": \"5cbb\",\n\t\"./tet\": \"576c\",\n\t\"./tet.js\": \"576c\",\n\t\"./tg\": \"3b1b\",\n\t\"./tg.js\": \"3b1b\",\n\t\"./th\": \"10e8\",\n\t\"./th.js\": \"10e8\",\n\t\"./tk\": \"5aff\",\n\t\"./tk.js\": \"5aff\",\n\t\"./tl-ph\": \"0f38\",\n\t\"./tl-ph.js\": \"0f38\",\n\t\"./tlh\": \"cf75\",\n\t\"./tlh.js\": \"cf75\",\n\t\"./tr\": \"0e81\",\n\t\"./tr.js\": \"0e81\",\n\t\"./tzl\": \"cf51\",\n\t\"./tzl.js\": \"cf51\",\n\t\"./tzm\": \"c109\",\n\t\"./tzm-latn\": \"b53d\",\n\t\"./tzm-latn.js\": \"b53d\",\n\t\"./tzm.js\": \"c109\",\n\t\"./ug-cn\": \"6117\",\n\t\"./ug-cn.js\": \"6117\",\n\t\"./uk\": \"ada2\",\n\t\"./uk.js\": \"ada2\",\n\t\"./ur\": \"5294\",\n\t\"./ur.js\": \"5294\",\n\t\"./uz\": \"2e8c\",\n\t\"./uz-latn\": \"010e\",\n\t\"./uz-latn.js\": \"010e\",\n\t\"./uz.js\": \"2e8c\",\n\t\"./vi\": \"2921\",\n\t\"./vi.js\": \"2921\",\n\t\"./x-pseudo\": \"fd7e\",\n\t\"./x-pseudo.js\": \"fd7e\",\n\t\"./yo\": \"7f33\",\n\t\"./yo.js\": \"7f33\",\n\t\"./zh-cn\": \"5c3a\",\n\t\"./zh-cn.js\": \"5c3a\",\n\t\"./zh-hk\": \"49ab\",\n\t\"./zh-hk.js\": \"49ab\",\n\t\"./zh-mo\": \"3a6c\",\n\t\"./zh-mo.js\": \"3a6c\",\n\t\"./zh-tw\": \"90ea\",\n\t\"./zh-tw.js\": \"90ea\"\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 = \"4678\";","//! moment.js locale configuration\n//! locale : Azerbaijani [az]\n//! author : topchiyev : https://github.com/topchiyev\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: '-inci',\n        5: '-inci',\n        8: '-inci',\n        70: '-inci',\n        80: '-inci',\n        2: '-nci',\n        7: '-nci',\n        20: '-nci',\n        50: '-nci',\n        3: '-üncü',\n        4: '-üncü',\n        100: '-üncü',\n        6: '-ncı',\n        9: '-uncu',\n        10: '-uncu',\n        30: '-uncu',\n        60: '-ıncı',\n        90: '-ıncı',\n    };\n\n    var az = moment.defineLocale('az', {\n        months: 'yanvar_fevral_mart_aprel_may_iyun_iyul_avqust_sentyabr_oktyabr_noyabr_dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'yan_fev_mar_apr_may_iyn_iyl_avq_sen_okt_noy_dek'.split('_'),\n        weekdays:\n            'Bazar_Bazar ertəsi_Çərşənbə axşamı_Çərşənbə_Cümə axşamı_Cümə_Şənbə'.split(\n                '_'\n            ),\n        weekdaysShort: 'Baz_BzE_ÇAx_Çər_CAx_Cüm_Şən'.split('_'),\n        weekdaysMin: 'Bz_BE_ÇA_Çə_CA_Cü_Şə'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün saat] LT',\n            nextDay: '[sabah saat] LT',\n            nextWeek: '[gələn həftə] dddd [saat] LT',\n            lastDay: '[dünən] LT',\n            lastWeek: '[keçən həftə] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s sonra',\n            past: '%s əvvəl',\n            s: 'bir neçə saniyə',\n            ss: '%d saniyə',\n            m: 'bir dəqiqə',\n            mm: '%d dəqiqə',\n            h: 'bir saat',\n            hh: '%d saat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir ay',\n            MM: '%d ay',\n            y: 'bir il',\n            yy: '%d il',\n        },\n        meridiemParse: /gecə|səhər|gündüz|axşam/,\n        isPM: function (input) {\n            return /^(gündüz|axşam)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'gecə';\n            } else if (hour < 12) {\n                return 'səhər';\n            } else if (hour < 17) {\n                return 'gündüz';\n            } else {\n                return 'axşam';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ıncı|inci|nci|üncü|ncı|uncu)/,\n        ordinal: function (number) {\n            if (number === 0) {\n                // special case for zero\n                return number + '-ıncı';\n            }\n            var a = number % 10,\n                b = (number % 100) - a,\n                c = number >= 100 ? 100 : null;\n            return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return az;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Hong Kong) [zh-hk]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n//! author : Konstantin : https://github.com/skfd\n//! author : Anthony : https://github.com/anthonylau\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhHk = moment.defineLocale('zh-hk', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1200) {\n                return '上午';\n            } else if (hm === 1200) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: '[下]ddddLT',\n            lastDay: '[昨天]LT',\n            lastWeek: '[上]ddddLT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhHk;\n\n})));\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContractAlertsReportTemplate.vue?vue&type=style&index=0&id=580f4762&prod&lang=css\"","//! moment.js locale configuration\n//! locale : Croatian [hr]\n//! author : Bojan Marković : https://github.com/bmarkovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                if (number === 1) {\n                    result += 'sekunda';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sekunde';\n                } else {\n                    result += 'sekundi';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'jedna minuta' : 'jedne minute';\n            case 'mm':\n                if (number === 1) {\n                    result += 'minuta';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'minute';\n                } else {\n                    result += 'minuta';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'jedan sat' : 'jednog sata';\n            case 'hh':\n                if (number === 1) {\n                    result += 'sat';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'sata';\n                } else {\n                    result += 'sati';\n                }\n                return result;\n            case 'dd':\n                if (number === 1) {\n                    result += 'dan';\n                } else {\n                    result += 'dana';\n                }\n                return result;\n            case 'MM':\n                if (number === 1) {\n                    result += 'mjesec';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'mjeseca';\n                } else {\n                    result += 'mjeseci';\n                }\n                return result;\n            case 'yy':\n                if (number === 1) {\n                    result += 'godina';\n                } else if (number === 2 || number === 3 || number === 4) {\n                    result += 'godine';\n                } else {\n                    result += 'godina';\n                }\n                return result;\n        }\n    }\n\n    var hr = moment.defineLocale('hr', {\n        months: {\n            format: 'siječnja_veljače_ožujka_travnja_svibnja_lipnja_srpnja_kolovoza_rujna_listopada_studenoga_prosinca'.split(\n                '_'\n            ),\n            standalone:\n                'siječanj_veljača_ožujak_travanj_svibanj_lipanj_srpanj_kolovoz_rujan_listopad_studeni_prosinac'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'sij._velj._ožu._tra._svi._lip._srp._kol._ruj._lis._stu._pro.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedjelja_ponedjeljak_utorak_srijeda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sri._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM YYYY',\n            LLL: 'Do MMMM YYYY H:mm',\n            LLLL: 'dddd, Do MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedjelju] [u] LT';\n                    case 3:\n                        return '[u] [srijedu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[jučer u] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prošlu] [nedjelju] [u] LT';\n                    case 3:\n                        return '[prošlu] [srijedu] [u] LT';\n                    case 6:\n                        return '[prošle] [subote] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prošli] dddd [u] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'prije %s',\n            s: 'par sekundi',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: 'dan',\n            dd: translate,\n            M: 'mjesec',\n            MM: translate,\n            y: 'godinu',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hr;\n\n})));\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest as closestElement, removeClass, classList, remove } from '@syncfusion/ej2-base';\nimport { getElementIndex, inArray, parentsUntil, getPosition, isActionPrevent } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n *\n * The `Reorder` module is used for reordering columns.\n */\nvar Reorder = /** @class */ (function () {\n    /**\n     * Constructor for the Grid reorder module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @hidden\n     */\n    function Reorder(parent) {\n        this.idx = 0;\n        this.parent = parent;\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.on(events.headerDrop, this.headerDrop, this);\n        this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n        this.parent.on(events.reorderComplete, this.onActionComplete, this);\n        this.parent.on(events.columnDrag, this.drag, this);\n        this.parent.on(events.columnDragStart, this.dragStart, this);\n        this.parent.on(events.columnDragStop, this.dragStop, this);\n        this.parent.on(events.headerDrop, this.headerDrop, this);\n        this.parent.on(events.headerRefreshed, this.createReorderElement, this);\n        this.parent.on(events.keyPressed, this.keyPressHandler, this);\n        this.parent.on(events.destroy, this.destroy, this);\n    }\n    Reorder.prototype.chkDropPosition = function (srcElem, destElem) {\n        var col = this.parent.getColumnByUid(destElem.firstElementChild.getAttribute('e-mappinguid'));\n        var bool = col ? !col.lockColumn : true;\n        return ((srcElem.parentElement.isEqualNode(destElem.parentElement) || this.parent.enableColumnVirtualization)\n            || (this.parent.isFrozenGrid()\n                && Array.prototype.indexOf.call(closestElement(srcElem, 'thead').children, srcElem.parentElement)\n                    === Array.prototype.indexOf.call(closestElement(destElem, 'thead').children, destElem.parentElement)))\n            && this.targetParentContainerIndex(srcElem, destElem) > -1 && bool;\n    };\n    Reorder.prototype.chkDropAllCols = function (srcElem, destElem) {\n        var isFound;\n        var headers = this.getHeaderCells();\n        var header;\n        while (!isFound && headers.length > 0) {\n            header = headers.pop();\n            isFound = srcElem !== header && this.targetParentContainerIndex(srcElem, destElem) > -1;\n        }\n        return isFound;\n    };\n    Reorder.prototype.findColParent = function (col, cols, parent) {\n        // eslint-disable-next-line no-self-assign\n        parent = parent;\n        for (var i = 0, len = cols.length; i < len; i++) {\n            if (col === cols[parseInt(i.toString(), 10)]) {\n                return true;\n            }\n            else if (cols[parseInt(i.toString(), 10)].columns) {\n                var cnt = parent.length;\n                parent.push(cols[parseInt(i.toString(), 10)]);\n                if (!this.findColParent(col, cols[parseInt(i.toString(), 10)].columns, parent)) {\n                    parent.splice(cnt, parent.length - cnt);\n                }\n                else {\n                    return true;\n                }\n            }\n        }\n        return false;\n    };\n    Reorder.prototype.getColumnsModel = function (cols, isNotStackedHeader) {\n        var columnModel = [];\n        var subCols = [];\n        for (var i = 0, len = cols.length; i < len; i++) {\n            if (!isNullOrUndefined(cols[parseInt(i.toString(), 10)])) {\n                if (cols[parseInt(i.toString(), 10)].visible) {\n                    columnModel.push(cols[parseInt(i.toString(), 10)]);\n                }\n                else if (isNotStackedHeader) {\n                    columnModel.push(cols[parseInt(i.toString(), 10)]);\n                }\n                if (cols[parseInt(i.toString(), 10)].columns) {\n                    subCols = subCols.concat(cols[parseInt(i.toString(), 10)].columns);\n                }\n            }\n        }\n        if (subCols.length) {\n            columnModel = columnModel.concat(this.getColumnsModel(subCols));\n        }\n        return columnModel;\n    };\n    Reorder.prototype.headerDrop = function (e) {\n        var gObj = this.parent;\n        var dropElement = this.element.querySelector('.e-headercelldiv') || this.element.querySelector('.e-stackedheadercelldiv');\n        var uId = dropElement.getAttribute('e-mappinguid');\n        var column = gObj.getColumnByUid(uId);\n        if (!closestElement(e.target, 'th') || (!isNullOrUndefined(column) && (!column.allowReordering || column.lockColumn))) {\n            this.parent.log('action_disabled_column', { moduleName: this.getModuleName(), column: column });\n            return;\n        }\n        var destElem = closestElement(e.target, '.e-headercell');\n        var destElemDiv = destElem.querySelector('.e-headercelldiv') || destElem.querySelector('.e-stackedheadercelldiv');\n        var destElemUid = destElemDiv.getAttribute('e-mappinguid');\n        if (!isNullOrUndefined(destElemUid)) {\n            var destColumn = gObj.getColumnByUid(destElemUid);\n            if (isNullOrUndefined(destColumn) || !destColumn.allowReordering || destColumn.lockColumn) {\n                this.parent.log('action_disabled_column', { moduleName: this.getModuleName(), column: column, destColumn: destColumn });\n                return;\n            }\n        }\n        if (destElem && !(!this.chkDropPosition(this.element, destElem) || !this.chkDropAllCols(this.element, destElem))) {\n            if (this.parent.enableColumnVirtualization) {\n                var columns = this.parent.columns;\n                var sourceUid_1 = this.element.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n                var col = this.parent.columns.filter(function (col) { return col.uid === sourceUid_1; });\n                var colMatchIndex_1 = null;\n                var column_1 = col[0];\n                var destUid_1 = destElem.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n                columns.some(function (col, index) {\n                    if (col.uid === destUid_1) {\n                        colMatchIndex_1 = index;\n                        return col.uid === destUid_1;\n                    }\n                    return false;\n                });\n                if (!isNullOrUndefined(colMatchIndex_1)) {\n                    this.moveColumns(colMatchIndex_1, column_1);\n                }\n            }\n            else {\n                var newIndex = this.targetParentContainerIndex(this.element, destElem);\n                var uid = this.element.firstElementChild.getAttribute('e-mappinguid');\n                this.destElement = destElem;\n                this.parent.notify(events.setReorderDestinationElement, { ele: destElem });\n                if (uid) {\n                    this.moveColumns(newIndex, this.parent.getColumnByUid(uid));\n                }\n                else {\n                    var headers = this.getHeaderCells();\n                    var oldIdx = getElementIndex(this.element, headers);\n                    var columns = this.getColumnsModel(this.parent.columns);\n                    this.moveColumns(newIndex, columns[parseInt(oldIdx.toString(), 10)]);\n                }\n            }\n        }\n    };\n    Reorder.prototype.isActionPrevent = function (gObj) {\n        return isActionPrevent(gObj);\n    };\n    Reorder.prototype.moveColumns = function (destIndex, column, reorderByColumn, preventRefresh) {\n        var gObj = this.parent;\n        if (this.isActionPrevent(gObj)) {\n            gObj.notify(events.preventBatch, { instance: this, handler: this.moveColumns, arg1: destIndex, arg2: column });\n            return;\n        }\n        var parent = this.getColParent(column, this.parent.columns);\n        var cols = parent ? parent.columns : this.parent.columns;\n        var srcIdx = inArray(column, cols);\n        if ((parent || this.parent.lockcolPositionCount) && !reorderByColumn &&\n            !this.parent.enableColumnVirtualization) {\n            for (var i = 0; i < cols.length; i++) {\n                if (cols[parseInt(i.toString(), 10)].field === column.field) {\n                    srcIdx = i;\n                    break;\n                }\n            }\n            var col = this.parent.getColumnByUid(this.destElement.firstElementChild.getAttribute('e-mappinguid'));\n            if (col) {\n                for (var i = 0; i < cols.length; i++) {\n                    if (cols[parseInt(i.toString(), 10)].field === col.field) {\n                        destIndex = i;\n                        break;\n                    }\n                }\n            }\n            else {\n                for (var i = 0; i < cols.length; i++) {\n                    if (cols[parseInt(i.toString(), 10)].headerText === this.destElement.innerText.trim()) {\n                        destIndex = i;\n                    }\n                }\n            }\n        }\n        if (!gObj.allowReordering || srcIdx === destIndex || srcIdx === -1 || destIndex === -1) {\n            return;\n        }\n        cols.splice(destIndex, 0, cols.splice(srcIdx, 1)[0]);\n        var args = { column: column, destIndex: destIndex, columns: cols, parent: parent, cancel: false };\n        gObj.notify(events.refreshFrozenColumns, args);\n        if (args.cancel) {\n            return;\n        }\n        if (this.parent.isFrozenGrid()) {\n            if (this.parent.frozenColumns) {\n                for (var i = 0; i < cols.length; i++) {\n                    if (cols[parseInt(i.toString(), 10)].freeze === 'Left') {\n                        cols[parseInt(i.toString(), 10)].freeze = undefined;\n                    }\n                }\n            }\n            else {\n                if (this.parent.getFrozenLeftCount() > destIndex) {\n                    column.freeze = 'Left';\n                }\n                else if ((cols.length - this.parent.getFrozenRightColumnsCount()) <= destIndex) {\n                    column.freeze = 'Right';\n                }\n                else {\n                    column.freeze = column.freeze === 'Fixed' ? 'Fixed' : undefined;\n                }\n            }\n        }\n        gObj.getColumns(true);\n        gObj.notify(events.columnPositionChanged, { fromIndex: destIndex, toIndex: srcIdx });\n        if (preventRefresh !== false) {\n            gObj.notify(events.modelChanged, {\n                type: events.actionBegin, requestType: 'reorder', fromIndex: destIndex, toIndex: srcIdx, toColumnUid: column.uid\n            });\n        }\n        if (this.parent.isFrozenGrid()) {\n            var cols_1 = this.parent.columns;\n            this.idx = 0;\n            this.refreshColumnIndex(cols_1);\n            this.parent.notify(events.refreshFrozenPosition, {});\n        }\n    };\n    Reorder.prototype.refreshColumnIndex = function (cols) {\n        for (var i = 0; i < cols.length; i++) {\n            cols[parseInt(i.toString(), 10)].index = this.idx;\n            this.idx++;\n            if (cols[parseInt(i.toString(), 10)].columns && cols[parseInt(i.toString(), 10)].columns.length) {\n                this.refreshColumnIndex(cols[parseInt(i.toString(), 10)].columns);\n            }\n        }\n    };\n    Reorder.prototype.targetParentContainerIndex = function (srcElem, destElem) {\n        var cols = this.parent.columns;\n        var headers = this.getHeaderCells();\n        var stackedHdrColumn = this.parent.getStackedColumns(cols);\n        var stackedCols = [];\n        if (stackedHdrColumn.length) {\n            stackedCols = this.getAllStackedheaderParentColumns(headers);\n        }\n        var flatColumns = stackedHdrColumn.length && stackedCols.length ?\n            this.getColumnsModel(stackedCols) : this.getColumnsModel(cols, true);\n        var parent = this.getColParent(flatColumns[getElementIndex(srcElem, headers)], cols);\n        cols = parent ? parent.columns : cols;\n        return inArray(flatColumns[getElementIndex(destElem, headers)], cols);\n    };\n    Reorder.prototype.getAllStackedheaderParentColumns = function (headers) {\n        var stackedCols = [];\n        for (var i = 0; i < headers.length; i++) {\n            if (headers[parseInt(i.toString(), 10)].classList.contains('e-hide')) {\n                headers.splice(i, 1);\n                i--;\n            }\n            else if (headers[parseInt(i.toString(), 10)].closest('thead').firstChild === headers[parseInt(i.toString(), 10)].parentElement) {\n                stackedCols.push(this.parent.getColumnByUid(headers[parseInt(i.toString(), 10)].firstElementChild.getAttribute('e-mappinguid')));\n            }\n        }\n        return stackedCols;\n    };\n    Reorder.prototype.getHeaderCells = function () {\n        return [].slice.call(this.parent.element.getElementsByClassName('e-headercell'));\n    };\n    Reorder.prototype.getColParent = function (column, columns) {\n        var parents = [];\n        this.findColParent(column, columns, parents);\n        return parents[parents.length - 1];\n    };\n    Reorder.prototype.reorderSingleColumn = function (fromFName, toFName) {\n        var fColumn = this.parent.enableColumnVirtualization ?\n            this.parent.columns.filter(function (col) { return col.field === fromFName; })[0]\n            : this.parent.getColumnByField(fromFName);\n        var toColumn = this.parent.enableColumnVirtualization ?\n            this.parent.columns.filter(function (col) { return col.field === toFName; })[0]\n            : this.parent.getColumnByField(toFName);\n        if ((!isNullOrUndefined(fColumn) && (!fColumn.allowReordering || fColumn.lockColumn)) ||\n            (!isNullOrUndefined(toColumn) && (!toColumn.allowReordering || toColumn.lockColumn))) {\n            this.parent.log('action_disabled_column', { moduleName: this.getModuleName(), column: fColumn, destColumn: toColumn });\n            return;\n        }\n        var column = toColumn;\n        var parent = this.getColParent(column, this.parent.columns);\n        var columns = parent ? parent.columns : this.parent.columns;\n        var destIndex = inArray(column, columns);\n        if (destIndex > -1) {\n            this.moveColumns(destIndex, fColumn, true);\n        }\n    };\n    Reorder.prototype.reorderMultipleColumns = function (fromFNames, toFName) {\n        var toIndex = this.parent.getColumnIndexByField(toFName);\n        var toColumn = this.parent.getColumnByField(toFName);\n        if (toIndex < 0 || (!isNullOrUndefined(toColumn) && (!toColumn.allowReordering || toColumn.lockColumn))) {\n            return;\n        }\n        for (var i = 0; i < fromFNames.length; i++) {\n            var column = this.parent.getColumnByField(fromFNames[parseInt(i.toString(), 10)]);\n            if (!isNullOrUndefined(column) && (!column.allowReordering || column.lockColumn)) {\n                return;\n            }\n        }\n        for (var i = 0; i < fromFNames.length; i++) {\n            var column = this.parent.getColumnByIndex(toIndex);\n            var parent_1 = this.getColParent(column, this.parent.columns);\n            var columns = parent_1 ? parent_1.columns : this.parent.columns;\n            var destIndex = inArray(column, columns);\n            if (destIndex > -1) {\n                this.moveColumns(destIndex, this.parent.getColumnByField(fromFNames[parseInt(i.toString(), 10)]), true, true);\n            }\n            if (this.parent.getColumnIndexByField(fromFNames[i + 1]) >= destIndex) {\n                toIndex++; //R to L\n            }\n        }\n    };\n    Reorder.prototype.moveTargetColumn = function (column, toIndex) {\n        if (toIndex > -1) {\n            this.moveColumns(toIndex, column, true);\n        }\n    };\n    Reorder.prototype.reorderSingleColumnByTarget = function (fieldName, toIndex) {\n        this.moveTargetColumn(this.parent.getColumnByField(fieldName), toIndex);\n    };\n    Reorder.prototype.reorderMultipleColumnByTarget = function (fieldName, toIndex) {\n        for (var i = 0; i < fieldName.length; i++) {\n            this.reorderSingleColumnByTarget(fieldName[parseInt(i.toString(), 10)], toIndex);\n        }\n    };\n    /**\n     * Changes the position of the Grid columns by field names.\n     *\n     * @param  {string | string[]} fromFName - Defines the origin field names.\n     * @param  {string} toFName - Defines the destination field name.\n     * @returns {void}\n     */\n    Reorder.prototype.reorderColumns = function (fromFName, toFName) {\n        if (typeof fromFName === 'string') {\n            this.reorderSingleColumn(fromFName, toFName);\n            this.fromCol = fromFName;\n        }\n        else {\n            this.reorderMultipleColumns(fromFName, toFName);\n            this.fromCol = fromFName[0];\n        }\n    };\n    /**\n     * Changes the position of the Grid columns by field index.\n     *\n     * @param  {number} fromIndex - Defines the origin field index.\n     * @param  {number} toIndex - Defines the destination field index.\n     * @returns {void}\n     */\n    Reorder.prototype.reorderColumnByIndex = function (fromIndex, toIndex) {\n        this.moveTargetColumn(this.parent.getColumnByIndex(fromIndex), toIndex);\n    };\n    /**\n     * Changes the position of the Grid columns by field index.\n     *\n     * @param  {string | string[]} fieldName - Defines the field name.\n     * @param  {number} toIndex - Defines the destination field index.\n     * @returns {void}\n     */\n    Reorder.prototype.reorderColumnByTargetIndex = function (fieldName, toIndex) {\n        if (typeof fieldName === 'string') {\n            this.reorderSingleColumnByTarget(fieldName, toIndex);\n        }\n        else {\n            this.reorderMultipleColumnByTarget(fieldName, toIndex);\n        }\n    };\n    Reorder.prototype.enableAfterRender = function (e) {\n        if (e.module === this.getModuleName() && e.enable) {\n            this.createReorderElement();\n        }\n    };\n    Reorder.prototype.createReorderElement = function (e) {\n        if (e && e.args && e.args.isXaxis) {\n            this.setDisplay('none');\n        }\n        var header = this.parent.element.querySelector('.' + literals.headerContent);\n        this.upArrow = header.appendChild(this.parent\n            .createElement('div', { className: 'e-icons e-icon-reorderuparrow e-reorderuparrow', attrs: { style: 'display:none' } }));\n        this.downArrow = header.appendChild(this.parent\n            .createElement('div', { className: 'e-icons e-icon-reorderdownarrow e-reorderdownarrow', attrs: { style: 'display:none' } }));\n    };\n    /**\n     * The function used to trigger onActionComplete\n     *\n     * @param {NotifyArgs} e - specified the NotifyArgs\n     * @returns {void}\n     * @hidden\n     */\n    Reorder.prototype.onActionComplete = function (e) {\n        this.parent.trigger(events.actionComplete, extend(e, { type: events.actionComplete }));\n        var target = this.fromCol && this.parent.getColumnHeaderByField(this.fromCol);\n        if (target) {\n            this.parent.focusModule.onClick({ target: target }, true);\n        }\n    };\n    /**\n     * To destroy the reorder\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Reorder.prototype.destroy = function () {\n        var gridElement = this.parent.element;\n        if (this.parent.isDestroyed || !gridElement || (!gridElement.querySelector('.' + literals.gridHeader) &&\n            !gridElement.querySelector('.' + literals.gridContent))) {\n            return;\n        }\n        if (this.upArrow.parentNode) {\n            remove(this.upArrow);\n        }\n        if (this.downArrow.parentNode) {\n            remove(this.downArrow);\n        }\n        this.parent.off(events.headerDrop, this.headerDrop);\n        this.parent.off(events.uiUpdate, this.enableAfterRender);\n        this.parent.off(events.reorderComplete, this.onActionComplete);\n        this.parent.off(events.columnDrag, this.drag);\n        this.parent.off(events.columnDragStart, this.dragStart);\n        this.parent.off(events.columnDragStop, this.dragStop);\n        this.parent.off(events.headerRefreshed, this.createReorderElement);\n        this.parent.off(events.keyPressed, this.keyPressHandler);\n        this.parent.off(events.destroy, this.destroy);\n        //call ejdrag and drop destroy\n    };\n    Reorder.prototype.keyPressHandler = function (e) {\n        var gObj = this.parent;\n        var isMacLike = /(Mac)/i.test(navigator.platform);\n        if (isMacLike && e.metaKey) {\n            if (e.action === 'leftArrow') {\n                e.action = 'ctrlLeftArrow';\n            }\n            else if (e.action === 'rightArrow') {\n                e.action = 'ctrlRightArrow';\n            }\n        }\n        switch (e.action) {\n            case 'ctrlLeftArrow':\n            case 'ctrlRightArrow':\n                // eslint-disable-next-line no-case-declarations\n                var element = gObj.focusModule.currentInfo.element;\n                if (element && element.classList.contains('e-headercell')) {\n                    var column = gObj.getColumnByUid(element.firstElementChild.getAttribute('e-mappinguid'));\n                    var visibleCols = gObj.getVisibleColumns();\n                    var index = visibleCols.indexOf(column);\n                    var toCol = e.action === 'ctrlLeftArrow' ? visibleCols[index - 1] : visibleCols[index + 1];\n                    if (toCol && toCol.field && column.field) {\n                        this.reorderColumns(column.field, toCol.field);\n                    }\n                }\n                break;\n        }\n    };\n    Reorder.prototype.drag = function (e) {\n        var gObj = this.parent;\n        var target = e.target;\n        var closest = closestElement(target, '.e-headercell:not(.e-stackedHeaderCell)');\n        var cloneElement = gObj.element.querySelector('.e-cloneproperties');\n        var content = gObj.getContent().firstElementChild;\n        var isLeft = this.x > getPosition(e.event).x + content.scrollLeft;\n        removeClass([].slice.call(gObj.getHeaderTable().getElementsByClassName('e-reorderindicate')), ['e-reorderindicate']);\n        this.setDisplay('none');\n        this.stopTimer();\n        classList(cloneElement, ['e-defaultcur'], ['e-notallowedcur']);\n        this.updateScrollPostion(e.event);\n        if (closest && !closest.isEqualNode(this.element)) {\n            target = closest;\n            //consider stacked, detail header cell\n            var uid = target.querySelector('.e-headercelldiv, .e-stackedheadercelldiv').getAttribute('e-mappinguid');\n            if (!(!this.chkDropPosition(this.element, target) || !this.chkDropAllCols(this.element, target)) &&\n                gObj.getColumnByUid(uid).allowReordering && e.column.allowReordering) {\n                this.updateArrowPosition(target, isLeft);\n                classList(target, ['e-allowDrop', 'e-reorderindicate'], []);\n            }\n            else if (!(gObj.allowGrouping && parentsUntil(e.target, 'e-groupdroparea'))) {\n                classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n            }\n        }\n        else {\n            if (closest && closest.isEqualNode(this.element) &&\n                !((gObj.allowGrouping && e.column.allowGrouping) || e.column.allowReordering)) {\n                classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n            }\n            else if (!closest && !(gObj.allowGrouping && parentsUntil(e.target, 'e-groupdroparea'))) {\n                classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n            }\n        }\n        if (!e.column.allowReordering || e.column.lockColumn) {\n            return;\n        }\n        gObj.trigger(events.columnDrag, { target: target, draggableType: 'headercell', column: e.column });\n    };\n    Reorder.prototype.updateScrollPostion = function (e) {\n        var _this = this;\n        var x = getPosition(e).x;\n        var cliRect = this.parent.element.getBoundingClientRect();\n        var cliRectBaseRight = cliRect.right;\n        var cliRectBaseLeft = cliRect.left;\n        var scrollElem = this.parent.getContent().firstElementChild;\n        if (x > cliRectBaseLeft && x < cliRectBaseLeft + 35) {\n            this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, true); }, 50);\n        }\n        else if (x < cliRectBaseRight && x > cliRectBaseRight - 35) {\n            this.timer = window.setInterval(function () { _this.setScrollLeft(scrollElem, false); }, 50);\n        }\n    };\n    Reorder.prototype.setScrollLeft = function (scrollElem, isLeft) {\n        var scrollLeft = scrollElem.scrollLeft;\n        scrollElem.scrollLeft = scrollElem.scrollLeft + (isLeft ? -5 : 5);\n        if (scrollLeft !== scrollElem.scrollLeft) {\n            this.setDisplay('none');\n        }\n    };\n    Reorder.prototype.stopTimer = function () {\n        window.clearInterval(this.timer);\n    };\n    Reorder.prototype.updateArrowPosition = function (target, isLeft) {\n        var cliRect = target.getBoundingClientRect();\n        var cliRectBase = this.parent.element.getBoundingClientRect();\n        if ((isLeft && cliRect.left < cliRectBase.left) || (!isLeft && cliRect.right > cliRectBase.right)) {\n            return;\n        }\n        var isSticky = this.parent.getHeaderContent().classList.contains('e-sticky');\n        this.upArrow.style.top = isSticky ? cliRect.top + cliRect.height + 'px' : cliRect.top + cliRect.height - cliRectBase.top + 'px';\n        this.downArrow.style.top = isSticky ? cliRect.top - 7 + 'px' : cliRect.top - cliRectBase.top - 7 + 'px';\n        this.upArrow.style.left = this.downArrow.style.left = isSticky ? (isLeft ? cliRect.left : cliRect.right) - 4 + 'px' :\n            (isLeft ? cliRect.left : cliRect.right) - cliRectBase.left - 4 + 'px';\n        this.setDisplay('');\n    };\n    Reorder.prototype.dragStart = function (e) {\n        var gObj = this.parent;\n        var target = e.target;\n        this.element = target.classList.contains('e-headercell') ? target :\n            parentsUntil(target, 'e-headercell');\n        if (!e.column.allowReordering || e.column.lockColumn) {\n            return;\n        }\n        var content = gObj.getContent().firstElementChild;\n        this.x = getPosition(e.event).x + content.scrollLeft;\n        gObj.trigger(events.columnDragStart, {\n            target: target, draggableType: 'headercell', column: e.column\n        });\n    };\n    Reorder.prototype.dragStop = function (e) {\n        var gObj = this.parent;\n        this.setDisplay('none');\n        this.stopTimer();\n        if (!e.cancel) {\n            gObj.trigger(events.columnDrop, { target: e.target, draggableType: 'headercell', column: e.column });\n        }\n        removeClass([].slice.call(gObj.getHeaderTable().getElementsByClassName('e-reorderindicate')), ['e-reorderindicate']);\n    };\n    Reorder.prototype.setDisplay = function (display) {\n        this.upArrow.style.display = display;\n        this.downArrow.style.display = display;\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} return the module name\n     * @private\n     */\n    Reorder.prototype.getModuleName = function () {\n        return 'reorder';\n    };\n    return Reorder;\n}());\nexport { Reorder };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { addClass, removeClass, attributes, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { CellRenderer } from './cell-renderer';\nimport { addStickyColumnPosition, appendChildren } from '../base/util';\nimport { destroy, commandColumnDestroy } from '../base/constant';\n/**\n * `CommandColumn` used to render command column in grid\n *\n * @hidden\n */\nvar CommandColumnRenderer = /** @class */ (function (_super) {\n    __extends(CommandColumnRenderer, _super);\n    function CommandColumnRenderer(parent, locator) {\n        var _this = _super.call(this, parent, locator) || this;\n        _this.buttonElement = _this.parent.createElement('button', {});\n        _this.unbounDiv = _this.parent.createElement('div', { className: 'e-unboundcelldiv', styles: 'display: inline-block' });\n        _this.childRefs = [];\n        _this.element = _this.parent.createElement('TD', {\n            className: 'e-rowcell e-unboundcell', attrs: {\n                tabindex: '-1', role: 'gridcell'\n            }\n        });\n        _this.parent.on(destroy, _this.destroyButtons, _this);\n        _this.parent.on(commandColumnDestroy, _this.destroyButtons, _this);\n        return _this;\n    }\n    CommandColumnRenderer.prototype.destroyButtons = function (args) {\n        for (var i = 0; i < this.childRefs.length; i++) {\n            if (this.childRefs[parseInt(i.toString(), 10)] && !this.childRefs[parseInt(i.toString(), 10)].isDestroyed) {\n                this.childRefs[parseInt(i.toString(), 10)].destroy();\n                if (this.childRefs[parseInt(i.toString(), 10)].element) {\n                    this.childRefs[parseInt(i.toString(), 10)].element.innerHTML = '';\n                }\n            }\n        }\n        this.childRefs = [];\n        if (args.type === 'refreshCommandColumn') {\n            var elem = this.parent.element.querySelectorAll('.e-unboundcell');\n            if (elem.length) {\n                for (var i = 0; i < elem.length; i++) {\n                    if (elem[parseInt(i.toString(), 10)]) {\n                        if (elem[parseInt(i.toString(), 10)].querySelector('.e-unboundcelldiv')) {\n                            elem[parseInt(i.toString(), 10)].querySelector('.e-unboundcelldiv').innerHTML = '';\n                        }\n                        elem[parseInt(i.toString(), 10)].innerHTML = '';\n                    }\n                }\n                elem = null;\n            }\n        }\n        else {\n            this.parent.off(destroy, this.destroyButtons);\n            this.parent.off(commandColumnDestroy, this.destroyButtons);\n        }\n    };\n    /**\n     * Function to render the cell content based on Column object.\n     *\n     * @param {cell<Column>} cell - specifies the cell\n     * @param {Object} data - specifies the data\n     * @param {Object} attributes - specifies the attributes\n     * @param {boolean} isVirtualEdit - specifies virtual scroll editing\n     * @returns {Element} returns the element\n     */\n    CommandColumnRenderer.prototype.render = function (cell, data, attributes, isVirtualEdit) {\n        var node = this.element.cloneNode();\n        var uid = 'uid';\n        node.appendChild(this.unbounDiv.cloneNode());\n        node.setAttribute('aria-label', this.localizer.getConstant('CommandColumnAria') + cell.column.headerText);\n        if (cell.column.commandsTemplate) {\n            if (this.parent.isReact && typeof (cell.column.commandsTemplate) !== 'string') {\n                var tempID = this.parent + 'commandsTemplate';\n                cell.column.getColumnTemplate()(data, this.parent, 'commandsTemplate', tempID, null, null, node.firstElementChild);\n                this.parent.renderTemplates();\n            }\n            else {\n                appendChildren(node.firstElementChild, cell.column.getColumnTemplate()(data));\n            }\n        }\n        else {\n            for (var _i = 0, _a = cell.commands; _i < _a.length; _i++) {\n                var command = _a[_i];\n                node = this.renderButton(node, command, attributes.index, command[\"\" + uid]);\n            }\n        }\n        this.setAttributes(node, cell, attributes);\n        if ((!this.parent.enableVirtualization && this.parent.isEdit) || isVirtualEdit) {\n            addClass([].slice.call(node.getElementsByClassName('e-edit-delete')), 'e-hide');\n            removeClass([].slice.call(node.getElementsByClassName('e-save-cancel')), 'e-hide');\n        }\n        else {\n            addClass([].slice.call(node.getElementsByClassName('e-save-cancel')), 'e-hide');\n            removeClass([].slice.call(node.getElementsByClassName('e-edit-delete')), 'e-hide');\n        }\n        if (this.parent.isFrozenGrid()) {\n            addStickyColumnPosition(this.parent, cell.column, node);\n        }\n        return node;\n    };\n    CommandColumnRenderer.prototype.renderButton = function (node, buttonOption, index, uid) {\n        var button = this.buttonElement.cloneNode();\n        attributes(button, {\n            'id': this.parent.element.id + (buttonOption.type || '') + '_' + index + '_' + uid, 'type': 'button',\n            title: !isNullOrUndefined(buttonOption.title) ? buttonOption.title :\n                buttonOption.buttonOption.content || this.localizer.getConstant(buttonOption.type) || buttonOption.type,\n            'data-uid': uid\n        });\n        button.onclick = buttonOption.buttonOption.click;\n        buttonOption.buttonOption.cssClass = this.parent.cssClass ?\n            buttonOption.buttonOption.cssClass + ' ' + this.parent.cssClass : buttonOption.buttonOption.cssClass;\n        var buttonObj = new Button(buttonOption.buttonOption, button);\n        this.childRefs.push(buttonObj);\n        buttonObj.commandType = buttonOption.type;\n        node.firstElementChild.appendChild(buttonObj.element);\n        switch (buttonOption.type) {\n            case 'Edit':\n            case 'Delete':\n                addClass([button], ['e-edit-delete', 'e-' + buttonOption.type.toLowerCase() + 'button']);\n                break;\n            case 'Cancel':\n            case 'Save':\n                addClass([button], ['e-save-cancel', 'e-' + buttonOption.type.toLowerCase() + 'button']);\n                break;\n        }\n        return node;\n    };\n    return CommandColumnRenderer;\n}(CellRenderer));\nexport { CommandColumnRenderer };\n","import { closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { click, keyPressed, commandClick, initialEnd, destroy } from '../base/constant';\nimport { CellType } from '../base/enum';\nimport { CommandColumnRenderer } from '../renderer/command-column-renderer';\nimport { getUid } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * `CommandColumn` used to handle the command column actions.\n *\n * @hidden\n */\nvar CommandColumn = /** @class */ (function () {\n    function CommandColumn(parent, locator) {\n        this.parent = parent;\n        this.locator = locator;\n        this.initiateRender();\n        this.addEventListener();\n    }\n    CommandColumn.prototype.initiateRender = function () {\n        var cellFac = this.locator.getService('cellRendererFactory');\n        cellFac.addCellRenderer(CellType.CommandColumn, new CommandColumnRenderer(this.parent, this.locator));\n    };\n    CommandColumn.prototype.commandClickHandler = function (e) {\n        var gObj = this.parent;\n        var target = closest(e.target, 'button');\n        if (!target || !closest(e.target, '.e-unboundcell')) {\n            return;\n        }\n        var buttonObj = target.ej2_instances[0];\n        var type = buttonObj.commandType;\n        var uid = target.getAttribute('data-uid');\n        var commandColumn;\n        var row = gObj.getRowObjectFromUID(closest(target, '.' + literals.row).getAttribute('data-uid'));\n        var cols = this.parent.columnModel;\n        for (var i = 0; i < cols.length; i++) {\n            if (cols[parseInt(i.toString(), 10)].commands) {\n                var commandCols = cols[parseInt(i.toString(), 10)].commands;\n                for (var j = 0; j < commandCols.length; j++) {\n                    var idInString = 'uid';\n                    var typeInString = 'type';\n                    if (commandCols[parseInt(j.toString(), 10)][\"\" + idInString] === uid && commandCols[parseInt(j.toString(), 10)][\"\" + typeInString] === type) {\n                        commandColumn = commandCols[parseInt(j.toString(), 10)];\n                    }\n                    else {\n                        var buttons = [].slice.call(closest(target, '.e-unboundcell').querySelectorAll('button'));\n                        var index = buttons.findIndex(function (ele) { return ele === target; });\n                        if (index < commandCols.length && commandCols[parseInt(index.toString(), 10)][\"\" + typeInString] === type &&\n                            String(commandCols[parseInt(j.toString(), 10)][\"\" + idInString]) === uid) {\n                            commandColumn = commandCols[parseInt(index.toString(), 10)];\n                        }\n                    }\n                }\n            }\n        }\n        var args = {\n            cancel: false,\n            target: target,\n            commandColumn: commandColumn,\n            rowData: isNullOrUndefined(row) ? undefined : row.data\n        };\n        this.parent.trigger(commandClick, args, function (commandclickargs) {\n            if (buttonObj.disabled || !gObj.editModule || commandclickargs.cancel) {\n                return;\n            }\n            switch (type) {\n                case 'Edit':\n                    gObj.editModule.endEdit();\n                    gObj.editModule.startEdit(closest(target, 'tr'));\n                    break;\n                case 'Cancel':\n                    gObj.editModule.closeEdit();\n                    break;\n                case 'Save':\n                    gObj.editModule.endEdit();\n                    break;\n                case 'Delete':\n                    if (gObj.editSettings.mode !== 'Batch') {\n                        gObj.editModule.endEdit();\n                    }\n                    gObj.commandDelIndex = parseInt(closest(target, 'tr').getAttribute(literals.dataRowIndex), 10);\n                    gObj.clearSelection();\n                    //for toogle issue when dbl click\n                    gObj.selectRow(gObj.commandDelIndex, false);\n                    gObj.editModule.deleteRecord();\n                    gObj.commandDelIndex = undefined;\n                    break;\n            }\n        });\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     */\n    CommandColumn.prototype.getModuleName = function () {\n        return 'commandColumn';\n    };\n    /**\n     * To destroy CommandColumn.\n     *\n     * @function destroy\n     * @returns {void}\n     */\n    CommandColumn.prototype.destroy = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.removeEventListener();\n    };\n    CommandColumn.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.off(click, this.commandClickHandler);\n        this.parent.off(keyPressed, this.keyPressHandler);\n        this.parent.off(initialEnd, this.load);\n        this.parent.off(destroy, this.destroy);\n    };\n    CommandColumn.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.on(click, this.commandClickHandler, this);\n        this.parent.on(keyPressed, this.keyPressHandler, this);\n        this.parent.on(initialEnd, this.load, this);\n        this.parent.on(destroy, this.destroy, this);\n    };\n    CommandColumn.prototype.keyPressHandler = function (e) {\n        if (e.action === 'enter' && closest(e.target, '.e-unboundcelldiv')) {\n            this.commandClickHandler(e);\n            e.preventDefault();\n        }\n    };\n    CommandColumn.prototype.load = function () {\n        var uid = 'uid';\n        var col = this.parent.columnModel;\n        for (var i = 0; i < col.length; i++) {\n            if (col[parseInt(i.toString(), 10)].commands) {\n                var commandCol = col[parseInt(i.toString(), 10)].commands;\n                for (var j = 0; j < commandCol.length; j++) {\n                    commandCol[parseInt(j.toString(), 10)][\"\" + uid] = getUid('gridcommand');\n                }\n            }\n        }\n    };\n    return CommandColumn;\n}());\nexport { CommandColumn };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable max-len */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-param */\nimport { Property, Complex, ChildProperty } from '@syncfusion/ej2-base';\nimport { measureText, Rect, TextOption, Size, PathOption } from '@syncfusion/ej2-svg-base';\nimport { Font, Border, Margin, ContainerPadding, Location } from '../model/base';\nimport { subtractThickness, Thickness, drawSymbol, ChartLocation, titlePositionX, getTitle, textTrim, getTextAnchor } from '../utils/helper';\nimport { RectOption, textElement, stringToNumber } from '../utils/helper';\nimport { removeElement, showTooltip, getElement, appendChildElement } from '../utils/helper';\n/**\n * Configures the legends in charts.\n */\nvar LegendSettings = /** @class */ (function (_super) {\n    __extends(LegendSettings, _super);\n    function LegendSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(true)\n    ], LegendSettings.prototype, \"visible\", void 0);\n    __decorate([\n        Property(null)\n    ], LegendSettings.prototype, \"height\", void 0);\n    __decorate([\n        Property(null)\n    ], LegendSettings.prototype, \"width\", void 0);\n    __decorate([\n        Complex({ x: 0, y: 0 }, Location)\n    ], LegendSettings.prototype, \"location\", void 0);\n    __decorate([\n        Property('Auto')\n    ], LegendSettings.prototype, \"position\", void 0);\n    __decorate([\n        Property('Series')\n    ], LegendSettings.prototype, \"mode\", void 0);\n    __decorate([\n        Property(8)\n    ], LegendSettings.prototype, \"padding\", void 0);\n    __decorate([\n        Property(null)\n    ], LegendSettings.prototype, \"itemPadding\", void 0);\n    __decorate([\n        Property('Center')\n    ], LegendSettings.prototype, \"alignment\", void 0);\n    __decorate([\n        Complex({ fontFamily: null, size: \"14px\", fontStyle: 'Normal', fontWeight: '400', color: null }, Font)\n    ], LegendSettings.prototype, \"textStyle\", void 0);\n    __decorate([\n        Property(10)\n    ], LegendSettings.prototype, \"shapeHeight\", void 0);\n    __decorate([\n        Property(10)\n    ], LegendSettings.prototype, \"shapeWidth\", void 0);\n    __decorate([\n        Complex({}, Border)\n    ], LegendSettings.prototype, \"border\", void 0);\n    __decorate([\n        Complex({ left: 0, right: 0, top: 0, bottom: 0 }, Margin)\n    ], LegendSettings.prototype, \"margin\", void 0);\n    __decorate([\n        Complex({ left: 0, right: 0, top: 0, bottom: 0 }, ContainerPadding)\n    ], LegendSettings.prototype, \"containerPadding\", void 0);\n    __decorate([\n        Property(8)\n    ], LegendSettings.prototype, \"shapePadding\", void 0);\n    __decorate([\n        Property('transparent')\n    ], LegendSettings.prototype, \"background\", void 0);\n    __decorate([\n        Property(1)\n    ], LegendSettings.prototype, \"opacity\", void 0);\n    __decorate([\n        Property(true)\n    ], LegendSettings.prototype, \"toggleVisibility\", void 0);\n    __decorate([\n        Property(false)\n    ], LegendSettings.prototype, \"enableHighlight\", void 0);\n    __decorate([\n        Property(null)\n    ], LegendSettings.prototype, \"description\", void 0);\n    __decorate([\n        Property(3)\n    ], LegendSettings.prototype, \"tabIndex\", void 0);\n    __decorate([\n        Property(null)\n    ], LegendSettings.prototype, \"title\", void 0);\n    __decorate([\n        Complex({ fontFamily: null, size: \"14px\", fontStyle: 'Normal', fontWeight: '600', color: null }, Font)\n    ], LegendSettings.prototype, \"titleStyle\", void 0);\n    __decorate([\n        Property('Top')\n    ], LegendSettings.prototype, \"titlePosition\", void 0);\n    __decorate([\n        Property('Normal')\n    ], LegendSettings.prototype, \"textWrap\", void 0);\n    __decorate([\n        Property('Ellipsis')\n    ], LegendSettings.prototype, \"textOverflow\", void 0);\n    __decorate([\n        Property(100)\n    ], LegendSettings.prototype, \"maximumTitleWidth\", void 0);\n    __decorate([\n        Property(null)\n    ], LegendSettings.prototype, \"maximumLabelWidth\", void 0);\n    __decorate([\n        Property(true)\n    ], LegendSettings.prototype, \"enablePages\", void 0);\n    __decorate([\n        Property(false)\n    ], LegendSettings.prototype, \"isInversed\", void 0);\n    __decorate([\n        Property(false)\n    ], LegendSettings.prototype, \"reverse\", void 0);\n    return LegendSettings;\n}(ChildProperty));\nexport { LegendSettings };\n/**\n * Legend base class for Chart and Accumulation chart.\n *\n * @private\n */\nvar BaseLegend = /** @class */ (function () {\n    /**\n     * Constructor for the dateTime module.\n     *\n     * @private\n     */\n    function BaseLegend(chart) {\n        this.maxItemHeight = 0;\n        this.rowHeights = [];\n        this.pageHeights = [];\n        this.columnHeights = [];\n        this.pageXCollections = []; // pages of x locations\n        this.chartRowCount = 1;\n        this.legendTitleCollections = [];\n        this.legendRegions = [];\n        this.pagingRegions = [];\n        this.chart = chart;\n        this.legend = chart.legendSettings;\n        this.legendID = chart.element.id + '_chart_legend';\n        this.isChartControl = (chart.getModuleName() === 'chart' || chart.getModuleName() === 'chart3d');\n        this.isAccChartControl = (chart.getModuleName() === 'accumulationchart');\n        this.isBulletChartControl = (chart.getModuleName() === 'bulletChart');\n        this.isStockChartControl = (chart.getModuleName() === 'stockChart');\n        this.bulletChart = this.chart;\n        this.fivePixel = 5;\n        this.rowCount = 0;\n        this.pageButtonSize = 8;\n        this.maxColumns = 0;\n        this.maxWidth = 0;\n        this.currentPage = 1;\n        this.backwardArrowOpacity = 0;\n        this.forwardArrowOpacity = 1;\n        this.arrowWidth = (2 * (this.fivePixel + this.pageButtonSize + this.fivePixel));\n        this.arrowHeight = this.arrowWidth;\n        this.isTop = false;\n        this.isTitle = false;\n        this.currentPageNumber = 1;\n    }\n    ;\n    /**\n     * Calculate the bounds for the legends.\n     *\n     * @returns {void}\n     * @private\n     */\n    BaseLegend.prototype.calculateLegendBounds = function (rect, availableSize, maxLabelSize) {\n        var legend = this.legend;\n        var defaultValue = (this.isBulletChartControl) ? '40%' : '20%';\n        this.getPosition(legend.position, availableSize);\n        this.legendBounds = new Rect(rect.x, rect.y, 0, 0);\n        this.isVertical = (this.position === 'Left' || this.position === 'Right');\n        this.itemPadding = this.legend.itemPadding ? this.legend.itemPadding : this.isVertical ? this.legend.padding : 20;\n        if (this.isVertical) {\n            this.legendBounds.height = stringToNumber(legend.height, availableSize.height - (rect.y - this.chart.margin.top)) || rect.height;\n            this.legendBounds.width = stringToNumber(legend.width || defaultValue, availableSize.width);\n        }\n        else {\n            this.legendBounds.width = stringToNumber(legend.width, availableSize.width) || rect.width;\n            this.legendBounds.height = stringToNumber(legend.height || defaultValue, availableSize.height);\n        }\n        if (this.chart.getModuleName() === 'chart3d') {\n            this.library.get3DLegendBounds(availableSize, this.legendBounds, legend);\n        }\n        else {\n            this.library.getLegendBounds(availableSize, this.legendBounds, legend);\n        }\n        if (!this.isBulletChartControl) {\n            this.legendBounds.width += (this.legend.containerPadding.left + this.legend.containerPadding.right);\n            this.legendBounds.height += (this.legend.containerPadding.top + this.legend.containerPadding.bottom);\n        }\n        this.getLocation(this.position, legend.alignment, this.legendBounds, rect, availableSize, maxLabelSize);\n    };\n    /**\n     * To find legend position based on available size for chart and accumulation chart\n     *\n     * @param position\n     * @param availableSize\n     * @param position\n     * @param availableSize\n     * @returns {void}\n     */\n    BaseLegend.prototype.getPosition = function (position, availableSize) {\n        var chart = this.chart;\n        var accumulation = this.chart;\n        if (this.isChartControl || this.isBulletChartControl || this.isStockChartControl) {\n            this.position = (position !== 'Auto') ? position : 'Bottom';\n        }\n        else {\n            if (position === 'Auto' && ((chart || accumulation).visibleSeries && (chart || accumulation).visibleSeries[0].type === 'Funnel' || (chart || accumulation).visibleSeries[0].type === 'Pyramid')) {\n                position = 'Top';\n            }\n            this.position = (position !== 'Auto') ? position :\n                (availableSize.width > availableSize.height ? 'Right' : 'Bottom');\n        }\n    };\n    /**\n     * To set bounds for chart and accumulation chart\n     *\n     * @param computedWidth\n     * @param computedHeight\n     * @param legend\n     * @param legendBounds\n     * @param computedWidth\n     * @param computedHeight\n     * @param legend\n     * @param legendBounds\n     * @param computedWidth\n     * @param computedHeight\n     * @param legend\n     * @param legendBounds\n     * @param computedWidth\n     * @param computedHeight\n     * @param legend\n     * @param legendBounds\n     * @returns {void}\n     */\n    BaseLegend.prototype.setBounds = function (computedWidth, computedHeight, legend, legendBounds) {\n        var titleHeight = legend.title && legend.titlePosition === 'Top' ? this.legendTitleSize.height + this.fivePixel : 0;\n        if (this.isVertical && this.isPaging && !legend.enablePages && !this.isBulletChartControl) {\n            titleHeight = legend.title && legend.titlePosition === 'Top' ? this.legendTitleSize.height + this.fivePixel : 0;\n            titleHeight += (this.pageButtonSize + this.fivePixel);\n        }\n        computedWidth = Math.min(computedWidth, legendBounds.width);\n        computedHeight = Math.min(computedHeight, legendBounds.height);\n        if (legend.mode === 'Gradient') {\n            legendBounds.width = legend.width ? legendBounds.width : this.isVertical ? computedWidth : 0.75 * legendBounds.width;\n            legendBounds.height = legend.height ? legendBounds.height : this.isVertical ? 0.75 * legendBounds.height : computedHeight;\n        }\n        else {\n            legendBounds.width = !legend.width ? computedWidth : legendBounds.width;\n            legendBounds.height = !legend.height ? computedHeight : legendBounds.height;\n        }\n        if (!this.isBulletChartControl) {\n            if (this.isTop && legend.titleStyle.textOverflow !== 'None') {\n                this.calculateLegendTitle(legend, legendBounds);\n                legendBounds.height += legend.titleStyle.textOverflow === 'Wrap' && this.legendTitleCollections.length > 1 ?\n                    (this.legendTitleSize.height - (this.legendTitleSize.height / this.legendTitleCollections.length)) : 0;\n            }\n        }\n        this.rowCount = Math.max(1, Math.ceil((legendBounds.height - legend.padding - titleHeight) /\n            (this.maxItemHeight + legend.padding)));\n    };\n    /**\n     * To find legend location based on position, alignment for chart and accumulation chart\n     *\n     * @param position\n     * @param alignment\n     * @param legendBounds\n     * @param rect\n     * @param availableSize\n     * @param maxLabelSize\n     * @param position\n     * @param alignment\n     * @param legendBounds\n     * @param rect\n     * @param availableSize\n     * @param maxLabelSize\n     * @param position\n     * @param alignment\n     * @param legendBounds\n     * @param rect\n     * @param availableSize\n     * @param maxLabelSize\n     * @param position\n     * @param alignment\n     * @param legendBounds\n     * @param rect\n     * @param availableSize\n     * @param maxLabelSize\n     * @param position\n     * @param alignment\n     * @param legendBounds\n     * @param rect\n     * @param availableSize\n     * @param maxLabelSize\n     * @param position\n     * @param alignment\n     * @param legendBounds\n     * @param rect\n     * @param availableSize\n     * @param maxLabelSize\n     */\n    BaseLegend.prototype.getLocation = function (position, alignment, legendBounds, rect, availableSize, maxLabelSize) {\n        var padding = this.legend.border.width;\n        var isBulletChart = this.isBulletChartControl;\n        var bulletChart = this.bulletChart;\n        var labelIns = bulletChart.labelPosition === 'Inside';\n        var ticklIns = bulletChart.tickPosition === 'Inside';\n        var isVertical = bulletChart.orientation === 'Vertical';\n        var categoryFieldValue = (isBulletChart && bulletChart.categoryField !== '') ?\n            maxLabelSize.width + this.chart.border.width + padding * 3 : 0;\n        var marginBottom = this.chart.margin.bottom;\n        var legendHeight = legendBounds.height + padding + this.legend.margin.top + this.legend.margin.bottom;\n        var legendWidth = legendBounds.width + padding + this.legend.margin.left + this.legend.margin.right;\n        if (position === 'Bottom') {\n            legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n            legendBounds.y = rect.y + (rect.height - legendHeight) + padding + this.legend.margin.top;\n            legendBounds.y += (isBulletChart && !bulletChart.opposedPosition && !labelIns && !ticklIns\n                && !isVertical) ? bulletChart.majorTickLines.height + marginBottom + this.legend.border.width + padding * 2 :\n                (isVertical && bulletChart.categoryField !== '') ? maxLabelSize.height + padding * 2 : 0;\n            subtractThickness(rect, new Thickness(0, 0, 0, legendHeight));\n        }\n        else if (position === 'Top') {\n            var axisTextSize = void 0;\n            if (this.isChartControl) {\n                axisTextSize = measureText('100', this.chart.verticalAxes[0].labelStyle, this.chart.themeStyle.legendLabelFont);\n            }\n            legendBounds.x = this.alignLegend(legendBounds.x, availableSize.width, legendBounds.width, alignment);\n            legendBounds.y = rect.y + padding + this.legend.margin.top;\n            legendBounds.y -= (isBulletChart && bulletChart.opposedPosition && !labelIns && !ticklIns &&\n                !isVertical) ? bulletChart.majorTickLines.height + this.chart.margin.top : 0;\n            legendHeight -= (isBulletChart) ? -padding * 2 : (this.isChartControl ? -padding * 2 - axisTextSize.height / 2 : 0);\n            subtractThickness(rect, new Thickness(0, 0, legendHeight, 0));\n        }\n        else if (position === 'Right') {\n            legendBounds.x = rect.x + (rect.width - legendBounds.width) - this.legend.margin.right;\n            legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n            legendWidth += (isBulletChart && bulletChart.opposedPosition && !labelIns && !ticklIns &&\n                isVertical) ? (this.chart.margin.left + this.chart.margin.right + bulletChart.majorTickLines.height) : 0;\n            subtractThickness(rect, new Thickness(0, legendWidth, 0, 0));\n        }\n        else if (position === 'Left') {\n            legendBounds.x = legendBounds.x + this.legend.margin.left;\n            legendBounds.y = rect.y + this.alignLegend(0, availableSize.height - (rect.y + marginBottom), legendBounds.height, alignment);\n            legendWidth += (isBulletChart && !bulletChart.opposedPosition && !labelIns && !ticklIns &&\n                isVertical) ? (legendBounds.x - this.chart.margin.left + padding + bulletChart.majorTickLines.height) :\n                (bulletChart.orientation !== 'Vertical' && bulletChart.categoryField !== '') ? categoryFieldValue : 0;\n            subtractThickness(rect, new Thickness(legendWidth, 0, 0, 0));\n        }\n        else {\n            legendBounds.x = this.legend.location.x;\n            legendBounds.y = this.legend.location.y;\n            subtractThickness(rect, new Thickness(0, 0, 0, 0));\n        }\n    };\n    /**\n     * To find legend alignment for chart and accumulation chart\n     *\n     * @param start\n     * @param size\n     * @param legendSize\n     * @param alignment\n     * @param start\n     * @param size\n     * @param legendSize\n     * @param alignment\n     * @param start\n     * @param size\n     * @param legendSize\n     * @param alignment\n     * @param start\n     * @param size\n     * @param legendSize\n     * @param alignment\n     */\n    BaseLegend.prototype.alignLegend = function (start, size, legendSize, alignment) {\n        switch (alignment) {\n            case 'Far':\n                start = (size - legendSize) - start;\n                break;\n            case 'Center':\n                start = ((size - legendSize) / 2);\n                break;\n        }\n        return start;\n    };\n    /**\n     * Renders the legend.\n     *\n     * @param chart\n     * @param legend\n     * @param legendBounds\n     * @param redraw\n     * @param chart\n     * @param legend\n     * @param legendBounds\n     * @param redraw\n     * @param chart\n     * @param legend\n     * @param legendBounds\n     * @param redraw\n     * @param chart\n     * @param legend\n     * @param legendBounds\n     * @param redraw\n     * @returns {void}\n     * @private\n     */\n    BaseLegend.prototype.renderLegend = function (chart, legend, legendBounds, redraw) {\n        var titleHeight = 0;\n        var titlePlusArrowWidth = 0;\n        var pagingLegendBounds = new Rect(0, 0, 0, 0);\n        var requireLegendBounds = new Rect(0, 0, 0, 0);\n        var firstLegend = this.findFirstLegendPosition(this.legendCollections);\n        var padding = legend.padding;\n        this.itemPadding = this.isBulletChartControl ? legend.padding : this.itemPadding;\n        var isPaging = legend.enablePages;\n        var titlePosition = legend.titlePosition;\n        var upArrowHeight = this.isPaging && !legend.enablePages && this.isVertical ? this.pageButtonSize : 0;\n        var legendGroup = chart.renderer.createGroup({ id: this.legendID + '_g' });\n        var legendTranslateGroup = this.createLegendElements(chart, legendBounds, legendGroup, legend, this.legendID, redraw);\n        this.legendRegions = [];\n        this.chartRowCount = 1;\n        var maxHeight = 0;\n        titleHeight = !this.isTitle ? 0 : (this.isTop || this.isVertical ? this.legendTitleSize.height : 0);\n        if (this.isChartControl || (this.isAccChartControl && !this.isVertical)) {\n            var pageCount = 1;\n            var rowHeights = this.rowHeights[0] + padding;\n            for (var i = 1; i < this.rowHeights.length; i++) {\n                if ((rowHeights + this.rowHeights[i] + padding) > (this.legendBounds.height - this.pageButtonSize - this.maxItemHeight / 2)) {\n                    this.pageHeights[pageCount - 1] = rowHeights + titleHeight;\n                    pageCount++;\n                    rowHeights = 0;\n                }\n                rowHeights += (this.rowHeights[i] + (this.isVertical ? this.itemPadding : padding));\n            }\n            this.pageHeights[pageCount - 1] = rowHeights + titleHeight;\n            this.totalPages = pageCount;\n        }\n        for (var i = 0; i < this.legendCollections.length; i++) {\n            if (this.legendCollections[i].text !== '') {\n                maxHeight = Math.max(this.legendCollections[i].textSize.height, maxHeight);\n                break;\n            }\n            else {\n                continue;\n            }\n        }\n        if (!this.isChartControl && !this.isAccChartControl) {\n            this.maxItemHeight = Math.max(maxHeight, legend.shapeHeight);\n        }\n        // For new legend navigation\n        if (!isPaging && this.isPaging && !this.isVertical) {\n            titlePlusArrowWidth = !this.isTitle ? 0 : titlePosition === 'Left' ? this.legendTitleSize.width : 0;\n            titlePlusArrowWidth += (this.pageButtonSize + (2 * this.fivePixel));\n        }\n        else if (this.isTitle && !this.isPaging && !this.isVertical) {\n            titlePlusArrowWidth = titlePosition === ((!this.isRtlEnable) ? 'Left' : 'Right') ? (this.fivePixel + this.legendTitleSize.width) : 0;\n        }\n        if (chart.legendSettings.mode === 'Gradient' && this.legendCollections.length > 1) {\n            this.getLinearLegend(legendBounds, chart, legend, legendTranslateGroup);\n            this.totalPages = 1;\n        }\n        else if (firstLegend !== this.legendCollections.length) {\n            var legendSeriesGroup = void 0; // legendItem group for each series group element\n            var count = 0;\n            var previousLegend = this.legendCollections[firstLegend];\n            // starting shape center x,y position && to resolve lint error used new line for declaration\n            var startPadding = this.isBulletChartControl ? 0 : titlePlusArrowWidth + padding + (legend.shapeWidth / 2) + legend.containerPadding.left;\n            var xLocation = this.isBulletChartControl ? legendBounds.x + titlePlusArrowWidth + padding + (legend.shapeWidth / 2) :\n                (!this.isRtlEnable) ? legendBounds.x + startPadding : legendBounds.x + ((this.chart.getModuleName() === 'accumulationchart' && this.isVertical) ? this.maxWidth : legendBounds.width) - startPadding;\n            var start = new ChartLocation(xLocation, this.isBulletChartControl ? legendBounds.y + titleHeight + upArrowHeight + padding + (this.maxItemHeight / 2) :\n                legendBounds.y + titleHeight + upArrowHeight + padding + (this.maxItemHeight / 2) + legend.containerPadding.top);\n            var anchor = chart.isRtlEnabled || chart.enableRtl ? 'end' : 'start';\n            var textOptions = new TextOption('', start.x, start.y, anchor);\n            var textPadding = legend.shapePadding + this.itemPadding + legend.shapeWidth;\n            //  initialization for totalPages legend click totalpage again calculate\n            this.totalPages = this.totalPages = (this.isAccChartControl || this.isChartControl || this.isBulletChartControl || this.isStockChartControl) ? this.totalPages : 0;\n            this.pageXCollections = [];\n            this.legendCollections[firstLegend].location = start;\n            var legendIndex = void 0;\n            if (!legend.enablePages && this.isPaging) {\n                var x = start.x - this.fivePixel;\n                var y = start.y - this.fivePixel;\n                var leftSpace = this.isTitle && !this.isVertical && titlePosition === 'Left' ?\n                    this.legendTitleSize.width + this.fivePixel : 0;\n                var bottomSapce = this.isVertical ? (this.pageButtonSize) + Math.abs(y - legendBounds.y) : 0;\n                var rightSpace = this.isTitle && !this.isVertical && titlePosition === 'Right' ?\n                    this.legendTitleSize.width + this.fivePixel : 0;\n                rightSpace += this.isVertical ? 0 : (this.fivePixel + this.pageButtonSize + this.fivePixel);\n                pagingLegendBounds = new Rect(x, y, legendBounds.width - rightSpace - leftSpace, legendBounds.height - bottomSapce);\n                requireLegendBounds = pagingLegendBounds;\n            }\n            else {\n                requireLegendBounds = legendBounds;\n            }\n            var legendOption = void 0;\n            for (var i = 0; i < this.legendCollections.length; i++) {\n                legendOption = this.legendCollections[i];\n                legendIndex = !this.isReverse ? count : (this.legendCollections.length - 1) - count;\n                if (this.chart.getModuleName() === 'accumulationchart') {\n                    legendOption.fill = (this.chart || this.chart || this.chart || this.chart).visibleSeries[0].points[legendOption.pointIndex].color;\n                }\n                if (this.chart.getModuleName() === 'stockChart') {\n                    legendOption.type = this.chart.visibleSeries[count].type;\n                }\n                this.accessbilityText = (this.isBulletChartControl) ? 'Legend of bullet chart' + '' + legendOption.text\n                    : 'Click to show or hide the ' + legendOption.text + ' series';\n                if (legendOption.render && legendOption.text && legendOption.text !== '') {\n                    legendSeriesGroup = chart.renderer.createGroup({\n                        id: this.legendID + this.generateId(legendOption, '_g_', legendIndex)\n                    });\n                    if (legendSeriesGroup) {\n                        legendSeriesGroup.setAttribute('tabindex', i === 0 ? '0' : '');\n                        legendSeriesGroup.setAttribute('aria-label', legend.description || (legendOption.text + ' series is ' + (legendOption.visible ? 'showing, press enter to hide the ' : 'hidden, press enter to show the ') + legendOption.text + ' series'));\n                        legendSeriesGroup.setAttribute('role', 'button');\n                        legendSeriesGroup.setAttribute('aria-pressed', legendOption.visible ? 'true' : 'false');\n                    }\n                    this.library.getRenderPoint(legendOption, start, textPadding, previousLegend, requireLegendBounds, count, firstLegend);\n                    this.renderSymbol(legendOption, legendSeriesGroup, legendIndex);\n                    this.renderText(chart, legendOption, legendSeriesGroup, textOptions, count, legendIndex);\n                    if (legendSeriesGroup) {\n                        legendSeriesGroup.style.cssText =\n                            'pointer-events: bounding-box; cursor: ' + ((!legend.toggleVisibility && (chart.selectionMode === 'None' ||\n                                chart.highlightMode === 'None' ||\n                                chart.selectionMode === 'None') || this.isBulletChartControl) ? 'auto' : 'pointer');\n                    }\n                    if (legendTranslateGroup) {\n                        legendTranslateGroup.appendChild(legendSeriesGroup);\n                    }\n                    previousLegend = legendOption;\n                }\n                count++;\n            }\n            this.totalPages = (this.isPaging && !this.isBulletChartControl && !this.legend.enablePages && !this.isVertical &&\n                this.totalPages > this.chartRowCount) ? this.chartRowCount : this.totalPages;\n            if (this.isPaging && this.totalPages > 1) {\n                this.renderPagingElements(chart, legendBounds, textOptions, legendGroup);\n            }\n            else {\n                this.totalPages = 1;\n            }\n        }\n        appendChildElement(chart.enableCanvas, chart.svgObject, legendGroup, redraw);\n    };\n    /** @private */\n    BaseLegend.prototype.getLinearLegend = function (legendBounds, chart, legend, legendTranslateGroup) {\n        var xmlns = 'http://www.w3.org/2000/svg';\n        var previousLegend = this.legendCollections[0];\n        var nextLegend = this.legendCollections[1];\n        var defElement = this.chart.renderer.createDefs();\n        var gradientLegendCount = 0;\n        var linerGradientEle = document.createElementNS(xmlns, 'linearGradient');\n        var opacity = 1;\n        var fillColors = [];\n        var numberItems = [];\n        if (legend.title) {\n            if (!this.isVertical) {\n                if (legend.titlePosition === 'Left') {\n                    legendBounds.x += this.legendTitleSize.width;\n                    legendBounds.width -= this.legendTitleSize.width;\n                }\n                else if (legend.titlePosition === 'Right') {\n                    legendBounds.width -= this.legendTitleSize.width;\n                }\n                else if (legend.titlePosition === 'Top') {\n                    legendBounds.y += this.legendTitleSize.height;\n                    legendBounds.height -= this.legendTitleSize.height;\n                }\n            }\n            else {\n                legendBounds.y += this.legendTitleSize.height;\n                legendBounds.height -= this.legendTitleSize.height;\n            }\n        }\n        for (var _i = 0, _a = this.chart.rangeColorSettings; _i < _a.length; _i++) {\n            var colorMap = _a[_i];\n            if (numberItems.indexOf(colorMap.start) < 0) {\n                numberItems.push(colorMap.start);\n            }\n            if (colorMap.colors.length > 2) {\n                var diffValue = (colorMap.end - colorMap.start);\n                var colorsLength = colorMap.colors.length - 1;\n                if (diffValue > 0) {\n                    diffValue = diffValue / colorsLength;\n                    for (var index = 1; index < colorsLength; index++) {\n                        var calculatedValue = colorMap.start + (diffValue * index);\n                        numberItems.push(calculatedValue);\n                    }\n                }\n                else {\n                    for (var index = 1; index < colorsLength; index++) {\n                        numberItems.push(colorMap.start);\n                    }\n                }\n            }\n            if (numberItems.indexOf(colorMap.end) < 0) {\n                numberItems.push(colorMap.end);\n            }\n            for (var _b = 0, _c = colorMap.colors; _b < _c.length; _b++) {\n                var fillColor = _c[_b];\n                if (fillColors.indexOf(fillColor) < 0) {\n                    fillColors.push(fillColor);\n                }\n            }\n            if (colorMap.colors.length > 0 && colorMap.colors.length < 2) {\n                fillColors.push(colorMap.colors[0]);\n            }\n        }\n        var x1 = this.isRtlEnable && !this.isVertical ? '100%' : '0%';\n        var x2 = this.isVertical || this.isRtlEnable ? '0%' : '100%';\n        var y2 = this.isVertical ? '100%' : '0%';\n        linerGradientEle.setAttribute('id', this.generateId(previousLegend, 'linearGradient', gradientLegendCount));\n        linerGradientEle.setAttribute('x1', x1);\n        linerGradientEle.setAttribute('y1', '0%');\n        linerGradientEle.setAttribute('x2', x2);\n        linerGradientEle.setAttribute('y2', y2);\n        var full = numberItems[numberItems.length - 1] - numberItems[0];\n        for (var b = 0; b < fillColors.length; b++) {\n            var offsetValue = numberItems[b] - numberItems[0];\n            offsetValue = offsetValue / full;\n            var stopEle = document.createElementNS(xmlns, 'stop');\n            stopEle.setAttribute('offset', offsetValue.toString());\n            stopEle.setAttribute('stop-color', fillColors[b]);\n            stopEle.setAttribute('stop-opacity', opacity.toString());\n            linerGradientEle.appendChild(stopEle);\n        }\n        var startLabel = previousLegend.text.toString();\n        var endLabel = nextLegend.text.toString();\n        var startTextSize = measureText(startLabel, legend.textStyle, this.chart.themeStyle.legendLabelFont);\n        var endTextSize = measureText(endLabel, legend.textStyle, this.chart.themeStyle.legendLabelFont);\n        var textWidth = startTextSize.width > endTextSize.width ? startTextSize.width : endTextSize.width;\n        var textHeight = startTextSize.height > endTextSize.height ? startTextSize.height : endTextSize.height;\n        var otherSpaces = (2 * textWidth) + (4 * legend.padding);\n        var linearBarWidth = legendBounds.width;\n        var linearBarHeight = legendBounds.height;\n        var xValue = legendBounds.x + textWidth + (2 * legend.padding);\n        var yValue = legendBounds.y + legend.padding;\n        var startLabelY;\n        var endLabelY;\n        var startLabelX;\n        var endLabelX;\n        if (this.isVertical) {\n            otherSpaces = (2 * textHeight) + (4 * legend.padding);\n            linearBarWidth = legendBounds.width - (2 * legend.padding);\n            linearBarHeight = legendBounds.height - otherSpaces;\n            xValue = legendBounds.x + legend.padding;\n            yValue = legendBounds.y + textHeight + (2 * legend.padding);\n            startLabelY = legendBounds.y + legend.padding + textHeight;\n            endLabelY = yValue + linearBarHeight + textHeight;\n            startLabelX = (legendBounds.x + (legendBounds.width * 0.5)) - (textWidth * 0.5);\n            endLabelX = startLabelX;\n            if (linearBarWidth > 30) {\n                var diffWidth = linearBarWidth - 30;\n                linearBarWidth = 30;\n                xValue = xValue + (diffWidth / 2);\n            }\n        }\n        else {\n            linearBarWidth = legendBounds.width - otherSpaces;\n            linearBarHeight = legendBounds.height - (2 * legend.padding);\n            startLabelX = legendBounds.x + ((!this.isRtlEnable) ? legend.padding + (textWidth - startTextSize.width) :\n                linearBarWidth + (3 * legend.padding) + textWidth);\n            endLabelX = legendBounds.x + ((!this.isRtlEnable) ? linearBarWidth + (3 * legend.padding) + textWidth :\n                legend.padding + (textWidth - endTextSize.width));\n            startLabelY = legendBounds.y + (legendBounds.height * 0.5) + (textHeight * 0.25);\n            endLabelY = startLabelY;\n            if (linearBarHeight > 30) {\n                var diffHeight = linearBarHeight - 30;\n                linearBarHeight = 30;\n                yValue = yValue + (diffHeight / 2);\n            }\n        }\n        var anchor = chart.enableRtl ? 'end' : '';\n        var textOptions = new TextOption('', startLabelX, startLabelY, anchor, startLabel);\n        var hiddenColor = '#D3D3D3';\n        textOptions.id = this.legendID + this.generateId(previousLegend, '_text_', 1);\n        var fontcolor = previousLegend.visible ? legend.textStyle.color || chart.themeStyle.legendLabelFont.color : hiddenColor;\n        var isCanvas = this.isStockChartControl ? false : this.chart.enableCanvas;\n        textElement(chart.renderer, textOptions, legend.textStyle, fontcolor, legendTranslateGroup, false, false, false, false, \n        // tslint:disable-next-line:align\n        null, this.currentPageNumber && isCanvas ?\n            new Rect(0, -this.translatePage(isCanvas, null, this.currentPageNumber - 1, this.currentPageNumber), 0, 0) : null, null, null, null, null, this.chart.themeStyle.legendLabelFont);\n        textOptions = new TextOption('', endLabelX, endLabelY, anchor, endLabel);\n        textOptions.id = this.legendID + this.generateId(previousLegend, '_text_', 2);\n        textElement(chart.renderer, textOptions, legend.textStyle, fontcolor, legendTranslateGroup, false, false, false, false, \n        // tslint:disable-next-line:align\n        null, this.currentPageNumber && isCanvas ?\n            new Rect(0, -this.translatePage(isCanvas, null, this.currentPageNumber - 1, this.currentPageNumber), 0, 0) : null, null, null, null, null, this.chart.themeStyle.legendLabelFont);\n        var gradientLegend = chart.renderer.drawRectangle({\n            width: linearBarWidth,\n            height: linearBarHeight,\n            x: xValue,\n            y: yValue,\n            fill: 'url(#' + this.generateId(previousLegend, 'linearGradient', gradientLegendCount) + ')'\n        });\n        defElement.appendChild(linerGradientEle);\n        legendTranslateGroup.appendChild(defElement);\n        legendTranslateGroup.appendChild(gradientLegend);\n    };\n    /**\n     * To find first valid legend text index for chart and accumulation chart\n     *\n     * @param legendCollection\n     * @returns {number}\n     * @private\n     */\n    BaseLegend.prototype.findFirstLegendPosition = function (legendCollection) {\n        var count = 0;\n        for (var _i = 0, legendCollection_1 = legendCollection; _i < legendCollection_1.length; _i++) {\n            var legend = legendCollection_1[_i];\n            if (legend.render && legend.text && legend.text !== '') {\n                break;\n            }\n            count++;\n        }\n        return count;\n    };\n    /**\n     * To get the legend title text width and height.\n     *\n     * @param legend\n     * @param legendBounds\n     */\n    BaseLegend.prototype.calculateLegendTitle = function (legend, legendBounds) {\n        if (legend.title) {\n            this.isTop = legend.titlePosition === 'Top';\n            var padding = legend.titleStyle.textOverflow === 'Trim' ? 2 * legend.padding : 0;\n            if (this.isTop || this.isVertical) {\n                this.legendTitleCollections = getTitle(legend.title, legend.titleStyle, (legendBounds.width - padding), this.chart.enableRtl, this.chart.themeStyle.legendTitleFont);\n            }\n            else {\n                this.legendTitleCollections[0] = textTrim(legend.maximumTitleWidth, legend.title, legend.titleStyle, this.chart.enableRtl, this.chart.themeStyle.legendTitleFont);\n            }\n            var text = this.isTop ? legend.title : this.legendTitleCollections[0];\n            this.legendTitleSize = measureText(text, legend.titleStyle, this.chart.themeStyle.legendTitleFont);\n            this.legendTitleSize.height *= this.legendTitleCollections.length;\n        }\n        else {\n            this.legendTitleSize = new Size(0, 0);\n        }\n    };\n    /**\n     * Render the legend title\n     *\n     * @param chart\n     * @param legend\n     * @param legendBounds\n     * @param legendGroup\n     */\n    BaseLegend.prototype.renderLegendTitle = function (chart, legend, legendBounds, legendGroup) {\n        var padding = legend.padding;\n        var alignment = legend.titleStyle.textAlignment;\n        this.isTop = legend.titlePosition === 'Top';\n        var anchor = getTextAnchor(legend.titleStyle.textAlignment, chart.enableRtl);\n        var x = titlePositionX(legendBounds, legend.titleStyle);\n        anchor = this.isTop || this.isVertical ? anchor : (chart.enableRtl) ? 'end' : '';\n        x = alignment === 'Near' ? (x + padding) : alignment === 'Far' ? (x - padding) : x;\n        x = (this.isTop || this.isVertical) ? x : ((legendBounds.x) + (legend.titlePosition === 'Left' ? 5 :\n            (legendBounds.width - this.legendTitleSize.width - 5)));\n        var topPadding = (legendBounds.height / 2) + (this.legendTitleSize.height / 4);\n        var y = legendBounds.y + (!this.isTop && !this.isVertical ? topPadding :\n            (this.legendTitleSize.height / this.legendTitleCollections.length));\n        var legendTitleTextOptions = new TextOption(this.legendID + '_title', x, y, anchor, this.legendTitleCollections);\n        textElement(chart.renderer, legendTitleTextOptions, legend.titleStyle, legend.titleStyle.color || this.chart.themeStyle.legendTitleFont.color, legendGroup, null, null, null, null, null, null, null, null, null, null, this.chart.themeStyle.legendTitleFont);\n    };\n    /**\n     * To create legend rendering elements for chart and accumulation chart\n     *\n     * @param chart\n     * @param legendBounds\n     * @param legendGroup\n     * @param legend\n     * @param id\n     * @param redraw\n     */\n    BaseLegend.prototype.createLegendElements = function (chart, legendBounds, legendGroup, legend, id, redraw) {\n        var padding = legend.padding;\n        var options = new RectOption(id + '_element', legend.background, legend.border, legend.opacity, legendBounds);\n        var legendItemsGroup = chart.renderer.createGroup({ id: id + '_collections' });\n        var isCanvas = this.isStockChartControl ? false : chart.enableCanvas;\n        var clippath = chart.renderer.createClipPath({ id: id + '_clipPath' });\n        options.width = (this.isRtlEnable && this.chart.getModuleName() === 'accumulationchart' && this.isVertical) ? this.maxWidth : legendBounds.width;\n        if (legendGroup) {\n            legendGroup.appendChild(chart.renderer.drawRectangle(options));\n        }\n        else {\n            chart.renderer.drawRectangle(options);\n        }\n        if (legend.title) {\n            this.renderLegendTitle(chart, legend, legendBounds, legendGroup);\n        }\n        if (!isCanvas) {\n            legendGroup.appendChild(legendItemsGroup);\n        }\n        this.legendTranslateGroup = chart.renderer.createGroup({ id: id + '_translate_g' });\n        if (!isCanvas) {\n            legendItemsGroup.appendChild(this.legendTranslateGroup);\n        }\n        options.y += (this.isTop ? this.legendTitleSize.height : 0);\n        options.id += '_clipPath_rect';\n        options.width = ((!this.isChartControl && chart.getModuleName() !== 'bulletChart' && !this.isStockChartControl) && this.isVertical) ? this.maxWidth - padding + legend.containerPadding.left + legend.containerPadding.right\n            : legendBounds.width;\n        if (!isCanvas) {\n            this.clipRect = chart.renderer.drawRectangle(options);\n            clippath.appendChild(this.clipRect);\n        }\n        else {\n            this.pagingClipRect = options;\n        }\n        appendChildElement(isCanvas, chart.svgObject, clippath, redraw);\n        if (!isCanvas) {\n            legendItemsGroup.style.cssText = 'clip-path:url(#' + clippath.id + ')';\n        }\n        return this.legendTranslateGroup;\n    };\n    /**\n     * To render legend symbols for chart and accumulation chart\n     *\n     * @param legendOption\n     * @param group\n     * @param i\n     * @param legendOption\n     * @param group\n     * @param i\n     * @param legendOption\n     * @param group\n     * @param i\n     */\n    BaseLegend.prototype.renderSymbol = function (legendOption, group, legendIndex) {\n        var control = this.isBulletChartControl ? this.chart : null;\n        var symbolColor = legendOption.visible ? legendOption.fill : '#D3D3D3';\n        var isStrokeWidth = (this.chart.getModuleName() === 'chart' || this.chart.getModuleName() === 'stockChart') && (((legendOption.shape === 'SeriesType') &&\n            (legendOption.type.toLowerCase().indexOf('line') > -1) && (legendOption.type.toLowerCase().indexOf('area') === -1)) ||\n            ((legendOption.shape === 'HorizontalLine') || (legendOption.shape === 'VerticalLine') || (legendOption.shape === 'Cross')));\n        var isCustomBorder = (this.chart.getModuleName() === 'chart' || this.chart.getModuleName() === 'stockChart') &&\n            (legendOption.type === 'Scatter' || legendOption.type === 'Bubble');\n        var isCanvas = this.isStockChartControl ? false : this.chart.enableCanvas;\n        var borderColor;\n        var shape = (legendOption.shape === 'SeriesType') ? legendOption.type : legendOption.shape;\n        var strokewidth = isStrokeWidth ? (this.legend.mode === 'Series' ?\n            this.chart.visibleSeries[legendIndex].width : this.chart.visibleSeries[0].width) :\n            (this.isBulletChartControl && legendOption.shape === 'Multiply') ? 4 : 1;\n        var regionPadding;\n        shape = shape === 'Scatter' ? legendOption.markerShape : shape;\n        if (isCustomBorder && legendIndex < this.chart.visibleSeries.length) {\n            var series = this.chart.visibleSeries[legendIndex];\n            var seriesBorder = series.border;\n            var isLineShapemarker = shape === 'HorizontalLine' || shape === 'VerticalLine';\n            borderColor = isLineShapemarker ? symbolColor : seriesBorder.color ? seriesBorder.color : symbolColor;\n            strokewidth = isLineShapemarker ? series.width : seriesBorder.width ? seriesBorder.width : 1;\n        }\n        var symbolOption = new PathOption(this.legendID + this.generateId(legendOption, '_shape_', legendIndex), symbolColor, strokewidth, (isCustomBorder ? borderColor : symbolColor), this.legend.opacity, legendOption.dashArray, '');\n        var textSize = measureText(legendOption.text, this.legend.textStyle, this.chart.themeStyle.legendLabelFont);\n        var x = this.legend.isInversed && !this.isRtlEnable ? legendOption.location.x + textSize.width + this.legend.shapePadding\n            : legendOption.location.x;\n        var y = legendOption.location.y;\n        if (!isCanvas) {\n            group.appendChild(drawSymbol({ x: x, y: y }, shape, new Size(this.legend.shapeWidth, this.legend.shapeHeight), legendOption.url, symbolOption, this.accessbilityText, this.chart.renderer, null, this.isBulletChartControl, control));\n        }\n        else {\n            regionPadding = -this.translatePage(isCanvas, null, this.currentPageNumber - 1, this.currentPageNumber);\n            drawSymbol({ x: x, y: y }, shape, new Size(this.legend.shapeWidth, this.legend.shapeHeight), '', symbolOption, this.accessbilityText, this.chart.renderer, this.currentPageNumber ? new Rect(0, regionPadding, 0, 0) : null, this.isBulletChartControl, control);\n            this.legendRegions.push({\n                rect: new Rect(legendOption.location.x, legendOption.location.y, this.legend.shapeWidth, this.legend.shapeHeight + regionPadding), index: legendIndex\n            });\n        }\n        if (shape === 'Line' && legendOption.markerVisibility && legendOption.markerShape !== 'Image' ||\n            (legendOption.type === 'Doughnut' && shape === 'Doughnut')) {\n            symbolOption.id = this.legendID + this.generateId(legendOption, '_shape_marker_', legendIndex);\n            shape = legendOption.type === 'Doughnut' ? 'Circle' : legendOption.markerShape;\n            symbolOption.fill = legendOption.type === 'Doughnut' ? '#FFFFFF' : symbolOption.fill;\n            if (!isCanvas) {\n                group.appendChild(drawSymbol({ x: x, y: y }, shape, new Size(this.legend.shapeWidth / 2, this.legend.shapeHeight / 2), '', symbolOption, this.accessbilityText, null, null, this.isBulletChartControl, control));\n            }\n            else {\n                drawSymbol({ x: x, y: y }, shape, new Size(this.legend.shapeWidth / 2, this.legend.shapeHeight / 2), '', symbolOption, this.accessbilityText, this.chart.renderer, this.currentPageNumber ?\n                    new Rect(0, -this.translatePage(isCanvas, null, this.currentPageNumber - 1, this.currentPageNumber), 0, 0) : null, this.isBulletChartControl, control);\n            }\n        }\n    };\n    /**\n     * To render legend text for chart and accumulation chart\n     *\n     * @param chart\n     * @param legendOption\n     * @param group\n     * @param textOptions\n     * @param i\n     * @param chart\n     * @param legendOption\n     * @param group\n     * @param textOptions\n     * @param i\n     * @param chart\n     * @param legendOption\n     * @param group\n     * @param textOptions\n     * @param i\n     * @param chart\n     * @param legendOption\n     * @param group\n     * @param textOptions\n     * @param i\n     * @param chart\n     * @param legendOption\n     * @param group\n     * @param textOptions\n     * @param i\n     */\n    BaseLegend.prototype.renderText = function (chart, legendOption, group, textOptions, i, legendIndex) {\n        var legend = chart.legendSettings;\n        var hiddenColor = '#D3D3D3';\n        var fontcolor = legendOption.visible ? legend.textStyle.color || chart.themeStyle.legendLabelFont.color : hiddenColor;\n        var isCanvas = this.isStockChartControl ? false : this.chart.enableCanvas;\n        textOptions.id = this.legendID + this.generateId(legendOption, '_text_', legendIndex);\n        textOptions.text = legendOption.textCollection.length > 0 ? legendOption.textCollection : legendOption.text;\n        if (legend.isInversed && !this.isRtlEnable) {\n            textOptions.x = legendOption.location.x - (legend.shapeWidth / 2);\n        }\n        else if (this.isRtlEnable) {\n            var textWidth = measureText(legendOption.text, legend.textStyle, this.chart.themeStyle.legendLabelFont).width;\n            textOptions.x = legendOption.location.x - ((legendOption.textCollection.length > 1 ? textWidth / legendOption.textCollection.length : textWidth) + legend.shapeWidth / 2 + legend.shapePadding);\n        }\n        else {\n            textOptions.x = legendOption.location.x + (legend.shapeWidth / 2) + legend.shapePadding;\n        }\n        textOptions.y = legendOption.location.y + this.maxItemHeight / 4;\n        var element = textElement(chart.renderer, textOptions, legend.textStyle, fontcolor, group, false, false, false, false, null, this.currentPageNumber && isCanvas ?\n            new Rect(0, -this.translatePage(isCanvas, null, this.currentPageNumber - 1, this.currentPageNumber), 0, 0) : null, null, null, null, null, this.chart.themeStyle.legendLabelFont);\n        if (isCanvas) {\n            var textSize = measureText(legendOption.text, legend.textStyle, this.chart.themeStyle.legendLabelFont);\n            this.legendRegions[i].rect.y = textOptions.y < this.legendRegions[i].rect.y ? textOptions.y : this.legendRegions[i].rect.y;\n            this.legendRegions[i].rect.width += textSize.width;\n            this.legendRegions[i].rect.height = textSize.height;\n            this.legendRegions[i].rect.y -= textSize.height * 0.5;\n            this.legendRegions[i].rect.x -= (this.isRtlEnable) ? this.legendRegions[i].rect.width : 0;\n        }\n    };\n    /**\n     * To render legend paging elements for chart and accumulation chart\n     *\n     * @param chart\n     * @param bounds\n     * @param textOption\n     * @param legendGroup\n     * @param chart\n     * @param bounds\n     * @param textOption\n     * @param legendGroup\n     * @param chart\n     * @param bounds\n     * @param textOption\n     * @param legendGroup\n     * @param chart\n     * @param bounds\n     * @param textOption\n     * @param legendGroup\n     */\n    // tslint:disable-next-line:max-func-body-length\n    BaseLegend.prototype.renderPagingElements = function (chart, bounds, textOption, legendGroup) {\n        var paginggroup = chart.renderer.createGroup({ id: this.legendID + '_navigation' });\n        var isCanvas = this.isStockChartControl ? false : chart.enableCanvas;\n        var titleHeight = this.isBulletChartControl ? 0 : this.legendTitleSize.height;\n        var grayColor = (this.chart.theme.indexOf('Dark') > -1 || this.chart.theme.indexOf('Contrast') > -1) ? '#FFFFFF' : '#545454';\n        var legend = chart.legendSettings; // to solve parameter lint error, legend declaration is here\n        var padding = 8; // const padding for paging elements\n        var pageUp = this.legendID + (!this.isRtlEnable ? '_pageup' : '_pagedown');\n        var pageDown = this.legendID + (!this.isRtlEnable ? '_pagedown' : '_pageup');\n        var symbolOption = new PathOption(pageUp, 'transparent', 5, grayColor, 1, '', '');\n        var iconSize = this.pageButtonSize;\n        // Page left arrow drawing calculation started here\n        var rowCount = !legend.enablePages && this.isPaging && !this.isVertical && !this.isBulletChartControl ? 1 :\n            (this.rowCount - 1);\n        var titleWidth = this.isTitle && legend.titlePosition === 'Left' ? this.legendTitleSize.width : 0;\n        this.pagingRegions = [];\n        this.backwardArrowOpacity = this.currentPage !== 1 ? 1 : 0;\n        this.forwardArrowOpacity = this.currentPage === this.totalPages ? 0 : 1;\n        if (!isCanvas) {\n            legendGroup.appendChild(paginggroup);\n        }\n        if (!this.isChartControl && !this.isAccChartControl) {\n            if (this.isBulletChartControl || this.isStockChartControl || !this.isVertical) {\n                this.totalPages = Math.ceil(this.totalPages / Math.max(1, this.rowCount - 1));\n            }\n            else {\n                this.totalPages = Math.ceil(this.totalPages / this.maxColumns);\n            }\n        }\n        if (paginggroup) {\n            paginggroup.style.cursor = 'pointer';\n        }\n        if ((this.isChartControl || this.isAccChartControl) && !(!legend.enablePages && this.isPaging)) {\n            this.clipPathHeight = this.pageHeights[0];\n        }\n        else {\n            this.clipPathHeight = (rowCount * (this.maxItemHeight + legend.padding));\n        }\n        //this.clipPathHeight = !(this.isChartControl) ? (rowCount * (this.maxItemHeight + legend.padding)) : this.columnHeights[0];\n        if (!isCanvas) {\n            this.clipRect.setAttribute('height', this.clipPathHeight.toString());\n        }\n        else {\n            //paging clipRect only for canvas mode\n            this.pagingClipRect.height = this.legendBounds.height - this.clipPathHeight -\n                (this.pagingClipRect.y - this.legendBounds.y) - legend.border.width;\n            this.pagingClipRect.y = this.pagingClipRect.y + this.clipPathHeight;\n            this.pagingClipRect.x += legend.border.width;\n            this.pagingClipRect.width -= (legend.border.width + legend.border.width / 2);\n            this.chart.renderer.clearRect(new Rect(this.pagingClipRect.x, this.pagingClipRect.y, this.pagingClipRect.width, this.pagingClipRect.height));\n        }\n        var pageTextElement;\n        var x = (bounds.x + iconSize / 2);\n        var y = bounds.y + this.clipPathHeight + ((titleHeight + bounds.height - this.clipPathHeight) / 2);\n        if (this.isPaging && !legend.enablePages && !this.isVertical && !this.isBulletChartControl) {\n            x = (bounds.x + this.pageButtonSize + titleWidth);\n            y = legend.title && this.isTop ? (bounds.y + padding + titleHeight + (iconSize / 1) + 0.5) :\n                (bounds.y + padding + iconSize + 0.5);\n        }\n        var size = measureText(this.totalPages + '/' + this.totalPages, legend.textStyle, this.chart.themeStyle.legendLabelFont);\n        var translateX = (this.isRtlEnable) ? legend.border.width + (iconSize / 2) : bounds.width - (2 * (iconSize + padding) + padding + size.width);\n        if (!isCanvas) {\n            if (this.isVertical && !legend.enablePages && !this.isBulletChartControl) {\n                x = bounds.x + (bounds.width / 2);\n                y = bounds.y + (iconSize / 2) + (padding / 2) + titleHeight;\n                symbolOption.opacity = this.backwardArrowOpacity;\n                paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'UpArrow', new Size(iconSize, iconSize), '', symbolOption, 'UpArrow'));\n            }\n            else {\n                symbolOption.opacity = this.isBulletChartControl ? symbolOption.opacity :\n                    (legend.enablePages ? 1 : !this.isRtlEnable ? this.backwardArrowOpacity : this.forwardArrowOpacity);\n                paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'LeftArrow', new Size(iconSize, iconSize), '', symbolOption, 'LeftArrow'));\n            }\n        }\n        else {\n            drawSymbol({ x: x, y: y }, 'LeftArrow', new Size(iconSize, iconSize), '', symbolOption, 'LeftArrow', this.chart.renderer, new Rect(translateX, 0, 0, 0));\n        }\n        this.pagingRegions.push(new Rect(!this.isRtlEnable ? x + bounds.width - (2 * (iconSize + padding) + padding + size.width) - iconSize * 0.5 : x, y - iconSize * 0.5, iconSize, iconSize));\n        // Page numbering rendering calculation started here\n        textOption.x = x + (iconSize / 2) + padding;\n        textOption.y = y + (size.height / 4);\n        textOption.id = this.legendID + '_pagenumber';\n        textOption.text = !this.isRtlEnable ? '1/' + this.totalPages : this.totalPages + '/1';\n        var color = (this.chart.theme.indexOf('Dark') > -1 || this.chart.theme.indexOf('Contrast') > -1) ? '#FFFFFF' : legend.textStyle.color || this.chart.themeStyle.legendLabelFont.color;\n        if (isCanvas && this.totalNoOfPages) {\n            textOption.text = !this.isRtlEnable ? this.currentPageNumber + '/' + this.totalNoOfPages : this.totalNoOfPages + '/' + this.currentPageNumber;\n        }\n        if (legend.enablePages || this.isBulletChartControl) {\n            pageTextElement = textElement(chart.renderer, textOption, legend.textStyle, color, paginggroup, false, false, false, false, null, new Rect(translateX, 0, 0, 0), null, null, null, null, this.chart.themeStyle.legendLabelFont);\n        }\n        // Page right arrow rendering calculation started here\n        x = textOption.x + padding + (iconSize / 2) + size.width;\n        if (this.isPaging && !legend.enablePages && !this.isVertical) {\n            x = (bounds.x + bounds.width - (this.isBulletChartControl ? this.fivePixel : 0) - this.pageButtonSize - (legend.title && legend.titlePosition === 'Right' ?\n                this.legendTitleSize.width + this.fivePixel : 0));\n        }\n        symbolOption.id = pageDown;\n        symbolOption.opacity = !legend.enablePages ? !this.isRtlEnable ? this.forwardArrowOpacity : this.backwardArrowOpacity : 1;\n        if (!isCanvas) {\n            if (this.isVertical && !legend.enablePages && !this.isBulletChartControl) {\n                x = bounds.x + (bounds.width / 2);\n                y = bounds.y + bounds.height - (iconSize / 2);\n                paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'DownArrow', new Size(iconSize, iconSize), '', symbolOption, 'DownArrow'));\n            }\n            else {\n                paginggroup.appendChild(drawSymbol({ x: x, y: y }, 'RightArrow', new Size(iconSize, iconSize), '', symbolOption, 'RightArrow'));\n            }\n        }\n        else {\n            drawSymbol({ x: x, y: y }, 'RightArrow', new Size(iconSize, iconSize), '', symbolOption, 'RightArrow', this.chart.renderer, new Rect(translateX, 0, 0, 0));\n        }\n        this.pagingRegions.push(new Rect(!this.isRtlEnable ? x + (bounds.width - (2 * (iconSize + padding) + padding + size.width) - iconSize * 0.5) : x, y - iconSize * 0.5, iconSize, iconSize));\n        if (!isCanvas && (legend.enablePages || this.isBulletChartControl)) {\n            //placing the navigation buttons and page numbering in legend right corner\n            paginggroup.setAttribute('transform', 'translate(' + translateX + ', ' + 0 + ')');\n        }\n        else {\n            if (this.currentPageNumber === 1 && this.calTotalPage && (legend.enablePages || this.isBulletChartControl)) {\n                this.totalNoOfPages = this.totalPages;\n                this.calTotalPage = false;\n            }\n            if (!legend.enablePages && !this.isBulletChartControl) { // For new legend page navigation\n                this.translatePage(isCanvas, null, this.currentPage - 1, this.currentPage, legend);\n            }\n        }\n        if (legend.enablePages || this.isBulletChartControl) {\n            this.translatePage(isCanvas, pageTextElement, this.currentPage - 1, this.currentPage, legend);\n        }\n    };\n    BaseLegend.prototype.getPageHeight = function (pageHeights, pageCount) {\n        var sum = 0;\n        for (var i = 0; i < pageCount; i++) {\n            sum += pageHeights[i];\n        }\n        return sum;\n    };\n    /**\n     * To translate legend pages for chart and accumulation chart\n     *\n     * @param pagingText\n     * @param page\n     * @param pageNumber\n     * @param legend\n     * @param pagingText\n     * @param page\n     * @param pageNumber\n     * @param legend\n     * @param pagingText\n     * @param page\n     * @param pageNumber\n     * @param legend\n     * @param pagingText\n     * @param page\n     * @param pageNumber\n     * @param legend\n     */\n    BaseLegend.prototype.translatePage = function (isCanvas, pagingText, page, pageNumber, legend) {\n        var size = (this.isChartControl || this.isAccChartControl) ? (page ? this.getPageHeight(this.pageHeights, page) : 0) : ((this.clipPathHeight) * page);\n        if (!isCanvas && (this.isChartControl || this.isAccChartControl)) {\n            this.clipRect.setAttribute('height', this.pageHeights[page].toString());\n            if (this.isAccChartControl && this.isPaging && !legend.enablePages && this.isVertical) {\n                this.clipRect.setAttribute('height', this.legendBounds.height.toString());\n            }\n        }\n        var translate = 'translate(0,-' + size + ')';\n        if (!this.isChartControl && !this.isBulletChartControl && !this.isStockChartControl && this.isVertical) {\n            var pageX = this.pageXCollections[page * this.maxColumns];\n            size = (!this.isRtlEnable) ? pageX - this.legendBounds.x : (this.legendBounds.x + this.maxWidth) - pageX;\n            size = size < 0 ? 0 : size; // to avoid small pixel variation\n            translate = ((!this.isRtlEnable) ? 'translate(-' : 'translate(') + size + ',0)';\n        }\n        if (!this.chart.enableCanvas) {\n            this.legendTranslateGroup.setAttribute('transform', translate);\n        }\n        if (!this.chart.enableCanvas && (legend.enablePages || this.isBulletChartControl)) {\n            pagingText.textContent = (pageNumber) + '/' + this.totalPages;\n        }\n        this.currentPage = pageNumber;\n        return size;\n    };\n    /**\n     * To change legend pages for chart and accumulation chart\n     *\n     * @param event\n     * @param pageUp\n     * @param event\n     * @param pageUp\n     */\n    BaseLegend.prototype.changePage = function (event, pageUp) {\n        var legend = this.chart.legendSettings;\n        var backwardArrow = document.getElementById(this.legendID + '_pageup');\n        var forwardArrow = document.getElementById(this.legendID + '_pagedown');\n        var isCanvas = this.isStockChartControl ? false : this.chart.enableCanvas;\n        var pageText = (legend.enablePages || this.isBulletChartControl) ?\n            document.getElementById(this.legendID + '_pagenumber') : null;\n        var page = (legend.enablePages || this.isBulletChartControl) ? parseInt(pageText.textContent.split('/')[0], 10) :\n            this.currentPage;\n        if (pageUp && page > 1) {\n            this.translatePage(isCanvas, pageText, (page - 2), (page - 1), legend);\n        }\n        else if (!pageUp && page < this.totalPages) {\n            this.translatePage(isCanvas, pageText, page, (page + 1), legend);\n        }\n        if (this.isPaging && !legend.enablePages && !this.isBulletChartControl) {\n            // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n            this.currentPage === this.totalPages ? this.hideArrow(forwardArrow) : this.showArrow(forwardArrow);\n            // eslint-disable-next-line @typescript-eslint/no-unused-expressions\n            this.currentPage === 1 ? this.hideArrow(backwardArrow) : this.showArrow(backwardArrow);\n        }\n    };\n    /**\n     * To hide the backward and forward arrow\n     *\n     * @param arrowElement\n     */\n    BaseLegend.prototype.hideArrow = function (arrowElement) {\n        arrowElement.setAttribute('opacity', '0');\n    };\n    /**\n     * To show the  backward and forward arrow\n     *\n     * @param arrowElement\n     */\n    BaseLegend.prototype.showArrow = function (arrowElement) {\n        arrowElement.setAttribute('opacity', '1');\n    };\n    /**\n     * To find legend elements id based on chart or accumulation chart\n     *\n     * @param option\n     * @param prefix\n     * @param count\n     * @param option\n     * @param prefix\n     * @param count\n     * @param option\n     * @param prefix\n     * @param count\n     * @private\n     */\n    BaseLegend.prototype.generateId = function (option, prefix, count) {\n        if (this.isChartControl || this.isStockChartControl) {\n            return prefix + count;\n        }\n        else {\n            return prefix + option.pointIndex;\n        }\n    };\n    /**\n     * To show or hide trimmed text tooltip for legend.\n     *\n     * @param event\n     * @returns {void}\n     * @private\n     */\n    BaseLegend.prototype.move = function (event) {\n        var _this = this;\n        var x = this.chart.mouseX;\n        var y = this.chart.mouseY;\n        if (event.target.textContent.indexOf('...') > -1) {\n            var targetId = event.target.id.split(this.legendID + '_text_');\n            if (targetId.length === 2) {\n                var index = parseInt(targetId[1], 10);\n                var element = this.chart.element;\n                if (!isNaN(index)) {\n                    if (this.chart.isTouch) {\n                        removeElement(this.chart.element.id + '_EJ2_Legend_Tooltip');\n                    }\n                    if (this.isChartControl) {\n                        showTooltip(this.chart.series[index].name, x, y, element.offsetWidth, element.id + '_EJ2_Legend_Tooltip', getElement(this.chart.element.id + '_Secondary_Element'));\n                    }\n                    else {\n                        showTooltip(this.chart.visibleSeries[0].points[index].x.toString(), x + 10, y + 10, element.offsetWidth, element.id + '_EJ2_Legend_Tooltip', getElement(this.chart.element.id + '_Secondary_Element'));\n                    }\n                }\n            }\n        }\n        else {\n            removeElement(this.chart.element.id + '_EJ2_Legend_Tooltip');\n        }\n        if (this.chart.isTouch) {\n            clearTimeout(this.clearTooltip);\n            this.clearTooltip = +setTimeout(function () { removeElement(_this.chart.element.id + '_EJ2_Legend_Tooltip'); }, 1000);\n        }\n    };\n    return BaseLegend;\n}());\nexport { BaseLegend };\n/**\n * Class for legend options\n *\n * @private\n */\nvar LegendOptions = /** @class */ (function () {\n    function LegendOptions(text, fill, shape, visible, type, url, markerShape, markerVisibility, pointIndex, seriesIndex, dashArray) {\n        this.location = { x: 0, y: 0 };\n        this.textCollection = [];\n        this.text = text;\n        this.fill = fill;\n        this.shape = shape;\n        this.url = url;\n        this.visible = visible;\n        this.type = type;\n        this.markerVisibility = markerVisibility;\n        this.markerShape = markerShape;\n        this.pointIndex = pointIndex;\n        this.seriesIndex = seriesIndex;\n        this.dashArray = dashArray;\n    }\n    return LegendOptions;\n}());\nexport { LegendOptions };\n","//! moment.js locale configuration\n//! locale : Indonesian [id]\n//! author : Mohammad Satrio Utomo : https://github.com/tyok\n//! reference: http://id.wikisource.org/wiki/Pedoman_Umum_Ejaan_Bahasa_Indonesia_yang_Disempurnakan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var id = moment.defineLocale('id', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_November_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Agt_Sep_Okt_Nov_Des'.split('_'),\n        weekdays: 'Minggu_Senin_Selasa_Rabu_Kamis_Jumat_Sabtu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Rab_Kam_Jum_Sab'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|siang|sore|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'siang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sore' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'siang';\n            } else if (hours < 19) {\n                return 'sore';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Besok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kemarin pukul] LT',\n            lastWeek: 'dddd [lalu pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lalu',\n            s: 'beberapa detik',\n            ss: '%d detik',\n            m: 'semenit',\n            mm: '%d menit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return id;\n\n})));\n","const dates = {\r\n    addDays: function (date, days) {\r\n        date.setDate(date.getDate() + days);\r\n        return date;\r\n    },\r\n\r\n    getTradePeriodName: function (startDate, endDate) {\r\n        if (Date.parse(startDate) >= Date.parse(endDate)) {\r\n            throw new Error(\"'startDate' must be earlier than the 'endDate'. Please correct the dates.\");\r\n        }\r\n\r\n        startDate = new Date(startDate);\r\n        endDate = new Date(endDate)\r\n\r\n        var yearSuffix = startDate.getFullYear().ToString().Substring(2);\r\n        var numOfDays = this.getDateDiffInDays(startDate, endDate);\r\n        var tradeablePeriod = null;\r\n\r\n        // potential M, Q, or CAL periods\r\n        if (startDate.getFullYear() === endDate.getFullYear()) {\r\n            // month\r\n            if (numOfDays <= 31 && numOfDays >= 28) {\r\n                startDate = this.addDays(startDate, 1);\r\n                tradeablePeriod = startDate.toLocaleString('default', { month: 'short' }) + \"-\" + yearSuffix;\r\n            }\r\n\r\n            //quarter\r\n            if (numOfDays <= 92 && numOfDays >= 90) {\r\n                startDate = this.addDays(startDate, 1);\r\n\r\n                if (this.getQuarter(startDate) === 1) {\r\n                    tradeablePeriod = \"Q1-\" + yearSuffix;\r\n                } else if (this.getQuarter(startDate) === 2) {\r\n                    tradeablePeriod = \"Q2-\" + yearSuffix;\r\n                } else if (this.getQuarter(startDate) === 3) {\r\n                    tradeablePeriod = \"Q3-\" + yearSuffix;\r\n                } else {\r\n                    tradeablePeriod = \"Q4-\" + yearSuffix;\r\n                }\r\n            }\r\n\r\n            // summer season\r\n            if (numOfDays >= 182 && numOfDays <= 183) {\r\n                startDate = this.addDays(startDate, 1);\r\n\r\n                if (startDate.toLocaleString('default', { month: 'short' }) === \"Apr\") {\r\n                    tradeablePeriod = \"Sum-\" + yearSuffix;\r\n                }\r\n            }\r\n\r\n            // calendar\r\n            if (numOfDays >= 364 && numOfDays <= 366) {\r\n                tradeablePeriod = \"Cal-\" + yearSuffix;\r\n            }\r\n        } else if (startDate.getFullYear() + 1 === endDate.getFullYear()) {\r\n            if (numOfDays >= 182 && numOfDays <= 183) {\r\n                startDate = this.addDays(startDate, 1);\r\n\r\n                if (startDate.toLocaleString('default', { month: 'short' }) === \"Oct\") {\r\n                    tradeablePeriod = \"Win-\" + yearSuffix;\r\n                }\r\n            }\r\n        }\r\n\r\n        return tradeablePeriod;\r\n    },\r\n\r\n    getDateDiffInDays: function (startDate, endDate) {\r\n        var result = Math.round(Math.abs((startDate - endDate) / (24 * 60 * 60 * 1000))) + 1;\r\n        return result;\r\n    },\r\n    getBusinessDatesCount: function (startDate, endDate) {\r\n        if (startDate == undefined || endDate == undefined)\r\n            return 0;\r\n\r\n        let count = 0;\r\n        //set dates to have 0 hours,minutes... as otherwise for october it does the matching and due to daylight saving change it doesnt match the last day and we dont calculate it.\r\n        startDate.setHours(0, 0, 0, 0);\r\n        endDate.setHours(0, 0, 0, 0);\r\n\r\n        const curDate = new Date(startDate.getTime());\r\n        while (curDate <= endDate) {\r\n            const dayOfWeek = curDate.getDay();\r\n            if (dayOfWeek !== 0 && dayOfWeek !== 6) count++;\r\n            curDate.setDate(curDate.getDate() + 1);\r\n        }\r\n        return count;\r\n    },\r\n    getQuarter: function (date) {\r\n        date = new Date(date);\r\n\r\n        return Math.floor((date.getMonth() + 3) / 3);\r\n    }\r\n}\r\n\r\nexport default dates;","//! moment.js locale configuration\n//! locale : Irish or Irish Gaelic [ga]\n//! author : André Silva : https://github.com/askpt\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'Eanáir',\n            'Feabhra',\n            'Márta',\n            'Aibreán',\n            'Bealtaine',\n            'Meitheamh',\n            'Iúil',\n            'Lúnasa',\n            'Meán Fómhair',\n            'Deireadh Fómhair',\n            'Samhain',\n            'Nollaig',\n        ],\n        monthsShort = [\n            'Ean',\n            'Feabh',\n            'Márt',\n            'Aib',\n            'Beal',\n            'Meith',\n            'Iúil',\n            'Lún',\n            'M.F.',\n            'D.F.',\n            'Samh',\n            'Noll',\n        ],\n        weekdays = [\n            'Dé Domhnaigh',\n            'Dé Luain',\n            'Dé Máirt',\n            'Dé Céadaoin',\n            'Déardaoin',\n            'Dé hAoine',\n            'Dé Sathairn',\n        ],\n        weekdaysShort = ['Domh', 'Luan', 'Máirt', 'Céad', 'Déar', 'Aoine', 'Sath'],\n        weekdaysMin = ['Do', 'Lu', 'Má', 'Cé', 'Dé', 'A', 'Sa'];\n\n    var ga = moment.defineLocale('ga', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Inniu ag] LT',\n            nextDay: '[Amárach ag] LT',\n            nextWeek: 'dddd [ag] LT',\n            lastDay: '[Inné ag] LT',\n            lastWeek: 'dddd [seo caite] [ag] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i %s',\n            past: '%s ó shin',\n            s: 'cúpla soicind',\n            ss: '%d soicind',\n            m: 'nóiméad',\n            mm: '%d nóiméad',\n            h: 'uair an chloig',\n            hh: '%d uair an chloig',\n            d: 'lá',\n            dd: '%d lá',\n            M: 'mí',\n            MM: '%d míonna',\n            y: 'bliain',\n            yy: '%d bliain',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ga;\n\n})));\n","/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * To import utils\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nvar SvgRenderer = /** @class */ (function () {\n    /* End-Properties */\n    function SvgRenderer(rootID) {\n        //Internal Variables\n        this.svgLink = 'http://www.w3.org/2000/svg';\n        this.rootId = rootID;\n    }\n    // method to get the attributes value\n    // tslint:disable-next-line:no-any\n    SvgRenderer.prototype.getOptionValue = function (options, key) {\n        return options[key];\n    }; /* tslint:enable */\n    /**\n     * To create a Html5 SVG element\n     *\n     * @param {SVGAttributes} options - Options to create SVG\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.createSvg = function (options) {\n        if (isNullOrUndefined(options.id)) {\n            options.id = this.rootId + '_svg';\n        }\n        this.svgObj = document.getElementById(options.id);\n        if (isNullOrUndefined(document.getElementById(options.id))) {\n            this.svgObj = document.createElementNS(this.svgLink, 'svg');\n        }\n        this.svgObj = this.setElementAttributes(options, this.svgObj);\n        this.setSVGSize(options.width, options.height);\n        return this.svgObj;\n    };\n    // method to set the height and width for the SVG element\n    SvgRenderer.prototype.setSVGSize = function (width, height) {\n        var element = document.getElementById(this.rootId);\n        var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n        if (isNullOrUndefined(this.width) || this.width <= 0) {\n            this.svgObj.setAttribute('width', width ? width.toString() : size.width.toString());\n        }\n        else {\n            this.svgObj.setAttribute('width', this.width.toString());\n        }\n        if (isNullOrUndefined(this.height) || this.height <= 0) {\n            this.svgObj.setAttribute('height', height ? height.toString() : '450');\n        }\n        else {\n            this.svgObj.setAttribute('height', this.height.toString());\n        }\n    };\n    /**\n     * To draw a path\n     *\n     * @param {PathAttributes} options - Options to draw a path in SVG\n     * @returns {Element} It returns a appropriate path\n     */\n    SvgRenderer.prototype.drawPath = function (options) {\n        var path = document.getElementById(options.id);\n        if (path === null) {\n            path = document.createElementNS(this.svgLink, 'path');\n        }\n        path = this.setElementAttributes(options, path);\n        return path;\n    };\n    /**\n     * To draw a line\n     *\n     * @param {LineAttributes} options - Options to draw a line in SVG\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.drawLine = function (options) {\n        var line = document.getElementById(options.id);\n        if (line === null) {\n            line = document.createElementNS(this.svgLink, 'line');\n        }\n        line = this.setElementAttributes(options, line);\n        return line;\n    };\n    /**\n     * To draw a rectangle\n     *\n     * @param {BaseAttibutes} options - Required options to draw a rectangle in SVG\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.drawRectangle = function (options) {\n        var rectangle = document.getElementById(options.id);\n        if (rectangle === null) {\n            rectangle = document.createElementNS(this.svgLink, 'rect');\n        }\n        rectangle = this.setElementAttributes(options, rectangle);\n        return rectangle;\n    };\n    /**\n     * To draw a circle\n     *\n     * @param {CircleAttributes} options - Required options to draw a circle in SVG\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.drawCircle = function (options) {\n        var circle = document.getElementById(options.id);\n        if (circle === null) {\n            circle = document.createElementNS(this.svgLink, 'circle');\n        }\n        circle = this.setElementAttributes(options, circle);\n        return circle;\n    };\n    /**\n     * To draw a polyline\n     *\n     * @param {PolylineAttributes} options - Options required to draw a polyline\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.drawPolyline = function (options) {\n        var polyline = document.getElementById(options.id);\n        if (polyline === null) {\n            polyline = document.createElementNS(this.svgLink, 'polyline');\n        }\n        polyline = this.setElementAttributes(options, polyline);\n        return polyline;\n    };\n    /**\n     * To draw an ellipse\n     *\n     * @param {EllipseAttributes} options - Options required to draw an ellipse\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.drawEllipse = function (options) {\n        var ellipse = document.getElementById(options.id);\n        if (ellipse === null) {\n            ellipse = document.createElementNS(this.svgLink, 'ellipse');\n        }\n        ellipse = this.setElementAttributes(options, ellipse);\n        return ellipse;\n    };\n    /**\n     * To draw a polygon\n     *\n     * @param {PolylineAttributes} options - Options needed to draw a polygon in SVG\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.drawPolygon = function (options) {\n        var polygon = document.getElementById(options.id);\n        if (polygon === null) {\n            polygon = document.createElementNS(this.svgLink, 'polygon');\n        }\n        polygon = this.setElementAttributes(options, polygon);\n        return polygon;\n    };\n    /**\n     * To draw an image\n     *\n     * @param {ImageAttributes} options - Required options to draw an image in SVG\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.drawImage = function (options) {\n        var img = document.createElementNS(this.svgLink, 'image');\n        img.setAttributeNS(null, 'height', options.height.toString());\n        img.setAttributeNS(null, 'width', options.width.toString());\n        img.setAttributeNS('http://www.w3.org/1999/xlink', 'href', options.href);\n        img.setAttributeNS(null, 'x', options.x.toString());\n        img.setAttributeNS(null, 'y', options.y.toString());\n        img.setAttributeNS(null, 'id', options.id);\n        img.setAttributeNS(null, 'visibility', options.visibility);\n        if (!isNullOrUndefined(this.getOptionValue(options, 'clip-path'))) {\n            img.setAttributeNS(null, 'clip-path', this.getOptionValue(options, 'clip-path'));\n        }\n        if (!isNullOrUndefined(options.preserveAspectRatio)) {\n            img.setAttributeNS(null, 'preserveAspectRatio', options.preserveAspectRatio);\n        }\n        return img;\n    };\n    /**\n     * To draw a text\n     *\n     * @param {TextAttributes} options - Options needed to draw a text in SVG\n     * @param {string} label - Label of the text\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.createText = function (options, label) {\n        var text = document.createElementNS(this.svgLink, 'text');\n        text = this.setElementAttributes(options, text);\n        if (!isNullOrUndefined(label)) {\n            text.textContent = label;\n        }\n        return text;\n    };\n    /**\n     * To create a tSpan\n     *\n     * @param {TextAttributes} options - Options to create tSpan\n     * @param {string} label - The text content which is to be rendered in the tSpan\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.createTSpan = function (options, label) {\n        var tSpan = document.createElementNS(this.svgLink, 'tspan');\n        tSpan = this.setElementAttributes(options, tSpan);\n        if (!isNullOrUndefined(label)) {\n            tSpan.textContent = label;\n        }\n        return tSpan;\n    };\n    /**\n     * To create a title\n     *\n     * @param {string} text - The text content which is to be rendered in the title\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.createTitle = function (text) {\n        var title = document.createElementNS(this.svgLink, 'title');\n        title.textContent = text;\n        return title;\n    };\n    /**\n     * To create defs element in SVG\n     *\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.createDefs = function () {\n        var defs = document.createElementNS(this.svgLink, 'defs');\n        return defs;\n    };\n    /**\n     * To create clip path in SVG\n     *\n     * @param {BaseAttibutes} options - Options needed to create clip path\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.createClipPath = function (options) {\n        var clipPath = document.createElementNS(this.svgLink, 'clipPath');\n        clipPath = this.setElementAttributes(options, clipPath);\n        return clipPath;\n    };\n    /**\n     * To create foreign object in SVG\n     *\n     * @param {BaseAttibutes} options - Options needed to create foreign object\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.createForeignObject = function (options) {\n        var foreignObject = document.createElementNS(this.svgLink, 'foreignObject');\n        foreignObject = this.setElementAttributes(options, foreignObject);\n        return foreignObject;\n    };\n    /**\n     * To create group element in SVG\n     *\n     * @param {BaseAttibutes} options - Options needed to create group\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.createGroup = function (options) {\n        var group = document.createElementNS(this.svgLink, 'g');\n        group = this.setElementAttributes(options, group);\n        return group;\n    };\n    /**\n     * To create pattern in SVG\n     *\n     * @param {PatternAttributes} options - Required options to create pattern in SVG\n     * @param {string} element - Specifies the name of the pattern\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.createPattern = function (options, element) {\n        var pattern = document.createElementNS(this.svgLink, element);\n        pattern = this.setElementAttributes(options, pattern);\n        return pattern;\n    };\n    /**\n     * To create radial gradient in SVG\n     *\n     * @param {string[]} colors - Specifies the colors required to create radial gradient\n     * @param {string} name - Specifies the name of the gradient\n     * @param {RadialGradient} options - value for radial gradient\n     * @returns {string} It returns color name\n     */\n    SvgRenderer.prototype.createRadialGradient = function (colors, name, options) {\n        var colorName;\n        if (!isNullOrUndefined(colors[0].colorStop)) {\n            var newOptions = {\n                'id': this.rootId + '_' + name + 'radialGradient',\n                'cx': options.cx + '%',\n                'cy': options.cy + '%',\n                'r': options.r + '%',\n                'fx': options.fx + '%',\n                'fy': options.fy + '%'\n            };\n            this.drawGradient('radialGradient', newOptions, colors);\n            colorName = 'url(#' + this.rootId + '_' + name + 'radialGradient)';\n        }\n        else {\n            colorName = colors[0].color.toString();\n        }\n        return colorName;\n    };\n    /**\n     * To create linear gradient in SVG\n     *\n     * @param {GradientColor[]} colors - Array of string specifies the values for color\n     * @param {string} name - Specifies the name of the gradient\n     * @param {LinearGradient} options - Specifies the options for gradient\n     * @returns {string} It returns color name\n     */\n    SvgRenderer.prototype.createLinearGradient = function (colors, name, options) {\n        var colorName;\n        if (!isNullOrUndefined(colors[0].colorStop)) {\n            var newOptions = {\n                'id': this.rootId + '_' + name + 'linearGradient',\n                'x1': options.x1 + '%',\n                'y1': options.y1 + '%',\n                'x2': options.x2 + '%',\n                'y2': options.y2 + '%'\n            };\n            this.drawGradient('linearGradient', newOptions, colors);\n            colorName = 'url(#' + this.rootId + '_' + name + 'linearGradient)';\n        }\n        else {\n            colorName = colors[0].color.toString();\n        }\n        return colorName;\n    };\n    /**\n     * To render the gradient element in SVG\n     *\n     * @param {string} gradientType - Specifies the type of the gradient\n     * @param {RadialGradient | LinearGradient} options - Options required to render a gradient\n     * @param {string[]} colors - Array of string specifies the values for color\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.drawGradient = function (gradientType, options, colors) {\n        var defs = this.createDefs();\n        var gradient = document.createElementNS(this.svgLink, gradientType);\n        gradient = this.setElementAttributes(options, gradient);\n        for (var i = 0; i < colors.length; i++) {\n            var stop_1 = document.createElementNS(this.svgLink, 'stop');\n            stop_1.setAttribute('offset', colors[i].colorStop);\n            stop_1.setAttribute('stop-color', colors[i].color);\n            stop_1.setAttribute('stop-opacity', colors[i].opacity ? (colors[i].opacity) : '1');\n            if (!isNullOrUndefined(colors[i].style)) {\n                stop_1.style.cssText = colors[i].style;\n            }\n            gradient.appendChild(stop_1);\n        }\n        defs.appendChild(gradient);\n        return defs;\n    };\n    /**\n     * To render a clip path\n     *\n     * @param {BaseAttibutes} options - Options required to render a clip path\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.drawClipPath = function (options) {\n        var defs = this.createDefs();\n        var clipPath = this.createClipPath({ 'id': options.id });\n        options.id = options.id + '_Rect';\n        var rect = this.drawRectangle(options);\n        clipPath.appendChild(rect);\n        defs.appendChild(clipPath);\n        return defs;\n    };\n    /**\n     * To create circular clip path in SVG\n     *\n     * @param {CircleAttributes} options - Options required to create circular clip path\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.drawCircularClipPath = function (options) {\n        var defs = this.createDefs();\n        var clipPath = this.createClipPath({ 'id': options.id });\n        options.id = options.id + '_Circle';\n        var circle = this.drawCircle(options);\n        clipPath.appendChild(circle);\n        defs.appendChild(clipPath);\n        return defs;\n    };\n    /**\n     * To set the attributes to the element\n     *\n     * @param {SVGCanvasAttributes} options - Attributes to set for the element\n     * @param {Element} element - The element to which the attributes need to be set\n     * @returns {Element} It returns a appropriate element\n     */\n    SvgRenderer.prototype.setElementAttributes = function (options, element) {\n        var keys = Object.keys(options);\n        for (var i = 0; i < keys.length; i++) {\n            if (keys[i] === 'style') {\n                element.style.cssText = options[keys[i]];\n            }\n            else {\n                element.setAttribute(keys[i], options[keys[i]]);\n            }\n        }\n        return element;\n    };\n    /**\n     * To create a Html5 canvas element\n     * Dummy method for using canvas/svg render in the same variable name in chart control\n     */\n    SvgRenderer.prototype.createCanvas = function () {\n        return null;\n    };\n    return SvgRenderer;\n}());\nexport { SvgRenderer };\n","/* eslint-disable no-case-declarations */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/**\n * To import utils.\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @private\n */\nvar CanvasRenderer = /** @class */ (function () {\n    /* End-Properties */\n    function CanvasRenderer(rootID) {\n        this.rootId = rootID;\n    }\n    // method to get the attributes value\n    // tslint:disable-next-line:no-any\n    CanvasRenderer.prototype.getOptionValue = function (options, key) {\n        return options[key];\n    };\n    /* tslint:enable */\n    /**\n     * To create a Html5 canvas element\n     *\n     * @param {BaseAttibutes} options - Options to create canvas\n     * @returns {HTMLCanvasElement} Creating a canvas\n     */\n    CanvasRenderer.prototype.createCanvas = function (options) {\n        var canvasObj = document.createElement('canvas');\n        canvasObj.setAttribute('id', this.rootId + '_canvas');\n        this.ctx = canvasObj.getContext('2d');\n        this.canvasObj = canvasObj;\n        this.setCanvasSize(options.width, options.height);\n        return this.canvasObj;\n    };\n    /**\n     * To set the width and height for the Html5 canvas element\n     *\n     * @param {number} width - width of the canvas\n     * @param {number} height - height of the canvas\n     * @returns {void} Setting canvas size\n     */\n    CanvasRenderer.prototype.setCanvasSize = function (width, height) {\n        var element = document.getElementById(this.rootId);\n        var size = !isNullOrUndefined(element) ? element.getBoundingClientRect() : null;\n        if (isNullOrUndefined(this.width)) {\n            this.canvasObj.setAttribute('width', width ? width.toString() : size.width.toString());\n        }\n        else {\n            this.canvasObj.setAttribute('width', this.width.toString());\n        }\n        if (isNullOrUndefined(this.height)) {\n            this.canvasObj.setAttribute('height', height ? height.toString() : '450');\n        }\n        else {\n            this.canvasObj.setAttribute('height', this.height.toString());\n        }\n    };\n    // To set the values to the attributes\n    CanvasRenderer.prototype.setAttributes = function (options) {\n        this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n        var dashArray = this.getOptionValue(options, 'stroke-dasharray');\n        if (!isNullOrUndefined(dashArray)) {\n            var dashArrayString = dashArray.split(',');\n            this.ctx.setLineDash([parseInt(dashArrayString[0], 10), parseInt(dashArrayString[1], 10)]);\n        }\n        this.ctx.strokeStyle = this.getOptionValue(options, 'stroke');\n    };\n    /**\n     * To draw a line\n     *\n     * @param {LineAttributes} options - required options to draw a line on the canvas\n     * @returns {void} To draw a line\n     */\n    CanvasRenderer.prototype.drawLine = function (options) {\n        this.ctx.save();\n        this.ctx.beginPath();\n        this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n        this.ctx.strokeStyle = options.stroke;\n        this.ctx.moveTo(options.x1, options.y1);\n        this.ctx.lineTo(options.x2, options.y2);\n        this.ctx.stroke();\n        this.ctx.restore();\n    };\n    /**\n     * To draw a rectangle\n     *\n     * @param {RectAttributes} options - required options to draw a rectangle on the canvas.\n     * @param {Int32Array} canvasTranslate TO get a translate value of canvas.\n     * @returns {void} To draw rectangle.\n     */\n    CanvasRenderer.prototype.drawRectangle = function (options, canvasTranslate) {\n        var canvasCtx = this.ctx;\n        var cornerRadius = options.rx;\n        this.ctx.save();\n        this.ctx.beginPath();\n        if (canvasTranslate) {\n            this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n        }\n        this.ctx.globalAlpha = this.getOptionValue(options, 'opacity');\n        this.setAttributes(options);\n        this.ctx.rect(options.x, options.y, options.width, options.height);\n        if (cornerRadius !== null && cornerRadius >= 0) {\n            this.drawCornerRadius(options);\n        }\n        else {\n            if (options.fill === 'none') {\n                options.fill = 'transparent';\n            }\n            this.ctx.fillStyle = options.fill;\n            this.ctx.fillRect(options.x, options.y, options.width, options.height);\n            this.ctx.stroke();\n        }\n        this.ctx.restore();\n        this.ctx = canvasCtx;\n        return (this.canvasObj);\n    };\n    // To draw the corner of a rectangle\n    CanvasRenderer.prototype.drawCornerRadius = function (options) {\n        var cornerRadius = options.rx;\n        var x = options.x;\n        var y = options.y;\n        var width = options.width;\n        var height = options.height;\n        if (options.fill === 'none') {\n            options.fill = 'transparent';\n        }\n        this.ctx.fillStyle = options.fill;\n        if (width < 2 * cornerRadius) {\n            cornerRadius = width / 2;\n        }\n        if (height < 2 * cornerRadius) {\n            cornerRadius = height / 2;\n        }\n        this.ctx.beginPath();\n        this.ctx.moveTo(x + width - cornerRadius, y);\n        this.ctx.arcTo(x + width, y, x + width, y + height, cornerRadius);\n        this.ctx.arcTo(x + width, y + height, x, y + height, cornerRadius);\n        this.ctx.arcTo(x, y + height, x, y, cornerRadius);\n        this.ctx.arcTo(x, y, x + width, y, cornerRadius);\n        this.ctx.closePath();\n        this.ctx.fill();\n        this.ctx.stroke();\n    };\n    /**\n     * To draw a path on the canvas\n     *\n     * @param {PathAttributes} options - options needed to draw path.\n     * @param {Int32Array} canvasTranslate - Array of numbers to translate the canvas.\n     * @returns {Element} To draw a path.\n     */\n    CanvasRenderer.prototype.drawPath = function (options, canvasTranslate) {\n        var path = options.d;\n        var dataSplit = path.split(' ');\n        var borderWidth = this.getOptionValue(options, 'stroke-width');\n        var canvasCtx = this.ctx;\n        var flag = true;\n        this.ctx.save();\n        this.ctx.beginPath();\n        if (canvasTranslate) {\n            this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n        }\n        this.ctx.globalAlpha = options.opacity ? options.opacity : this.getOptionValue(options, 'fill-opacity');\n        this.setAttributes(options);\n        for (var i = 0; i < dataSplit.length; i = i + 3) {\n            var x1 = parseFloat(dataSplit[i + 1]);\n            var y1 = parseFloat(dataSplit[i + 2]);\n            switch (dataSplit[i]) {\n                case 'M':\n                    if (!options.innerR && !options.cx) {\n                        this.ctx.moveTo(x1, y1);\n                    }\n                    break;\n                case 'L':\n                    if (!options.innerR) {\n                        this.ctx.lineTo(x1, y1);\n                    }\n                    break;\n                case 'Q':\n                    var q1 = parseFloat(dataSplit[i + 3]);\n                    var q2 = parseFloat(dataSplit[i + 4]);\n                    this.ctx.quadraticCurveTo(x1, y1, q1, q2);\n                    i = i + 2;\n                    break;\n                case 'C':\n                    var c1 = parseFloat(dataSplit[i + 3]);\n                    var c2 = parseFloat(dataSplit[i + 4]);\n                    var c3 = parseFloat(dataSplit[i + 5]);\n                    var c4 = parseFloat(dataSplit[i + 6]);\n                    this.ctx.bezierCurveTo(x1, y1, c1, c2, c3, c4);\n                    i = i + 4;\n                    break;\n                case 'A':\n                    if (!options.innerR) {\n                        if (options.cx) {\n                            this.ctx.arc(options.cx, options.cy, options.radius, 0, 2 * Math.PI, options.counterClockWise);\n                        }\n                        else {\n                            this.ctx.moveTo(options.x, options.y);\n                            this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n                            this.ctx.lineTo(options.x, options.y);\n                        }\n                    }\n                    else if (flag) {\n                        this.ctx.arc(options.x, options.y, options.radius, options.start, options.end, options.counterClockWise);\n                        this.ctx.arc(options.x, options.y, options.innerR, options.end, options.start, !options.counterClockWise);\n                        flag = false;\n                    }\n                    i = i + 5;\n                    break;\n                case 'z':\n                case 'Z':\n                    this.ctx.closePath();\n                    //since for loop is incremented by 3, to get next value after 'z' i is decremented for 2.\n                    i = i - 2;\n                    break;\n            }\n        }\n        if (options.fill !== 'none' && options.fill !== undefined) {\n            this.ctx.fillStyle = options.fill;\n            this.ctx.fill();\n        }\n        if (borderWidth > 0) {\n            this.ctx.stroke();\n        }\n        this.ctx.restore();\n        this.ctx = canvasCtx;\n        return this.canvasObj;\n    };\n    /**\n     * To draw a text\n     *\n     * @param {TextAttributes} options - options required to draw text\n     * @param {string} label - Specifies the text which has to be drawn on the canvas\n     * @param {number} transX - Specifies the text of translate X\n     * @param {number} transY - Specifies the text of translate Y\n     * @param {number} dy - Specifies the text of translate dy\n     * @param {boolean} isTSpan - Specifies the boolean value of span value\n     * @returns {void}\n     */\n    CanvasRenderer.prototype.createText = function (options, label, transX, transY, dy, isTSpan) {\n        var fontWeight = this.getOptionValue(options, 'font-weight');\n        if (!isNullOrUndefined(fontWeight) && fontWeight.toLowerCase() === 'regular') {\n            fontWeight = 'normal';\n        }\n        var fontSize = this.getOptionValue(options, 'font-size');\n        var fontFamily = this.getOptionValue(options, 'font-family');\n        var fontStyle = this.getOptionValue(options, 'font-style').toLowerCase();\n        var font = (fontStyle + ' ' + fontWeight + ' ' + fontSize + ' ' + fontFamily);\n        var anchor = this.getOptionValue(options, 'text-anchor');\n        var opacity = options.opacity !== undefined ? options.opacity : 1;\n        if (anchor === 'middle') {\n            anchor = 'center';\n        }\n        this.ctx.save();\n        this.ctx.fillStyle = options.fill;\n        this.ctx.font = font;\n        this.ctx.textAlign = anchor;\n        this.ctx.globalAlpha = opacity;\n        if (options.baseline) {\n            this.ctx.textBaseline = options.baseline;\n        }\n        if (!isTSpan) {\n            var txtlngth = 0;\n            this.ctx.translate(options.x + (txtlngth / 2) + (transX ? transX : 0), options.y + (transY ? transY : 0));\n            this.ctx.rotate(options.labelRotation * Math.PI / 180);\n        }\n        this.ctx.fillText(label, isTSpan ? options.x : 0, isTSpan ? dy : 0);\n        this.ctx.restore();\n        return this.canvasObj;\n    };\n    /**\n     * To draw circle on the canvas\n     *\n     * @param {CircleAttributes} options - required options to draw the circle\n     * @param {Int32Array} canvasTranslate Translate value of canvas\n     * @returns {void}\n     */\n    CanvasRenderer.prototype.drawCircle = function (options, canvasTranslate) {\n        var canvasCtx = this.ctx;\n        this.ctx.save();\n        this.ctx.beginPath();\n        this.ctx.arc(options.cx, options.cy, options.r, 0, 2 * Math.PI);\n        this.ctx.fillStyle = options.fill;\n        this.ctx.globalAlpha = options.opacity;\n        this.ctx.fill();\n        if (canvasTranslate) {\n            this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n        }\n        this.setAttributes(options);\n        this.ctx.stroke();\n        this.ctx.restore();\n        this.ctx = canvasCtx;\n        return this.canvasObj;\n    };\n    /**\n     * To draw polyline\n     *\n     * @param {PolylineAttributes} options - options needed to draw polyline\n     * @returns {void}\n     */\n    CanvasRenderer.prototype.drawPolyline = function (options) {\n        this.ctx.save();\n        this.ctx.beginPath();\n        var points = options.points.split(' ');\n        for (var i = 0; i < points.length - 1; i++) {\n            var point = points[i].split(',');\n            var x = parseFloat(point[0]);\n            var y = parseFloat(point[1]);\n            if (i === 0) {\n                this.ctx.moveTo(x, y);\n            }\n            else {\n                this.ctx.lineTo(x, y);\n            }\n        }\n        this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n        this.ctx.strokeStyle = options.stroke;\n        this.ctx.stroke();\n        this.ctx.restore();\n    };\n    /**\n     * To draw an ellipse on the canvas\n     *\n     * @param {EllipseAttributes} options - options needed to draw ellipse\n     * @param {Int32Array} canvasTranslate Translate value of canvas\n     * @returns {void}\n     */\n    CanvasRenderer.prototype.drawEllipse = function (options, canvasTranslate) {\n        var canvasCtx = this.ctx;\n        var circumference = Math.max(options.rx, options.ry);\n        var scaleX = options.rx / circumference;\n        var scaleY = options.ry / circumference;\n        this.ctx.save();\n        this.ctx.beginPath();\n        this.ctx.translate(options.cx, options.cy);\n        if (canvasTranslate) {\n            this.ctx.translate(canvasTranslate[0], canvasTranslate[1]);\n        }\n        this.ctx.save();\n        this.ctx.scale(scaleX, scaleY);\n        this.ctx.arc(0, 0, circumference, 0, 2 * Math.PI, false);\n        this.ctx.fillStyle = options.fill;\n        this.ctx.fill();\n        this.ctx.restore();\n        this.ctx.lineWidth = this.getOptionValue(options, 'stroke-width');\n        this.ctx.strokeStyle = options.stroke;\n        this.ctx.stroke();\n        this.ctx.restore();\n        this.ctx = canvasCtx;\n    };\n    /**\n     * To draw an image\n     *\n     * @param {ImageAttributes} options - options required to draw an image on the canvas\n     * @returns {void}\n     */\n    CanvasRenderer.prototype.drawImage = function (options) {\n        this.ctx.save();\n        var imageObj = new Image();\n        if (!isNullOrUndefined(options.href)) {\n            imageObj.src = options.href;\n            this.ctx.drawImage(imageObj, options.x, options.y, options.width, options.height);\n        }\n        this.ctx.restore();\n    };\n    /**\n     * To create a linear gradient\n     *\n     * @param {string[]} colors - Specifies the colors required to create linear gradient\n     * @returns {string} It returns color\n     */\n    CanvasRenderer.prototype.createLinearGradient = function (colors) {\n        var myGradient;\n        if (!isNullOrUndefined(colors[0].colorStop)) {\n            myGradient = this.ctx.createLinearGradient(0, 0, 0, this.canvasObj.height);\n        }\n        var color = this.setGradientValues(colors, myGradient);\n        return color;\n    };\n    /**\n     * To create a radial gradient\n     *\n     * @param {string[]} colors - Specifies the colors required to create linear gradient\n     * @returns {string} It returns gradient color\n     */\n    CanvasRenderer.prototype.createRadialGradient = function (colors) {\n        var myGradient;\n        if (!isNullOrUndefined(colors[0].colorStop)) {\n            myGradient = this.ctx.createRadialGradient(0, 0, 0, 0, 0, this.canvasObj.height);\n        }\n        var colorName = this.setGradientValues(colors, myGradient);\n        return colorName;\n    };\n    // To set the gradient values\n    CanvasRenderer.prototype.setGradientValues = function (colors, myGradient) {\n        var colorName;\n        if (!isNullOrUndefined(colors[0].colorStop)) {\n            for (var i = 0; i <= colors.length - 1; i++) {\n                var color = colors[i].color;\n                var newColorStop = (colors[i].colorStop).slice(0, -1);\n                var stopColor = parseInt(newColorStop, 10) / 100;\n                myGradient.addColorStop(stopColor, color);\n            }\n            colorName = myGradient.toString();\n        }\n        else {\n            colorName = colors[0].color.toString();\n        }\n        return colorName;\n    };\n    /**\n     * To set the attributes to the element\n     *\n     * @param {SVGCanvasAttributes} options - Attributes to set for the element\n     * @param {HTMLElement} element - The element to which the attributes need to be set\n     * @returns {HTMLElement} It returns null value\n     */\n    CanvasRenderer.prototype.setElementAttributes = function (options, element) {\n        var keys = Object.keys(options);\n        var values = Object.keys(options).map(function (key) { return options[key]; });\n        for (var i = 0; i < keys.length; i++) {\n            element.setAttribute(keys[i], values[i]);\n        }\n        return null;\n    };\n    /**\n     * To update the values of the canvas element attributes\n     *\n     * @param {SVGCanvasAttributes} options - Specifies the colors required to create gradient\n     * @returns {void}\n     */\n    CanvasRenderer.prototype.updateCanvasAttributes = function (options) {\n        this.setElementAttributes(options, this.canvasObj);\n        var ctx = this.ctx;\n        if (!isNullOrUndefined(this.dataUrl)) {\n            var img_1 = new Image;\n            img_1.onload = function () {\n                ctx.drawImage(img_1, 0, 0);\n            };\n            img_1.src = this.dataUrl;\n        }\n    };\n    /**\n     * This method clears the given rectangle region\n     *\n     * @param {Rect} rect The rect parameter as passed\n     */\n    CanvasRenderer.prototype.clearRect = function (rect) {\n        this.ctx.restore();\n        this.ctx.clearRect(rect.x, rect.y, rect.width, rect.height);\n    };\n    /**\n     * For canvas rendering in chart\n     * Dummy method for using canvas/svg render in the same variable name in chart control\n     */\n    CanvasRenderer.prototype.createGroup = function () {\n        return null;\n    };\n    /**\n     * To render a clip path\n     *\n     * Dummy method for using canvas/svg render in the same variable name in chart control\n     */\n    CanvasRenderer.prototype.drawClipPath = function () {\n        return null;\n    };\n    /**\n     * To render a Circular clip path\n     *\n     * Dummy method for using canvas/svg render in the same variable name in chart control\n     */\n    CanvasRenderer.prototype.drawCircularClipPath = function () {\n        return null;\n    };\n    /**\n     * Clip method to perform clip in canvas mode\n     *\n     * @param {BaseAttibutes} options The canvas clip of options\n     */\n    CanvasRenderer.prototype.canvasClip = function (options) {\n        this.ctx.save();\n        this.ctx.fillStyle = 'transparent';\n        this.ctx.rect(options.x, options.y, options.width, options.height);\n        this.ctx.fill();\n        this.ctx.clip();\n    };\n    /**\n     * Tp restore the canvas\n     */\n    CanvasRenderer.prototype.canvasRestore = function () {\n        this.ctx.restore();\n    };\n    /**\n     * To draw a polygon\n     * Dummy method for using canvas/svg render in the same variable name in chart control\n     */\n    CanvasRenderer.prototype.drawPolygon = function () {\n        return null;\n    };\n    /**\n     * To create defs element in SVG\n     * Dummy method for using canvas/svg render in the same variable name in chart control\n     *\n     * @returns {Element} It returns null\n     */\n    CanvasRenderer.prototype.createDefs = function () {\n        return null;\n    };\n    /**\n     * To create clip path in SVG\n     * Dummy method for using canvas/svg render in the same variable name in chart control\n     */\n    CanvasRenderer.prototype.createClipPath = function () {\n        return null;\n    };\n    /**\n     * To create a Html5 SVG element\n     * Dummy method for using canvas/svg render in the same variable name in chart control\n     *\n     * @returns {Element} It returns null\n     */\n    CanvasRenderer.prototype.createSvg = function () {\n        return null;\n    };\n    return CanvasRenderer;\n}());\nexport { CanvasRenderer };\n","/** @private */\nexport function getTooltipThemeColor(theme) {\n    var style;\n    switch (theme) {\n        case 'Highcontrast':\n        case 'HighContrast':\n            style = {\n                tooltipFill: '#ffffff',\n                tooltipBoldLabel: '#000000',\n                tooltipLightLabel: '#000000',\n                tooltipHeaderLine: '#969696',\n                textStyle: { fontFamily: 'Segoe UI', color: '#000000' }\n            };\n            break;\n        case 'MaterialDark':\n        case 'FabricDark':\n        case 'BootstrapDark':\n            style = {\n                tooltipFill: theme === 'MaterialDark' ? '#F4F4F4' : theme === 'FabricDark' ? '#A19F9D' : '#F0F0F0',\n                tooltipBoldLabel: theme === 'MaterialDark' ? 'rgba(18, 18, 18, 1)' : theme === 'FabricDark' ? '#DADADA' : '#1A1A1A',\n                tooltipLightLabel: theme === 'MaterialDark' ? 'rgba(18, 18, 18, 1)' : theme === 'FabricDark' ? '#DADADA' : '#1A1A1A',\n                tooltipHeaderLine: '#9A9A9A',\n                textStyle: theme === 'MaterialDark' ? { fontFamily: 'Roboto', color: 'rgba(18, 18, 18, 1)' } : theme === 'FabricDark' ? { fontFamily: 'Segoe UI', color: '#DADADA' } : { fontFamily: 'Helvetica', color: '#1A1A1A' }\n            };\n            break;\n        case 'Bootstrap4':\n            style = {\n                tooltipFill: '#212529',\n                tooltipBoldLabel: '#F9FAFB',\n                tooltipLightLabel: '#F9FAFB',\n                tooltipHeaderLine: 'rgba(255, 255, 255, 0.2)',\n                textStyle: { fontFamily: 'Helvetica', color: '#F9FAFB' }\n            };\n            break;\n        case 'Tailwind':\n            style = {\n                tooltipFill: '#111827',\n                tooltipBoldLabel: '#F9FAFB',\n                tooltipLightLabel: '#F9FAFB',\n                tooltipHeaderLine: '#6B7280',\n                textStyle: { fontFamily: 'Inter', color: '#F9FAFB' }\n            };\n            break;\n        case 'TailwindDark':\n            style = {\n                tooltipFill: '#E9ECEF',\n                tooltipBoldLabel: '#1F2937',\n                tooltipLightLabel: '#1F2937',\n                tooltipHeaderLine: '#9CA3AF',\n                textStyle: { fontFamily: 'Inter', color: '#1F2937' }\n            };\n            break;\n        case 'Bootstrap5':\n            style = {\n                tooltipFill: '#212529',\n                tooltipBoldLabel: '#F9FAFB',\n                tooltipLightLabel: '#F9FAFB',\n                tooltipHeaderLine: '#9CA3AF',\n                textStyle: { fontFamily: 'Helvetica', color: '#F9FAFB' }\n            };\n            break;\n        case 'Bootstrap5Dark':\n            style = {\n                tooltipFill: '#E9ECEF',\n                tooltipBoldLabel: '#212529',\n                tooltipLightLabel: '#212529',\n                tooltipHeaderLine: '#ADB5BD',\n                textStyle: { fontFamily: 'Helvetica', color: '#212529' }\n            };\n            break;\n        case 'Fluent':\n            style = {\n                tooltipFill: '#FFFFFF',\n                tooltipBoldLabel: '#323130',\n                tooltipLightLabel: '#323130',\n                tooltipHeaderLine: '#D2D0CE',\n                textStyle: { fontFamily: 'Segoe UI', color: '#323130' }\n            };\n            break;\n        case 'FluentDark':\n            style = {\n                tooltipFill: '#323130',\n                tooltipBoldLabel: '#F3F2F2',\n                tooltipLightLabel: '#F3F2F1',\n                tooltipHeaderLine: '#3B3A39',\n                textStyle: { fontFamily: 'Segoe UI', color: '#F3F2F1' }\n            };\n            break;\n        case 'Material3':\n            style = {\n                tooltipFill: '#313033',\n                tooltipBoldLabel: '#F4EFF4',\n                tooltipLightLabel: '#F4EFF4',\n                tooltipHeaderLine: '#F4EFF4',\n                textStyle: { fontFamily: 'Roboto', color: '#F4EFF4' }\n            };\n            break;\n        case 'Material3Dark':\n            style = {\n                tooltipFill: '#E6E1E5',\n                tooltipBoldLabel: '#313033',\n                tooltipLightLabel: '#313033',\n                tooltipHeaderLine: '#313033',\n                textStyle: { fontFamily: 'Roboto', color: '#313033' }\n            };\n            break;\n        default:\n            style = {\n                tooltipFill: theme === 'Material' ? '#000816' : theme === 'Fabric' ? '#FFFFFF' : '#212529',\n                tooltipBoldLabel: theme === 'Material' ? 'rgba(249, 250, 251, 1)' : theme === 'Fabric' ? '#333333' : '#F9FAFB',\n                tooltipLightLabel: theme === 'Material' ? 'rgba(249, 250, 251, 1)' : theme === 'Fabric' ? '#333333' : '#F9FAFB',\n                tooltipHeaderLine: theme === 'Fabric' ? '#D2D0CE' : '#ffffff',\n                textStyle: theme === 'Material' ? { fontFamily: 'Roboto', color: 'rgba(249, 250, 251, 1)' } : theme === 'Fabric' ? { fontFamily: 'Segoe UI', color: '#333333' } : { fontFamily: 'Helvetica', color: '#F9FAFB' }\n            };\n            break;\n    }\n    return style;\n}\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { SvgRenderer } from '../svg-render/index';\nimport { createElement, remove, merge } from '@syncfusion/ej2-base';\n/**\n * Function to measure the height and width of the text.\n *\n * @private\n * @param {string} text To get a text\n * @param {FontModel} font To get a font of the text\n * @returns {Size} measureText\n */\nexport function measureText(text, font, themeFontStyle) {\n    var breakText = text || ''; // For avoid NuLL value\n    var htmlObject = document.getElementById('chartmeasuretext');\n    if (htmlObject === null) {\n        htmlObject = createElement('text', { id: 'chartmeasuretext' });\n        document.body.appendChild(htmlObject);\n    }\n    if (typeof (text) === 'string' && (text.indexOf('<') > -1 || text.indexOf('>') > -1)) {\n        var textArray = text.split(' ');\n        for (var i = 0; i < textArray.length; i++) {\n            if (textArray[i].indexOf('<br/>') === -1) {\n                textArray[i] = textArray[i].replace(/[<>]/g, '&');\n            }\n        }\n        text = textArray.join(' ');\n    }\n    htmlObject.innerHTML = (breakText.indexOf('<br>') > -1 || breakText.indexOf('<br/>') > -1) ? breakText : text;\n    htmlObject.style.position = 'fixed';\n    htmlObject.style.fontSize = font.size;\n    htmlObject.style.fontWeight = font.fontWeight;\n    htmlObject.style.fontStyle = font.fontStyle;\n    htmlObject.style.fontFamily = font.fontFamily || themeFontStyle.fontFamily;\n    htmlObject.style.visibility = 'hidden';\n    htmlObject.style.top = '-100';\n    htmlObject.style.left = '0';\n    htmlObject.style.whiteSpace = 'nowrap';\n    // For bootstrap line height issue\n    htmlObject.style.lineHeight = 'normal';\n    return new Size(htmlObject.clientWidth, htmlObject.clientHeight);\n}\n/** @private */\nexport function withInAreaBounds(x, y, areaBounds, width, height) {\n    if (width === void 0) { width = 0; }\n    if (height === void 0) { height = 0; }\n    return (x >= areaBounds.x - width && x <= areaBounds.x + areaBounds.width + width && y >= areaBounds.y - height\n        && y <= areaBounds.y + areaBounds.height + height);\n}\n/** @private */\nexport function findDirection(rX, rY, rect, arrowLocation, arrowPadding, top, bottom, left, tipX, tipY, controlName) {\n    if (controlName === void 0) { controlName = ''; }\n    var direction = '';\n    var startX = rect.x;\n    var startY = rect.y;\n    var width = rect.x + rect.width;\n    var height = rect.y + rect.height;\n    if (top) {\n        direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n            + startY + ' ' + (startX + rX) + ' ' + startY + ' ' +\n            ' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + width + ' '\n            + startY + ' ' + (width) + ' ' + (startY + rY));\n        direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' '\n            + (height) + ' ' + (width - rX) + ' ' + (height));\n        if (arrowPadding !== 0) {\n            if (controlName === 'RangeNavigator') {\n                if ((arrowLocation.x - arrowPadding) > width / 2) {\n                    direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding) + ' ' + (height));\n                    direction = direction.concat(' L' + ' ' + (tipX + arrowPadding) + ' ' + (height + arrowPadding)\n                        + ' L' + ' ' + (arrowLocation.x) + ' ' + height);\n                }\n                else {\n                    direction = direction.concat(' L' + ' ' + (arrowLocation.x) + ' ' + (height));\n                    direction = direction.concat(' L' + ' ' + (tipX - arrowPadding) + ' ' + (height + arrowPadding)\n                        + ' L' + ' ' + (arrowLocation.x - arrowPadding) + ' ' + height);\n                }\n            }\n            else {\n                direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding) + ' ' + (height));\n                direction = direction.concat(' L' + ' ' + (tipX) + ' ' + (height + arrowPadding)\n                    + ' L' + ' ' + (arrowLocation.x - arrowPadding) + ' ' + height);\n            }\n        }\n        if ((arrowLocation.x - arrowPadding) > startX) {\n            direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n                + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n        }\n        else {\n            if (arrowPadding === 0) {\n                direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n                    + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n            }\n            else {\n                direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height + rY) + ' z');\n            }\n        }\n    }\n    else if (bottom) {\n        direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n            + (startY) + ' ' + (startX + rX) + ' ' + (startY) + ' L' + ' ' + (arrowLocation.x - arrowPadding) + ' ' + (startY));\n        direction = direction.concat(' L' + ' ' + (tipX) + ' ' + (arrowLocation.y));\n        direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding) + ' ' + (startY));\n        direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY)\n            + ' Q ' + (width) + ' ' + (startY) + ' ' + (width) + ' ' + (startY + rY));\n        direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + (width) + ' '\n            + (height) + ' ' + (width - rX) + ' ' + (height) +\n            ' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + (startX) + ' '\n            + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n    }\n    else if (left) {\n        direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n            + (startY) + ' ' + (startX + rX) + ' ' + (startY));\n        direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' '\n            + (startY) + ' ' + (width) + ' ' + ((controlName === 'RangeNavigator' ? 0 : (startY + rY)) + ' L' + ' ' + (width) + ' ' + (controlName === 'RangeNavigator' ? 0 : (arrowLocation.y - arrowPadding))));\n        direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (width + arrowPadding) + ' ' + 0) :\n            direction.concat(' L' + ' ' + (width + arrowPadding) + ' ' + (tipY));\n        direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y - rY)) :\n            direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y + arrowPadding));\n        direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' ' + (height) + ' ' + (width - rX) + ' ' + (height));\n        direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + startX + ' '\n            + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n    }\n    else {\n        direction = direction.concat('M' + ' ' + (startX + rX) + ' ' + (startY) + ' Q ' + (startX) + ' '\n            + (startY) + ' ' + (startX) + ' ' + ((controlName === 'RangeNavigator' ? 0 : (startY + rY)) + ' L' + ' ' + (startX) + ' ' + (controlName === 'RangeNavigator' ? 0 : (arrowLocation.y - arrowPadding))));\n        direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (startX - arrowPadding) + ' ' + 0) :\n            direction.concat(' L' + ' ' + (startX - arrowPadding) + ' ' + (tipY));\n        direction = (controlName === 'RangeNavigator') ? direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y - rY)) :\n            direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y + arrowPadding));\n        direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height - rY) + ' Q ' + startX + ' '\n            + (height) + ' ' + (startX + rX) + ' ' + (height));\n        direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (height) + ' Q ' + width + ' '\n            + (height) + ' ' + (width) + ' ' + (height - rY) +\n            ' L' + ' ' + (width) + ' ' + (startY + rY) + ' Q ' + width + ' '\n            + (startY) + ' ' + (width - rX) + ' ' + (startY) + ' z');\n    }\n    return direction;\n}\n/** @private */\nvar Size = /** @class */ (function () {\n    function Size(width, height) {\n        this.width = width;\n        this.height = height;\n    }\n    return Size;\n}());\nexport { Size };\n/** @private */\nvar Rect = /** @class */ (function () {\n    function Rect(x, y, width, height) {\n        this.x = x;\n        this.y = y;\n        this.width = width;\n        this.height = height;\n    }\n    return Rect;\n}());\nexport { Rect };\nvar Side = /** @class */ (function () {\n    function Side(bottom, right) {\n        this.isRight = right;\n        this.isBottom = bottom;\n    }\n    return Side;\n}());\nexport { Side };\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n    function CustomizeOption(id) {\n        this.id = id;\n    }\n    return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar TextOption = /** @class */ (function (_super) {\n    __extends(TextOption, _super);\n    function TextOption(id, x, y, anchor, text, transform, baseLine, labelRotation) {\n        if (transform === void 0) { transform = ''; }\n        var _this = _super.call(this, id) || this;\n        _this.transform = '';\n        _this.baseLine = 'auto';\n        _this.labelRotation = 0;\n        _this.x = x;\n        _this.y = y;\n        _this.anchor = anchor;\n        _this.text = text;\n        _this.transform = transform;\n        _this.baseLine = baseLine;\n        _this.labelRotation = labelRotation;\n        return _this;\n    }\n    return TextOption;\n}(CustomizeOption));\nexport { TextOption };\n/** @private */\nexport function getElement(id) {\n    return document.getElementById(id);\n}\n/** @private */\nexport function removeElement(id) {\n    var element = getElement(id);\n    if (element) {\n        remove(element);\n    }\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, label) {\n    var renderer = new SvgRenderer('');\n    var temp = calculateShapes(location, size, shape, options, url);\n    var htmlObject = renderer['draw' + temp.functionName](temp.renderOption);\n    htmlObject.setAttribute('aria-label', label);\n    return htmlObject;\n}\n/** @private */\nexport function calculateShapes(location, size, shape, options, url) {\n    var path;\n    var functionName = 'Path';\n    var width = size.width;\n    var height = size.height;\n    var locX = location.x;\n    var locY = location.y;\n    var x = location.x + (-width / 2);\n    var y = location.y + (-height / 2);\n    switch (shape) {\n        case 'Circle':\n        case 'Bubble':\n            functionName = 'Ellipse';\n            merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': locX, 'cy': locY });\n            break;\n        case 'Plus':\n            path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n                'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' +\n                (locY + (-height / 2));\n            merge(options, { 'd': path, stroke: options.fill });\n            break;\n        case 'Cross':\n            path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n                'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' +\n                (locY + (-height / 2));\n            merge(options, { 'd': path, stroke: options.fill });\n            break;\n        case 'HorizontalLine':\n            path = 'M' + ' ' + x + ' ' + locY + ' ' + 'L' + ' ' + (locX + (width / 2)) + ' ' + locY;\n            merge(options, { 'd': path, stroke: options.fill });\n            break;\n        case 'VerticalLine':\n            path = 'M' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' + 'L' + ' ' + locX + ' ' + (locY + (-height / 2));\n            merge(options, { 'd': path, stroke: options.fill });\n            break;\n        case 'Diamond':\n            path = 'M' + ' ' + x + ' ' + locY + ' ' +\n                'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n                'L' + ' ' + (locX + (width / 2)) + ' ' + locY + ' ' +\n                'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n                'L' + ' ' + x + ' ' + locY + ' z';\n            merge(options, { 'd': path });\n            break;\n        case 'Rectangle':\n            path = 'M' + ' ' + x + ' ' + (locY + (-height / 2)) + ' ' +\n                'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (-height / 2)) + ' ' +\n                'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n                'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n                'L' + ' ' + x + ' ' + (locY + (-height / 2)) + ' z';\n            merge(options, { 'd': path });\n            break;\n        case 'Triangle':\n            path = 'M' + ' ' + x + ' ' + (locY + (height / 2)) + ' ' +\n                'L' + ' ' + locX + ' ' + (locY + (-height / 2)) + ' ' +\n                'L' + ' ' + (locX + (width / 2)) + ' ' + (locY + (height / 2)) + ' ' +\n                'L' + ' ' + x + ' ' + (locY + (height / 2)) + ' z';\n            merge(options, { 'd': path });\n            break;\n        case 'InvertedTriangle':\n            path = 'M' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n                'L' + ' ' + locX + ' ' + (locY + (height / 2)) + ' ' +\n                'L' + ' ' + (locX - (width / 2)) + ' ' + (locY - (height / 2)) + ' ' +\n                'L' + ' ' + (locX + (width / 2)) + ' ' + (locY - (height / 2)) + ' z';\n            merge(options, { 'd': path });\n            break;\n        case 'Pentagon':\n            var eq = 72;\n            var xValue = void 0;\n            var yValue = void 0;\n            for (var i = 0; i <= 5; i++) {\n                xValue = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n                yValue = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n                if (i === 0) {\n                    path = 'M' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ';\n                }\n                else {\n                    path = path.concat('L' + ' ' + (locX + xValue) + ' ' + (locY + yValue) + ' ');\n                }\n            }\n            path = path.concat('Z');\n            merge(options, { 'd': path });\n            break;\n        case 'Image':\n            functionName = 'Image';\n            merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n            break;\n    }\n    return { renderOption: options, functionName: functionName };\n}\n/** @private */\nvar PathOption = /** @class */ (function (_super) {\n    __extends(PathOption, _super);\n    function PathOption(id, fill, width, color, opacity, dashArray, d) {\n        var _this = _super.call(this, id) || this;\n        _this.opacity = opacity;\n        _this.fill = fill;\n        _this.stroke = color;\n        _this['stroke-width'] = width;\n        _this['stroke-dasharray'] = dashArray;\n        _this.d = d;\n        return _this;\n    }\n    return PathOption;\n}(CustomizeOption));\nexport { PathOption };\n/** @private */\nexport function textElement(options, font, color, parent, themeStyle) {\n    var renderOptions = {};\n    var renderer = new SvgRenderer('');\n    renderOptions = {\n        'id': options.id,\n        'x': options.x,\n        'y': options.y,\n        'fill': color,\n        'font-size': font.size,\n        'font-style': font.fontStyle,\n        'font-family': font.fontFamily || themeStyle.fontFamily,\n        'font-weight': font.fontWeight,\n        'text-anchor': options.anchor,\n        'transform': options.transform,\n        'opacity': font.opacity,\n        'dominant-baseline': options.baseLine\n    };\n    var text = typeof options.text === 'string' ? options.text : options.text[0];\n    var htmlObject = renderer.createText(renderOptions, text);\n    if (parent) {\n        parent.appendChild(htmlObject);\n    }\n    return htmlObject;\n}\nvar TooltipLocation = /** @class */ (function () {\n    function TooltipLocation(x, y) {\n        this.x = x;\n        this.y = y;\n    }\n    return TooltipLocation;\n}());\nexport { TooltipLocation };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable security/detect-object-injection */\n/* eslint-disable no-useless-escape */\n/* eslint-disable security/detect-non-literal-regexp */\n/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable jsdoc/require-param */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\nimport { NotifyPropertyChanges, Property, Event, Complex, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { extend, compile as templateComplier, Component, resetBlazorTemplate, isBlazor, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { SvgRenderer } from '../svg-render/index';\nimport { ChildProperty, createElement, remove, Browser, Animation, animationMode } from '@syncfusion/ej2-base';\nimport { getTooltipThemeColor } from './interface';\nimport { Size, Rect, Side, measureText, getElement, findDirection, drawSymbol, textElement } from './helper';\nimport { removeElement, TextOption, TooltipLocation, PathOption, withInAreaBounds } from './helper';\n/**\n * Configures the fonts in charts.\n *\n * @private\n */\nvar TextStyle = /** @class */ (function (_super) {\n    __extends(TextStyle, _super);\n    function TextStyle() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(null)\n    ], TextStyle.prototype, \"size\", void 0);\n    __decorate([\n        Property('')\n    ], TextStyle.prototype, \"color\", void 0);\n    __decorate([\n        Property('Segoe UI')\n    ], TextStyle.prototype, \"fontFamily\", void 0);\n    __decorate([\n        Property('Normal')\n    ], TextStyle.prototype, \"fontWeight\", void 0);\n    __decorate([\n        Property('Normal')\n    ], TextStyle.prototype, \"fontStyle\", void 0);\n    __decorate([\n        Property(1)\n    ], TextStyle.prototype, \"opacity\", void 0);\n    return TextStyle;\n}(ChildProperty));\nexport { TextStyle };\n/**\n * Configures the borders in the chart.\n *\n * @private\n */\nvar TooltipBorder = /** @class */ (function (_super) {\n    __extends(TooltipBorder, _super);\n    function TooltipBorder() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('')\n    ], TooltipBorder.prototype, \"color\", void 0);\n    __decorate([\n        Property(1)\n    ], TooltipBorder.prototype, \"width\", void 0);\n    __decorate([\n        Property('')\n    ], TooltipBorder.prototype, \"dashArray\", void 0);\n    return TooltipBorder;\n}(ChildProperty));\nexport { TooltipBorder };\n/**\n * Configures the borders in the chart.\n *\n * @private\n */\nvar AreaBounds = /** @class */ (function (_super) {\n    __extends(AreaBounds, _super);\n    function AreaBounds() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(0)\n    ], AreaBounds.prototype, \"x\", void 0);\n    __decorate([\n        Property(0)\n    ], AreaBounds.prototype, \"y\", void 0);\n    __decorate([\n        Property(0)\n    ], AreaBounds.prototype, \"width\", void 0);\n    __decorate([\n        Property(0)\n    ], AreaBounds.prototype, \"height\", void 0);\n    return AreaBounds;\n}(ChildProperty));\nexport { AreaBounds };\n/**\n * Configures the borders in the chart.\n *\n * @private\n */\nvar ToolLocation = /** @class */ (function (_super) {\n    __extends(ToolLocation, _super);\n    function ToolLocation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(0)\n    ], ToolLocation.prototype, \"x\", void 0);\n    __decorate([\n        Property(0)\n    ], ToolLocation.prototype, \"y\", void 0);\n    return ToolLocation;\n}(ChildProperty));\nexport { ToolLocation };\n/**\n * Represents the Tooltip control.\n * ```html\n * <div id=\"tooltip\"/>\n * <script>\n *   var tooltipObj = new Tooltip({ isResponsive : true });\n *   tooltipObj.appendTo(\"#tooltip\");\n * </script>\n * ```\n *\n * @private\n */\nvar Tooltip = /** @class */ (function (_super) {\n    __extends(Tooltip, _super);\n    /**\n     * Constructor for creating the widget\n     *\n     * @hidden\n     */\n    function Tooltip(options, element) {\n        return _super.call(this, options, element) || this;\n    }\n    /**\n     * Initialize the event handler.\n     *\n     * @private\n     */\n    Tooltip.prototype.preRender = function () {\n        this.allowServerDataBinding = false;\n        this.initPrivateVariable();\n        if (!this.isCanvas) {\n            this.removeSVG();\n        }\n        this.createTooltipElement();\n    };\n    Tooltip.prototype.initPrivateVariable = function () {\n        this.renderer = new SvgRenderer(this.element.id);\n        this.themeStyle = getTooltipThemeColor(this.theme);\n        this.formattedText = [];\n        this.padding = 5;\n        this.highlightPadding = 3;\n        this.areaMargin = 10;\n        this.isFirst = true;\n        this.markerPoint = [];\n    };\n    Tooltip.prototype.removeSVG = function () {\n        var svgObject = document.getElementById(this.element.id + '_svg');\n        var templateObject = document.getElementById(this.element.id + 'parent_template');\n        if (this.blazorTemplate) {\n            resetBlazorTemplate(this.element.id + 'parent_template' + '_blazorTemplate');\n        }\n        if (svgObject && svgObject.parentNode) {\n            remove(svgObject);\n        }\n        if (templateObject && templateObject.parentNode) {\n            remove(templateObject);\n        }\n    };\n    /**\n     * To Initialize the control rendering.\n     */\n    Tooltip.prototype.render = function () {\n        this.fadeOuted = false;\n        if (!this.template) {\n            this.renderText(this.isFirst);\n            var argsData = {\n                cancel: false, name: 'tooltipRender', tooltip: this\n            };\n            this.trigger('tooltipRender', argsData);\n            var markerSide = this.renderTooltipElement(this.areaBounds, this.location);\n            this.drawMarker(markerSide.isBottom, markerSide.isRight, this.markerSize);\n        }\n        else {\n            this.updateTemplateFn();\n            this.createTemplate(this.areaBounds, this.location);\n        }\n        this.trigger('loaded', { tooltip: this });\n        var element = document.getElementById('chartmeasuretext');\n        if (element) {\n            remove(element);\n        }\n        this.allowServerDataBinding = true;\n    };\n    Tooltip.prototype.createTooltipElement = function () {\n        this.textElements = [];\n        if (!this.template || this.shared) {\n            // SVG element for tooltip\n            if (this.enableRTL) {\n                this.element.setAttribute('dir', 'ltr');\n            }\n            var svgObject = this.renderer.createSvg({ id: this.element.id + '_svg' });\n            this.element.appendChild(svgObject);\n            // Group to hold text and path.\n            var groupElement = document.getElementById(this.element.id + '_group');\n            if (!groupElement) {\n                groupElement = this.renderer.createGroup({ id: this.element.id + '_group' });\n                groupElement.setAttribute('transform', 'translate(0,0)');\n            }\n            svgObject.appendChild(groupElement);\n            var pathElement = this.renderer.drawPath({\n                'id': this.element.id + '_path', 'stroke-width': ((this.theme === 'Fabric' || this.theme === 'Fluent') && !this.border.width) ? 1 : this.border.width,\n                'fill': this.fill || this.themeStyle.tooltipFill, 'opacity': ((this.theme === 'TailwindDark' || this.theme === 'Tailwind' || this.theme === 'Bootstrap5' || this.theme === 'Bootstrap5Dark') && this.opacity === 0.75) ?\n                    1 : this.opacity,\n                'stroke': this.border.color || (this.theme === 'Fabric' || this.theme === 'Fluent' ? '#D2D0CE' : this.border.color)\n            });\n            groupElement.appendChild(pathElement);\n        }\n    };\n    Tooltip.prototype.drawMarker = function (isBottom, isRight, size) {\n        if (this.shapes.length <= 0) {\n            return null;\n        }\n        var shapeOption;\n        var count = 0;\n        var markerGroup = this.renderer.createGroup({ id: this.element.id + '_trackball_group' });\n        var groupElement = getElement(this.element.id + '_group');\n        if (!groupElement) {\n            return null;\n        }\n        var x = ((this.enableRTL) ? this.elementSize.width - (size / 2) :\n            (this.marginX * 2) + (size / 2)) + (isRight ? this.arrowPadding : 0);\n        for (var _i = 0, _a = this.shapes; _i < _a.length; _i++) {\n            var shape = _a[_i];\n            if (shape !== 'None') {\n                shapeOption = new PathOption(this.element.id + '_Trackball_' + count, this.palette[count], 1, '#cccccc', 1, null);\n                if (this.markerPoint[count]) {\n                    var padding = 0;\n                    if (this.header.indexOf('<br') > -1) {\n                        padding = this.header.split(/<br.*?>/g).length + count;\n                    }\n                    markerGroup.appendChild(drawSymbol(new TooltipLocation(x, this.markerPoint[count] - this.padding + (isBottom ? this.arrowPadding : padding)), shape, new Size(size, size), '', shapeOption, null));\n                }\n                count++;\n            }\n        }\n        groupElement.appendChild(markerGroup);\n    };\n    Tooltip.prototype.renderTooltipElement = function (areaBounds, location) {\n        var tooltipDiv = getElement(this.element.id);\n        var arrowLocation = new TooltipLocation(0, 0);\n        var tipLocation = new TooltipLocation(0, 0);\n        var svgObject = getElement(this.element.id + '_svg');\n        var groupElement = getElement(this.element.id + '_group');\n        var pathElement = getElement(this.element.id + '_path');\n        var rect;\n        var isTop = false;\n        var isLeft = false;\n        var isBottom = false;\n        var x = 0;\n        var y = 0;\n        if (!isNullOrUndefined(groupElement)) {\n            if (this.header !== '') {\n                this.elementSize.height += this.marginY;\n            }\n            if (this.isFixed) {\n                var width = this.elementSize.width + (2 * this.marginX);\n                var height = this.elementSize.height + (2 * this.marginY);\n                rect = new Rect(location.x, location.y, width, height);\n            }\n            else if (this.content.length > 1) {\n                rect = this.sharedTooltipLocation(areaBounds, this.location.x, this.location.y);\n                isTop = true;\n            }\n            else {\n                rect = this.tooltipLocation(areaBounds, location, arrowLocation, tipLocation);\n                if (!this.inverted) {\n                    isTop = (rect.y < (location.y + this.clipBounds.y));\n                    isBottom = !isTop;\n                    y = (isTop ? 0 : this.arrowPadding);\n                }\n                else {\n                    isLeft = (rect.x < (location.x + this.clipBounds.x));\n                    x = (isLeft ? 0 : this.arrowPadding);\n                    if (this.allowHighlight) {\n                        rect.x += isLeft ? this.highlightPadding : -(2 * this.highlightPadding);\n                    }\n                }\n            }\n            if (this.header !== '') {\n                var wrapPadding = 2;\n                var padding = 0;\n                var wrapHeader = this.isWrap ? this.wrappedText : this.header;\n                if (this.isWrap && typeof (wrapHeader) === 'string' && (wrapHeader.indexOf('<') > -1 || wrapHeader.indexOf('>') > -1)) {\n                    var textArray = wrapHeader.split('<br>');\n                    wrapPadding = textArray.length;\n                }\n                if (this.header.indexOf('<br') > -1) {\n                    padding = 5 * (this.header.split(/<br.*?>/g).length - 1);\n                }\n                var key = 'properties';\n                var font = extend({}, this.textStyle, null, true)[key];\n                var headerSize = measureText(this.isWrap ? this.wrappedText : this.header, font, this.themeStyle.textStyle).height +\n                    (this.marginY * wrapPadding) + (isBottom ? this.arrowPadding : 0) + (this.isWrap ? 5 : padding); //header padding;\n                var xLength = (this.marginX * 3) + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0);\n                var direction = 'M ' + xLength + ' ' + headerSize +\n                    'L ' + (rect.width + (!isLeft && !isTop && !isBottom ? this.arrowPadding : 0) - (this.marginX * 2)) +\n                    ' ' + headerSize;\n                var pathElement_1 = this.renderer.drawPath({\n                    'id': this.element.id + '_header_path', 'stroke-width': 1,\n                    'fill': null, 'opacity': this.theme === ('Material3' || 'Material3Dark') ? 0.2 : 0.8, 'stroke': this.themeStyle.tooltipHeaderLine, 'd': direction\n                });\n                groupElement.appendChild(pathElement_1);\n            }\n            var start = this.border.width / 2;\n            var pointRect = new Rect(start + x, start + y, rect.width - start, rect.height - start);\n            groupElement.setAttribute('opacity', '1');\n            if (this.enableAnimation && !this.isFirst && !this.crosshair) {\n                this.animateTooltipDiv(tooltipDiv, rect);\n            }\n            else {\n                this.updateDiv(tooltipDiv, rect.x, rect.y);\n            }\n            // eslint-disable-next-line no-extra-boolean-cast\n            svgObject.setAttribute('height', (rect.height + this.border.width + (!((!this.inverted)) ? 0 : this.arrowPadding) + 5).toString());\n            svgObject.setAttribute('width', (rect.width + this.border.width + (((!this.inverted)) ? 0 : this.arrowPadding) + 5).toString());\n            svgObject.setAttribute('opacity', '1');\n            if (!isNullOrUndefined(this.tooltipPlacement)) {\n                isTop = this.tooltipPlacement.indexOf('Top') > -1;\n                isBottom = this.tooltipPlacement.indexOf('Bottom') > -1;\n                isLeft = this.tooltipPlacement.indexOf('Left') > -1;\n            }\n            pathElement.setAttribute('d', findDirection(this.rx, this.ry, pointRect, arrowLocation, this.arrowPadding, isTop, isBottom, isLeft, tipLocation.x, tipLocation.y, this.controlName));\n            if (this.enableShadow && this.theme !== 'Bootstrap4') {\n                // To fix next chart initial tooltip opacity issue in tab control\n                var shadowId = this.element.id + '_shadow';\n                if (this.theme === 'Tailwind' || this.theme === 'TailwindDark'\n                    || this.theme === 'Bootstrap5' || this.theme === 'Bootstrap5Dark') {\n                    pathElement.setAttribute('box-shadow', '0px 1px 2px rgba(0, 0, 0, 0.06), 0px 1px 3px rgba(0, 0, 0, 0.1)');\n                }\n                else {\n                    pathElement.setAttribute('filter', Browser.isIE ? '' : 'url(#' + shadowId + ')');\n                }\n                var shadow = '<filter id=\"' + shadowId + '\" height=\"130%\"><feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"3\"/>';\n                shadow += '<feOffset dx=\"3\" dy=\"3\" result=\"offsetblur\"/><feComponentTransfer><feFuncA type=\"linear\" slope=\"0.5\"/>';\n                shadow += '</feComponentTransfer><feMerge><feMergeNode/><feMergeNode in=\"SourceGraphic\"/></feMerge></filter>';\n                var defElement = this.renderer.createDefs();\n                defElement.setAttribute('id', this.element.id + 'SVG_tooltip_definition');\n                groupElement.appendChild(defElement);\n                defElement.innerHTML = shadow;\n            }\n            var borderColor = ((this.theme === 'Fabric' || this.theme === 'Fluent') && !this.border.color) ? '#D2D0CE' : this.border.color;\n            pathElement.setAttribute('stroke', borderColor);\n            if (!isNullOrUndefined(this.border.dashArray)) {\n                pathElement.setAttribute('stroke-dasharray', this.border.dashArray);\n            }\n            this.changeText(new TooltipLocation(x, y), isBottom, !isLeft && !isTop && !isBottom);\n            if (this.revert) {\n                this.inverted = !this.inverted;\n                this.revert = false;\n            }\n        }\n        return new Side(isBottom, !isLeft && !isTop && !isBottom);\n    };\n    Tooltip.prototype.changeText = function (point, isBottom, isRight) {\n        var element = document.getElementById(this.element.id + '_text');\n        if (isBottom) {\n            element.setAttribute('transform', 'translate(0,' + this.arrowPadding + ')');\n        }\n        if (isRight) {\n            element.setAttribute('transform', 'translate(' + this.arrowPadding + ' 0)');\n        }\n    };\n    Tooltip.prototype.findFormattedText = function () {\n        this.formattedText = [];\n        if (this.header.replace(/<b>/g, '').replace(/<\\/b>/g, '').trim() !== '') {\n            this.formattedText = this.formattedText.concat(this.header);\n        }\n        this.formattedText = this.formattedText.concat(this.content);\n    };\n    // tslint:disable-next-line:max-func-body-length\n    Tooltip.prototype.renderText = function (isRender) {\n        var height = 0;\n        var width = 0; // Padding for text;\n        var subWidth = 0;\n        var lines;\n        var key = 'properties';\n        var font = extend({}, this.textStyle, null, true)[key];\n        var groupElement = getElement(this.element.id + '_group');\n        var tspanElement;\n        var textCollection;\n        var tspanStyle = '';\n        var line;\n        var tspanOption;\n        this.findFormattedText();\n        this.isWrap = false;\n        var isRtlEnabled = document.body.getAttribute('dir') === 'rtl';\n        var anchor = isRtlEnabled && !this.enableRTL ? 'end' : 'start';\n        this.leftSpace = this.areaBounds.x + this.location.x;\n        this.rightSpace = (this.areaBounds.x + this.areaBounds.width) - this.leftSpace;\n        var headerContent = this.header.replace(/<b>/g, '').replace(/<\\/b>/g, '').trim();\n        var isBoldTag = this.header.indexOf('<b>') > -1 && this.header.indexOf('</b>') > -1;\n        var headerWidth = measureText(this.formattedText[0], font, this.themeStyle.textStyle).width\n            + (2 * this.marginX) + this.arrowPadding;\n        var isLeftSpace = (this.location.x - headerWidth) < this.location.x;\n        var isRightSpace = (this.areaBounds.x + this.areaBounds.width) < (this.location.x + headerWidth);\n        var header;\n        var headerSpace = (headerContent !== '') ? this.marginY : 0;\n        var isRow = true;\n        var isColumn = true;\n        this.markerPoint = [];\n        var markerSize = (this.shapes.length > 0) ? 10 : 0;\n        var markerPadding = (this.shapes.length > 0) ? 5 : 0;\n        var spaceWidth = 4;\n        var subStringLength;\n        var fontSize = '12px';\n        var fontWeight = '400';\n        var labelColor = this.themeStyle.tooltipLightLabel;\n        var dy = (22 / parseFloat(fontSize)) * (parseFloat(font.size));\n        var contentWidth = [];\n        var textHeight = 0;\n        if (!isRender || this.isCanvas) {\n            removeElement(this.element.id + '_text');\n            removeElement(this.element.id + '_header_path');\n            removeElement(this.element.id + '_trackball_group');\n            removeElement(this.element.id + 'SVG_tooltip_definition');\n        }\n        // Condition to resolve the text size issue only in chart.\n        if (this.controlName === 'Chart' && parseFloat(fontSize) < parseFloat(font.size)) {\n            textHeight = (parseFloat(font.size) - parseFloat(fontSize));\n        }\n        var options = new TextOption(this.element.id + '_text', this.marginX * 2, (textHeight + this.marginY * 2 + this.padding * 2 + (this.marginY === 2 ? this.controlName === 'RangeNavigator' ? 5 : 3 : 0)), anchor, '');\n        var parentElement = textElement(options, font, font.color || this.themeStyle.tooltipBoldLabel, groupElement, this.themeStyle.textStyle);\n        var withoutHeader = this.formattedText.length === 1 && this.formattedText[0].indexOf(' : <b>') > -1;\n        var isHeader = this.header !== '';\n        var size = isHeader && isBoldTag ? 16 : 13;\n        for (var k = 0, pointsLength = this.formattedText.length; k < pointsLength; k++) {\n            textCollection = this.formattedText[k].replace(/<(b|strong)>/g, '<b>')\n                .replace(/<\\/(b|strong)>/g, '</b>')\n                .split(/<br.*?>/g);\n            if (this.isTextWrap && this.header !== this.formattedText[k] && this.formattedText[k].indexOf('<br') === -1) {\n                subStringLength = Math.round(this.leftSpace > this.rightSpace ? (this.leftSpace / size) : (this.rightSpace / size));\n                textCollection = this.formattedText[k].match(new RegExp('.{1,' + subStringLength + '}', 'g'));\n            }\n            if (k === 0 && !withoutHeader && this.isTextWrap &&\n                (this.leftSpace < headerWidth || isLeftSpace) &&\n                (this.rightSpace < headerWidth || isRightSpace)) {\n                subStringLength = Math.round(this.leftSpace > this.rightSpace ? (this.leftSpace / size) : (this.rightSpace / size));\n                header = headerContent !== '' ? headerContent : this.formattedText[k];\n                textCollection = header.match(new RegExp('.{1,' + subStringLength + '}', 'g'));\n                this.wrappedText = isBoldTag ? '<b>' + textCollection.join('<br>') + '</b>' : textCollection.join('<br>');\n                this.isWrap = textCollection.length > 1;\n            }\n            if (textCollection[0] === '') {\n                continue;\n            }\n            if ((k !== 0) || (headerContent === '')) {\n                this.markerPoint.push((headerContent !== '' ? (this.marginY) : 0) + options.y + height - (textHeight !== 0 ? ((textHeight / this.markerSize) * (parseFloat(font.size) / this.markerSize)) : 0));\n            }\n            for (var i = 0, len = textCollection.length; i < len; i++) { // string value of unicode for LTR is \\u200E\n                lines = textCollection[i].replace(/<b>/g, '<br><b>').replace(/<\\/b>/g, '</b><br>').replace(/:/g, (this.enableRTL) ? '<br>\\u200E: <br>' : '<br>\\u200E:<br>')\n                    .split('<br>');\n                if (this.enableRTL && lines.length > 0 && textCollection[i].match(/:/g)) {\n                    lines[0] = lines[0].trim();\n                    lines.reverse();\n                }\n                subWidth = 0;\n                isColumn = true;\n                height += dy;\n                for (var j = 0, len_1 = lines.length; j < len_1; j++) {\n                    line = lines[j];\n                    if (this.enableRTL && line !== '' && this.isRTLText(line)) {\n                        line = line.concat('\\u200E');\n                    }\n                    if (!/\\S/.test(line) && line !== '') {\n                        line = ' '; //to trim multiple white spaces to single white space\n                    }\n                    if ((!isColumn && line === ' ') || (line.replace(/<b>/g, '').replace(/<\\/b>/g, '').trim() !== '')) {\n                        subWidth += line !== ' ' ? spaceWidth : 0;\n                        if (isColumn && !isRow) {\n                            if (this.header.indexOf('<br') > -1 && k !== 0) {\n                                headerSpace += this.header.split(/<br.*?>/g).length;\n                            }\n                            tspanOption = {\n                                x: (this.marginX * 2) + (markerSize + markerPadding),\n                                dy: dy + ((isColumn) ? headerSpace : 0), fill: ''\n                            };\n                            headerSpace = null;\n                        }\n                        else {\n                            if (isRow && isColumn) {\n                                tspanOption = {\n                                    x: (headerContent === '') ? ((this.marginX * 2) + (markerSize + markerPadding))\n                                        : (this.marginX * 2) + (this.isWrap ? (markerSize + markerPadding) : 0)\n                                };\n                            }\n                            else {\n                                tspanOption = {};\n                            }\n                        }\n                        isColumn = false;\n                        tspanElement = this.renderer.createTSpan(tspanOption, '');\n                        parentElement.appendChild(tspanElement);\n                        if (line.indexOf('<b>') > -1 || ((isBoldTag && j === 0 && k === 0) && (isHeader || this.isWrap))) {\n                            fontWeight = '600';\n                            labelColor = this.themeStyle.tooltipBoldLabel;\n                            tspanStyle = 'font-weight:' + fontWeight;\n                            font.fontWeight = fontWeight;\n                            (tspanElement).setAttribute('fill', this.textStyle.color || labelColor);\n                        }\n                        else {\n                            tspanStyle = fontWeight === '600' ? 'font-weight:' + fontWeight : '';\n                            font.fontWeight = fontWeight;\n                            (tspanElement).setAttribute('fill', this.textStyle.color || labelColor);\n                        }\n                        if (line.indexOf('</b>') > -1 || ((isBoldTag && j === len_1 - 1 && k === 0) && (isHeader || this.isWrap))) {\n                            fontWeight = 'Normal';\n                            labelColor = this.themeStyle.tooltipLightLabel;\n                        }\n                        // eslint-disable-next-line no-useless-escape\n                        if (tspanStyle !== '') {\n                            tspanElement.style.fontWeight = tspanStyle.split('font-weight:')[1];\n                            tspanElement.style.color = tspanElement.getAttribute('fill');\n                        }\n                        // 'inherit' will apply css style from parent element.\n                        tspanElement.style.fontFamily = 'inherit';\n                        tspanElement.style.fontStyle = 'inherit';\n                        tspanElement.style.fontSize = (this.header === this.formattedText[k]) ? font.size : this.textStyle.size;\n                        tspanElement.style.fontWeight = (this.header === this.formattedText[k] && (this.header.indexOf('<b>') || this.header.indexOf('</b>')) === -1) ? (this.textStyle.fontWeight || '600') : line.indexOf('<b>') > -1 || line.indexOf('</b>') > -1 ? 'bold' : (this.textStyle.fontWeight || font.fontWeight);\n                        var textFont = extend({}, this.textStyle, null, true)[key];\n                        textFont.fontWeight = tspanElement.style.fontWeight;\n                        isRow = false;\n                        (tspanElement).textContent = line = this.getTooltipTextContent(line);\n                        subWidth += measureText(line, textFont, this.themeStyle.textStyle).width;\n                    }\n                }\n                subWidth -= spaceWidth;\n                width = Math.max(width, subWidth);\n                contentWidth.push(subWidth);\n            }\n        }\n        this.elementSize = new Size(width + (width > 0 ? (2 * this.marginX) : 0), height);\n        this.elementSize.width += (markerSize + markerPadding); // marker size + marker Spacing\n        var element = (parentElement.childNodes[0]);\n        if (headerContent !== '' && element && !this.isWrap) {\n            font.fontWeight = '600';\n            var width_1 = (this.elementSize.width + (2 * this.padding)) / 2 - measureText(headerContent, font, this.themeStyle.textStyle).width / 2;\n            element.setAttribute('x', width_1.toString());\n        }\n        this.renderContentRTL(parentElement, isHeader, markerSize + markerPadding, contentWidth);\n    };\n    Tooltip.prototype.renderContentRTL = function (textElement, isHeader, markerSize, contentWidth) {\n        if (this.enableRTL) {\n            var tspanElement = void 0;\n            var contentWidthIndex = isHeader ? 1 : 0;\n            for (var i = 0; i < textElement.childNodes.length; i++) {\n                tspanElement = (textElement.childNodes[i]);\n                if ((!isHeader || i > 0) && !isNullOrUndefined(tspanElement.getAttribute('x'))) {\n                    tspanElement.setAttribute('x', (this.elementSize.width - (markerSize + contentWidth[contentWidthIndex])).toString());\n                    contentWidthIndex++;\n                }\n            }\n        }\n    };\n    Tooltip.prototype.getTooltipTextContent = function (tooltipText) {\n        var characterCollection = tooltipText.match(/<[a-zA-Z\\/](.|\\n)*?>/g);\n        if (isNullOrUndefined(characterCollection)) {\n            return tooltipText;\n        }\n        var isRtlText = this.isRTLText(tooltipText);\n        for (var i = 0; i < characterCollection.length; i++) {\n            if (this.isValidHTMLElement(characterCollection[i].replace('<', '').replace('/', '').replace('>', '').trim())) {\n                tooltipText = tooltipText.replace(characterCollection[i], isRtlText ? '\\u200E' : '');\n            }\n        }\n        return tooltipText;\n    };\n    Tooltip.prototype.isValidHTMLElement = function (element) {\n        return document.createElement(element).toString() !== '[object HTMLUnknownElement]';\n    };\n    Tooltip.prototype.isRTLText = function (tooltipContent) {\n        return /[\\u0590-\\u07FF\\u200F\\u202B\\u202E\\uFB1D-\\uFDFD\\uFE70-\\uFEFC]/.test(tooltipContent);\n    };\n    Tooltip.prototype.createTemplate = function (areaBounds, location) {\n        var argsData = { cancel: false, name: 'tooltipRender', tooltip: this };\n        this.trigger('tooltipRender', argsData);\n        var parent = document.getElementById(this.element.id);\n        if (this.isCanvas) {\n            this.removeSVG();\n        }\n        var firstElement = parent.firstElementChild;\n        if (firstElement) {\n            remove(firstElement);\n        }\n        if (!argsData.cancel) {\n            var elem = createElement('div', { id: this.element.id + 'parent_template' });\n            var templateElement = void 0;\n            if (this.controlName === 'Chart' && this.shared) {\n                for (var i = 0; i < this.data.length; i++) {\n                    var sharedTemplateElement = this.templateFn(this.data[i], this.controlInstance, elem.id, elem.id + '_blazorTemplate', '');\n                    if (i === 0) {\n                        templateElement = sharedTemplateElement;\n                    }\n                    else {\n                        templateElement[templateElement.length - 1].outerHTML += sharedTemplateElement[0].outerHTML;\n                    }\n                }\n            }\n            else {\n                templateElement = this.templateFn(this.data, this.controlInstance, elem.id, elem.id + '_blazorTemplate', '');\n            }\n            while (templateElement && templateElement.length > 0) {\n                if (isBlazor() || templateElement.length === 1) {\n                    elem.appendChild(templateElement[0]);\n                    templateElement = null;\n                }\n                else {\n                    elem.appendChild(templateElement[0]);\n                }\n            }\n            parent.appendChild(elem);\n            var element = this.isCanvas ? elem : this.element;\n            var rect = element.getBoundingClientRect();\n            this.padding = 0;\n            this.elementSize = new Size(rect.width, rect.height);\n            var tooltipRect = this.shared ? this.sharedTooltipLocation(areaBounds, this.location.x, this.location.y)\n                : this.tooltipLocation(areaBounds, location, new TooltipLocation(0, 0), new TooltipLocation(0, 0));\n            if (this.enableAnimation && !this.isFirst && !this.crosshair) {\n                this.animateTooltipDiv(this.element, tooltipRect);\n            }\n            else {\n                this.updateDiv(element, tooltipRect.x, tooltipRect.y);\n            }\n            if (this.blazorTemplate) {\n                //Customer issue - F149037  Call back function to handle the blazor tooltip alignment issues\n                var tooltipRendered = function () {\n                    var rect1 = getElement(thisObject_1.element.id).getBoundingClientRect();\n                    thisObject_1.elementSize = new Size(rect1.width, rect1.height);\n                    var tooltipRect1 = thisObject_1.tooltipLocation(areaBounds, location, new TooltipLocation(0, 0), new TooltipLocation(0, 0));\n                    thisObject_1.updateDiv(getElement(thisObject_1.element.id), tooltipRect1.x, tooltipRect1.y);\n                };\n                // eslint-disable-next-line @typescript-eslint/no-this-alias\n                var thisObject_1 = this;\n                tooltipRendered.bind(thisObject_1, areaBounds, location);\n                updateBlazorTemplate(this.element.id + 'parent_template' + '_blazorTemplate', this.blazorTemplate.name, this.blazorTemplate.parent, undefined, tooltipRendered);\n            }\n        }\n        else {\n            remove(getElement(this.element.id + '_tooltip'));\n        }\n    };\n    Tooltip.prototype.sharedTooltipLocation = function (bounds, x, y) {\n        var width = this.elementSize.width + (2 * this.marginX);\n        var height = this.elementSize.height + (2 * this.marginY);\n        var tooltipRect = new Rect(x + 2 * this.padding, y - height - this.padding, width, height);\n        if (tooltipRect.y < bounds.y) {\n            tooltipRect.y += (tooltipRect.height + 2 * this.padding);\n        }\n        if (tooltipRect.y + tooltipRect.height > bounds.y + bounds.height) {\n            tooltipRect.y = Math.max((bounds.y + bounds.height) - (tooltipRect.height + 2 * this.padding), bounds.y);\n        }\n        if (tooltipRect.x + tooltipRect.width > bounds.x + bounds.width) {\n            tooltipRect.x = (bounds.x + this.location.x) - (tooltipRect.width + 4 * this.padding);\n        }\n        if (tooltipRect.x < bounds.x) {\n            tooltipRect.x = bounds.x;\n        }\n        return tooltipRect;\n    };\n    Tooltip.prototype.getCurrentPosition = function (bounds, symbolLocation, arrowLocation, tipLocation) {\n        var position = this.tooltipPlacement;\n        var clipX = this.clipBounds.x;\n        var clipY = this.clipBounds.y;\n        var markerHeight = this.offset;\n        var width = this.elementSize.width + (2 * this.marginX);\n        var height = this.elementSize.height + (2 * this.marginY);\n        var location = new TooltipLocation(symbolLocation.x, symbolLocation.y);\n        if (position === 'Top' || position === 'Bottom') {\n            location = new TooltipLocation(location.x + clipX - this.elementSize.width / 2 - this.padding, location.y + clipY - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight);\n            arrowLocation.x = tipLocation.x = width / 2;\n            if (position === 'Bottom') {\n                location.y = symbolLocation.y + clipY + markerHeight;\n            }\n            if (bounds.x + bounds.width < location.x + width) {\n                location.x = (bounds.width > width) ? ((bounds.x + bounds.width) - width + 6) : bounds.x;\n                arrowLocation.x = tipLocation.x = (bounds.width > width) ? (bounds.x + symbolLocation.x - location.x) : symbolLocation.x;\n            }\n            else if (bounds.x > location.x) {\n                location.x = bounds.x;\n                arrowLocation.x = tipLocation.x = symbolLocation.x;\n            }\n        }\n        else {\n            location = new TooltipLocation(location.x + clipX + markerHeight, location.y + clipY - this.elementSize.height / 2 - (this.padding));\n            arrowLocation.y = tipLocation.y = height / 2;\n            if (position === 'Left') {\n                location.x = symbolLocation.x + clipX - markerHeight - (width + this.arrowPadding);\n            }\n            if (bounds.y + bounds.height < location.y + height) {\n                location.y = (bounds.height > height) ? ((bounds.y + bounds.height) - height + 6) : bounds.y;\n                arrowLocation.y = tipLocation.y = (bounds.height > height) ? (bounds.y + symbolLocation.y - location.y) : symbolLocation.y;\n            }\n            else if (bounds.y > location.y) {\n                location.y = bounds.y;\n                arrowLocation.y = tipLocation.y = symbolLocation.y;\n            }\n        }\n        return new Rect(location.x, location.y, width, height);\n    };\n    // tslint:disable-next-line:max-func-body-length\n    Tooltip.prototype.tooltipLocation = function (bounds, symbolLocation, arrowLocation, tipLocation) {\n        if (!isNullOrUndefined(this.tooltipPlacement)) {\n            var tooltipRect = this.getCurrentPosition(bounds, symbolLocation, arrowLocation, tipLocation);\n            return tooltipRect;\n        }\n        var location = new TooltipLocation(symbolLocation.x, symbolLocation.y);\n        var width = this.elementSize.width + (2 * this.marginX);\n        var height = this.elementSize.height + (2 * this.marginY);\n        var markerHeight = this.offset;\n        var clipX = this.clipBounds.x;\n        var clipY = this.clipBounds.y;\n        var boundsX = bounds.x;\n        var boundsY = bounds.y;\n        this.outOfBounds = false;\n        if (!this.inverted) {\n            location = new TooltipLocation(location.x + clipX - this.elementSize.width / 2 - this.padding, location.y + clipY - this.elementSize.height - (2 * (this.allowHighlight ? this.highlightPadding : this.padding)) -\n                this.arrowPadding - markerHeight);\n            arrowLocation.x = tipLocation.x = width / 2;\n            if ((location.y < boundsY || (this.isNegative)) && !(this.controlName === 'Progressbar')) {\n                location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + clipY + markerHeight;\n            }\n            if (location.y + height + this.arrowPadding > boundsY + bounds.height) {\n                location.y = Math.min(symbolLocation.y, boundsY + bounds.height) + clipY\n                    - this.elementSize.height - (2 * this.padding) - this.arrowPadding - markerHeight;\n            }\n            if (((location.x + width > boundsX + bounds.width) && location.y < boundsY || (this.isNegative)) && !(this.controlName === 'Progressbar')) {\n                location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + clipY + markerHeight;\n            }\n            tipLocation.x = width / 2;\n            if (location.x < boundsX && !(this.controlName === 'Progressbar')) {\n                arrowLocation.x -= (boundsX - location.x);\n                tipLocation.x -= (boundsX - location.x);\n                location.x = boundsX;\n            }\n            if (location.x + width > boundsX + bounds.width && !(this.controlName === 'Progressbar')) {\n                arrowLocation.x += ((location.x + width) - (boundsX + bounds.width));\n                tipLocation.x += ((location.x + width) - (boundsX + bounds.width));\n                location.x -= ((location.x + width) - (boundsX + bounds.width));\n            }\n            if (location.x < boundsX && !(this.controlName === 'Progressbar')) {\n                arrowLocation.x -= (boundsX - location.x);\n                tipLocation.x -= (boundsX - location.x);\n                location.x = boundsX;\n            }\n            if (arrowLocation.x + this.arrowPadding > width - this.rx) {\n                arrowLocation.x = width - this.rx - this.arrowPadding;\n                tipLocation.x = width - this.rx - this.arrowPadding;\n            }\n            if (arrowLocation.x - this.arrowPadding < this.rx) {\n                arrowLocation.x = tipLocation.x = this.rx + this.arrowPadding;\n            }\n            if (this.controlName === 'Chart') {\n                if (((bounds.x + bounds.width) - (location.x + arrowLocation.x)) < this.areaMargin + this.arrowPadding ||\n                    (location.x + arrowLocation.x) < this.areaMargin + this.arrowPadding) {\n                    this.outOfBounds = true;\n                }\n                if (!withInAreaBounds(location.x, location.y, bounds) || this.outOfBounds) {\n                    this.inverted = !this.inverted;\n                    this.revert = true;\n                    location = new TooltipLocation(symbolLocation.x + markerHeight + clipX, symbolLocation.y + clipY - this.elementSize.height / 2 - (this.padding));\n                    tipLocation.x = arrowLocation.x = 0;\n                    tipLocation.y = arrowLocation.y = height / 2;\n                    if ((location.x + this.arrowPadding + width > boundsX + bounds.width) || (this.isNegative)) {\n                        location.x = (symbolLocation.x > boundsX + bounds.width ? bounds.width : symbolLocation.x)\n                            + clipX - markerHeight - (this.arrowPadding + width);\n                    }\n                    if (location.x < boundsX) {\n                        location.x = (symbolLocation.x < 0 ? 0 : symbolLocation.x) + markerHeight + clipX;\n                    }\n                    if (location.y <= boundsY) {\n                        tipLocation.y -= (boundsY - location.y);\n                        arrowLocation.y -= (boundsY - location.y);\n                        location.y = boundsY;\n                    }\n                    if (location.y + height >= bounds.height + boundsY) {\n                        arrowLocation.y += ((location.y + height) - (bounds.height + boundsY));\n                        tipLocation.y += ((location.y + height) - (bounds.height + boundsY));\n                        location.y -= ((location.y + height) - (bounds.height + boundsY));\n                    }\n                    if ((this.arrowPadding) + arrowLocation.y > height - this.ry) {\n                        arrowLocation.y = height - this.arrowPadding - this.ry;\n                        tipLocation.y = height;\n                    }\n                    if (arrowLocation.y - this.arrowPadding < this.ry) {\n                        arrowLocation.y = (this.arrowPadding) + this.ry;\n                        tipLocation.y = 0;\n                    }\n                }\n            }\n        }\n        else {\n            location = new TooltipLocation(location.x + clipX + markerHeight, location.y + clipY - this.elementSize.height / 2 - (this.padding));\n            arrowLocation.y = tipLocation.y = height / 2;\n            if ((location.x + width + this.arrowPadding > boundsX + bounds.width) || (this.isNegative)) {\n                location.x = (symbolLocation.x > bounds.width + bounds.x ? bounds.width : symbolLocation.x)\n                    + clipX - markerHeight - (width + this.arrowPadding);\n            }\n            if (location.x < boundsX) {\n                location.x = (symbolLocation.x < 0 ? 0 : symbolLocation.x) + clipX + markerHeight;\n            }\n            if ((location.x + width + this.arrowPadding > boundsX + bounds.width)) {\n                location.x = (symbolLocation.x > bounds.width + bounds.x ? bounds.width : symbolLocation.x)\n                    + clipX - markerHeight - (width + this.arrowPadding);\n            }\n            if (location.y <= boundsY) {\n                arrowLocation.y -= (boundsY - location.y);\n                tipLocation.y -= (boundsY - location.y);\n                location.y = boundsY;\n            }\n            if (location.y + height >= boundsY + bounds.height) {\n                arrowLocation.y += ((location.y + height) - (boundsY + bounds.height));\n                tipLocation.y += ((location.y + height) - (boundsY + bounds.height));\n                location.y -= ((location.y + height) - (boundsY + bounds.height));\n            }\n            if (arrowLocation.y + this.arrowPadding > height - this.ry) {\n                arrowLocation.y = height - this.ry - this.arrowPadding;\n                tipLocation.y = height;\n            }\n            if (arrowLocation.y - this.arrowPadding < this.ry) {\n                arrowLocation.y = tipLocation.y = this.ry + this.arrowPadding;\n            }\n            if (this.controlName === 'Chart') {\n                if ((location.y + arrowLocation.y) < this.areaMargin + this.arrowPadding ||\n                    ((bounds.y + bounds.height) - (location.y + arrowLocation.y)) < this.areaMargin + this.arrowPadding) {\n                    this.outOfBounds = true;\n                }\n                if (!withInAreaBounds(location.x, location.y, bounds) || this.outOfBounds) {\n                    this.inverted = !this.inverted;\n                    location = new TooltipLocation(symbolLocation.x + clipX - this.padding - this.elementSize.width / 2, symbolLocation.y + clipY - this.elementSize.height - (2 * this.padding) - markerHeight - this.arrowPadding);\n                    this.revert = true;\n                    tipLocation.x = arrowLocation.x = width / 2;\n                    tipLocation.y = arrowLocation.y = 0;\n                    if (location.y < boundsY || (this.isNegative)) {\n                        location.y = (symbolLocation.y < 0 ? 0 : symbolLocation.y) + markerHeight + clipY;\n                    }\n                    if (location.y + this.arrowPadding + height > boundsY + bounds.height) {\n                        location.y = Math.min(symbolLocation.y, boundsY + bounds.height) + clipY\n                            - this.elementSize.height - (2 * this.padding) - markerHeight - this.arrowPadding;\n                    }\n                    tipLocation.x = width / 2;\n                    if (location.x < boundsX) {\n                        tipLocation.x -= (boundsX - location.x);\n                        arrowLocation.x -= (boundsX - location.x);\n                        location.x = boundsX;\n                    }\n                    if (location.x + width > bounds.width + boundsX) {\n                        arrowLocation.x += ((location.x + width) - (bounds.width + boundsX));\n                        tipLocation.x += ((location.x + width) - (bounds.width + boundsX));\n                        location.x -= ((location.x + width) - (bounds.width + boundsX));\n                    }\n                    if ((this.arrowPadding) + arrowLocation.x > width - this.rx) {\n                        tipLocation.x = width - this.rx - (this.arrowPadding);\n                        arrowLocation.x = width - this.rx - (this.arrowPadding);\n                    }\n                    if (arrowLocation.x - (this.arrowPadding) < this.rx) {\n                        arrowLocation.x = tipLocation.x = this.rx + (this.arrowPadding);\n                    }\n                }\n            }\n        }\n        return new Rect(location.x, location.y, width, height);\n    };\n    Tooltip.prototype.animateTooltipDiv = function (tooltipDiv, rect) {\n        var _this = this;\n        var x = parseFloat(tooltipDiv.style.left);\n        var y = parseFloat(tooltipDiv.style.top);\n        var currenDiff;\n        new Animation({}).animate(tooltipDiv, {\n            duration: (this.duration === 0 && animationMode === 'Enable') ? 300 : this.duration,\n            progress: function (args) {\n                currenDiff = (args.timeStamp / args.duration);\n                tooltipDiv.style.animation = null;\n                if ((_this.controlName === 'Chart' && _this.shared) && !_this.enableRTL) {\n                    tooltipDiv.style.transition = isBlazor() ? 'transform 0.3s' : 'transform 0.1s';\n                    tooltipDiv.style.transform = 'translate(' + (x + currenDiff * (rect.x - x)) + 'px,' + (y + currenDiff * (rect.y - y)) + 'px)';\n                    tooltipDiv.style.left = '';\n                    tooltipDiv.style.top = '';\n                }\n                else {\n                    tooltipDiv.style.left = (x + currenDiff * (rect.x - x)) + 'px';\n                    tooltipDiv.style.top = (y + currenDiff * (rect.y - y)) + 'px';\n                    tooltipDiv.style.transform = _this.controlName === 'RangeNavigator' ? tooltipDiv.style.transform : '';\n                }\n            },\n            end: function (model) {\n                _this.updateDiv(tooltipDiv, rect.x, rect.y);\n                _this.trigger('animationComplete', { tooltip: _this });\n            }\n        });\n    };\n    Tooltip.prototype.updateDiv = function (tooltipDiv, x, y) {\n        if ((this.controlName === 'Chart' && this.shared && !this.crosshair) && !this.enableRTL) {\n            tooltipDiv.style.transform = 'translate(' + x + 'px,' + y + 'px)';\n            tooltipDiv.style.left = '';\n            tooltipDiv.style.top = '';\n        }\n        else {\n            tooltipDiv.style.left = x + 'px';\n            tooltipDiv.style.top = y + 'px';\n            tooltipDiv.style.transform = this.controlName === 'RangeNavigator' ? tooltipDiv.style.transform : '';\n        }\n    };\n    Tooltip.prototype.updateTemplateFn = function () {\n        if (this.template) {\n            try {\n                if (typeof this.template !== 'function' && document.querySelectorAll(this.template).length) {\n                    this.templateFn = templateComplier(document.querySelector(this.template).innerHTML.trim());\n                }\n                else {\n                    this.templateFn = templateComplier(this.template);\n                }\n            }\n            catch (e) {\n                this.templateFn = templateComplier(this.template);\n            }\n        }\n    };\n    /** @private */\n    Tooltip.prototype.fadeOut = function () {\n        var _this = this;\n        var tooltipElement = (this.isCanvas && !this.template) ? getElement(this.element.id + '_svg') :\n            getElement(this.element.id);\n        var tooltipDiv = getElement(this.element.id);\n        if (tooltipElement) {\n            var tooltipGroup_1 = tooltipElement.firstChild;\n            if (tooltipGroup_1.nodeType !== Node.ELEMENT_NODE) {\n                tooltipGroup_1 = tooltipElement.firstElementChild;\n            }\n            if (this.isCanvas && !this.template) {\n                tooltipGroup_1 = document.getElementById(this.element.id + '_group') ? document.getElementById(this.element.id + '_group') :\n                    tooltipGroup_1;\n            }\n            if (!tooltipGroup_1) {\n                return null;\n            }\n            var opacity_1 = parseFloat(tooltipGroup_1.getAttribute('opacity'));\n            opacity_1 = !isNullOrUndefined(opacity_1) ? opacity_1 : 1;\n            new Animation({}).animate(tooltipGroup_1, {\n                duration: 200,\n                progress: function (args) {\n                    //  tooltipGroup.removeAttribute('e-animate');\n                    _this.progressAnimation(tooltipGroup_1, opacity_1, (args.timeStamp / args.duration));\n                },\n                end: function () {\n                    _this.fadeOuted = true;\n                    _this.endAnimation(tooltipGroup_1);\n                    tooltipDiv.style.transition = '';\n                }\n            });\n        }\n    };\n    Tooltip.prototype.progressAnimation = function (tooltipGroup, opacity, timeStamp) {\n        tooltipGroup.style.animation = '';\n        tooltipGroup.setAttribute('opacity', (opacity - timeStamp).toString());\n    };\n    /*\n     * @hidden\n     */\n    Tooltip.prototype.endAnimation = function (tooltipGroup) {\n        tooltipGroup.setAttribute('opacity', '0');\n        if (this.template) {\n            tooltipGroup.style.display = 'none';\n        }\n        this.trigger('animationComplete', { tooltip: this });\n    };\n    /**\n     * Get the properties to be maintained in the persisted state.\n     *\n     * @private\n     */\n    Tooltip.prototype.getPersistData = function () {\n        var keyEntity = [];\n        return this.addOnPersist(keyEntity);\n    };\n    /**\n     * Get component name\n     *\n     *  @private\n     */\n    Tooltip.prototype.getModuleName = function () {\n        return 'tooltip';\n    };\n    /**\n     * To destroy the accumulationcharts\n     *\n     * @private\n     */\n    Tooltip.prototype.destroy = function () {\n        _super.prototype.destroy.call(this);\n        this.element.classList.remove('e-tooltip');\n    };\n    /**\n     * Called internally if any of the property value changed.\n     *\n     * @returns {void}\n     * @private\n     */\n    Tooltip.prototype.onPropertyChanged = function (newProp, oldProp) {\n        if (this.blazorTemplate) {\n            resetBlazorTemplate(this.element.id + 'parent_template' + '_blazorTemplate');\n        }\n        this.isFirst = false;\n        this.render();\n    };\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"enable\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"shared\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"crosshair\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"enableShadow\", void 0);\n    __decorate([\n        Property(null)\n    ], Tooltip.prototype, \"fill\", void 0);\n    __decorate([\n        Property('')\n    ], Tooltip.prototype, \"header\", void 0);\n    __decorate([\n        Property(0.75)\n    ], Tooltip.prototype, \"opacity\", void 0);\n    __decorate([\n        Complex({ size: '12px', fontWeight: null, color: null, fontStyle: 'Normal', fontFamily: null }, TextStyle)\n    ], Tooltip.prototype, \"textStyle\", void 0);\n    __decorate([\n        Property(null)\n    ], Tooltip.prototype, \"template\", void 0);\n    __decorate([\n        Property(true)\n    ], Tooltip.prototype, \"enableAnimation\", void 0);\n    __decorate([\n        Property(300)\n    ], Tooltip.prototype, \"duration\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"inverted\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"isNegative\", void 0);\n    __decorate([\n        Complex({ color: null, width: null }, TooltipBorder)\n    ], Tooltip.prototype, \"border\", void 0);\n    __decorate([\n        Property([])\n    ], Tooltip.prototype, \"content\", void 0);\n    __decorate([\n        Property(10)\n    ], Tooltip.prototype, \"markerSize\", void 0);\n    __decorate([\n        Complex({ x: 0, y: 0 }, ToolLocation)\n    ], Tooltip.prototype, \"clipBounds\", void 0);\n    __decorate([\n        Property([])\n    ], Tooltip.prototype, \"palette\", void 0);\n    __decorate([\n        Property([])\n    ], Tooltip.prototype, \"shapes\", void 0);\n    __decorate([\n        Complex({ x: 0, y: 0 }, ToolLocation)\n    ], Tooltip.prototype, \"location\", void 0);\n    __decorate([\n        Property(0)\n    ], Tooltip.prototype, \"offset\", void 0);\n    __decorate([\n        Property(4)\n    ], Tooltip.prototype, \"rx\", void 0);\n    __decorate([\n        Property(4)\n    ], Tooltip.prototype, \"ry\", void 0);\n    __decorate([\n        Property(5)\n    ], Tooltip.prototype, \"marginX\", void 0);\n    __decorate([\n        Property(5)\n    ], Tooltip.prototype, \"marginY\", void 0);\n    __decorate([\n        Property(7)\n    ], Tooltip.prototype, \"arrowPadding\", void 0);\n    __decorate([\n        Property(null)\n    ], Tooltip.prototype, \"data\", void 0);\n    __decorate([\n        Property('Material')\n    ], Tooltip.prototype, \"theme\", void 0);\n    __decorate([\n        Complex({ x: 0, y: 0, width: 0, height: 0 }, AreaBounds)\n    ], Tooltip.prototype, \"areaBounds\", void 0);\n    __decorate([\n        Property(null)\n    ], Tooltip.prototype, \"availableSize\", void 0);\n    __decorate([\n        Property()\n    ], Tooltip.prototype, \"blazorTemplate\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"isCanvas\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"isTextWrap\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"isFixed\", void 0);\n    __decorate([\n        Property(null)\n    ], Tooltip.prototype, \"tooltipPlacement\", void 0);\n    __decorate([\n        Property(null)\n    ], Tooltip.prototype, \"controlInstance\", void 0);\n    __decorate([\n        Property('')\n    ], Tooltip.prototype, \"controlName\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"tooltipRender\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"loaded\", void 0);\n    __decorate([\n        Event()\n    ], Tooltip.prototype, \"animationComplete\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"enableRTL\", void 0);\n    __decorate([\n        Property(false)\n    ], Tooltip.prototype, \"allowHighlight\", void 0);\n    Tooltip = __decorate([\n        NotifyPropertyChanges\n    ], Tooltip);\n    return Tooltip;\n}(Component));\nexport { Tooltip };\n","//! moment.js locale configuration\n//! locale : Urdu [ur]\n//! author : Sawood Alam : https://github.com/ibnesayeed\n//! author : Zack : https://github.com/ZackVision\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'جنوری',\n            'فروری',\n            'مارچ',\n            'اپریل',\n            'مئی',\n            'جون',\n            'جولائی',\n            'اگست',\n            'ستمبر',\n            'اکتوبر',\n            'نومبر',\n            'دسمبر',\n        ],\n        days = ['اتوار', 'پیر', 'منگل', 'بدھ', 'جمعرات', 'جمعہ', 'ہفتہ'];\n\n    var ur = moment.defineLocale('ur', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[آج بوقت] LT',\n            nextDay: '[کل بوقت] LT',\n            nextWeek: 'dddd [بوقت] LT',\n            lastDay: '[گذشتہ روز بوقت] LT',\n            lastWeek: '[گذشتہ] dddd [بوقت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s بعد',\n            past: '%s قبل',\n            s: 'چند سیکنڈ',\n            ss: '%d سیکنڈ',\n            m: 'ایک منٹ',\n            mm: '%d منٹ',\n            h: 'ایک گھنٹہ',\n            hh: '%d گھنٹے',\n            d: 'ایک دن',\n            dd: '%d دن',\n            M: 'ایک ماہ',\n            MM: '%d ماہ',\n            y: 'ایک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ur;\n\n})));\n","//! moment.js locale configuration\n//! locale : siSwati [ss]\n//! author : Nicolai Davies<mail@nicolai.io> : https://github.com/nicolaidavies\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ss = moment.defineLocale('ss', {\n        months: \"Bhimbidvwane_Indlovana_Indlov'lenkhulu_Mabasa_Inkhwekhweti_Inhlaba_Kholwane_Ingci_Inyoni_Imphala_Lweti_Ingongoni\".split(\n            '_'\n        ),\n        monthsShort: 'Bhi_Ina_Inu_Mab_Ink_Inh_Kho_Igc_Iny_Imp_Lwe_Igo'.split('_'),\n        weekdays:\n            'Lisontfo_Umsombuluko_Lesibili_Lesitsatfu_Lesine_Lesihlanu_Umgcibelo'.split(\n                '_'\n            ),\n        weekdaysShort: 'Lis_Umb_Lsb_Les_Lsi_Lsh_Umg'.split('_'),\n        weekdaysMin: 'Li_Us_Lb_Lt_Ls_Lh_Ug'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Namuhla nga] LT',\n            nextDay: '[Kusasa nga] LT',\n            nextWeek: 'dddd [nga] LT',\n            lastDay: '[Itolo nga] LT',\n            lastWeek: 'dddd [leliphelile] [nga] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'nga %s',\n            past: 'wenteka nga %s',\n            s: 'emizuzwana lomcane',\n            ss: '%d mzuzwana',\n            m: 'umzuzu',\n            mm: '%d emizuzu',\n            h: 'lihora',\n            hh: '%d emahora',\n            d: 'lilanga',\n            dd: '%d emalanga',\n            M: 'inyanga',\n            MM: '%d tinyanga',\n            y: 'umnyaka',\n            yy: '%d iminyaka',\n        },\n        meridiemParse: /ekuseni|emini|entsambama|ebusuku/,\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'ekuseni';\n            } else if (hours < 15) {\n                return 'emini';\n            } else if (hours < 19) {\n                return 'entsambama';\n            } else {\n                return 'ebusuku';\n            }\n        },\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ekuseni') {\n                return hour;\n            } else if (meridiem === 'emini') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'entsambama' || meridiem === 'ebusuku') {\n                if (hour === 0) {\n                    return 0;\n                }\n                return hour + 12;\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: '%d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ss;\n\n})));\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CostAndPricingReportTemplate.vue?vue&type=style&index=0&id=11582c69&prod&lang=css\"","/* eslint-disable @typescript-eslint/tslint/config */\n/* eslint-disable max-len */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable jsdoc/require-param */\nimport { Animation, animationMode, isNullOrUndefined, remove } from '@syncfusion/ej2-base';\nimport { DoubleRange } from '../utils/double-range';\nimport { appendChildElement, redrawElement, pathAnimation, valueToCoefficient, getVisiblePoints, colorNameToHex, checkColorFormat, applyZLight } from '../../common/utils/helper';\nimport { getAnimationFunction, getPoint, getMinPointsDelta } from '../../common/utils/helper';\nimport { PathOption, Rect } from '@syncfusion/ej2-svg-base';\nimport { pointRender } from '../../common/model/constants';\n/**\n * Column Series Base\n */\nvar ColumnBase = /** @class */ (function () {\n    function ColumnBase() {\n    }\n    ColumnBase.prototype.getSideBySideInfo = function (series) {\n        if (series.chart.enableSideBySidePlacement && !series.position) {\n            this.getSideBySidePositions(series);\n        }\n        if (series.columnWidthInPixel) {\n            return new DoubleRange(0, 0);\n        }\n        var position = series.type === 'Histogram' || !series.chart.enableSideBySidePlacement ? 0 : series.position;\n        var rectCount = series.type === 'Histogram' || !series.chart.enableSideBySidePlacement ? 1 : series.rectCount;\n        series.isRectSeries = true;\n        var visibleSeries = series.chart.visibleSeries;\n        var seriesSpacing = series.chart.enableSideBySidePlacement ? series.columnSpacing : 0; // Column Spacing\n        var pointSpacing = (series.columnWidth === null || isNaN(+series.columnWidth)) ? ((series.type === 'Histogram') ? 1 : 0.7) :\n            Math.min(series.columnWidth, 1); // Column width\n        var minimumPointDelta = getMinPointsDelta(series.xAxis, visibleSeries);\n        var width = minimumPointDelta * pointSpacing;\n        var radius;\n        var location = (position) / rectCount - 0.5;\n        var doubleRange = new DoubleRange(location, location + (1 / rectCount));\n        if (!(isNaN(doubleRange.start) || isNaN(doubleRange.end))) {\n            if (series.groupName && series.type.indexOf('Stacking') === -1) {\n                var mainColumnWidth_1 = 0.7;\n                series.chart.series.filter(function (series) { if (series.columnWidth > mainColumnWidth_1) {\n                    mainColumnWidth_1 = series.columnWidth;\n                } });\n                var mainWidth = minimumPointDelta * mainColumnWidth_1;\n                var mainDoubleRange = new DoubleRange(doubleRange.start * mainWidth, doubleRange.end * mainWidth);\n                var difference = ((mainDoubleRange.delta) - (doubleRange.end * width - doubleRange.start * width)) / 2;\n                doubleRange = new DoubleRange(mainDoubleRange.start + difference, mainDoubleRange.end - difference);\n            }\n            else {\n                doubleRange = new DoubleRange(doubleRange.start * width, doubleRange.end * width);\n            }\n            radius = seriesSpacing * doubleRange.delta;\n            doubleRange = new DoubleRange(doubleRange.start + radius / 2, doubleRange.end - radius / 2);\n        }\n        return doubleRange;\n    };\n    /**\n     * To get the rect values.\n     *\n     * @returns {Rect} rect region values\n     * @private\n     */\n    ColumnBase.prototype.getRectangle = function (x1, y1, x2, y2, series) {\n        var point1 = getPoint(x1, y1, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n        var point2 = getPoint(x2, y2, series.xAxis, series.yAxis, series.chart.requireInvertedAxis);\n        return new Rect(Math.min(point1.x, point2.x), Math.min(point1.y, point2.y), Math.abs(point2.x - point1.x), Math.abs(point2.y - point1.y));\n    };\n    /**\n     * To draw the cylindrical shape for points.\n     *\n     * @returns {void}\n     * @private\n     */\n    ColumnBase.prototype.drawCylinder = function (options, element, cylinderSeriesOption, rect, series) {\n        var width = rect.width;\n        var height = rect.height;\n        if (series.chart.enableCanvas) {\n            var ctx = series.chart.canvasRender.ctx;\n            var canvasCtx = ctx;\n            ctx.save();\n            var gradientColor = colorNameToHex(options.fill);\n            var x = rect.x + series.clipRect.x;\n            var y = rect.y + series.clipRect.y;\n            var arc = 2 * Math.PI + 0.1;\n            var rx = void 0, ry = void 0, cx1 = void 0, cx2 = void 0, cy1 = void 0, cy2 = void 0, x1 = void 0, x2 = void 0, y1 = void 0, y2 = void 0, cx = void 0, cy = void 0, xl = void 0, yl = void 0, xPos = void 0, yPos = void 0, step = void 0, rxt = void 0, ryt = void 0;\n            var gx1 = 0;\n            var gx2 = 0;\n            var gy1 = 0;\n            var gy2 = 0;\n            var ini = 0;\n            ctx.fillStyle = applyZLight(gradientColor, 0.9);\n            ctx.lineWidth = 0;\n            ctx.strokeStyle = applyZLight(gradientColor, 0.9);\n            ctx.globalAlpha = options.opacity;\n            if (cylinderSeriesOption.isColumn) {\n                gx1 = x;\n                gx2 = width + x;\n                rx = width / 2;\n                ry = rx / 4;\n                cx2 = cx1 = x + rx;\n                y2 = cy1 = y - ry;\n                x2 = x;\n                x1 = x + width;\n                cy2 = y1 = y + height - ry;\n                step = Math.PI;\n                rxt = -rx;\n                ryt = ry;\n                if (cylinderSeriesOption.stacking) {\n                    if (!cylinderSeriesOption.isLastSeries) {\n                        y2 = cy1 = y + ry;\n                    }\n                }\n            }\n            else {\n                gy2 = height + y;\n                gy1 = y;\n                ry = height / 2;\n                rx = ry / 4;\n                x2 = cx1 = x + rx;\n                x1 = cx2 = x + width + rx;\n                y1 = y + height;\n                y2 = y;\n                cy2 = cy1 = y + ry;\n                ini = Math.PI / 2;\n                step = Math.PI * 1.5;\n                if (cylinderSeriesOption.stacking) {\n                    if (!cylinderSeriesOption.isLastSeries) {\n                        x1 = cx2 = x + width - rx;\n                    }\n                }\n                ry = -ry;\n                rx = -rx;\n                rxt = rx;\n                ryt = -ry;\n            }\n            var color = applyZLight(gradientColor, 0.7);\n            var gradient = ctx.createLinearGradient(gx1, gy1, gx2, gy2);\n            gradient.addColorStop(0, gradientColor);\n            gradient.addColorStop(0.3, color);\n            gradient.addColorStop(0.7, color);\n            gradient.addColorStop(1, gradientColor);\n            for (var j = 1; j <= 4; j++) {\n                var i = 0;\n                if (j < 4) {\n                    ctx.beginPath();\n                }\n                if (j % 2 === 0) {\n                    cx = cx2;\n                    cy = cy2;\n                    xl = x2;\n                    yl = y2;\n                }\n                else {\n                    cx = cx1;\n                    cy = cy1;\n                    xl = x1;\n                    yl = y1;\n                }\n                if (j === 4) {\n                    rx = rxt;\n                    ry = ryt;\n                    ctx.fillStyle = gradient;\n                }\n                if (j > 2) {\n                    i = ini;\n                    arc = step;\n                }\n                for (; i <= arc; i += 0.1) {\n                    xPos = cx - (rx * Math.cos(i));\n                    yPos = cy + (ry * Math.sin(i));\n                    if (i === 0) {\n                        ctx.moveTo(xPos, yPos);\n                    }\n                    else {\n                        ctx.lineTo(xPos, yPos);\n                    }\n                }\n                if (j > 2) {\n                    ctx.lineTo(xl, yl);\n                }\n                if (j !== 3) {\n                    ctx.stroke();\n                    ctx.fill();\n                }\n            }\n            if (options.id.indexOf('Series') >= 0) {\n                ctx.clip();\n                ctx.restore();\n                ctx = canvasCtx;\n            }\n        }\n        else {\n            var chart = series.chart;\n            var x = rect.x;\n            var y = rect.y;\n            var id = options.id;\n            var gradientColor = options.fill;\n            var fillColor = gradientColor;\n            var format = checkColorFormat(gradientColor);\n            if (!format) {\n                gradientColor = colorNameToHex(gradientColor);\n            }\n            var AEx = 0;\n            var AEy = 0;\n            var LX = 0;\n            var LY = 0;\n            var GX = 0;\n            var GY = 0;\n            var X = void 0, Y = void 0, X1 = void 0, Y1 = void 0, X2 = void 0, Y2 = void 0, rx = void 0, ry = void 0;\n            var i = 2;\n            if (cylinderSeriesOption.isColumn) {\n                rx = width / 2;\n                ry = rx / 4;\n                X = X1 = x;\n                Y = ry < y ? y - ry : cylinderSeriesOption.stacking ? y + ry : (y - ry);\n                Y1 = Y;\n                AEx = 2 * rx;\n                LY = ry < y ? height : (height < 2 * ry ? height : cylinderSeriesOption.stacking ? height - (2 * ry) : height);\n                X2 = X;\n                Y2 = ry < y ? Y + height : (height < Y ? height + Y : cylinderSeriesOption.stacking ? height + (y - ry) : height + Y);\n                GX = 100;\n                if (cylinderSeriesOption.stacking) {\n                    if (!cylinderSeriesOption.isLastSeries) {\n                        Y = Y1 = y + ry;\n                        LY = height < rx / 2 ? height : height - rx / 2;\n                    }\n                }\n            }\n            else {\n                ry = height / 2;\n                rx = ry / 4;\n                Y = Y1 = y;\n                X = X1 = Math.abs(x - rx);\n                AEy = 2 * ry;\n                LX = width;\n                X2 = X + width;\n                Y2 = Y;\n                GY = 100;\n                if (cylinderSeriesOption.stacking) {\n                    if (!cylinderSeriesOption.isLastSeries) {\n                        X2 = (X + width - rx * 2);\n                        LX = width - rx * 2;\n                    }\n                }\n            }\n            remove(this.element);\n            while (i--) {\n                options.d = 'M' + X.toString() + ',' + Y.toString() + 'a' + rx.toString() + ',' + ry.toString() + ' 0 1,0 ' + AEx.toString() + ',' + AEy.toString() + 'a' + rx.toString() + ',' + ry.toString() + ' 0 1,0 ' + (-1 * AEx).toString() + ',' + (-1 * AEy).toString();\n                options.id = id + '_' + 'Region_' + i;\n                options.fill = applyZLight(gradientColor, 0.9);\n                if (i % 2 === 0 && series.type !== 'StackingBar100' && series.type !== 'StackingBar' && series.type !== 'Bar') {\n                    options.fill = options.fill + '10';\n                }\n                this.element = chart.renderer.drawPath(this.options, new Int32Array([series.clipRect.x, series.clipRect.y]));\n                appendChildElement(series.chart.enableCanvas, series.seriesElement, this.element, chart.redraw);\n                X = X2;\n                Y = Y2;\n            }\n            options.d = 'M' + X1.toString() + ',' + Y1.toString() + 'a' + rx.toString() + ',' + ry.toString() + ' 0 1,0 ' + AEx.toString() + ',' + AEy.toString() + 'l' + LX.toString() + ' ' + LY.toString() + 'a' + rx.toString() + ',' + ry.toString() + ' 0 1,1 ' + (-1 * AEx).toString() + ',' + (-1 * AEy).toString() + ' z';\n            options.id = id + '_' + 'Region_2';\n            options.fill = applyZLight(gradientColor, 0.7);\n            var optiong = void 0;\n            if (fillColor.indexOf('url') === -1) {\n                if (!document.getElementById(id)) {\n                    optiong = { 'id': id, x1: '0%', y1: '0%', x2: GX.toString() + '%', y2: GY.toString() + '%' };\n                    var gradientElement = [{ colorStop: '0%', color: gradientColor }, { colorStop: '30%', color: applyZLight(gradientColor, 0.7) }, { colorStop: '70%', color: applyZLight(gradientColor, 0.7) }, { colorStop: '100%', color: gradientColor }];\n                    this.drawGradient(optiong, gradientElement, series);\n                }\n                options.fill = 'url(#' + optiong.id + ')';\n            }\n            this.element = chart.renderer.drawPath(this.options, new Int32Array([series.clipRect.x, series.clipRect.y]));\n            appendChildElement(series.chart.enableCanvas, series.seriesElement, this.element, chart.redraw);\n        }\n    };\n    /**\n     * To get the gradient of each points.\n     *\n     * @returns {void}\n     * @private\n     */\n    ColumnBase.prototype.drawGradient = function (optiong, gradientElement, series) {\n        var chart = series.chart;\n        var defElement = chart.renderer.createDefs();\n        var xmlns = 'http://www.w3.org/2000/svg';\n        var linearGradientElement = document.createElementNS(xmlns, 'linearGradient');\n        linearGradientElement.setAttribute('id', optiong.id);\n        linearGradientElement.setAttribute('x1', optiong.x1);\n        linearGradientElement.setAttribute('y1', optiong.y1);\n        linearGradientElement.setAttribute('x2', optiong.x2);\n        linearGradientElement.setAttribute('y2', optiong.y2);\n        for (var i = 0; i < gradientElement.length; i++) {\n            var stopElement = document.createElementNS(xmlns, 'stop');\n            stopElement.setAttribute('offset', gradientElement[i].colorStop);\n            stopElement.setAttribute('stop-color', gradientElement[i].color);\n            stopElement.setAttribute('stop-opacity', '1');\n            linearGradientElement.appendChild(stopElement);\n        }\n        series.seriesElement.appendChild(defElement);\n        defElement.appendChild(linearGradientElement);\n    };\n    /**\n     * To get the position of each series.\n     *\n     * @returns {void}\n     * @private\n     */\n    ColumnBase.prototype.getSideBySidePositions = function (series) {\n        var chart = series.chart;\n        for (var _i = 0, _a = chart.columns; _i < _a.length; _i++) {\n            var columnItem = _a[_i];\n            for (var _b = 0, _c = chart.rows; _b < _c.length; _b++) {\n                var item = _c[_b];\n                this.findRectPosition(series.findSeriesCollection(columnItem, item, false));\n            }\n        }\n    };\n    ColumnBase.prototype.findRectPosition = function (seriesCollection) {\n        var groupingValues = [];\n        var vSeries = { rectCount: 0, position: null };\n        for (var i = 0; i < seriesCollection.length; i++) {\n            var value = seriesCollection[i];\n            if (value.type.indexOf('Stacking') !== -1 || value.groupName !== '') {\n                var groupName = value.type.indexOf('Stacking') !== -1 ? value.stackingGroup : value.type + value.groupName;\n                if (groupName) {\n                    if (groupingValues[groupName] === undefined) {\n                        value.position = vSeries.rectCount;\n                        groupingValues[groupName] = vSeries.rectCount++;\n                    }\n                    else {\n                        value.position = groupingValues[groupName];\n                    }\n                }\n                else {\n                    if (vSeries.position === null) {\n                        value.position = vSeries.rectCount;\n                        vSeries.position = vSeries.rectCount++;\n                    }\n                    else {\n                        value.position = vSeries.position;\n                    }\n                }\n            }\n            else {\n                value.position = vSeries.rectCount++;\n            }\n        }\n        for (var i = 0; i < seriesCollection.length; i++) {\n            var value = seriesCollection[i];\n            value.rectCount = vSeries.rectCount;\n        }\n    };\n    /**\n     * Updates the symbollocation for points\n     *\n     * @returns {void}\n     * @private\n     */\n    ColumnBase.prototype.updateSymbolLocation = function (point, rect, series) {\n        if (!series.chart.requireInvertedAxis) {\n            this.updateXRegion(point, rect, series);\n        }\n        else {\n            this.updateYRegion(point, rect, series);\n        }\n        if (series.type === 'Histogram') {\n            point.minimum = +point.x - series.histogramValues.binWidth / 2;\n            point.maximum = +point.x + series.histogramValues.binWidth / 2;\n        }\n    };\n    /**\n     * Update the region for the point.\n     *\n     * @returns {void}\n     * @private\n     */\n    ColumnBase.prototype.updateXRegion = function (point, rect, series) {\n        point.symbolLocations.push({\n            x: rect.x + (rect.width) / 2,\n            y: (series.seriesType === 'BoxPlot' || series.seriesType.indexOf('HighLow') !== -1 ||\n                (point.yValue >= 0 === !series.yAxis.isAxisInverse)) ? rect.y : (rect.y + rect.height)\n        });\n        this.getRegion(point, rect, series);\n        if (series.type === 'RangeColumn') {\n            point.symbolLocations.push({\n                x: rect.x + (rect.width) / 2,\n                y: rect.y + rect.height\n            });\n        }\n    };\n    /**\n     * Update the region for the point in bar series.\n     *\n     * @returns {void}\n     * @private\n     */\n    ColumnBase.prototype.updateYRegion = function (point, rect, series) {\n        point.symbolLocations.push({\n            x: (series.seriesType === 'BoxPlot' || series.seriesType.indexOf('HighLow') !== -1 ||\n                (point.yValue >= 0 === !series.yAxis.isAxisInverse)) ? rect.x + rect.width : rect.x,\n            y: rect.y + rect.height / 2\n        });\n        this.getRegion(point, rect, series);\n        if (series.type === 'RangeColumn') {\n            point.symbolLocations.push({\n                x: rect.x,\n                y: rect.y + rect.height / 2\n            });\n        }\n    };\n    /**\n     * To render the marker for the series.\n     *\n     * @returns {void}\n     * @private\n     */\n    ColumnBase.prototype.renderMarker = function (series) {\n        if (series.marker && series.marker.visible) {\n            series.chart.markerRender.render(series);\n        }\n    };\n    /**\n     * To get the marker region when Y value is 0\n     *\n     * @param {Points} point point\n     * @param {rect} rect rect\n     * @param {Series} series series\n     */\n    ColumnBase.prototype.getRegion = function (point, rect, series) {\n        if (point.y === 0) {\n            var markerWidth = (series.marker && series.marker.width) ? series.marker.width : 0;\n            var markerHeight = (series.marker && series.marker.height) ? series.marker.height : 0;\n            point.regions.push(new Rect(point.symbolLocations[0].x - markerWidth, point.symbolLocations[0].y - markerHeight, 2 * markerWidth, 2 * markerHeight));\n        }\n        else {\n            point.regions.push(rect);\n        }\n    };\n    /**\n     * To trigger the point rendering event.\n     *\n     * @returns {void}\n     * @private\n     */\n    ColumnBase.prototype.triggerEvent = function (series, point, fill, border) {\n        var argsData = {\n            cancel: false, name: pointRender, series: series, point: point,\n            fill: series.setPointColor(point, fill),\n            border: series.setBorderColor(point, border)\n        };\n        series.chart.trigger(pointRender, argsData);\n        point.color = argsData.fill;\n        return argsData;\n    };\n    /**\n     * To draw the rectangle for points.\n     *\n     * @returns {void}\n     * @private\n     */\n    ColumnBase.prototype.drawRectangle = function (series, point, rect, argsData) {\n        var chart = series.chart;\n        var check = chart.requireInvertedAxis ? rect.height : rect.width;\n        if (check <= 0) {\n            return null;\n        }\n        var direction;\n        if (point.y === 0) {\n            // For 0 values corner radius will not calculate\n            direction = this.calculateRoundedRectPath(rect, 0, 0, 0, 0);\n        }\n        else {\n            direction = this.calculateRoundedRectPath(rect, series.cornerRadius.topLeft, series.cornerRadius.topRight, series.cornerRadius.bottomLeft, series.cornerRadius.bottomRight, chart.requireInvertedAxis);\n        }\n        var name = series.category === 'Indicator' ? chart.element.id + '_Indicator_' + series.index + '_' + series.name +\n            '_Point_' + point.index : chart.element.id + '_Series_' + series.index + '_Point_' + point.index;\n        var previousElement = redrawElement(chart.redraw, name);\n        var previousDirection = previousElement ? previousElement.getAttribute('d') : '';\n        this.options = new PathOption(name, argsData.fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, (series.columnFacet === 'Cylinder') ? '' : direction);\n        this.element = chart.renderer.drawPath(this.options, new Int32Array([series.clipRect.x, series.clipRect.y]));\n        switch (series.seriesType) {\n            case 'XY':\n                this.element.setAttribute('role', 'img');\n                this.element.setAttribute('aria-label', point.x + ':' + point.yValue + ', ' + series.name);\n                break;\n            case 'HighLow':\n                this.element.setAttribute('role', 'img');\n                this.element.setAttribute('aria-label', point.x + ':' + point.high + ', ' + point.low + ', ' + series.name);\n                break;\n        }\n        appendChildElement(series.chart.enableCanvas, series.seriesElement, this.element, chart.redraw);\n        if (!series.chart.enableCanvas) {\n            pathAnimation(this.element, (series.columnFacet === 'Cylinder') ? '' : direction, chart.redraw, previousDirection, chart.duration);\n        }\n    };\n    /**\n     * To animate the series.\n     *\n     * @returns {void}\n     * @private\n     */\n    ColumnBase.prototype.animate = function (series) {\n        var rectElements = series.seriesElement.childNodes;\n        var count = series.category === 'Indicator' ? 0 : 1;\n        var visiblePoints = getVisiblePoints(series);\n        for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n            var point = visiblePoints_1[_i];\n            if (!point.symbolLocations.length && !(series.type === 'BoxAndWhisker' && point.regions.length)) {\n                continue;\n            }\n            if ((series.type === 'Column' || series.type === 'Bar' || series.type === 'StackingColumn' || series.type === 'StackingColumn100' || series.type === 'StackingBar' || series.type === 'StackingBar100') && series.columnFacet === 'Cylinder') {\n                for (var j = 0; j < rectElements.length; j++) {\n                    this.animateRect(rectElements[j], series, point);\n                }\n            }\n            else {\n                this.animateRect(rectElements[count], series, point);\n                count++;\n            }\n        }\n    };\n    /**\n     * To animate the series.\n     *\n     * @returns {void}\n     * @private\n     */\n    ColumnBase.prototype.animateRect = function (element, series, point) {\n        var option = series.animation;\n        var duration = series.chart.animated ? series.chart.duration : option.duration;\n        var effect = getAnimationFunction('Linear');\n        var isPlot = point.yValue < 0;\n        var x;\n        var y;\n        var elementHeight = +point.regions[0].height;\n        var elementWidth = +point.regions[0].width;\n        var centerX;\n        var centerY;\n        if (!series.chart.requireInvertedAxis) {\n            x = +point.regions[0].x;\n            if (series.type.indexOf('Stacking') > -1) {\n                y = (1 - valueToCoefficient(0, series.yAxis)) * (series.yAxis.rect.height);\n                centerX = x;\n                centerY = y;\n            }\n            else {\n                y = +point.regions[0].y;\n                centerY = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? y + elementHeight / 2 :\n                    (isPlot !== series.yAxis.isAxisInverse) ? y : y + elementHeight;\n                centerX = isPlot ? x : x + elementWidth;\n            }\n        }\n        else {\n            y = +point.regions[0].y;\n            if (series.type.indexOf('Stacking') > -1) {\n                x = (valueToCoefficient(0, series.yAxis)) * series.yAxis.rect.width;\n                centerX = x;\n                centerY = y;\n            }\n            else {\n                x = +point.regions[0].x;\n                centerY = isPlot ? y : y + elementHeight;\n                centerX = (series.seriesType.indexOf('HighLow') !== -1 || series.type.indexOf('Waterfall') !== -1) ? x + elementWidth / 2 :\n                    (isPlot !== series.yAxis.isAxisInverse) ? x + elementWidth : x;\n            }\n        }\n        var value;\n        if (!isNullOrUndefined(element)) {\n            element.style.visibility = 'hidden';\n            new Animation({}).animate(element, {\n                duration: (duration === 0 && animationMode === 'Enable') ? 1000 : duration,\n                delay: option.delay,\n                progress: function (args) {\n                    if (args.timeStamp >= args.delay) {\n                        element.style.visibility = 'visible';\n                        if (!series.chart.requireInvertedAxis) {\n                            elementHeight = elementHeight ? elementHeight : 1;\n                            value = effect(args.timeStamp - args.delay, 0, elementHeight, args.duration);\n                            element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n                                ') scale(1,' + (value / elementHeight) + ') translate(' + (-centerX) + ' ' + (-centerY) + ')');\n                        }\n                        else {\n                            elementWidth = elementWidth ? elementWidth : 1;\n                            value = effect(args.timeStamp - args.delay, 0, elementWidth, args.duration);\n                            element.setAttribute('transform', 'translate(' + centerX + ' ' + centerY +\n                                ') scale(' + (value / elementWidth) + ', 1) translate(' + (-centerX) + ' ' + (-centerY) + ')');\n                        }\n                    }\n                },\n                end: function () {\n                    element.setAttribute('transform', 'translate(0,0)');\n                    var seriesElement = series.seriesElement;\n                    if (element === seriesElement.lastElementChild || point.index === series.points.length - 1 ||\n                        (series.type === 'Waterfall' && element === seriesElement.children[seriesElement.childElementCount - 2])) {\n                        series.chart.trigger('animationComplete', { series: series.chart.isBlazor ? {} : series });\n                        if (series.type === 'Waterfall') {\n                            var rectElements = seriesElement.childNodes;\n                            for (var i = 0; i < rectElements.length; i++) {\n                                if (rectElements[i].id.indexOf('Connector') !== -1) {\n                                    rectElements[i].style.visibility = 'visible';\n                                    rectElements[i].setAttribute('transform', 'translate(0,0)');\n                                }\n                            }\n                        }\n                    }\n                }\n            });\n        }\n    };\n    /**\n     * To get rounded rect path direction.\n     */\n    ColumnBase.prototype.calculateRoundedRectPath = function (rect, topLeft, topRight, bottomLeft, bottomRight, inverted) {\n        if (inverted === void 0) { inverted = false; }\n        var halfValue = inverted ? rect.width / 2 : rect.height / 2;\n        topLeft = Math.min(topLeft, halfValue);\n        topRight = Math.min(topRight, halfValue);\n        bottomLeft = Math.min(bottomLeft, halfValue);\n        bottomRight = Math.min(bottomRight, halfValue);\n        return 'M' + ' ' + rect.x + ' ' + (topLeft + rect.y) +\n            ' Q ' + rect.x + ' ' + rect.y + ' ' + (rect.x + topLeft) + ' ' +\n            rect.y + ' ' + 'L' + ' ' + (rect.x + rect.width - topRight) + ' ' + rect.y +\n            ' Q ' + (rect.x + rect.width) + ' ' + rect.y + ' ' +\n            (rect.x + rect.width) + ' ' + (rect.y + topRight) + ' ' + 'L ' +\n            (rect.x + rect.width) + ' ' + (rect.y + rect.height - bottomRight)\n            + ' Q ' + (rect.x + rect.width) + ' ' + (rect.y + rect.height) + ' ' + (rect.x + rect.width - bottomRight) + ' ' +\n            (rect.y + rect.height) + ' ' + 'L ' + (rect.x + bottomLeft) + ' ' + (rect.y + rect.height) + ' Q ' + rect.x + ' ' +\n            (rect.y + rect.height) + ' ' + rect.x + ' ' + (rect.y + rect.height - bottomLeft) + ' ' + 'L' + ' ' + rect.x + ' ' +\n            (topLeft + rect.y) + ' ' + 'Z';\n    };\n    return ColumnBase;\n}());\nexport { ColumnBase };\n","//! moment.js locale configuration\n//! locale : Spanish (United States) [es-us]\n//! author : bustta : https://github.com/bustta\n//! author : chrisrodz : https://github.com/chrisrodz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esUs = moment.defineLocale('es-us', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'MM/DD/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY h:mm A',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return esUs;\n\n})));\n","//! moment.js locale configuration\n//! locale : Tetun Dili (East Timor) [tet]\n//! author : Joshua Brooks : https://github.com/joshbrooks\n//! author : Onorio De J. Afonso : https://github.com/marobo\n//! author : Sonia Simoes : https://github.com/soniasimoes\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tet = moment.defineLocale('tet', {\n        months: 'Janeiru_Fevereiru_Marsu_Abril_Maiu_Juñu_Jullu_Agustu_Setembru_Outubru_Novembru_Dezembru'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Abr_Mai_Jun_Jul_Ago_Set_Out_Nov_Dez'.split('_'),\n        weekdays: 'Domingu_Segunda_Tersa_Kuarta_Kinta_Sesta_Sabadu'.split('_'),\n        weekdaysShort: 'Dom_Seg_Ters_Kua_Kint_Sest_Sab'.split('_'),\n        weekdaysMin: 'Do_Seg_Te_Ku_Ki_Ses_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Ohin iha] LT',\n            nextDay: '[Aban iha] LT',\n            nextWeek: 'dddd [iha] LT',\n            lastDay: '[Horiseik iha] LT',\n            lastWeek: 'dddd [semana kotuk] [iha] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'iha %s',\n            past: '%s liuba',\n            s: 'segundu balun',\n            ss: 'segundu %d',\n            m: 'minutu ida',\n            mm: 'minutu %d',\n            h: 'oras ida',\n            hh: 'oras %d',\n            d: 'loron ida',\n            dd: 'loron %d',\n            M: 'fulan ida',\n            MM: 'fulan %d',\n            y: 'tinan ida',\n            yy: 'tinan %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tet;\n\n})));\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContractReportTabs.vue?vue&type=style&index=1&id=5a4a3418&prod&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./M2MReportTemplate.vue?vue&type=style&index=0&id=6b7bc79a&prod&lang=css\"","//! moment.js locale configuration\n//! locale : Maldivian [dv]\n//! author : Jawish Hameed : https://github.com/jawish\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'ޖެނުއަރީ',\n            'ފެބްރުއަރީ',\n            'މާރިޗު',\n            'އޭޕްރީލު',\n            'މޭ',\n            'ޖޫން',\n            'ޖުލައި',\n            'އޯގަސްޓު',\n            'ސެޕްޓެމްބަރު',\n            'އޮކްޓޯބަރު',\n            'ނޮވެމްބަރު',\n            'ޑިސެމްބަރު',\n        ],\n        weekdays = [\n            'އާދިއްތަ',\n            'ހޯމަ',\n            'އަންގާރަ',\n            'ބުދަ',\n            'ބުރާސްފަތި',\n            'ހުކުރު',\n            'ހޮނިހިރު',\n        ];\n\n    var dv = moment.defineLocale('dv', {\n        months: months,\n        monthsShort: months,\n        weekdays: weekdays,\n        weekdaysShort: weekdays,\n        weekdaysMin: 'އާދި_ހޯމަ_އަން_ބުދަ_ބުރާ_ހުކު_ހޮނި'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/M/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /މކ|މފ/,\n        isPM: function (input) {\n            return 'މފ' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'މކ';\n            } else {\n                return 'މފ';\n            }\n        },\n        calendar: {\n            sameDay: '[މިއަދު] LT',\n            nextDay: '[މާދަމާ] LT',\n            nextWeek: 'dddd LT',\n            lastDay: '[އިއްޔެ] LT',\n            lastWeek: '[ފާއިތުވި] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ތެރޭގައި %s',\n            past: 'ކުރިން %s',\n            s: 'ސިކުންތުކޮޅެއް',\n            ss: 'd% ސިކުންތު',\n            m: 'މިނިޓެއް',\n            mm: 'މިނިޓު %d',\n            h: 'ގަޑިއިރެއް',\n            hh: 'ގަޑިއިރު %d',\n            d: 'ދުވަހެއް',\n            dd: 'ދުވަސް %d',\n            M: 'މަހެއް',\n            MM: 'މަސް %d',\n            y: 'އަހަރެއް',\n            yy: 'އަހަރު %d',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 7, // Sunday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return dv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Turkmen [tk]\n//! author : Atamyrat Abdyrahmanov : https://github.com/atamyratabdy\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        1: \"'inji\",\n        5: \"'inji\",\n        8: \"'inji\",\n        70: \"'inji\",\n        80: \"'inji\",\n        2: \"'nji\",\n        7: \"'nji\",\n        20: \"'nji\",\n        50: \"'nji\",\n        3: \"'ünji\",\n        4: \"'ünji\",\n        100: \"'ünji\",\n        6: \"'njy\",\n        9: \"'unjy\",\n        10: \"'unjy\",\n        30: \"'unjy\",\n        60: \"'ynjy\",\n        90: \"'ynjy\",\n    };\n\n    var tk = moment.defineLocale('tk', {\n        months: 'Ýanwar_Fewral_Mart_Aprel_Maý_Iýun_Iýul_Awgust_Sentýabr_Oktýabr_Noýabr_Dekabr'.split(\n            '_'\n        ),\n        monthsShort: 'Ýan_Few_Mar_Apr_Maý_Iýn_Iýl_Awg_Sen_Okt_Noý_Dek'.split('_'),\n        weekdays: 'Ýekşenbe_Duşenbe_Sişenbe_Çarşenbe_Penşenbe_Anna_Şenbe'.split(\n            '_'\n        ),\n        weekdaysShort: 'Ýek_Duş_Siş_Çar_Pen_Ann_Şen'.split('_'),\n        weekdaysMin: 'Ýk_Dş_Sş_Çr_Pn_An_Şn'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[bugün sagat] LT',\n            nextDay: '[ertir sagat] LT',\n            nextWeek: '[indiki] dddd [sagat] LT',\n            lastDay: '[düýn] LT',\n            lastWeek: '[geçen] dddd [sagat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s soň',\n            past: '%s öň',\n            s: 'birnäçe sekunt',\n            m: 'bir minut',\n            mm: '%d minut',\n            h: 'bir sagat',\n            hh: '%d sagat',\n            d: 'bir gün',\n            dd: '%d gün',\n            M: 'bir aý',\n            MM: '%d aý',\n            y: 'bir ýyl',\n            yy: '%d ýyl',\n        },\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'Do':\n                case 'DD':\n                    return number;\n                default:\n                    if (number === 0) {\n                        // special case for zero\n                        return number + \"'unjy\";\n                    }\n                    var a = number % 10,\n                        b = (number % 100) - a,\n                        c = number >= 100 ? 100 : null;\n                    return number + (suffixes[a] || suffixes[b] || suffixes[c]);\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return tk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Hungarian [hu]\n//! author : Adam Brunner : https://github.com/adambrunner\n//! author : Peter Viszt  : https://github.com/passatgt\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var weekEndings =\n        'vasárnap hétfőn kedden szerdán csütörtökön pénteken szombaton'.split(' ');\n    function translate(number, withoutSuffix, key, isFuture) {\n        var num = number;\n        switch (key) {\n            case 's':\n                return isFuture || withoutSuffix\n                    ? 'néhány másodperc'\n                    : 'néhány másodperce';\n            case 'ss':\n                return num + (isFuture || withoutSuffix)\n                    ? ' másodperc'\n                    : ' másodperce';\n            case 'm':\n                return 'egy' + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'mm':\n                return num + (isFuture || withoutSuffix ? ' perc' : ' perce');\n            case 'h':\n                return 'egy' + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'hh':\n                return num + (isFuture || withoutSuffix ? ' óra' : ' órája');\n            case 'd':\n                return 'egy' + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'dd':\n                return num + (isFuture || withoutSuffix ? ' nap' : ' napja');\n            case 'M':\n                return 'egy' + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'MM':\n                return num + (isFuture || withoutSuffix ? ' hónap' : ' hónapja');\n            case 'y':\n                return 'egy' + (isFuture || withoutSuffix ? ' év' : ' éve');\n            case 'yy':\n                return num + (isFuture || withoutSuffix ? ' év' : ' éve');\n        }\n        return '';\n    }\n    function week(isFuture) {\n        return (\n            (isFuture ? '' : '[múlt] ') +\n            '[' +\n            weekEndings[this.day()] +\n            '] LT[-kor]'\n        );\n    }\n\n    var hu = moment.defineLocale('hu', {\n        months: 'január_február_március_április_május_június_július_augusztus_szeptember_október_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._márc._ápr._máj._jún._júl._aug._szept._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'vasárnap_hétfő_kedd_szerda_csütörtök_péntek_szombat'.split('_'),\n        weekdaysShort: 'vas_hét_kedd_sze_csüt_pén_szo'.split('_'),\n        weekdaysMin: 'v_h_k_sze_cs_p_szo'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'YYYY.MM.DD.',\n            LL: 'YYYY. MMMM D.',\n            LLL: 'YYYY. MMMM D. H:mm',\n            LLLL: 'YYYY. MMMM D., dddd H:mm',\n        },\n        meridiemParse: /de|du/i,\n        isPM: function (input) {\n            return input.charAt(1).toLowerCase() === 'u';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 12) {\n                return isLower === true ? 'de' : 'DE';\n            } else {\n                return isLower === true ? 'du' : 'DU';\n            }\n        },\n        calendar: {\n            sameDay: '[ma] LT[-kor]',\n            nextDay: '[holnap] LT[-kor]',\n            nextWeek: function () {\n                return week.call(this, true);\n            },\n            lastDay: '[tegnap] LT[-kor]',\n            lastWeek: function () {\n                return week.call(this, false);\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s múlva',\n            past: '%s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return hu;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (China) [zh-cn]\n//! author : suupic : https://github.com/suupic\n//! author : Zeno Zeng : https://github.com/zenozeng\n//! author : uu109 : https://github.com/uu109\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhCn = moment.defineLocale('zh-cn', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '周日_周一_周二_周三_周四_周五_周六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日Ah点mm分',\n            LLLL: 'YYYY年M月D日ddddAh点mm分',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            } else {\n                // '中午'\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天]LT',\n            nextDay: '[明天]LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    return '[下]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            lastDay: '[昨天]LT',\n            lastWeek: function (now) {\n                if (this.week() !== now.week()) {\n                    return '[上]dddLT';\n                } else {\n                    return '[本]dddLT';\n                }\n            },\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|周)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '周';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s后',\n            past: '%s前',\n            s: '几秒',\n            ss: '%d 秒',\n            m: '1 分钟',\n            mm: '%d 分钟',\n            h: '1 小时',\n            hh: '%d 小时',\n            d: '1 天',\n            dd: '%d 天',\n            w: '1 周',\n            ww: '%d 周',\n            M: '1 个月',\n            MM: '%d 个月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return zhCn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Telugu [te]\n//! author : Krishna Chaitanya Thota : https://github.com/kcthota\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var te = moment.defineLocale('te', {\n        months: 'జనవరి_ఫిబ్రవరి_మార్చి_ఏప్రిల్_మే_జూన్_జులై_ఆగస్టు_సెప్టెంబర్_అక్టోబర్_నవంబర్_డిసెంబర్'.split(\n            '_'\n        ),\n        monthsShort:\n            'జన._ఫిబ్ర._మార్చి_ఏప్రి._మే_జూన్_జులై_ఆగ._సెప్._అక్టో._నవ._డిసె.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'ఆదివారం_సోమవారం_మంగళవారం_బుధవారం_గురువారం_శుక్రవారం_శనివారం'.split(\n                '_'\n            ),\n        weekdaysShort: 'ఆది_సోమ_మంగళ_బుధ_గురు_శుక్ర_శని'.split('_'),\n        weekdaysMin: 'ఆ_సో_మం_బు_గు_శు_శ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[నేడు] LT',\n            nextDay: '[రేపు] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[నిన్న] LT',\n            lastWeek: '[గత] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s లో',\n            past: '%s క్రితం',\n            s: 'కొన్ని క్షణాలు',\n            ss: '%d సెకన్లు',\n            m: 'ఒక నిమిషం',\n            mm: '%d నిమిషాలు',\n            h: 'ఒక గంట',\n            hh: '%d గంటలు',\n            d: 'ఒక రోజు',\n            dd: '%d రోజులు',\n            M: 'ఒక నెల',\n            MM: '%d నెలలు',\n            y: 'ఒక సంవత్సరం',\n            yy: '%d సంవత్సరాలు',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}వ/,\n        ordinal: '%dవ',\n        meridiemParse: /రాత్రి|ఉదయం|మధ్యాహ్నం|సాయంత్రం/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'రాత్రి') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ఉదయం') {\n                return hour;\n            } else if (meridiem === 'మధ్యాహ్నం') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'సాయంత్రం') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'రాత్రి';\n            } else if (hour < 10) {\n                return 'ఉదయం';\n            } else if (hour < 17) {\n                return 'మధ్యాహ్నం';\n            } else if (hour < 20) {\n                return 'సాయంత్రం';\n            } else {\n                return 'రాత్రి';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return te;\n\n})));\n","import { withInBounds, PointData, getValueXByPoint, getValueYByPoint, sort } from '../../common/utils/helper';\nimport { Rect } from '@syncfusion/ej2-svg-base';\n/**\n * To get the data on mouse move.\n *\n * @private\n */\nvar ChartData = /** @class */ (function () {\n    /**\n     * Constructor for the data.\n     *\n     * @private\n     */\n    function ChartData(chart) {\n        /** @private */\n        this.currentPoints = [];\n        /** @private */\n        this.previousPoints = [];\n        this.insideRegion = false;\n        this.commonXvalues = [];\n        this.chart = chart;\n        this.lierIndex = 0;\n    }\n    /**\n     * Method to get the Data.\n     *\n     * @private\n     */\n    ChartData.prototype.getData = function () {\n        var chart = this.chart;\n        var point = null;\n        var series = null;\n        var width;\n        var height;\n        var mouseX;\n        var mouseY;\n        for (var len = chart.visibleSeries.length, i = len - 1; i >= 0; i--) {\n            series = chart.visibleSeries[i];\n            width = (series.type === 'Scatter' || series.drawType === 'Scatter' || (series.marker.visible))\n                ? (series.marker.height + 5) / 2 : 0;\n            height = (series.type === 'Scatter' || series.drawType === 'Scatter' || (series.marker.visible))\n                ? (series.marker.width + 5) / 2 : 0;\n            mouseX = chart.mouseX;\n            mouseY = chart.mouseY;\n            if (series.dragSettings.enable && series.isRectSeries) {\n                if (!(series.type === 'Bar' && chart.isTransposed) && (chart.isTransposed || series.type === 'Bar')) {\n                    var markerWidth = series.marker.width / 2;\n                    mouseX = series.yAxis.isAxisInverse ? mouseX + markerWidth : mouseX - markerWidth;\n                }\n                else {\n                    var markerHeight = series.marker.height / 2;\n                    mouseY = series.yAxis.isAxisInverse ? mouseY - markerHeight : mouseY + markerHeight;\n                }\n            }\n            if (series.visible && withInBounds(mouseX, mouseY, series.clipRect, width, height)) {\n                point = this.getRectPoint(series, series.clipRect, mouseX, mouseY);\n            }\n            if (point) {\n                return new PointData(point, series);\n            }\n        }\n        return new PointData(point, series);\n    };\n    ChartData.prototype.isSelected = function (chart) {\n        return ((chart.selectionMode.indexOf('Drag') > -1 || chart.selectionMode.indexOf('Lasso') > -1) && chart.selectionModule &&\n            chart.selectionModule.rectPoints !== null);\n    };\n    ChartData.prototype.getRectPoint = function (series, rect, x, y) {\n        var chart = this.chart;\n        var fromCenterX;\n        var fromCenterY;\n        var clickAngle;\n        var arcAngle = 0;\n        var startAngle;\n        var endAngle;\n        var distanceFromCenter;\n        if (chart.isScrolling) {\n            return null;\n        }\n        for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n            var point = _a[_i];\n            if (!point.regionData) {\n                if (!point.regions || !point.regions.length) {\n                    continue;\n                }\n            }\n            if (point.regionData && this.chart.chartAreaType === 'PolarRadar' && series.drawType.indexOf('Column') > -1) {\n                fromCenterX = x - (series.clipRect.width / 2 + series.clipRect.x);\n                fromCenterY = y - (series.clipRect.height / 2 + series.clipRect.y);\n                arcAngle = 2 * Math.PI * (point.regionData.currentXPosition < 0 ? 1 + point.regionData.currentXPosition\n                    : point.regionData.currentXPosition);\n                clickAngle = (Math.atan2(fromCenterY, fromCenterX) + 0.5 * Math.PI - arcAngle) % (2 * Math.PI);\n                clickAngle = clickAngle < 0 ? 2 * Math.PI + clickAngle : clickAngle;\n                clickAngle = clickAngle + 2 * Math.PI * series.chart.primaryXAxis.startAngle;\n                startAngle = point.regionData.startAngle;\n                startAngle -= arcAngle;\n                startAngle = startAngle < 0 ? 2 * Math.PI + startAngle : startAngle;\n                endAngle = point.regionData.endAngle;\n                endAngle -= arcAngle;\n                endAngle = endAngle < 0 ? 2 * Math.PI + endAngle : endAngle;\n                distanceFromCenter = Math.sqrt(Math.pow(Math.abs(fromCenterX), 2) + Math.pow(Math.abs(fromCenterY), 2));\n                if (clickAngle >= startAngle && clickAngle <= endAngle &&\n                    (((distanceFromCenter >= point.regionData.innerRadius && distanceFromCenter <= point.regionData.radius) ||\n                        (distanceFromCenter <= point.regionData.innerRadius && distanceFromCenter >= point.regionData.radius))\n                        && distanceFromCenter <= series.chart.radius)) {\n                    return point;\n                }\n            }\n            if ((series.dragSettings.enable && series.isRectSeries) || (series.isRectSeries && series.marker.visible)) {\n                if (this.isPointInThresholdRegion(x, y, point, rect, series)) {\n                    this.insideRegion = true;\n                    return point;\n                }\n            }\n            if (!this.insideRegion && this.checkRegionContainsPoint(point.regions, rect, x, y)) {\n                return point;\n            }\n            else if (this.insideRegion && this.checkRegionContainsPoint(point.regions, rect, x, y)) {\n                return point;\n            }\n        }\n        return null;\n    };\n    /**\n     * Checks whether the region contains a point\n     */\n    ChartData.prototype.checkRegionContainsPoint = function (regionRect, rect, x, y) {\n        var _this = this;\n        return regionRect.some(function (region, index) {\n            _this.lierIndex = index;\n            return withInBounds(x, y, new Rect((_this.chart.chartAreaType === 'Cartesian' ? rect.x : 0) + region.x, (_this.chart.chartAreaType === 'Cartesian' ? rect.y : 0) + region.y, region.width, region.height));\n        });\n    };\n    /**\n     * To check the point in threshold region for column and bar series\n     *\n     * @param {number} x X coordinate\n     * @param {number} y Y coodinate\n     * @param {Points} point point\n     * @param {Rect} rect point rect region\n     * @param {Series} series series\n     */\n    ChartData.prototype.isPointInThresholdRegion = function (x, y, point, rect, series) {\n        var _this = this;\n        var isBar = series.type === 'Bar';\n        var isInversed = series.yAxis.isAxisInverse;\n        var isTransposed = series.chart.isTransposed;\n        var heightValue = 10;\n        var yValue = 0;\n        var xValue = 0;\n        var width;\n        var height = width = 2 * heightValue;\n        if (isInversed && isTransposed) {\n            if (isBar) {\n                yValue = point.regions[0].height - heightValue;\n                width = point.regions[0].width;\n            }\n            else {\n                xValue = -heightValue;\n                height = point.regions[0].height;\n            }\n        }\n        else if (isInversed || point.yValue < 0) {\n            if (isBar) {\n                xValue = -heightValue;\n                height = point.regions[0].height;\n            }\n            else {\n                yValue = point.regions[0].height - heightValue;\n                width = point.regions[0].width;\n            }\n        }\n        else if (isTransposed) {\n            if (isBar) {\n                yValue = -heightValue;\n                width = point.regions[0].width;\n            }\n            else {\n                xValue = point.regions[0].width - heightValue;\n                height = point.regions[0].height;\n            }\n        }\n        else {\n            if (isBar) {\n                xValue = point.regions[0].width - heightValue;\n                height = point.regions[0].height;\n            }\n            else {\n                yValue = -heightValue;\n                width = point.regions[0].width;\n            }\n        }\n        return point.regions.some(function (region) {\n            return withInBounds(x, y, new Rect((_this.chart.chartAreaType === 'Cartesian' ? rect.x : 0) + region.x + xValue, (_this.chart.chartAreaType === 'Cartesian' ? rect.y : 0) + region.y + yValue, width, height));\n        });\n    };\n    /**\n     * @private\n     */\n    ChartData.prototype.getClosest = function (series, value, xvalues) {\n        var closest;\n        var data;\n        var xData = xvalues ? xvalues : series.xData;\n        var xLength = xData.length;\n        var leftSideNearest = 0.5;\n        var rightSideNearest = 0.5;\n        if (series.xAxis.valueType === 'DateTime' && series.points.length === 1) {\n            leftSideNearest = series.xAxis.visibleRange.min;\n            rightSideNearest = series.xAxis.visibleRange.max;\n            for (var index = 0; index < series.chart.visibleSeries.length; index++) {\n                var visibleSeries = series.chart.visibleSeries[index];\n                if (visibleSeries.xMin >= leftSideNearest && visibleSeries.xMin < series.xMin) {\n                    leftSideNearest = visibleSeries.xMin + 0.1;\n                }\n                if (visibleSeries.xMax <= rightSideNearest && visibleSeries.xMax > series.xMax) {\n                    rightSideNearest = visibleSeries.xMax - 0.1;\n                }\n                if (visibleSeries.points.length > 1) {\n                    if (visibleSeries.xMax >= leftSideNearest && visibleSeries.xMax < series.xMin) {\n                        leftSideNearest = visibleSeries.xMax + 0.1;\n                    }\n                    if (visibleSeries.xMin <= rightSideNearest && visibleSeries.xMin > series.xMax) {\n                        rightSideNearest = visibleSeries.xMin - 0.1;\n                    }\n                }\n            }\n            if (leftSideNearest !== series.xAxis.visibleRange.min) {\n                leftSideNearest = Math.abs(series.xMin - leftSideNearest) / 2;\n            }\n            if (rightSideNearest !== series.xAxis.visibleRange.max) {\n                rightSideNearest = Math.abs(series.xMax - rightSideNearest) / 2;\n            }\n        }\n        if (value >= series.xMin - leftSideNearest && value <= series.xMax + rightSideNearest) {\n            for (var i = 0; i < xLength; i++) {\n                data = xData[i];\n                if (closest == null || Math.abs(data - value) < Math.abs(closest - value)) {\n                    closest = data;\n                }\n            }\n        }\n        var isDataExist = series.xData.indexOf(closest) !== -1;\n        if (isDataExist) {\n            return closest;\n        }\n        else {\n            return null;\n        }\n    };\n    ChartData.prototype.binarySearch = function (target, list) {\n        var first = 0;\n        var last = list.length;\n        var position = -1;\n        var found = false;\n        var middle;\n        while (found === false && first <= last) {\n            middle = Math.floor((first + last) / 2);\n            if (list[middle].xValue === target) {\n                found = true;\n                position = middle;\n            }\n            else if (list[middle].xValue > target) {\n                last = middle - 1;\n            }\n            else {\n                first = middle + 1;\n            }\n        }\n        return position !== -1 ? list[position] : null;\n    };\n    ChartData.prototype.getClosestX = function (chart, series, xvalues) {\n        var value;\n        var rect = series.clipRect;\n        if (chart.mouseX <= rect.x + rect.width && chart.mouseX >= rect.x) {\n            if (!chart.requireInvertedAxis) {\n                value = getValueXByPoint(chart.mouseX - rect.x, rect.width, series.xAxis);\n            }\n            else {\n                value = getValueYByPoint(chart.mouseY - rect.y, rect.height, series.xAxis);\n            }\n        }\n        var closest = this.getClosest(series, value, xvalues);\n        var point = ((closest || closest === 0) && series.points.length > 0) ? this.binarySearch(closest, sort(series.points, ['xValue'])) : null;\n        if (point && point.visible) {\n            if (!(this.chart.chartAreaType === 'Cartesian' && ((series.category == 'Indicator' && series.name == 'Histogram') ||\n                (point.symbolLocations && point.symbolLocations.length > 0 && point.symbolLocations[0].x >= 0 && point.symbolLocations[0].x <= rect.width)))) {\n                return null;\n            }\n            return new PointData(point, series);\n        }\n        return null;\n    };\n    /**\n     * Merge all visible series X values for shared tooltip (EJ2-47072)\n     *\n     * @param visibleSeries\n     * @private\n     */\n    ChartData.prototype.mergeXvalues = function (visibleSeries) {\n        if (visibleSeries.length && (!this.commonXvalues.length || (this.commonXvalues.length !== visibleSeries[0].xData.length))) {\n            this.commonXvalues = visibleSeries[0].xData;\n            for (var index = 1; index < visibleSeries.length; index++) {\n                this.commonXvalues = this.getDistinctValues(this.commonXvalues, visibleSeries[index].xData);\n            }\n        }\n        return this.commonXvalues;\n    };\n    ChartData.prototype.commonXValue = function (visibleSeries) {\n        var commonXValues = [];\n        for (var j = 0; j < visibleSeries.length; j++) {\n            for (var i = 0; (visibleSeries[j].points && i < visibleSeries[j].points.length); i++) {\n                var point = visibleSeries[j].points[i];\n                if (point && (point.index === 0 || point.index === visibleSeries[j].points.length - 1 ||\n                    (point.symbolLocations && point.symbolLocations.length > 0))) {\n                    commonXValues.push(point.xValue);\n                }\n            }\n        }\n        return commonXValues;\n    };\n    ChartData.prototype.getDistinctValues = function (first, second) {\n        if (first === void 0) { first = []; }\n        if (second === void 0) { second = []; }\n        var intial = {};\n        var result = [];\n        var index;\n        for (index = 0; index < first.length; index++) {\n            var temp = first[index];\n            if (!intial[temp]) {\n                intial[temp] = true;\n                result.push(temp);\n            }\n        }\n        for (index = 0; index < second.length; index++) {\n            var temp = second[index];\n            if (!intial[temp]) {\n                intial[temp] = true;\n                result.push(temp);\n            }\n        }\n        return result;\n    };\n    return ChartData;\n}());\nexport { ChartData };\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var TabItemsDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-tabitems';\n        }\n    }\n});\nexport var TabItemsPlugin = {\n    name: 'e-tabitems',\n    install: function (Vue) {\n        Vue.component(TabItemsPlugin.name, TabItemsDirective);\n    }\n};\n/**\n * 'e-tabitem' directive represent a item of the Vue Tab\n * It must be contained in a Tab component(`ejs-tab`).\n * ```html\n * <ejs-tab>\n *  <e-tabitems>\n *   <e-tabitem :header='Header 1' :content='Content 1'></e-tabitem>\n *   <e-tabitem :header='Header 2' :content='Content 2'></e-tabitem>\n *  <e-tabitems>\n * </ejs-tab>\n * ```\n */\nexport var TabItemDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-tabitem';\n        }\n    }\n});\nexport var TabItemPlugin = {\n    name: 'e-tabitem',\n    install: function (Vue) {\n        Vue.component(TabItemPlugin.name, TabItemDirective);\n    }\n};\n","import { ComponentBase, gh, getProps, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Tab } from '@syncfusion/ej2-navigations';\nimport { TabItemsDirective, TabItemDirective, TabItemsPlugin, TabItemPlugin } from './items.directive';\nexport var properties = ['isLazyUpdate', 'plugins', 'allowDragAndDrop', 'animation', 'clearTemplates', 'cssClass', 'dragArea', 'enableHtmlSanitizer', 'enablePersistence', 'enableRtl', 'headerPlacement', 'height', 'heightAdjustMode', 'items', 'loadOn', 'locale', 'overflowMode', 'reorderActiveTab', 'scrollStep', 'selectedItem', 'showCloseButton', 'width', 'added', 'adding', 'created', 'destroyed', 'dragged', 'dragging', 'onDragStart', 'removed', 'removing', 'selected', 'selecting'];\nexport var modelProps = [];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0], watch = testProp[1], emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged', 'update:modelValue');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n    var props_1 = modelProps_1[_i];\n    emitProbs.push('update:' + props_1);\n}\n/**\n * Represents the VueJS Tab Component.\n * ```html\n * <ejs-tab></ejs-tab>\n * ```\n */\nexport var TabComponent = vueDefineComponent({\n    name: 'TabComponent',\n    mixins: [ComponentBase],\n    props: props,\n    watch: watch,\n    emits: emitProbs,\n    provide: function () { return { custom: this.custom }; },\n    data: function () {\n        return {\n            ej2Instances: new Tab({}),\n            propKeys: properties,\n            models: modelProps,\n            hasChildDirective: true,\n            hasInjectedModules: false,\n            tagMapper: { \"e-tabitems\": \"e-tabitem\" },\n            tagNameMapper: { \"e-tabitems\": \"e-items\" },\n            isVue3: !isExecute,\n            templateCollection: {},\n        };\n    },\n    created: function () {\n        this.bindProperties();\n        this.ej2Instances._setProperties = this.ej2Instances.setProperties;\n        this.ej2Instances.setProperties = this.setProperties;\n        this.ej2Instances.clearTemplate = this.clearTemplate;\n        this.updated = this.updated;\n    },\n    render: function (createElement) {\n        var h = !isExecute ? gh : createElement;\n        var slots = null;\n        if (!isNullOrUndefined(this.$slots.default)) {\n            slots = !isExecute ? this.$slots.default() : this.$slots.default;\n        }\n        return h('div', slots);\n    },\n    methods: {\n        clearTemplate: function (templateNames) {\n            if (!templateNames) {\n                templateNames = Object.keys(this.templateCollection || {});\n            }\n            if (templateNames.length && this.templateCollection) {\n                for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n                    var tempName = templateNames_1[_i];\n                    var elementCollection = this.templateCollection[tempName];\n                    if (elementCollection && elementCollection.length) {\n                        for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n                            var ele = elementCollection_1[_a];\n                            var destroy = getValue('__vue__.$destroy', ele);\n                            if (destroy) {\n                                ele.__vue__.$destroy();\n                            }\n                            if (ele.innerHTML) {\n                                ele.innerHTML = '';\n                            }\n                        }\n                        delete this.templateCollection[tempName];\n                    }\n                }\n            }\n        },\n        setProperties: function (prop, muteOnChange) {\n            var _this = this;\n            if (this.isVue3) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if (this.ej2Instances && this.ej2Instances._setProperties) {\n                this.ej2Instances._setProperties(prop, muteOnChange);\n            }\n            if (prop && this.models && this.models.length) {\n                Object.keys(prop).map(function (key) {\n                    _this.models.map(function (model) {\n                        if ((key === model) && !(/datasource/i.test(key))) {\n                            if (_this.isVue3) {\n                                _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n                            }\n                            else {\n                                _this.$emit('update:' + key, prop[key]);\n                                _this.$emit('modelchanged', prop[key]);\n                            }\n                        }\n                    });\n                });\n            }\n        },\n        custom: function () {\n            this.updated();\n        },\n        addTab: function (items, index) {\n            return this.ej2Instances.addTab(items, index);\n        },\n        disable: function (value) {\n            return this.ej2Instances.disable(value);\n        },\n        enableTab: function (index, value) {\n            return this.ej2Instances.enableTab(index, value);\n        },\n        getItemIndex: function (tabItemId) {\n            return this.ej2Instances.getItemIndex(tabItemId);\n        },\n        hideTab: function (index, value) {\n            return this.ej2Instances.hideTab(index, value);\n        },\n        refresh: function () {\n            return this.ej2Instances.refresh();\n        },\n        refreshActiveTab: function () {\n            return this.ej2Instances.refreshActiveTab();\n        },\n        refreshActiveTabBorder: function () {\n            return this.ej2Instances.refreshActiveTabBorder();\n        },\n        removeTab: function (index) {\n            return this.ej2Instances.removeTab(index);\n        },\n        select: function (args, event) {\n            return this.ej2Instances.select(args, event);\n        },\n    }\n});\nexport var TabPlugin = {\n    name: 'ejs-tab',\n    install: function (Vue) {\n        Vue.component(TabPlugin.name, TabComponent);\n        Vue.component(TabItemPlugin.name, TabItemDirective);\n        Vue.component(TabItemsPlugin.name, TabItemsDirective);\n    }\n};\n","//! moment.js locale configuration\n//! locale : Swedish [sv]\n//! author : Jens Alm : https://github.com/ulmus\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sv = moment.defineLocale('sv', {\n        months: 'januari_februari_mars_april_maj_juni_juli_augusti_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_maj_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        weekdays: 'söndag_måndag_tisdag_onsdag_torsdag_fredag_lördag'.split('_'),\n        weekdaysShort: 'sön_mån_tis_ons_tor_fre_lör'.split('_'),\n        weekdaysMin: 'sö_må_ti_on_to_fr_lö'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D MMMM YYYY [kl.] HH:mm',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Idag] LT',\n            nextDay: '[Imorgon] LT',\n            lastDay: '[Igår] LT',\n            nextWeek: '[På] dddd LT',\n            lastWeek: '[I] dddd[s] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: 'för %s sedan',\n            s: 'några sekunder',\n            ss: '%d sekunder',\n            m: 'en minut',\n            mm: '%d minuter',\n            h: 'en timme',\n            hh: '%d timmar',\n            d: 'en dag',\n            dd: '%d dagar',\n            M: 'en månad',\n            MM: '%d månader',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(\\:e|\\:a)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? ':e'\n                        : b === 1\n                        ? ':a'\n                        : b === 2\n                        ? ':a'\n                        : b === 3\n                        ? ':e'\n                        : ':e';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Uyghur (China) [ug-cn]\n//! author: boyaq : https://github.com/boyaq\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ugCn = moment.defineLocale('ug-cn', {\n        months: 'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يانۋار_فېۋرال_مارت_ئاپرېل_ماي_ئىيۇن_ئىيۇل_ئاۋغۇست_سېنتەبىر_ئۆكتەبىر_نويابىر_دېكابىر'.split(\n                '_'\n            ),\n        weekdays: 'يەكشەنبە_دۈشەنبە_سەيشەنبە_چارشەنبە_پەيشەنبە_جۈمە_شەنبە'.split(\n            '_'\n        ),\n        weekdaysShort: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        weekdaysMin: 'يە_دۈ_سە_چا_پە_جۈ_شە'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY-يىلىM-ئاينىڭD-كۈنى',\n            LLL: 'YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n            LLLL: 'dddd، YYYY-يىلىM-ئاينىڭD-كۈنى، HH:mm',\n        },\n        meridiemParse: /يېرىم كېچە|سەھەر|چۈشتىن بۇرۇن|چۈش|چۈشتىن كېيىن|كەچ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                meridiem === 'يېرىم كېچە' ||\n                meridiem === 'سەھەر' ||\n                meridiem === 'چۈشتىن بۇرۇن'\n            ) {\n                return hour;\n            } else if (meridiem === 'چۈشتىن كېيىن' || meridiem === 'كەچ') {\n                return hour + 12;\n            } else {\n                return hour >= 11 ? hour : hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return 'يېرىم كېچە';\n            } else if (hm < 900) {\n                return 'سەھەر';\n            } else if (hm < 1130) {\n                return 'چۈشتىن بۇرۇن';\n            } else if (hm < 1230) {\n                return 'چۈش';\n            } else if (hm < 1800) {\n                return 'چۈشتىن كېيىن';\n            } else {\n                return 'كەچ';\n            }\n        },\n        calendar: {\n            sameDay: '[بۈگۈن سائەت] LT',\n            nextDay: '[ئەتە سائەت] LT',\n            nextWeek: '[كېلەركى] dddd [سائەت] LT',\n            lastDay: '[تۆنۈگۈن] LT',\n            lastWeek: '[ئالدىنقى] dddd [سائەت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s كېيىن',\n            past: '%s بۇرۇن',\n            s: 'نەچچە سېكونت',\n            ss: '%d سېكونت',\n            m: 'بىر مىنۇت',\n            mm: '%d مىنۇت',\n            h: 'بىر سائەت',\n            hh: '%d سائەت',\n            d: 'بىر كۈن',\n            dd: '%d كۈن',\n            M: 'بىر ئاي',\n            MM: '%d ئاي',\n            y: 'بىر يىل',\n            yy: '%d يىل',\n        },\n\n        dayOfMonthOrdinalParse: /\\d{1,2}(-كۈنى|-ئاي|-ھەپتە)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '-كۈنى';\n                case 'w':\n                case 'W':\n                    return number + '-ھەپتە';\n                default:\n                    return number;\n            }\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            // GB/T 7408-1994《数据元和交换格式·信息交换·日期和时间表示法》与ISO 8601:1988等效\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return ugCn;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable jsdoc/require-param */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-returns */\nimport { getPoint, appendClipElement, pathAnimation } from '../../common/utils/helper';\nimport { LineBase } from './line-base';\nimport { RectOption, getElement } from '../../common/utils/helper';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Base class for multi colored series\n */\nvar MultiColoredSeries = /** @class */ (function (_super) {\n    __extends(MultiColoredSeries, _super);\n    function MultiColoredSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * To Generate the area path direction.\n     *\n     * @param {number} xValue xValue\n     * @param {number} yValue yValue\n     * @param {Series} series series\n     * @param {boolean} isInverted isInverted\n     * @param {Function} getPointLocation getPointLocation\n     * @param {ChartLocation} startPoint startPoint\n     * @param {string} startPath startPath\n     */\n    MultiColoredSeries.prototype.getAreaPathDirection = function (xValue, yValue, series, isInverted, getPointLocation, startPoint, startPath) {\n        var direction = '';\n        var firstPoint;\n        if (startPoint === null) {\n            firstPoint = getPointLocation(xValue, yValue, series.xAxis, series.yAxis, isInverted, series);\n            direction += (startPath + ' ' + (firstPoint.x) + ' ' + (firstPoint.y) + ' ');\n        }\n        return direction;\n    };\n    /**\n     * To Generate the empty point direction.\n     *\n     * @param {ChartLocation} firstPoint firstPoint\n     * @param {ChartLocation} secondPoint secondPoint\n     * @param {Series} series series\n     * @param {boolean} isInverted isInverted\n     * @param {Function} getPointLocation getPointLocation\n     */\n    MultiColoredSeries.prototype.getAreaEmptyDirection = function (firstPoint, secondPoint, series, isInverted, getPointLocation) {\n        var direction = '';\n        direction += this.getAreaPathDirection(firstPoint.x, firstPoint.y, series, isInverted, getPointLocation, null, 'L');\n        direction += this.getAreaPathDirection(secondPoint.x, secondPoint.y, series, isInverted, getPointLocation, null, 'L');\n        return direction;\n    };\n    /**\n     * To set point color.\n     */\n    MultiColoredSeries.prototype.setPointColor = function (currentPoint, previous, series, isXSegment, segments) {\n        if (series.pointColorMapping === '') {\n            var segment = void 0;\n            var value = void 0;\n            for (var i = 0; i < segments.length; i++) {\n                segment = segments[i];\n                value = isXSegment ? currentPoint.xValue : currentPoint.yValue;\n                if (value <= this.getAxisValue(segment.value, isXSegment ? series.xAxis : series.yAxis, series.chart) ||\n                    (!segment.value && segment.value !== 0)) {\n                    currentPoint.interior = segment.color;\n                    break;\n                }\n            }\n            if (currentPoint.interior == null) {\n                currentPoint.interior = series.interior;\n            }\n            return false;\n        }\n        else {\n            if (previous) {\n                return series.setPointColor(currentPoint, series.interior) !== series.setPointColor(previous, series.interior);\n            }\n            else {\n                return false;\n            }\n        }\n    };\n    MultiColoredSeries.prototype.sortSegments = function (series, chartSegments) {\n        var _this = this;\n        var axis = series.segmentAxis === 'X' ? series.xAxis : series.yAxis;\n        var segments = [].concat(chartSegments);\n        return segments.sort(function (a, b) {\n            return _this.getAxisValue(a.value, axis, series.chart) - _this.getAxisValue(b.value, axis, series.chart);\n        });\n    };\n    /**\n     * Segment calculation performed here.\n     *\n     * @param {Series} series series\n     * @param {PathOption[]} options options\n     * @param {ChartSegmentModel[]} segments chartSegments\n     */\n    MultiColoredSeries.prototype.applySegmentAxis = function (series, options, segments) {\n        var _this = this;\n        if (series.pointColorMapping !== '') {\n            options.map(function (option) {\n                _this.appendLinePath(option, series, '');\n            });\n            return null;\n        }\n        var isXSegment = series.segmentAxis === 'X';\n        var axis = isXSegment ? series.xAxis : series.yAxis;\n        var chart = series.chart;\n        var segment;\n        this.includeSegment(segments, axis, series, segments.length);\n        var length = segments.length;\n        var value;\n        var clipPath;\n        var attributeOptions;\n        var areaBorderCount = 0;\n        var _loop_1 = function (index) {\n            segment = segments[index];\n            value = this_1.getAxisValue(segment.value, axis, series.chart);\n            clipPath = this_1.createClipRect(index ? this_1.getAxisValue(segments[index - 1].value, axis, series.chart)\n                : axis.visibleRange.min, value, series, index, isXSegment);\n            if (clipPath) {\n                options.map(function (option) {\n                    areaBorderCount += 1;\n                    attributeOptions = {\n                        'clip-path': clipPath,\n                        'stroke-dasharray': segment.dashArray,\n                        'opacity': option.opacity,\n                        'stroke': series.type.indexOf('Line') > -1 ? segment.color || series.interior : option['stroke'],\n                        'stroke-width': option['stroke-width'],\n                        'fill': series.type.indexOf('Line') > -1 ? 'none' : segment.color || series.interior,\n                        'id': option.id + '_Segment_' + index,\n                        'd': option.d\n                    };\n                    if (areaBorderCount % 2 === 0 && _this.chart.multiColoredAreaSeriesModule && series.border.color !== 'transparent' && attributeOptions['stroke-width'] !== 0) {\n                        attributeOptions.fill = 'transparent';\n                    }\n                    pathAnimation(getElement(attributeOptions.id), attributeOptions.d, chart.redraw);\n                    series.pathElement = chart.renderer.drawPath(attributeOptions);\n                    if (!series.chart.enableCanvas) {\n                        series.seriesElement.appendChild(chart.renderer.drawPath(attributeOptions));\n                    }\n                });\n            }\n        };\n        var this_1 = this;\n        for (var index = 0; index < length; index++) {\n            _loop_1(index);\n        }\n    };\n    MultiColoredSeries.prototype.includeSegment = function (segments, axis, series, length) {\n        if (length <= 0) {\n            segments.push({ value: axis.visibleRange.max, color: series.interior });\n            return null;\n        }\n        if (this.getAxisValue(segments[length - 1].value, axis, series.chart) < axis.visibleRange.max) {\n            segments.push({ value: axis.visibleRange.max, color: series.interior });\n        }\n    };\n    /**\n     * To create clip rect for segment axis.\n     *\n     * @param {number} startValue startValue\n     * @param {number} endValue endValue\n     * @param {Series} series series\n     * @param {number} index index\n     * @param {boolean} isX isX\n     */\n    MultiColoredSeries.prototype.createClipRect = function (startValue, endValue, series, index, isX) {\n        var isRequired = series.chart.requireInvertedAxis;\n        var startPointLocation = getPoint(isX ? startValue : series.xAxis.visibleRange.min, isX ? series.yAxis.visibleRange.max : endValue, series.xAxis, series.yAxis, isRequired);\n        var endPointLocation = getPoint(isX ? endValue : series.xAxis.visibleRange.max, isX ? series.yAxis.visibleRange.min : startValue, series.xAxis, series.yAxis, isRequired);\n        endPointLocation = isRequired ?\n            [startPointLocation, startPointLocation = endPointLocation][0] : endPointLocation;\n        var options;\n        if (((series.xAxis.isInversed || series.xAxis.isAxisInverse) ? startPointLocation.x - endPointLocation.x > 0 : endPointLocation.x - startPointLocation.x > 0) &&\n            (series.yAxis.isInversed ? startPointLocation.y - endPointLocation.y > 0 : endPointLocation.y - startPointLocation.y > 0)) {\n            options = new RectOption(series.chart.element.id + '_ChartSegment' + series.index + 'ClipRect_' + index, 'transparent', { width: 1, color: 'Gray' }, 1, {\n                x: (series.xAxis.isInversed || series.xAxis.isAxisInverse) ? endPointLocation.x : startPointLocation.x,\n                y: series.yAxis.isInversed ? endPointLocation.y : startPointLocation.y,\n                width: (series.xAxis.isInversed || series.xAxis.isAxisInverse) ? startPointLocation.x - endPointLocation.x : endPointLocation.x - startPointLocation.x,\n                height: series.yAxis.isInversed ? startPointLocation.y - endPointLocation.y : endPointLocation.y - startPointLocation.y\n            });\n            if (!series.chart.enableCanvas) {\n                series.seriesElement.appendChild(appendClipElement(series.chart.redraw, options, series.chart.renderer));\n            }\n            return 'url(#' + series.chart.element.id + '_ChartSegment' + series.index + 'ClipRect_' + index + ')';\n        }\n        return null;\n    };\n    /**\n     * To get exact value from segment value.\n     *\n     * @param {Object} segmentValue segmentValue\n     * @param {Axis} axis axis\n     * @param {Chart} chart chart\n     */\n    MultiColoredSeries.prototype.getAxisValue = function (segmentValue, axis, chart) {\n        if (segmentValue === null) {\n            segmentValue = axis.visibleRange.max;\n        }\n        if (axis.valueType === 'DateTime') {\n            var option = { skeleton: 'full', type: 'dateTime' };\n            return Date.parse(chart.intl.getDateParser(option)(chart.intl.getDateFormat(option)(new Date(DataUtil.parse.parseJson({ val: segmentValue }).val))));\n        }\n        else if (axis.valueType.indexOf('Category') > -1) {\n            var xValue = axis.valueType === 'DateTimeCategory' ?\n                (segmentValue.getTime()).toString() :\n                segmentValue;\n            return (axis.labels.indexOf(xValue) < 0) ? +segmentValue : axis.labels.indexOf(xValue);\n        }\n        else {\n            return +segmentValue;\n        }\n    };\n    return MultiColoredSeries;\n}(LineBase));\nexport { MultiColoredSeries };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-param */\nimport { withInRange, getPoint } from '../../common/utils/helper';\nimport { PathOption } from '@syncfusion/ej2-svg-base';\nimport { MultiColoredSeries } from './multi-colored-base';\n/**\n * `MultiColoredLineSeries` used to render the line series with multi color.\n */\nvar MultiColoredLineSeries = /** @class */ (function (_super) {\n    __extends(MultiColoredLineSeries, _super);\n    function MultiColoredLineSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Render Line Series.\n     *\n     * @returns {void}\n     * @private\n     */\n    MultiColoredLineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n        var previous = null;\n        var startPoint = 'M';\n        var visiblePoints = this.enableComplexProperty(series);\n        var options = [];\n        var direction = '';\n        var lastPoint;\n        var segmentPoint = null;\n        var segments = this.sortSegments(series, series.segments);\n        for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n            var point = visiblePoints_1[_i];\n            point.regions = [];\n            if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n                lastPoint = point;\n                direction += this.getLineDirection(previous, point, series, isInverted, getPoint, startPoint);\n                if (previous != null) {\n                    if (this.setPointColor(point, previous, series, series.segmentAxis === 'X', segments)) {\n                        options.push(new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + previous.index, 'none', series.width, series.setPointColor(previous, series.interior), series.opacity, series.dashArray, direction));\n                        startPoint = 'M';\n                        direction = '';\n                    }\n                    else {\n                        startPoint = 'L';\n                    }\n                }\n                else {\n                    if (this.setPointColor(point, segmentPoint, series, series.segmentAxis === 'X', segments) && direction !== '') {\n                        options.push(new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + segmentPoint.index, 'none', series.width, series.setPointColor(segmentPoint, series.interior), series.opacity, series.dashArray, direction));\n                        startPoint = 'M';\n                        direction = '';\n                    }\n                }\n                previous = point;\n                segmentPoint = point;\n                this.storePointLocation(point, series, isInverted, getPoint);\n            }\n            else {\n                previous = (series.emptyPointSettings.mode === 'Drop') ? previous : null;\n                startPoint = (series.emptyPointSettings.mode === 'Drop') ? startPoint : 'M';\n                point.symbolLocations = [];\n            }\n        }\n        if (direction !== '') {\n            options.push(new PathOption(series.chart.element.id + '_Series_' + series.index, 'none', series.width, series.setPointColor(lastPoint, series.interior), series.opacity, series.dashArray, direction));\n        }\n        this.applySegmentAxis(series, options, segments);\n        this.renderMarker(series);\n    };\n    /**\n     * Animates the series.\n     *\n     * @param  {Series} series - Defines the series to animate.\n     * @returns {void}\n     */\n    MultiColoredLineSeries.prototype.doAnimation = function (series) {\n        this.doLinearAnimation(series, series.animation);\n    };\n    /**\n     * Get module name.\n     */\n    MultiColoredLineSeries.prototype.getModuleName = function () {\n        /**\n         * Returns the module name of the series\n         */\n        return 'MultiColoredLineSeries';\n    };\n    /**\n     * To destroy the line series.\n     *\n     * @returns {void}\n     * @private\n     */\n    MultiColoredLineSeries.prototype.destroy = function () {\n        /**\n         * Destroy method performed here\n         */\n    };\n    return MultiColoredLineSeries;\n}(MultiColoredSeries));\nexport { MultiColoredLineSeries };\n","module.exports = function(module) {\n\tif (!module.webpackPolyfill) {\n\t\tmodule.deprecate = function() {};\n\t\tmodule.paths = [];\n\t\t// module.parent = undefined by default\n\t\tif (!module.children) module.children = [];\n\t\tObject.defineProperty(module, \"loaded\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.l;\n\t\t\t}\n\t\t});\n\t\tObject.defineProperty(module, \"id\", {\n\t\t\tenumerable: true,\n\t\t\tget: function() {\n\t\t\t\treturn module.i;\n\t\t\t}\n\t\t});\n\t\tmodule.webpackPolyfill = 1;\n\t}\n\treturn module;\n};\n","/**\n * Specifies the chart constant value\n */\n/** @private */\nexport var loaded = 'loaded';\n/** @private */\nexport var legendClick = 'legendClick';\n/** @private */\nexport var load = 'load';\n/** @private */\nexport var animationComplete = 'animationComplete';\n/** @private */\nexport var legendRender = 'legendRender';\n/** @private */\nexport var textRender = 'textRender';\n/** @private */\nexport var pointRender = 'pointRender';\n/** @private */\nexport var sharedTooltipRender = 'sharedTooltipRender';\n/** @private */\nexport var seriesRender = 'seriesRender';\n/** @private */\nexport var axisLabelRender = 'axisLabelRender';\n/** @private */\nexport var axisLabelClick = 'axisLabelClick';\n/** @private */\nexport var axisRangeCalculated = 'axisRangeCalculated';\n/** @private */\nexport var axisMultiLabelRender = 'axisMultiLabelRender';\n/** @private */\nexport var tooltipRender = 'tooltipRender';\n/** @private */\nexport var chartMouseMove = 'chartMouseMove';\n/** @private */\nexport var chartMouseClick = 'chartMouseClick';\n/** @private */\nexport var chartDoubleClick = 'chartDoubleClick';\n/** @private */\nexport var pointClick = 'pointClick';\n/** @private */\nexport var pointDoubleClick = 'pointDoubleClick';\n/** @private */\nexport var pointMove = 'pointMove';\n/** @private */\nexport var chartMouseLeave = 'chartMouseLeave';\n/** @private */\nexport var chartMouseDown = 'chartMouseDown';\n/** @private */\nexport var chartMouseUp = 'chartMouseUp';\n/** @private */\nexport var zoomComplete = 'zoomComplete';\n/** @private */\nexport var dragComplete = 'dragComplete';\n/** @private */\nexport var selectionComplete = 'selectionComplete';\n/** @private */\nexport var resized = 'resized';\n/** @private */\nexport var beforeResize = 'beforeResize';\n/** @private */\nexport var beforePrint = 'beforePrint';\n/** @private */\nexport var annotationRender = 'annotationRender';\n/** @private */\nexport var scrollStart = 'scrollStart';\n/** @private */\nexport var scrollEnd = 'scrollEnd';\n/** @private */\nexport var scrollChanged = 'scrollChanged';\n/** @private */\nexport var stockEventRender = 'stockEventRender';\n/** @private */\nexport var multiLevelLabelClick = 'multiLevelLabelClick';\n/** @private */\nexport var dragStart = 'dragStart';\n/** @private */\nexport var drag = 'drag';\n/** @private */\nexport var dragEnd = 'dragEnd';\n/*** @private*/\nexport var regSub = /~\\d+~/g;\n/*** @private*/\nexport var regSup = /\\^\\d+\\^/g;\n/** @private */\nexport var beforeExport = 'beforeExport';\n/** @private */\nexport var afterExport = 'afterExport';\n/** @private */\nexport var bulletChartMouseClick = 'bulletChartMouseClick';\n/** @private */\nexport var onZooming = 'onZooming';\n","//! moment.js locale configuration\n//! locale : Malay [ms-my]\n//! note : DEPRECATED, the correct one is [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var msMy = moment.defineLocale('ms-my', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return msMy;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { getActualDesiredIntervalsCount, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn } from '../../common/utils/helper';\nimport { extend, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { NiceInterval } from '../axis/axis-helper';\n/**\n * `Category` module is used to render category axis.\n */\nvar Category = /** @class */ (function (_super) {\n    __extends(Category, _super);\n    /**\n     * Constructor for the category module.\n     *\n     * @private\n     */\n    function Category(chart) {\n        return _super.call(this, chart) || this;\n    }\n    /**\n     * The function to calculate the range and labels for the axis.\n     *\n     * @returns {void}\n     */\n    Category.prototype.calculateRangeAndInterval = function (size, axis) {\n        this.calculateRange(axis);\n        this.getActualRange(axis, size);\n        this.applyRangePadding(axis, size);\n        this.calculateVisibleLabels(axis);\n    };\n    /**\n     * Actual Range for the axis.\n     *\n     * @private\n     */\n    Category.prototype.getActualRange = function (axis, size) {\n        this.initializeDoubleRange(axis);\n        // axis.doubleRange = new DoubleRange(<number>this.min, <number>this.max);\n        axis.actualRange = {};\n        if (!axis.interval) {\n            axis.actualRange.interval = Math.max(1, Math.floor(axis.doubleRange.delta / getActualDesiredIntervalsCount(size, axis)));\n        }\n        else {\n            axis.actualRange.interval = Math.ceil(axis.interval);\n        }\n        axis.actualRange.min = axis.doubleRange.start;\n        axis.actualRange.max = axis.doubleRange.end;\n        axis.actualRange.delta = axis.doubleRange.delta;\n    };\n    /**\n     * Padding for the axis.\n     *\n     * @private\n     */\n    Category.prototype.applyRangePadding = function (axis, size) {\n        var isColumn;\n        axis.series.forEach(function (element) {\n            if (!isColumn) {\n                isColumn = element.type.indexOf('Column') > -1 && !(axis.zoomFactor < 1 || axis.zoomPosition > 0) && isNullOrUndefined(axis.minimum) && isNullOrUndefined(axis.maximum);\n            }\n        });\n        var ticks = ((axis.labelPlacement === 'BetweenTicks' || isColumn) && !this.chart.stockChart && this.chart.chartAreaType !== 'PolarRadar') ? 0.5 : 0;\n        if (ticks > 0) {\n            axis.actualRange.min -= ticks;\n            axis.actualRange.max += ticks;\n        }\n        else {\n            axis.actualRange.max += axis.actualRange.max ? 0 : 0.5;\n        }\n        axis.doubleRange = new DoubleRange(axis.actualRange.min, axis.actualRange.max);\n        axis.actualRange.delta = axis.doubleRange.delta;\n        this.calculateVisibleRange(size, axis);\n    };\n    /**\n     * Calculate label for the axis.\n     *\n     * @private\n     */\n    Category.prototype.calculateVisibleLabels = function (axis) {\n        /*! Generate axis labels */\n        axis.visibleLabels = [];\n        axis.visibleRange.interval = axis.visibleRange.interval < 1 ? 1 : axis.visibleRange.interval;\n        var tempInterval = Math.ceil(axis.visibleRange.min);\n        var labelStyle;\n        if (axis.zoomFactor < 1 || axis.zoomPosition > 0) {\n            tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n        }\n        var position;\n        axis.startLabel = axis.labels[Math.round(axis.visibleRange.min)];\n        axis.endLabel = axis.labels[Math.floor(axis.visibleRange.max)];\n        for (; tempInterval <= axis.visibleRange.max; tempInterval += axis.visibleRange.interval) {\n            labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n            if (withIn(tempInterval, axis.visibleRange) && axis.labels.length > 0) {\n                position = Math.round(tempInterval);\n                triggerLabelRender(this.chart, position, axis.labels[position] ? axis.labels[position].toString() : '', labelStyle, axis);\n            }\n        }\n        if (axis.getMaxLabelWidth) {\n            axis.getMaxLabelWidth(this.chart);\n        }\n    };\n    /**\n     * Get module name\n     */\n    Category.prototype.getModuleName = function () {\n        /**\n         * Returns the module name\n         */\n        return 'Category';\n    };\n    /**\n     * To destroy the category axis.\n     *\n     * @returns {void}\n     * @private\n     */\n    Category.prototype.destroy = function () {\n        /**\n         * Destroy method performed here\n         */\n    };\n    return Category;\n}(NiceInterval));\nexport { Category };\n","//! moment.js locale configuration\n//! locale : Esperanto [eo]\n//! author : Colin Dean : https://github.com/colindean\n//! author : Mia Nordentoft Imperatori : https://github.com/miestasmia\n//! comment : miestasmia corrected the translation by colindean\n//! comment : Vivakvo corrected the translation by colindean and miestasmia\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var eo = moment.defineLocale('eo', {\n        months: 'januaro_februaro_marto_aprilo_majo_junio_julio_aŭgusto_septembro_oktobro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mart_apr_maj_jun_jul_aŭg_sept_okt_nov_dec'.split('_'),\n        weekdays: 'dimanĉo_lundo_mardo_merkredo_ĵaŭdo_vendredo_sabato'.split('_'),\n        weekdaysShort: 'dim_lun_mard_merk_ĵaŭ_ven_sab'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_ĵa_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: '[la] D[-an de] MMMM, YYYY',\n            LLL: '[la] D[-an de] MMMM, YYYY HH:mm',\n            LLLL: 'dddd[n], [la] D[-an de] MMMM, YYYY HH:mm',\n            llll: 'ddd, [la] D[-an de] MMM, YYYY HH:mm',\n        },\n        meridiemParse: /[ap]\\.t\\.m/i,\n        isPM: function (input) {\n            return input.charAt(0).toLowerCase() === 'p';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'p.t.m.' : 'P.T.M.';\n            } else {\n                return isLower ? 'a.t.m.' : 'A.T.M.';\n            }\n        },\n        calendar: {\n            sameDay: '[Hodiaŭ je] LT',\n            nextDay: '[Morgaŭ je] LT',\n            nextWeek: 'dddd[n je] LT',\n            lastDay: '[Hieraŭ je] LT',\n            lastWeek: '[pasintan] dddd[n je] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'post %s',\n            past: 'antaŭ %s',\n            s: 'kelkaj sekundoj',\n            ss: '%d sekundoj',\n            m: 'unu minuto',\n            mm: '%d minutoj',\n            h: 'unu horo',\n            hh: '%d horoj',\n            d: 'unu tago', //ne 'diurno', ĉar estas uzita por proksimumo\n            dd: '%d tagoj',\n            M: 'unu monato',\n            MM: '%d monatoj',\n            y: 'unu jaro',\n            yy: '%d jaroj',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}a/,\n        ordinal: '%da',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return eo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sindhi [sd]\n//! author : Narain Sagar : https://github.com/narainsagar\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'جنوري',\n            'فيبروري',\n            'مارچ',\n            'اپريل',\n            'مئي',\n            'جون',\n            'جولاءِ',\n            'آگسٽ',\n            'سيپٽمبر',\n            'آڪٽوبر',\n            'نومبر',\n            'ڊسمبر',\n        ],\n        days = ['آچر', 'سومر', 'اڱارو', 'اربع', 'خميس', 'جمع', 'ڇنڇر'];\n\n    var sd = moment.defineLocale('sd', {\n        months: months,\n        monthsShort: months,\n        weekdays: days,\n        weekdaysShort: days,\n        weekdaysMin: days,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd، D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /صبح|شام/,\n        isPM: function (input) {\n            return 'شام' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'صبح';\n            }\n            return 'شام';\n        },\n        calendar: {\n            sameDay: '[اڄ] LT',\n            nextDay: '[سڀاڻي] LT',\n            nextWeek: 'dddd [اڳين هفتي تي] LT',\n            lastDay: '[ڪالهه] LT',\n            lastWeek: '[گزريل هفتي] dddd [تي] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s پوء',\n            past: '%s اڳ',\n            s: 'چند سيڪنڊ',\n            ss: '%d سيڪنڊ',\n            m: 'هڪ منٽ',\n            mm: '%d منٽ',\n            h: 'هڪ ڪلاڪ',\n            hh: '%d ڪلاڪ',\n            d: 'هڪ ڏينهن',\n            dd: '%d ڏينهن',\n            M: 'هڪ مهينو',\n            MM: '%d مهينا',\n            y: 'هڪ سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string.replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sd;\n\n})));\n","/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable max-len */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/**\n * StripLine src\n */\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { valueToCoefficient, textElement, RectOption, appendChildElement, appendClipElement, withIn, getElement, ImageOption } from '../../common/utils/helper';\nimport { measureText, TextOption, PathOption, Rect } from '@syncfusion/ej2-svg-base';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * `StripLine` module is used to render the stripLine in chart.\n */\nvar StripLine = /** @class */ (function () {\n    function StripLine() {\n    }\n    /**\n     * Finding x, y, width and height of the strip line\n     *\n     * @param {Axis} axis axis\n     * @param {StripLineSettingsModel} stripline stripline\n     * @param {Rect} seriesClipRect seriesClipRect\n     * @param {number} startValue startValue\n     * @param {Axis} segmentAxis segmentAxis\n     * @param {Chart} chart chart instance\n     */\n    StripLine.prototype.measureStripLine = function (axis, stripline, seriesClipRect, startValue, segmentAxis, chart) {\n        var actualStart;\n        var actualEnd;\n        var orientation = axis.orientation;\n        var isDateTimeAxis = axis.valueType === 'DateTime';\n        if (stripline.isRepeat && stripline.size !== null) {\n            actualStart = startValue;\n            actualEnd = null;\n        }\n        else {\n            if (axis.valueType === 'DateTimeCategory') {\n                var start = stripline.start;\n                var end = stripline.end;\n                actualStart = (start != null && typeof start !== 'number') ?\n                    axis.labels.indexOf(this.dateToMilliSeconds(start, chart).toString()) : start;\n                actualEnd = (end != null && typeof end !== 'number') ?\n                    axis.labels.indexOf(this.dateToMilliSeconds(end, chart).toString()) : end;\n            }\n            else {\n                actualStart = stripline.start === null ? null : isDateTimeAxis && this.isCoreDate(stripline.start) ?\n                    this.dateToMilliSeconds(stripline.start, chart) : +stripline.start;\n                actualEnd = stripline.end === null ? null : isDateTimeAxis && this.isCoreDate(stripline.start) ?\n                    this.dateToMilliSeconds(stripline.end, chart) : +stripline.end;\n            }\n        }\n        var rect = this.getFromTovalue(actualStart, actualEnd, stripline.size, stripline.startFromAxis, axis, stripline);\n        var height = (orientation === 'Vertical') ? (rect.to - rect.from) * axis.rect.height : seriesClipRect.height;\n        var width = (orientation === 'Horizontal') ? (rect.to - rect.from) * axis.rect.width : seriesClipRect.width;\n        var x = (orientation === 'Vertical') ? seriesClipRect.x : ((rect.from * axis.rect.width) + axis.rect.x);\n        var y = (orientation === 'Horizontal') ? seriesClipRect.y : (axis.rect.y + axis.rect.height -\n            ((stripline.sizeType === 'Pixel' ? rect.from : rect.to) * axis.rect.height));\n        if (stripline.isSegmented && stripline.segmentStart != null && stripline.segmentEnd != null && stripline.sizeType !== 'Pixel') {\n            var start = isDateTimeAxis && this.isCoreDate(stripline.segmentStart) ?\n                this.dateToMilliSeconds(stripline.segmentStart, chart) : +stripline.segmentStart;\n            var end = isDateTimeAxis && this.isCoreDate(stripline.segmentEnd) ?\n                this.dateToMilliSeconds(stripline.segmentEnd, chart) : +stripline.segmentEnd;\n            var segRect = this.getFromTovalue(start, end, null, null, segmentAxis, stripline);\n            if (segmentAxis.orientation === 'Vertical') {\n                y = (segmentAxis.rect.y + segmentAxis.rect.height -\n                    (segRect.to * segmentAxis.rect.height));\n                height = (segRect.to - segRect.from) * segmentAxis.rect.height;\n            }\n            else {\n                x = ((segRect.from * segmentAxis.rect.width) + segmentAxis.rect.x);\n                width = (segRect.to - segRect.from) * segmentAxis.rect.width;\n            }\n        }\n        if ((height !== 0 && width !== 0) || (stripline.sizeType === 'Pixel' && (stripline.start !== null || stripline.startFromAxis))) {\n            return new Rect(x, y, width, height);\n        }\n        return new Rect(0, 0, 0, 0);\n    };\n    /**\n     * To get from to value from start, end, size, start from axis\n     *\n     * @param {number} start start\n     * @param {number} end end\n     * @param {number} size size\n     * @param {boolean} startFromAxis startFromAxis\n     * @param {Axis} axis axis\n     * @param {StripLineSettingsModel} stripline stripline\n     */\n    StripLine.prototype.getFromTovalue = function (start, end, size, startFromAxis, axis, stripline) {\n        var from = (!stripline.isRepeat && startFromAxis) ? axis.visibleRange.min : start;\n        if (axis.valueType === 'Double' && size !== null && !startFromAxis && stripline.start == null) {\n            from += size;\n        }\n        var to = this.getToValue(Math.max(start, isNullOrUndefined(end) ? start : end), from, size, axis, end, stripline);\n        from = this.findValue(from, axis);\n        to = this.findValue(to, axis);\n        return { from: valueToCoefficient(axis.isAxisInverse ? to : from, axis), to: valueToCoefficient(axis.isAxisInverse ? from : to, axis) };\n    };\n    /**\n     * Finding end value of the strip line\n     *\n     * @param {number} to to\n     * @param {number} from from\n     * @param {number} size size\n     * @param {Axis} axis axis\n     * @param {number} end end\n     * @param {StripLineSettingsModel} stripline stripline\n     */\n    StripLine.prototype.getToValue = function (to, from, size, axis, end, stripline) {\n        var sizeType = stripline.sizeType;\n        var isEnd = (end === null);\n        if (axis.valueType === 'DateTime') {\n            var fromValue = new Date(from);\n            if (sizeType === 'Auto') {\n                sizeType = axis.actualIntervalType;\n                size *= axis.visibleRange.interval;\n            }\n            switch (sizeType) {\n                case 'Years':\n                    return (isEnd ? new Date(fromValue.setFullYear(fromValue.getFullYear() + size)) : to);\n                case 'Months':\n                    return (isEnd ? new Date(fromValue.setMonth(fromValue.getMonth() + size)) : to);\n                case 'Days':\n                    return (isEnd ? new Date(fromValue.setDate(fromValue.getDate() + size)) : to);\n                case 'Hours':\n                    return (isEnd ? new Date(fromValue.setHours(fromValue.getHours() + size)) : to);\n                case 'Minutes':\n                    return (isEnd ? new Date(fromValue.setMinutes(fromValue.getMinutes() + size)) : to);\n                case 'Seconds':\n                    return (isEnd ? new Date(fromValue.setSeconds(fromValue.getSeconds() + size)) : to);\n                default:\n                    return from;\n            }\n        }\n        else {\n            return stripline.sizeType === 'Pixel' ? from : (isEnd ? (from + size) : to);\n        }\n    };\n    /**\n     * To check the strip line values within range\n     *\n     * @param {number} value value\n     * @param {Axis} axis axis\n     */\n    StripLine.prototype.findValue = function (value, axis) {\n        if (value < axis.visibleRange.min) {\n            value = axis.visibleRange.min;\n        }\n        else if (value > axis.visibleRange.max) {\n            value = axis.visibleRange.max;\n        }\n        return value;\n    };\n    /**\n     * Date parse\n     *\n     * @param {Date} value date\n     * @param {Chart} chart chart instance\n     * @returns {Date} parsed date\n     */\n    StripLine.prototype.dateParse = function (value, chart) {\n        var dateParser = chart.intl.getDateParser({ skeleton: 'full', type: 'dateTime' });\n        var dateFormatter = chart.intl.getDateFormat({ skeleton: 'full', type: 'dateTime' });\n        return new Date((Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: value }).val))))));\n    };\n    /**\n     * To render strip lines based start and end.\n     *\n     * @param {Chart} chart chart\n     * @param {ZIndex} position position\n     * @param {Axis[]} axes axes\n     * @private\n     */\n    StripLine.prototype.renderStripLine = function (chart, position, axes) {\n        var id = chart.element.id + '_stripline_' + position + '_';\n        var seriesClipRect = chart.chartAxisLayoutPanel.seriesClipRect;\n        var end = 0;\n        var limit = 0;\n        var startValue = 0;\n        var segmentAxis = null;\n        var range;\n        var options = new RectOption(id + 'ClipRect', 'transparent', { width: 1, color: 'Gray' }, 1, {\n            x: seriesClipRect.x, y: seriesClipRect.y,\n            width: seriesClipRect.width,\n            height: seriesClipRect.height\n        });\n        var striplineGroup = chart.renderer.createGroup({\n            id: id + 'collections',\n            'clip-path': 'url(#' + id + 'ClipRect' + ')'\n        });\n        if (!chart.enableCanvas) {\n            striplineGroup.appendChild(appendClipElement(chart.redraw, options, chart.renderer));\n        }\n        for (var _i = 0, axes_1 = axes; _i < axes_1.length; _i++) {\n            var axis = axes_1[_i];\n            var count = 0;\n            for (var _a = 0, _b = axis.stripLines; _a < _b.length; _a++) {\n                var stripline = _b[_a];\n                if (stripline.visible && stripline.zIndex === position) {\n                    if (stripline.isSegmented && stripline.segmentStart != null && stripline.segmentEnd != null &&\n                        stripline.sizeType !== 'Pixel') {\n                        segmentAxis = this.getSegmentAxis(axes, axis, stripline);\n                    }\n                    if (stripline.isRepeat && stripline.repeatEvery != null && stripline.size !== null && stripline.sizeType !== 'Pixel') {\n                        limit = (stripline.repeatUntil != null) ? ((axis.valueType === 'DateTime') ?\n                            this.dateToMilliSeconds(stripline.repeatUntil, chart) : +stripline.repeatUntil) : axis.actualRange.max;\n                        startValue = axis.valueType === 'DateTime' && this.isCoreDate(stripline.start) ?\n                            this.dateToMilliSeconds(stripline.start, chart) : stripline.start;\n                        if ((stripline.startFromAxis && axis.valueType === 'DateTime' && stripline.sizeType === 'Auto') ||\n                            (stripline.start < axis.visibleRange.min)) {\n                            startValue = axis.visibleLabels[0].value === axis.visibleRange.min ? axis.visibleRange.min :\n                                axis.visibleLabels[0].value - (axis.valueType === 'DateTime' ? axis.dateTimeInterval :\n                                    axis.visibleRange.interval);\n                        }\n                        startValue = stripline.startFromAxis && axis.valueType !== 'DateTime' ? axis.visibleRange.min : startValue;\n                        while (startValue < limit) {\n                            end = (startValue + (axis.valueType === 'DateTime' ? axis.dateTimeInterval * +stripline.size : stripline.size));\n                            range = withIn(end, axis.visibleRange);\n                            if ((startValue >= axis.visibleRange.min && startValue < axis.visibleRange.max) || range) {\n                                this.renderStripLineElement(axis, stripline, seriesClipRect, id, striplineGroup, chart, startValue, segmentAxis, count);\n                            }\n                            count++;\n                            startValue = this.getStartValue(axis, stripline, startValue, chart);\n                        }\n                    }\n                    else {\n                        this.renderStripLineElement(axis, stripline, seriesClipRect, id, striplineGroup, chart, null, segmentAxis, count);\n                        count++;\n                    }\n                }\n            }\n        }\n        appendChildElement(chart.enableCanvas, chart.svgObject, striplineGroup, chart.redraw);\n    };\n    /**\n     * To convert the C# date to js date\n     *\n     * @param {string | number | Object} value date value\n     * @returns {boolean} returns true if datetime value type is string(for asp platform)\n     */\n    StripLine.prototype.isCoreDate = function (value) {\n        return typeof value === 'string' ? true : false;\n    };\n    /**\n     * To get the total milli seconds\n     *\n     * @param {Date | number | Object} value date value\n     * @param {Chart} chart chart instance\n     * @returns {number} returns milliseconds\n     */\n    StripLine.prototype.dateToMilliSeconds = function (value, chart) {\n        return this.dateParse(value, chart).getTime();\n    };\n    /**\n     * To draw the single line strip line\n     *\n     * @param {StripLineSettingsModel} stripline stripline\n     * @param {Rect} rect rect\n     * @param {string} id id\n     * @param {Element} parent parent\n     * @param {Chart} chart chart\n     * @param {Axis} axis axis\n     */\n    StripLine.prototype.renderPath = function (stripline, rect, id, parent, chart, axis) {\n        var element = getElement(id);\n        var direction = element ? element.getAttribute('d') : '';\n        var strokeWidth = stripline.size;\n        var d = (axis.orientation === 'Vertical') ? ('M ' + rect.x + ' ' + rect.y + ' ' + 'L ' + (rect.x + rect.width)\n            + ' ' + rect.y) :\n            ('M ' + rect.x + ' ' + rect.y + ' ' + 'L ' + rect.x + ' ' + (rect.y + rect.height));\n        if (stripline.sizeType !== 'Pixel') {\n            d = (axis.orientation === 'Vertical') ? ('M ' + rect.x + ' ' + (rect.y + (rect.height / 2)) + ' ' + 'L ' + (rect.x + rect.width)\n                + ' ' + (rect.y + (rect.height / 2))) :\n                ('M ' + (rect.x + (rect.width / 2)) + ' ' + rect.y + ' ' + 'L ' + (rect.x + (rect.width / 2)) + ' ' + (rect.y + rect.height));\n            strokeWidth = axis.orientation === 'Vertical' ? rect.height : rect.width;\n        }\n        appendChildElement(chart.enableCanvas, parent, chart.renderer.drawPath(new PathOption(id, 'none', strokeWidth, stripline.color, stripline.opacity, stripline.dashArray, d)), chart.redraw, true, 'x', 'y', null, direction, true);\n    };\n    /**\n     * To draw the rectangle\n     *\n     * @param {StripLineSettingsModel} stripline stripline\n     * @param {Rect} rect rect\n     * @param {string} id id\n     * @param {Element} parent parent\n     * @param {Chart} chart chart\n     */\n    StripLine.prototype.renderRectangle = function (stripline, rect, id, parent, chart) {\n        var element = getElement(id);\n        var previousRect = element ? new Rect(+element.getAttribute('x'), +element.getAttribute('y'), +element.getAttribute('width'), +element.getAttribute('height')) : null;\n        appendChildElement(chart.enableCanvas, parent, chart.renderer.drawRectangle(new RectOption(id, 'none', stripline.border, stripline.opacity, rect, 0, 0, '', null)), chart.redraw, true, 'x', 'y', null, null, true, true, previousRect);\n    };\n    /**\n     * To draw the Image\n     *\n     * @param {StripLineSettingsModel} stripline stripline\n     * @param {Rect} rect rect\n     * @param {string} id id\n     * @param {Element} parent parent\n     * @param {Chart} chart chart\n     */\n    StripLine.prototype.drawImage = function (stripline, rect, id, parent, chart) {\n        if (stripline.sizeType === 'Pixel') {\n            rect.width = rect.width ? rect.width : stripline.size;\n            rect.height = rect.height ? rect.height : stripline.size;\n        }\n        var image = new ImageOption(rect.height, rect.width, stripline.imageUrl, rect.x, rect.y, id, 'visible', 'none');\n        var htmlObject = chart.renderer.drawImage(image);\n        appendChildElement(chart.enableCanvas, parent, htmlObject, chart.redraw, true, 'x', 'y', null, null, true, true);\n    };\n    /**\n     * To create the text on strip line\n     *\n     * @param {StripLineSettingsModel} stripline stripline\n     * @param {Rect} rect rect\n     * @param {string} id id\n     * @param {Element} parent parent\n     * @param {Chart} chart chart\n     * @param {Axis} axis axis\n     */\n    StripLine.prototype.renderText = function (stripline, rect, id, parent, chart, axis) {\n        var textSize = measureText(stripline.text, stripline.textStyle, chart.themeStyle.stripLineLabelFont);\n        var isRotationNull = (stripline.rotation === null);\n        var textMid = isRotationNull ? 3 * (textSize.height / 8) : 0;\n        var ty = rect.y + (rect.height / 2) + textMid;\n        var rotation = isRotationNull ? ((axis.orientation === 'Vertical') ? 0 : -90) : stripline.rotation;\n        var tx = rect.x + (rect.width / 2);\n        var anchor;\n        var padding = 5;\n        if (axis.orientation === 'Horizontal') {\n            tx = this.getTextStart(tx + (textMid * this.factor(stripline.horizontalAlignment)), rect.width, stripline.horizontalAlignment);\n            ty = this.getTextStart(ty - textMid, rect.height, stripline.verticalAlignment) +\n                (stripline.verticalAlignment === 'Start' && !isRotationNull ? (textSize.height / 4) : 0);\n            anchor = isRotationNull ? this.invertAlignment(stripline.verticalAlignment) : stripline.horizontalAlignment;\n            anchor = tx - textSize.width / 2 < axis.rect.x ? 'Start' : tx + textSize.width / 2 > axis.rect.width ? 'End' : anchor;\n        }\n        else {\n            tx = this.getTextStart(tx, rect.width, stripline.horizontalAlignment);\n            ty = this.getTextStart(ty + (textMid * this.factor(stripline.verticalAlignment)) - padding, rect.height, stripline.verticalAlignment);\n            anchor = stripline.horizontalAlignment;\n            anchor = chart.enableRtl ? (anchor === 'End' ? 'Start' : anchor === 'Start' ? 'End' : anchor) : anchor;\n        }\n        textElement(chart.renderer, new TextOption(id, tx, ty, anchor, stripline.text, 'rotate(' + rotation + ' ' + tx + ',' + ty + ')', 'middle'), stripline.textStyle, stripline.textStyle.color || chart.themeStyle.stripLineLabelFont.color, parent, null, null, null, null, null, null, null, null, chart.enableCanvas, null, chart.themeStyle.stripLineLabelFont);\n    };\n    StripLine.prototype.invertAlignment = function (anchor) {\n        switch (anchor) {\n            case 'Start':\n                anchor = 'End';\n                break;\n            case 'End':\n                anchor = 'Start';\n                break;\n        }\n        return anchor;\n    };\n    /**\n     * To find the next value of the recurrence strip line\n     *\n     * @param {Axis} axis axis\n     * @param {StripLineSettingsModel} stripline stripline\n     * @param {number} startValue startValue\n     * @param {Chart} chart chart instance\n     * @returns {number} next start value of the recurrence strip line\n     */\n    StripLine.prototype.getStartValue = function (axis, stripline, startValue, chart) {\n        if (axis.valueType === 'DateTime') {\n            return (this.getToValue(null, startValue, +stripline.repeatEvery, axis, null, stripline));\n        }\n        else {\n            return startValue + (+stripline.repeatEvery);\n        }\n    };\n    /**\n     * Finding segment axis for segmented strip line\n     *\n     * @param {Axis[]} axes axes collection\n     * @param {Axis} axis axis\n     * @param {StripLineSettingsModel} stripline stripline\n     */\n    StripLine.prototype.getSegmentAxis = function (axes, axis, stripline) {\n        var segment;\n        if (stripline.segmentAxisName == null) {\n            return (axis.orientation === 'Horizontal') ? axes[1] : axes[0];\n        }\n        else {\n            for (var i = 0; i < axes.length; i++) {\n                if (stripline.segmentAxisName === axes[i].name) {\n                    segment = axes[i];\n                }\n            }\n            return segment;\n        }\n    };\n    /**\n     * To render strip line on chart\n     *\n     * @param {Axis} axis axis\n     * @param {StripLineSettingsModel} stripline stripline\n     * @param {Rect} seriesClipRect seriesClipRect\n     * @param {string} id id\n     * @param {Element} striplineGroup striplineGroup\n     * @param {Chart} chart chart\n     * @param {number} startValue startValue\n     * @param {Axis} segmentAxis segmentAxis\n     * @param {number} count count\n     */\n    StripLine.prototype.renderStripLineElement = function (axis, stripline, seriesClipRect, id, striplineGroup, chart, startValue, segmentAxis, count) {\n        var rect = this.measureStripLine(axis, stripline, seriesClipRect, startValue, segmentAxis, chart);\n        if (stripline.imageUrl) {\n            this.drawImage(stripline, rect, id + 'rect_' + axis.name + '_' + count, striplineGroup, chart);\n        }\n        else {\n            this.renderPath(stripline, rect, id + (stripline.sizeType === 'Pixel' ? 'path_' : 'rect_') + axis.name + '_' + count, striplineGroup, chart, axis);\n            var pixelRect = new Rect(axis.orientation === 'Horizontal' ? (rect.x - stripline.size / 2) : rect.x, axis.orientation === 'Vertical' ? (rect.y - stripline.size / 2) : rect.y, rect.width ? rect.width : stripline.size, rect.height ? rect.height : stripline.size);\n            this.renderRectangle(stripline, stripline.sizeType === 'Pixel' ? pixelRect : rect, id + 'border_' + axis.name + '_' + count, striplineGroup, chart);\n        }\n        if (stripline.text !== '') {\n            this.renderText(stripline, rect, id + 'text_' + axis.name + '_' + count, striplineGroup, chart, axis);\n        }\n    };\n    /**\n     * To find the factor of the text\n     *\n     * @param {Anchor} anchor text anchor\n     */\n    StripLine.prototype.factor = function (anchor) {\n        var factor = 0;\n        switch (anchor) {\n            case 'Start':\n                factor = 1;\n                break;\n            case 'End':\n                factor = -1;\n                break;\n        }\n        return factor;\n    };\n    /**\n     * To find the start value of the text\n     *\n     * @param {number} xy xy values\n     * @param {number} size text size\n     * @param {Anchor} textAlignment text alignment\n     */\n    StripLine.prototype.getTextStart = function (xy, size, textAlignment) {\n        var padding = 5;\n        switch (textAlignment) {\n            case 'Start':\n                xy = xy - (size / 2) + padding;\n                break;\n            case 'End':\n                xy = xy + (size / 2) - padding;\n                break;\n        }\n        return xy;\n    };\n    /**\n     * To get the module name for `StripLine`.\n     *\n     * @private\n     */\n    StripLine.prototype.getModuleName = function () {\n        return 'StripLine';\n    };\n    /**\n     * To destroy the `StripLine` module.\n     *\n     * @private\n     */\n    StripLine.prototype.destroy = function () {\n        // destroy peform here\n    };\n    return StripLine;\n}());\nexport { StripLine };\n","//! moment.js locale configuration\n//! locale : Breton [br]\n//! author : Jean-Baptiste Le Duigou : https://github.com/jbleduigou\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithMutation(number, withoutSuffix, key) {\n        var format = {\n            mm: 'munutenn',\n            MM: 'miz',\n            dd: 'devezh',\n        };\n        return number + ' ' + mutation(format[key], number);\n    }\n    function specialMutationForYears(number) {\n        switch (lastNumber(number)) {\n            case 1:\n            case 3:\n            case 4:\n            case 5:\n            case 9:\n                return number + ' bloaz';\n            default:\n                return number + ' vloaz';\n        }\n    }\n    function lastNumber(number) {\n        if (number > 9) {\n            return lastNumber(number % 10);\n        }\n        return number;\n    }\n    function mutation(text, number) {\n        if (number === 2) {\n            return softMutation(text);\n        }\n        return text;\n    }\n    function softMutation(text) {\n        var mutationTable = {\n            m: 'v',\n            b: 'v',\n            d: 'z',\n        };\n        if (mutationTable[text.charAt(0)] === undefined) {\n            return text;\n        }\n        return mutationTable[text.charAt(0)] + text.substring(1);\n    }\n\n    var monthsParse = [\n            /^gen/i,\n            /^c[ʼ\\']hwe/i,\n            /^meu/i,\n            /^ebr/i,\n            /^mae/i,\n            /^(mez|eve)/i,\n            /^gou/i,\n            /^eos/i,\n            /^gwe/i,\n            /^her/i,\n            /^du/i,\n            /^ker/i,\n        ],\n        monthsRegex =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu|gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        monthsStrictRegex =\n            /^(genver|c[ʼ\\']hwevrer|meurzh|ebrel|mae|mezheven|gouere|eost|gwengolo|here|du|kerzu)/i,\n        monthsShortStrictRegex =\n            /^(gen|c[ʼ\\']hwe|meu|ebr|mae|eve|gou|eos|gwe|her|du|ker)/i,\n        fullWeekdaysParse = [\n            /^sul/i,\n            /^lun/i,\n            /^meurzh/i,\n            /^merc[ʼ\\']her/i,\n            /^yaou/i,\n            /^gwener/i,\n            /^sadorn/i,\n        ],\n        shortWeekdaysParse = [\n            /^Sul/i,\n            /^Lun/i,\n            /^Meu/i,\n            /^Mer/i,\n            /^Yao/i,\n            /^Gwe/i,\n            /^Sad/i,\n        ],\n        minWeekdaysParse = [\n            /^Su/i,\n            /^Lu/i,\n            /^Me([^r]|$)/i,\n            /^Mer/i,\n            /^Ya/i,\n            /^Gw/i,\n            /^Sa/i,\n        ];\n\n    var br = moment.defineLocale('br', {\n        months: 'Genver_Cʼhwevrer_Meurzh_Ebrel_Mae_Mezheven_Gouere_Eost_Gwengolo_Here_Du_Kerzu'.split(\n            '_'\n        ),\n        monthsShort: 'Gen_Cʼhwe_Meu_Ebr_Mae_Eve_Gou_Eos_Gwe_Her_Du_Ker'.split('_'),\n        weekdays: 'Sul_Lun_Meurzh_Mercʼher_Yaou_Gwener_Sadorn'.split('_'),\n        weekdaysShort: 'Sul_Lun_Meu_Mer_Yao_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Lu_Me_Mer_Ya_Gw_Sa'.split('_'),\n        weekdaysParse: minWeekdaysParse,\n        fullWeekdaysParse: fullWeekdaysParse,\n        shortWeekdaysParse: shortWeekdaysParse,\n        minWeekdaysParse: minWeekdaysParse,\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [a viz] MMMM YYYY',\n            LLL: 'D [a viz] MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [a viz] MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hiziv da] LT',\n            nextDay: '[Warcʼhoazh da] LT',\n            nextWeek: 'dddd [da] LT',\n            lastDay: '[Decʼh da] LT',\n            lastWeek: 'dddd [paset da] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'a-benn %s',\n            past: '%s ʼzo',\n            s: 'un nebeud segondennoù',\n            ss: '%d eilenn',\n            m: 'ur vunutenn',\n            mm: relativeTimeWithMutation,\n            h: 'un eur',\n            hh: '%d eur',\n            d: 'un devezh',\n            dd: relativeTimeWithMutation,\n            M: 'ur miz',\n            MM: relativeTimeWithMutation,\n            y: 'ur bloaz',\n            yy: specialMutationForYears,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(añ|vet)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'añ' : 'vet';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        meridiemParse: /a.m.|g.m./, // goude merenn | a-raok merenn\n        isPM: function (token) {\n            return token === 'g.m.';\n        },\n        meridiem: function (hour, minute, isLower) {\n            return hour < 12 ? 'a.m.' : 'g.m.';\n        },\n    });\n\n    return br;\n\n})));\n","//! moment.js locale configuration\n//! locale : Maori [mi]\n//! author : John Corrigan <robbiecloset@gmail.com> : https://github.com/johnideal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mi = moment.defineLocale('mi', {\n        months: 'Kohi-tāte_Hui-tanguru_Poutū-te-rangi_Paenga-whāwhā_Haratua_Pipiri_Hōngoingoi_Here-turi-kōkā_Mahuru_Whiringa-ā-nuku_Whiringa-ā-rangi_Hakihea'.split(\n            '_'\n        ),\n        monthsShort:\n            'Kohi_Hui_Pou_Pae_Hara_Pipi_Hōngoi_Here_Mahu_Whi-nu_Whi-ra_Haki'.split(\n                '_'\n            ),\n        monthsRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,3}/i,\n        monthsShortStrictRegex: /(?:['a-z\\u0101\\u014D\\u016B]+\\-?){1,2}/i,\n        weekdays: 'Rātapu_Mane_Tūrei_Wenerei_Tāite_Paraire_Hātarei'.split('_'),\n        weekdaysShort: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        weekdaysMin: 'Ta_Ma_Tū_We_Tāi_Pa_Hā'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [i] HH:mm',\n            LLLL: 'dddd, D MMMM YYYY [i] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i teie mahana, i] LT',\n            nextDay: '[apopo i] LT',\n            nextWeek: 'dddd [i] LT',\n            lastDay: '[inanahi i] LT',\n            lastWeek: 'dddd [whakamutunga i] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'i roto i %s',\n            past: '%s i mua',\n            s: 'te hēkona ruarua',\n            ss: '%d hēkona',\n            m: 'he meneti',\n            mm: '%d meneti',\n            h: 'te haora',\n            hh: '%d haora',\n            d: 'he ra',\n            dd: '%d ra',\n            M: 'he marama',\n            MM: '%d marama',\n            y: 'he tau',\n            yy: '%d tau',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return mi;\n\n})));\n","//! moment.js locale configuration\n//! locale : Macedonian [mk]\n//! author : Borislav Mickov : https://github.com/B0k0\n//! author : Sashko Todorov : https://github.com/bkyceh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var mk = moment.defineLocale('mk', {\n        months: 'јануари_февруари_март_април_мај_јуни_јули_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'јан_фев_мар_апр_мај_јун_јул_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'недела_понеделник_вторник_среда_четврток_петок_сабота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сре_чет_пет_саб'.split('_'),\n        weekdaysMin: 'нe_пo_вт_ср_че_пе_сa'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Денес во] LT',\n            nextDay: '[Утре во] LT',\n            nextWeek: '[Во] dddd [во] LT',\n            lastDay: '[Вчера во] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Изминатата] dddd [во] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Изминатиот] dddd [во] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: 'пред %s',\n            s: 'неколку секунди',\n            ss: '%d секунди',\n            m: 'една минута',\n            mm: '%d минути',\n            h: 'еден час',\n            hh: '%d часа',\n            d: 'еден ден',\n            dd: '%d дена',\n            M: 'еден месец',\n            MM: '%d месеци',\n            y: 'една година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return mk;\n\n})));\n","//! moment.js locale configuration\n//! locale : Norwegian Bokmål [nb]\n//! authors : Espen Hovlandsdal : https://github.com/rexxars\n//!           Sigurd Gartmann : https://github.com/sigurdga\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var nb = moment.defineLocale('nb', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'søndag_mandag_tirsdag_onsdag_torsdag_fredag_lørdag'.split('_'),\n        weekdaysShort: 'sø._ma._ti._on._to._fr._lø.'.split('_'),\n        weekdaysMin: 'sø_ma_ti_on_to_fr_lø'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] HH:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[i dag kl.] LT',\n            nextDay: '[i morgen kl.] LT',\n            nextWeek: 'dddd [kl.] LT',\n            lastDay: '[i går kl.] LT',\n            lastWeek: '[forrige] dddd [kl.] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s siden',\n            s: 'noen sekunder',\n            ss: '%d sekunder',\n            m: 'ett minutt',\n            mm: '%d minutter',\n            h: 'en time',\n            hh: '%d timer',\n            d: 'en dag',\n            dd: '%d dager',\n            w: 'en uke',\n            ww: '%d uker',\n            M: 'en måned',\n            MM: '%d måneder',\n            y: 'ett år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nb;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kazakh [kk]\n//! authors : Nurlan Rakhimzhanov : https://github.com/nurlan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-ші',\n        1: '-ші',\n        2: '-ші',\n        3: '-ші',\n        4: '-ші',\n        5: '-ші',\n        6: '-шы',\n        7: '-ші',\n        8: '-ші',\n        9: '-шы',\n        10: '-шы',\n        20: '-шы',\n        30: '-шы',\n        40: '-шы',\n        50: '-ші',\n        60: '-шы',\n        70: '-ші',\n        80: '-ші',\n        90: '-шы',\n        100: '-ші',\n    };\n\n    var kk = moment.defineLocale('kk', {\n        months: 'қаңтар_ақпан_наурыз_сәуір_мамыр_маусым_шілде_тамыз_қыркүйек_қазан_қараша_желтоқсан'.split(\n            '_'\n        ),\n        monthsShort: 'қаң_ақп_нау_сәу_мам_мау_шіл_там_қыр_қаз_қар_жел'.split('_'),\n        weekdays: 'жексенбі_дүйсенбі_сейсенбі_сәрсенбі_бейсенбі_жұма_сенбі'.split(\n            '_'\n        ),\n        weekdaysShort: 'жек_дүй_сей_сәр_бей_жұм_сен'.split('_'),\n        weekdaysMin: 'жк_дй_сй_ср_бй_жм_сн'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгін сағат] LT',\n            nextDay: '[Ертең сағат] LT',\n            nextWeek: 'dddd [сағат] LT',\n            lastDay: '[Кеше сағат] LT',\n            lastWeek: '[Өткен аптаның] dddd [сағат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ішінде',\n            past: '%s бұрын',\n            s: 'бірнеше секунд',\n            ss: '%d секунд',\n            m: 'бір минут',\n            mm: '%d минут',\n            h: 'бір сағат',\n            hh: '%d сағат',\n            d: 'бір күн',\n            dd: '%d күн',\n            M: 'бір ай',\n            MM: '%d ай',\n            y: 'бір жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ші|шы)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return kk;\n\n})));\n","//! moment.js locale configuration\n//! locale  :  Arabic (Tunisia) [ar-tn]\n//! author : Nader Toukabri : https://github.com/naderio\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var arTn = moment.defineLocale('ar-tn', {\n        months: 'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'جانفي_فيفري_مارس_أفريل_ماي_جوان_جويلية_أوت_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arTn;\n\n})));\n","import { Row } from './../models/row';\nimport { CellType } from '../base/enum';\nimport { isNullOrUndefined, Internationalization, getValue, createElement } from '@syncfusion/ej2-base';\nimport { Cell } from '../models/cell';\nimport { ValueFormatter } from './../services/value-formatter';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getForeignData, measureColumnDepth, getUid } from '../base/util';\nimport { Grid } from '../base/grid';\n/**\n * @hidden\n * `ExportHelper` for `PdfExport` & `ExcelExport`\n */\nvar ExportHelper = /** @class */ (function () {\n    function ExportHelper(parent, foreignKeyData) {\n        this.hideColumnInclude = false;\n        this.foreignKeyData = {};\n        this.parent = parent;\n        if (!parent.parentDetails && foreignKeyData) {\n            this.foreignKeyData = foreignKeyData;\n        }\n    }\n    ExportHelper.getQuery = function (parent, data) {\n        var query = data.generateQuery(true).requiresCount();\n        if (data.isRemote()) {\n            if (parent.groupSettings.enableLazyLoading && parent.groupSettings.columns.length) {\n                query.lazyLoad = [];\n            }\n            else {\n                query.take(parent.pageSettings.totalRecordsCount);\n            }\n        }\n        return query;\n    };\n    ExportHelper.prototype.getFData = function (value, column) {\n        var foreignKeyData = getForeignData(column, {}, value, this.foreignKeyData[column.field])[0];\n        return foreignKeyData;\n    };\n    ExportHelper.prototype.getGridRowModel = function (columns, dataSource, gObj, startIndex) {\n        if (startIndex === void 0) { startIndex = 0; }\n        var rows = [];\n        var length = dataSource.length;\n        if (length) {\n            for (var i = 0; i < length; i++, startIndex++) {\n                var options = { isExpand: false };\n                options.data = dataSource[parseInt(i.toString(), 10)];\n                options.index = startIndex;\n                if (gObj.childGrid || gObj.detailTemplate) {\n                    if (gObj.hierarchyPrintMode === 'All') {\n                        options.isExpand = true;\n                    }\n                    else if (gObj.hierarchyPrintMode === 'Expanded' &&\n                        this.parent.expandedRows && this.parent.expandedRows[parseInt(startIndex.toString(), 10)]) {\n                        options.isExpand = gObj.expandedRows[parseInt(startIndex.toString(), 10)].isExpand;\n                    }\n                }\n                var row = new Row(options);\n                row.cells = this.generateCells(columns, gObj);\n                rows.push(row);\n            }\n            this.processColumns(rows);\n        }\n        return rows;\n    };\n    ExportHelper.prototype.generateCells = function (columns, gObj) {\n        var cells = [];\n        if (gObj.childGridLevel) {\n            var len = gObj.childGridLevel;\n            for (var i = 0; len > i; i++) {\n                cells.push(this.generateCell({}, CellType.Indent));\n            }\n        }\n        for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n            var col = columns_1[_i];\n            cells.push(this.generateCell(col, CellType.Data));\n        }\n        return cells;\n    };\n    ExportHelper.prototype.getColumnData = function (gridObj) {\n        var _this = this;\n        var columnPromise = [];\n        var promise;\n        var fColumns = gridObj.getForeignKeyColumns();\n        if (fColumns.length) {\n            for (var i = 0; i < fColumns.length; i++) {\n                var colData = ('result' in fColumns[parseInt(i.toString(), 10)].dataSource) ?\n                    new DataManager(fColumns[parseInt(i.toString(), 10)].dataSource.result) :\n                    fColumns[parseInt(i.toString(), 10)].dataSource;\n                columnPromise.push(colData.executeQuery(new Query()));\n            }\n            promise = Promise.all(columnPromise).then(function (e) {\n                for (var j = 0; j < fColumns.length; j++) {\n                    _this.foreignKeyData[fColumns[parseInt(j.toString(), 10)].field] = e[parseInt(j.toString(), 10)].result;\n                }\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            });\n        }\n        return promise;\n    };\n    ExportHelper.prototype.getHeaders = function (columns, isHideColumnInclude) {\n        if (isHideColumnInclude) {\n            this.hideColumnInclude = true;\n        }\n        else {\n            this.hideColumnInclude = false;\n        }\n        this.colDepth = measureColumnDepth(columns);\n        var rows = [];\n        for (var i = 0; i < this.colDepth; i++) {\n            rows[parseInt(i.toString(), 10)] = new Row({});\n            rows[parseInt(i.toString(), 10)].cells = [];\n        }\n        rows = this.processColumns(rows);\n        rows = this.processHeaderCells(rows, columns);\n        return { rows: rows, columns: this.generateActualColumns(columns) };\n    };\n    ExportHelper.prototype.getConvertedWidth = function (input) {\n        var value = parseFloat(input);\n        return (input.indexOf('%') !== -1) ? (this.parent.element.getBoundingClientRect().width * value / 100) : value;\n    };\n    ExportHelper.prototype.generateActualColumns = function (columns, actualColumns) {\n        if (actualColumns === void 0) { actualColumns = []; }\n        for (var _i = 0, columns_2 = columns; _i < columns_2.length; _i++) {\n            var column = columns_2[_i];\n            if (column.commands) {\n                continue;\n            }\n            if (!column.columns) {\n                if (column.visible || this.hideColumnInclude) {\n                    actualColumns.push(column);\n                }\n            }\n            else {\n                if (column.visible || this.hideColumnInclude) {\n                    var colSpan = this.getCellCount(column, 0);\n                    if (colSpan !== 0) {\n                        this.generateActualColumns(column.columns, actualColumns);\n                    }\n                }\n            }\n        }\n        return actualColumns;\n    };\n    ExportHelper.prototype.processHeaderCells = function (rows, cols) {\n        var columns = cols;\n        for (var i = 0; i < columns.length; i++) {\n            if (!columns[parseInt(i.toString(), 10)].commands) {\n                rows = this.appendGridCells(columns[parseInt(i.toString(), 10)], rows, 0);\n            }\n        }\n        return rows;\n    };\n    ExportHelper.prototype.appendGridCells = function (cols, gridRows, index) {\n        if (!cols.columns && (cols.visible !== false || this.hideColumnInclude) && !cols.commands) {\n            gridRows[parseInt(index.toString(), 10)].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, index));\n        }\n        else if (cols.columns) {\n            var colSpan = this.getCellCount(cols, 0);\n            if (colSpan) {\n                gridRows[parseInt(index.toString(), 10)].cells.push(new Cell({\n                    cellType: CellType.StackedHeader, column: cols, colSpan: colSpan\n                }));\n            }\n            var isIgnoreFirstCell = void 0;\n            for (var i = 0, len = cols.columns.length; i < len; i++) {\n                if (cols.columns[parseInt(i.toString(), 10)].visible && !isIgnoreFirstCell) {\n                    isIgnoreFirstCell = true;\n                }\n                gridRows = this.appendGridCells(cols.columns[parseInt(i.toString(), 10)], gridRows, index + 1);\n            }\n        }\n        return gridRows;\n    };\n    ExportHelper.prototype.generateCell = function (gridColumn, cellType, rowSpan, rowIndex) {\n        var option = {\n            'visible': gridColumn.visible,\n            'isDataCell': cellType === CellType.Data,\n            'column': gridColumn,\n            'cellType': cellType,\n            'rowSpan': rowSpan,\n            'index': rowIndex\n        };\n        if (!option.rowSpan || option.rowSpan < 2) {\n            delete option.rowSpan;\n        }\n        return new Cell(option);\n    };\n    ExportHelper.prototype.processColumns = function (rows) {\n        //TODO: generate dummy column for group, detail, stacked row here; ensureColumns here\n        var gridObj = this.parent;\n        var columnIndexes = [];\n        if (gridObj.enableColumnVirtualization) {\n            columnIndexes = gridObj.getColumnIndexesInView();\n        }\n        for (var i = 0, len = rows.length; i < len; i++) {\n            if (gridObj.allowGrouping) {\n                for (var j = 0, len_1 = gridObj.groupSettings.columns.length - 1; j < len_1; j++) {\n                    if (gridObj.enableColumnVirtualization && columnIndexes.indexOf(j) === -1) {\n                        continue;\n                    }\n                    rows[parseInt(i.toString(), 10)].cells.splice(0, 0, this.generateCell({}, CellType.HeaderIndent));\n                }\n            }\n        }\n        return rows;\n    };\n    ExportHelper.prototype.getCellCount = function (column, count) {\n        if (column.columns) {\n            for (var i = 0; i < column.columns.length; i++) {\n                count = this.getCellCount(column.columns[parseInt(i.toString(), 10)], count);\n            }\n        }\n        else {\n            if (column.visible || this.hideColumnInclude) {\n                count++;\n            }\n        }\n        return count;\n    };\n    ExportHelper.prototype.checkAndExport = function (gridPool, globalResolve) {\n        var bool = Object.keys(gridPool).some(function (key) {\n            return !gridPool[\"\" + key];\n        });\n        if (!bool) {\n            globalResolve();\n        }\n    };\n    ExportHelper.prototype.failureHandler = function (gridPool, childGridObj, resolve) {\n        var _this = this;\n        return function () {\n            gridPool[childGridObj.id] = true;\n            _this.checkAndExport(gridPool, resolve);\n        };\n    };\n    ExportHelper.prototype.createChildGrid = function (gObj, row, exportType, gridPool) {\n        var childGridObj = new Grid(this.parent.detailRowModule.getGridModel(gObj, row, exportType));\n        gObj.isPrinting = false;\n        var parent = 'parentDetails';\n        childGridObj[\"\" + parent] = {\n            parentID: gObj.element.id,\n            parentPrimaryKeys: gObj.getPrimaryKeyFieldNames(),\n            parentKeyField: gObj.childGrid.queryString,\n            parentKeyFieldValue: getValue(childGridObj.queryString, row.data),\n            parentRowData: row.data\n        };\n        var exportId = getUid('child-grid');\n        var element = createElement('div', {\n            id: exportId, styles: 'display: none'\n        });\n        document.body.appendChild(element);\n        childGridObj.id = exportId;\n        gridPool[\"\" + exportId] = false;\n        childGridObj.isExportGrid = true;\n        return { childGrid: childGridObj, element: element };\n    };\n    ExportHelper.prototype.getGridExportColumns = function (columns) {\n        var actualGridColumns = [];\n        for (var i = 0, gridColumns = columns; i < gridColumns.length; i++) {\n            if (gridColumns[parseInt(i.toString(), 10)].type !== 'checkbox') {\n                actualGridColumns.push(gridColumns[parseInt(i.toString(), 10)]);\n            }\n        }\n        return actualGridColumns;\n    };\n    /**\n     * Gets the foreignkey data.\n     *\n     * @returns {ForeignKeyFormat} returns the foreignkey data\n     * @hidden\n     */\n    ExportHelper.prototype.getForeignKeyData = function () {\n        return this.foreignKeyData;\n    };\n    return ExportHelper;\n}());\nexport { ExportHelper };\n/**\n * @hidden\n * `ExportValueFormatter` for `PdfExport` & `ExcelExport`\n */\nvar ExportValueFormatter = /** @class */ (function () {\n    function ExportValueFormatter(culture) {\n        this.valueFormatter = new ValueFormatter(culture);\n        this.internationalization = new Internationalization(culture);\n    }\n    ExportValueFormatter.prototype.returnFormattedValue = function (args, customFormat) {\n        if (!isNullOrUndefined(args.value) && args.value) {\n            return this.valueFormatter.getFormatFunction(customFormat)(args.value);\n        }\n        else {\n            return '';\n        }\n    };\n    /**\n     * Used to format the exporting cell value\n     *\n     * @param  {ExportHelperArgs} args - Specifies cell details.\n     * @returns {string} returns formated value\n     * @hidden\n     */\n    ExportValueFormatter.prototype.formatCellValue = function (args) {\n        if (args.isForeignKey) {\n            args.value = getValue(args.column.foreignKeyValue, getForeignData(args.column, {}, args.value)[0]);\n        }\n        if (args.column.type === 'number' && args.column.format !== undefined && args.column.format !== '') {\n            if (typeof args.column.format === 'string') {\n                args.column.format = { format: args.column.format };\n            }\n            return args.value || args.value === 0 ?\n                this.internationalization.getNumberFormat(args.column.format)(args.value) : '';\n        }\n        else if (args.column.type === 'boolean' && args.value !== '') {\n            return args.value ? 'true' : 'false';\n            /* tslint:disable-next-line:max-line-length */\n        }\n        else if ((args.column.type === 'date' || args.column.type === 'dateonly' || args.column.type === 'datetime' || args.column.type === 'time') && args.column.format !== undefined) {\n            if (typeof args.value === 'string') {\n                args.value = new Date(args.value);\n            }\n            if (typeof args.column.format === 'string') {\n                var format = void 0;\n                var cFormat = args.column.format;\n                if (args.column.type === 'date' || args.column.type === 'dateonly') {\n                    format = { type: 'date', skeleton: cFormat };\n                }\n                else if (args.column.type === 'time') {\n                    format = { type: 'time', skeleton: cFormat };\n                }\n                else {\n                    format = { type: 'dateTime', skeleton: cFormat };\n                }\n                return this.returnFormattedValue(args, format);\n            }\n            else {\n                if (args.column.format instanceof Object && args.column.format.type === undefined) {\n                    return (args.value.toString());\n                }\n                else {\n                    var customFormat = void 0;\n                    if (args.column.type === 'date' || args.column.type === 'dateonly') {\n                        customFormat = {\n                            type: args.column.format.type,\n                            format: args.column.format.format, skeleton: args.column.format.skeleton\n                        };\n                    }\n                    else if (args.column.type === 'time') {\n                        customFormat = { type: 'time', format: args.column.format.format, skeleton: args.column.format.skeleton };\n                    }\n                    else {\n                        customFormat = { type: 'dateTime', format: args.column.format.format, skeleton: args.column.format.skeleton };\n                    }\n                    return this.returnFormattedValue(args, customFormat);\n                }\n            }\n        }\n        else {\n            if ((!isNullOrUndefined(args.column.type) && !isNullOrUndefined(args.value)) || !isNullOrUndefined(args.value)) {\n                return (args.value).toString();\n            }\n            else {\n                return '';\n            }\n        }\n    };\n    return ExportValueFormatter;\n}());\nexport { ExportValueFormatter };\n","import * as events from '../base/constant';\nimport { Workbook } from '@syncfusion/ej2-excel-export';\nimport { isNullOrUndefined, getEnumValue, compile, getValue, detach, extend } from '@syncfusion/ej2-base';\nimport { Data } from '../actions/data';\nimport { ExportHelper, ExportValueFormatter } from './export-helper';\nimport { SummaryModelGenerator, GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { CellType } from '../base/enum';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { getPrintGridModel, getUid, isExportColumns, updateColumnTypeForExportColumns, prepareColumns, measureColumnDepth } from '../base/util';\nimport { defaultCurrencyCode } from '@syncfusion/ej2-base';\n/**\n * @hidden\n * `ExcelExport` module is used to handle the Excel export action.\n */\nvar ExcelExport = /** @class */ (function () {\n    /**\n     * Constructor for the Grid Excel Export module.\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {ServiceLocator} locator - specifies the ServiceLocator\n     * @hidden\n     */\n    function ExcelExport(parent, locator) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        this.book = {};\n        this.workSheet = [];\n        this.rows = [];\n        this.columns = [];\n        this.styles = [];\n        this.rowLength = 1;\n        this.expType = 'AppendToSheet';\n        this.includeHiddenColumn = false;\n        this.isCsvExport = false;\n        this.isChild = false;\n        this.isElementIdChanged = false;\n        this.gridPool = {};\n        this.sheet = {};\n        this.grpFooterTemplates = [];\n        this.footerTemplates = [];\n        this.aggIndex = 0;\n        this.totalAggregates = 0;\n        this.parent = parent;\n        this.helper = new ExportHelper(parent);\n        this.locator = locator;\n        this.l10n = this.locator.getService('localization');\n    }\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     */\n    ExcelExport.prototype.getModuleName = function () {\n        return 'ExcelExport';\n    };\n    ExcelExport.prototype.init = function (gObj) {\n        if (gObj.element !== null && gObj.element.id === '') {\n            gObj.element.id = new Date().toISOString();\n            this.isElementIdChanged = true;\n        }\n        this.parent = gObj;\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.isExporting = undefined;\n        this.book = {};\n        this.workSheet = [];\n        this.rows = [];\n        this.columns = [];\n        this.styles = [];\n        this.rowLength = 1;\n        this.footer = undefined;\n        this.expType = 'AppendToSheet';\n        this.includeHiddenColumn = false;\n        this.exportValueFormatter = new ExportValueFormatter(gObj.locale);\n        gObj.id = getUid('main-grid');\n        this.gridPool[gObj.id] = false;\n    };\n    /**\n     * Export Grid to Excel file.\n     *\n     * @param {IGrid} grid - Defines the grid.\n     * @param  {exportProperties} exportProperties - Defines the export properties of the Grid.\n     * @param  {isMultipleExport} isMultipleExport - Defines is multiple Grid's are exported.\n     * @param  {Workbook} workbook - Defined the Workbook if multiple Grid is exported.\n     * @param  {boolean} isCsv - true if export to CSV.\n     * @param {boolean} isBlob - true if isBlob is enabled.\n     * @returns {Promise<any>} - Returns the map for export.\n     */\n    // eslint-disable-next-line\n    ExcelExport.prototype.Map = function (grid, exportProperties, isMultipleExport, workbook, isCsv, isBlob) {\n        var gObj = grid;\n        var cancel = 'cancel';\n        var isBlb = 'isBlob';\n        var Child = 'isChild';\n        var csv = 'isCsv';\n        var workbk = 'workbook';\n        var isMultiEx = 'isMultipleExport';\n        this.gridPool = {};\n        if ((grid.childGrid || grid.detailTemplate) && !(!isNullOrUndefined(exportProperties) && exportProperties.hierarchyExportMode === 'None')) {\n            grid.expandedRows = getPrintGridModel(grid).expandedRows;\n        }\n        var args = {\n            requestType: 'beforeExcelExport', gridObject: gObj, cancel: false,\n            isMultipleExport: isMultipleExport, workbook: workbook, isCsv: isCsv, isBlob: isBlob, isChild: this.isChild,\n            grpFooterTemplates: this.grpFooterTemplates\n        };\n        gObj.trigger(events.beforeExcelExport, args);\n        if (args[\"\" + cancel]) {\n            return new Promise(function (resolve) {\n                return resolve();\n            });\n        }\n        this.parent.log('exporting_begin', this.getModuleName());\n        this.data = new Data(gObj);\n        this.isExporting = true;\n        this.isBlob = args[\"\" + isBlb];\n        this.isChild = args[\"\" + Child];\n        this.grpFooterTemplates = args['grpFooterTemplates'];\n        if (args[\"\" + csv]) {\n            this.isCsvExport = args[\"\" + csv];\n        }\n        else {\n            this.isCsvExport = false;\n        }\n        if (isExportColumns(exportProperties)) {\n            updateColumnTypeForExportColumns(exportProperties, gObj);\n        }\n        return this.processRecords(gObj, exportProperties, args[\"\" + isMultiEx], args[\"\" + workbk]);\n    };\n    ExcelExport.prototype.exportingSuccess = function (resolve) {\n        this.isExporting = false;\n        this.parent.trigger(events.excelExportComplete, this.isBlob ? { promise: this.blobPromise } : { gridInstance: this.parent });\n        this.parent.log('exporting_complete', this.getModuleName());\n        resolve(this.book);\n    };\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ExcelExport.prototype.processRecords = function (gObj, exportProperties, isMultipleExport, workbook) {\n        var _this = this;\n        if (gObj.allowGrouping && gObj.groupSettings.enableLazyLoading && gObj.groupSettings.columns.length) {\n            if (isNullOrUndefined(exportProperties)) {\n                exportProperties = { hierarchyExportMode: 'All' };\n            }\n            else {\n                exportProperties.hierarchyExportMode = exportProperties.hierarchyExportMode || 'All';\n            }\n        }\n        if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.dataSource)) {\n            exportProperties.dataSource = exportProperties.dataSource instanceof DataManager ?\n                exportProperties.dataSource : new DataManager(exportProperties.dataSource);\n            var query_1 = exportProperties.query ? exportProperties.query : new Query();\n            if (isNullOrUndefined(query_1.isCountRequired) || gObj.aggregates) {\n                query_1.isCountRequired = true;\n            }\n            return new Promise(function (resolve) {\n                var dataManager = exportProperties.dataSource.executeQuery(query_1);\n                dataManager.then(function (r) {\n                    _this.init(gObj);\n                    _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, r).then(function () {\n                        _this.exportingSuccess(resolve);\n                    });\n                });\n            });\n        }\n        else if (!isNullOrUndefined(exportProperties) && exportProperties.exportType === 'CurrentPage') {\n            return new Promise(function (resolve) {\n                _this.init(gObj);\n                _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, _this.parent.getCurrentViewRecords());\n                _this.exportingSuccess(resolve);\n            });\n        }\n        else {\n            var allPromise_1 = [];\n            allPromise_1.push(this.data.getData({}, ExportHelper.getQuery(gObj, this.data)));\n            allPromise_1.push(this.helper.getColumnData(gObj));\n            return new Promise(function (resolve, reject) {\n                Promise.all(allPromise_1).then(function (e) {\n                    _this.init(gObj);\n                    _this.processInnerRecords(gObj, exportProperties, isMultipleExport, workbook, e[0]).then(function () {\n                        _this.exportingSuccess(resolve);\n                    });\n                }).catch(function (e) {\n                    reject(_this.book);\n                    _this.parent.trigger(events.actionFailure, e);\n                });\n            });\n        }\n    };\n    ExcelExport.prototype.processInnerRecords = function (gObj, exportProperties, \n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    isMultipleExport, workbook, r) {\n        var _this = this;\n        this.groupedColLength = gObj.groupSettings.columns.length;\n        var blankRows = 5;\n        var separator;\n        var rows = [];\n        var colDepth = measureColumnDepth(gObj.columns);\n        var isExportPropertiesPresent = !isNullOrUndefined(exportProperties);\n        if (isExportPropertiesPresent && !isNullOrUndefined(exportProperties.multipleExport)) {\n            this.expType = (!isNullOrUndefined(exportProperties.multipleExport.type) ? exportProperties.multipleExport.type : 'AppendToSheet');\n            if (!isNullOrUndefined(exportProperties.multipleExport.blankRows)) {\n                blankRows = exportProperties.multipleExport.blankRows;\n            }\n        }\n        if (isNullOrUndefined(workbook)) {\n            this.workSheet = [];\n            this.rows = [];\n            this.columns = [];\n            this.styles = [];\n            this.sheet.images = [];\n        }\n        else if (this.expType === 'NewSheet') {\n            this.workSheet = workbook.worksheets;\n            this.rows = [];\n            this.columns = [];\n            this.sheet.images = [];\n            this.styles = workbook.styles;\n        }\n        else {\n            this.workSheet = [];\n            this.rows = workbook.worksheets[0].rows;\n            this.columns = workbook.worksheets[0].columns;\n            this.styles = workbook.styles;\n            this.sheet.images = workbook.worksheets[0].images;\n            this.rowLength = (this.rows[this.rows.length - 1].index + blankRows);\n            this.rowLength++;\n        }\n        if (isExportPropertiesPresent) {\n            if (!isNullOrUndefined(isMultipleExport)) {\n                if (!isNullOrUndefined(exportProperties.header) && (isMultipleExport || this.expType === 'NewSheet')) {\n                    this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n                }\n                if (!isNullOrUndefined(exportProperties.footer)) {\n                    if (this.expType === 'AppendToSheet') {\n                        if (!isMultipleExport) {\n                            this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n                        }\n                    }\n                    else {\n                        this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n                    }\n                }\n            }\n            else {\n                if (!isNullOrUndefined(exportProperties.header)) {\n                    this.processExcelHeader(JSON.parse(JSON.stringify(exportProperties.header)));\n                }\n                if (!isNullOrUndefined(exportProperties.footer)) {\n                    this.footer = JSON.parse(JSON.stringify(exportProperties.footer));\n                }\n            }\n        }\n        this.includeHiddenColumn = (isExportPropertiesPresent ? exportProperties.includeHiddenColumn : false);\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        return new Promise(function (resolve, reject) {\n            gObj.childGridLevel = 0;\n            rows = _this.processGridExport(gObj, exportProperties, r);\n            _this.globalResolve = resolve;\n            _this.gridPool[gObj.id] = true;\n            _this.helper.checkAndExport(_this.gridPool, _this.globalResolve);\n        }).then(function () {\n            var organisedRows = [];\n            _this.organiseRows(rows, rows[0].index, organisedRows);\n            _this.rows = _this.rows.concat(organisedRows);\n            //footer template add\n            if (!isNullOrUndefined(_this.footer)) {\n                if ((_this.expType === 'AppendToSheet' && !isMultipleExport) || (_this.expType === 'NewSheet')) {\n                    _this.processExcelFooter(_this.footer);\n                }\n            }\n            if (_this.columns.length > 0) {\n                _this.sheet.columns = _this.columns;\n            }\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            _this.sheet.rows = _this.rows;\n            _this.sheet.enableRtl = _this.parent.enableRtl;\n            if (_this.parent.allowFiltering && gObj.getVisibleColumns().length && isExportPropertiesPresent &&\n                exportProperties.enableFilter) {\n                var headerRowLen = exportProperties.header ? exportProperties.header.headerRows ||\n                    exportProperties.header.rows.length : 0;\n                var autoFilters = {\n                    row: colDepth + headerRowLen, column: _this.groupedColLength ? _this.groupedColLength + 1 :\n                        _this.sheet.columns[0].index, lastRow: _this.sheet.rows.length, lastColumn: _this.sheet.columns.length\n                };\n                _this.sheet.autoFilters = autoFilters;\n            }\n            _this.workSheet.push(_this.sheet);\n            _this.book.worksheets = _this.workSheet;\n            _this.book.styles = _this.styles;\n            gObj.notify('finalPageSetup', _this.book);\n            if (!isMultipleExport) {\n                if (_this.isCsvExport) {\n                    if (isExportPropertiesPresent && !isNullOrUndefined(exportProperties.separator)\n                        && exportProperties.separator !== ',') {\n                        separator = exportProperties.separator;\n                    }\n                    var book = new Workbook(_this.book, 'csv', gObj.locale, defaultCurrencyCode, separator);\n                    if (!_this.isBlob) {\n                        if (isExportPropertiesPresent && exportProperties.fileName) {\n                            book.save(exportProperties.fileName);\n                        }\n                        else {\n                            book.save('Export.csv');\n                        }\n                    }\n                    else {\n                        _this.blobPromise = book.saveAsBlob('text/csv');\n                    }\n                }\n                else {\n                    var book = new Workbook(_this.book, 'xlsx', gObj.locale, defaultCurrencyCode);\n                    if (!_this.isBlob) {\n                        if (isExportPropertiesPresent && exportProperties.fileName) {\n                            book.save(exportProperties.fileName);\n                        }\n                        else {\n                            book.save('Export.xlsx');\n                        }\n                    }\n                    else {\n                        _this.blobPromise = book.saveAsBlob('application/vnd.openxmlformats-officedocument.spreadsheetml.sheet');\n                    }\n                }\n                if (_this.isElementIdChanged) {\n                    gObj.element.id = '';\n                }\n                delete gObj.expandedRows;\n            }\n            return workbook;\n        });\n    };\n    ExcelExport.prototype.organiseRows = function (rows, initialIndex, organisedRows) {\n        if (!rows.length) {\n            return initialIndex;\n        }\n        for (var i = 0; i < rows.length; i++) {\n            var row = rows[parseInt(i.toString(), 10)];\n            var childRows = row.childRows;\n            if (childRows) {\n                row.index = initialIndex++;\n                delete row.childRows;\n                organisedRows.push(row);\n                initialIndex = this.organiseRows(childRows, initialIndex, organisedRows);\n            }\n            else {\n                row.index = initialIndex++;\n                organisedRows.push(row);\n            }\n        }\n        return initialIndex;\n    };\n    ExcelExport.prototype.processGridExport = function (gObj, exportProperties, r) {\n        var excelRows = [];\n        if (!isNullOrUndefined(exportProperties) && !isNullOrUndefined(exportProperties.theme)) {\n            this.theme = exportProperties.theme;\n        }\n        if ((gObj.childGrid || gObj.detailTemplate) && !isNullOrUndefined(exportProperties)) {\n            gObj.hierarchyPrintMode = exportProperties.hierarchyExportMode || 'Expanded';\n        }\n        var helper = new ExportHelper(gObj, this.helper.getForeignKeyData());\n        var gColumns = isExportColumns(exportProperties) ?\n            prepareColumns(exportProperties.columns, gObj.enableColumnVirtualization) :\n            helper.getGridExportColumns(gObj.columns);\n        var headerRow = helper.getHeaders(gColumns, this.includeHiddenColumn);\n        var groupIndent = gObj.groupSettings.columns.length ? gObj.groupSettings.columns.length - 1 : 0;\n        excelRows = this.processHeaderContent(gObj, headerRow, groupIndent, excelRows);\n        if (!isNullOrUndefined(exportProperties) && Object.keys(exportProperties).length &&\n            isNullOrUndefined(exportProperties.dataSource)) {\n            if (exportProperties.exportType === 'CurrentPage' && (!gObj.groupSettings.enableLazyLoading\n                || gObj.getDataModule().isRemote())) {\n                excelRows = this.processRecordContent(gObj, r, headerRow, exportProperties, gObj.currentViewData, excelRows, helper);\n            }\n            else if (gObj.groupSettings.enableLazyLoading && !gObj.getDataModule().isRemote()) {\n                var groupData = void 0;\n                if (!isNullOrUndefined(exportProperties) && Object.keys(exportProperties).length) {\n                    var isAllPage = exportProperties.exportType === 'CurrentPage'\n                        ? false : true;\n                    var groupQuery = gObj.getDataModule().generateQuery(isAllPage);\n                    var lazyloadData = gObj.getDataModule().dataManager.executeLocal(groupQuery);\n                    groupQuery.lazyLoad = [];\n                    var fName = 'fn';\n                    if (!isAllPage) {\n                        for (var i = 0; i < groupQuery.queries.length; i++) {\n                            if (groupQuery.queries[parseInt(i.toString(), 10)]['' + fName] === 'onPage') {\n                                groupQuery.queries[parseInt(i.toString(), 10)].e.pageSize = lazyloadData.reduce(function (acc, curr) { return acc + curr['count']; }, 0);\n                            }\n                        }\n                    }\n                    if (exportProperties.hierarchyExportMode === 'All') {\n                        groupData = gObj.getDataModule().dataManager.executeLocal(groupQuery);\n                    }\n                    else if (exportProperties.hierarchyExportMode === 'Expanded' || exportProperties.hierarchyExportMode === 'None' ||\n                        isNullOrUndefined(exportProperties.hierarchyExportMode)) {\n                        groupData = gObj.getDataModule().dataManager.executeLocal(groupQuery);\n                        var lazQuery = this.parent.contentModule.lazyLoadQuery;\n                        for (var i = 0; i < lazQuery.length; i++) {\n                            var query = lazQuery[parseInt(i.toString(), 10)];\n                            var where = query[0];\n                            for (var j = 0; j < groupData.length; j++) {\n                                var data = groupData[parseInt(j.toString(), 10)];\n                                if (data['key'] === where['value']) {\n                                    lazyloadData[parseInt(i.toString(), 10)] = groupData[parseInt(j.toString(), 10)];\n                                }\n                            }\n                        }\n                        groupData = lazyloadData;\n                    }\n                }\n                else {\n                    groupData = gObj.currentViewData;\n                }\n                excelRows = this.processRecordContent(gObj, r, headerRow, exportProperties, groupData, excelRows, helper);\n            }\n            else {\n                excelRows = this.processRecordContent(gObj, r, headerRow, exportProperties, undefined, excelRows, helper);\n            }\n        }\n        else {\n            excelRows = this.processRecordContent(gObj, r, headerRow, exportProperties, undefined, excelRows, helper);\n        }\n        gObj.notify(events.exportDataBound, { excelRows: excelRows, type: 'excel' });\n        this.capTemplate = undefined;\n        this.footerTemplates = [];\n        this.grpFooterTemplates = [];\n        this.aggIndex = 0;\n        this.totalAggregates = 0;\n        return excelRows;\n    };\n    ExcelExport.prototype.processRecordContent = function (gObj, returnType, headerRow, exportProperties, currentViewRecords, excelRow, helper) {\n        var record;\n        if (!isNullOrUndefined(currentViewRecords) && currentViewRecords.length) {\n            record = currentViewRecords;\n        }\n        else {\n            record = returnType.result;\n        }\n        if (!isNullOrUndefined(record.level)) {\n            this.processGroupedRows(gObj, record, headerRow, record.level, 0, exportProperties, excelRow, helper);\n        }\n        else {\n            this.processRecordRows(gObj, record, headerRow, 0, 0, exportProperties, excelRow, helper);\n        }\n        if (!isNullOrUndefined(returnType.aggregates)) {\n            if (!isNullOrUndefined(currentViewRecords) && !this.parent.groupSettings.enableLazyLoading) {\n                this.processAggregates(gObj, returnType.result, excelRow, currentViewRecords);\n            }\n            else {\n                var result = returnType.result.GroupGuid ?\n                    returnType.result.records : returnType.result;\n                this.processAggregates(gObj, result, excelRow);\n            }\n        }\n        return excelRow;\n    };\n    ExcelExport.prototype.processGroupedRows = function (\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    gObj, dataSource, headerRow, level, startIndex, excelExportProperties, excelRows, helper) {\n        for (var _i = 0, dataSource_1 = dataSource; _i < dataSource_1.length; _i++) {\n            var item = dataSource_1[_i];\n            var cells = [];\n            var index = 1;\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            var cell = {};\n            cell.index = (index + level) - 1;\n            var col = gObj.getColumnByField(item.field);\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            var args = {\n                value: item.key,\n                column: col,\n                style: undefined,\n                isForeignKey: col.isForeignColumn()\n            };\n            var value = gObj.getColumnByField(item.field).headerText +\n                ': ' + (!col.enableGroupByFormat ? this.exportValueFormatter.formatCellValue(args) : item.key) + ' - ';\n            if (item.count > 1) {\n                value += item.count + ' items';\n            }\n            else {\n                value += item.count + ' item';\n            }\n            var cArgs = { captionText: value, type: this.isCsvExport ? 'CSV' : 'Excel', data: item };\n            this.parent.trigger(events.exportGroupCaption, cArgs);\n            cell.value = cArgs.captionText;\n            cell.style = this.getCaptionThemeStyle(this.theme);\n            if (!isNullOrUndefined(cArgs.style)) {\n                cell.style = this.mergeOptions(cell.style, cArgs.style);\n            }\n            var captionModelGen = new CaptionSummaryModelGenerator(gObj);\n            var groupCaptionSummaryRows = captionModelGen.generateRows(item);\n            this.fillAggregates(gObj, groupCaptionSummaryRows, (dataSource.level + dataSource.childLevels) - 1, excelRows, this.rowLength);\n            cells.push(cell);\n            if (excelRows[excelRows.length - 1].cells.length > 0) {\n                var lIndex = dataSource.level + dataSource.childLevels + groupCaptionSummaryRows[0].cells.length;\n                var hIndex = 0;\n                for (var _a = 0, _b = excelRows[excelRows.length - 1].cells; _a < _b.length; _a++) {\n                    var tCell = _b[_a];\n                    if (tCell.index < lIndex) {\n                        lIndex = tCell.index;\n                    }\n                    if (tCell.index > hIndex) {\n                        hIndex = tCell.index;\n                    }\n                    if (cells[cells.length - 1].index !== tCell.index) {\n                        cells.push(tCell);\n                    }\n                }\n                if ((lIndex - cell.index) > 1) {\n                    cell.colSpan = lIndex - cell.index;\n                }\n                while (hIndex < (headerRow.columns.length + level + dataSource.childLevels)) {\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    var sCell = {};\n                    sCell.index = (hIndex + 1);\n                    sCell.style = this.getCaptionThemeStyle(this.theme);\n                    cells.push(sCell);\n                    hIndex++;\n                }\n            }\n            else {\n                var span = 0;\n                //Calculation for column span when group caption dont have aggregates\n                for (var _c = 0, _d = headerRow.columns; _c < _d.length; _c++) {\n                    var col_1 = _d[_c];\n                    if (col_1.visible) {\n                        span++;\n                    }\n                }\n                cell.colSpan = (dataSource.childLevels + span);\n            }\n            excelRows[excelRows.length - 1].cells = cells;\n            this.rowLength++;\n            if (this.groupedColLength < 8 && level > 1) {\n                var grouping = { outlineLevel: level - 1, isCollapsed: true };\n                excelRows[excelRows.length - 1].grouping = grouping;\n            }\n            if (!isNullOrUndefined(dataSource.childLevels) && dataSource.childLevels > 0) {\n                this.processGroupedRows(gObj, item.items, headerRow, item.items.level, startIndex, excelExportProperties, excelRows, helper);\n                this.processAggregates(gObj, item, excelRows, undefined, (level - 1) + dataSource.childLevels, true);\n            }\n            else {\n                startIndex = this.processRecordRows(gObj, item.items, headerRow, (level - 1), startIndex, excelExportProperties, excelRows, helper);\n                this.processAggregates(gObj, item, excelRows, undefined, (level - 1), true);\n            }\n        }\n    };\n    ExcelExport.prototype.processRecordRows = function (gObj, record, headerRow, level, startIndex, excelExportProperties, excelRows, helper) {\n        var index = 1;\n        var cells = [];\n        var columns = headerRow.columns;\n        var rows = helper.getGridRowModel(columns, record, gObj, startIndex);\n        for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n            var row = rows_1[_i];\n            cells = [];\n            startIndex++;\n            index = 1;\n            var templateRowHeight = void 0;\n            for (var c = 0, len = row.cells.length; c < len; c++) {\n                var gCell = row.cells[parseInt(c.toString(), 10)];\n                if (gCell.cellType !== CellType.Data) {\n                    continue;\n                }\n                var column = gCell.column;\n                var field = column.field;\n                var cellValue = !isNullOrUndefined(field) ? column.valueAccessor(field, row.data, column) : '';\n                var value = !isNullOrUndefined(cellValue) ? cellValue : '';\n                if (column.type === 'dateonly' && typeof value === 'string' && value) {\n                    var arr = value.split(/[^0-9.]/);\n                    value = new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10));\n                }\n                var fkData = void 0;\n                if (column.isForeignColumn && column.isForeignColumn()) {\n                    fkData = helper.getFData(value, column);\n                    value = getValue(column.foreignKeyValue, fkData);\n                }\n                if (!isNullOrUndefined(value)) {\n                    var cell = {};\n                    var idx = index + level + gObj.childGridLevel;\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    var excelCellArgs = {\n                        data: row.data, column: column, foreignKeyData: fkData,\n                        value: value, style: undefined, colSpan: 1, cell: cell\n                    };\n                    gObj.trigger(events.excelQueryCellInfo, excelCellArgs);\n                    if (!isNullOrUndefined(excelCellArgs.image) && !isNullOrUndefined(excelCellArgs.image.base64)) {\n                        templateRowHeight = this.setImage(excelCellArgs, idx);\n                        if (excelCellArgs.image.height && excelCellArgs.value !== '') {\n                            templateRowHeight += 30;\n                        }\n                    }\n                    if (!isNullOrUndefined(excelCellArgs.hyperLink)) {\n                        excelCellArgs.cell.hyperlink = { target: excelCellArgs.hyperLink.target };\n                        excelCellArgs.value = excelCellArgs.hyperLink.displayText || excelCellArgs.value;\n                    }\n                    cell = excelCellArgs.cell;\n                    cell.index = idx;\n                    cell.value = excelCellArgs.value;\n                    if (excelCellArgs.data === '' && gObj.childGridLevel && index === 1) {\n                        var style = {};\n                        style.hAlign = 'left';\n                        excelCellArgs = { style: style };\n                        cell.colSpan = gObj.getVisibleColumns().length;\n                        cell.value = this.l10n.getConstant('EmptyRecord');\n                    }\n                    if (excelCellArgs.colSpan > 1) {\n                        cell.colSpan = excelCellArgs.colSpan;\n                    }\n                    if (!isNullOrUndefined(excelCellArgs.style)) {\n                        var styleIndex = this.getColumnStyle(gObj, index + level);\n                        cell.style = this.mergeOptions(this.styles[parseInt(styleIndex.toString(), 10)], excelCellArgs.style);\n                    }\n                    else {\n                        cell.style = { name: gObj.element.id + 'column' + (index + level) };\n                    }\n                    cells.push(cell);\n                }\n                index++;\n            }\n            var excelRow = { index: this.rowLength++, cells: cells };\n            if (!isNullOrUndefined(templateRowHeight)) {\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                excelRow.height = templateRowHeight;\n            }\n            if (this.groupedColLength && this.groupedColLength < 8 && (level + 1) > 0) {\n                excelRow.grouping = { outlineLevel: (level + 1), isCollapsed: true };\n                excelRows.push(excelRow);\n            }\n            else {\n                excelRows.push(excelRow);\n            }\n            if ((row.isExpand || this.isChild) && (!isNullOrUndefined(gObj.childGrid) || !isNullOrUndefined(gObj.detailTemplate))) {\n                if (!isNullOrUndefined(gObj.childGrid)) {\n                    gObj.isPrinting = true;\n                    var exportType = (!isNullOrUndefined(excelExportProperties) && excelExportProperties.exportType) ?\n                        excelExportProperties.exportType : 'AllPages';\n                    var returnVal = this.helper.createChildGrid(gObj, row, exportType, this.gridPool);\n                    var childGridObj = returnVal.childGrid;\n                    var element = returnVal.element;\n                    childGridObj.actionFailure =\n                        helper.failureHandler(this.gridPool, childGridObj, this.globalResolve);\n                    childGridObj.childGridLevel = gObj.childGridLevel + 1;\n                    var args = { childGrid: childGridObj, row: row, exportProperties: excelExportProperties };\n                    this.parent.trigger(events.exportDetailDataBound, args);\n                    childGridObj.beforeDataBound = this.childGridCell(excelRow, childGridObj, excelExportProperties, row);\n                    childGridObj.appendTo(element);\n                }\n                else {\n                    var args = { parentRow: row, row: excelRow, value: {}, action: 'excelexport', gridInstance: gObj };\n                    this.parent.trigger(events.exportDetailTemplate, args);\n                    excelRow.childRows = this.processDetailTemplate(args);\n                }\n            }\n            gObj.notify(events.exportRowDataBound, { rowObj: row, type: 'excel', excelRows: excelRows });\n        }\n        return startIndex;\n    };\n    ExcelExport.prototype.processDetailTemplate = function (templateData) {\n        var _this = this;\n        var rows = [];\n        var templateRowHeight;\n        var detailIndent = 2;\n        var detailCellIndex;\n        if (templateData.value.columnHeader || templateData.value.rows) {\n            var processCell_1 = function (currentCell, isHeader) {\n                var cell = {};\n                if (isNullOrUndefined(currentCell.index)) {\n                    currentCell.index = detailCellIndex;\n                    detailCellIndex++;\n                }\n                cell.index = currentCell.index + detailIndent;\n                if (!isNullOrUndefined(currentCell.value)) {\n                    cell.value = currentCell.value;\n                }\n                if (!isNullOrUndefined(currentCell.colSpan)) {\n                    cell.colSpan = currentCell.colSpan;\n                }\n                if (!isNullOrUndefined(currentCell.rowSpan)) {\n                    cell.rowSpan = currentCell.rowSpan;\n                }\n                if (isHeader) {\n                    cell.style = _this.getHeaderThemeStyle(_this.theme);\n                }\n                else {\n                    cell.style = _this.getRecordThemeStyle(_this.theme);\n                }\n                if (!isNullOrUndefined(currentCell.style)) {\n                    var cellStyle = {\n                        fontColor: currentCell.style.fontColor,\n                        fontName: currentCell.style.fontName,\n                        fontSize: currentCell.style.fontSize,\n                        hAlign: currentCell.style.excelHAlign,\n                        vAlign: currentCell.style.excelVAlign,\n                        rotation: currentCell.style.excelRotation,\n                        bold: currentCell.style.bold,\n                        indent: currentCell.style.indent,\n                        italic: currentCell.style.italic,\n                        underline: currentCell.style.underline,\n                        backColor: currentCell.style.backColor,\n                        wrapText: currentCell.style.wrapText,\n                        borders: currentCell.style.excelBorders,\n                        numberFormat: currentCell.style.excelNumberFormat,\n                        type: currentCell.style.excelType,\n                        strikeThrough: currentCell.style.strikeThrough\n                    };\n                    cell.style = _this.mergeOptions(cellStyle, cell.style);\n                }\n                if (!isNullOrUndefined(currentCell.image) && !isNullOrUndefined(currentCell.image.base64)) {\n                    if (currentCell.rowSpan > 1) {\n                        _this.setImage(currentCell, cell.index);\n                    }\n                    else {\n                        templateRowHeight = _this.setImage(currentCell, cell.index);\n                        if (currentCell.image.height && currentCell.value !== '') {\n                            templateRowHeight += 30;\n                        }\n                    }\n                }\n                if (!isNullOrUndefined(currentCell.hyperLink)) {\n                    cell.hyperlink = { target: currentCell.hyperLink.target };\n                    cell.value = currentCell.hyperLink.displayText;\n                }\n                return cell;\n            };\n            var processRow = function (currentRow, isHeader) {\n                var excelDetailCells = [];\n                detailCellIndex = 0;\n                for (var j = 0; j < currentRow.cells.length; j++) {\n                    var currentCell = currentRow.cells[parseInt(j.toString(), 10)];\n                    var detailCell = processCell_1(currentCell, isHeader);\n                    excelDetailCells.push(detailCell);\n                }\n                var row = { index: _this.rowLength++, cells: excelDetailCells };\n                if (!isNullOrUndefined(templateRowHeight)) {\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    row.height = templateRowHeight;\n                    templateRowHeight = null;\n                }\n                rows.push(row);\n            };\n            if (templateData.value.columnHeader) {\n                for (var i = 0; i < templateData.value.columnHeader.length; i++) {\n                    processRow(templateData.value.columnHeader[parseInt(i.toString(), 10)], true);\n                }\n            }\n            if (templateData.value.rows) {\n                for (var i = 0; i < templateData.value.rows.length; i++) {\n                    processRow(templateData.value.rows[parseInt(i.toString(), 10)]);\n                }\n            }\n        }\n        else if (templateData.value.image) {\n            templateRowHeight = this.setImage(templateData.value, detailIndent);\n            var row = {\n                index: this.rowLength++,\n                cells: [{\n                        index: detailIndent,\n                        style: this.getRecordThemeStyle(this.theme)\n                    }]\n            };\n            if (!isNullOrUndefined(templateRowHeight)) {\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                row.height = templateRowHeight;\n                templateRowHeight = null;\n            }\n            rows.push(row);\n        }\n        else if (templateData.value.text) {\n            var row = {\n                index: this.rowLength++,\n                cells: [{\n                        index: detailIndent,\n                        value: templateData.value.text,\n                        style: this.getRecordThemeStyle(this.theme)\n                    }]\n            };\n            rows.push(row);\n        }\n        else if (templateData.value.hyperLink) {\n            var row = {\n                index: this.rowLength++,\n                cells: [{\n                        index: 2,\n                        hyperlink: { target: templateData.value.hyperLink.target },\n                        value: templateData.value.hyperLink.displayText,\n                        style: this.getRecordThemeStyle(this.theme)\n                    }]\n            };\n            rows.push(row);\n        }\n        for (var i = 0; i < rows.length; i++) {\n            rows[parseInt(i.toString(), 10)].grouping = {\n                outlineLevel: 1, isCollapsed: !templateData.parentRow.isExpand, isHidden: !templateData.parentRow.isExpand\n            };\n        }\n        return rows;\n    };\n    ExcelExport.prototype.setImage = function (args, idx) {\n        if (isNullOrUndefined(this.sheet.images)) {\n            this.sheet.images = [];\n        }\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        var excelImage = {\n            image: args.image.base64, row: this.rowLength, column: idx,\n            lastRow: this.rowLength, lastColumn: idx\n        };\n        if (args.image.width && args.image.height) {\n            excelImage.width = args.image.width;\n            excelImage.height = args.image.height;\n        }\n        this.sheet.images.push(excelImage);\n        this.columns[idx - 1].width = args.image.width || this.columns[idx - 1].width;\n        return args.image.height || 50;\n    };\n    ExcelExport.prototype.childGridCell = function (excelRow, childGridObj, excelExportProps, gRow) {\n        var _this = this;\n        return function (result) {\n            childGridObj.beforeDataBound = null;\n            result.cancel = true;\n            if (result.result.length === 0) {\n                result.result = [''];\n            }\n            excelRow.childRows = _this.processGridExport(childGridObj, excelExportProps, result);\n            var intent = _this.parent.groupSettings.columns.length;\n            var rows = excelRow.childRows;\n            for (var i = 0; i < rows.length; i++) {\n                rows[parseInt(i.toString(), 10)].grouping = { outlineLevel: intent + childGridObj\n                        .childGridLevel, isCollapsed: !gRow.isExpand, isHidden: !gRow.isExpand };\n            }\n            childGridObj.destroy();\n            detach(childGridObj.element);\n            _this.gridPool[childGridObj.id] = true;\n            _this.helper.checkAndExport(_this.gridPool, _this.globalResolve);\n            return excelRow;\n        };\n    };\n    ExcelExport.prototype.processAggregates = function (gObj, rec, excelRows, currentViewRecords, indent, byGroup) {\n        var summaryModel = new SummaryModelGenerator(gObj);\n        var columns = summaryModel.getColumns();\n        columns = columns.filter(function (col) { return isNullOrUndefined(col.commands) && col.type !== 'checkbox'; });\n        if (gObj.aggregates.length && this.parent !== gObj) {\n            gObj.aggregateModule.prepareSummaryInfo();\n        }\n        var data = undefined;\n        if (!isNullOrUndefined(currentViewRecords)) {\n            data = currentViewRecords;\n        }\n        else {\n            data = rec;\n        }\n        if (indent === undefined) {\n            indent = 0;\n        }\n        if (gObj.groupSettings.columns.length > 0 && byGroup) {\n            var groupSummaryModel = new GroupSummaryModelGenerator(gObj);\n            var groupSummaryRows = groupSummaryModel.generateRows(data, { level: data.level });\n            if (groupSummaryRows.length > 0) {\n                excelRows = this.fillAggregates(gObj, groupSummaryRows, indent, excelRows);\n            }\n        }\n        else {\n            indent = gObj.groupSettings.columns.length > 0 && !byGroup ? gObj.groupSettings.columns.length : indent;\n            var sRows = summaryModel.generateRows(data, rec.aggregates, null, null, columns);\n            if (sRows.length > 0 && !byGroup) {\n                indent = gObj.groupSettings.columns.length ? indent - 1 : indent;\n                excelRows = this.fillAggregates(gObj, sRows, indent, excelRows);\n            }\n        }\n        return excelRows;\n    };\n    ExcelExport.prototype.fillAggregates = function (gObj, rows, indent, excelRows, customIndex) {\n        for (var _i = 0, rows_2 = rows; _i < rows_2.length; _i++) {\n            var row = rows_2[_i];\n            var cells = [];\n            var isEmpty = true;\n            var index = 0;\n            for (var _a = 0, _b = row.cells; _a < _b.length; _a++) {\n                var cell = _b[_a];\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                var eCell = {};\n                var columnsDetails = {};\n                if (!isNullOrUndefined(cell.attributes.index)) {\n                    columnsDetails = this.parent.getColumnByIndex(cell.attributes.index);\n                }\n                if (cell.cellType === CellType.DetailFooterIntent || columnsDetails.type === 'checkbox') {\n                    continue;\n                }\n                if ((cell.visible || this.includeHiddenColumn)) {\n                    index++;\n                    if (cell.isDataCell) {\n                        isEmpty = false;\n                        var footerTemplate = !isNullOrUndefined(cell.column.footerTemplate);\n                        var groupFooterTemplate = !isNullOrUndefined(cell.column.groupFooterTemplate);\n                        var groupCaptionTemplate = !isNullOrUndefined(cell.column.groupCaptionTemplate);\n                        eCell.index = index + indent + gObj.childGridLevel;\n                        if (footerTemplate) {\n                            eCell.value = this.getAggreateValue(gObj, CellType.Summary, cell.column.footerTemplate, cell, row);\n                        }\n                        else if (groupFooterTemplate) {\n                            eCell.value = this.getAggreateValue(gObj, CellType.GroupSummary, cell.column.groupFooterTemplate, cell, row);\n                        }\n                        else if (groupCaptionTemplate) {\n                            eCell.value = this.getAggreateValue(gObj, CellType.CaptionSummary, cell.column.groupCaptionTemplate, cell, row);\n                        }\n                        else {\n                            for (var _c = 0, _d = Object.keys(row.data[cell.column.field]); _c < _d.length; _c++) {\n                                var key = _d[_c];\n                                if (key === cell.column.type) {\n                                    if (!isNullOrUndefined(row.data[cell.column.field].Sum)) {\n                                        eCell.value = row.data[cell.column.field][cell.column.field + \" - sum\"];\n                                    }\n                                    else if (!isNullOrUndefined(row.data[cell.column.field].Average)) {\n                                        eCell.value = row.data[cell.column.field][cell.column.field + \" - average\"];\n                                    }\n                                    else if (!isNullOrUndefined(row.data[cell.column.field].Max)) {\n                                        eCell.value = row.data[cell.column.field][cell.column.field + \" - max\"];\n                                    }\n                                    else if (!isNullOrUndefined(row.data[cell.column.field].Min)) {\n                                        eCell.value = row.data[cell.column.field][cell.column.field + \" - min\"];\n                                    }\n                                    else if (!isNullOrUndefined(row.data[cell.column.field].Count)) {\n                                        eCell.value = row.data[cell.column.field][cell.column.field + \" - count\"];\n                                    }\n                                    else if (!isNullOrUndefined(row.data[cell.column.field].TrueCount)) {\n                                        eCell.value = row.data[cell.column.field][cell.column.field + \" - truecount\"];\n                                    }\n                                    else if (!isNullOrUndefined(row.data[cell.column.field].FalseCount)) {\n                                        eCell.value = row.data[cell.column.field][cell.column.field + \" - falsecount\"];\n                                    }\n                                    else if (!isNullOrUndefined(row.data[cell.column.field].Custom)) {\n                                        eCell.value = row.data[cell.column.field].Custom;\n                                    }\n                                }\n                            }\n                        }\n                        eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n                        this.aggregateStyle(cell.column, eCell.style, cell.column.field);\n                        var gridCellStyle = cell.attributes.style;\n                        if (gridCellStyle.textAlign) {\n                            eCell.style.hAlign = gridCellStyle.textAlign.toLowerCase();\n                        }\n                        var args = {\n                            row: row,\n                            type: footerTemplate ? 'Footer' : groupFooterTemplate ? 'GroupFooter' : 'GroupCaption',\n                            style: eCell,\n                            cell: cell\n                        };\n                        this.parent.trigger(events.excelAggregateQueryCellInfo, args);\n                        cells.push(eCell);\n                    }\n                    else {\n                        if (customIndex === undefined) {\n                            eCell.index = index + indent + gObj.childGridLevel;\n                            eCell.style = this.getCaptionThemeStyle(this.theme); //{ name: gObj.element.id + 'column' + index };\n                            cells.push(eCell);\n                        }\n                    }\n                }\n            }\n            if (!isNullOrUndefined(customIndex)) {\n                excelRows.push({ index: customIndex, cells: cells });\n            }\n            else {\n                var row_1 = {};\n                var dummyOutlineLevel = 'outlineLevel';\n                var dummyGrouping = 'grouping';\n                if (this.groupedColLength < 8 && this.groupedColLength > 0 && !(gObj.groupSettings.enableLazyLoading && isNullOrUndefined(excelRows[excelRows.length - 1][\"\" + dummyGrouping]))) {\n                    var level = excelRows[excelRows.length - 1][\"\" + dummyGrouping][\"\" + dummyOutlineLevel];\n                    var grouping = { outlineLevel: level, isCollapsed: true };\n                    row_1 = { index: this.rowLength++, cells: cells, grouping: grouping };\n                }\n                else {\n                    row_1 = { index: this.rowLength++, cells: cells };\n                }\n                if (!isEmpty) {\n                    excelRows.push(row_1);\n                }\n            }\n        }\n        return excelRows;\n    };\n    ExcelExport.prototype.aggregateStyle = function (col, style, field) {\n        var column = this.parent.getColumnByField(field);\n        if (typeof col.format === 'object') {\n            var format = col.format;\n            style.numberFormat = !isNullOrUndefined(format.format) ? format.format : format.skeleton;\n            if (!isNullOrUndefined(format.type)) {\n                style.type = format.type.toLowerCase();\n            }\n        }\n        else {\n            style.numberFormat = col.format;\n        }\n        if (!isNullOrUndefined(column) && isNullOrUndefined(style.type)) {\n            style.type = column.type.toLowerCase();\n        }\n    };\n    ExcelExport.prototype.getAggreateValue = function (gObj, cellType, template, cell, row) {\n        var templateFn = {};\n        templateFn[getEnumValue(CellType, cell.cellType)] = compile(template);\n        var txt;\n        var data = row.data[cell.column.field ? cell.column.field : cell.column.columnName];\n        if ((this.parent.isReact || this.parent.isVue || this.parent.isVue3 || this.parent.isAngular) &&\n            !(typeof cell.column.footerTemplate === 'string' || typeof cell.column.groupFooterTemplate === 'string' || typeof cell.column.groupCaptionTemplate === 'string')) {\n            txt = data[(cell.column.type)];\n            return !isNullOrUndefined(txt) ? (txt) : '';\n        }\n        else {\n            txt = (templateFn[getEnumValue(CellType, cell.cellType)](data));\n        }\n        return !isNullOrUndefined(txt[0]) ? txt[0].textContent : '';\n    };\n    ExcelExport.prototype.mergeOptions = function (JSON1, JSON2) {\n        var result = {};\n        var attrname = Object.keys(JSON1);\n        for (var index = 0; index < attrname.length; index++) {\n            if (attrname[parseInt(index.toString(), 10)] !== 'name') {\n                result[attrname[parseInt(index.toString(), 10)]] = JSON1[attrname[parseInt(index.toString(), 10)]];\n            }\n        }\n        attrname = Object.keys(JSON2);\n        for (var index = 0; index < attrname.length; index++) {\n            if (attrname[parseInt(index.toString(), 10)] !== 'name') {\n                result[attrname[parseInt(index.toString(), 10)]] = JSON2[attrname[parseInt(index.toString(), 10)]];\n            }\n        }\n        return result;\n    };\n    ExcelExport.prototype.getColumnStyle = function (gObj, columnIndex) {\n        var index = 0;\n        for (var _i = 0, _a = this.styles; _i < _a.length; _i++) {\n            var style = _a[_i];\n            if (style.name === gObj.element.id + 'column' + columnIndex) {\n                return index;\n            }\n            index++;\n        }\n        return undefined;\n    };\n    ExcelExport.prototype.headerRotation = function (args) {\n        var degree = args.style.rotation;\n        if (degree <= 90 && degree >= 0) {\n            args.style.hAlign = 'Left';\n        }\n        else if (degree > 90 && degree <= 180) {\n            args.style.hAlign = 'Right';\n        }\n        else {\n            degree = 180;\n            args.style.hAlign = 'Right';\n        }\n        args.style.rotation = degree;\n    };\n    ExcelExport.prototype.processHeaderContent = function (gObj, headerRow, indent, excelRows) {\n        var rowIndex = 1;\n        var gridRows = headerRow.rows;\n        // Column collection with respect to the records in the grid\n        var gridColumns = headerRow.columns;\n        var spannedCells = [];\n        if (indent > 0) {\n            var index = 0;\n            while (index !== indent) {\n                this.columns.push({ index: index + 1, width: 30 });\n                index++;\n            }\n        }\n        for (var col = 0; col < gridColumns.length; col++) {\n            this.parseStyles(gObj, gridColumns[parseInt(col.toString(), 10)], this.getRecordThemeStyle(this.theme), indent + col + 1);\n        }\n        var templateRowHeight;\n        for (var row = 0; row < gridRows.length; row++) {\n            var currentCellIndex = 1 + indent;\n            var cells = [];\n            for (var column = 0; column < gridRows[parseInt(row.toString(), 10)].cells.length; column++) {\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                var style = {};\n                var cell = {};\n                var gridCell = gridRows[parseInt(row.toString(), 10)].cells[parseInt(column.toString(), 10)];\n                if (gridCell.cellType === CellType.HeaderIndent || gridCell.cellType === CellType.DetailHeader) {\n                    continue;\n                }\n                var result = { contains: true, index: 1 };\n                while (result.contains) {\n                    result = this.getIndex(spannedCells, rowIndex, currentCellIndex);\n                    currentCellIndex = result.index;\n                    if (!result.contains) {\n                        cell.index = result.index + gObj.childGridLevel;\n                        break;\n                    }\n                }\n                if (!isNullOrUndefined(gridCell.rowSpan) && gridCell.rowSpan !== 1) {\n                    cell.rowSpan = gridCell.rowSpan;\n                    for (var i = rowIndex; i < gridCell.rowSpan + rowIndex; i++) {\n                        var spannedCell = { rowIndex: 0, columnIndex: 0 };\n                        spannedCell.rowIndex = i;\n                        spannedCell.columnIndex = currentCellIndex;\n                        spannedCells.push(spannedCell);\n                    }\n                }\n                if (!isNullOrUndefined(gridCell.colSpan) && gridCell.colSpan !== 1) {\n                    cell.colSpan = gridCell.colSpan;\n                    currentCellIndex = currentCellIndex + cell.colSpan - 1;\n                }\n                cell.value = gridCell.column.headerText;\n                style = this.getHeaderThemeStyle(this.theme);\n                if (!isNullOrUndefined(gridCell.column.textAlign)) {\n                    style.hAlign = gridCell.column.textAlign.toLowerCase();\n                }\n                if (!isNullOrUndefined(gridCell.column.headerTextAlign)) {\n                    style.hAlign = gridCell.column.headerTextAlign.toLowerCase();\n                }\n                var excelHeaderCellArgs = { cell: cell, gridCell: gridCell, style: style };\n                gObj.trigger(events.excelHeaderQueryCellInfo, excelHeaderCellArgs);\n                if (excelHeaderCellArgs.style.rotation) {\n                    this.headerRotation(excelHeaderCellArgs);\n                }\n                if (!isNullOrUndefined(excelHeaderCellArgs.image) && !isNullOrUndefined(excelHeaderCellArgs.image.base64)) {\n                    templateRowHeight = this.setImage(excelHeaderCellArgs, currentCellIndex);\n                }\n                if (!isNullOrUndefined(excelHeaderCellArgs.hyperLink)) {\n                    excelHeaderCellArgs.cell.hyperlink = { target: excelHeaderCellArgs.hyperLink.target };\n                    cell.value = excelHeaderCellArgs.hyperLink.displayText || cell.value;\n                }\n                cell.style = excelHeaderCellArgs.style;\n                cells.push(cell);\n                currentCellIndex++;\n            }\n            var excelRow = { index: this.rowLength++, cells: cells };\n            if (!isNullOrUndefined(templateRowHeight)) {\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                excelRow.height = templateRowHeight;\n            }\n            excelRows.push(excelRow);\n        }\n        return excelRows;\n    };\n    ExcelExport.prototype.getHeaderThemeStyle = function (theme) {\n        var style = {};\n        style.fontSize = 12;\n        style.borders = { color: '#E0E0E0' };\n        style.bold = true;\n        if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.header)) {\n            style = this.updateThemeStyle(theme.header, style);\n        }\n        return style;\n    };\n    ExcelExport.prototype.updateThemeStyle = function (themestyle, style) {\n        return extend(style, themestyle);\n    };\n    ExcelExport.prototype.getCaptionThemeStyle = function (theme) {\n        var style = {};\n        style.fontSize = 13;\n        style.backColor = '#F6F6F6';\n        if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.caption)) {\n            style = this.updateThemeStyle(theme.caption, style);\n        }\n        return style;\n    };\n    ExcelExport.prototype.getRecordThemeStyle = function (theme) {\n        var style = {};\n        style.fontSize = 13;\n        style.borders = { color: '#E0E0E0' };\n        if (!isNullOrUndefined(theme) && !isNullOrUndefined(theme.record)) {\n            style = this.updateThemeStyle(theme.record, style);\n        }\n        return style;\n    };\n    ExcelExport.prototype.processExcelHeader = function (header) {\n        if (!isNullOrUndefined(header.rows) && (this.expType === 'NewSheet' || this.rowLength === 1)) {\n            var noRows = void 0;\n            if (header.headerRows === undefined) {\n                this.rowLength = header.rows.length;\n            }\n            else {\n                this.rowLength = header.headerRows;\n            }\n            if (this.rowLength < header.rows.length) {\n                noRows = this.rowLength;\n            }\n            else {\n                noRows = header.rows.length;\n            }\n            this.rowLength++;\n            for (var row = 0; row < noRows; row++) {\n                var json = header.rows[parseInt(row.toString(), 10)];\n                //Row index\n                if (!(json.index !== null && !isNullOrUndefined(json.index))) {\n                    json.index = (row + 1);\n                }\n                this.updatedCellIndex(json);\n            }\n        }\n    };\n    ExcelExport.prototype.updatedCellIndex = function (json) {\n        var cellsLength = json.cells.length;\n        for (var cellId = 0; cellId < cellsLength; cellId++) {\n            var jsonCell = json.cells[parseInt(cellId.toString(), 10)];\n            //cell index\n            if (!(jsonCell.index !== null && !isNullOrUndefined(jsonCell.index))) {\n                jsonCell.index = (cellId + 1);\n            }\n        }\n        this.rows.push(json);\n    };\n    ExcelExport.prototype.processExcelFooter = function (footer) {\n        if (!isNullOrUndefined(footer.rows)) {\n            var noRows = void 0;\n            if (footer.footerRows === undefined) {\n                this.rowLength += footer.rows.length;\n            }\n            else {\n                if (footer.footerRows > footer.rows.length) {\n                    this.rowLength += (footer.footerRows - footer.rows.length);\n                    noRows = footer.rows.length;\n                }\n                else {\n                    noRows = footer.footerRows;\n                }\n            }\n            for (var row = 0; row < noRows; row++) {\n                var json = footer.rows[parseInt(row.toString(), 10)];\n                //Row index\n                if (json.index === null || json.index === undefined) {\n                    json.index = this.rowLength++;\n                }\n                else {\n                    json.index += this.rowLength;\n                }\n                this.updatedCellIndex(json);\n            }\n        }\n    };\n    ExcelExport.prototype.getIndex = function (spannedCells, rowIndex, columnIndex) {\n        for (var _i = 0, spannedCells_1 = spannedCells; _i < spannedCells_1.length; _i++) {\n            var spannedCell = spannedCells_1[_i];\n            if ((spannedCell.rowIndex === rowIndex) && (spannedCell.columnIndex === columnIndex)) {\n                columnIndex = columnIndex + 1;\n                return { contains: true, index: columnIndex };\n            }\n        }\n        return { contains: false, index: columnIndex };\n    };\n    ExcelExport.prototype.parseStyles = function (gObj, col, style, index) {\n        if (!isNullOrUndefined(col.format)) {\n            if (typeof col.format === 'object') {\n                var format = col.format;\n                style.numberFormat = !isNullOrUndefined(format.format) ? format.format : format.skeleton;\n                if (!isNullOrUndefined(format.type)) {\n                    style.type = format.type === 'dateonly' ? 'date' : format.type.toLowerCase();\n                }\n            }\n            else {\n                style.numberFormat = col.format;\n                style.type = col.type === 'dateonly' ? 'date' : col.type;\n            }\n        }\n        if (!isNullOrUndefined(col.textAlign)) {\n            style.hAlign = col.textAlign.toLowerCase();\n        }\n        if (Object.keys(style).length > 0) {\n            style.name = gObj.element.id + 'column' + index;\n            this.styles.push(style);\n        }\n        if (!isNullOrUndefined(col.width) && col.width !== 'auto' && !gObj.childGridLevel) {\n            this.columns.push({ index: index + gObj.childGridLevel, width: typeof col.width === 'number' ?\n                    col.width : this.helper.getConvertedWidth(col.width) });\n        }\n    };\n    ExcelExport.prototype.destroy = function () {\n        //destroy for exporting\n    };\n    return ExcelExport;\n}());\nexport { ExcelExport };\n","//! moment.js locale configuration\n//! locale : Italian [it]\n//! author : Lorenzo : https://github.com/aliem\n//! author: Mattia Larentis: https://github.com/nostalgiaz\n//! author: Marco : https://github.com/Manfre98\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var it = moment.defineLocale('it', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return (\n                    '[Oggi a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextDay: function () {\n                return (\n                    '[Domani a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            nextWeek: function () {\n                return (\n                    'dddd [a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastDay: function () {\n                return (\n                    '[Ieri a' +\n                    (this.hours() > 1 ? 'lle ' : this.hours() === 0 ? ' ' : \"ll'\") +\n                    ']LT'\n                );\n            },\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return (\n                            '[La scorsa] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                ? ' '\n                                : \"ll'\") +\n                            ']LT'\n                        );\n                    default:\n                        return (\n                            '[Lo scorso] dddd [a' +\n                            (this.hours() > 1\n                                ? 'lle '\n                                : this.hours() === 0\n                                ? ' '\n                                : \"ll'\") +\n                            ']LT'\n                        );\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'tra %s',\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            w: 'una settimana',\n            ww: '%d settimane',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return it;\n\n})));\n","//! moment.js locale configuration\n//! locale : Italian (Switzerland) [it-ch]\n//! author : xfh : https://github.com/xfh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var itCh = moment.defineLocale('it-ch', {\n        months: 'gennaio_febbraio_marzo_aprile_maggio_giugno_luglio_agosto_settembre_ottobre_novembre_dicembre'.split(\n            '_'\n        ),\n        monthsShort: 'gen_feb_mar_apr_mag_giu_lug_ago_set_ott_nov_dic'.split('_'),\n        weekdays: 'domenica_lunedì_martedì_mercoledì_giovedì_venerdì_sabato'.split(\n            '_'\n        ),\n        weekdaysShort: 'dom_lun_mar_mer_gio_ven_sab'.split('_'),\n        weekdaysMin: 'do_lu_ma_me_gi_ve_sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Oggi alle] LT',\n            nextDay: '[Domani alle] LT',\n            nextWeek: 'dddd [alle] LT',\n            lastDay: '[Ieri alle] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[la scorsa] dddd [alle] LT';\n                    default:\n                        return '[lo scorso] dddd [alle] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (s) {\n                return (/^[0-9].+$/.test(s) ? 'tra' : 'in') + ' ' + s;\n            },\n            past: '%s fa',\n            s: 'alcuni secondi',\n            ss: '%d secondi',\n            m: 'un minuto',\n            mm: '%d minuti',\n            h: \"un'ora\",\n            hh: '%d ore',\n            d: 'un giorno',\n            dd: '%d giorni',\n            M: 'un mese',\n            MM: '%d mesi',\n            y: 'un anno',\n            yy: '%d anni',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return itCh;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (New Zealand) [en-nz]\n//! author : Luke McGregor : https://github.com/lukemcgregor\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enNz = moment.defineLocale('en-nz', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enNz;\n\n})));\n","//! moment.js locale configuration\n//! locale : Frisian [fy]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mai_jun._jul._aug._sep._okt._nov._des.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mai_jun_jul_aug_sep_okt_nov_des'.split('_');\n\n    var fy = moment.defineLocale('fy', {\n        months: 'jannewaris_febrewaris_maart_april_maaie_juny_july_augustus_septimber_oktober_novimber_desimber'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n        monthsParseExact: true,\n        weekdays: 'snein_moandei_tiisdei_woansdei_tongersdei_freed_sneon'.split(\n            '_'\n        ),\n        weekdaysShort: 'si._mo._ti._wo._to._fr._so.'.split('_'),\n        weekdaysMin: 'Si_Mo_Ti_Wo_To_Fr_So'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[hjoed om] LT',\n            nextDay: '[moarn om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[juster om] LT',\n            lastWeek: '[ôfrûne] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'oer %s',\n            past: '%s lyn',\n            s: 'in pear sekonden',\n            ss: '%d sekonden',\n            m: 'ien minút',\n            mm: '%d minuten',\n            h: 'ien oere',\n            hh: '%d oeren',\n            d: 'ien dei',\n            dd: '%d dagen',\n            M: 'ien moanne',\n            MM: '%d moannen',\n            y: 'ien jier',\n            yy: '%d jierren',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fy;\n\n})));\n","import { print as printWindow, createElement, detach, classList, selectAll, extend } from '@syncfusion/ej2-base';\nimport { getPrintGridModel } from '../base/util';\nimport { Grid } from '../base/grid';\nimport * as events from '../base/constant';\nimport { Deferred } from '@syncfusion/ej2-data';\nimport * as literals from '../base/string-literals';\n/**\n * @returns {string[]} returns the cloned property\n * @hidden\n */\nexport function getCloneProperties() {\n    return ['aggregates', 'allowGrouping', 'allowFiltering', 'allowMultiSorting', 'allowReordering', 'allowSorting',\n        'allowTextWrap', 'childGrid', 'columns', 'currentViewData', 'dataSource', 'detailTemplate', 'enableAltRow',\n        'enableColumnVirtualization', 'filterSettings', 'gridLines',\n        'groupSettings', 'height', 'locale', 'pageSettings', 'printMode', 'query', 'queryString', 'enableRtl',\n        'rowHeight', 'rowTemplate', 'sortSettings', 'textWrapSettings', 'allowPaging', 'hierarchyPrintMode', 'searchSettings',\n        'queryCellInfo', 'beforeDataBound'];\n}\n/**\n *\n * The `Print` module is used to handle print action.\n */\nvar Print = /** @class */ (function () {\n    /**\n     * Constructor for the Grid print module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {Scroll} scrollModule - specifies the scroll module\n     * @hidden\n     */\n    function Print(parent, scrollModule) {\n        this.isAsyncPrint = false;\n        this.defered = new Deferred();\n        this.parent = parent;\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.on(events.contentReady, this.isContentReady(), this);\n        this.actionBeginFunction = this.actionBegin.bind(this);\n        this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n        this.parent.on(events.onEmpty, this.onEmpty.bind(this));\n        this.parent.on(events.hierarchyPrint, this.hierarchyPrint, this);\n        this.scrollModule = scrollModule;\n    }\n    Print.prototype.isContentReady = function () {\n        var _this = this;\n        if (this.isPrintGrid() && (this.parent.hierarchyPrintMode === 'None' || !this.parent.childGrid)) {\n            return this.contentReady;\n        }\n        return function () {\n            _this.defered.promise.then(function () {\n                _this.contentReady();\n            });\n            if (_this.isPrintGrid()) {\n                _this.hierarchyPrint();\n            }\n        };\n    };\n    Print.prototype.hierarchyPrint = function () {\n        this.removeColGroup(this.parent);\n        var printGridObj = window.printGridObj;\n        if (printGridObj && !printGridObj.element.querySelector('[aria-busy=true')) {\n            printGridObj.printModule.defered.resolve();\n        }\n    };\n    /**\n     * By default, prints all the Grid pages and hides the pager.\n     * > You can customize print options using the\n     * [`printMode`](./printmode/).\n     *\n     * @returns {void}\n     */\n    Print.prototype.print = function () {\n        this.renderPrintGrid();\n    };\n    Print.prototype.onEmpty = function () {\n        if (this.isPrintGrid()) {\n            this.contentReady();\n        }\n    };\n    Print.prototype.actionBegin = function () {\n        if (this.isPrintGrid()) {\n            this.isAsyncPrint = true;\n        }\n    };\n    Print.prototype.renderPrintGrid = function () {\n        var gObj = this.parent;\n        var element = createElement('div', {\n            id: this.parent.element.id + '_print', className: gObj.element.className + ' e-print-grid'\n        });\n        element.classList.remove('e-gridhover');\n        document.body.appendChild(element);\n        var printGrid = new Grid(getPrintGridModel(gObj, gObj.hierarchyPrintMode));\n        for (var i = 0; i < printGrid.columns.length; i++) {\n            printGrid.columns[parseInt(i.toString(), 10)] = extend({}, printGrid.columns[parseInt(i.toString(), 10)]);\n            if (gObj.isFrozenGrid() && !gObj.getFrozenColumns()) {\n                printGrid.columns[parseInt(i.toString(), 10)].freeze = undefined;\n            }\n        }\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        if (this.parent.isAngular) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            printGrid.viewContainerRef = this.parent.viewContainerRef;\n        }\n        // eslint-disable-next-line @typescript-eslint/no-empty-function\n        printGrid.load = function () { };\n        printGrid.query = gObj.getQuery().clone();\n        window.printGridObj = printGrid;\n        printGrid.isPrinting = true;\n        var modules = printGrid.getInjectedModules();\n        var injectedModues = gObj.getInjectedModules();\n        if (!modules || modules.length !== injectedModues.length) {\n            printGrid.setInjectedModules(injectedModues);\n        }\n        gObj.notify(events.printGridInit, { element: element, printgrid: printGrid });\n        this.parent.log('exporting_begin', this.getModuleName());\n        printGrid.registeredTemplate = this.parent.registeredTemplate;\n        printGrid.isVue = this.parent.isVue;\n        printGrid.appendTo(element);\n        if (!gObj.isVue3) {\n            printGrid.trigger = gObj.trigger;\n        }\n    };\n    Print.prototype.contentReady = function () {\n        if (this.isPrintGrid()) {\n            var gObj = this.parent;\n            if (this.isAsyncPrint) {\n                this.printGrid();\n                return;\n            }\n            var args = {\n                requestType: 'print',\n                element: gObj.element,\n                selectedRows: gObj.getContentTable().querySelectorAll('tr[aria-selected=\"true\"]'),\n                cancel: false,\n                hierarchyPrintMode: gObj.hierarchyPrintMode\n            };\n            if (!this.isAsyncPrint) {\n                gObj.trigger(events.beforePrint, args);\n            }\n            if (args.cancel) {\n                detach(gObj.element);\n                return;\n            }\n            if (!this.isAsyncPrint) {\n                this.printGrid();\n            }\n        }\n    };\n    Print.prototype.printGrid = function () {\n        var gObj = this.parent;\n        // Height adjustment on print grid\n        if (gObj.height !== 'auto') { // if scroller enabled\n            var cssProps = this.scrollModule.getCssProperties();\n            var contentDiv = gObj.element.querySelector('.' + literals.content);\n            var headerDiv = gObj.element.querySelector('.' + literals.gridHeader);\n            contentDiv.style.height = 'auto';\n            contentDiv.style.overflowY = 'auto';\n            headerDiv.style[cssProps.padding] = '';\n            headerDiv.firstElementChild.style[cssProps.border] = '';\n        }\n        // Grid alignment adjustment on grouping\n        if (gObj.allowGrouping) {\n            if (!gObj.groupSettings.columns.length) {\n                gObj.element.querySelector('.e-groupdroparea').style.display = 'none';\n            }\n            else {\n                this.removeColGroup(gObj);\n            }\n        }\n        // hide horizontal scroll\n        for (var _i = 0, _a = [].slice.call(gObj.element.getElementsByClassName(literals.content)); _i < _a.length; _i++) {\n            var element = _a[_i];\n            element.style.overflowX = 'hidden';\n        }\n        // Hide the waiting popup\n        var waitingPop = [].slice.call(gObj.element.getElementsByClassName('e-spin-show'));\n        for (var _b = 0, _c = [].slice.call(waitingPop); _b < _c.length; _b++) {\n            var element = _c[_b];\n            classList(element, ['e-spin-hide'], ['e-spin-show']);\n        }\n        this.printGridElement(gObj);\n        gObj.isPrinting = false;\n        delete window.printGridObj;\n        var args = {\n            element: gObj.element\n        };\n        gObj.trigger(events.printComplete, args);\n        gObj.destroy();\n        this.parent.log('exporting_complete', this.getModuleName());\n    };\n    Print.prototype.printGridElement = function (gObj) {\n        classList(gObj.element, ['e-print-grid-layout'], ['e-print-grid']);\n        if (gObj.isPrinting) {\n            detach(gObj.element);\n        }\n        this.printWind = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n        this.printWind.moveTo(0, 0);\n        this.printWind.resizeTo(screen.availWidth, screen.availHeight);\n        this.printWind = printWindow(gObj.element, this.printWind);\n    };\n    Print.prototype.removeColGroup = function (gObj) {\n        var depth = gObj.groupSettings.columns.length;\n        var element = gObj.element;\n        var id = '#' + gObj.element.id;\n        if (!depth) {\n            return;\n        }\n        var groupCaption = selectAll('.e-groupcaption', element);\n        var colSpan = groupCaption[depth - 1].getAttribute('colspan');\n        for (var i = 0; i < groupCaption.length; i++) {\n            groupCaption[parseInt(i.toString(), 10)].setAttribute('colspan', colSpan);\n        }\n        var colGroups = selectAll(\"colgroup\" + id + \"colgroup\", element);\n        var contentColGroups = selectAll('.e-content colgroup', element);\n        var footerColGroups = selectAll('.e-summarycontent colgroup', element);\n        this.hideColGroup(colGroups, depth);\n        this.hideColGroup(contentColGroups, depth);\n        this.hideColGroup(footerColGroups, depth);\n    };\n    Print.prototype.hideColGroup = function (colGroups, depth) {\n        for (var i = 0; i < colGroups.length; i++) {\n            for (var j = 0; j < depth; j++) {\n                colGroups[parseInt(i.toString(), 10)].children[parseInt(j.toString(), 10)].style.display = 'none';\n            }\n        }\n    };\n    /**\n     * To destroy the print\n     *\n     * @returns {boolean} returns the isPrintGrid or not\n     * @hidden\n     */\n    Print.prototype.isPrintGrid = function () {\n        return this.parent.element.id.indexOf('_print') > 0 && this.parent.isPrinting;\n    };\n    /**\n     * To destroy the print\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Print.prototype.destroy = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.off(events.contentReady, this.contentReady.bind(this));\n        this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n        this.parent.off(events.onEmpty, this.onEmpty.bind(this));\n        this.parent.off(events.hierarchyPrint, this.hierarchyPrint);\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    Print.prototype.getModuleName = function () {\n        return 'print';\n    };\n    Print.printGridProp = getCloneProperties().concat([events.beforePrint, events.printComplete, events.load]);\n    return Print;\n}());\nexport { Print };\n","//! moment.js locale configuration\n//! locale : English (Israel) [en-il]\n//! author : Chris Gedrim : https://github.com/chrisgedrim\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIl = moment.defineLocale('en-il', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    return enIl;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { EventHandler, Property, Internationalization, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Animation, Browser } from '@syncfusion/ej2-base';\nimport { cldrData, L10n, Component, getDefaultDateObject, rippleEffect, Event } from '@syncfusion/ej2-base';\nimport { remove, addClass, detach, removeClass, closest, append, attributes, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, formatUnit, getValue, extend, getUniqueID, ChildProperty } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { ListBase } from '@syncfusion/ej2-lists';\nvar WRAPPERCLASS = 'e-time-wrapper';\nvar POPUP = 'e-popup';\nvar ERROR = 'e-error';\nvar POPUPDIMENSION = '240px';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar ROOT = 'e-timepicker';\nvar LIBRARY = 'e-lib';\nvar CONTROL = 'e-control';\nvar CONTENT = 'e-content';\nvar SELECTED = 'e-active';\nvar HOVER = 'e-hover';\nvar NAVIGATION = 'e-navigation';\nvar DISABLED = 'e-disabled';\nvar ICONANIMATION = 'e-icon-anim';\nvar TIMEICON = 'e-time-icon';\nvar CLEARICON = 'e-clear-icon';\nvar FOCUS = 'e-input-focus';\nvar LISTCLASS = 'e-list-item';\nvar HALFPOSITION = 2;\nvar ANIMATIONDURATION = 50;\nvar OVERFLOW = 'e-time-overflow';\nvar OFFSETVAL = 4;\nvar EDITABLE = 'e-non-edit';\nvar wrapperAttributes = ['title', 'class', 'style'];\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var TimePickerBase;\n(function (TimePickerBase) {\n    // eslint-disable-next-line max-len, jsdoc/require-jsdoc\n    function createListItems(createdEl, min, max, globalize, timeFormat, step) {\n        var formatOptions;\n        if (this.calendarMode === 'Gregorian') {\n            formatOptions = { format: timeFormat, type: 'time' };\n        }\n        else {\n            // eslint-disable-next-line @typescript-eslint/no-unused-vars\n            formatOptions = { format: timeFormat, type: 'time', calendar: 'islamic' };\n        }\n        var start;\n        var interval = step * 60000;\n        var listItems = [];\n        var timeCollections = [];\n        start = +(min.setMilliseconds(0));\n        var end = +(max.setMilliseconds(0));\n        while (end >= start) {\n            timeCollections.push(start);\n            listItems.push(globalize.formatDate(new Date(start), { format: timeFormat, type: 'time' }));\n            start += interval;\n        }\n        var listTag = ListBase.createList(createdEl, listItems, null, true);\n        return { collection: timeCollections, list: listTag };\n    }\n    TimePickerBase.createListItems = createListItems;\n})(TimePickerBase || (TimePickerBase = {}));\nvar TimeMaskPlaceholder = /** @class */ (function (_super) {\n    __extends(TimeMaskPlaceholder, _super);\n    function TimeMaskPlaceholder() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('day')\n    ], TimeMaskPlaceholder.prototype, \"day\", void 0);\n    __decorate([\n        Property('month')\n    ], TimeMaskPlaceholder.prototype, \"month\", void 0);\n    __decorate([\n        Property('year')\n    ], TimeMaskPlaceholder.prototype, \"year\", void 0);\n    __decorate([\n        Property('day of the week')\n    ], TimeMaskPlaceholder.prototype, \"dayOfTheWeek\", void 0);\n    __decorate([\n        Property('hour')\n    ], TimeMaskPlaceholder.prototype, \"hour\", void 0);\n    __decorate([\n        Property('minute')\n    ], TimeMaskPlaceholder.prototype, \"minute\", void 0);\n    __decorate([\n        Property('second')\n    ], TimeMaskPlaceholder.prototype, \"second\", void 0);\n    return TimeMaskPlaceholder;\n}(ChildProperty));\nexport { TimeMaskPlaceholder };\n/**\n * TimePicker is an intuitive interface component which provides an options to select a time value\n * from popup list or to set a desired time value.\n * ```\n * <input id='timepicker' type='text'/>\n * <script>\n *   var timePickerObj = new TimePicker({ value: new Date() });\n *   timePickerObj.appendTo('#timepicker');\n * </script>\n * ```\n */\nvar TimePicker = /** @class */ (function (_super) {\n    __extends(TimePicker, _super);\n    /**\n     * Constructor for creating the widget\n     *\n     * @param {TimePickerModel} options - Specifies the TimePicker model.\n     * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n     * @private\n     */\n    function TimePicker(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.liCollections = [];\n        _this.timeCollections = [];\n        _this.disableItemCollection = [];\n        _this.invalidValueString = null;\n        _this.isAngular = false;\n        _this.preventChange = false;\n        _this.maskedDateValue = '';\n        _this.moduleName = _this.getModuleName();\n        _this.timeOptions = options;\n        return _this;\n    }\n    /**\n     * Initialize the event handler\n     *\n     * @returns {void}\n     * @private\n     */\n    TimePicker.prototype.preRender = function () {\n        this.keyConfigure = {\n            enter: 'enter',\n            escape: 'escape',\n            end: 'end',\n            tab: 'tab',\n            home: 'home',\n            down: 'downarrow',\n            up: 'uparrow',\n            left: 'leftarrow',\n            right: 'rightarrow',\n            open: 'alt+downarrow',\n            close: 'alt+uparrow'\n        };\n        this.cloneElement = this.element.cloneNode(true);\n        removeClass([this.cloneElement], [ROOT, CONTROL, LIBRARY]);\n        this.inputElement = this.element;\n        this.angularTag = null;\n        this.formElement = closest(this.element, 'form');\n        if (this.element.tagName === 'EJS-TIMEPICKER') {\n            this.angularTag = this.element.tagName;\n            this.inputElement = this.createElement('input');\n            this.element.appendChild(this.inputElement);\n        }\n        this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n        this.element.removeAttribute('tabindex');\n        this.openPopupEventArgs = {\n            appendTo: document.body\n        };\n    };\n    // element creation\n    TimePicker.prototype.render = function () {\n        this.initialize();\n        this.createInputElement();\n        this.updateHtmlAttributeToWrapper();\n        this.setTimeAllowEdit();\n        this.setEnable();\n        this.validateInterval();\n        this.bindEvents();\n        this.validateDisable();\n        this.setTimeZone();\n        this.setValue(this.getFormattedValue(this.value));\n        if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n            this.updateInputValue(this.maskedDateValue);\n            this.checkErrorState(this.maskedDateValue);\n        }\n        this.anchor = this.inputElement;\n        this.inputElement.setAttribute('value', this.inputElement.value);\n        this.inputEleValue = this.getDateObject(this.inputElement.value);\n        if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n            this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n        }\n        if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n            this.enabled = false;\n        }\n        this.renderComplete();\n    };\n    TimePicker.prototype.setTimeZone = function () {\n        if (!isNullOrUndefined(this.serverTimezoneOffset) && this.value) {\n            var clientTimeZoneDiff = new Date().getTimezoneOffset() / 60;\n            var serverTimezoneDiff = this.serverTimezoneOffset;\n            var timeZoneDiff = serverTimezoneDiff + clientTimeZoneDiff;\n            timeZoneDiff = this.isDayLightSaving() ? timeZoneDiff-- : timeZoneDiff;\n            this.value = new Date((this.value).getTime() + (timeZoneDiff * 60 * 60 * 1000));\n        }\n    };\n    TimePicker.prototype.isDayLightSaving = function () {\n        var firstOffset = new Date(this.value.getFullYear(), 0, 1).getTimezoneOffset();\n        var secondOffset = new Date(this.value.getFullYear(), 6, 1).getTimezoneOffset();\n        return (this.value.getTimezoneOffset() < Math.max(firstOffset, secondOffset));\n    };\n    TimePicker.prototype.setTimeAllowEdit = function () {\n        if (this.allowEdit) {\n            if (!this.readonly) {\n                this.inputElement.removeAttribute('readonly');\n            }\n        }\n        else {\n            attributes(this.inputElement, { 'readonly': '' });\n        }\n        this.clearIconState();\n    };\n    TimePicker.prototype.clearIconState = function () {\n        if (!this.allowEdit && this.inputWrapper && !this.readonly) {\n            if (this.inputElement.value === '') {\n                removeClass([this.inputWrapper.container], [EDITABLE]);\n            }\n            else {\n                addClass([this.inputWrapper.container], [EDITABLE]);\n            }\n        }\n        else if (this.inputWrapper) {\n            removeClass([this.inputWrapper.container], [EDITABLE]);\n        }\n    };\n    TimePicker.prototype.validateDisable = function () {\n        this.setMinMax(this.initMin, this.initMax);\n        if (!isNullOrUndefined(this.value)) {\n            this.popupCreation();\n            this.popupObj.destroy();\n            this.popupWrapper = this.popupObj = null;\n        }\n        if ((!isNaN(+this.value) && this.value !== null)) {\n            if (!this.valueIsDisable(this.value)) {\n                //disable value given in value property so reset the date based on current date\n                if (this.strictMode) {\n                    this.resetState();\n                }\n                this.initValue = null;\n                this.initMax = this.getDateObject(this.initMax);\n                this.initMin = this.getDateObject(this.initMin);\n                this.timeCollections = this.liCollections = [];\n                this.setMinMax(this.initMin, this.initMax);\n            }\n        }\n    };\n    TimePicker.prototype.validationAttribute = function (target, input) {\n        var name = target.getAttribute('name') ? target.getAttribute('name') : target.getAttribute('id');\n        input.setAttribute('name', name);\n        target.removeAttribute('name');\n        var attributes = ['required', 'aria-required', 'form'];\n        for (var i = 0; i < attributes.length; i++) {\n            if (isNullOrUndefined(target.getAttribute(attributes[i]))) {\n                continue;\n            }\n            var attr = target.getAttribute(attributes[i]);\n            input.setAttribute(attributes[i], attr);\n            target.removeAttribute(attributes[i]);\n        }\n    };\n    TimePicker.prototype.initialize = function () {\n        this.globalize = new Internationalization(this.locale);\n        this.defaultCulture = new Internationalization('en');\n        this.checkTimeFormat();\n        this.checkInvalidValue(this.value);\n        // persist the value property.\n        this.setProperties({ value: this.checkDateValue(new Date(this.checkInValue(this.value))) }, true);\n        this.setProperties({ min: this.checkDateValue(new Date(this.checkInValue(this.min))) }, true);\n        this.setProperties({ max: this.checkDateValue(new Date(this.checkInValue(this.max))) }, true);\n        this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(this.scrollTo))) }, true);\n        if (this.angularTag !== null) {\n            this.validationAttribute(this.element, this.inputElement);\n        }\n        this.updateHtmlAttributeToElement();\n        this.checkAttributes(false); //check the input element attributes\n        var localeText = { placeholder: this.placeholder };\n        this.l10n = new L10n('timepicker', localeText, this.locale);\n        this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n        this.initValue = this.checkDateValue(this.value);\n        this.initMin = this.checkDateValue(this.min);\n        this.initMax = this.checkDateValue(this.max);\n        this.isNavigate = this.isPreventBlur = this.isTextSelected = false;\n        this.activeIndex = this.valueWithMinutes = this.prevDate = null;\n        if (!isNullOrUndefined(this.element.getAttribute('id'))) {\n            if (this.angularTag !== null) {\n                this.inputElement.id = this.element.getAttribute('id') + '_input';\n            }\n        }\n        else {\n            //for angular case\n            this.element.id = getUniqueID('ej2_timepicker');\n            if (this.angularTag !== null) {\n                attributes(this.inputElement, { 'id': this.element.id + '_input' });\n            }\n        }\n        if (isNullOrUndefined(this.inputElement.getAttribute('name'))) {\n            attributes(this.inputElement, { 'name': this.element.id });\n        }\n        if (this.enableMask) {\n            this.notify('createMask', {\n                module: 'MaskedDateTime'\n            });\n        }\n    };\n    TimePicker.prototype.checkTimeFormat = function () {\n        if (this.format) {\n            if (typeof this.format === 'string') {\n                this.formatString = this.format;\n            }\n            else if (!isNullOrUndefined(this.format.skeleton) && this.format.skeleton !== '') {\n                var skeletonString = this.format.skeleton;\n                this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: skeletonString });\n            }\n            else {\n                this.formatString = this.globalize.getDatePattern({ type: 'time', skeleton: 'short' });\n            }\n        }\n        else {\n            this.formatString = null;\n        }\n    };\n    TimePicker.prototype.checkDateValue = function (value) {\n        return (!isNullOrUndefined(value) && value instanceof Date && !isNaN(+value)) ? value : null;\n    };\n    TimePicker.prototype.createInputElement = function () {\n        if (this.fullScreenMode && Browser.isDevice) {\n            this.cssClass += ' ' + \"e-popup-expand\";\n        }\n        var updatedCssClassesValue = this.cssClass;\n        var isBindClearAction = this.enableMask ? false : true;\n        if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n            updatedCssClassesValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n        }\n        this.inputWrapper = Input.createInput({\n            element: this.inputElement,\n            bindClearAction: isBindClearAction,\n            floatLabelType: this.floatLabelType,\n            properties: {\n                readonly: this.readonly,\n                placeholder: this.placeholder,\n                cssClass: updatedCssClassesValue,\n                enabled: this.enabled,\n                enableRtl: this.enableRtl,\n                showClearButton: this.showClearButton\n            },\n            buttons: [' e-input-group-icon e-time-icon e-icons']\n        }, this.createElement);\n        this.inputWrapper.container.style.width = this.setWidth(this.width);\n        attributes(this.inputElement, {\n            'aria-autocomplete': 'list', 'tabindex': '0',\n            'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n            'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n            'aria-disabled': 'false', 'aria-invalid': 'false'\n        });\n        if (!this.isNullOrEmpty(this.inputStyle)) {\n            Input.addAttributes({ 'style': this.inputStyle }, this.inputElement);\n        }\n        addClass([this.inputWrapper.container], WRAPPERCLASS);\n    };\n    TimePicker.prototype.getCldrDateTimeFormat = function () {\n        var culture = new Internationalization(this.locale);\n        var cldrTime;\n        var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n        if (this.isNullOrEmpty(this.formatString)) {\n            cldrTime = dateFormat + ' ' + this.cldrFormat('time');\n        }\n        else {\n            cldrTime = this.formatString;\n        }\n        return cldrTime;\n    };\n    TimePicker.prototype.checkInvalidValue = function (value) {\n        var isInvalid = false;\n        if (typeof value !== 'object' && !isNullOrUndefined(value)) {\n            var valueString = value;\n            if (typeof valueString === 'string') {\n                valueString = valueString.trim();\n            }\n            var valueExpression = null;\n            var valueExp = null;\n            if (typeof value === 'number') {\n                valueString = value.toString();\n            }\n            else if (typeof value === 'string') {\n                if (!(/^[a-zA-Z0-9- ]*$/).test(value)) {\n                    valueExpression = this.setCurrentDate(this.getDateObject(value));\n                    if (isNullOrUndefined(valueExpression)) {\n                        valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n                            format: this.getCldrDateTimeFormat(), type: 'datetime'\n                        }));\n                        if (isNullOrUndefined(valueExpression)) {\n                            valueExpression = this.checkDateValue(this.globalize.parseDate(valueString, {\n                                format: this.formatString, type: 'dateTime', skeleton: 'yMd'\n                            }));\n                        }\n                    }\n                }\n            }\n            valueExp = this.globalize.parseDate(valueString, {\n                format: this.getCldrDateTimeFormat(), type: 'datetime'\n            });\n            valueExpression = (!isNullOrUndefined(valueExp) && valueExp instanceof Date && !isNaN(+valueExp)) ? valueExp : null;\n            if (isNullOrUndefined(valueExpression) && valueString.replace(/\\s/g, '').length) {\n                var extISOString = null;\n                var basicISOString = null;\n                // eslint-disable-next-line\n                extISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n                // eslint-disable-next-line\n                basicISOString = /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([\\+\\-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?/;\n                if ((!extISOString.test(valueString) && !basicISOString.test(valueString))\n                    || ((/^[a-zA-Z0-9- ]*$/).test(value)) || isNaN(+new Date('' + valueString))) {\n                    isInvalid = true;\n                }\n                else {\n                    valueExpression = new Date('' + valueString);\n                }\n            }\n            if (isInvalid) {\n                if (!this.strictMode) {\n                    this.invalidValueString = valueString;\n                }\n                this.setProperties({ value: null }, true);\n                this.initValue = null;\n            }\n            else {\n                this.setProperties({ value: valueExpression }, true);\n                this.initValue = this.value;\n            }\n        }\n    };\n    TimePicker.prototype.requiredModules = function () {\n        var modules = [];\n        if (this.enableMask) {\n            modules.push({ args: [this], member: 'MaskedDateTime' });\n        }\n        return modules;\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    TimePicker.prototype.cldrFormat = function (type) {\n        var cldrDateTimeString;\n        if (this.locale === 'en' || this.locale === 'en-US') {\n            cldrDateTimeString = (getValue('timeFormats.short', getDefaultDateObject()));\n        }\n        else {\n            cldrDateTimeString = (this.getCultureTimeObject(cldrData, '' + this.locale));\n        }\n        return cldrDateTimeString;\n    };\n    // destroy function\n    TimePicker.prototype.destroy = function () {\n        this.hide();\n        this.unBindEvents();\n        var ariaAttribute = {\n            'aria-autocomplete': 'list', 'tabindex': '0',\n            'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off',\n            'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n            'aria-disabled': 'true', 'aria-invalid': 'false'\n        };\n        if (this.inputElement) {\n            Input.removeAttributes(ariaAttribute, this.inputElement);\n            if (this.angularTag === null) {\n                this.inputWrapper.container.parentElement.appendChild(this.inputElement);\n            }\n            if (!isNullOrUndefined(this.cloneElement.getAttribute('tabindex'))) {\n                this.inputElement.setAttribute('tabindex', this.tabIndex);\n            }\n            else {\n                this.inputElement.removeAttribute('tabindex');\n            }\n            this.ensureInputAttribute();\n            this.enableElement([this.inputElement]);\n            this.inputElement.classList.remove('e-input');\n            if (isNullOrUndefined(this.cloneElement.getAttribute('disabled'))) {\n                Input.setEnabled(true, this.inputElement, this.floatLabelType);\n            }\n        }\n        if (this.inputWrapper.container) {\n            detach(this.inputWrapper.container);\n        }\n        this.inputWrapper = this.popupWrapper = this.cloneElement = undefined;\n        this.liCollections = this.timeCollections = this.disableItemCollection = [];\n        if (!isNullOrUndefined(this.rippleFn)) {\n            this.rippleFn();\n        }\n        _super.prototype.destroy.call(this);\n        if (this.formElement) {\n            EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n        }\n        this.rippleFn = null;\n        this.openPopupEventArgs = null;\n        this.selectedElement = null;\n        this.listTag = null;\n        this.liCollections = null;\n    };\n    TimePicker.prototype.ensureInputAttribute = function () {\n        var propertyList = [];\n        for (var i = 0; i < this.inputElement.attributes.length; i++) {\n            propertyList[i] = this.inputElement.attributes[i].name;\n        }\n        for (var i = 0; i < propertyList.length; i++) {\n            if (!isNullOrUndefined(this.cloneElement.getAttribute(propertyList[i]))) {\n                this.inputElement.setAttribute(propertyList[i], this.cloneElement.getAttribute(propertyList[i]));\n                if (propertyList[i].toLowerCase() === 'value') {\n                    this.inputElement.value = this.cloneElement.getAttribute(propertyList[i]);\n                }\n            }\n            else {\n                this.inputElement.removeAttribute(propertyList[i]);\n                if (propertyList[i].toLowerCase() === 'value') {\n                    this.inputElement.value = '';\n                }\n            }\n        }\n    };\n    //popup creation\n    TimePicker.prototype.popupCreation = function () {\n        this.popupWrapper = this.createElement('div', {\n            className: ROOT + ' ' + POPUP,\n            attrs: { 'id': this.element.id + '_popup', 'style': 'visibility:hidden' }\n        });\n        this.popupWrapper.setAttribute('aria-label', this.element.id);\n        this.popupWrapper.setAttribute('role', 'dialog');\n        if (!isNullOrUndefined(this.cssClass)) {\n            this.popupWrapper.className += ' ' + this.cssClass;\n        }\n        if (!isNullOrUndefined(this.step) && this.step > 0) {\n            this.generateList();\n            append([this.listWrapper], this.popupWrapper);\n        }\n        this.addSelection();\n        this.renderPopup();\n        detach(this.popupWrapper);\n    };\n    TimePicker.prototype.getPopupHeight = function () {\n        var height = parseInt(POPUPDIMENSION, 10);\n        var popupHeight = this.popupWrapper.getBoundingClientRect().height;\n        return popupHeight > height ? height : popupHeight;\n    };\n    TimePicker.prototype.generateList = function () {\n        this.createListItems();\n        this.wireListEvents();\n        var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n        this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n        this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n    };\n    TimePicker.prototype.renderPopup = function () {\n        var _this = this;\n        this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n        this.popupObj = new Popup(this.popupWrapper, {\n            width: this.setPopupWidth(this.width),\n            zIndex: this.zIndex,\n            targetType: 'relative',\n            position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n            collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n            enableRtl: this.enableRtl,\n            relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n            offsetY: OFFSETVAL,\n            open: function () {\n                _this.popupWrapper.style.visibility = 'visible';\n                addClass([_this.inputWrapper.buttons[0]], SELECTED);\n            }, close: function () {\n                removeClass([_this.inputWrapper.buttons[0]], SELECTED);\n                _this.unWireListEvents();\n                _this.inputElement.removeAttribute('aria-activedescendant');\n                remove(_this.popupObj.element);\n                _this.popupObj.destroy();\n                _this.popupWrapper.innerHTML = '';\n                _this.listWrapper = _this.popupWrapper = _this.listTag = undefined;\n            }, targetExitViewport: function () {\n                if (!Browser.isDevice) {\n                    _this.hide();\n                }\n            }\n        });\n        if (!Browser.isDevice) {\n            this.popupObj.collision = { X: 'none', Y: 'flip' };\n        }\n        if (Browser.isDevice && this.fullScreenMode) {\n            this.popupObj.element.style.maxHeight = \"100%\";\n            this.popupObj.element.style.width = \"100%\";\n        }\n        else {\n            this.popupObj.element.style.maxHeight = POPUPDIMENSION;\n        }\n        if (Browser.isDevice && this.fullScreenMode) {\n            var modelHeader = this.createElement('div', { className: 'e-model-header' });\n            var modelTitleSpan = this.createElement(\"span\", { className: \"e-model-title\" });\n            modelTitleSpan.textContent = \"Select time\";\n            var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n            EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.timePopupCloseHandler, this);\n            modelHeader.appendChild(modelCloseIcon);\n            modelHeader.appendChild(modelTitleSpan);\n            this.popupWrapper.insertBefore(modelHeader, this.popupWrapper.firstElementChild);\n        }\n    };\n    TimePicker.prototype.timePopupCloseHandler = function (e) {\n        this.hide();\n    };\n    //util function\n    TimePicker.prototype.getFormattedValue = function (value) {\n        if (isNullOrUndefined(this.checkDateValue(value))) {\n            return null;\n        }\n        else {\n            return this.globalize.formatDate(value, { skeleton: 'medium', type: 'time' });\n        }\n    };\n    TimePicker.prototype.getDateObject = function (text) {\n        if (!this.isNullOrEmpty(text)) {\n            var dateValue = this.createDateObj(text);\n            var value = !this.isNullOrEmpty(this.initValue);\n            if (this.checkDateValue(dateValue)) {\n                var date = value ? this.initValue.getDate() : DAY;\n                var month = value ? this.initValue.getMonth() : MONTH;\n                var year = value ? this.initValue.getFullYear() : YEAR;\n                return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds());\n            }\n        }\n        return null;\n    };\n    TimePicker.prototype.updateHtmlAttributeToWrapper = function () {\n        if (!isNullOrUndefined(this.htmlAttributes)) {\n            for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n                var key = _a[_i];\n                if (wrapperAttributes.indexOf(key) > -1) {\n                    if (key === 'class') {\n                        var updatedClassesValue = (this.htmlAttributes[\"\" + key].replace(/\\s+/g, ' ')).trim();\n                        if (updatedClassesValue !== '') {\n                            addClass([this.inputWrapper.container], updatedClassesValue.split(' '));\n                        }\n                    }\n                    else if (key === 'style') {\n                        var timeStyle = this.inputWrapper.container.getAttribute(key);\n                        timeStyle = !isNullOrUndefined(timeStyle) ? (timeStyle + this.htmlAttributes[\"\" + key]) :\n                            this.htmlAttributes[\"\" + key];\n                        this.inputWrapper.container.setAttribute(key, timeStyle);\n                    }\n                    else {\n                        this.inputWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                    }\n                }\n            }\n        }\n    };\n    TimePicker.prototype.updateHtmlAttributeToElement = function () {\n        if (!isNullOrUndefined(this.htmlAttributes)) {\n            for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n                var key = _a[_i];\n                if (wrapperAttributes.indexOf(key) < 0) {\n                    this.inputElement.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                }\n            }\n        }\n    };\n    TimePicker.prototype.updateCssClass = function (cssClassNew, cssClassOld) {\n        if (!isNullOrUndefined(cssClassOld)) {\n            cssClassOld = (cssClassOld.replace(/\\s+/g, ' ')).trim();\n        }\n        if (!isNullOrUndefined(cssClassNew)) {\n            cssClassNew = (cssClassNew.replace(/\\s+/g, ' ')).trim();\n        }\n        Input.setCssClass(cssClassNew, [this.inputWrapper.container], cssClassOld);\n        if (this.popupWrapper) {\n            Input.setCssClass(cssClassNew, [this.popupWrapper], cssClassOld);\n        }\n    };\n    TimePicker.prototype.removeErrorClass = function () {\n        removeClass([this.inputWrapper.container], ERROR);\n        attributes(this.inputElement, { 'aria-invalid': 'false' });\n    };\n    TimePicker.prototype.checkErrorState = function (val) {\n        var value = this.getDateObject(val);\n        if ((this.validateState(value) && !this.invalidValueString) ||\n            (this.enableMask && this.inputElement.value === this.maskedDateValue)) {\n            this.removeErrorClass();\n        }\n        else {\n            addClass([this.inputWrapper.container], ERROR);\n            attributes(this.inputElement, { 'aria-invalid': 'true' });\n        }\n    };\n    TimePicker.prototype.validateInterval = function () {\n        if (!isNullOrUndefined(this.step) && this.step > 0) {\n            this.enableElement([this.inputWrapper.buttons[0]]);\n        }\n        else {\n            this.disableTimeIcon();\n        }\n    };\n    TimePicker.prototype.disableTimeIcon = function () {\n        this.disableElement([this.inputWrapper.buttons[0]]);\n        this.hide();\n    };\n    TimePicker.prototype.disableElement = function (element) {\n        addClass(element, DISABLED);\n    };\n    TimePicker.prototype.enableElement = function (element) {\n        removeClass(element, DISABLED);\n    };\n    TimePicker.prototype.selectInputText = function () {\n        this.inputElement.setSelectionRange(0, (this.inputElement).value.length);\n    };\n    TimePicker.prototype.setCursorToEnd = function () {\n        this.inputElement.setSelectionRange((this.inputElement).value.length, (this.inputElement).value.length);\n    };\n    TimePicker.prototype.getMeridianText = function () {\n        var meridian;\n        if (this.locale === 'en' || this.locale === 'en-US') {\n            meridian = getValue('dayPeriods.format.wide', getDefaultDateObject());\n        }\n        else {\n            var gregorianFormat = '.dates.calendars.gregorian.dayPeriods.format.abbreviated';\n            var mainVal = 'main.';\n            meridian = getValue(mainVal + '' + this.locale + gregorianFormat, cldrData);\n        }\n        return meridian;\n    };\n    TimePicker.prototype.getCursorSelection = function () {\n        var input = (this.inputElement);\n        var start = 0;\n        var end = 0;\n        if (!isNaN(input.selectionStart)) {\n            start = input.selectionStart;\n            end = input.selectionEnd;\n        }\n        return { start: Math.abs(start), end: Math.abs(end) };\n    };\n    TimePicker.prototype.getActiveElement = function () {\n        if (!isNullOrUndefined(this.popupWrapper)) {\n            return this.popupWrapper.querySelectorAll('.' + SELECTED);\n        }\n        else {\n            return null;\n        }\n    };\n    TimePicker.prototype.isNullOrEmpty = function (value) {\n        if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n            return true;\n        }\n        else {\n            return false;\n        }\n    };\n    TimePicker.prototype.setWidth = function (width) {\n        if (typeof width === 'number') {\n            width = formatUnit(width);\n        }\n        else if (typeof width === 'string') {\n            width = (width.match(/px|%|em/)) ? width : formatUnit(width);\n        }\n        else {\n            width = '100%';\n        }\n        return width;\n    };\n    TimePicker.prototype.setPopupWidth = function (width) {\n        width = this.setWidth(width);\n        if (width.indexOf('%') > -1) {\n            var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n            width = inputWidth.toString() + 'px';\n        }\n        return width;\n    };\n    TimePicker.prototype.setScrollPosition = function () {\n        var element = this.selectedElement;\n        if (!isNullOrUndefined(element)) {\n            this.findScrollTop(element);\n        }\n        else if (this.popupWrapper && this.checkDateValue(this.scrollTo)) {\n            this.setScrollTo();\n        }\n    };\n    TimePicker.prototype.findScrollTop = function (element) {\n        var listHeight = this.getPopupHeight();\n        var nextEle = element.nextElementSibling;\n        var height = nextEle ? nextEle.offsetTop : element.offsetTop;\n        var liHeight = element.getBoundingClientRect().height;\n        if ((height + element.offsetTop) > listHeight) {\n            this.popupWrapper.scrollTop = nextEle ? (height - (listHeight / HALFPOSITION + liHeight / HALFPOSITION)) : height;\n        }\n        else {\n            this.popupWrapper.scrollTop = 0;\n        }\n    };\n    TimePicker.prototype.setScrollTo = function () {\n        var element;\n        if (!isNullOrUndefined(this.popupWrapper)) {\n            var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n            if (items.length) {\n                var initialTime = this.timeCollections[0];\n                var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n                element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n            }\n        }\n        else {\n            this.popupWrapper.scrollTop = 0;\n        }\n        if (!isNullOrUndefined(element)) {\n            this.findScrollTop(element);\n        }\n        else {\n            this.popupWrapper.scrollTop = 0;\n        }\n    };\n    TimePicker.prototype.getText = function () {\n        return (isNullOrUndefined(this.checkDateValue(this.value))) ? '' : this.getValue(this.value);\n    };\n    TimePicker.prototype.getValue = function (value) {\n        return (isNullOrUndefined(this.checkDateValue(value))) ? null : this.globalize.formatDate(value, {\n            format: this.cldrTimeFormat(), type: 'time'\n        });\n    };\n    TimePicker.prototype.cldrDateFormat = function () {\n        var cldrDate;\n        if (this.locale === 'en' || this.locale === 'en-US') {\n            cldrDate = (getValue('dateFormats.short', getDefaultDateObject()));\n        }\n        else {\n            cldrDate = (this.getCultureDateObject(cldrData, '' + this.locale));\n        }\n        return cldrDate;\n    };\n    TimePicker.prototype.cldrTimeFormat = function () {\n        var cldrTime;\n        if (this.isNullOrEmpty(this.formatString)) {\n            if (this.locale === 'en' || this.locale === 'en-US') {\n                cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n            }\n            else {\n                cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n            }\n        }\n        else {\n            cldrTime = this.formatString;\n        }\n        return cldrTime;\n    };\n    TimePicker.prototype.dateToNumeric = function () {\n        var cldrTime;\n        if (this.locale === 'en' || this.locale === 'en-US') {\n            cldrTime = (getValue('timeFormats.medium', getDefaultDateObject()));\n        }\n        else {\n            cldrTime = (getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.medium', cldrData));\n        }\n        return cldrTime;\n    };\n    TimePicker.prototype.getExactDateTime = function (value) {\n        if (isNullOrUndefined(this.checkDateValue(value))) {\n            return null;\n        }\n        else {\n            return this.globalize.formatDate(value, { format: this.dateToNumeric(), type: 'time' });\n        }\n    };\n    TimePicker.prototype.setValue = function (value) {\n        var time = this.checkValue(value);\n        if (!this.strictMode && !this.validateState(time)) {\n            if (this.checkDateValue(this.valueWithMinutes) === null) {\n                this.initValue = this.valueWithMinutes = null;\n            }\n            this.validateMinMax(this.value, this.min, this.max);\n        }\n        else {\n            if (this.isNullOrEmpty(time)) {\n                this.initValue = null;\n                this.validateMinMax(this.value, this.min, this.max);\n            }\n            else {\n                this.initValue = this.compareFormatChange(time);\n            }\n        }\n        this.updateInput(true, this.initValue);\n    };\n    TimePicker.prototype.compareFormatChange = function (value) {\n        if (isNullOrUndefined(value)) {\n            return null;\n        }\n        return (value !== this.getText()) ? this.getDateObject(value) : this.getDateObject(this.value);\n    };\n    TimePicker.prototype.updatePlaceHolder = function () {\n        Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n    };\n    //event related functions\n    TimePicker.prototype.updateInputValue = function (value) {\n        Input.setValue(value, this.inputElement, this.floatLabelType, this.showClearButton);\n    };\n    TimePicker.prototype.preventEventBubbling = function (e) {\n        e.preventDefault();\n        this.interopAdaptor.invokeMethodAsync('OnTimeIconClick');\n    };\n    TimePicker.prototype.popupHandler = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        if (Browser.isDevice) {\n            this.inputElement.setAttribute('readonly', '');\n        }\n        e.preventDefault();\n        if (this.isPopupOpen()) {\n            this.closePopup(0, e);\n        }\n        else {\n            this.inputElement.focus();\n            this.show(e);\n        }\n    };\n    TimePicker.prototype.mouseDownHandler = function () {\n        if (!this.enabled) {\n            return;\n        }\n        if (!this.readonly) {\n            this.inputElement.setSelectionRange(0, 0);\n            EventHandler.add(this.inputElement, 'mouseup', this.mouseUpHandler, this);\n        }\n    };\n    TimePicker.prototype.mouseUpHandler = function (event) {\n        if (!this.readonly) {\n            event.preventDefault();\n            if (this.enableMask) {\n                event.preventDefault();\n                this.notify('setMaskSelection', {\n                    module: 'MaskedDateTime'\n                });\n                return;\n            }\n            else {\n                EventHandler.remove(this.inputElement, 'mouseup', this.mouseUpHandler);\n                var curPos = this.getCursorSelection();\n                if (!(curPos.start === 0 && curPos.end === this.inputElement.value.length)) {\n                    if (this.inputElement.value.length > 0) {\n                        this.cursorDetails = this.focusSelection();\n                    }\n                    this.inputElement.setSelectionRange(this.cursorDetails.start, this.cursorDetails.end);\n                }\n            }\n        }\n    };\n    TimePicker.prototype.focusSelection = function () {\n        var regex = new RegExp('^[a-zA-Z0-9]+$');\n        var split = this.inputElement.value.split('');\n        split.push(' ');\n        var curPos = this.getCursorSelection();\n        var start = 0;\n        var end = 0;\n        var isSeparator = false;\n        if (!this.isTextSelected) {\n            for (var i = 0; i < split.length; i++) {\n                if (!regex.test(split[i])) {\n                    end = i;\n                    isSeparator = true;\n                }\n                if (isSeparator) {\n                    if (curPos.start >= start && curPos.end <= end) {\n                        // eslint-disable-next-line no-self-assign\n                        end = end;\n                        this.isTextSelected = true;\n                        break;\n                    }\n                    else {\n                        start = i + 1;\n                        isSeparator = false;\n                    }\n                }\n            }\n        }\n        else {\n            start = curPos.start;\n            end = curPos.end;\n            this.isTextSelected = false;\n        }\n        return { start: start, end: end };\n    };\n    TimePicker.prototype.inputHandler = function (event) {\n        if (!this.readonly && this.enabled) {\n            if (!((event.action == 'right' || event.action == 'left' || event.action == 'tab') || ((event.action == 'home' || event.action == 'end' || event.action == 'up' || event.action == 'down') && !this.isPopupOpen() && !this.enableMask))) {\n                event.preventDefault();\n            }\n            switch (event.action) {\n                case 'home':\n                case 'end':\n                case 'up':\n                case 'down':\n                    if (!this.isPopupOpen()) {\n                        this.popupCreation();\n                        this.popupObj.destroy();\n                        this.popupObj = this.popupWrapper = null;\n                    }\n                    if (this.enableMask && !this.readonly && !this.isPopupOpen()) {\n                        event.preventDefault();\n                        this.notify('keyDownHandler', {\n                            module: 'MaskedDateTime',\n                            e: event\n                        });\n                    }\n                    if (this.isPopupOpen()) {\n                        this.keyHandler(event);\n                    }\n                    break;\n                case 'enter':\n                    if (this.isNavigate) {\n                        this.selectedElement = this.liCollections[this.activeIndex];\n                        this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n                        this.updateValue(this.valueWithMinutes, event);\n                    }\n                    else {\n                        this.updateValue(this.inputElement.value, event);\n                    }\n                    this.hide();\n                    this.isNavigate = false;\n                    if (this.isPopupOpen()) {\n                        event.stopPropagation();\n                    }\n                    break;\n                case 'open':\n                    this.show(event);\n                    break;\n                case 'escape':\n                    this.updateInputValue(this.objToString(this.value));\n                    if (this.enableMask) {\n                        if (!this.value) {\n                            this.updateInputValue(this.maskedDateValue);\n                        }\n                        this.createMask();\n                    }\n                    this.previousState(this.value);\n                    this.hide();\n                    break;\n                case 'close':\n                    this.hide();\n                    break;\n                case 'right':\n                case 'left':\n                case 'tab':\n                case 'shiftTab':\n                    if (!this.isPopupOpen() && this.enableMask && !this.readonly) {\n                        if ((this.inputElement.selectionStart === 0 && this.inputElement.selectionEnd === this.inputElement.value.length) ||\n                            (this.inputElement.selectionEnd !== this.inputElement.value.length && event.action === 'tab') ||\n                            (this.inputElement.selectionStart !== 0 && event.action === 'shiftTab') || (event.action === 'left' || event.action === 'right')) {\n                            event.preventDefault();\n                        }\n                        this.notify('keyDownHandler', { module: 'MaskedDateTime',\n                            e: event\n                        });\n                    }\n                    break;\n                default:\n                    this.isNavigate = false;\n                    break;\n            }\n        }\n    };\n    TimePicker.prototype.onMouseClick = function (event) {\n        var target = event.target;\n        var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n        this.setSelection(li, event);\n        if (li && li.classList.contains(LISTCLASS)) {\n            this.hide();\n        }\n    };\n    TimePicker.prototype.closePopup = function (delay, e) {\n        var _this = this;\n        if (this.isPopupOpen() && this.popupWrapper) {\n            var args = {\n                popup: this.popupObj,\n                event: e || null,\n                cancel: false,\n                name: 'open'\n            };\n            removeClass([document.body], OVERFLOW);\n            this.trigger('close', args, function (args) {\n                if (!args.cancel) {\n                    var animModel = {\n                        name: 'FadeOut',\n                        duration: ANIMATIONDURATION,\n                        delay: delay ? delay : 0\n                    };\n                    _this.popupObj.hide(new Animation(animModel));\n                    removeClass([_this.inputWrapper.container], [ICONANIMATION]);\n                    attributes(_this.inputElement, { 'aria-expanded': 'false' });\n                    _this.inputElement.removeAttribute('aria-owns');\n                    _this.inputElement.removeAttribute('aria-controls');\n                    _this.inputElement.removeAttribute('aria-activedescendant');\n                    EventHandler.remove(document, 'mousedown touchstart', _this.documentClickHandler);\n                }\n                if (Browser.isDevice && _this.modal) {\n                    _this.modal.style.display = 'none';\n                    _this.modal.outerHTML = '';\n                    _this.modal = null;\n                }\n                if (Browser.isDevice) {\n                    if (!isNullOrUndefined(_this.mobileTimePopupWrap)) {\n                        _this.mobileTimePopupWrap.remove();\n                        _this.mobileTimePopupWrap = null;\n                    }\n                }\n                if (Browser.isDevice && _this.allowEdit && !_this.readonly) {\n                    _this.inputElement.removeAttribute('readonly');\n                }\n            });\n        }\n        else {\n            if (Browser.isDevice && this.allowEdit && !this.readonly) {\n                this.inputElement.removeAttribute('readonly');\n            }\n        }\n    };\n    TimePicker.prototype.disposeServerPopup = function () {\n        if (this.popupWrapper) {\n            this.popupWrapper.style.visibility = 'hidden';\n            this.popupWrapper.style.top = '-9999px';\n            this.popupWrapper.style.left = '-9999px';\n            this.popupWrapper.style.width = '0px';\n            this.popupWrapper.style.height = '0px';\n        }\n    };\n    TimePicker.prototype.checkValueChange = function (event, isNavigation) {\n        if (!this.strictMode && !this.validateState(this.valueWithMinutes)) {\n            if (this.checkDateValue(this.valueWithMinutes) === null) {\n                this.initValue = this.valueWithMinutes = null;\n            }\n            this.setProperties({ value: this.compareFormatChange(this.inputElement.value) }, true);\n            this.initValue = this.valueWithMinutes = this.compareFormatChange(this.inputElement.value);\n            this.prevValue = this.inputElement.value;\n            if (+this.prevDate !== +this.value) {\n                this.changeEvent(event);\n            }\n        }\n        else {\n            if (!isNavigation) {\n                if ((this.prevValue !== this.inputElement.value) || isNullOrUndefined(this.checkDateValue(this.value))) {\n                    this.valueProcess(event, this.compareFormatChange(this.inputElement.value));\n                }\n            }\n            else {\n                var value = this.getDateObject(new Date(this.timeCollections[this.activeIndex]));\n                if (+this.prevDate !== +value) {\n                    this.valueProcess(event, value);\n                }\n            }\n        }\n    };\n    TimePicker.prototype.onMouseOver = function (event) {\n        var currentLi = closest(event.target, '.' + LISTCLASS);\n        this.setHover(currentLi, HOVER);\n    };\n    TimePicker.prototype.setHover = function (li, className) {\n        if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n            this.removeHover(className);\n            addClass([li], className);\n            if (className === NAVIGATION) {\n                li.setAttribute('aria-selected', 'true');\n            }\n        }\n    };\n    TimePicker.prototype.setSelection = function (li, event) {\n        if (this.isValidLI(li)) {\n            this.checkValue(li.getAttribute('data-value'));\n            if (this.enableMask) {\n                this.createMask();\n            }\n            this.selectedElement = li;\n            this.activeIndex = Array.prototype.slice.call(this.liCollections).indexOf(li);\n            this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n            addClass([this.selectedElement], SELECTED);\n            this.selectedElement.setAttribute('aria-selected', 'true');\n            this.checkValueChange(event, true);\n        }\n    };\n    TimePicker.prototype.onMouseLeave = function () {\n        this.removeHover(HOVER);\n    };\n    TimePicker.prototype.scrollHandler = function () {\n        if (this.getModuleName() === 'timepicker' && Browser.isDevice) {\n            return;\n        }\n        else {\n            this.hide();\n        }\n    };\n    TimePicker.prototype.setMinMax = function (minVal, maxVal) {\n        if (isNullOrUndefined(this.checkDateValue(minVal))) {\n            this.initMin = this.getDateObject('12:00:00 AM');\n        }\n        if (isNullOrUndefined(this.checkDateValue(maxVal))) {\n            this.initMax = this.getDateObject('11:59:59 PM');\n        }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    TimePicker.prototype.validateMinMax = function (dateVal, minVal, maxVal) {\n        var value = dateVal instanceof Date ? dateVal : this.getDateObject(dateVal);\n        if (!isNullOrUndefined(this.checkDateValue(value))) {\n            dateVal = this.strictOperation(this.initMin, this.initMax, dateVal, value);\n        }\n        else if (+(this.createDateObj(this.getFormattedValue(this.initMin))) >\n            +(this.createDateObj(this.getFormattedValue(this.initMax)))) {\n            this.disableTimeIcon();\n        }\n        if (this.strictMode) {\n            dateVal = this.valueIsDisable(dateVal) ? dateVal : null;\n        }\n        this.checkErrorState(dateVal);\n        return dateVal;\n    };\n    TimePicker.prototype.valueIsDisable = function (value) {\n        if (this.disableItemCollection.length > 0) {\n            if (this.disableItemCollection.length === this.timeCollections.length) {\n                return false;\n            }\n            var time = value instanceof Date ? this.objToString(value) : value;\n            for (var index = 0; index < this.disableItemCollection.length; index++) {\n                if (time === this.disableItemCollection[index]) {\n                    return false;\n                }\n            }\n        }\n        return true;\n    };\n    TimePicker.prototype.validateState = function (val) {\n        if (!this.strictMode) {\n            if (this.valueIsDisable(val)) {\n                var value = typeof val === 'string' ? this.setCurrentDate(this.getDateObject(val)) :\n                    this.setCurrentDate(this.getDateObject(val));\n                var maxValue = this.setCurrentDate(this.getDateObject(this.initMax));\n                var minValue = this.setCurrentDate(this.getDateObject(this.initMin));\n                if (!isNullOrUndefined(this.checkDateValue(value))) {\n                    if ((+(value) > +(maxValue)) || (+(value) < +(minValue))) {\n                        return false;\n                    }\n                }\n                else {\n                    if ((+(maxValue) < +(minValue)) || this.inputElement.value !== '') {\n                        return false;\n                    }\n                }\n            }\n            else {\n                return false;\n            }\n        }\n        return true;\n    };\n    TimePicker.prototype.strictOperation = function (minimum, maximum, dateVal, val) {\n        var maxValue = this.createDateObj(this.getFormattedValue(maximum));\n        var minValue = this.createDateObj(this.getFormattedValue(minimum));\n        var value = this.createDateObj(this.getFormattedValue(val));\n        if (this.strictMode) {\n            if (+minValue > +maxValue) {\n                this.disableTimeIcon();\n                this.initValue = this.getDateObject(maxValue);\n                this.updateInputValue(this.getValue(this.initValue));\n                if (this.enableMask) {\n                    this.createMask();\n                }\n                return this.inputElement.value;\n            }\n            else if (+minValue >= +value) {\n                return this.getDateObject(minValue);\n            }\n            else if (+value >= +maxValue || +minValue === +maxValue) {\n                return this.getDateObject(maxValue);\n            }\n        }\n        else {\n            if (+minValue > +maxValue) {\n                this.disableTimeIcon();\n                if (!isNaN(+this.createDateObj(dateVal))) {\n                    return dateVal;\n                }\n            }\n        }\n        return dateVal;\n    };\n    TimePicker.prototype.bindEvents = function () {\n        EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.popupHandler, this);\n        EventHandler.add(this.inputElement, 'blur', this.inputBlurHandler, this);\n        EventHandler.add(this.inputElement, 'focus', this.inputFocusHandler, this);\n        EventHandler.add(this.inputElement, 'change', this.inputChangeHandler, this);\n        EventHandler.add(this.inputElement, 'input', this.inputEventHandler, this);\n        if (this.enableMask) {\n            EventHandler.add(this.inputElement, 'keydown', this.keydownHandler, this);\n        }\n        if (this.showClearButton && this.inputWrapper.clearButton) {\n            EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n        }\n        if (this.formElement) {\n            EventHandler.add(this.formElement, 'reset', this.formResetHandler, this);\n        }\n        if (!Browser.isDevice) {\n            this.keyConfigure = extend(this.keyConfigure, this.keyConfigs);\n            this.inputEvent = new KeyboardEvents(this.inputWrapper.container, {\n                keyAction: this.inputHandler.bind(this),\n                keyConfigs: this.keyConfigure,\n                eventName: 'keydown'\n            });\n            if (this.showClearButton && this.inputElement) {\n                EventHandler.add(this.inputElement, 'mousedown', this.mouseDownHandler, this);\n            }\n        }\n    };\n    TimePicker.prototype.keydownHandler = function (e) {\n        switch (e.code) {\n            case 'Delete':\n                if (this.enableMask && !this.popupObj && !this.readonly) {\n                    this.notify('keyDownHandler', {\n                        module: 'MaskedDateTime',\n                        e: e\n                    });\n                }\n                break;\n            default:\n                break;\n        }\n    };\n    TimePicker.prototype.formResetHandler = function () {\n        if (!this.enabled) {\n            return;\n        }\n        if (!this.inputElement.disabled) {\n            var timeValue = this.inputElement.getAttribute('value');\n            var val = this.checkDateValue(this.inputEleValue);\n            if (this.element.tagName === 'EJS-TIMEPICKER') {\n                val = null;\n                timeValue = '';\n                this.inputElement.setAttribute('value', '');\n            }\n            this.setProperties({ value: val }, true);\n            this.prevDate = this.value;\n            this.valueWithMinutes = this.value;\n            this.initValue = this.value;\n            if (this.inputElement) {\n                this.updateInputValue(timeValue);\n                if (this.enableMask) {\n                    if (!timeValue) {\n                        this.updateInputValue(this.maskedDateValue);\n                    }\n                    this.createMask();\n                }\n                this.checkErrorState(timeValue);\n                this.prevValue = this.inputElement.value;\n            }\n        }\n    };\n    TimePicker.prototype.inputChangeHandler = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        e.stopPropagation();\n    };\n    TimePicker.prototype.inputEventHandler = function () {\n        if (this.enableMask) {\n            this.notify('inputHandler', {\n                module: 'MaskedDateTime'\n            });\n        }\n    };\n    TimePicker.prototype.unBindEvents = function () {\n        if (this.inputWrapper) {\n            EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.popupHandler);\n        }\n        EventHandler.remove(this.inputElement, 'blur', this.inputBlurHandler);\n        EventHandler.remove(this.inputElement, 'focus', this.inputFocusHandler);\n        EventHandler.remove(this.inputElement, 'change', this.inputChangeHandler);\n        EventHandler.remove(this.inputElement, 'input', this.inputEventHandler);\n        if (this.inputEvent) {\n            this.inputEvent.destroy();\n        }\n        EventHandler.remove(this.inputElement, 'mousedown touchstart', this.mouseDownHandler);\n        if (this.showClearButton && !isNullOrUndefined(this.inputWrapper) && !isNullOrUndefined(this.inputWrapper.clearButton)) {\n            EventHandler.remove(this.inputWrapper.clearButton, 'mousedown touchstart', this.clearHandler);\n        }\n        if (this.formElement) {\n            EventHandler.remove(this.formElement, 'reset', this.formResetHandler);\n        }\n    };\n    TimePicker.prototype.bindClearEvent = function () {\n        if (this.showClearButton && this.inputWrapper.clearButton) {\n            EventHandler.add(this.inputWrapper.clearButton, 'mousedown', this.clearHandler, this);\n        }\n    };\n    TimePicker.prototype.raiseClearedEvent = function (e) {\n        var clearedArgs = {\n            event: e\n        };\n        this.trigger('cleared', clearedArgs);\n    };\n    TimePicker.prototype.clearHandler = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        e.preventDefault();\n        if (!isNullOrUndefined(this.value)) {\n            this.clear(e);\n        }\n        else {\n            this.resetState();\n            this.raiseClearedEvent(e);\n        }\n        if (this.popupWrapper) {\n            this.popupWrapper.scrollTop = 0;\n        }\n        if (this.enableMask) {\n            this.notify('clearHandler', {\n                module: 'MaskedDateTime'\n            });\n        }\n        if (closest(this.element, 'form')) {\n            var element = this.element;\n            var keyupEvent = document.createEvent('KeyboardEvent');\n            keyupEvent.initEvent('keyup', false, true);\n            element.dispatchEvent(keyupEvent);\n        }\n    };\n    TimePicker.prototype.clear = function (event) {\n        this.setProperties({ value: null }, true);\n        this.initValue = null;\n        this.resetState();\n        this.raiseClearedEvent(event);\n        this.changeEvent(event);\n    };\n    TimePicker.prototype.setZIndex = function () {\n        if (this.popupObj) {\n            this.popupObj.zIndex = this.zIndex;\n            this.popupObj.dataBind();\n        }\n    };\n    TimePicker.prototype.checkAttributes = function (isDynamic) {\n        var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n            ['step', 'disabled', 'readonly', 'style', 'name', 'value', 'min', 'max', 'placeholder'];\n        var value;\n        for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n            var prop = attributes_1[_i];\n            if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n                switch (prop) {\n                    case 'disabled':\n                        if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['enabled'] === undefined)) || isDynamic) {\n                            var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n                                this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? false : true;\n                            this.setProperties({ enabled: enabled }, !isDynamic);\n                        }\n                        break;\n                    case 'style':\n                        this.inputStyle = this.inputElement.getAttribute(prop);\n                        break;\n                    case 'readonly':\n                        if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['readonly'] === undefined)) || isDynamic) {\n                            var readonly = this.inputElement.getAttribute(prop) === 'readonly' ||\n                                this.inputElement.getAttribute(prop) === '' || this.inputElement.getAttribute(prop) === 'true' ? true : false;\n                            this.setProperties({ readonly: readonly }, !isDynamic);\n                        }\n                        break;\n                    case 'name':\n                        this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n                        break;\n                    case 'step':\n                        this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n                        break;\n                    case 'placeholder':\n                        if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['placeholder'] === undefined)) || isDynamic) {\n                            this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n                        }\n                        break;\n                    case 'min':\n                        if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['min'] === undefined)) || isDynamic) {\n                            value = new Date(this.inputElement.getAttribute(prop));\n                            if (!isNullOrUndefined(this.checkDateValue(value))) {\n                                this.setProperties({ min: value }, !isDynamic);\n                            }\n                        }\n                        break;\n                    case 'max':\n                        if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['max'] === undefined)) || isDynamic) {\n                            value = new Date(this.inputElement.getAttribute(prop));\n                            if (!isNullOrUndefined(this.checkDateValue(value))) {\n                                this.setProperties({ max: value }, !isDynamic);\n                            }\n                        }\n                        break;\n                    case 'value':\n                        if ((isNullOrUndefined(this.timeOptions) || (this.timeOptions['value'] === undefined)) || isDynamic) {\n                            value = new Date(this.inputElement.getAttribute(prop));\n                            if (!isNullOrUndefined(this.checkDateValue(value))) {\n                                this.initValue = value;\n                                this.updateInput(false, this.initValue);\n                                this.setProperties({ value: value }, !isDynamic);\n                            }\n                        }\n                        break;\n                }\n            }\n        }\n    };\n    TimePicker.prototype.setCurrentDate = function (value) {\n        if (isNullOrUndefined(this.checkDateValue(value))) {\n            return null;\n        }\n        return new Date(YEAR, MONTH, DAY, value.getHours(), value.getMinutes(), value.getSeconds());\n    };\n    TimePicker.prototype.getTextFormat = function () {\n        var time = 0;\n        if (this.cldrTimeFormat().split(' ')[0] === 'a' || this.cldrTimeFormat().indexOf('a') === 0) {\n            time = 1;\n        }\n        else if (this.cldrTimeFormat().indexOf('a') < 0) {\n            var strArray = this.cldrTimeFormat().split(' ');\n            for (var i = 0; i < strArray.length; i++) {\n                if (strArray[i].toLowerCase().indexOf('h') >= 0) {\n                    time = i;\n                    break;\n                }\n            }\n        }\n        return time;\n    };\n    TimePicker.prototype.updateValue = function (value, event) {\n        var val;\n        if (this.isNullOrEmpty(value)) {\n            this.resetState();\n        }\n        else {\n            val = this.checkValue(value);\n            if (this.strictMode) {\n                // this case set previous value to the text box when set invalid date\n                var inputVal = (val === null && value.trim().length > 0) ?\n                    this.previousState(this.prevDate) : this.inputElement.value;\n                this.updateInputValue(inputVal);\n                if (this.enableMask) {\n                    if (!inputVal) {\n                        this.updateInputValue(this.maskedDateValue);\n                    }\n                    if (isNullOrUndefined(val) && value !== this.maskedDateValue) {\n                        this.createMask();\n                    }\n                    if (isNullOrUndefined(val) && value === this.maskedDateValue) {\n                        this.updateInputValue(this.maskedDateValue);\n                    }\n                }\n            }\n        }\n        this.checkValueChange(event, typeof value === 'string' ? false : true);\n    };\n    TimePicker.prototype.previousState = function (date) {\n        var value = this.getDateObject(date);\n        for (var i = 0; i < this.timeCollections.length; i++) {\n            if (+value === this.timeCollections[i]) {\n                this.activeIndex = i;\n                this.selectedElement = this.liCollections[i];\n                this.valueWithMinutes = new Date(this.timeCollections[i]);\n                break;\n            }\n        }\n        return this.prevValue;\n    };\n    TimePicker.prototype.resetState = function () {\n        this.removeSelection();\n        Input.setValue('', this.inputElement, this.floatLabelType, false);\n        this.valueWithMinutes = this.activeIndex = null;\n        if (!this.strictMode) {\n            this.checkErrorState(null);\n        }\n    };\n    TimePicker.prototype.objToString = function (val) {\n        if (isNullOrUndefined(this.checkDateValue(val))) {\n            return null;\n        }\n        else {\n            return this.globalize.formatDate(val, { format: this.cldrTimeFormat(), type: 'time' });\n        }\n    };\n    TimePicker.prototype.checkValue = function (value) {\n        if (!this.isNullOrEmpty(value)) {\n            var date = value instanceof Date ? value : this.getDateObject(value);\n            return this.validateValue(date, value);\n        }\n        this.resetState();\n        return this.valueWithMinutes = null;\n    };\n    TimePicker.prototype.validateValue = function (date, value) {\n        var time;\n        var val = this.validateMinMax(value, this.min, this.max);\n        var newval = this.getDateObject(val);\n        if (this.getFormattedValue(newval) !== this.getFormattedValue(this.value)) {\n            this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n            time = this.objToString(this.valueWithMinutes);\n        }\n        else {\n            if (this.strictMode) {\n                //for strict mode case, when value not present within a range. Reset the nearest range value.\n                date = newval;\n            }\n            this.valueWithMinutes = this.checkDateValue(date);\n            time = this.objToString(this.valueWithMinutes);\n        }\n        if (!this.strictMode && isNullOrUndefined(time)) {\n            var value_1 = val.trim().length > 0 ? val : '';\n            this.updateInputValue(value_1);\n            if (this.enableMask) {\n                if (!value_1) {\n                    this.updateInputValue(this.maskedDateValue);\n                }\n            }\n        }\n        else {\n            this.updateInputValue(time);\n            if (this.enableMask) {\n                if (time === '') {\n                    this.updateInputValue(this.maskedDateValue);\n                }\n                if (isNullOrUndefined(time) && value !== this.maskedDateValue) {\n                    this.createMask();\n                }\n                if (isNullOrUndefined(time) && value === this.maskedDateValue) {\n                    this.updateInputValue(this.maskedDateValue);\n                }\n            }\n        }\n        return time;\n    };\n    TimePicker.prototype.createMask = function () {\n        this.notify('createMask', {\n            module: 'MaskedDateTime'\n        });\n    };\n    TimePicker.prototype.findNextElement = function (event) {\n        var textVal = (this.inputElement).value;\n        var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n            this.getDateObject(this.valueWithMinutes);\n        var timeVal = null;\n        var count = this.liCollections.length;\n        var collections = this.timeCollections;\n        if (!isNullOrUndefined(this.checkDateValue(value)) || !isNullOrUndefined(this.activeIndex)) {\n            if (event.action === 'home') {\n                var index = this.validLiElement(0);\n                timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n                this.activeIndex = index;\n            }\n            else if (event.action === 'end') {\n                var index = this.validLiElement(collections.length - 1, true);\n                timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n                this.activeIndex = index;\n            }\n            else {\n                if (event.action === 'down') {\n                    for (var i = 0; i < count; i++) {\n                        if (+value < this.timeCollections[i]) {\n                            var index = this.validLiElement(i);\n                            timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n                            this.activeIndex = index;\n                            break;\n                        }\n                        else if (i === count - 1) {\n                            var index = this.validLiElement(0);\n                            timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n                            this.activeIndex = index;\n                            break;\n                        }\n                    }\n                }\n                else {\n                    for (var i = count - 1; i >= 0; i--) {\n                        if (+value > this.timeCollections[i]) {\n                            var index = this.validLiElement(i, true);\n                            timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n                            this.activeIndex = index;\n                            break;\n                        }\n                        else if (i === 0) {\n                            var index = this.validLiElement(count - 1);\n                            timeVal = +(this.createDateObj(new Date(this.timeCollections[index])));\n                            this.activeIndex = index;\n                            break;\n                        }\n                    }\n                }\n            }\n            this.selectedElement = this.liCollections[this.activeIndex];\n            this.elementValue(isNullOrUndefined(timeVal) ? null : new Date(timeVal));\n        }\n        else {\n            this.selectNextItem(event);\n        }\n    };\n    TimePicker.prototype.selectNextItem = function (event) {\n        var index = this.validLiElement(0, event.action === 'down' ? false : true);\n        this.activeIndex = index;\n        this.selectedElement = this.liCollections[index];\n        this.elementValue(new Date(this.timeCollections[index]));\n    };\n    TimePicker.prototype.elementValue = function (value) {\n        if (!isNullOrUndefined(this.checkDateValue(value))) {\n            this.checkValue(value);\n        }\n    };\n    TimePicker.prototype.validLiElement = function (index, backward) {\n        var elementIndex = null;\n        var items = isNullOrUndefined(this.popupWrapper) ? this.liCollections :\n            this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n        var isCheck = true;\n        if (items.length) {\n            if (backward) {\n                for (var i = index; i >= 0; i--) {\n                    if (!items[i].classList.contains(DISABLED)) {\n                        elementIndex = i;\n                        break;\n                    }\n                    else if (i === 0) {\n                        if (isCheck) {\n                            index = i = items.length;\n                            isCheck = false;\n                        }\n                    }\n                }\n            }\n            else {\n                for (var i = index; i <= items.length - 1; i++) {\n                    if (!items[i].classList.contains(DISABLED)) {\n                        elementIndex = i;\n                        break;\n                    }\n                    else if (i === items.length - 1) {\n                        if (isCheck) {\n                            index = i = -1;\n                            isCheck = false;\n                        }\n                    }\n                }\n            }\n        }\n        return elementIndex;\n    };\n    TimePicker.prototype.keyHandler = function (event) {\n        if (isNullOrUndefined(this.step) || this.step <= 0 || !isNullOrUndefined(this.inputWrapper)\n            && this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n            return;\n        }\n        var count = this.timeCollections.length;\n        if (isNullOrUndefined(this.getActiveElement()) || this.getActiveElement().length === 0) {\n            if (this.liCollections.length > 0) {\n                if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n                    var index = this.validLiElement(0, event.action === 'down' ? false : true);\n                    this.activeIndex = index;\n                    this.selectedElement = this.liCollections[index];\n                    this.elementValue(new Date(this.timeCollections[index]));\n                }\n                else {\n                    this.findNextElement(event);\n                }\n            }\n            else {\n                this.findNextElement(event);\n            }\n        }\n        else {\n            var nextItem = void 0;\n            if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n                var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n                this.activeIndex = index = this.activeIndex === (count) ? 0 : this.activeIndex;\n                this.activeIndex = index = this.activeIndex < 0 ? (count - 1) : this.activeIndex;\n                this.activeIndex = index = this.validLiElement(this.activeIndex, (event.keyCode === 40 || event.keyCode === 39) ?\n                    false : true);\n                nextItem = isNullOrUndefined(this.timeCollections[index]) ?\n                    this.timeCollections[0] : this.timeCollections[index];\n            }\n            else if (event.action === 'home') {\n                var index = this.validLiElement(0);\n                this.activeIndex = index;\n                nextItem = this.timeCollections[index];\n            }\n            else if (event.action === 'end') {\n                var index = this.validLiElement(count - 1, true);\n                this.activeIndex = index;\n                nextItem = this.timeCollections[index];\n            }\n            this.selectedElement = this.liCollections[this.activeIndex];\n            this.elementValue(new Date(nextItem));\n        }\n        this.isNavigate = true;\n        this.setHover(this.selectedElement, NAVIGATION);\n        this.setActiveDescendant();\n        if (this.enableMask) {\n            this.selectInputText();\n        }\n        if (this.isPopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n            this.setScrollPosition();\n        }\n    };\n    TimePicker.prototype.getCultureTimeObject = function (ld, c) {\n        return getValue('main.' + c + '.dates.calendars.gregorian.timeFormats.short', ld);\n    };\n    TimePicker.prototype.getCultureDateObject = function (ld, c) {\n        return getValue('main.' + c + '.dates.calendars.gregorian.dateFormats.short', ld);\n    };\n    TimePicker.prototype.wireListEvents = function () {\n        EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n        if (!Browser.isDevice) {\n            EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n            EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n        }\n    };\n    TimePicker.prototype.unWireListEvents = function () {\n        if (this.listWrapper) {\n            EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n            if (!Browser.isDevice) {\n                EventHandler.remove(this.listWrapper, 'mouseover', this.onMouseOver);\n                EventHandler.remove(this.listWrapper, 'mouseout', this.onMouseLeave);\n            }\n        }\n    };\n    TimePicker.prototype.valueProcess = function (event, value) {\n        var result = (isNullOrUndefined(this.checkDateValue(value))) ? null : value;\n        if (+this.prevDate !== +result) {\n            this.initValue = result;\n            this.changeEvent(event);\n        }\n    };\n    TimePicker.prototype.changeEvent = function (e) {\n        this.addSelection();\n        this.updateInput(true, this.initValue);\n        var eventArgs = {\n            event: (e || null),\n            value: this.value,\n            text: (this.inputElement).value,\n            isInteracted: !isNullOrUndefined(e),\n            element: this.element\n        };\n        eventArgs.value = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n        this.prevDate = this.valueWithMinutes || this.getDateObject(this.inputElement.value);\n        if (this.isAngular && this.preventChange) {\n            this.preventChange = false;\n        }\n        else {\n            this.trigger('change', eventArgs);\n        }\n        this.invalidValueString = null;\n        this.checkErrorState(this.value);\n    };\n    TimePicker.prototype.updateInput = function (isUpdate, date) {\n        if (isUpdate) {\n            this.prevValue = this.getValue(date);\n        }\n        this.prevDate = this.valueWithMinutes = date;\n        if ((typeof date !== 'number') || (this.value && +new Date(+this.value).setMilliseconds(0)) !== +date) {\n            this.setProperties({ value: date }, true);\n            if (this.enableMask && this.value) {\n                this.createMask();\n            }\n        }\n        if (!this.strictMode && isNullOrUndefined(this.value) && this.invalidValueString) {\n            this.checkErrorState(this.invalidValueString);\n            this.updateInputValue(this.invalidValueString);\n        }\n        this.clearIconState();\n    };\n    TimePicker.prototype.setActiveDescendant = function () {\n        if (!isNullOrUndefined(this.selectedElement) && this.value) {\n            attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n        }\n        else {\n            this.inputElement.removeAttribute('aria-activedescendant');\n        }\n    };\n    TimePicker.prototype.removeSelection = function () {\n        this.removeHover(HOVER);\n        if (!isNullOrUndefined(this.popupWrapper)) {\n            var items = this.popupWrapper.querySelectorAll('.' + SELECTED);\n            if (items.length) {\n                removeClass(items, SELECTED);\n                items[0].removeAttribute('aria-selected');\n            }\n        }\n    };\n    TimePicker.prototype.removeHover = function (className) {\n        var hoveredItem = this.getHoverItem(className);\n        if (hoveredItem && hoveredItem.length) {\n            removeClass(hoveredItem, className);\n            if (className === NAVIGATION) {\n                hoveredItem[0].removeAttribute('aria-selected');\n            }\n        }\n    };\n    TimePicker.prototype.getHoverItem = function (className) {\n        var hoveredItem;\n        if (!isNullOrUndefined(this.popupWrapper)) {\n            hoveredItem = this.popupWrapper.querySelectorAll('.' + className);\n        }\n        return hoveredItem;\n    };\n    TimePicker.prototype.setActiveClass = function () {\n        if (!isNullOrUndefined(this.popupWrapper)) {\n            var items = this.popupWrapper.querySelectorAll('.' + LISTCLASS);\n            if (items.length) {\n                for (var i = 0; i < items.length; i++) {\n                    if ((this.timeCollections[i] === +this.getDateObject(this.valueWithMinutes))) {\n                        items[i].setAttribute('aria-selected', 'true');\n                        this.selectedElement = items[i];\n                        this.activeIndex = i;\n                        break;\n                    }\n                }\n            }\n        }\n    };\n    TimePicker.prototype.addSelection = function () {\n        this.selectedElement = null;\n        this.removeSelection();\n        this.setActiveClass();\n        if (!isNullOrUndefined(this.selectedElement)) {\n            addClass([this.selectedElement], SELECTED);\n            this.selectedElement.setAttribute('aria-selected', 'true');\n        }\n    };\n    TimePicker.prototype.isValidLI = function (li) {\n        return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n    };\n    TimePicker.prototype.createDateObj = function (val) {\n        var formatStr = null;\n        var today = this.globalize.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n        var value = null;\n        if (typeof val === 'string') {\n            if (val.toUpperCase().indexOf('AM') > -1 || val.toUpperCase().indexOf('PM') > -1) {\n                today = this.defaultCulture.formatDate(new Date(), { format: formatStr, skeleton: 'short', type: 'date' });\n                value = isNaN(+new Date(today + ' ' + val)) ? null : new Date(new Date(today + ' ' + val).setMilliseconds(0));\n                if (isNullOrUndefined(value)) {\n                    value = this.timeParse(today, val);\n                }\n            }\n            else {\n                value = this.timeParse(today, val);\n            }\n        }\n        else if (val instanceof Date) {\n            value = val;\n        }\n        return value;\n    };\n    TimePicker.prototype.timeParse = function (today, val) {\n        var value;\n        value = this.globalize.parseDate(today + ' ' + val, {\n            format: this.cldrDateFormat() + ' ' + this.cldrTimeFormat(), type: 'datetime'\n        });\n        value = isNullOrUndefined(value) ? this.globalize.parseDate(today + ' ' + val, {\n            format: this.cldrDateFormat() + ' ' + this.dateToNumeric(), type: 'datetime'\n        }) : value;\n        value = isNullOrUndefined(value) ? value : new Date(value.setMilliseconds(0));\n        return value;\n    };\n    TimePicker.prototype.createListItems = function () {\n        var _this = this;\n        this.listWrapper = this.createElement('div', { className: CONTENT, attrs: { 'tabindex': '-1' } });\n        var start;\n        var interval = this.step * 60000;\n        var listItems = [];\n        this.timeCollections = [];\n        this.disableItemCollection = [];\n        start = +(this.getDateObject(this.initMin).setMilliseconds(0));\n        var end = +(this.getDateObject(this.initMax).setMilliseconds(0));\n        while (end >= start) {\n            this.timeCollections.push(start);\n            listItems.push(this.globalize.formatDate(new Date(start), { format: this.cldrTimeFormat(), type: 'time' }));\n            start += interval;\n        }\n        var listBaseOptions = {\n            itemCreated: function (args) {\n                var eventArgs = {\n                    element: args.item,\n                    text: args.text, value: _this.getDateObject(args.text), isDisabled: false\n                };\n                _this.trigger('itemRender', eventArgs, function (eventArgs) {\n                    if (eventArgs.isDisabled) {\n                        eventArgs.element.classList.add(DISABLED);\n                    }\n                    if (eventArgs.element.classList.contains(DISABLED)) {\n                        _this.disableItemCollection.push(eventArgs.element.getAttribute('data-value'));\n                    }\n                });\n            }\n        };\n        this.listTag = ListBase.createList(this.createElement, listItems, listBaseOptions, true);\n        attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options', 'tabindex': '0' });\n        append([this.listTag], this.listWrapper);\n    };\n    TimePicker.prototype.documentClickHandler = function (event) {\n        var target = event.target;\n        if ((!isNullOrUndefined(this.popupObj) && !isNullOrUndefined(this.inputWrapper) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n            (this.popupObj.element && this.popupObj.element.contains(target)))) && event.type !== 'touchstart') {\n            event.preventDefault();\n        }\n        if (!(closest(target, '[id=\"' + this.popupObj.element.id + '\"]')) && target !== this.inputElement\n            && target !== (this.inputWrapper && this.inputWrapper.buttons[0]) &&\n            target !== (this.inputWrapper && this.inputWrapper.clearButton) &&\n            target !== (this.inputWrapper && this.inputWrapper.container)\n            && (!target.classList.contains('e-dlg-overlay'))) {\n            if (this.isPopupOpen()) {\n                this.hide();\n                this.focusOut();\n            }\n        }\n        else if (target !== this.inputElement) {\n            if (!Browser.isDevice) {\n                this.isPreventBlur = (Browser.isIE || Browser.info.name === 'edge') && (document.activeElement === this.inputElement)\n                    && (target === this.popupWrapper);\n            }\n        }\n    };\n    TimePicker.prototype.setEnableRtl = function () {\n        Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n        if (this.popupObj) {\n            this.popupObj.enableRtl = this.enableRtl;\n            this.popupObj.dataBind();\n        }\n    };\n    TimePicker.prototype.setEnable = function () {\n        Input.setEnabled(this.enabled, this.inputElement, this.floatLabelType);\n        if (this.enabled) {\n            removeClass([this.inputWrapper.container], DISABLED);\n            attributes(this.inputElement, { 'aria-disabled': 'false' });\n            this.inputElement.setAttribute('tabindex', this.tabIndex);\n        }\n        else {\n            this.hide();\n            addClass([this.inputWrapper.container], DISABLED);\n            attributes(this.inputElement, { 'aria-disabled': 'true' });\n            this.inputElement.tabIndex = -1;\n        }\n    };\n    TimePicker.prototype.getProperty = function (date, val) {\n        if (val === 'min') {\n            this.initMin = this.checkDateValue(new Date(this.checkInValue(date.min)));\n            this.setProperties({ min: this.initMin }, true);\n        }\n        else {\n            this.initMax = this.checkDateValue(new Date(this.checkInValue(date.max)));\n            this.setProperties({ max: this.initMax }, true);\n        }\n        if (this.inputElement.value === '') {\n            this.validateMinMax(this.value, this.min, this.max);\n        }\n        else {\n            this.checkValue(this.inputElement.value);\n        }\n        this.checkValueChange(null, false);\n    };\n    TimePicker.prototype.inputBlurHandler = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        // IE popup closing issue when click over the scrollbar\n        if (this.isPreventBlur && this.isPopupOpen()) {\n            this.inputElement.focus();\n            return;\n        }\n        this.closePopup(0, e);\n        if (this.enableMask && this.maskedDateValue && this.placeholder && this.floatLabelType !== 'Always') {\n            if (this.inputElement.value === this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n                this.updateInputValue('');\n            }\n        }\n        removeClass([this.inputWrapper.container], [FOCUS]);\n        if (this.getText() !== this.inputElement.value) {\n            this.updateValue((this.inputElement).value, e);\n        }\n        else if (this.inputElement.value.trim().length === 0) {\n            this.resetState();\n        }\n        this.cursorDetails = null;\n        this.isNavigate = false;\n        if (this.inputElement.value === '') {\n            this.invalidValueString = null;\n        }\n        var blurArguments = {\n            model: this\n        };\n        this.trigger('blur', blurArguments);\n    };\n    /**\n     * Focuses out the TimePicker textbox element.\n     *\n     * @returns {void}\n     */\n    TimePicker.prototype.focusOut = function () {\n        if (document.activeElement === this.inputElement) {\n            this.inputElement.blur();\n            removeClass([this.inputWrapper.container], [FOCUS]);\n            var blurArguments = {\n                model: this\n            };\n            this.trigger('blur', blurArguments);\n        }\n    };\n    TimePicker.prototype.isPopupOpen = function () {\n        if (this.popupWrapper && this.popupWrapper.classList.contains('' + ROOT)) {\n            return true;\n        }\n        return false;\n    };\n    TimePicker.prototype.inputFocusHandler = function () {\n        if (!this.enabled) {\n            return;\n        }\n        var focusArguments = {\n            model: this\n        };\n        if (!this.readonly && !Browser.isDevice && !this.enableMask) {\n            this.selectInputText();\n        }\n        if (this.enableMask && !this.inputElement.value && this.placeholder) {\n            if (this.maskedDateValue && !this.value && (this.floatLabelType === 'Auto' || this.floatLabelType === 'Never' || this.placeholder)) {\n                this.updateInputValue(this.maskedDateValue);\n                this.inputElement.selectionStart = 0;\n                this.inputElement.selectionEnd = this.inputElement.value.length;\n            }\n        }\n        this.trigger('focus', focusArguments);\n        this.clearIconState();\n        if (this.openOnFocus) {\n            this.show();\n        }\n    };\n    /**\n     * Focused the TimePicker textbox element.\n     *\n     * @returns {void}\n     */\n    TimePicker.prototype.focusIn = function () {\n        if (document.activeElement !== this.inputElement && this.enabled) {\n            this.inputElement.focus();\n        }\n    };\n    /**\n     * Hides the TimePicker popup.\n     *\n     * @returns {void}\n\n     */\n    TimePicker.prototype.hide = function () {\n        this.closePopup(100, null);\n        this.clearIconState();\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-param */\n    /**\n     * Opens the popup to show the list items.\n     *\n     * @returns {void}\n\n     */\n    TimePicker.prototype.show = function (event) {\n        var _this = this;\n        if ((this.enabled && this.readonly) || !this.enabled || this.popupWrapper) {\n            return;\n        }\n        else {\n            this.popupCreation();\n            if (Browser.isDevice && this.listWrapper) {\n                this.modal = this.createElement('div');\n                this.modal.className = '' + ROOT + ' e-time-modal';\n                document.body.className += ' ' + OVERFLOW;\n                document.body.appendChild(this.modal);\n            }\n            if (Browser.isDevice) {\n                this.mobileTimePopupWrap = this.createElement('div', { className: 'e-timepicker-mob-popup-wrap' });\n                document.body.appendChild(this.mobileTimePopupWrap);\n            }\n            this.openPopupEventArgs = {\n                popup: this.popupObj || null,\n                cancel: false,\n                event: event || null,\n                name: 'open',\n                appendTo: Browser.isDevice ? this.mobileTimePopupWrap : document.body\n            };\n            var eventArgs = this.openPopupEventArgs;\n            this.trigger('open', eventArgs, function (eventArgs) {\n                _this.openPopupEventArgs = eventArgs;\n                if (!_this.openPopupEventArgs.cancel && !_this.inputWrapper.buttons[0].classList.contains(DISABLED)) {\n                    _this.openPopupEventArgs.appendTo.appendChild(_this.popupWrapper);\n                    _this.popupAlignment(_this.openPopupEventArgs);\n                    _this.setScrollPosition();\n                    if (!Browser.isDevice) {\n                        _this.inputElement.focus();\n                    }\n                    var openAnimation = {\n                        name: 'FadeIn',\n                        duration: ANIMATIONDURATION\n                    };\n                    _this.popupObj.refreshPosition(_this.anchor);\n                    if (_this.zIndex === 1000) {\n                        _this.popupObj.show(new Animation(openAnimation), _this.element);\n                    }\n                    else {\n                        _this.popupObj.show(new Animation(openAnimation), null);\n                    }\n                    _this.setActiveDescendant();\n                    attributes(_this.inputElement, { 'aria-expanded': 'true' });\n                    attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n                    attributes(_this.inputElement, { 'aria-controls': _this.inputElement.id });\n                    addClass([_this.inputWrapper.container], FOCUS);\n                    EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n                    _this.setOverlayIndex(_this.mobileTimePopupWrap, _this.popupObj.element, _this.modal, Browser.isDevice);\n                }\n                else {\n                    _this.popupObj.destroy();\n                    _this.popupWrapper = _this.listTag = undefined;\n                    _this.liCollections = _this.timeCollections = _this.disableItemCollection = [];\n                    _this.popupObj = null;\n                }\n            });\n            if (Browser.isDevice) {\n                var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n                dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n                this.mobileTimePopupWrap.appendChild(dlgOverlay);\n            }\n        }\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-param */\n    TimePicker.prototype.setOverlayIndex = function (popupWrapper, timePopupElement, modal, isDevice) {\n        if (isDevice && !isNullOrUndefined(timePopupElement) && !isNullOrUndefined(modal) && !isNullOrUndefined(popupWrapper)) {\n            var index = parseInt(timePopupElement.style.zIndex, 10) ? parseInt(timePopupElement.style.zIndex, 10) : 1000;\n            modal.style.zIndex = (index - 1).toString();\n            popupWrapper.style.zIndex = index.toString();\n        }\n    };\n    TimePicker.prototype.formatValues = function (type) {\n        var value;\n        if (typeof type === 'number') {\n            value = formatUnit(type);\n        }\n        else if (typeof type === 'string') {\n            value = (type.match(/px|%|em/)) ? type : isNaN(parseInt(type, 10)) ? type : formatUnit(type);\n        }\n        return value;\n    };\n    TimePicker.prototype.popupAlignment = function (args) {\n        args.popup.position.X = this.formatValues(args.popup.position.X);\n        args.popup.position.Y = this.formatValues(args.popup.position.Y);\n        if (!isNaN(parseFloat(args.popup.position.X)) || !isNaN(parseFloat(args.popup.position.Y))) {\n            this.popupObj.relateTo = this.anchor = document.body;\n            this.popupObj.targetType = 'container';\n        }\n        if (!isNaN(parseFloat(args.popup.position.X))) {\n            this.popupObj.offsetX = parseFloat(args.popup.position.X);\n        }\n        if (!isNaN(parseFloat(args.popup.position.Y))) {\n            this.popupObj.offsetY = parseFloat(args.popup.position.Y);\n        }\n        if (!Browser.isDevice) {\n            switch (args.popup.position.X) {\n                case 'left':\n                    break;\n                case 'right':\n                    args.popup.offsetX = this.containerStyle.width;\n                    break;\n                case 'center':\n                    args.popup.offsetX = -(this.containerStyle.width / 2);\n                    break;\n            }\n            switch (args.popup.position.Y) {\n                case 'top':\n                    break;\n                case 'bottom':\n                    break;\n                case 'center':\n                    args.popup.offsetY = -(this.containerStyle.height / 2);\n                    break;\n            }\n            if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n                this.popupObj.relateTo = this.inputWrapper.container;\n                this.anchor = this.inputElement;\n                this.popupObj.targetType = 'relative';\n            }\n        }\n        else {\n            if (args.popup.position.X === 'center' && args.popup.position.Y === 'center') {\n                this.popupObj.relateTo = this.anchor = document.body;\n                this.popupObj.offsetY = 0;\n                this.popupObj.targetType = 'container';\n                this.popupObj.collision = { X: 'fit', Y: 'fit' };\n            }\n        }\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Gets the properties to be maintained upon browser refresh.\n     *\n     * @returns {string}\n     */\n    TimePicker.prototype.getPersistData = function () {\n        var keyEntity = ['value'];\n        return this.addOnPersist(keyEntity);\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * To get component name\n     *\n     * @returns {string} Returns the component name.\n     * @private\n     */\n    TimePicker.prototype.getModuleName = function () {\n        return 'timepicker';\n    };\n    /**\n     * Called internally if any of the property value changed.\n     *\n     * @param {TimePickerModel} newProp - Returns the dynamic property value of the component.\n     * @param {TimePickerModel} oldProp - Returns the previous property value of the component.\n     * @returns {void}\n     * @private\n     */\n    TimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'placeholder':\n                    Input.setPlaceholder(newProp.placeholder, this.inputElement);\n                    break;\n                case 'readonly':\n                    Input.setReadonly(this.readonly, this.inputElement, this.floatLabelType);\n                    if (this.readonly) {\n                        this.hide();\n                    }\n                    this.setTimeAllowEdit();\n                    break;\n                case 'enabled':\n                    this.setProperties({ enabled: newProp.enabled }, true);\n                    this.setEnable();\n                    break;\n                case 'allowEdit':\n                    this.setTimeAllowEdit();\n                    break;\n                case 'enableRtl':\n                    this.setProperties({ enableRtl: newProp.enableRtl }, true);\n                    this.setEnableRtl();\n                    break;\n                case 'cssClass':\n                    this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n                    break;\n                case 'zIndex':\n                    this.setProperties({ zIndex: newProp.zIndex }, true);\n                    this.setZIndex();\n                    break;\n                case 'htmlAttributes':\n                    this.updateHtmlAttributeToElement();\n                    this.updateHtmlAttributeToWrapper();\n                    this.checkAttributes(true);\n                    break;\n                case 'min':\n                case 'max':\n                    this.getProperty(newProp, prop);\n                    break;\n                case 'showClearButton':\n                    Input.setClearButton(this.showClearButton, this.inputElement, this.inputWrapper);\n                    this.bindClearEvent();\n                    break;\n                case 'locale':\n                    this.setProperties({ locale: newProp.locale }, true);\n                    this.globalize = new Internationalization(this.locale);\n                    this.l10n.setLocale(this.locale);\n                    if (this.timeOptions && this.timeOptions.placeholder == null) {\n                        this.updatePlaceHolder();\n                    }\n                    this.setValue(this.value);\n                    if (this.enableMask) {\n                        this.notify('createMask', {\n                            module: 'MaskedDateTime'\n                        });\n                    }\n                    break;\n                case 'width':\n                    setStyleAttribute(this.inputWrapper.container, { 'width': this.setWidth(newProp.width) });\n                    this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n                    Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n                    if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n                        this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n                    }\n                    break;\n                case 'format':\n                    this.setProperties({ format: newProp.format }, true);\n                    this.checkTimeFormat();\n                    this.setValue(this.value);\n                    if (this.enableMask) {\n                        this.createMask();\n                        if (!this.value) {\n                            this.updateInputValue(this.maskedDateValue);\n                        }\n                    }\n                    break;\n                case 'value':\n                    this.invalidValueString = null;\n                    this.checkInvalidValue(newProp.value);\n                    newProp.value = this.value;\n                    if (!this.invalidValueString) {\n                        if (typeof newProp.value === 'string') {\n                            this.setProperties({ value: this.checkDateValue(new Date(newProp.value)) }, true);\n                            newProp.value = this.value;\n                        }\n                        else {\n                            if ((newProp.value && +new Date(+newProp.value).setMilliseconds(0)) !== +this.value) {\n                                newProp.value = this.checkDateValue(new Date('' + newProp.value));\n                            }\n                        }\n                        this.initValue = newProp.value;\n                        newProp.value = this.compareFormatChange(this.checkValue(newProp.value));\n                    }\n                    else {\n                        this.updateInputValue(this.invalidValueString);\n                        this.checkErrorState(this.invalidValueString);\n                    }\n                    if (this.enableMask && isNullOrUndefined(newProp.value)) {\n                        this.updateInputValue(this.maskedDateValue);\n                        this.checkErrorState(this.maskedDateValue);\n                    }\n                    this.checkValueChange(null, false);\n                    if (this.isPopupOpen()) {\n                        this.setScrollPosition();\n                    }\n                    if (this.isAngular && this.preventChange) {\n                        this.preventChange = false;\n                    }\n                    if (this.enableMask) {\n                        this.notify('createMask', {\n                            module: 'MaskedDateTime'\n                        });\n                    }\n                    break;\n                case 'floatLabelType':\n                    this.floatLabelType = newProp.floatLabelType;\n                    Input.removeFloating(this.inputWrapper);\n                    Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n                    if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n                        this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-icon');\n                    }\n                    break;\n                case 'strictMode':\n                    this.invalidValueString = null;\n                    if (newProp.strictMode) {\n                        this.checkErrorState(null);\n                    }\n                    this.setProperties({ strictMode: newProp.strictMode }, true);\n                    this.checkValue((this.inputElement).value);\n                    this.checkValueChange(null, false);\n                    break;\n                case 'scrollTo':\n                    if (this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo)))) {\n                        if (this.popupWrapper) {\n                            this.setScrollTo();\n                        }\n                        this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkInValue(newProp.scrollTo))) }, true);\n                    }\n                    else {\n                        this.setProperties({ scrollTo: null }, true);\n                    }\n                    break;\n                case 'enableMask':\n                    if (this.enableMask) {\n                        this.notify('createMask', {\n                            module: 'MaskedDateTime'\n                        });\n                        this.updateInputValue(this.maskedDateValue);\n                    }\n                    else {\n                        if (this.inputElement.value === this.maskedDateValue) {\n                            this.updateInputValue('');\n                        }\n                    }\n                    break;\n            }\n        }\n    };\n    TimePicker.prototype.checkInValue = function (inValue) {\n        if (inValue instanceof Date) {\n            return (inValue.toUTCString());\n        }\n        else {\n            return ('' + inValue);\n        }\n    };\n    __decorate([\n        Property(null)\n    ], TimePicker.prototype, \"width\", void 0);\n    __decorate([\n        Property(null)\n    ], TimePicker.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(false)\n    ], TimePicker.prototype, \"strictMode\", void 0);\n    __decorate([\n        Property(null)\n    ], TimePicker.prototype, \"keyConfigs\", void 0);\n    __decorate([\n        Property(null)\n    ], TimePicker.prototype, \"format\", void 0);\n    __decorate([\n        Property(true)\n    ], TimePicker.prototype, \"enabled\", void 0);\n    __decorate([\n        Property(false)\n    ], TimePicker.prototype, \"fullScreenMode\", void 0);\n    __decorate([\n        Property(false)\n    ], TimePicker.prototype, \"readonly\", void 0);\n    __decorate([\n        Property({})\n    ], TimePicker.prototype, \"htmlAttributes\", void 0);\n    __decorate([\n        Property('Never')\n    ], TimePicker.prototype, \"floatLabelType\", void 0);\n    __decorate([\n        Property(null)\n    ], TimePicker.prototype, \"placeholder\", void 0);\n    __decorate([\n        Property(1000)\n    ], TimePicker.prototype, \"zIndex\", void 0);\n    __decorate([\n        Property(false)\n    ], TimePicker.prototype, \"enablePersistence\", void 0);\n    __decorate([\n        Property(true)\n    ], TimePicker.prototype, \"showClearButton\", void 0);\n    __decorate([\n        Property(30)\n    ], TimePicker.prototype, \"step\", void 0);\n    __decorate([\n        Property(null)\n    ], TimePicker.prototype, \"scrollTo\", void 0);\n    __decorate([\n        Property(null)\n    ], TimePicker.prototype, \"value\", void 0);\n    __decorate([\n        Property(null)\n    ], TimePicker.prototype, \"min\", void 0);\n    __decorate([\n        Property(null)\n    ], TimePicker.prototype, \"max\", void 0);\n    __decorate([\n        Property(true)\n    ], TimePicker.prototype, \"allowEdit\", void 0);\n    __decorate([\n        Property(false)\n    ], TimePicker.prototype, \"openOnFocus\", void 0);\n    __decorate([\n        Property(false)\n    ], TimePicker.prototype, \"enableMask\", void 0);\n    __decorate([\n        Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n    ], TimePicker.prototype, \"maskPlaceholder\", void 0);\n    __decorate([\n        Property(null)\n    ], TimePicker.prototype, \"serverTimezoneOffset\", void 0);\n    __decorate([\n        Event()\n    ], TimePicker.prototype, \"change\", void 0);\n    __decorate([\n        Event()\n    ], TimePicker.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], TimePicker.prototype, \"destroyed\", void 0);\n    __decorate([\n        Event()\n    ], TimePicker.prototype, \"open\", void 0);\n    __decorate([\n        Event()\n    ], TimePicker.prototype, \"itemRender\", void 0);\n    __decorate([\n        Event()\n    ], TimePicker.prototype, \"close\", void 0);\n    __decorate([\n        Event()\n    ], TimePicker.prototype, \"cleared\", void 0);\n    __decorate([\n        Event()\n    ], TimePicker.prototype, \"blur\", void 0);\n    __decorate([\n        Event()\n    ], TimePicker.prototype, \"focus\", void 0);\n    TimePicker = __decorate([\n        NotifyPropertyChanges\n    ], TimePicker);\n    return TimePicker;\n}(Component));\nexport { TimePicker };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n///<reference path='../datepicker/datepicker-model.d.ts'/>\nimport { EventHandler, Internationalization, Property, NotifyPropertyChanges, Browser } from '@syncfusion/ej2-base';\nimport { Animation, Event, cldrData, getDefaultDateObject, detach } from '@syncfusion/ej2-base';\nimport { createElement, remove, addClass, L10n, removeClass, closest, append, attributes } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, isNullOrUndefined, formatUnit, getValue, rippleEffect } from '@syncfusion/ej2-base';\nimport { extend } from '@syncfusion/ej2-base';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DatePicker } from '../datepicker/datepicker';\nimport { TimePickerBase } from '../timepicker/timepicker';\n//class constant defination\nvar DATEWRAPPER = 'e-date-wrapper';\nvar DATEPICKERROOT = 'e-datepicker';\nvar DATETIMEWRAPPER = 'e-datetime-wrapper';\nvar DAY = new Date().getDate();\nvar MONTH = new Date().getMonth();\nvar YEAR = new Date().getFullYear();\nvar HOUR = new Date().getHours();\nvar MINUTE = new Date().getMinutes();\nvar SECOND = new Date().getSeconds();\nvar MILLISECOND = new Date().getMilliseconds();\nvar ROOT = 'e-datetimepicker';\nvar DATETIMEPOPUPWRAPPER = 'e-datetimepopup-wrapper';\nvar INPUTWRAPPER = 'e-input-group-icon';\nvar POPUP = 'e-popup';\nvar TIMEICON = 'e-time-icon';\nvar INPUTFOCUS = 'e-input-focus';\nvar POPUPDIMENSION = '250px';\nvar ICONANIMATION = 'e-icon-anim';\nvar DISABLED = 'e-disabled';\nvar ERROR = 'e-error';\nvar CONTENT = 'e-content';\nvar NAVIGATION = 'e-navigation';\nvar ACTIVE = 'e-active';\nvar HOVER = 'e-hover';\nvar ICONS = 'e-icons';\nvar HALFPOSITION = 2;\nvar LISTCLASS = 'e-list-item';\nvar ANIMATIONDURATION = 100;\nvar OVERFLOW = 'e-time-overflow';\n/**\n * Represents the DateTimePicker component that allows user to select\n * or enter a date time value.\n * ```html\n * <input id=\"dateTimePicker\"/>\n * ```\n * ```typescript\n * <script>\n *   let dateTimePickerObject:DateTimePicker = new DateTimePicker({ value: new Date() });\n *   dateTimePickerObject.appendTo(\"#dateTimePicker\");\n * </script>\n * ```\n */\nvar DateTimePicker = /** @class */ (function (_super) {\n    __extends(DateTimePicker, _super);\n    /**\n     * Constructor for creating the widget\n     *\n     * @param {DateTimePickerModel} options - Specifies the DateTimePicker model.\n     * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n     * @private\n     */\n    function DateTimePicker(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.valueWithMinutes = null;\n        _this.scrollInvoked = false;\n        _this.moduleName = _this.getModuleName();\n        _this.formatRegex = /dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yyy|yy|y|'[^']*'|'[^']*'/g;\n        _this.dateFormatString = '';\n        _this.dateTimeOptions = options;\n        return _this;\n    }\n    DateTimePicker.prototype.focusHandler = function () {\n        if (!this.enabled) {\n            return;\n        }\n        addClass([this.inputWrapper.container], INPUTFOCUS);\n    };\n    /**\n     * Sets the focus to widget for interaction.\n     *\n     * @returns {void}\n     */\n    DateTimePicker.prototype.focusIn = function () {\n        _super.prototype.focusIn.call(this);\n    };\n    /**\n     * Remove the focus from widget, if the widget is in focus state.\n     *\n     * @returns {void}\n     */\n    DateTimePicker.prototype.focusOut = function () {\n        if (document.activeElement === this.inputElement) {\n            this.inputElement.blur();\n            removeClass([this.inputWrapper.container], [INPUTFOCUS]);\n        }\n    };\n    DateTimePicker.prototype.blurHandler = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        // IE popup closing issue when click over the scrollbar\n        if (this.isTimePopupOpen() && this.isPreventBlur) {\n            this.inputElement.focus();\n            return;\n        }\n        removeClass([this.inputWrapper.container], INPUTFOCUS);\n        var blurArguments = {\n            model: this\n        };\n        if (this.isTimePopupOpen()) {\n            this.hide(e);\n        }\n        this.trigger('blur', blurArguments);\n    };\n    /**\n     * To destroy the widget.\n     *\n     * @returns {void}\n     */\n    DateTimePicker.prototype.destroy = function () {\n        if (this.popupObject && this.popupObject.element.classList.contains(POPUP)) {\n            this.popupObject.destroy();\n            detach(this.dateTimeWrapper);\n            this.dateTimeWrapper = undefined;\n            this.liCollections = this.timeCollections = [];\n            if (!isNullOrUndefined(this.rippleFn)) {\n                this.rippleFn();\n            }\n        }\n        var ariaAttribute = {\n            'aria-live': 'assertive', 'aria-atomic': 'true', 'aria-invalid': 'false',\n            'autocorrect': 'off', 'autocapitalize': 'off', 'spellcheck': 'false',\n            'aria-expanded': 'false', 'role': 'combobox', 'autocomplete': 'off'\n        };\n        if (this.inputElement) {\n            Input.removeAttributes(ariaAttribute, this.inputElement);\n        }\n        if (this.isCalendar()) {\n            if (this.popupWrapper) {\n                detach(this.popupWrapper);\n            }\n            this.popupObject = this.popupWrapper = null;\n            this.keyboardHandler.destroy();\n        }\n        this.unBindInputEvents();\n        this.liCollections = null;\n        this.rippleFn = null;\n        this.selectedElement = null;\n        this.listTag = null;\n        this.timeIcon = null;\n        this.popupObject = null;\n        this.preventArgs = null;\n        this.keyboardModule = null;\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * To Initialize the control rendering.\n     *\n     * @returns {void}\n     * @private\n     */\n    DateTimePicker.prototype.render = function () {\n        this.timekeyConfigure = {\n            enter: 'enter',\n            escape: 'escape',\n            end: 'end',\n            tab: 'tab',\n            home: 'home',\n            down: 'downarrow',\n            up: 'uparrow',\n            left: 'leftarrow',\n            right: 'rightarrow',\n            open: 'alt+downarrow',\n            close: 'alt+uparrow'\n        };\n        this.valueWithMinutes = null;\n        this.previousDateTime = null;\n        this.isPreventBlur = false;\n        this.cloneElement = this.element.cloneNode(true);\n        this.dateTimeFormat = this.cldrDateTimeFormat();\n        this.initValue = this.value;\n        if (typeof (this.min) === 'string') {\n            this.min = this.checkDateValue(new Date(this.min));\n        }\n        if (typeof (this.max) === 'string') {\n            this.max = this.checkDateValue(new Date(this.max));\n        }\n        if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n            this.enabled = false;\n        }\n        _super.prototype.updateHtmlAttributeToElement.call(this);\n        this.checkAttributes(false);\n        var localeText = { placeholder: this.placeholder };\n        this.l10n = new L10n('datetimepicker', localeText, this.locale);\n        this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n        _super.prototype.render.call(this);\n        this.createInputElement();\n        _super.prototype.updateHtmlAttributeToWrapper.call(this);\n        this.bindInputEvents();\n        if (this.enableMask) {\n            this.notify('createMask', {\n                module: 'MaskedDateTime'\n            });\n        }\n        this.setValue(true);\n        if (this.enableMask && !this.value && this.maskedDateValue && (this.floatLabelType === 'Always' || !this.floatLabelType || !this.placeholder)) {\n            Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n        }\n        this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(this.scrollTo))) }, true);\n        this.previousDateTime = this.value && new Date(+this.value);\n        if (this.element.tagName === 'EJS-DATETIMEPICKER') {\n            this.tabIndex = this.element.hasAttribute('tabindex') ? this.element.getAttribute('tabindex') : '0';\n            this.element.removeAttribute('tabindex');\n            if (!this.enabled) {\n                this.inputElement.tabIndex = -1;\n            }\n        }\n        if (this.floatLabelType === 'Auto') {\n            Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n        }\n        if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n            this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n        }\n        this.renderComplete();\n    };\n    DateTimePicker.prototype.setValue = function (isDynamic) {\n        if (isDynamic === void 0) { isDynamic = false; }\n        this.initValue = this.validateMinMaxRange(this.value);\n        if (!this.strictMode && this.isDateObject(this.initValue)) {\n            var value = this.validateMinMaxRange(this.initValue);\n            Input.setValue(this.getFormattedValue(value), this.inputElement, this.floatLabelType, this.showClearButton);\n            this.setProperties({ value: value }, true);\n        }\n        else {\n            if (isNullOrUndefined(this.value)) {\n                this.initValue = null;\n                this.setProperties({ value: null }, true);\n            }\n        }\n        this.valueWithMinutes = this.value;\n        _super.prototype.updateInput.call(this, isDynamic);\n    };\n    DateTimePicker.prototype.validateMinMaxRange = function (value) {\n        var result = value;\n        if (this.isDateObject(value)) {\n            result = this.validateValue(value);\n        }\n        else {\n            if (+this.min > +this.max) {\n                this.disablePopupButton(true);\n            }\n        }\n        this.checkValidState(result);\n        return result;\n    };\n    DateTimePicker.prototype.checkValidState = function (value) {\n        this.isValidState = true;\n        if (!this.strictMode) {\n            if ((+(value) > +(this.max)) || (+(value) < +(this.min))) {\n                this.isValidState = false;\n            }\n        }\n        this.checkErrorState();\n    };\n    DateTimePicker.prototype.checkErrorState = function () {\n        if (this.isValidState) {\n            removeClass([this.inputWrapper.container], ERROR);\n        }\n        else {\n            addClass([this.inputWrapper.container], ERROR);\n        }\n        attributes(this.inputElement, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n    };\n    DateTimePicker.prototype.validateValue = function (value) {\n        var dateVal = value;\n        if (this.strictMode) {\n            if (+this.min > +this.max) {\n                this.disablePopupButton(true);\n                dateVal = this.max;\n            }\n            else if (+value < +this.min) {\n                dateVal = this.min;\n            }\n            else if (+value > +this.max) {\n                dateVal = this.max;\n            }\n        }\n        else {\n            if (+this.min > +this.max) {\n                this.disablePopupButton(true);\n                dateVal = value;\n            }\n        }\n        return dateVal;\n    };\n    DateTimePicker.prototype.disablePopupButton = function (isDisable) {\n        if (isDisable) {\n            addClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n            this.hide();\n        }\n        else {\n            removeClass([this.inputWrapper.buttons[0], this.timeIcon], DISABLED);\n        }\n    };\n    DateTimePicker.prototype.getFormattedValue = function (value) {\n        var dateOptions;\n        if (!isNullOrUndefined(value)) {\n            if (this.calendarMode === 'Gregorian') {\n                dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd' };\n            }\n            else {\n                dateOptions = { format: this.cldrDateTimeFormat(), type: 'dateTime', skeleton: 'yMd', calendar: 'islamic' };\n            }\n            return this.globalize.formatDate(value, dateOptions);\n        }\n        else {\n            return null;\n        }\n    };\n    DateTimePicker.prototype.isDateObject = function (value) {\n        return (!isNullOrUndefined(value) && !isNaN(+value)) ? true : false;\n    };\n    DateTimePicker.prototype.createInputElement = function () {\n        removeClass([this.inputElement], DATEPICKERROOT);\n        removeClass([this.inputWrapper.container], DATEWRAPPER);\n        addClass([this.inputWrapper.container], DATETIMEWRAPPER);\n        addClass([this.inputElement], ROOT);\n        this.renderTimeIcon();\n    };\n    DateTimePicker.prototype.renderTimeIcon = function () {\n        this.timeIcon = Input.appendSpan(INPUTWRAPPER + ' ' + TIMEICON + ' ' + ICONS, this.inputWrapper.container);\n    };\n    DateTimePicker.prototype.bindInputEvents = function () {\n        EventHandler.add(this.timeIcon, 'mousedown', this.timeHandler, this);\n        EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dateHandler, this);\n        EventHandler.add(this.inputElement, 'blur', this.blurHandler, this);\n        EventHandler.add(this.inputElement, 'focus', this.focusHandler, this);\n        this.defaultKeyConfigs = extend(this.defaultKeyConfigs, this.keyConfigs);\n        this.keyboardHandler = new KeyboardEvents(this.inputElement, {\n            eventName: 'keydown',\n            keyAction: this.inputKeyAction.bind(this),\n            keyConfigs: this.defaultKeyConfigs\n        });\n    };\n    DateTimePicker.prototype.unBindInputEvents = function () {\n        EventHandler.remove(this.timeIcon, 'mousedown touchstart', this.timeHandler);\n        EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown touchstart', this.dateHandler);\n        if (this.inputElement) {\n            EventHandler.remove(this.inputElement, 'blur', this.blurHandler);\n            EventHandler.remove(this.inputElement, 'focus', this.focusHandler);\n        }\n        if (this.keyboardHandler) {\n            this.keyboardHandler.destroy();\n        }\n    };\n    DateTimePicker.prototype.cldrTimeFormat = function () {\n        var cldrTime;\n        if (this.isNullOrEmpty(this.timeFormat)) {\n            if (this.locale === 'en' || this.locale === 'en-US') {\n                cldrTime = (getValue('timeFormats.short', getDefaultDateObject()));\n            }\n            else {\n                cldrTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n            }\n        }\n        else {\n            cldrTime = this.timeFormat;\n        }\n        return cldrTime;\n    };\n    DateTimePicker.prototype.cldrDateTimeFormat = function () {\n        var cldrTime;\n        var culture = new Internationalization(this.locale);\n        var dateFormat = culture.getDatePattern({ skeleton: 'yMd' });\n        if (this.isNullOrEmpty(this.formatString)) {\n            cldrTime = dateFormat + ' ' + this.getCldrFormat('time');\n        }\n        else {\n            cldrTime = this.formatString;\n        }\n        return cldrTime;\n    };\n    DateTimePicker.prototype.getCldrFormat = function (type) {\n        var cldrDateTime;\n        if (this.locale === 'en' || this.locale === 'en-US') {\n            cldrDateTime = (getValue('timeFormats.short', getDefaultDateObject()));\n        }\n        else {\n            cldrDateTime = (this.getCultureTimeObject(cldrData, '' + this.locale));\n        }\n        return cldrDateTime;\n    };\n    DateTimePicker.prototype.isNullOrEmpty = function (value) {\n        if (isNullOrUndefined(value) || (typeof value === 'string' && value.trim() === '')) {\n            return true;\n        }\n        else {\n            return false;\n        }\n    };\n    DateTimePicker.prototype.getCultureTimeObject = function (ld, c) {\n        if (this.calendarMode === 'Gregorian') {\n            return getValue('main.' + '' + this.locale + '.dates.calendars.gregorian.timeFormats.short', ld);\n        }\n        else {\n            return getValue('main.' + '' + this.locale + '.dates.calendars.islamic.timeFormats.short', ld);\n        }\n    };\n    DateTimePicker.prototype.timeHandler = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        this.isIconClicked = true;\n        if (Browser.isDevice) {\n            this.inputElement.setAttribute('readonly', '');\n        }\n        if (e.currentTarget === this.timeIcon) {\n            e.preventDefault();\n        }\n        if (this.enabled && !this.readonly) {\n            if (this.isDatePopupOpen()) {\n                _super.prototype.hide.call(this, e);\n            }\n            if (this.isTimePopupOpen()) {\n                this.closePopup(e);\n            }\n            else {\n                this.inputElement.focus();\n                this.popupCreation('time', e);\n                addClass([this.inputWrapper.container], [INPUTFOCUS]);\n            }\n        }\n        this.isIconClicked = false;\n    };\n    DateTimePicker.prototype.dateHandler = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        if (e.currentTarget === this.inputWrapper.buttons[0]) {\n            e.preventDefault();\n        }\n        if (this.enabled && !this.readonly) {\n            if (this.isTimePopupOpen()) {\n                this.closePopup(e);\n            }\n            if (!isNullOrUndefined(this.popupWrapper)) {\n                this.popupCreation('date', e);\n            }\n        }\n    };\n    DateTimePicker.prototype.show = function (type, e) {\n        if ((this.enabled && this.readonly) || !this.enabled) {\n            return;\n        }\n        else {\n            if (type === 'time' && !this.dateTimeWrapper) {\n                if (this.isDatePopupOpen()) {\n                    this.hide(e);\n                }\n                this.popupCreation('time', e);\n            }\n            else if (!this.popupObj) {\n                if (this.isTimePopupOpen()) {\n                    this.hide(e);\n                }\n                _super.prototype.show.call(this);\n                this.popupCreation('date', e);\n            }\n        }\n    };\n    DateTimePicker.prototype.toggle = function (e) {\n        if (this.isDatePopupOpen()) {\n            _super.prototype.hide.call(this, e);\n            this.show('time', null);\n        }\n        else if (this.isTimePopupOpen()) {\n            this.hide(e);\n            _super.prototype.show.call(this, null, e);\n            this.popupCreation('date', null);\n        }\n        else {\n            this.show(null, e);\n        }\n    };\n    DateTimePicker.prototype.listCreation = function () {\n        var dateObject;\n        if (this.calendarMode === 'Gregorian') {\n            this.cldrDateTimeFormat().replace(this.formatRegex, this.TimePopupFormat());\n            dateObject = this.globalize.parseDate(this.inputElement.value, {\n                format: this.dateFormatString, type: 'datetime'\n            });\n        }\n        else {\n            dateObject = this.globalize.parseDate(this.inputElement.value, {\n                format: this.cldrDateTimeFormat(), type: 'datetime', calendar: 'islamic'\n            });\n        }\n        var value = isNullOrUndefined(this.value) ? this.inputElement.value !== '' ?\n            dateObject : new Date() : this.value;\n        this.valueWithMinutes = value;\n        this.listWrapper = createElement('div', { className: CONTENT, attrs: { 'tabindex': '0' } });\n        var min = this.startTime(value);\n        var max = this.endTime(value);\n        var listDetails = TimePickerBase.createListItems(this.createElement, min, max, this.globalize, this.cldrTimeFormat(), this.step);\n        this.timeCollections = listDetails.collection;\n        this.listTag = listDetails.list;\n        attributes(this.listTag, { 'role': 'listbox', 'aria-hidden': 'false', 'id': this.element.id + '_options' });\n        append([listDetails.list], this.listWrapper);\n        this.wireTimeListEvents();\n        var rippleModel = { duration: 300, selector: '.' + LISTCLASS };\n        this.rippleFn = rippleEffect(this.listWrapper, rippleModel);\n        this.liCollections = this.listWrapper.querySelectorAll('.' + LISTCLASS);\n    };\n    DateTimePicker.prototype.popupCreation = function (type, e) {\n        if (Browser.isDevice) {\n            this.element.setAttribute('readonly', 'readonly');\n        }\n        if (type === 'date') {\n            if (!this.readonly && this.popupWrapper) {\n                addClass([this.popupWrapper], DATETIMEPOPUPWRAPPER);\n                attributes(this.popupWrapper, { 'id': this.element.id + '_options' });\n            }\n        }\n        else {\n            if (!this.readonly) {\n                this.dateTimeWrapper = createElement('div', {\n                    className: ROOT + ' ' + POPUP,\n                    attrs: { 'id': this.element.id + '_timepopup', 'style': 'visibility:hidden ; display:block' }\n                });\n                if (!isNullOrUndefined(this.cssClass)) {\n                    this.dateTimeWrapper.className += ' ' + this.cssClass;\n                }\n                if (!isNullOrUndefined(this.step) && this.step > 0) {\n                    this.listCreation();\n                    append([this.listWrapper], this.dateTimeWrapper);\n                }\n                document.body.appendChild(this.dateTimeWrapper);\n                this.addTimeSelection();\n                this.renderPopup();\n                this.setTimeScrollPosition();\n                this.openPopup(e);\n                if (!Browser.isDevice || (Browser.isDevice && !this.fullScreenMode)) {\n                    this.popupObject.refreshPosition(this.inputElement);\n                }\n                if (Browser.isDevice && this.fullScreenMode) {\n                    this.dateTimeWrapper.style.left = '0px';\n                }\n                if (Browser.isDevice) {\n                    var dlgOverlay = this.createElement('div', { className: 'e-dlg-overlay' });\n                    dlgOverlay.style.zIndex = (this.zIndex - 1).toString();\n                    this.timeModal.appendChild(dlgOverlay);\n                }\n            }\n        }\n    };\n    DateTimePicker.prototype.openPopup = function (e) {\n        var _this = this;\n        this.preventArgs = {\n            cancel: false,\n            popup: this.popupObject,\n            event: e || null\n        };\n        var eventArgs = this.preventArgs;\n        this.trigger('open', eventArgs, function (eventArgs) {\n            _this.preventArgs = eventArgs;\n            if (!_this.preventArgs.cancel && !_this.readonly) {\n                var openAnimation = {\n                    name: 'FadeIn',\n                    duration: ANIMATIONDURATION,\n                };\n                if (_this.zIndex === 1000) {\n                    _this.popupObject.show(new Animation(openAnimation), _this.element);\n                }\n                else {\n                    _this.popupObject.show(new Animation(openAnimation), null);\n                }\n                addClass([_this.inputWrapper.container], [ICONANIMATION]);\n                attributes(_this.inputElement, { 'aria-expanded': 'true' });\n                attributes(_this.inputElement, { 'aria-owns': _this.inputElement.id + '_options' });\n                attributes(_this.inputElement, { 'aria-controls': _this.inputElement.id });\n                EventHandler.add(document, 'mousedown touchstart', _this.documentClickHandler, _this);\n            }\n        });\n    };\n    DateTimePicker.prototype.documentClickHandler = function (event) {\n        var target = event.target;\n        if ((!isNullOrUndefined(this.popupObject) && (this.inputWrapper.container.contains(target) && event.type !== 'mousedown' ||\n            (this.popupObject.element && this.popupObject.element.contains(target)))) && event.type !== 'touchstart') {\n            event.preventDefault();\n        }\n        if (!(closest(target, '[id=\"' + (this.popupObject && this.popupObject.element.id + '\"]'))) && target !== this.inputElement\n            && target !== this.timeIcon && !isNullOrUndefined(this.inputWrapper) && target !== this.inputWrapper.container && !target.classList.contains('e-dlg-overlay')) {\n            if (this.isTimePopupOpen()) {\n                this.hide(event);\n                this.focusOut();\n            }\n        }\n        else if (target !== this.inputElement) {\n            if (!Browser.isDevice) {\n                this.isPreventBlur = ((document.activeElement === this.inputElement) && (Browser.isIE || Browser.info.name === 'edge')\n                    && target === this.popupObject.element);\n            }\n        }\n    };\n    DateTimePicker.prototype.isTimePopupOpen = function () {\n        return (this.dateTimeWrapper && this.dateTimeWrapper.classList.contains('' + ROOT)) ? true : false;\n    };\n    DateTimePicker.prototype.isDatePopupOpen = function () {\n        return (this.popupWrapper && this.popupWrapper.classList.contains('' + DATETIMEPOPUPWRAPPER)) ? true : false;\n    };\n    DateTimePicker.prototype.renderPopup = function () {\n        var _this = this;\n        this.containerStyle = this.inputWrapper.container.getBoundingClientRect();\n        if (Browser.isDevice) {\n            this.timeModal = createElement('div');\n            this.timeModal.className = '' + ROOT + ' e-time-modal';\n            document.body.className += ' ' + OVERFLOW;\n            this.timeModal.style.display = 'block';\n            document.body.appendChild(this.timeModal);\n        }\n        var offset = 4;\n        this.popupObject = new Popup(this.dateTimeWrapper, {\n            width: this.setPopupWidth(),\n            zIndex: this.zIndex,\n            targetType: 'container',\n            collision: Browser.isDevice ? { X: 'fit', Y: 'fit' } : { X: 'flip', Y: 'flip' },\n            relateTo: Browser.isDevice ? document.body : this.inputWrapper.container,\n            position: Browser.isDevice ? { X: 'center', Y: 'center' } : { X: 'left', Y: 'bottom' },\n            enableRtl: this.enableRtl,\n            offsetY: offset,\n            open: function () {\n                _this.dateTimeWrapper.style.visibility = 'visible';\n                addClass([_this.timeIcon], ACTIVE);\n                if (!Browser.isDevice) {\n                    _this.timekeyConfigure = extend(_this.timekeyConfigure, _this.keyConfigs);\n                    _this.inputEvent = new KeyboardEvents(_this.inputWrapper.container, {\n                        keyAction: _this.timeKeyActionHandle.bind(_this),\n                        keyConfigs: _this.timekeyConfigure,\n                        eventName: 'keydown'\n                    });\n                }\n            }, close: function () {\n                removeClass([_this.timeIcon], ACTIVE);\n                _this.unWireTimeListEvents();\n                _this.inputElement.removeAttribute('aria-activedescendant');\n                remove(_this.popupObject.element);\n                _this.popupObject.destroy();\n                _this.dateTimeWrapper.innerHTML = '';\n                _this.listWrapper = _this.dateTimeWrapper = undefined;\n                if (_this.inputEvent) {\n                    _this.inputEvent.destroy();\n                }\n            }, targetExitViewport: function () {\n                if (!Browser.isDevice) {\n                    _this.hide();\n                }\n            }\n        });\n        if (Browser.isDevice && this.fullScreenMode) {\n            this.popupObject.element.style.display = \"flex\";\n            this.popupObject.element.style.maxHeight = \"100%\";\n            this.popupObject.element.style.width = \"100%\";\n        }\n        else {\n            this.popupObject.element.style.maxHeight = POPUPDIMENSION;\n        }\n        if (Browser.isDevice && this.fullScreenMode) {\n            var modelWrapper = createElement('div', { className: 'e-datetime-mob-popup-wrap' });\n            var modelHeader = this.createElement('div', { className: 'e-model-header' });\n            var modelTitleSpan = this.createElement(\"span\", { className: \"e-model-title\" });\n            modelTitleSpan.textContent = \"Select time\";\n            var modelCloseIcon = this.createElement(\"span\", { className: \"e-popup-close\" });\n            EventHandler.add(modelCloseIcon, 'mousedown touchstart', this.dateTimeCloseHandler, this);\n            var timeContent = this.dateTimeWrapper.querySelector(\".e-content\");\n            modelHeader.appendChild(modelCloseIcon);\n            modelHeader.appendChild(modelTitleSpan);\n            modelWrapper.appendChild(modelHeader);\n            modelWrapper.appendChild(timeContent);\n            this.dateTimeWrapper.insertBefore(modelWrapper, this.dateTimeWrapper.firstElementChild);\n        }\n    };\n    DateTimePicker.prototype.dateTimeCloseHandler = function (e) {\n        this.hide();\n    };\n    DateTimePicker.prototype.setDimension = function (width) {\n        if (typeof width === 'number') {\n            width = formatUnit(width);\n        }\n        else if (typeof width === 'string') {\n            // eslint-disable-next-line no-self-assign\n            width = width;\n        }\n        else {\n            width = '100%';\n        }\n        return width;\n    };\n    DateTimePicker.prototype.setPopupWidth = function () {\n        var width = this.setDimension(this.width);\n        if (width.indexOf('%') > -1) {\n            var inputWidth = this.containerStyle.width * parseFloat(width) / 100;\n            width = inputWidth.toString() + 'px';\n        }\n        return width;\n    };\n    DateTimePicker.prototype.wireTimeListEvents = function () {\n        EventHandler.add(this.listWrapper, 'click', this.onMouseClick, this);\n        if (!Browser.isDevice) {\n            EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n            EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n        }\n    };\n    DateTimePicker.prototype.unWireTimeListEvents = function () {\n        if (this.listWrapper) {\n            EventHandler.remove(this.listWrapper, 'click', this.onMouseClick);\n            EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n            if (!Browser.isDevice) {\n                EventHandler.add(this.listWrapper, 'mouseover', this.onMouseOver, this);\n                EventHandler.add(this.listWrapper, 'mouseout', this.onMouseLeave, this);\n            }\n        }\n    };\n    DateTimePicker.prototype.onMouseOver = function (event) {\n        var currentLi = closest(event.target, '.' + LISTCLASS);\n        this.setTimeHover(currentLi, HOVER);\n    };\n    DateTimePicker.prototype.onMouseLeave = function () {\n        this.removeTimeHover(HOVER);\n    };\n    DateTimePicker.prototype.setTimeHover = function (li, className) {\n        if (this.enabled && this.isValidLI(li) && !li.classList.contains(className)) {\n            this.removeTimeHover(className);\n            addClass([li], className);\n        }\n    };\n    DateTimePicker.prototype.getPopupHeight = function () {\n        var height = parseInt(POPUPDIMENSION, 10);\n        var popupHeight = this.dateTimeWrapper.getBoundingClientRect().height;\n        if (Browser.isDevice && this.fullScreenMode) {\n            return popupHeight;\n        }\n        else {\n            return popupHeight > height ? height : popupHeight;\n        }\n    };\n    DateTimePicker.prototype.changeEvent = function (e) {\n        _super.prototype.changeEvent.call(this, e);\n        if ((this.value && this.value.valueOf()) !== (this.previousDateTime && +this.previousDateTime.valueOf())) {\n            this.valueWithMinutes = this.value;\n            this.setInputValue('date');\n            this.previousDateTime = this.value && new Date(+this.value);\n        }\n    };\n    DateTimePicker.prototype.updateValue = function (e) {\n        this.setInputValue('time');\n        if (+this.previousDateTime !== +this.value) {\n            this.changedArgs = {\n                value: this.value, event: e || null,\n                isInteracted: !isNullOrUndefined(e),\n                element: this.element\n            };\n            this.addTimeSelection();\n            this.trigger('change', this.changedArgs);\n            this.previousDateTime = this.previousDate = this.value;\n        }\n    };\n    DateTimePicker.prototype.setTimeScrollPosition = function () {\n        var popupElement = this.selectedElement;\n        if (!isNullOrUndefined(popupElement)) {\n            this.findScrollTop(popupElement);\n        }\n        else if (this.dateTimeWrapper && this.checkDateValue(this.scrollTo)) {\n            this.setScrollTo();\n        }\n    };\n    DateTimePicker.prototype.findScrollTop = function (element) {\n        var listHeight = this.getPopupHeight();\n        var nextElement = element.nextElementSibling;\n        var height = nextElement ? nextElement.offsetTop : element.offsetTop;\n        var lineHeight = element.getBoundingClientRect().height;\n        if ((height + element.offsetTop) > listHeight) {\n            if (Browser.isDevice && this.fullScreenMode) {\n                var listContent = this.dateTimeWrapper.querySelector('.e-content');\n                listContent.scrollTop = nextElement ? (height - (listHeight / HALFPOSITION + lineHeight / HALFPOSITION)) : height;\n            }\n            else {\n                this.dateTimeWrapper.scrollTop = nextElement ? (height - (listHeight / HALFPOSITION + lineHeight / HALFPOSITION)) : height;\n            }\n        }\n        else {\n            this.dateTimeWrapper.scrollTop = 0;\n        }\n    };\n    DateTimePicker.prototype.setScrollTo = function () {\n        var element;\n        var items = this.dateTimeWrapper.querySelectorAll('.' + LISTCLASS);\n        if (items.length >= 0) {\n            this.scrollInvoked = true;\n            var initialTime = this.timeCollections[0];\n            var scrollTime = this.getDateObject(this.checkDateValue(this.scrollTo)).getTime();\n            element = items[Math.round((scrollTime - initialTime) / (this.step * 60000))];\n        }\n        else {\n            this.dateTimeWrapper.scrollTop = 0;\n        }\n        if (!isNullOrUndefined(element)) {\n            this.findScrollTop(element);\n        }\n        else {\n            this.dateTimeWrapper.scrollTop = 0;\n        }\n    };\n    DateTimePicker.prototype.setInputValue = function (type) {\n        if (type === 'date') {\n            this.inputElement.value = this.previousElementValue = this.getFormattedValue(this.getFullDateTime());\n            this.setProperties({ value: this.getFullDateTime() }, true);\n        }\n        else {\n            var tempVal = this.getFormattedValue(new Date(this.timeCollections[this.activeIndex]));\n            Input.setValue(tempVal, this.inputElement, this.floatLabelType, this.showClearButton);\n            this.previousElementValue = this.inputElement.value;\n            this.setProperties({ value: new Date(this.timeCollections[this.activeIndex]) }, true);\n            if (this.enableMask) {\n                this.createMask();\n            }\n        }\n        this.updateIconState();\n    };\n    DateTimePicker.prototype.getFullDateTime = function () {\n        var value = null;\n        if (this.isDateObject(this.valueWithMinutes)) {\n            value = this.combineDateTime(this.valueWithMinutes);\n        }\n        else {\n            value = this.previousDate;\n        }\n        return this.validateMinMaxRange(value);\n    };\n    DateTimePicker.prototype.createMask = function () {\n        this.notify('createMask', {\n            module: 'MaskedDateTime'\n        });\n    };\n    DateTimePicker.prototype.combineDateTime = function (value) {\n        if (this.isDateObject(value)) {\n            var day = this.previousDate.getDate();\n            var month = this.previousDate.getMonth();\n            var year = this.previousDate.getFullYear();\n            var hour = value.getHours();\n            var minutes = value.getMinutes();\n            var seconds = value.getSeconds();\n            return new Date(year, month, day, hour, minutes, seconds);\n        }\n        else {\n            return this.previousDate;\n        }\n    };\n    DateTimePicker.prototype.onMouseClick = function (event) {\n        var target = event.target;\n        var li = this.selectedElement = closest(target, '.' + LISTCLASS);\n        if (li && li.classList.contains(LISTCLASS)) {\n            this.timeValue = li.getAttribute('data-value');\n            this.hide(event);\n        }\n        this.setSelection(li, event);\n    };\n    DateTimePicker.prototype.setSelection = function (li, event) {\n        if (this.isValidLI(li) && !li.classList.contains(ACTIVE)) {\n            this.selectedElement = li;\n            var index = Array.prototype.slice.call(this.liCollections).indexOf(li);\n            this.activeIndex = index;\n            this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n            addClass([this.selectedElement], ACTIVE);\n            this.selectedElement.setAttribute('aria-selected', 'true');\n            this.updateValue(event);\n        }\n    };\n    DateTimePicker.prototype.setTimeActiveClass = function () {\n        var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n        if (!isNullOrUndefined(collections)) {\n            var items = collections.querySelectorAll('.' + LISTCLASS);\n            if (items.length) {\n                for (var i = 0; i < items.length; i++) {\n                    if (this.timeCollections[i] === +(this.valueWithMinutes)) {\n                        items[i].setAttribute('aria-selected', 'true');\n                        this.selectedElement = items[i];\n                        this.activeIndex = i;\n                        this.setTimeActiveDescendant();\n                        break;\n                    }\n                }\n            }\n        }\n    };\n    DateTimePicker.prototype.setTimeActiveDescendant = function () {\n        if (!isNullOrUndefined(this.selectedElement) && this.value) {\n            attributes(this.inputElement, { 'aria-activedescendant': this.selectedElement.getAttribute('id') });\n        }\n        else {\n            this.inputElement.removeAttribute('aria-activedescendant');\n        }\n    };\n    DateTimePicker.prototype.addTimeSelection = function () {\n        this.selectedElement = null;\n        this.removeTimeSelection();\n        this.setTimeActiveClass();\n        if (!isNullOrUndefined(this.selectedElement)) {\n            addClass([this.selectedElement], ACTIVE);\n            this.selectedElement.setAttribute('aria-selected', 'true');\n        }\n    };\n    DateTimePicker.prototype.removeTimeSelection = function () {\n        this.removeTimeHover(HOVER);\n        if (!isNullOrUndefined(this.dateTimeWrapper)) {\n            var items = this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n            if (items.length) {\n                removeClass(items, ACTIVE);\n                items[0].removeAttribute('aria-selected');\n            }\n        }\n    };\n    DateTimePicker.prototype.removeTimeHover = function (className) {\n        var hoveredItem = this.getTimeHoverItem(className);\n        if (hoveredItem && hoveredItem.length) {\n            removeClass(hoveredItem, className);\n        }\n    };\n    DateTimePicker.prototype.getTimeHoverItem = function (className) {\n        var collections = isNullOrUndefined(this.dateTimeWrapper) ? this.listWrapper : this.dateTimeWrapper;\n        var hoveredItem;\n        if (!isNullOrUndefined(collections)) {\n            hoveredItem = collections.querySelectorAll('.' + className);\n        }\n        return hoveredItem;\n    };\n    DateTimePicker.prototype.isValidLI = function (li) {\n        return (li && li.classList.contains(LISTCLASS) && !li.classList.contains(DISABLED));\n    };\n    DateTimePicker.prototype.calculateStartEnd = function (value, range, method) {\n        var day = value.getDate();\n        var month = value.getMonth();\n        var year = value.getFullYear();\n        var hours = value.getHours();\n        var minutes = value.getMinutes();\n        var seconds = value.getSeconds();\n        var milliseconds = value.getMilliseconds();\n        if (range) {\n            if (method === 'starttime') {\n                return new Date(year, month, day, 0, 0, 0);\n            }\n            else {\n                return new Date(year, month, day, 23, 59, 59);\n            }\n        }\n        else {\n            return new Date(year, month, day, hours, minutes, seconds, milliseconds);\n        }\n    };\n    DateTimePicker.prototype.startTime = function (date) {\n        var tempStartValue;\n        var start;\n        var tempMin = this.min;\n        var value = date === null ? new Date() : date;\n        if ((+value.getDate() === +tempMin.getDate() && +value.getMonth() === +tempMin.getMonth() &&\n            +value.getFullYear() === +tempMin.getFullYear()) || ((+new Date(value.getFullYear(), value.getMonth(), value.getDate())) <=\n            +new Date(tempMin.getFullYear(), tempMin.getMonth(), tempMin.getDate()))) {\n            start = false;\n            tempStartValue = this.min;\n        }\n        else if (+value < +this.max && +value > +this.min) {\n            start = true;\n            tempStartValue = value;\n        }\n        else if (+value >= +this.max) {\n            start = true;\n            tempStartValue = this.max;\n        }\n        return this.calculateStartEnd(tempStartValue, start, 'starttime');\n    };\n    DateTimePicker.prototype.TimePopupFormat = function () {\n        var format = '';\n        var formatCount = 0;\n        var proxy = this;\n        function formatValueSpecifier(formattext) {\n            switch (formattext) {\n                case 'd':\n                case 'dd':\n                case 'ddd':\n                case 'dddd':\n                case 'M':\n                case 'MM':\n                case 'MMM':\n                case 'MMMM':\n                case 'y':\n                case 'yy':\n                case 'yyy':\n                case 'yyyy':\n                    if (format == '') {\n                        format = format + formattext;\n                    }\n                    else {\n                        format = format + \"/\" + formattext;\n                    }\n                    formatCount = formatCount + 1;\n                    break;\n            }\n            if (formatCount > 2) {\n                proxy.dateFormatString = format;\n            }\n            return format;\n        }\n        return formatValueSpecifier;\n    };\n    DateTimePicker.prototype.endTime = function (date) {\n        var tempEndValue;\n        var end;\n        var tempMax = this.max;\n        var value = date === null ? new Date() : date;\n        if ((+value.getDate() === +tempMax.getDate() && +value.getMonth() === +tempMax.getMonth() &&\n            +value.getFullYear() === +tempMax.getFullYear()) || (+new Date(value.getUTCFullYear(), value.getMonth(), value.getDate()) >=\n            +new Date(tempMax.getFullYear(), tempMax.getMonth(), tempMax.getDate()))) {\n            end = false;\n            tempEndValue = this.max;\n        }\n        else if (+value < +this.max && +value > +this.min) {\n            end = true;\n            tempEndValue = value;\n        }\n        else if (+value <= +this.min) {\n            end = true;\n            tempEndValue = this.min;\n        }\n        return this.calculateStartEnd(tempEndValue, end, 'endtime');\n    };\n    DateTimePicker.prototype.hide = function (e) {\n        var _this = this;\n        if (this.popupObj || this.dateTimeWrapper) {\n            this.preventArgs = {\n                cancel: false,\n                popup: this.popupObj || this.popupObject,\n                event: e || null\n            };\n            var eventArgs = this.preventArgs;\n            if (isNullOrUndefined(this.popupObj)) {\n                this.trigger('close', eventArgs, function (eventArgs) {\n                    _this.dateTimeCloseEventCallback(e, eventArgs);\n                });\n            }\n            else {\n                this.dateTimeCloseEventCallback(e, eventArgs);\n            }\n        }\n        else {\n            if (Browser.isDevice && this.allowEdit && !this.readonly) {\n                this.inputElement.removeAttribute('readonly');\n            }\n            this.setAllowEdit();\n        }\n    };\n    DateTimePicker.prototype.dateTimeCloseEventCallback = function (e, eventArgs) {\n        this.preventArgs = eventArgs;\n        if (!this.preventArgs.cancel) {\n            if (this.isDatePopupOpen()) {\n                _super.prototype.hide.call(this, e);\n            }\n            else if (this.isTimePopupOpen()) {\n                this.closePopup(e);\n                removeClass([document.body], OVERFLOW);\n                if (Browser.isDevice && this.timeModal) {\n                    this.timeModal.style.display = 'none';\n                    this.timeModal.outerHTML = '';\n                    this.timeModal = null;\n                }\n                this.setTimeActiveDescendant();\n            }\n        }\n        if (Browser.isDevice && this.allowEdit && !this.readonly) {\n            this.inputElement.removeAttribute('readonly');\n        }\n        this.setAllowEdit();\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    DateTimePicker.prototype.closePopup = function (e) {\n        if (this.isTimePopupOpen() && this.popupObject) {\n            var animModel = {\n                name: 'FadeOut',\n                duration: ANIMATIONDURATION,\n                delay: 0\n            };\n            this.popupObject.hide(new Animation(animModel));\n            this.inputWrapper.container.classList.remove(ICONANIMATION);\n            attributes(this.inputElement, { 'aria-expanded': 'false' });\n            this.inputElement.removeAttribute('aria-owns');\n            this.inputElement.removeAttribute('aria-controls');\n            EventHandler.remove(document, 'mousedown touchstart', this.documentClickHandler);\n        }\n    };\n    DateTimePicker.prototype.preRender = function () {\n        this.checkFormat();\n        this.dateTimeFormat = this.cldrDateTimeFormat();\n        _super.prototype.preRender.call(this);\n        removeClass([this.inputElementCopy], [ROOT]);\n    };\n    DateTimePicker.prototype.getProperty = function (date, val) {\n        if (val === 'min') {\n            this.setProperties({ min: this.validateValue(date.min) }, true);\n        }\n        else {\n            this.setProperties({ max: this.validateValue(date.max) }, true);\n        }\n    };\n    DateTimePicker.prototype.checkAttributes = function (isDynamic) {\n        var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n            ['style', 'name', 'step', 'disabled', 'readonly', 'value', 'min', 'max', 'placeholder', 'type'];\n        var value;\n        for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n            var prop = attributes_1[_i];\n            if (!isNullOrUndefined(this.inputElement.getAttribute(prop))) {\n                switch (prop) {\n                    case 'name':\n                        this.inputElement.setAttribute('name', this.inputElement.getAttribute(prop));\n                        break;\n                    case 'step':\n                        this.step = parseInt(this.inputElement.getAttribute(prop), 10);\n                        break;\n                    case 'readonly':\n                        if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['readonly'] === undefined)) || isDynamic) {\n                            var readonly = this.inputElement.getAttribute(prop) === 'disabled' ||\n                                this.inputElement.getAttribute(prop) === '' ||\n                                this.inputElement.getAttribute(prop) === 'true' ? true : false;\n                            this.setProperties({ readonly: readonly }, !isDynamic);\n                        }\n                        break;\n                    case 'placeholder':\n                        if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['placeholder'] === undefined)) || isDynamic) {\n                            this.setProperties({ placeholder: this.inputElement.getAttribute(prop) }, !isDynamic);\n                        }\n                        break;\n                    case 'min':\n                        if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['min'] === undefined)) || isDynamic) {\n                            value = new Date(this.inputElement.getAttribute(prop));\n                            if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n                                this.setProperties({ min: value }, !isDynamic);\n                            }\n                        }\n                        break;\n                    case 'disabled':\n                        if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['enabled'] === undefined)) || isDynamic) {\n                            var enabled = this.inputElement.getAttribute(prop) === 'disabled' ||\n                                this.inputElement.getAttribute(prop) === 'true' ||\n                                this.inputElement.getAttribute(prop) === '' ? false : true;\n                            this.setProperties({ enabled: enabled }, !isDynamic);\n                        }\n                        break;\n                    case 'value':\n                        if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['value'] === undefined)) || isDynamic) {\n                            value = new Date(this.inputElement.getAttribute(prop));\n                            if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n                                this.setProperties({ value: value }, !isDynamic);\n                            }\n                        }\n                        break;\n                    case 'max':\n                        if ((isNullOrUndefined(this.dateTimeOptions) || (this.dateTimeOptions['max'] === undefined)) || isDynamic) {\n                            value = new Date(this.inputElement.getAttribute(prop));\n                            if (!this.isNullOrEmpty(value) && !isNaN(+value)) {\n                                this.setProperties({ max: value }, !isDynamic);\n                            }\n                        }\n                        break;\n                }\n            }\n        }\n    };\n    DateTimePicker.prototype.requiredModules = function () {\n        var modules = [];\n        if (this) {\n            modules.push({ args: [this], member: 'islamic' });\n        }\n        if (this.enableMask) {\n            modules.push(this.maskedDateModule());\n        }\n        return modules;\n    };\n    DateTimePicker.prototype.maskedDateModule = function () {\n        var modules = { args: [this], member: 'MaskedDateTime' };\n        return modules;\n    };\n    DateTimePicker.prototype.getTimeActiveElement = function () {\n        if (!isNullOrUndefined(this.dateTimeWrapper)) {\n            return this.dateTimeWrapper.querySelectorAll('.' + ACTIVE);\n        }\n        else {\n            return null;\n        }\n    };\n    DateTimePicker.prototype.createDateObj = function (val) {\n        return val instanceof Date ? val : null;\n    };\n    DateTimePicker.prototype.getDateObject = function (text) {\n        if (!this.isNullOrEmpty(text)) {\n            var dateValue = this.createDateObj(text);\n            var value = this.valueWithMinutes;\n            var status_1 = !isNullOrUndefined(value);\n            if (this.checkDateValue(dateValue)) {\n                var date = status_1 ? value.getDate() : DAY;\n                var month = status_1 ? value.getMonth() : MONTH;\n                var year = status_1 ? value.getFullYear() : YEAR;\n                var hour = status_1 ? value.getHours() : HOUR;\n                var minute = status_1 ? value.getMinutes() : MINUTE;\n                var second = status_1 ? value.getSeconds() : SECOND;\n                var millisecond = status_1 ? value.getMilliseconds() : MILLISECOND;\n                if (!this.scrollInvoked) {\n                    return new Date(year, month, date, hour, minute, second, millisecond);\n                }\n                else {\n                    this.scrollInvoked = false;\n                    return new Date(year, month, date, dateValue.getHours(), dateValue.getMinutes(), dateValue.getSeconds(), dateValue.getMilliseconds());\n                }\n            }\n        }\n        return null;\n    };\n    DateTimePicker.prototype.findNextTimeElement = function (event) {\n        var textVal = (this.inputElement).value;\n        var value = isNullOrUndefined(this.valueWithMinutes) ? this.createDateObj(textVal) :\n            this.getDateObject(this.valueWithMinutes);\n        var dateTimeVal = null;\n        var listCount = this.liCollections.length;\n        if (!isNullOrUndefined(this.activeIndex) || !isNullOrUndefined(this.checkDateValue(value))) {\n            if (event.action === 'home') {\n                dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[0])));\n                this.activeIndex = 0;\n            }\n            else if (event.action === 'end') {\n                dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[this.timeCollections.length - 1])));\n                this.activeIndex = this.timeCollections.length - 1;\n            }\n            else {\n                if (event.action === 'down') {\n                    for (var i = 0; i < listCount; i++) {\n                        if (+value < this.timeCollections[i]) {\n                            dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n                            this.activeIndex = i;\n                            break;\n                        }\n                    }\n                }\n                else {\n                    for (var i = listCount - 1; i >= 0; i--) {\n                        if (+value > this.timeCollections[i]) {\n                            dateTimeVal = +(this.createDateObj(new Date(this.timeCollections[i])));\n                            this.activeIndex = i;\n                            break;\n                        }\n                    }\n                }\n            }\n            this.selectedElement = this.liCollections[this.activeIndex];\n            this.timeElementValue(isNullOrUndefined(dateTimeVal) ? null : new Date(dateTimeVal));\n        }\n    };\n    DateTimePicker.prototype.setTimeValue = function (date, value) {\n        var dateString;\n        var time;\n        var val = this.validateMinMaxRange(value);\n        var newval = this.createDateObj(val);\n        if (this.getFormattedValue(newval) !== (!isNullOrUndefined(this.value) ? this.getFormattedValue(this.value) : null)) {\n            this.valueWithMinutes = isNullOrUndefined(newval) ? null : newval;\n            time = new Date(+this.valueWithMinutes);\n        }\n        else {\n            if (this.strictMode) {\n                //for strict mode case, when value not present within a range. Reset the nearest range value.\n                date = newval;\n            }\n            this.valueWithMinutes = this.checkDateValue(date);\n            time = new Date(+this.valueWithMinutes);\n        }\n        if (this.calendarMode === 'Gregorian') {\n            dateString = this.globalize.formatDate(time, {\n                format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n                type: 'dateTime', skeleton: 'yMd'\n            });\n        }\n        else {\n            dateString = this.globalize.formatDate(time, {\n                format: !isNullOrUndefined(this.formatString) ? this.formatString : this.cldrDateTimeFormat(),\n                type: 'dateTime', skeleton: 'yMd', calendar: 'islamic'\n            });\n        }\n        if (!this.strictMode && isNullOrUndefined(time)) {\n            Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n        }\n        else {\n            Input.setValue(dateString, this.inputElement, this.floatLabelType, this.showClearButton);\n        }\n        return time;\n    };\n    DateTimePicker.prototype.timeElementValue = function (value) {\n        if (!isNullOrUndefined(this.checkDateValue(value)) && !this.isNullOrEmpty(value)) {\n            var date = value instanceof Date ? value : this.getDateObject(value);\n            return this.setTimeValue(date, value);\n        }\n        return null;\n    };\n    DateTimePicker.prototype.timeKeyHandler = function (event) {\n        if (isNullOrUndefined(this.step) || this.step <= 0) {\n            return;\n        }\n        var listCount = this.timeCollections.length;\n        if (isNullOrUndefined(this.getTimeActiveElement()) || this.getTimeActiveElement().length === 0) {\n            if (this.liCollections.length > 0) {\n                if (isNullOrUndefined(this.value) && isNullOrUndefined(this.activeIndex)) {\n                    this.activeIndex = 0;\n                    this.selectedElement = this.liCollections[0];\n                    this.timeElementValue(new Date(this.timeCollections[0]));\n                }\n                else {\n                    this.findNextTimeElement(event);\n                }\n            }\n        }\n        else {\n            var nextItemValue = void 0;\n            if ((event.keyCode >= 37) && (event.keyCode <= 40)) {\n                var index = (event.keyCode === 40 || event.keyCode === 39) ? ++this.activeIndex : --this.activeIndex;\n                this.activeIndex = index = this.activeIndex === (listCount) ? 0 : this.activeIndex;\n                this.activeIndex = index = this.activeIndex < 0 ? (listCount - 1) : this.activeIndex;\n                nextItemValue = isNullOrUndefined(this.timeCollections[index]) ?\n                    this.timeCollections[0] : this.timeCollections[index];\n            }\n            else if (event.action === 'home') {\n                this.activeIndex = 0;\n                nextItemValue = this.timeCollections[0];\n            }\n            else if (event.action === 'end') {\n                this.activeIndex = listCount - 1;\n                nextItemValue = this.timeCollections[listCount - 1];\n            }\n            this.selectedElement = this.liCollections[this.activeIndex];\n            this.timeElementValue(new Date(nextItemValue));\n        }\n        this.isNavigate = true;\n        this.setTimeHover(this.selectedElement, NAVIGATION);\n        this.setTimeActiveDescendant();\n        if (this.isTimePopupOpen() && this.selectedElement !== null && (!event || event.type !== 'click')) {\n            this.setTimeScrollPosition();\n        }\n    };\n    DateTimePicker.prototype.timeKeyActionHandle = function (event) {\n        if (this.enabled) {\n            if (event.action !== 'right' && event.action !== 'left' && event.action !== 'tab') {\n                event.preventDefault();\n            }\n            switch (event.action) {\n                case 'up':\n                case 'down':\n                case 'home':\n                case 'end':\n                    this.timeKeyHandler(event);\n                    break;\n                case 'enter':\n                    if (this.isNavigate) {\n                        this.selectedElement = this.liCollections[this.activeIndex];\n                        this.valueWithMinutes = new Date(this.timeCollections[this.activeIndex]);\n                        this.setInputValue('time');\n                        if (+this.previousDateTime !== +this.value) {\n                            this.changedArgs.value = this.value;\n                            this.addTimeSelection();\n                            this.previousDateTime = this.value;\n                        }\n                    }\n                    else {\n                        this.updateValue(event);\n                    }\n                    this.hide(event);\n                    addClass([this.inputWrapper.container], INPUTFOCUS);\n                    this.isNavigate = false;\n                    event.stopPropagation();\n                    break;\n                case 'escape':\n                    this.hide(event);\n                    break;\n                default:\n                    this.isNavigate = false;\n                    break;\n            }\n        }\n    };\n    DateTimePicker.prototype.inputKeyAction = function (event) {\n        switch (event.action) {\n            case 'altDownArrow':\n                this.strictModeUpdate();\n                this.updateInput();\n                this.toggle(event);\n                break;\n        }\n    };\n    /**\n     * Called internally if any of the property value changed.\n     *\n     * @param {DateTimePickerModel} newProp - Returns the dynamic property value of the component.\n     * @param {DateTimePickerModel} oldProp - Returns the previous property value of the component.\n     * @returns {void}\n\n     */\n    DateTimePicker.prototype.onPropertyChanged = function (newProp, oldProp) {\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'value':\n                    this.isDynamicValueChanged = true;\n                    this.invalidValueString = null;\n                    this.checkInvalidValue(newProp.value);\n                    newProp.value = this.value;\n                    newProp.value = this.validateValue(newProp.value);\n                    if (this.enableMask) {\n                        Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n                    }\n                    else {\n                        Input.setValue(this.getFormattedValue(newProp.value), this.inputElement, this.floatLabelType, this.showClearButton);\n                    }\n                    this.valueWithMinutes = newProp.value;\n                    this.setProperties({ value: newProp.value }, true);\n                    if (this.popupObj) {\n                        this.popupUpdate();\n                    }\n                    this.previousDateTime = new Date(this.inputElement.value);\n                    this.updateInput();\n                    this.changeTrigger(null);\n                    this.preventChange = this.isAngular && this.preventChange ? !this.preventChange : this.preventChange;\n                    if (this.enableMask && this.value) {\n                        this.notify('createMask', {\n                            module: 'MaskedDateTime'\n                        });\n                    }\n                    break;\n                case 'min':\n                case 'max':\n                    this.getProperty(newProp, prop);\n                    this.updateInput();\n                    break;\n                case 'enableRtl':\n                    Input.setEnableRtl(this.enableRtl, [this.inputWrapper.container]);\n                    break;\n                case 'cssClass':\n                    if (!isNullOrUndefined(oldProp.cssClass)) {\n                        oldProp.cssClass = (oldProp.cssClass.replace(/\\s+/g, ' ')).trim();\n                    }\n                    if (!isNullOrUndefined(newProp.cssClass)) {\n                        newProp.cssClass = (newProp.cssClass.replace(/\\s+/g, ' ')).trim();\n                    }\n                    Input.setCssClass(newProp.cssClass, [this.inputWrapper.container], oldProp.cssClass);\n                    if (this.dateTimeWrapper) {\n                        Input.setCssClass(newProp.cssClass, [this.dateTimeWrapper], oldProp.cssClass);\n                    }\n                    break;\n                case 'locale':\n                    this.globalize = new Internationalization(this.locale);\n                    this.l10n.setLocale(this.locale);\n                    if (this.dateTimeOptions && this.dateTimeOptions.placeholder == null) {\n                        this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n                        Input.setPlaceholder(this.l10n.getConstant('placeholder'), this.inputElement);\n                    }\n                    this.dateTimeFormat = this.cldrDateTimeFormat();\n                    _super.prototype.updateInput.call(this);\n                    break;\n                case 'htmlAttributes':\n                    this.updateHtmlAttributeToElement();\n                    this.updateHtmlAttributeToWrapper();\n                    this.checkAttributes(true);\n                    break;\n                case 'format':\n                    this.setProperties({ format: newProp.format }, true);\n                    this.checkFormat();\n                    this.dateTimeFormat = this.formatString;\n                    this.setValue();\n                    if (this.enableMask) {\n                        this.notify('createMask', {\n                            module: 'MaskedDateTime'\n                        });\n                        if (!this.value) {\n                            Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n                        }\n                    }\n                    break;\n                case 'placeholder':\n                    Input.setPlaceholder(newProp.placeholder, this.inputElement);\n                    break;\n                case 'enabled':\n                    Input.setEnabled(this.enabled, this.inputElement);\n                    if (this.enabled) {\n                        this.inputElement.setAttribute('tabindex', this.tabIndex);\n                    }\n                    else {\n                        this.inputElement.tabIndex = -1;\n                    }\n                    break;\n                case 'strictMode':\n                    this.invalidValueString = null;\n                    this.updateInput();\n                    break;\n                case 'width':\n                    this.setWidth(newProp.width);\n                    Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n                    if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n                        this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n                    }\n                    break;\n                case 'readonly':\n                    Input.setReadonly(this.readonly, this.inputElement);\n                    break;\n                case 'floatLabelType':\n                    this.floatLabelType = newProp.floatLabelType;\n                    Input.removeFloating(this.inputWrapper);\n                    Input.addFloating(this.inputElement, this.floatLabelType, this.placeholder);\n                    if (!isNullOrUndefined(this.inputWrapper.buttons[0]) && !isNullOrUndefined(this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0]) && this.floatLabelType !== 'Never') {\n                        this.inputWrapper.container.getElementsByClassName('e-float-text-overflow')[0].classList.add('e-date-time-icon');\n                    }\n                    break;\n                case 'scrollTo':\n                    if (this.checkDateValue(new Date(this.checkValue(newProp.scrollTo)))) {\n                        if (this.dateTimeWrapper) {\n                            this.setScrollTo();\n                        }\n                        this.setProperties({ scrollTo: this.checkDateValue(new Date(this.checkValue(newProp.scrollTo))) }, true);\n                    }\n                    else {\n                        this.setProperties({ scrollTo: null }, true);\n                    }\n                    break;\n                case 'enableMask':\n                    if (this.enableMask) {\n                        this.notify('createMask', {\n                            module: 'MaskedDateTime'\n                        });\n                        Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n                    }\n                    else {\n                        if (this.inputElement.value === this.maskedDateValue) {\n                            this.maskedDateValue = '';\n                            Input.setValue(this.maskedDateValue, this.inputElement, this.floatLabelType, this.showClearButton);\n                        }\n                    }\n                    break;\n                default:\n                    _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n                    break;\n            }\n            if (!this.isDynamicValueChanged) {\n                this.hide(null);\n            }\n            this.isDynamicValueChanged = false;\n        }\n    };\n    /**\n     * To get component name.\n     *\n     * @returns {string} Returns the component name.\n     * @private\n     */\n    DateTimePicker.prototype.getModuleName = function () {\n        return 'datetimepicker';\n    };\n    DateTimePicker.prototype.restoreValue = function () {\n        this.previousDateTime = this.previousDate;\n        this.currentDate = this.value ? this.value : new Date();\n        this.valueWithMinutes = this.value;\n        this.previousDate = this.value;\n        this.previousElementValue = this.previousElementValue = (isNullOrUndefined(this.inputValueCopy)) ? '' :\n            this.getFormattedValue(this.inputValueCopy);\n    };\n    __decorate([\n        Property(null)\n    ], DateTimePicker.prototype, \"timeFormat\", void 0);\n    __decorate([\n        Property(30)\n    ], DateTimePicker.prototype, \"step\", void 0);\n    __decorate([\n        Property(null)\n    ], DateTimePicker.prototype, \"scrollTo\", void 0);\n    __decorate([\n        Property(1000)\n    ], DateTimePicker.prototype, \"zIndex\", void 0);\n    __decorate([\n        Property(null)\n    ], DateTimePicker.prototype, \"value\", void 0);\n    __decorate([\n        Property(null)\n    ], DateTimePicker.prototype, \"keyConfigs\", void 0);\n    __decorate([\n        Property({})\n    ], DateTimePicker.prototype, \"htmlAttributes\", void 0);\n    __decorate([\n        Property(false)\n    ], DateTimePicker.prototype, \"enablePersistence\", void 0);\n    __decorate([\n        Property(true)\n    ], DateTimePicker.prototype, \"allowEdit\", void 0);\n    __decorate([\n        Property(false)\n    ], DateTimePicker.prototype, \"isMultiSelection\", void 0);\n    __decorate([\n        Property(null)\n    ], DateTimePicker.prototype, \"values\", void 0);\n    __decorate([\n        Property(true)\n    ], DateTimePicker.prototype, \"showClearButton\", void 0);\n    __decorate([\n        Property(null)\n    ], DateTimePicker.prototype, \"placeholder\", void 0);\n    __decorate([\n        Property(false)\n    ], DateTimePicker.prototype, \"strictMode\", void 0);\n    __decorate([\n        Property(false)\n    ], DateTimePicker.prototype, \"fullScreenMode\", void 0);\n    __decorate([\n        Property(null)\n    ], DateTimePicker.prototype, \"serverTimezoneOffset\", void 0);\n    __decorate([\n        Property(new Date(1900, 0, 1))\n    ], DateTimePicker.prototype, \"min\", void 0);\n    __decorate([\n        Property(new Date(2099, 11, 31))\n    ], DateTimePicker.prototype, \"max\", void 0);\n    __decorate([\n        Property(null)\n    ], DateTimePicker.prototype, \"firstDayOfWeek\", void 0);\n    __decorate([\n        Property('Gregorian')\n    ], DateTimePicker.prototype, \"calendarMode\", void 0);\n    __decorate([\n        Property('Month')\n    ], DateTimePicker.prototype, \"start\", void 0);\n    __decorate([\n        Property('Month')\n    ], DateTimePicker.prototype, \"depth\", void 0);\n    __decorate([\n        Property(false)\n    ], DateTimePicker.prototype, \"weekNumber\", void 0);\n    __decorate([\n        Property(true)\n    ], DateTimePicker.prototype, \"showTodayButton\", void 0);\n    __decorate([\n        Property('Short')\n    ], DateTimePicker.prototype, \"dayHeaderFormat\", void 0);\n    __decorate([\n        Property(false)\n    ], DateTimePicker.prototype, \"openOnFocus\", void 0);\n    __decorate([\n        Property(false)\n    ], DateTimePicker.prototype, \"enableMask\", void 0);\n    __decorate([\n        Property({ day: 'day', month: 'month', year: 'year', hour: 'hour', minute: 'minute', second: 'second', dayOfTheWeek: 'day of the week' })\n    ], DateTimePicker.prototype, \"maskPlaceholder\", void 0);\n    __decorate([\n        Event()\n    ], DateTimePicker.prototype, \"open\", void 0);\n    __decorate([\n        Event()\n    ], DateTimePicker.prototype, \"close\", void 0);\n    __decorate([\n        Event()\n    ], DateTimePicker.prototype, \"cleared\", void 0);\n    __decorate([\n        Event()\n    ], DateTimePicker.prototype, \"blur\", void 0);\n    __decorate([\n        Event()\n    ], DateTimePicker.prototype, \"focus\", void 0);\n    __decorate([\n        Event()\n    ], DateTimePicker.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], DateTimePicker.prototype, \"destroyed\", void 0);\n    DateTimePicker = __decorate([\n        NotifyPropertyChanges\n    ], DateTimePicker);\n    return DateTimePicker;\n}(DatePicker));\nexport { DateTimePicker };\n","//! moment.js locale configuration\n//! locale : Swahili [sw]\n//! author : Fahad Kassim : https://github.com/fadsel\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sw = moment.defineLocale('sw', {\n        months: 'Januari_Februari_Machi_Aprili_Mei_Juni_Julai_Agosti_Septemba_Oktoba_Novemba_Desemba'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ago_Sep_Okt_Nov_Des'.split('_'),\n        weekdays:\n            'Jumapili_Jumatatu_Jumanne_Jumatano_Alhamisi_Ijumaa_Jumamosi'.split(\n                '_'\n            ),\n        weekdaysShort: 'Jpl_Jtat_Jnne_Jtan_Alh_Ijm_Jmos'.split('_'),\n        weekdaysMin: 'J2_J3_J4_J5_Al_Ij_J1'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'hh:mm A',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[leo saa] LT',\n            nextDay: '[kesho saa] LT',\n            nextWeek: '[wiki ijayo] dddd [saat] LT',\n            lastDay: '[jana] LT',\n            lastWeek: '[wiki iliyopita] dddd [saat] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s baadaye',\n            past: 'tokea %s',\n            s: 'hivi punde',\n            ss: 'sekunde %d',\n            m: 'dakika moja',\n            mm: 'dakika %d',\n            h: 'saa limoja',\n            hh: 'masaa %d',\n            d: 'siku moja',\n            dd: 'siku %d',\n            M: 'mwezi mmoja',\n            MM: 'miezi %d',\n            y: 'mwaka mmoja',\n            yy: 'miaka %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sw;\n\n})));\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HypotheticalTradeReportTemplate.vue?vue&type=style&index=0&id=865d7f0a&prod&lang=css\"","import { ComponentBase, gh, getProps, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { isUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nexport var properties = ['isLazyUpdate', 'plugins', 'checked', 'cssClass', 'disabled', 'enableHtmlSanitizer', 'enablePersistence', 'enableRtl', 'htmlAttributes', 'indeterminate', 'label', 'labelPosition', 'locale', 'name', 'value', 'change', 'created'];\nexport var modelProps = ['checked', 'indeterminate'];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0], watch = testProp[1], emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged', 'update:modelValue');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n    var props_1 = modelProps_1[_i];\n    emitProbs.push('update:' + props_1);\n}\n/**\n * Represents the Essential JS 2 VueJS CheckBox Component\n * ```html\n * <ejs-checkbox label='Default'></ejs-checkbox>\n * ```\n */\nexport var CheckBoxComponent = vueDefineComponent({\n    name: 'CheckBoxComponent',\n    mixins: [ComponentBase],\n    props: props,\n    watch: watch,\n    emits: emitProbs,\n    model: { event: 'modelchanged' },\n    provide: function () { return { custom: this.custom }; },\n    data: function () {\n        return {\n            ej2Instances: new CheckBox({}),\n            propKeys: properties,\n            models: modelProps,\n            hasChildDirective: false,\n            hasInjectedModules: false,\n            tagMapper: {},\n            tagNameMapper: {},\n            isVue3: !isExecute,\n            templateCollection: {},\n        };\n    },\n    created: function () {\n        this.ej2Instances._trigger = this.ej2Instances.trigger;\n        this.ej2Instances.trigger = this.trigger;\n        this.bindProperties();\n        this.ej2Instances._setProperties = this.ej2Instances.setProperties;\n        this.ej2Instances.setProperties = this.setProperties;\n        this.ej2Instances.clearTemplate = this.clearTemplate;\n        this.updated = this.updated;\n    },\n    render: function (createElement) {\n        var h = !isExecute ? gh : createElement;\n        var slots = null;\n        if (!isNullOrUndefined(this.$slots.default)) {\n            slots = !isExecute ? this.$slots.default() : this.$slots.default;\n        }\n        return h('input', slots);\n    },\n    methods: {\n        clearTemplate: function (templateNames) {\n            if (!templateNames) {\n                templateNames = Object.keys(this.templateCollection || {});\n            }\n            if (templateNames.length && this.templateCollection) {\n                for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n                    var tempName = templateNames_1[_i];\n                    var elementCollection = this.templateCollection[tempName];\n                    if (elementCollection && elementCollection.length) {\n                        for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n                            var ele = elementCollection_1[_a];\n                            var destroy = getValue('__vue__.$destroy', ele);\n                            if (destroy) {\n                                ele.__vue__.$destroy();\n                            }\n                            if (ele.innerHTML) {\n                                ele.innerHTML = '';\n                            }\n                        }\n                        delete this.templateCollection[tempName];\n                    }\n                }\n            }\n        },\n        setProperties: function (prop, muteOnChange) {\n            var _this = this;\n            if (this.isVue3) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if (this.ej2Instances && this.ej2Instances._setProperties) {\n                this.ej2Instances._setProperties(prop, muteOnChange);\n            }\n            if (prop && this.models && this.models.length) {\n                Object.keys(prop).map(function (key) {\n                    _this.models.map(function (model) {\n                        if ((key === model) && !(/datasource/i.test(key))) {\n                            if (_this.isVue3) {\n                                _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n                            }\n                            else {\n                                _this.$emit('update:' + key, prop[key]);\n                                _this.$emit('modelchanged', prop[key]);\n                            }\n                        }\n                    });\n                });\n            }\n        },\n        trigger: function (eventName, eventProp, successHandler) {\n            if (!isExecute) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if ((eventName === 'change' || eventName === 'input') && this.models && (this.models.length !== 0)) {\n                var key = this.models.toString().match(/checked|value/) || [];\n                var propKey = key[0];\n                if (eventProp && key && !isUndefined(eventProp[propKey])) {\n                    if (!isExecute) {\n                        this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('update:modelValue', eventProp[propKey]);\n                    }\n                    else {\n                        if (eventName === 'change' || (this.$props && !this.$props.isLazyUpdate)) {\n                            this.$emit('update:' + propKey, eventProp[propKey]);\n                            this.$emit('modelchanged', eventProp[propKey]);\n                        }\n                    }\n                }\n            }\n            else if ((eventName === 'actionBegin' && eventProp.requestType === 'dateNavigate') && this.models && (this.models.length !== 0)) {\n                var key = this.models.toString().match(/currentView|selectedDate/) || [];\n                var propKey = key[0];\n                if (eventProp && key && !isUndefined(eventProp[propKey])) {\n                    if (!isExecute) {\n                        this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n                    }\n                    else {\n                        this.$emit('update:' + propKey, eventProp[propKey]);\n                        this.$emit('modelchanged', eventProp[propKey]);\n                    }\n                }\n            }\n            if ((this.ej2Instances && this.ej2Instances._trigger)) {\n                this.ej2Instances._trigger(eventName, eventProp, successHandler);\n            }\n        },\n        custom: function () {\n            this.updated();\n        },\n        click: function () {\n            return this.ej2Instances.click();\n        },\n        focusIn: function () {\n            return this.ej2Instances.focusIn();\n        },\n    }\n});\nexport var CheckBoxPlugin = {\n    name: 'ejs-checkbox',\n    install: function (Vue) {\n        Vue.component(CheckBoxPlugin.name, CheckBoxComponent);\n    }\n};\n","import { Query, DataManager, Deferred } from '@syncfusion/ej2-data';\n/**\n * data module is used to generate query and dataSource\n */\nvar Data = /** @class */ (function () {\n    /**\n     * Constructor for data module\n     *\n     * @param dataSource\n     * @param query\n     * @param dataSource\n     * @param query\n     * @private\n     */\n    function Data(dataSource, query) {\n        this.initDataManager(dataSource, query);\n    }\n    /**\n     * The function used to initialize dataManager and query\n     *\n     * @param dataSource\n     * @param query\n     * @param dataSource\n     * @param query\n     * @returns {void}\n     * @private\n     */\n    Data.prototype.initDataManager = function (dataSource, query) {\n        this.dataManager = dataSource instanceof DataManager ? dataSource : new DataManager(dataSource);\n        this.query = query instanceof Query ? query : new Query();\n    };\n    /**\n     * The function used to generate updated Query from chart model\n     *\n     * @returns {void}\n     * @private\n     */\n    Data.prototype.generateQuery = function () {\n        var query = this.query.clone();\n        return query;\n    };\n    /**\n     * The function used to get dataSource by executing given Query\n     *\n     * @param  {Query} query - A Query that specifies to generate dataSource\n     * @returns {void}\n     * @private\n     */\n    Data.prototype.getData = function (dataQuery) {\n        var _this = this;\n        if (this.dataManager.ready) {\n            var dataManagerDeferred_1 = new Deferred();\n            var ready = this.dataManager.ready;\n            ready.then(function () {\n                _this.dataManager.executeQuery(dataQuery).then(function (result) {\n                    dataManagerDeferred_1.resolve(result);\n                });\n            }).catch(function (e) { dataManagerDeferred_1.reject(e); });\n            return dataManagerDeferred_1.promise;\n        }\n        else {\n            return this.dataManager.executeQuery(dataQuery);\n        }\n    };\n    return Data;\n}());\nexport { Data };\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"appContractReports\"}},[_vm._m(0),_c('ejs-tab',{ref:\"contractReportTabs\",attrs:{\"id\":\"element\",\"selectedItem\":_vm.selectedItem}},[_c('e-tabitems',[_c('e-tabitem',{attrs:{\"header\":_vm.headerText0,\"content\":_vm.PositionReportTemplate}}),_c('e-tabitem',{attrs:{\"header\":_vm.headerText1,\"content\":_vm.M2MReportTemplate}}),_c('e-tabitem',{attrs:{\"header\":_vm.headerText9,\"content\":_vm.VolumeReportTemplate}}),_c('e-tabitem',{attrs:{\"header\":_vm.headerText3,\"content\":_vm.CostAndPricingReportTemplate}}),_c('e-tabitem',{attrs:{\"header\":_vm.headerText4,\"content\":_vm.ContractAlertsReportTemplate}}),_c('e-tabitem',{attrs:{\"header\":_vm.headerText5,\"content\":_vm.HedgingOverviewReportTemplate}}),_c('e-tabitem',{attrs:{\"header\":_vm.headerText6,\"content\":_vm.TicketsReportTemplate}}),_c('e-tabitem',{attrs:{\"header\":_vm.headerText8,\"content\":_vm.TicketsLogsReportTemplate}}),_c('e-tabitem',{attrs:{\"header\":_vm.headerText7,\"content\":_vm.hypotheticalTradesTemplate}})],1)],1)],1)}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"c-subheader\"},[_c('h5',{attrs:{\"id\":\"headerContract\"}})])}]\n\nexport { render, staticRenderFns }","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"niceAndNeat\"}},[_c('div',{staticClass:\"row\",attrs:{\"id\":\"contractOveriew\"}},[_c('div',{staticClass:\"e-card\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-lg-8\",staticStyle:{\"padding\":\"2%\"},attrs:{\"id\":\"contractInfo\"}},[_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-textbox',{attrs:{\"id\":\"clientName\",\"name\":\"clientName\",\"disabled\":true,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"placeholder\":\"Client Name\"},model:{value:(_vm.data.clientName),callback:function ($$v) {_vm.$set(_vm.data, \"clientName\", $$v)},expression:\"data.clientName\"}})],1),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-datepicker',{attrs:{\"id\":\"startDate\",\"name\":\"startDate\",\"disabled\":true,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"placeholder\":\"Start Date\",\"firstDayOfWeek\":1,\"format\":\"dd/MM/yyyy\"},model:{value:(_vm.data.startDate),callback:function ($$v) {_vm.$set(_vm.data, \"startDate\", $$v)},expression:\"data.startDate\"}})],1)]),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-textbox',{attrs:{\"id\":\"country\",\"name\":\"country\",\"disabled\":true,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"placeholder\":\"Country\"},model:{value:(_vm.data.country),callback:function ($$v) {_vm.$set(_vm.data, \"country\", $$v)},expression:\"data.country\"}})],1),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-datepicker',{attrs:{\"id\":\"endDate\",\"name\":\"endDate\",\"disabled\":true,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"placeholder\":\"End Date\",\"firstDayOfWeek\":1,\"format\":\"dd/MM/yyyy\"},model:{value:(_vm.data.endDate),callback:function ($$v) {_vm.$set(_vm.data, \"endDate\", $$v)},expression:\"data.endDate\"}})],1)]),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-textbox',{attrs:{\"id\":\"companyName\",\"name\":\"companyName\",\"disabled\":true,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"placeholder\":\"Company\"},on:{\"change\":_vm.checkFields},model:{value:(_vm.companyName),callback:function ($$v) {_vm.companyName=$$v},expression:\"companyName\"}})],1),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{attrs:{\"id\":\"strategy\",\"name\":\"strategy\",\"enabled\":_vm.strategyDisabled,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"fields\":{text: 'name', value: 'id' },\"dataSource\":_vm.strategys,\"placeholder\":\"Strategy\"},model:{value:(_vm.data.strategy),callback:function ($$v) {_vm.$set(_vm.data, \"strategy\", $$v)},expression:\"data.strategy\"}})],1)]),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-textbox',{attrs:{\"id\":\"utility\",\"name\":\"utility\",\"disabled\":true,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"placeholder\":\"Utility\"},model:{value:(_vm.data.utility),callback:function ($$v) {_vm.$set(_vm.data, \"utility\", $$v)},expression:\"data.utility\"}})],1),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-datepicker',{attrs:{\"id\":\"signedDate\",\"name\":\"signedDate\",\"disabled\":true,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"placeholder\":\"Strategy Signed Date\",\"format\":\"dd/MM/yyyy\"},model:{value:(_vm.data.signedDate),callback:function ($$v) {_vm.$set(_vm.data, \"signedDate\", $$v)},expression:\"data.signedDate\"}})],1)]),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-textbox',{attrs:{\"id\":\"riskManager\",\"name\":\"riskManager\",\"disabled\":true,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"placeholder\":\"Risk Manager\"},model:{value:(_vm.data.riskManager),callback:function ($$v) {_vm.$set(_vm.data, \"riskManager\", $$v)},expression:\"data.riskManager\"}})],1),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-textbox',{attrs:{\"id\":\"strategyType\",\"name\":\"strategyType\",\"disabled\":true,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"placeholder\":\"Strategy Type\"},model:{value:(_vm.data.strategyType),callback:function ($$v) {_vm.$set(_vm.data, \"strategyType\", $$v)},expression:\"data.strategyType\"}})],1)]),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-textbox',{attrs:{\"id\":\"supplier\",\"name\":\"supplier\",\"disabled\":true,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"placeholder\":\"Supplier\"},model:{value:(_vm.data.supplier),callback:function ($$v) {_vm.$set(_vm.data, \"supplier\", $$v)},expression:\"data.supplier\"}})],1),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-textbox',{attrs:{\"id\":\"alerts\",\"name\":\"alerts\",\"disabled\":true,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"placeholder\":\"Alerts\"},model:{value:(_vm.data.alerts),callback:function ($$v) {_vm.$set(_vm.data, \"alerts\", $$v)},expression:\"data.alerts\"}})],1)]),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-textbox',{attrs:{\"id\":\"annualVolume\",\"name\":\"annualVolume\",\"disabled\":true,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"placeholder\":\"Annual Volume\",\"format\":\"n3\"},model:{value:(_vm.annualVolume),callback:function ($$v) {_vm.annualVolume=$$v},expression:\"annualVolume\"}})],1),(_vm.showPriceAreaSectionPosition)?_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-textbox',{attrs:{\"id\":\"pricingAreaNames\",\"name\":\"pricingAreaNames\",\"disabled\":true,\"width\":\"80%\",\"floatLabelType\":\"Auto\",\"placeholder\":\"Price Areas\"},model:{value:(_vm.pricingAreaNames),callback:function ($$v) {_vm.pricingAreaNames=$$v},expression:\"pricingAreaNames\"}})],1):_vm._e()])]),_c('div',{staticClass:\"col-lg-4 pt-5\",attrs:{\"id\":\"buttons\"}},[_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"col mt-5 mb-2 d-flex justify-content-center\"},[_c('ejs-button',{attrs:{\"cssClass\":\"e-primary\"},nativeOn:{\"click\":function($event){return _vm.btnDownloadFullReport($event)}}},[_vm._v(\"Full Position Report\")])],1)]),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"col mt-3 mb-4 d-flex justify-content-center\"},[_c('ejs-button',{attrs:{\"cssClass\":\"e-primary\"},nativeOn:{\"click\":function($event){return _vm.btnDownloadPositionReport($event)}}},[_vm._v(\"Position Summary\")])],1)]),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"col mt-5 mb-2 pt-5 d-flex justify-content-center\"},[_c('ejs-dropdownbutton',{ref:\"btnViewContracts\",attrs:{\"name\":\"btnViewContracts\",\"disabled\":true,\"id\":\"btnViewContracts\",\"cssClass\":\"alfa-light-purple\",\"items\":_vm.contractFileitems,\"select\":_vm.onViewContractClick}},[_vm._v(\"View Contracts\")])],1)]),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"col mt-3 d-flex justify-content-center\"},[_c('ejs-dropdownbutton',{ref:\"btnViewStrategy\",attrs:{\"name\":\"btnViewStrategy\",\"id\":\"btnViewStrategy\",\"disabled\":true,\"cssClass\":\"alfa-light-purple\",\"items\":_vm.contractStrategyFileItems,\"select\":_vm.onViewStrategyClick}},[_vm._v(\"View Strategy\")])],1)])])])])]),_c('div',{staticClass:\"row\",attrs:{\"id\":\"PositionData\"}},[_c('div',{staticClass:\"e-card mt-2\"},[_c('div',{staticClass:\"form-group\"},[_c('div',{staticClass:\"col-sm-3 m-2 d-flex\"},[_c('ejs-dropdownlist',{ref:\"reportingView\",attrs:{\"id\":\"dplReportingView\",\"name\":\"dplReportingView\",\"width\":\"68%\",\"dataSource\":_vm.reportingView,\"fields\":{text: 'name', value: 'id' },\"select\":_vm.onReportViewSelect,\"placeholder\":\"Reporting View\",\"floatLabelType\":\"Auto\"}})],1),_c('div',{staticClass:\"col-sm-3 m-2 d-flex\"},[_c('ejs-dropdownlist',{ref:\"dplCurrency\",staticStyle:{\"width\":\"100%\"},attrs:{\"id\":\"currency\",\"name\":\"currency\",\"change\":_vm.onCurrencyChange,\"dataSource\":_vm.currencies,\"fields\":{ text: 'name', value: 'currencyId' },\"placeholder\":\"Currency\",\"floatLabelType\":\"Auto\",\"showClearButton\":true},model:{value:(_vm.data.currencyId),callback:function ($$v) {_vm.$set(_vm.data, \"currencyId\", $$v)},expression:\"data.currencyId\"}}),_c('ejs-checkbox',{attrs:{\"cssClass\":\"postionCheck check-d\",\"change\":_vm.onCheckPostionDefault,\"label\":\"Default Mechanism\",\"id\":\"positionSummaryCheck\",\"name\":\"checkName\",\"floatLabelType\":\"Auto\"}})],1)]),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col m-3\"},[_c('ejs-grid',{ref:\"grid\",attrs:{\"dataSource\":_vm.gridData,\"allowPaging\":false,\"allowResizing\":true,\"allowReordering\":false,\"allowSorting\":false,\"autoFit\":false,\"queryCellInfo\":_vm.customiseCell}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"yearName\",\"headerText\":\"Year\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"totalContractedVolumeInContractTradingUnit\",\"headerText\":\"Total Contracted Volume\",\"format\":\"n2\"}}),_c('e-column',{attrs:{\"headerText\":\"FIXED\",\"columns\":_vm.fixedColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"OPEN\",\"columns\":_vm.openColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"M2M\",\"columns\":_vm.m2mColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"Reference\",\"columns\":_vm.referenceColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"Variance to Reference\",\"columns\":_vm.varianceColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"YoY\",\"columns\":_vm.YoYColumns,\"textAlign\":\"Center\"}})],1)],1)],1)])])]),_vm._m(0)])}\nvar staticRenderFns = [function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"additionalComponents\"}},[_c('div',{attrs:{\"id\":\"positionSpinner\"}})])}]\n\nexport { render, staticRenderFns }","<template>\r\n    <div id=\"niceAndNeat\">\r\n        <div id=\"contractOveriew\" class=\"row\">\r\n            <div class=\"e-card\">\r\n                <div class=\"row\">\r\n                    <div id=\"contractInfo\" class=\"col-lg-8\" style=\"padding: 2%;\">\r\n                        <div class=\"form-row\">\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-textbox id='clientName' name=\"clientName\" :disabled=\"true\" width=\"80%\" floatLabelType=\"Auto\" v-model=\"data.clientName\" placeholder=\"Client Name\"></ejs-textbox>\r\n                            </div>\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-datepicker id='startDate' name=\"startDate\" :disabled=\"true\" width=\"80%\" floatLabelType=\"Auto\" v-model=\"data.startDate\" placeholder=\"Start Date\" :firstDayOfWeek=\"1\" format=\"dd/MM/yyyy\"></ejs-datepicker>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"form-row\">\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-textbox id='country' name=\"country\" :disabled=\"true\" width=\"80%\" floatLabelType=\"Auto\" v-model=\"data.country\" placeholder=\"Country\"></ejs-textbox>\r\n                            </div>\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-datepicker id='endDate' name=\"endDate\" :disabled=\"true\" width=\"80%\" floatLabelType=\"Auto\" v-model=\"data.endDate\" placeholder=\"End Date\" :firstDayOfWeek=\"1\" format=\"dd/MM/yyyy\"></ejs-datepicker>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"form-row\">\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-textbox id='companyName' name=\"companyName\" :disabled=\"true\" width=\"80%\" floatLabelType=\"Auto\" v-model=\"companyName\" placeholder=\"Company\"  @change=\"checkFields\"></ejs-textbox>\r\n                            </div>\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-dropdownlist id='strategy' name=\"strategy\" :enabled='strategyDisabled' width=\"80%\" floatLabelType=\"Auto\" v-model=\"data.strategy\" :fields=\"{text: 'name', value: 'id' }\" :dataSource='strategys' placeholder=\"Strategy\"></ejs-dropdownlist>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"form-row\">\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-textbox id='utility' name=\"utility\" :disabled=\"true\" width=\"80%\" floatLabelType=\"Auto\" v-model=\"data.utility\" placeholder=\"Utility\"></ejs-textbox>\r\n                            </div>\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-datepicker id='signedDate' name=\"signedDate\" :disabled=\"true\" width=\"80%\" floatLabelType=\"Auto\" v-model=\"data.signedDate\" placeholder=\"Strategy Signed Date\" format=\"dd/MM/yyyy\"></ejs-datepicker>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"form-row\">\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-textbox id='riskManager' name=\"riskManager\" :disabled=\"true\" width=\"80%\" floatLabelType=\"Auto\" v-model=\"data.riskManager\" placeholder=\"Risk Manager\"></ejs-textbox>\r\n                            </div>\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-textbox id='strategyType' name=\"strategyType\" :disabled=\"true\" width=\"80%\" floatLabelType=\"Auto\" v-model=\"data.strategyType\" placeholder=\"Strategy Type\"></ejs-textbox>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"form-row\">\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-textbox id='supplier' name=\"supplier\" :disabled=\"true\" width=\"80%\" floatLabelType=\"Auto\" v-model=\"data.supplier\" placeholder=\"Supplier\"></ejs-textbox>\r\n                            </div>\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-textbox id='alerts' name=\"alerts\" :disabled=\"true\" width=\"80%\" floatLabelType=\"Auto\" v-model=\"data.alerts\" placeholder=\"Alerts\"></ejs-textbox>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"form-row\">\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-textbox id='annualVolume' name=\"annualVolume\" :disabled=\"true\" width=\"80%\" floatLabelType=\"Auto\" v-model=\"annualVolume\" placeholder=\"Annual Volume\" format=\"n3\"></ejs-textbox>\r\n                            </div>\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\" v-if=\"showPriceAreaSectionPosition\">\r\n                                <ejs-textbox id='pricingAreaNames' name=\"pricingAreaNames\" :disabled=\"true\" width=\"80%\"  floatLabelType=\"Auto\" v-model='pricingAreaNames' placeholder=\"Price Areas\"></ejs-textbox>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                    <div id=\"buttons\" class=\"col-lg-4 pt-5\">\r\n                        <div class=\"form-row\">\r\n                            <div class=\"col mt-5 mb-2 d-flex justify-content-center\">\r\n                                <ejs-button cssClass=\"e-primary\" v-on:click.native='btnDownloadFullReport'>Full Position Report</ejs-button>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"form-row\">\r\n                            <div class=\"col mt-3 mb-4 d-flex justify-content-center\">\r\n                                <ejs-button cssClass=\"e-primary\" v-on:click.native='btnDownloadPositionReport'>Position Summary</ejs-button>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"form-row\">\r\n                            <div class=\"col mt-5 mb-2 pt-5 d-flex justify-content-center\">\r\n                                <ejs-dropdownbutton ref=\"btnViewContracts\" name=\"btnViewContracts\" :disabled=\"true\" id=\"btnViewContracts\" cssClass=\"alfa-light-purple\" :items='contractFileitems' :select=\"onViewContractClick\">View Contracts</ejs-dropdownbutton>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"form-row\">\r\n                            <div class=\"col mt-3 d-flex justify-content-center\">\r\n                                <ejs-dropdownbutton ref=\"btnViewStrategy\" name=\"btnViewStrategy\" id=\"btnViewStrategy\" :disabled=\"true\" cssClass=\"alfa-light-purple\" :items='contractStrategyFileItems' :select='onViewStrategyClick'>View Strategy</ejs-dropdownbutton>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <div id=\"PositionData\" class=\"row\">\r\n            <div class=\"e-card mt-2\">\r\n                <div class=\"form-group\">\r\n                    <div class=\"col-sm-3 m-2 d-flex\">\r\n                        <ejs-dropdownlist id=\"dplReportingView\" name=\"dplReportingView\" ref=\"reportingView\" width=\"68%\" :dataSource='reportingView' :fields=\"{text: 'name', value: 'id' }\" :select='onReportViewSelect' placeholder=\"Reporting View\" floatLabelType='Auto'></ejs-dropdownlist>\r\n                        \r\n                    </div>\r\n                    <div class=\"col-sm-3 m-2 d-flex\">\r\n                        <ejs-dropdownlist ref='dplCurrency' id=\"currency\" name=\"currency\" style=\"width: 100%;\" v-model=\"data.currencyId\" :change=\"onCurrencyChange\" :dataSource='currencies' :fields=\"{ text: 'name', value: 'currencyId' }\" placeholder=\"Currency\" floatLabelType='Auto' :showClearButton='true'></ejs-dropdownlist>\r\n                        <ejs-checkbox cssClass=\"postionCheck check-d\" :change=\"onCheckPostionDefault\" label='Default Mechanism' id=\"positionSummaryCheck\" name=\"checkName\" floatLabelType='Auto'></ejs-checkbox>\r\n                    </div>\r\n                </div>\r\n                <div class=\"row\">\r\n                    <div class=\"col m-3\">\r\n                        <ejs-grid ref='grid'\r\n                                  :dataSource='gridData'\r\n                                  :allowPaging='false'\r\n                                  :allowResizing='true'\r\n                                  :allowReordering='false'\r\n                                  :allowSorting='false'\r\n                                  :autoFit='false'\r\n                                  :queryCellInfo='customiseCell'>\r\n                            <e-columns>\r\n                                <e-column field='yearName' headerText='Year' width=120></e-column>\r\n                                <e-column field='totalContractedVolumeInContractTradingUnit' headerText='Total Contracted Volume' format=\"n2\"></e-column>\r\n                                <e-column headerText='FIXED' :columns='fixedColumns' textAlign=\"Center\"></e-column>\r\n                                <e-column headerText='OPEN' :columns='openColumns' textAlign=\"Center\"></e-column>\r\n                                <e-column headerText='M2M' :columns='m2mColumns' textAlign=\"Center\"></e-column>\r\n                                <e-column field='Reference' :columns='referenceColumns' textAlign=\"Center\"></e-column>\r\n                                <e-column field='Variance to Reference' :columns='varianceColumns' textAlign=\"Center\"></e-column>\r\n                                <e-column field='YoY' :columns='YoYColumns' textAlign=\"Center\"></e-column>\r\n                            </e-columns>\r\n                        </ejs-grid>\r\n                    </div>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <div id=\"additionalComponents\">\r\n            <div id=\"positionSpinner\"></div>\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n    import Vue from \"vue\";\r\n    import { GridPlugin } from \"@syncfusion/ej2-vue-grids\";\r\n    import { ButtonPlugin } from \"@syncfusion/ej2-vue-buttons\";\r\n    import { DialogPlugin, DialogUtility } from '@syncfusion/ej2-vue-popups';\r\n    import { TextBoxPlugin } from \"@syncfusion/ej2-vue-inputs\";\r\n    import { CheckBoxPlugin, CheckBox } from \"@syncfusion/ej2-vue-buttons\";\r\n    import apis from '../../common/network'\r\n    import urls from '../../common/urls';\r\n    import gridOptions from '../../common/gridOptions'\r\n    import store from '../../store';\r\n    import router from '../../router/index';\r\n    import { DatePickerPlugin, DatePicker } from '@syncfusion/ej2-vue-calendars';\r\n    import { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\r\n    import { isNullOrUndefined } from '@syncfusion/ej2-base';\r\n    import { DropDownButtonPlugin } from \"@syncfusion/ej2-vue-splitbuttons\";\r\n    import SyncHelper from '../../common/syncfusion';\r\n\r\n    Vue.use(DatePickerPlugin);\r\n    Vue.use(ButtonPlugin);\r\n    Vue.use(DialogPlugin);\r\n    Vue.use(TextBoxPlugin);\r\n    Vue.use(GridPlugin);\r\n    Vue.use(DropDownButtonPlugin);\r\n    Vue.use(CheckBoxPlugin);\r\n\r\n    export default {\r\n        name: 'PositionSummaryReport',\r\n        created() {\r\n        },\r\n        data() {\r\n            return {\r\n                data: {},\r\n                unit: null,\r\n                currency: null,\r\n                currencyId: null,\r\n                value: null,\r\n                companyName: null,\r\n                firstIndexCurrency: 3,\r\n                strategyDisabled: false,\r\n                target: '#target',\r\n                width: '250px',\r\n                header: 'Dialog',\r\n                visible: false,\r\n                contractFileitems: [],\r\n                contractStrategyFileItems: [],\r\n                strategyFileUrls: [],\r\n                strategyList: [],\r\n                strategyFileUrl: \"\",\r\n                gridData: {},\r\n                annualVolume: \"\",\r\n                pricingAreaNames: \"\",\r\n                showPriceAreaSectionPosition: false,\r\n                filterOptions: gridOptions.filterSettings,\r\n                pageSettings: gridOptions.pageSettings,\r\n                reportingView: [{ \"name\": \"CAL\", \"id\": 1 }, { \"name\": \"FIY\", \"id\": 2 }, { \"name\": \"12M\", \"id\": 3 }],\r\n                strategys: [{ \"name\": \"Yes\", \"id\": true }, { \"name\": \"No\", \"id\": false }],\r\n                fixedColumns: [\r\n                    {\r\n                        field: 'fixedVolumePercentage',\r\n                        headerText: 'Volume %',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n1\"\r\n                    },\r\n                    {\r\n                        field: 'fixedPrice',\r\n                        headerText: 'Price',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n3\"\r\n                    }\r\n                ],\r\n                openColumns: [\r\n                    {\r\n                        field: 'openVolumePercentage',\r\n                        headerText: 'Volume %',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n1\"\r\n                    },\r\n                    {\r\n                        field: 'openPrice',\r\n                        headerText: 'Price',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n3\"\r\n                    }\r\n                ],\r\n                m2mColumns: [\r\n                    {\r\n                        field: 'm2mPrice',\r\n                        headerText: 'Price',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n3\"\r\n                    },\r\n                    {\r\n                        field: 'm2mValue',\r\n                        headerText: 'Value',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n0\"\r\n                    }\r\n                ],\r\n                referenceColumns: [\r\n                    {\r\n                        field: 'referencePrice',\r\n                        headerText: 'Price',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n3\"\r\n                    },\r\n                    {\r\n                        field: 'referenceValue',\r\n                        headerText: 'Value',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n0\"\r\n                    }\r\n                ],\r\n                varianceColumns: [\r\n                    {\r\n                        field: 'variancePrice',\r\n                        headerText: 'Price',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n3\"\r\n                    },\r\n                    {\r\n                        field: 'varianceValue',\r\n                        headerText: 'Value',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n0\"\r\n                    }\r\n                ],\r\n                YoYColumns: [\r\n                    {\r\n                        field: 'yoyDifferencePrice',\r\n                        headerText: 'Value',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n0\"\r\n                    },\r\n                    {\r\n                        field: 'yoyDifferencePercentage',\r\n                        headerText: '%',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n1\"\r\n                    }\r\n                ],\r\n\r\n            }\r\n        },\r\n        computed: {\r\n            currencies() {\r\n                return SyncHelper.getDataManager(\"utils/currenciesAvailable?contractId=\" + store.state.reportContractId);\r\n            }\r\n        },\r\n        mounted() {\r\n            createSpinner({\r\n                target: document.getElementById('positionSpinner')\r\n            });\r\n            createSpinner({\r\n                target: document.getElementById('mainSpinner'),\r\n                width: '50',\r\n                type: 'Material',\r\n                label: 'Loading data...',\r\n                cssClass: 'loading'\r\n            });\r\n            showSpinner(document.getElementById('positionSpinner'));\r\n            showSpinner(document.getElementById('mainSpinner'));\r\n            this.$refs.reportingView.ej2Instances.value = 1;\r\n            this.getPositionData(\"CAL\");\r\n            this.getContractData();\r\n        },\r\n        methods: {\r\n            btnDownloadFullReport: function (e) {\r\n                showSpinner(document.getElementById('positionSpinner'));\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                /*this.currencySymbol = document.getElementById('currency').value.split(' - ')[0];*/\r\n                let currencyId = this.currencyId;\r\n                apis.protectedApi(`${urls.apiBaseUrl}ReportTemplate/generateFullContractReport/${store.state.reportContractId}?currencyId=${currencyId == undefined ? \"\" : currencyId}\r\n                &defaultM=${store.state.isCheckDefaultM == undefined ? \"\" : store.state.isCheckDefaultM}`).then(it => {\r\n                    window.open(it.data.reportUri);\r\n                    hideSpinner(document.getElementById('positionSpinner'));\r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                }).catch(\r\n                    response => {\r\n                        hideSpinner(document.getElementById('positionSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    }\r\n                );\r\n\r\n            },\r\n            onCheckPostionDefault: function (args) {\r\n             \r\n                store.state.isCheckDefaultM = args.checked;\r\n                //let m = document.getElementsByName('checkName');\r\n\r\n                //for (var i = 0; i < m.length; i++) {\r\n \r\n                //    m[i].ej2_instances[0].checked = args.checked;\r\n                       \r\n               \r\n               /// }\r\n                let selected = document.getElementById('dplReportingView').value;\r\n                this.currencyId = this.$refs.dplCurrency.ej2Instances.value;\r\n\r\n                this.getPositionData(selected, this.currencyId);\r\n            },\r\n            onCurrencyChange: function (args) {\r\n                if (args.isInteracted == true) {\r\n                    this.currencyId = args.itemData.currencyId;\r\n\r\n                    let selected = document.getElementById('dplReportingView').value;\r\n                    this.getPositionData(selected, this.currencyId);\r\n                }\r\n\r\n\r\n            },\r\n            btnDownloadPositionReport: function (e) {\r\n                showSpinner(document.getElementById('positionSpinner'));\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                let currencyId = this.$refs.dplCurrency.ej2Instances.value;\r\n                apis.protectedApi(`${urls.apiBaseUrl}ReportTemplate/generatePositionReportPage/${store.state.reportContractId}?currencyId=${currencyId == undefined ? \"\" : currencyId}\r\n                &defaultM=${store.state.isCheckDefaultM == undefined ? \"\" : store.state.isCheckDefaultM}`).then(it => {\r\n                    window.open(it.data.reportUri);\r\n                    hideSpinner(document.getElementById('positionSpinner'));\r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                }).catch(\r\n                    response => {\r\n                        hideSpinner(document.getElementById('positionSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    }\r\n                );\r\n            },\r\n            //this is for contract files, if it is pdf it will continue on pdf viewer, or non pdf\r\n            //it will download file\r\n            onViewContractClick: function (e) {\r\n\r\n                var item = e.element.textContent.split(\".\");\r\n                var pdfFile = \"\";\r\n                for (var i = 0; i < item.length; i++) {\r\n                    if (item[i] == \"pdf\") {\r\n                        pdfFile = item[i];\r\n                    }\r\n                }\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                showSpinner(document.getElementById('positionSpinner'));\r\n                if (pdfFile == \"pdf\") {\r\n                    var filePdf = this.getContractStrategyUrlPdf(e.element.id);\r\n                    var contractName = document.getElementById('headerContract');\r\n                    router.push({ name: \"PDFViewer\", params: { fileName: filePdf[0].id, contract: contractName.textContent } });\r\n                } else {\r\n                    const link = document.createElement('a');\r\n                    link.href = e.element.id;\r\n                    link.click();\r\n                }\r\n                hideSpinner(document.getElementById('positionSpinner'));\r\n                hideSpinner(document.getElementById('mainSpinner'));\r\n\r\n            },\r\n            //this is for strategy files, if it is pdf it will continue on pdf viewer, or non pdf\r\n            //it will download file\r\n            onViewStrategyClick: function (e) {\r\n                var item = e.element.textContent.split(\".\");\r\n                var pdfFile = \"\";\r\n                for (var i = 0; i < item.length; i++) {\r\n                    if (item[i] == \"pdf\") {\r\n                        pdfFile = item[i];\r\n                    }\r\n                }\r\n                showSpinner(document.getElementById('positionSpinner'));\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                if (pdfFile == \"pdf\") {\r\n                    var filePdf = this.getContractStrategyUrlPdf(e.element.id);\r\n                    var contractName = document.getElementById('headerContract');\r\n                    router.push({ name: \"PDFViewer\", params: { fileName: filePdf[0].id, contract: contractName.textContent } });\r\n                } else {\r\n\r\n                    const link = document.createElement('a');\r\n                    link.href = e.element.id;\r\n                    link.click();\r\n                }\r\n                hideSpinner(document.getElementById('positionSpinner'));\r\n                hideSpinner(document.getElementById('mainSpinner'));\r\n            },\r\n            getContractData() {\r\n                apis.protectedApi(`contract/overview?contractId=${store.state.reportContractId}`)\r\n                    .then(response => {\r\n                        if (response.data) {\r\n                            this.showPriceAreaSectionPosition = response.data.pricingAreaNames != \"\" ? true : false;\r\n                            this.pricingAreaNames = response.data.pricingAreaNames;\r\n                            if (response.data.pricingAreaNames != \"\") {\r\n                                store.state.pricingAreaNames = response.data.pricingAreaNames;\r\n                            } else {\r\n                                store.state.pricingAreaNames = undefined;\r\n                            }\r\n\r\n                            if (response.data.contractFileUrls) {\r\n                                this.$refs.btnViewContracts.ej2Instances.disabled = false;\r\n                                this.contractFileitems = this.getContractStrategyUrl(response.data.contractFileUrls);\r\n\r\n                            } else {\r\n                                this.$refs.btnViewContracts.ej2Instances.disabled = true;\r\n                            }\r\n                            if (response.data.strategyFileUrl) {\r\n\r\n                                this.$refs.btnViewStrategy.ej2Instances.disabled = false;\r\n                                this.contractStrategyFileItems = this.getContractStrategyUrl(response.data.strategyFileUrl);\r\n                            } else {\r\n                                this.$refs.btnViewStrategy.ej2Instances.disabled = true;\r\n                            }\r\n                        }\r\n                    }).catch(e => {\r\n                        this.showErrorDialog(\"Something went wrong, please contact support.\");\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                    });\r\n            },\r\n            //this method is for contract file and strategy\r\n            //this is for ono pdf files, non slice just simple all url link\r\n            getContractStrategyUrl: function (strategyFileUrls) {\r\n\r\n                var items = [];\r\n                let input = strategyFileUrls ? strategyFileUrls.split(\",\") : [];\r\n                for (let index in input) {\r\n                    items.push({ text: input[index].split(/[\\s/]+/).pop(), id: input[index] });\r\n                }\r\n                return items;\r\n            },\r\n            //this method is for contract file and strategy\r\n            //this is for  pdf files, slice and covnertig file for pdf viewer\r\n            getContractStrategyUrlPdf: function (strategyFileUrls) {\r\n\r\n                var items = [];\r\n                let input = strategyFileUrls ? strategyFileUrls.split(\",\") : [];\r\n                for (let index in input) {\r\n                    items.push({ text: input[index].split(/[\\s/]+/).pop().slice(0, -4), id: input[index].split(/[\\s/]+/).pop() });\r\n                }\r\n                return items;\r\n            },\r\n            getPositionData: function (reportView, currencyId) {\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                /*apis.protectedApi(`report/positionsummary/${store.state.reportContractId}?reportView=${reportView}&currencySymbol=${currencySymbol == undefined ? \"\" : currencySymbol}&defaultM=${store.state.isCheckDefaultM == undefined ? \"\" : store.state.isCheckDefaultM}`)*/\r\n                apis.protectedApi(`report/positionsummary/${store.state.reportContractId}?reportView=${reportView}&currencyId=${currencyId == undefined ? \"\" : currencyId}&defaultM=${store.state.isCheckDefaultM == undefined ? \"\" : store.state.isCheckDefaultM}`)\r\n                    .then(response => {\r\n                        const company = document.getElementById('companyName').value;\r\n                        if (company != null && company != '') {\r\n                            hideSpinner(document.getElementById('mainSpinner'));\r\n                        }\r\n                        hideSpinner(document.getElementById('positionSpinner'));\r\n                        this.data = response.data.result;\r\n                        this.unit = response.data.unit;\r\n                        this.currency = response.data.currency;\r\n                        this.value = response.data.value;\r\n                        this.companyName = response.data.result.companyName;\r\n                        this.gridData = response.data.result.calendarPositionData;\r\n                        this.annualVolume = response.data.result.annualVolume.toFixed(2).replace(/\\d(?=(\\d{3})+\\.)/g, '$&,') + \" \" + response.data.unit;\r\n                        if (response.data.value == 'p/therm') {\r\n\r\n                            /*this.$refs.dplCurrency.ej2Instances.value = \"p\";*/\r\n                            this.$refs.dplCurrency.ej2Instances.text = \"p - GBp\";\r\n\r\n                        } else {\r\n                            this.$refs.dplCurrency.ej2Instances.text = response.data.currencySymbolAndName;\r\n                        }\r\n\r\n                    }).catch(e => {\r\n\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                        hideSpinner(document.getElementById('positionSpinner'));\r\n                        if (e.response) {\r\n                            hideSpinner(document.getElementById('mainSpinner'));\r\n                            this.showErrorDialog(e.response.data.message);\r\n                        }\r\n                    })\r\n            },\r\n            onReportViewSelect: function (args) {\r\n                let selected = args.itemData.name;\r\n                this.getPositionData(selected);\r\n            },\r\n            showErrorDialog: function (message) {\r\n                DialogUtility.alert({\r\n                    title: 'Alert Dialog',\r\n                    content: message,\r\n                    position: { X: 700, Y: 200 },\r\n                    showCloseIcon: true,\r\n                    closeOnEscape: true,\r\n                    animationSettings: { effect: 'Zoom' },\r\n                    zIndex: 1100\r\n                });\r\n            },\r\n            customiseCell: function (args) {\r\n                if (args.column.field === 'totalContractedVolumeInContractTradingUnit' || args.column.field === 'openVolumeInContractTradingUnit') {\r\n                    args.cell.textContent = args.cell.textContent + ' ' + this.unit;\r\n                } else if (args.column.field === 'fixedVolumePercentage' || args.column.field === 'openVolumePercentage') {\r\n                    args.cell.textContent = args.cell.textContent + ' ' + \"%\";\r\n                } else if (args.column.field === 'fixedPrice' || args.column.field === 'openPrice' || args.column.field === 'm2mPrice' || args.column.field === 'referencePrice' || args.column.field === 'variancePrice') {\r\n                    args.cell.textContent = args.cell.textContent + ' ' + this.value;\r\n                } else if (args.column.field === 'referenceValue' || args.column.field === 'openValue' || args.column.field === 'm2mValue' || args.column.field === 'fixedValue' || args.column.field === 'yoyDifferencePrice' || args.column.field === 'varianceValue') {\r\n                    args.cell.textContent = args.cell.textContent + ' ' + this.currency;\r\n                }\r\n            },\r\n            checkFields() {\r\n                const company = document.getElementById('companyName').value;\r\n                if (company != null && company != '') {\r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                } \r\n            }\r\n        }\r\n    }\r\n</script>\r\n\r\n<style>\r\n\r\n\r\n    .volume-unit {\r\n        width: 100%;\r\n        padding-left: 5px;\r\n    }\r\n    .postionCheck {\r\n        margin: 25px 0px 0px 5px !important;\r\n        padding-right: 18px;\r\n    }\r\n    #positionSpinner {\r\n        display: none;\r\n    }\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PositionReportTemplate.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PositionReportTemplate.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./PositionReportTemplate.vue?vue&type=template&id=398199ac\"\nimport script from \"./PositionReportTemplate.vue?vue&type=script&lang=js\"\nexport * from \"./PositionReportTemplate.vue?vue&type=script&lang=js\"\nimport style0 from \"./PositionReportTemplate.vue?vue&type=style&index=0&id=398199ac&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('CRow',[_c('CCol',{attrs:{\"col\":\"\"}},[_c('div',{staticClass:\"col-lg-12 control-section\",staticStyle:{\"padding\":\"10px\",\"position\":\"relative\"}},[_c('div',{attrs:{\"id\":\"m2mSpinner\"}}),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"dplType\",attrs:{\"id\":\"type\",\"name\":\"type\",\"change\":_vm.onTypeChange,\"floatLabelType\":\"Auto\",\"dataSource\":_vm.products,\"fields\":{text: 'name', value: 'id' },\"index\":_vm.typeIndex,\"placeholder\":\"Product:\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}})],1),_c('div',{staticClass:\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"dplCurrencyM2M\",attrs:{\"id\":\"currencyM2M\",\"name\":\"currency\",\"change\":_vm.onCurrencyChangeM2M,\"dataSource\":_vm.currenciesM2M,\"fields\":{text: 'name', value: 'currencyId' },\"placeholder\":\"Currency\",\"floatLabelType\":\"Auto\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true},model:{value:(_vm.data.currencyId),callback:function ($$v) {_vm.$set(_vm.data, \"currencyId\", $$v)},expression:\"data.currencyId\"}})],1),(_vm.showPriceAreaSection)?_c('div',{staticClass:\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"dplPriceArea\",attrs:{\"id\":\"priceArea\",\"name\":\"priceAreaName\",\"index\":_vm.typeIndex,\"actionComplete\":_vm.onActionComplete,\"change\":_vm.onPriceAreaChange,\"floatLabelType\":\"Auto\",\"dataSource\":_vm.priceArea,\"fields\":{text: 'name', value: 'id' },\"placeholder\":\"Price Area:\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}})],1):_vm._e(),_c('div',{staticClass:\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\"},[_c('ejs-checkbox',{ref:\"m2mCheckDM\",attrs:{\"change\":_vm.onCheckM2mDefault,\"label\":\"Default Mechanism\",\"id\":\"M2mCheckDefault\",\"name\":\"checkName\",\"floatLabelType\":\"Auto\",\"cssClass\":\"m2mCheck check-d\"}})],1)]),_c('div',{staticClass:\"form-row  justify-content-end \"},[_c('ejs-button',{staticStyle:{\"margin-right\":\"10px\"},attrs:{\"cssClass\":\"e-primary\"},nativeOn:{\"click\":function($event){return _vm.download($event)}}},[_vm._v(\"M2M Report\")])],1),_c('ejs-grid',{ref:\"monthGrid\",attrs:{\"dataSource\":_vm.gridMonthData,\"allowPaging\":true,\"allowTextWrap\":true,\"textWrapSettings\":_vm.wrapSettings,\"allowResizing\":true,\"query\":_vm.gridQuery,\"allowReordering\":true,\"allowSorting\":true,\"toolbar\":_vm.toolbar,\"pageSettings\":_vm.pageSettings,\"actionFailure\":_vm.actionFailure,\"filterSettings\":_vm.filterOptions,\"queryCellInfo\":_vm.customiseCell}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"periodName\",\"headerText\":\"Month\",\"width\":\"120\",\"isPrimaryKey\":true}}),_c('e-column',{attrs:{\"headerText\":\"TOTAL\",\"columns\":_vm.totalColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"FIXED\",\"columns\":_vm.fixedColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"OPEN\",\"columns\":_vm.openColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"M2M\",\"columns\":_vm.m2mColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"REFERENCE\",\"columns\":_vm.referenceColumns,\"textAlign\":\"Center\"}})],1)],1),_c('ejs-grid',{ref:\"quarterGrid\",attrs:{\"dataSource\":_vm.gridQuarterData,\"allowPaging\":true,\"allowTextWrap\":true,\"textWrapSettings\":_vm.wrapSettings,\"allowResizing\":true,\"query\":_vm.gridQuery,\"allowReordering\":true,\"allowSorting\":true,\"toolbar\":_vm.toolbar,\"pageSettings\":_vm.pageSettings,\"actionFailure\":_vm.actionFailure,\"filterSettings\":_vm.filterOptions,\"queryCellInfo\":_vm.customiseCell}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"periodName\",\"headerText\":\"Quarter\",\"width\":\"120\",\"isPrimaryKey\":true}}),_c('e-column',{attrs:{\"headerText\":\"TOTAL\",\"columns\":_vm.totalColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"FIXED\",\"columns\":_vm.fixedColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"OPEN\",\"columns\":_vm.openColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"M2M\",\"columns\":_vm.m2mColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"REFERENCE\",\"columns\":_vm.referenceColumns,\"textAlign\":\"Center\"}})],1)],1),_c('ejs-grid',{ref:\"seasonGrid\",attrs:{\"dataSource\":_vm.gridSeasonData,\"allowPaging\":true,\"allowTextWrap\":true,\"textWrapSettings\":_vm.wrapSettings,\"allowResizing\":true,\"query\":_vm.gridQuery,\"allowReordering\":true,\"allowSorting\":true,\"toolbar\":_vm.toolbar,\"pageSettings\":_vm.pageSettings,\"actionFailure\":_vm.actionFailure,\"filterSettings\":_vm.filterOptions,\"queryCellInfo\":_vm.customiseCell}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"periodName\",\"headerText\":\"Season\",\"width\":\"120\",\"isPrimaryKey\":true}}),_c('e-column',{attrs:{\"headerText\":\"TOTAL\",\"columns\":_vm.totalColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"FIXED\",\"columns\":_vm.fixedColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"OPEN\",\"columns\":_vm.openColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"M2M\",\"columns\":_vm.m2mColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"REFERENCE\",\"columns\":_vm.referenceColumns,\"textAlign\":\"Center\"}})],1)],1),_c('ejs-grid',{ref:\"calendarGrid\",attrs:{\"dataSource\":_vm.gridCalendarData,\"allowPaging\":true,\"allowTextWrap\":true,\"textWrapSettings\":_vm.wrapSettings,\"allowResizing\":true,\"query\":_vm.gridQuery,\"allowReordering\":true,\"allowSorting\":true,\"toolbar\":_vm.toolbar,\"pageSettings\":_vm.pageSettings,\"actionFailure\":_vm.actionFailure,\"filterSettings\":_vm.filterOptions,\"queryCellInfo\":_vm.customiseCell}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"periodName\",\"headerText\":\"Calendar Year\",\"width\":\"120\",\"isPrimaryKey\":true}}),_c('e-column',{attrs:{\"headerText\":\"TOTAL\",\"columns\":_vm.totalColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"FIXED\",\"columns\":_vm.fixedColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"OPEN\",\"columns\":_vm.openColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"M2M\",\"columns\":_vm.m2mColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"REFERENCE\",\"columns\":_vm.referenceColumns,\"textAlign\":\"Center\"}})],1)],1),_c('ejs-grid',{ref:\"fiscalGrid\",attrs:{\"dataSource\":_vm.gridFiscalData,\"allowPaging\":true,\"allowTextWrap\":true,\"textWrapSettings\":_vm.wrapSettings,\"allowResizing\":true,\"query\":_vm.gridQuery,\"allowReordering\":true,\"allowSorting\":true,\"toolbar\":_vm.toolbar,\"pageSettings\":_vm.pageSettings,\"actionFailure\":_vm.actionFailure,\"filterSettings\":_vm.filterOptions,\"queryCellInfo\":_vm.customiseCell}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"periodName\",\"headerText\":\"Fiscal Year\",\"width\":\"120\",\"isPrimaryKey\":true}}),_c('e-column',{attrs:{\"headerText\":\"TOTAL\",\"columns\":_vm.totalColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"FIXED\",\"columns\":_vm.fixedColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"OPEN\",\"columns\":_vm.openColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"M2M\",\"columns\":_vm.m2mColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"REFERENCE\",\"columns\":_vm.referenceColumns,\"textAlign\":\"Center\"}})],1)],1)],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <CRow>\r\n        <CCol col>\r\n            <div class=\"col-lg-12 control-section\" style=\"padding:10px;position:relative;\">\r\n\r\n                <div id=\"m2mSpinner\"></div>\r\n                <div class=\"form-row\">\r\n                    <div class=\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\">\r\n                        <ejs-dropdownlist ref='dplType' id=\"type\" name=\"type\" :change='onTypeChange' floatLabelType='Auto' :dataSource='products' :fields=\"{text: 'name', value: 'id' }\" :index='typeIndex' placeholder=\"Product:\" :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                    </div>\r\n                    <div class=\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\">\r\n                        <ejs-dropdownlist ref='dplCurrencyM2M' id=\"currencyM2M\" name=\"currency\" v-model=\"data.currencyId\" :change=\"onCurrencyChangeM2M\" :dataSource='currenciesM2M' :fields=\"{text: 'name', value: 'currencyId' }\" placeholder=\"Currency\" floatLabelType='Auto' :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                    </div>\r\n                    <div class=\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\" v-if=\"showPriceAreaSection\">\r\n                        <ejs-dropdownlist ref='dplPriceArea' id=\"priceArea\" name=\"priceAreaName\" :index='typeIndex' :actionComplete=\"onActionComplete\" :change='onPriceAreaChange' floatLabelType='Auto' :dataSource='priceArea' :fields=\"{text: 'name', value: 'id' }\" placeholder=\"Price Area:\" :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                    </div>\r\n                    <div class=\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\">\r\n                        <ejs-checkbox ref=\"m2mCheckDM\" :change=\"onCheckM2mDefault\" label='Default Mechanism' id=\"M2mCheckDefault\" name=\"checkName\" floatLabelType='Auto' cssClass=\"m2mCheck check-d\"></ejs-checkbox>\r\n\r\n                    </div>\r\n                </div>\r\n                <div class=\"form-row  justify-content-end \">\r\n                    <ejs-button style=\"margin-right:10px\" cssClass=\"e-primary\" v-on:click.native='download'>M2M Report</ejs-button>\r\n                </div>\r\n                <ejs-grid ref='monthGrid' :dataSource=\"gridMonthData\" :allowPaging=\"true\" :allowTextWrap='true' :textWrapSettings='wrapSettings' :allowResizing='true' :query='gridQuery' :allowReordering='true' :allowSorting='true' :toolbar='toolbar' :pageSettings='pageSettings' :actionFailure=\"actionFailure\" :filterSettings='filterOptions'\r\n                          :queryCellInfo='customiseCell'>\r\n                    <e-columns>\r\n                        <e-column field='periodName' headerText='Month' width=120 :isPrimaryKey='true'></e-column>\r\n                        <e-column headerText='TOTAL' :columns='totalColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='FIXED' :columns='fixedColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='OPEN' :columns='openColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='M2M' :columns='m2mColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column field='REFERENCE' :columns='referenceColumns' textAlign=\"Center\"></e-column>\r\n                    </e-columns>\r\n                </ejs-grid>\r\n                <ejs-grid ref='quarterGrid' :dataSource=\"gridQuarterData\" :allowPaging=\"true\" :allowTextWrap='true' :textWrapSettings='wrapSettings' :allowResizing='true' :query='gridQuery' :allowReordering='true' :allowSorting='true' :toolbar='toolbar' :pageSettings='pageSettings' :actionFailure=\"actionFailure\" :filterSettings='filterOptions'\r\n                          :queryCellInfo='customiseCell'>\r\n                    <e-columns>\r\n                        <e-column field='periodName' headerText='Quarter' width=120 :isPrimaryKey='true'></e-column>\r\n                        <e-column headerText='TOTAL' :columns='totalColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='FIXED' :columns='fixedColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='OPEN' :columns='openColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='M2M' :columns='m2mColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column field='REFERENCE' :columns='referenceColumns' textAlign=\"Center\"></e-column>\r\n                    </e-columns>\r\n                </ejs-grid>\r\n                <ejs-grid ref='seasonGrid' :dataSource=\"gridSeasonData\" :allowPaging=\"true\" :allowTextWrap='true' :textWrapSettings='wrapSettings' :allowResizing='true' :query='gridQuery' :allowReordering='true' :allowSorting='true' :toolbar='toolbar' :pageSettings='pageSettings' :actionFailure=\"actionFailure\" :filterSettings='filterOptions'\r\n                          :queryCellInfo='customiseCell'>\r\n                    <e-columns>\r\n                        <e-column field='periodName' headerText='Season' width=120 :isPrimaryKey='true'></e-column>\r\n                        <e-column headerText='TOTAL' :columns='totalColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='FIXED' :columns='fixedColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='OPEN' :columns='openColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='M2M' :columns='m2mColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column field='REFERENCE' :columns='referenceColumns' textAlign=\"Center\"></e-column>\r\n                    </e-columns>\r\n                </ejs-grid>\r\n                <ejs-grid ref='calendarGrid' :dataSource=\"gridCalendarData\" :allowPaging=\"true\" :allowTextWrap='true' :textWrapSettings='wrapSettings' :allowResizing='true' :query='gridQuery' :allowReordering='true' :allowSorting='true' :toolbar='toolbar' :pageSettings='pageSettings' :actionFailure=\"actionFailure\" :filterSettings='filterOptions'\r\n                          :queryCellInfo='customiseCell'>\r\n                    <e-columns>\r\n                        <e-column field='periodName' headerText='Calendar Year' width=120 :isPrimaryKey='true'></e-column>\r\n\r\n                        <e-column headerText='TOTAL' :columns='totalColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='FIXED' :columns='fixedColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='OPEN' :columns='openColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='M2M' :columns='m2mColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column field='REFERENCE' :columns='referenceColumns' textAlign=\"Center\"></e-column>\r\n                    </e-columns>\r\n                </ejs-grid>\r\n                <ejs-grid ref='fiscalGrid' :dataSource=\"gridFiscalData\" :allowPaging=\"true\" :allowTextWrap='true' :textWrapSettings='wrapSettings' :allowResizing='true' :query='gridQuery' :allowReordering='true' :allowSorting='true' :toolbar='toolbar' :pageSettings='pageSettings' :actionFailure=\"actionFailure\" :filterSettings='filterOptions'\r\n                          :queryCellInfo='customiseCell'>\r\n                    <e-columns>\r\n                        <e-column field='periodName' headerText='Fiscal Year' width=120 :isPrimaryKey='true'></e-column>\r\n                        <e-column headerText='TOTAL' :columns='totalColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='FIXED' :columns='fixedColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='OPEN' :columns='openColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column headerText='M2M' :columns='m2mColumns' textAlign=\"Center\"></e-column>\r\n                        <e-column field='REFERENCE' :columns='referenceColumns' textAlign=\"Center\"></e-column>\r\n                    </e-columns>\r\n                </ejs-grid>\r\n            </div>\r\n        </CCol>\r\n    </CRow>\r\n</template>\r\n\r\n<script>\r\n    import Vue from \"vue\";\r\n    import { GridPlugin, Edit, Page, Toolbar, Sort, Filter, Reorder, Resize, ExcelExport, ForeignKey, CommandColumn } from \"@syncfusion/ej2-vue-grids\";\r\n    import { DropDownList } from \"@syncfusion/ej2-dropdowns\";\r\n    import { UploaderPlugin } from '@syncfusion/ej2-vue-inputs';\r\n    import { DialogUtility } from '@syncfusion/ej2-popups';\r\n    import SyncHelper from '../../common/syncfusion';\r\n    import { Query } from '@syncfusion/ej2-data';\r\n    import gridOptions from '../../common/gridOptions'\r\n    import dates from '../../common/dates'\r\n    import urls from '../../common/urls';\r\n    import apis from '../../common/network'\r\n    import { DatePickerPlugin, DatePicker } from '@syncfusion/ej2-vue-calendars';\r\n    import { CheckBoxPlugin, CheckBox } from \"@syncfusion/ej2-vue-buttons\";\r\n    import { ChartPlugin, ColumnSeries, StripLine, LineSeries, DataLabel, Category, DateTime, Tooltip, ChartAnnotation, Zoom, MultiColoredLineSeries } from \"@syncfusion/ej2-vue-charts\";\r\n    import { StackingLineSeries, StackingColumnSeries, ScatterSeries, CandleSeries, Legend } from \"@syncfusion/ej2-vue-charts\";\r\n\r\n    import { DialogPlugin } from '@syncfusion/ej2-vue-popups';\r\n    import { ButtonPlugin } from '@syncfusion/ej2-vue-buttons';\r\n    import { enableRipple } from '@syncfusion/ej2-base';\r\n    import { TextBox } from \"@syncfusion/ej2-inputs\";\r\n    import store from '../../store';\r\n    import { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\r\n    import { cibPrismic } from \"@coreui/icons\";\r\n    Vue.use(ChartPlugin);\r\n    Vue.use(UploaderPlugin);\r\n    Vue.use(DialogUtility);\r\n    Vue.use(GridPlugin);\r\n    Vue.use(CheckBoxPlugin);\r\n    Vue.use(ButtonPlugin);\r\n    Vue.use(DialogPlugin);\r\n    enableRipple(true);\r\n    export default {\r\n        components: {\r\n        },\r\n        created() {\r\n            apis.protectedApi(`utils/products?contractId=${store.state.reportContractId}&includeCombined=true`).then(it => {\r\n                this.products = it.data;\r\n            })\r\n                .catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    }\r\n            );\r\n\r\n        },\r\n        data() {\r\n            return {\r\n                // needed because of form being loaded from tab,in such cases this isnt available and store is loaded from import\r\n                store: store,\r\n                typeIndex: 0,\r\n                //firstIndexCurrency: 3,\r\n                draggable: true,\r\n                contractId: parseInt(store.state.reportContractId),\r\n                gridQuery: new Query().addParams(\"contractId\", store.state.reportContractId),\r\n                wrapSettings: { wrapMode: 'Header' },\r\n                gridDataResultsMonth: null,\r\n                gridDataResultsSeason: null,\r\n                gridDataResultsCalendar: null,\r\n                gridDataResultsQuarter: null,\r\n                gridDataResultsFiscal: null,\r\n                gridSeasonData: null,\r\n                gridMonthData: null,\r\n                gridCalendarData: null,\r\n                gridQuarterData: null,\r\n                gridFiscalData: null,\r\n                gridSeasonDataView: false,\r\n                gridMonthDataView: false,\r\n                gridCalendarDataView: false,\r\n                gridQuarterDataView: false,\r\n                gridFiscalDataView: false,\r\n                showPriceAreaSection: false,\r\n                priceAreaNames: store.state.pricingAreaNames,\r\n                products: [],\r\n                unit: null,\r\n                currency: null,\r\n                currencyId: null,\r\n                value: null,\r\n                pageSettings: gridOptions.pageSettings,\r\n                toolbar: [],\r\n                filterOptions: gridOptions.filterSettings, \r\n                totalColumns: [{\r\n                    field: 'totalVolumeInContractTradingUnit',\r\n                    headerText: 'Volume',\r\n                    textAlign: 'Center',\r\n                    width: \"120\",\r\n                    format: \"n2\"\r\n                }],\r\n                fixedColumns: [\r\n                    {\r\n                        field: 'fixedVolumeInContractTradingUnit',\r\n                        headerText: 'Volume',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\"\r\n                    },\r\n                    {\r\n                        field: 'fixedVolumePercentage',\r\n                        headerText: 'Volume %',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n1\"\r\n                    },\r\n                    {\r\n                        field: 'fixedPrice',\r\n                        headerText: 'Price',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n3\"\r\n                    },\r\n                    {\r\n                        field: 'fixedValue',\r\n                        headerText: 'Value',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n0\"\r\n                    }\r\n                ],\r\n                openColumns: [\r\n                    {\r\n                        field: 'openVolumeInContractTradingUnit',\r\n                        headerText: 'Volume',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\"\r\n                    },\r\n                    {\r\n                        field: 'openVolumePercentage',\r\n                        headerText: 'Volume %',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n1\"\r\n                    },\r\n                    {\r\n                        field: 'openPrice',\r\n                        headerText: 'Market Price',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n3\"\r\n                    },\r\n                    {\r\n                        field: 'openValue',\r\n                        headerText: 'Value',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n0\"\r\n                    }\r\n                ],\r\n                m2mColumns: [\r\n                    {\r\n                        field: 'm2mPrice',\r\n                        headerText: 'Price',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n3\"\r\n                    },\r\n                    {\r\n                        field: 'm2mValue',\r\n                        headerText: 'Value',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n0\"\r\n                    }\r\n                ],\r\n                referenceColumns: [\r\n                    {\r\n                        field: 'referencePrice',\r\n                        headerText: 'Price',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n3\"\r\n                    },\r\n                    {\r\n                        field: 'referenceValue',\r\n                        headerText: 'Value',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n0\"\r\n                    },\r\n                    {\r\n                        field: 'varianceValue',\r\n                        headerText: 'Variance',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n0\"\r\n                    }\r\n                ],\r\n                allowFiltering: true\r\n            };\r\n        },\r\n        methods: {\r\n            onActionComplete(args) { //initial load to be set on the first pricing area\r\n                if (args.result && args.result.length > 0) {\r\n                    this.updateTypeToShow(this.$refs.dplType.ej2Instances.text, args.result[0].id);\r\n                }\r\n            },\r\n            onCheckPASystem(args) {\r\n                let pricingAreaId = document.getElementById('priceArea') == null ? null : document.getElementById('priceArea').ej2_instances[0].value;\r\n                let type = document.getElementById('type').value;\r\n                if (args.checked) {\r\n                    this.updateTypeToShow(type, pricingAreaId, args.checked);\r\n                } else {\r\n                    this.updateTypeToShow(type, pricingAreaId, args.checked);\r\n                }\r\n\r\n\r\n            },\r\n            onPriceAreaChange: function (args) {\r\n                let type = document.getElementById('type').value;\r\n                if (args.isInteracted) {\r\n                    this.updateTypeToShow(type, args.itemData == null ? null : args.itemData.id, false);\r\n                }\r\n            },\r\n            onTypeChange: function (e) {\r\n                if (e.isInteracted == true) {\r\n                    let pricingAreaId = document.getElementById('priceArea') == null ? undefined : document.getElementById('priceArea').ej2_instances[0].value;\r\n                    this.updateTypeToShow(e.itemData.name, pricingAreaId, false);\r\n\r\n                }\r\n            },\r\n            onCheckM2mDefault(args) {\r\n                store.state.isCheckDefaultM = args.checked;\r\n                let currencyId = this.$refs.dplCurrencyM2M.ej2Instances.value;\r\n                this.loadData(currencyId);\r\n\r\n            },\r\n            onCurrencyChangeM2M: function (args) {\r\n\r\n                let currencyId = args.itemData.currencyId;\r\n                this.loadData(currencyId);\r\n\r\n            },\r\n            textRender: function (args) {\r\n                args.text = \"\";\r\n            },\r\n            loadData: function (currencyId) {\r\n                showSpinner(document.getElementById('m2mSpinner'));\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n\r\n                apis.protectedApi(`Report/GetM2mForContract?contractId=${this.contractId}&currencyId=${currencyId == undefined ? \"\" : currencyId}\r\n                &defaultM=${this.$refs.m2mCheckDM.ej2Instances.checked}`).then(it => {\r\n                    this.showPriceAreaSection = this.priceAreaNames == undefined ? false : true;\r\n                    this.gridDataResultsMonth = it.data.month;\r\n                    this.gridDataResultsSeason = it.data.season;\r\n                    this.gridDataResultsCalendar = it.data.calendar;\r\n                    this.gridDataResultsQuarter = it.data.quarter;\r\n                    this.gridDataResultsFiscal = it.data.fiscal;\r\n\r\n\r\n                    this.unit = it.data.unit;\r\n                    this.value = it.data.value;\r\n                    this.currency = it.data.currencySy;\r\n                    this.$refs.m2mCheckDM.ej2Instances.checked = store.state.isCheckDefaultM;\r\n\r\n                    if (it.data.value == 'p/therm') {\r\n\r\n                        //this.$refs.dplCurrencyM2M.ej2Instances.value = \"p\";\r\n                        this.$refs.dplCurrencyM2M.ej2Instances.text = \"p - GBp\";\r\n\r\n\r\n                    } else {\r\n\r\n                        this.$refs.dplCurrencyM2M.ej2Instances.text = it.data.currencySymbolAndName;\r\n                    }\r\n\r\n\r\n                    if (this.$refs.dplType.ej2Instances.dataSource.length < 2) {\r\n\r\n                        if (this.$refs.dplType.ej2Instances.dataSource[0].name == \"Gas\") {\r\n\r\n                            this.$refs.dplType.ej2Instances.text = \"Gas\";\r\n                        }\r\n                        if (this.$refs.dplType.ej2Instances.dataSource[0].name == \"Baseload\") {\r\n\r\n                            this.$refs.dplType.ej2Instances.text = \"Baseload\";\r\n                        }\r\n                        if (this.$refs.dplType.ej2Instances.dataSource[0].name == \"Off-Peak\") {\r\n\r\n                            this.$refs.dplType.ej2Instances.text = \"Off-Peak\";\r\n                        }\r\n                        if (this.$refs.dplType.ej2Instances.dataSource[0].name == \"Peakload\") {\r\n\r\n                            this.$refs.dplType.ej2Instances.text = \"Peakload\";\r\n                        }\r\n\r\n                    } else {\r\n\r\n                        this.$refs.dplType.ej2Instances.text = \"Combined\";\r\n\r\n\r\n                    }\r\n\r\n                    this.updateTypeToShow(this.$refs.dplType.ej2Instances.text,document.getElementById('priceArea') == null ? null : document.getElementById('priceArea').ej2_instances[0].value);\r\n                    hideSpinner(document.getElementById('m2mSpinner'));\r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                })\r\n\r\n                    .catch(\r\n                        response => {\r\n                            hideSpinner(document.getElementById('m2mSpinner'));\r\n                            hideSpinner(document.getElementById('mainSpinner'));\r\n                            var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                            gridOptions.errorAlert(\"Error: \" + message);\r\n                        }\r\n                );\r\n            },\r\n\r\n            updateTypeToShow: function (type, pricingAreaId, priceSystemArea) {\r\n\r\n                var product = this.products.filter(p => p.name == type)[0];\r\n\r\n                if (pricingAreaId != undefined) {\r\n\r\n                    this.gridMonthData = this.gridDataResultsMonth.areas == null ? null : this.gridDataResultsMonth.areas.filter(b => b.productName == type && b.pricingAreaId == pricingAreaId)[0].areaMonthData;\r\n                    this.gridSeasonData = this.gridDataResultsSeason.areas != null && Array.isArray(this.gridDataResultsSeason.areas) && this.gridDataResultsSeason.areas.length > 0 ?  this.gridDataResultsSeason.areas.filter(b => b.productName == type && b.pricingAreaId == pricingAreaId)[0].areaMonthData : null;\r\n                    this.gridQuarterData = this.gridDataResultsQuarter.areas != null && Array.isArray(this.gridDataResultsQuarter.areas) && this.gridDataResultsQuarter.areas.length > 0 ? this.gridDataResultsQuarter.areas.filter(b => b.productName == type && b.pricingAreaId == pricingAreaId)[0].areaMonthData : null;\r\n                    this.gridFiscalData = this.gridDataResultsFiscal.areas != null && Array.isArray(this.gridDataResultsFiscal.areas) && this.gridDataResultsFiscal.areas.length > 0 ? this.gridDataResultsFiscal.areas.filter(b => b.productName == type && b.pricingAreaId == pricingAreaId)[0].areaMonthData : null;\r\n                    this.gridCalendarData = this.gridDataResultsCalendar.areas != null && Array.isArray(this.gridDataResultsCalendar.areas) && this.gridDataResultsCalendar.areas.length > 0 ? this.gridDataResultsCalendar.areas.filter(b => b.productName == type && b.pricingAreaId == pricingAreaId)[0].areaMonthData : null;\r\n\r\n                    this.$refs.monthGrid.refresh();\r\n                    this.$refs.seasonGrid.refresh();\r\n                    this.$refs.calendarGrid.refresh();\r\n                    this.$refs.fiscalGrid.refresh();\r\n                    this.$refs.quarterGrid.refresh();\r\n                }\r\n                else {\r\n\r\n                    if (product && product.productName == 'Combined') {\r\n                        this.gridMonthData = this.gridDataResultsMonth == null ? null : this.gridDataResultsMonth.combined;\r\n                        this.gridSeasonData = this.gridDataResultsSeason == null ? null : this.gridDataResultsSeason.combined;\r\n                        this.gridCalendarData = this.gridDataResultsCalendar == null ? null : this.gridDataResultsCalendar.combined;\r\n                        this.gridQuarterData = this.gridDataResultsQuarter == null ? null : this.gridDataResultsQuarter.combined;\r\n                        this.gridFiscalData = this.gridDataResultsFiscal == null ? null : this.gridDataResultsFiscal.combined;\r\n                    } else if (product && product.productName == 'Baseload') {\r\n                        this.gridMonthData = this.gridDataResultsMonth == null ? null : this.gridDataResultsMonth.base;\r\n                        this.gridSeasonData = this.gridDataResultsSeason == null ? null : this.gridDataResultsSeason.base;\r\n                        this.gridCalendarData = this.gridDataResultsCalendar == null ? null : this.gridDataResultsCalendar.base;\r\n                        this.gridQuarterData = this.gridDataResultsQuarter == null ? null : this.gridDataResultsQuarter.base;\r\n                        this.gridFiscalData = this.gridDataResultsFiscal == null ? null : this.gridDataResultsFiscal.base;\r\n                    } else if (product && product.productName == 'Peakload') {\r\n                        this.gridMonthData = this.gridDataResultsMonth == null ? null : this.gridDataResultsMonth.peak;\r\n                        this.gridSeasonData = this.gridDataResultsSeason == null ? null : this.gridDataResultsSeason.peak;\r\n                        this.gridCalendarData = this.gridDataResultsCalendar == null ? null : this.gridDataResultsCalendar.peak;\r\n                        this.gridQuarterData = this.gridDataResultsQuarter == null ? null : this.gridDataResultsQuarter.peak;\r\n                        this.gridFiscalData = this.gridDataResultsFiscal == null ? null : this.gridDataResultsFiscal.peak;\r\n                    } else if (product && product.productName == 'Gas') {\r\n                        this.gridMonthData = this.gridDataResultsMonth == null ? null : this.gridDataResultsMonth.gas;\r\n                        this.gridSeasonData = this.gridDataResultsSeason == null ? null : this.gridDataResultsSeason.gas;\r\n                        this.gridCalendarData = this.gridDataResultsCalendar == null ? null : this.gridDataResultsCalendar.gas;\r\n                        this.gridQuarterData = this.gridDataResultsQuarter == null ? null : this.gridDataResultsQuarter.gas;\r\n                        this.gridFiscalData = this.gridDataResultsFiscal == null ? null : this.gridDataResultsFiscal.gas;\r\n                    } else if (product && product.productName == 'Combined') {\r\n                        this.gridMonthData = this.gridDataResultsMonth == null ? null : this.gridDataResultsMonth.combined;\r\n                        this.gridSeasonData = this.gridDataResultsSeason == null ? null : this.gridDataResultsSeason.combined;\r\n                        this.gridCalendarData = this.gridDataResultsCalendar == null ? null : this.gridDataResultsCalendar.combined;\r\n                        this.gridQuarterData = this.gridDataResultsQuarter == null ? null : this.gridDataResultsQuarter.combined;\r\n                        this.gridFiscalData = this.gridDataResultsFiscal == null ? null : this.gridDataResultsFiscal.combined;\r\n                    } else {\r\n                        this.gridMonthData = this.gridDataResultsMonth == null ? null : this.gridDataResultsMonth.offPeak;\r\n                        this.gridSeasonData = this.gridDataResultsSeason == null ? null : this.gridDataResultsSeason.offPeak;\r\n                        this.gridCalendarData = this.gridDataResultsCalendar == null ? null : this.gridDataResultsCalendar.offPeak;\r\n                        this.gridQuarterData = this.gridDataResultsQuarter == null ? null : this.gridDataResultsQuarter.offPeak;\r\n                        this.gridFiscalData = this.gridDataResultsFiscal == null ? null : this.gridDataResultsFiscal.offPeak;\r\n                    }\r\n                    this.$refs.monthGrid.refresh();\r\n                    this.$refs.seasonGrid.refresh();\r\n                    this.$refs.calendarGrid.refresh();\r\n                    this.$refs.fiscalGrid.refresh();\r\n                    this.$refs.quarterGrid.refresh();\r\n\r\n                }\r\n                \r\n            },\r\n            customiseCell: function (args) {\r\n\r\n                if (args.data['periodName'].includes('TOTAL')) {\r\n                    args.cell.classList.add('greyBox');\r\n                }\r\n\r\n\r\n                var yearY = args.data['periodName'].substring(0, 1);\r\n\r\n                if (yearY == 'Y') {\r\n                    args.cell.classList.add('greyBox');\r\n                }\r\n                if (args.column.field === 'varianceValue') {\r\n                    if (args.data['varianceValue'] > 0) {\r\n                        args.cell.classList.remove('greyBox');\r\n                        args.cell.classList.add('greenBox');\r\n                        args.cell.textContent = args.cell.textContent + ' ' + this.currency;\r\n                    } else {\r\n                        args.cell.classList.remove('greyBox');\r\n                        args.cell.classList.add('redBox');\r\n                        args.cell.textContent = args.cell.textContent + ' ' + this.currency;\r\n                    }\r\n                }\r\n                else if (args.column.field === 'totalVolumeInContractTradingUnit' || args.column.field === 'openVolumeInContractTradingUnit' || args.column.field === 'fixedVolumeInContractTradingUnit') {\r\n                    args.cell.textContent = args.cell.textContent + ' ' + this.unit;\r\n                } else if (args.column.field === 'fixedVolumePercentage' || args.column.field === 'openVolumePercentage') {\r\n                    args.cell.textContent = args.cell.textContent + ' ' + \"%\";\r\n                } else if (args.column.field === 'fixedPrice' || args.column.field === 'openPrice' || args.column.field === 'm2mPrice' || args.column.field === 'referencePrice' || args.column.field === 'variancePrice') {\r\n                    args.cell.textContent = args.cell.textContent + ' ' + this.value;\r\n                } else if (args.column.field === 'referenceValue' || args.column.field === 'openValue' || args.column.field === 'm2mValue' || args.column.field === 'fixedValue' || args.column.field === 'varianceValue') {\r\n                    args.cell.textContent = args.cell.textContent + ' ' + this.currency;\r\n                }\r\n            },\r\n            download: function (args) {\r\n                showSpinner(document.getElementById('m2mSpinner'));\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                this.currencyId = this.$refs.dplCurrencyM2M.ej2Instances.value;\r\n                let pricingAreaId = document.getElementById('priceArea')?.ej2_instances[0]?.value;\r\n                apis.protectedApi(`${urls.apiBaseUrl}ReportTemplate/generateM2mReportPage/${this.contractId}?currencyId=${this.currencyId == undefined ? \"\" : this.currencyId}&defaultM=${this.$refs.m2mCheckDM.ej2Instances.checked}&pricingAreaId=${pricingAreaId == undefined ? \"\" : pricingAreaId}&pricingAreaSystem=${false}`).then(it => {\r\n                    window.open(it.data.reportUri);\r\n                    hideSpinner(document.getElementById('m2mSpinner'));\r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                }\r\n                ).catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                        hideSpinner(document.getElementById('m2mSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                    }\r\n                );\r\n            },\r\n            actionFailure(args) {\r\n                gridOptions.actionFailure(args);\r\n            },\r\n\r\n        }, mounted: function () {\r\n            createSpinner({\r\n                target: document.getElementById('m2mSpinner')\r\n            });\r\n            createSpinner({\r\n                target: document.getElementById('mainSpinner'),\r\n                width: '50',\r\n                type: 'Material',\r\n                label: 'Loading data...',\r\n                cssClass: 'loading'\r\n            });\r\n            this.loadData();\r\n        }, computed: {\r\n             currenciesM2M() {\r\n                return SyncHelper.getDataManager(\"utils/currenciesAvailable?contractId=\" + store.state.reportContractId);\r\n            },\r\n            priceArea() {\r\n                return SyncHelper.getDataManager(\"utils/pricingContractAreas?contractId=\" + store.state.reportContractId); \r\n            },\r\n        },\r\n        provide: {\r\n            grid: [Page, Edit, Toolbar, Sort, Filter, Reorder, Resize, ExcelExport, ForeignKey, CommandColumn],\r\n            chart: [ColumnSeries, StripLine, LineSeries, Category, DataLabel, DateTime, Tooltip, ChartAnnotation, ScatterSeries, StackingColumnSeries, CandleSeries, Zoom, MultiColoredLineSeries, StackingLineSeries, Legend]\r\n        }\r\n    };\r\n\r\n</script>\r\n<style>\r\n    #container {\r\n        height: 350px;\r\n    }\r\n\r\n    .greenBox {\r\n        background-color: #62bf82 !important;\r\n        color: green;\r\n    }\r\n\r\n    .greyBox {\r\n        background-color: lightgrey !important;\r\n        font-weight: 500;\r\n    }\r\n\r\n    .redBox {\r\n        background-color: #b83726 !important;\r\n        color: green;\r\n    }\r\n\r\n    .m2mCheck {\r\n        margin: 32px 382px 0px 0px;\r\n    }\r\n\r\n    #m2mSpinner {\r\n        display: none;\r\n    }\r\n\r\n\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./M2MReportTemplate.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./M2MReportTemplate.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./M2MReportTemplate.vue?vue&type=template&id=6b7bc79a\"\nimport script from \"./M2MReportTemplate.vue?vue&type=script&lang=js\"\nexport * from \"./M2MReportTemplate.vue?vue&type=script&lang=js\"\nimport style0 from \"./M2MReportTemplate.vue?vue&type=style&index=0&id=6b7bc79a&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\"},[_c('div',{attrs:{\"id\":\"volumeSpinner\"}}),_c('div',{staticClass:\"e-card mt-2\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-sm-2 mt-3\"},[_c('ejs-dropdownlist',{ref:\"dplTypeVolume\",attrs:{\"id\":\"typeVolume\",\"name\":\"typeVolume\",\"change\":_vm.onTypeVolumeChange,\"floatLabelType\":\"Auto\",\"dataSource\":_vm.productsVolume,\"fields\":{text: 'name', value: 'id' },\"index\":_vm.typeIndex,\"placeholder\":\"Product:\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}})],1),_c('div',{staticClass:\"col-sm-2 mt-3\"},[(_vm.showPriceAreaSection)?_c('ejs-dropdownlist',{ref:\"dplPriceAreaVol\",attrs:{\"id\":\"priceAreaVol\",\"name\":\"priceAreaVolName\",\"actionComplete\":_vm.onActionComplete,\"index\":_vm.typeIndex,\"change\":_vm.onPriceAreaVolChange,\"floatLabelType\":\"Auto\",\"dataSource\":_vm.priceAreaVol,\"fields\":{text: 'name', value: 'id' },\"placeholder\":\"Price Area:\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}}):_vm._e()],1),_c('div',{staticClass:\"col-sm-5 check-vol\"}),_c('div',{staticClass:\"col-sm-2 mt-3\"},[_c('ejs-button',{attrs:{\"cssClass\":\"e-primary btn-download\"},nativeOn:{\"click\":function($event){return _vm.btnVolumeReportDownload($event)}}},[_vm._v(\"Volume Report\")])],1)]),_c('div',{staticClass:\"row\"},[(_vm.showGrid)?_c('div',{staticClass:\"col m-3\"},[_c('ejs-grid',{ref:\"grid\",attrs:{\"dataSource\":_vm.gridData,\"filterSettings\":_vm.filterOptions,\"allowPaging\":false,\"allowResizing\":true,\"allowReordering\":false,\"allowSorting\":false,\"allowFiltering\":true,\"autoFit\":true,\"toolbarClick\":_vm.toolbarClick,\"toolbar\":_vm.toolbar,\"actionBegin\":_vm.actionBegin,\"actionComplete\":_vm.actionComplete,\"actionFailure\":_vm.actionFailure,\"queryCellInfo\":_vm.customiseCell}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"monthName\",\"headerText\":\"Month\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"headerText\":\"therms\",\"columns\":_vm.thermsColumnes,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"th/d\",\"columns\":_vm.thdColumnes,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"kWh\",\"columns\":_vm.kWhColumnes,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"%\",\"columns\":_vm.PercentageColumnes,\"textAlign\":\"Center\"}})],1)],1)],1):_vm._e(),(_vm.showGridel)?_c('div',{staticClass:\"col m-3\"},[_c('ejs-grid',{ref:\"gridel\",attrs:{\"dataSource\":_vm.gridData,\"filterSettings\":_vm.filterOptions,\"allowPaging\":false,\"allowResizing\":true,\"allowReordering\":false,\"allowSorting\":false,\"allowFiltering\":true,\"autoFit\":true,\"toolbarClick\":_vm.toolbarClick,\"toolbar\":_vm.toolbar,\"actionBegin\":_vm.actionBegin,\"actionComplete\":_vm.actionComplete,\"actionFailure\":_vm.actionFailure,\"queryCellInfo\":_vm.customiseCell}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"monthName\",\"headerText\":\"Month\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"headerText\":\"MW\",\"columns\":_vm.MWColumnes,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"MWh\",\"columns\":_vm.MWhColumnes,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"kWh\",\"columns\":_vm.kWhColumnes,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"%\",\"columns\":_vm.PercentageColumnes,\"textAlign\":\"Center\"}})],1)],1)],1):_vm._e()])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"row\">\r\n        <div id=\"volumeSpinner\"></div>\r\n        <div class=\"e-card mt-2\">\r\n            <div class=\"row\">\r\n                <div class=\"col-sm-2 mt-3\">\r\n                    <ejs-dropdownlist ref='dplTypeVolume' id=\"typeVolume\" name=\"typeVolume\" :change='onTypeVolumeChange' floatLabelType='Auto' :dataSource='productsVolume' :fields=\"{text: 'name', value: 'id' }\" :index='typeIndex' placeholder=\"Product:\" :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                </div>\r\n                <div class=\"col-sm-2 mt-3\">\r\n                    <ejs-dropdownlist ref='dplPriceAreaVol' id=\"priceAreaVol\" name=\"priceAreaVolName\" :actionComplete=\"onActionComplete\" v-if=\"showPriceAreaSection\" :index='typeIndex' :change='onPriceAreaVolChange' floatLabelType='Auto' :dataSource='priceAreaVol' :fields=\"{text: 'name', value: 'id' }\" placeholder=\"Price Area:\" :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                </div>\r\n                <div class=\"col-sm-5 check-vol\">\r\n                  \r\n                </div>\r\n                <div class=\"col-sm-2 mt-3\">\r\n                    <ejs-button cssClass=\"e-primary btn-download\" v-on:click.native='btnVolumeReportDownload'>Volume Report</ejs-button>\r\n                </div>\r\n            </div>\r\n            <div class=\"row\">\r\n                <div class=\"col m-3\" v-if=\"showGrid\">\r\n                    <ejs-grid ref='grid'\r\n                              :dataSource='gridData'\r\n                              :filterSettings='filterOptions'\r\n                              :allowPaging='false'\r\n                              :allowResizing='true'\r\n                              :allowReordering='false'\r\n                              :allowSorting='false'\r\n                              :allowFiltering='true'\r\n                              :autoFit='true'\r\n                              :toolbarClick='toolbarClick'\r\n                              :toolbar='toolbar'\r\n                              :actionBegin='actionBegin'\r\n                              :actionComplete='actionComplete'\r\n                              :actionFailure='actionFailure'\r\n                              :queryCellInfo='customiseCell'>\r\n                        <e-columns>\r\n                            <e-column field='monthName' headerText='Month' width=120></e-column>\r\n\r\n                            <e-column headerText='therms' :columns='thermsColumnes' textAlign=\"Center\"></e-column>\r\n                            <e-column headerText='th/d' :columns='thdColumnes' textAlign=\"Center\"></e-column>\r\n                            <e-column headerText='kWh' :columns='kWhColumnes' textAlign=\"Center\"></e-column>\r\n\r\n                            <e-column headerText='%' :columns='PercentageColumnes' textAlign=\"Center\"></e-column>\r\n\r\n\r\n                        </e-columns>\r\n                    </ejs-grid>\r\n                </div>\r\n                    <div class=\"col m-3\" v-if=\"showGridel\">\r\n                        <ejs-grid ref='gridel'\r\n                                  :dataSource='gridData'\r\n                                  :filterSettings='filterOptions'\r\n                                  :allowPaging='false'\r\n                                  :allowResizing='true'\r\n                                  :allowReordering='false'\r\n                                  :allowSorting='false'\r\n                                  :allowFiltering='true'\r\n                                  :autoFit='true'\r\n                                  :toolbarClick='toolbarClick'\r\n                                  :toolbar='toolbar'\r\n                                  :actionBegin='actionBegin'\r\n                                  :actionComplete='actionComplete'\r\n                                  :actionFailure='actionFailure'\r\n                                  :queryCellInfo='customiseCell'>\r\n                            <e-columns>\r\n                                <e-column field='monthName' headerText='Month' width=120></e-column>\r\n\r\n                                <e-column headerText='MW' :columns='MWColumnes' textAlign=\"Center\"></e-column>\r\n                                <e-column headerText='MWh' :columns='MWhColumnes' textAlign=\"Center\"></e-column>\r\n                                <e-column headerText='kWh' :columns='kWhColumnes' textAlign=\"Center\"></e-column>\r\n\r\n                                <e-column headerText='%' :columns='PercentageColumnes' textAlign=\"Center\"></e-column>\r\n\r\n\r\n                            </e-columns>\r\n                        </ejs-grid>\r\n                    </div>\r\n                </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n    import Vue from \"vue\";\r\n    import { GridPlugin, Toolbar, Filter, Edit, Resize } from \"@syncfusion/ej2-vue-grids\";\r\n    import { ButtonPlugin } from \"@syncfusion/ej2-vue-buttons\";\r\n    import { DialogPlugin } from '@syncfusion/ej2-vue-popups';\r\n    import { TextBoxPlugin } from \"@syncfusion/ej2-vue-inputs\";\r\n    import apis from '../../common/network'\r\n    import urls from '../../common/urls';\r\n    import authToken from '../../common/authToken';\r\n    import gridOptions from '../../common/gridOptions'\r\n    import { Query } from '@syncfusion/ej2-data';\r\n    import store from '../../store';\r\n    import router from '../../router/index';\r\n    import { ToastPlugin, Toast } from \"@syncfusion/ej2-vue-notifications\";\r\n    import { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\r\n    import { isNullOrUndefined } from '@syncfusion/ej2-base';\r\n    import { DialogUtility } from '@syncfusion/ej2-vue-popups';\r\n    import SyncHelper from '../../common/syncfusion';\r\n\r\n    Vue.use(ButtonPlugin);\r\n    Vue.use(DialogPlugin);\r\n    Vue.use(TextBoxPlugin);\r\n    Vue.use(GridPlugin);\r\n\r\n    export default {\r\n        name: 'VolumeReport',\r\n        created() {\r\n            apis.protectedApi(`utils/products?contractId=${store.state.reportContractId}&includeCombined=true`).then(it => {\r\n                this.productsVolume = it.data;\r\n            })\r\n                .catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    }\r\n                );\r\n\r\n        },\r\n        data() {\r\n            return {\r\n                gridData: {},\r\n                typeIndex: 0,\r\n                unit: null,\r\n                showGridel: false,\r\n                showGrid: false,\r\n                showPriceAreaSection: false,\r\n                gridDataResultsArea: null,\r\n                gridDataResultsAreaSystem: null,\r\n                gridDataBase: null,\r\n                gridDataPeak: null,\r\n                gridDataOffpeak: null,\r\n                gridDataGas: null,\r\n                gridDataCombined: null,\r\n                productsVolume: [],\r\n                priceAreaNames: store.state.pricingAreaNames,\r\n                MWColumnes: [\r\n                    {\r\n                        field: 'totalMW',\r\n                        headerText: 'Total',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    },\r\n                    {\r\n                        field: 'fixedMW',\r\n                        headerText: 'Fixed',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    },\r\n                    {\r\n                        field: 'openMW',\r\n                        headerText: 'Open',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    }\r\n                ],\r\n                MWhColumnes: [\r\n                    {\r\n                        field: 'totalMWh',\r\n                        headerText: 'Total',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    },\r\n                    {\r\n                        field: 'fixedMWh',\r\n                        headerText: 'Fixed',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    },\r\n                    {\r\n                        field: 'openMWh',\r\n                        headerText: 'Open',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    }\r\n                ],\r\n                kWhColumnes: [\r\n                    {\r\n                        field: 'totalKWh',\r\n                        headerText: 'Total',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    },\r\n                    {\r\n                        field: 'fixedKWh',\r\n                        headerText: 'Fixed',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    },\r\n                    {\r\n                        field: 'openKWh',\r\n                        headerText: 'Open',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    }\r\n                ],\r\n                thermsColumnes: [\r\n                    {\r\n                        field: 'totalTherms',\r\n                        headerText: 'Total',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    },\r\n                    {\r\n                        field: 'fixedTherms',\r\n                        headerText: 'Fixed',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    },\r\n                    {\r\n                        field: 'openTherms',\r\n                        headerText: 'Open',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    }\r\n                ],\r\n                thdColumnes: [\r\n                    {\r\n                        field: 'totalThd',\r\n                        headerText: 'Total',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    },\r\n                    {\r\n                        field: 'fixedThd',\r\n                        headerText: 'Fixed',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    },\r\n                    {\r\n                        field: 'openThd',\r\n                        headerText: 'Open',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    }\r\n                ],\r\n                m3Columnes: [\r\n                    {\r\n                        field: 'totalM3',\r\n                        headerText: 'Total',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    },\r\n                    {\r\n                        field: 'fixedM3',\r\n                        headerText: 'Fixed',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    },\r\n                    {\r\n                        field: 'openM3',\r\n                        headerText: 'Open',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\" \r\n                    }\r\n                ],\r\n                PercentageColumnes: [\r\n                    {\r\n                        field: 'fixedPercentage',\r\n                        headerText: 'Fixed',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\"\r\n                    },\r\n                    {\r\n                        field: 'openPercentage',\r\n                        headerText: 'Open',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\"\r\n                    }\r\n                ],\r\n                toolbar: [],\r\n                filterOptions: gridOptions.filterSettings,\r\n                allowFiltering: true,\r\n               \r\n            }\r\n        },\r\n\r\n        methods: {\r\n            onActionComplete(args) { //initial load to be set on the first pricing area\r\n                let productName = document.getElementById('typeVolume').value;\r\n                if (args.result && args.result.length > 0) {\r\n                    this.updateTypeToShow(productName, args.result[0].id,false);\r\n                }\r\n            },\r\n            onTypeVolumeChange: function (args) {\r\n                let pricingAreaId = document.getElementById('priceAreaVol')?.ej2_instances[0]?.value;             \r\n                this.updateTypeToShow(args.itemData.name, pricingAreaId, false)\r\n            },\r\n            onPriceAreaVolChange: function (args) {\r\n                if (args.isInteracted) {\r\n                    let productName = document.getElementById('typeVolume').value;\r\n                    this.updateTypeToShow(productName, args.itemData == null ? null : args.itemData.id, false)\r\n                }\r\n            },\r\n            onCheckPASystemVol(args) {\r\n                let pricingAreaId = document.getElementById('priceAreaVol')?.ej2_instances[0]?.value;\r\n                let productName = document.getElementById('typeVolume').value;\r\n               \r\n                    this.updateTypeToShow(productName, pricingAreaId, false)\r\n                \r\n            },\r\n            toolbarClick(args) {\r\n              \r\n            },\r\n            updateTypeToShow: function (proudctName, pricingAreaId, priceSystem) {\r\n                if (proudctName == \"Combined\") {\r\n                    this.gridData = this.gridDataCombined;\r\n                    if (pricingAreaId != null) {\r\n                        if (priceSystem) {\r\n                            this.gridData = this.gridDataResultsAreaSystem.filter(b => b.productName == proudctName && b.pricingAreaId == pricingAreaId)[0].data\r\n                        } else {\r\n                            this.gridData = this.gridDataResultsArea.filter(b => b.productName == proudctName && b.pricingAreaId == pricingAreaId)[0].data\r\n                        }\r\n\r\n                    }\r\n                }\r\n                if (proudctName == \"Baseload\") {\r\n                    this.gridData = this.gridDataBase;\r\n                    if (pricingAreaId != null) {\r\n                        if (priceSystem) {\r\n                            this.gridData = this.gridDataResultsAreaSystem.filter(b => b.productName == proudctName && b.pricingAreaId == pricingAreaId)[0].data\r\n                        } else {\r\n                            this.gridData = this.gridDataResultsArea.filter(b => b.productName == proudctName && b.pricingAreaId == pricingAreaId)[0].data\r\n                        }\r\n                    }\r\n                }\r\n\r\n                if (proudctName == \"Peakload\") {\r\n                    this.gridData = this.gridDataPeak;\r\n                    if (pricingAreaId != null) {\r\n                        if (priceSystem) {\r\n                            this.gridData = this.gridDataResultsAreaSystem.filter(b => b.productName == proudctName && b.pricingAreaId == pricingAreaId)[0].data\r\n                        } else {\r\n                            this.gridData = this.gridDataResultsArea.filter(b => b.productName == proudctName && b.pricingAreaId == pricingAreaId)[0].data\r\n                        }\r\n                    }\r\n                }\r\n                if (proudctName== \"Off-peak\") {\r\n                    this.gridData = this.gridDataOffpeak;\r\n                    if (pricingAreaId != null) {\r\n                        if (priceSystem) {\r\n                            this.gridData = this.gridDataResultsAreaSystem.filter(b => b.productName == proudctName && b.pricingAreaId == pricingAreaId)[0].data\r\n                        } else {\r\n                            this.gridData = this.gridDataResultsArea.filter(b => b.productName == proudctName && b.pricingAreaId == pricingAreaId)[0].data\r\n                        }\r\n                    }\r\n                }\r\n\r\n\r\n            },\r\n            getVolumeData: function (pricingAreaId, priceAreaSystem) {\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                this.showPriceAreaSection = this.priceAreaNames == undefined ? false : true;\r\n                apis.protectedApi(`report/volumeReport/${store.state.reportContractId}?pricingAreaId=${pricingAreaId == undefined ? \"\" : pricingAreaId}&priceAreaSystem=${priceAreaSystem == undefined ? false : priceAreaSystem}`)\r\n                    .then(response => {\r\n                        hideSpinner(document.getElementById('volumeSpinner'));\r\n                        this.gridDataResultsArea = response.data.result.areas;\r\n                        this.gridDataResultsAreaSystem = response.data.result.areasWithSystem;\r\n                        this.gridDataBase = response.data.result.base;\r\n                        this.gridDataPeak = response.data.result.peak;\r\n                        this.gridDataOffpeak = response.data.result.offPeak;\r\n                        this.gridDataGas = response.data.result.gas;\r\n                        this.gridDataCombined = response.data.result.combined;\r\n                        this.gridData = response.data.result.combined;\r\n                        this.isGas = response.data.isGas;\r\n                        if (this.isGas) {\r\n                            this.showGrid = true;\r\n                        } else {\r\n                            this.showGridel = true;\r\n                        }\r\n                        let productName = document.getElementById('typeVolume').value;\r\n                        let pricingAreaId = document.getElementById('priceAreaVol')?.ej2_instances[0]?.value;\r\n                        this.updateTypeToShow(productName, pricingAreaId, false)\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                    }).catch(e => {\r\n                        hideSpinner(document.getElementById('volumeSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                        if (e.response) {\r\n                            this.showErrorDialog(e.response.data.message);\r\n                        }\r\n                    })\r\n            },\r\n            btnVolumeReportDownload: function (args) {\r\n                showSpinner(document.getElementById('volumeSpinner'));\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                apis.protectedApi(`${urls.apiBaseUrl}reportTemplate/generateVolumeReportPage/${store.state.reportContractId}`).then(it => {\r\n                    window.open(it.data.reportUri);\r\n                    hideSpinner(document.getElementById('volumeSpinner'));\r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                }).catch(\r\n                    response => {\r\n                        hideSpinner(document.getElementById('volumeSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    }\r\n                );\r\n            },\r\n            setToolbarVisibility: function () {\r\n               \r\n            },\r\n            showErrorDialog: function (message) {\r\n                DialogUtility.alert({\r\n                    title: 'Alert Dialog',\r\n                    content: message,\r\n                    position: { X: 700, Y: 200 },\r\n                    showCloseIcon: true,\r\n                    closeOnEscape: true,\r\n                    animationSettings: { effect: 'Zoom' },\r\n                    zIndex: 1100\r\n                });\r\n            },\r\n            customiseCell: function (args) {\r\n               \r\n            },\r\n            actionBegin(args) {\r\n                gridOptions.actionBegin(args, this.$refs);\r\n             \r\n\r\n            },\r\n            actionComplete(args) {\r\n                gridOptions.actionComplete(args, this.$refs);\r\n            },\r\n            actionFailure(args) {\r\n                gridOptions.actionFailure(args, this.$refs);\r\n            }\r\n        },\r\n        mounted() {\r\n            let spinner = document.getElementById('volumeSpinner');\r\n            createSpinner({\r\n                target: spinner\r\n            });\r\n            showSpinner(spinner);\r\n            this.getVolumeData();\r\n            this.setToolbarVisibility();\r\n          \r\n        },\r\n        computed: {\r\n            priceAreaVol() {\r\n                return SyncHelper.getDataManager(\"utils/pricingContractAreas?contractId=\" + store.state.reportContractId);\r\n            }\r\n        },\r\n        provide: {\r\n            grid: [Edit, Filter, Toolbar, Resize]\r\n        }\r\n    }\r\n</script>\r\n\r\n<style>\r\n    .btn-download {\r\n        float: right;\r\n        margin-top: 23px;\r\n    }\r\n    .check-vol {\r\n        padding-top: 2.3rem;\r\n    }\r\n#volumeSpinner {\r\n    display:none;\r\n}\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeReportTemplate.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./VolumeReportTemplate.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./VolumeReportTemplate.vue?vue&type=template&id=bf5bedbe\"\nimport script from \"./VolumeReportTemplate.vue?vue&type=script&lang=js\"\nexport * from \"./VolumeReportTemplate.vue?vue&type=script&lang=js\"\nimport style0 from \"./VolumeReportTemplate.vue?vue&type=style&index=0&id=bf5bedbe&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('CRow',[_c('CCol',{attrs:{\"col\":\"\"}},[_c('div',{staticClass:\"col-lg-12 control-section\",staticStyle:{\"padding\":\"10px\",\"position\":\"relative\"}},[_c('div',{attrs:{\"id\":\"cappSpinner\"}}),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"dplYears\",attrs:{\"id\":\"years\",\"name\":\"years\",\"change\":_vm.onYearsChange,\"floatLabelType\":\"Auto\",\"dataSource\":_vm.contractYears,\"fields\":{text: 'name', value: 'id' },\"index\":_vm.periodsIndex,\"placeholder\":\"Years\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}})],1),_c('div',{staticClass:\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"dplPeriods\",attrs:{\"id\":\"dplPeriods\",\"dataSource\":_vm.periods,\"placeholder\":\"Period\",\"floatLabelType\":\"Auto\",\"index\":_vm.periodsIndex,\"change\":_vm.onPeriodsChange,\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}})],1),_c('div',{staticClass:\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"dplCurrencyCAP\",attrs:{\"id\":\"currencyCAP\",\"name\":\"currency\",\"change\":_vm.onCurrencyChangeCAP,\"dataSource\":_vm.currenciesCAP,\"fields\":{text: 'name', value: 'currencyId' },\"placeholder\":\"Currency\",\"floatLabelType\":\"Auto\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true},model:{value:(_vm.data.currencyId),callback:function ($$v) {_vm.$set(_vm.data, \"currencyId\", $$v)},expression:\"data.currencyId\"}})],1),(_vm.showPriceAreaSection)?_c('div',{staticClass:\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"dplPriceAreaCost\",attrs:{\"id\":\"priceAreaCost\",\"name\":\"priceAreaCostName\",\"enabled\":false,\"change\":_vm.onPriceAreaCostChange,\"floatLabelType\":\"Auto\",\"dataSource\":_vm.priceAreaCost,\"index\":_vm.periodsIndex,\"fields\":{text: 'name', value: 'id' },\"placeholder\":\"Price Area:\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}})],1):_vm._e()]),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"dplGraphTypes\",attrs:{\"id\":\"dplGraphTypes\",\"dataSource\":_vm.graphTypes,\"placeholder\":\"Type\",\"floatLabelType\":\"Auto\",\"index\":_vm.periodsIndex,\"change\":_vm.onGraphChange,\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}})],1),_c('div',{staticClass:\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"dplPerformanceTypes\",attrs:{\"id\":\"dplPerformanceTypes\",\"dataSource\":_vm.performanceTypes,\"placeholder\":\"Performance type\",\"floatLabelType\":\"Auto\",\"index\":_vm.periodsIndex,\"change\":_vm.onTypeChange,\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}})],1),_c('ejs-checkbox',{ref:\"costCheckDM\",attrs:{\"change\":_vm.onCheckCostAndPriceDefault,\"label\":\"Default Mechanism\",\"id\":\"CostAndPriceCheckDefalt\",\"name\":\"checkName\",\"floatLabelType\":\"Auto\",\"cssClass\":\"costAndPriceCheck check-d\"}})],1),_c('div',{staticClass:\"form-row  justify-content-end \"},[_c('ejs-button',{staticStyle:{\"margin-right\":\"10px\"},attrs:{\"cssClass\":\"e-primary\"},nativeOn:{\"click\":function($event){return _vm.download($event)}}},[_vm._v(\"Price And Cost Performance Report\")])],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.priceViewEnabled),expression:\"priceViewEnabled\"}]},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.LineGraph),expression:\"LineGraph\"}],staticClass:\"bc-white\"},[_c('ejs-chart',{attrs:{\"id\":\"container\",\"title\":_vm.title,\"legendSettings\":_vm.legendSettings,\"zoomSettings\":_vm.zoom,\"primaryXAxis\":_vm.primaryXAxis,\"primaryYAxis\":_vm.primaryYAxis,\"tooltip\":_vm.tooltip,\"tooltipRender\":_vm.tooltipRenderM2MAndReference,\"textRender\":_vm.textRender}},[_c('e-series-collection',[_c('e-series',{attrs:{\"dataSource\":_vm.seriesData,\"type\":\"Line\",\"xName\":\"periodName\",\"yName\":\"m2m\",\"name\":\"M2M\",\"width\":\"2\",\"marker\":_vm.marker,\"fill\":\"#001c55\"}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesData,\"type\":\"Line\",\"xName\":\"periodName\",\"yName\":\"reference\",\"name\":\"Reference\",\"width\":\"2\",\"marker\":_vm.marker,\"fill\":\"#a35ea1\"}})],1)],1)],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.CandleGraph),expression:\"CandleGraph\"}],staticClass:\"bc-white\"},[_c('ejs-chart',{attrs:{\"id\":\"container2\",\"title\":_vm.title,\"legendSettings\":_vm.legendSettings,\"zoomSettings\":_vm.zoom,\"primaryXAxis\":_vm.primaryXAxis,\"primaryYAxis\":_vm.primaryYAxis,\"tooltip\":_vm.tooltip,\"textRender\":_vm.textRender,\"tooltipRender\":_vm.tooltipRenderWhisker}},[_c('e-series-collection',[_c('e-series',{attrs:{\"dataSource\":_vm.seriesData,\"tooltipFormat\":\" \",\"type\":\"Candle\",\"xName\":\"periodName\",\"high\":\"highest\",\"low\":\"lowest\",\"open\":\"firstQuartile\",\"close\":\"thridQuartile\",\"name\":\"Box plot\",\"bearFillColor\":\"#B3edff\",\"bullFillColor\":\"#B3edff\",\"fill\":\"#B3edff\",\"opacity\":\"0.5\",\"enableSolidCandles\":_vm.enableSolidCandles,\"marker\":_vm.candleMarker,\"border\":_vm.border}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesData,\"type\":\"Line\",\"xName\":\"periodName\",\"yName\":\"median\",\"name\":\"Median\",\"opacity\":\"0\",\"marker\":_vm.medianMarker,\"fill\":\"#d9853c\"}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesData,\"type\":\"Line\",\"xName\":\"periodName\",\"yName\":\"m2m\",\"name\":\"M2M\",\"width\":\"2\",\"marker\":_vm.marker,\"fill\":\"#001c55\"}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesData,\"type\":\"Line\",\"xName\":\"periodName\",\"yName\":\"reference\",\"name\":\"Reference\",\"width\":\"2\",\"marker\":_vm.marker,\"fill\":\"#a35ea1\"}})],1)],1)],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.StackedGraph),expression:\"StackedGraph\"}],staticClass:\"bc-white\"},[_c('ejs-chart',{attrs:{\"id\":\"container3\",\"title\":_vm.title,\"legendSettings\":_vm.legendSettings,\"zoomSettings\":_vm.zoom,\"primaryXAxis\":_vm.primaryXAxis,\"primaryYAxis\":_vm.primaryYAxis,\"tooltip\":_vm.tooltip,\"tooltipRender\":_vm.tooltipRender,\"textRender\":_vm.textRender,\"palettes\":_vm.palettes}},[_c('e-series-collection',[_c('e-series',{attrs:{\"dataSource\":_vm.seriesData,\"type\":\"StackingColumn\",\"xName\":\"periodName\",\"yName\":\"lowest\",\"name\":\" \",\"width\":\"2\",\"opacity\":\"0\",\"marker\":_vm.marker}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesData,\"type\":\"StackingColumn\",\"xName\":\"periodName\",\"yName\":\"medianMin\",\"name\":\"Min-Median\",\"opacity\":\"0.7\",\"width\":\"2\",\"marker\":_vm.marker}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesData,\"type\":\"StackingColumn\",\"xName\":\"periodName\",\"yName\":\"maxMedian\",\"name\":\"Median-Max\",\"opacity\":\"0.7\",\"width\":\"2\",\"marker\":_vm.marker}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesData,\"type\":\"StackingLine\",\"xName\":\"periodName\",\"yName\":\"m2m\",\"name\":\"M2M\",\"width\":\"2\",\"marker\":_vm.marker}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesData,\"type\":\"Line\",\"xName\":\"periodName\",\"yName\":\"reference\",\"name\":\"Reference\",\"width\":\"2\",\"marker\":_vm.marker}})],1)],1)],1),_c('ejs-grid',{ref:\"grid\",attrs:{\"dataSource\":_vm.gridData,\"allowFiltering\":false,\"allowPaging\":true,\"allowTextWrap\":true,\"textWrapSettings\":_vm.wrapSettings,\"allowResizing\":true,\"query\":_vm.gridQuery,\"allowReordering\":true,\"allowSorting\":true,\"toolbar\":_vm.toolbar,\"pageSettings\":_vm.pageSettings,\"actionFailure\":_vm.actionFailure,\"filterSettings\":_vm.filterOptions}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"periodName\",\"headerText\":\"Period\",\"width\":\"120\",\"isPrimaryKey\":true}}),_c('e-column',{attrs:{\"field\":\"reference\",\"headerText\":\"Reference\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n3\"}}),_c('e-column',{attrs:{\"field\":\"m2m\",\"headerText\":\"Current M2M\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n3\"}}),_c('e-column',{attrs:{\"field\":\"lowest\",\"headerText\":\"Lowest\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n3\"}}),_c('e-column',{attrs:{\"field\":\"firstQuartile\",\"headerText\":\"1st Quartile\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n3\"}}),_c('e-column',{attrs:{\"field\":\"median\",\"headerText\":\"Median\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n3\"}}),_c('e-column',{attrs:{\"field\":\"thridQuartile\",\"headerText\":\"3rd Quartile\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n3\"}}),_c('e-column',{attrs:{\"field\":\"highest\",\"headerText\":\"Highest\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n3\"}}),_c('e-column',{attrs:{\"field\":\"firstQuartileMin\",\"visible\":false,\"headerText\":\"1Q-Min\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n3\"}}),_c('e-column',{attrs:{\"field\":\"medianFirstQuartile\",\"visible\":false,\"headerText\":\"Median-1Q\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n3\"}}),_c('e-column',{attrs:{\"field\":\"thridQuartileMedian\",\"visible\":false,\"headerText\":\"3Q-Median\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n3\"}}),_c('e-column',{attrs:{\"field\":\"highestThridQuartile\",\"visible\":false,\"headerText\":\"Max-3Q\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n3\"}}),_c('e-column',{attrs:{\"field\":\"medianMin\",\"visible\":false,\"textAlign\":\"Right\",\"headerText\":\"Median-Min\",\"type\":\"number\",\"format\":\"n3\"}}),_c('e-column',{attrs:{\"field\":\"maxMedian\",\"visible\":false,\"textAlign\":\"Right\",\"headerText\":\"Max-Median\",\"type\":\"number\",\"format\":\"n3\"}})],1)],1)],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.costViewEnabled),expression:\"costViewEnabled\"}]},[_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.LineGraph),expression:\"LineGraph\"}],staticClass:\"bc-white\"},[_c('ejs-chart',{attrs:{\"id\":\"containerCost\",\"legendSettings\":_vm.legendSettings,\"title\":_vm.title,\"zoomSettings\":_vm.zoom,\"primaryXAxis\":_vm.primaryXAxis,\"primaryYAxis\":_vm.primaryYAxis,\"tooltip\":_vm.tooltip,\"tooltipRender\":_vm.tooltipRenderM2MAndReference,\"textRender\":_vm.textRender}},[_c('e-series-collection',[_c('e-series',{attrs:{\"dataSource\":_vm.seriesDataCost,\"type\":\"Line\",\"xName\":\"periodName\",\"yName\":\"m2mCost\",\"name\":\"M2M\",\"width\":\"2\",\"marker\":_vm.marker,\"fill\":\"#001c55\"}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesDataCost,\"type\":\"Line\",\"xName\":\"periodName\",\"yName\":\"referenceCost\",\"name\":\"Reference\",\"width\":\"2\",\"marker\":_vm.marker,\"fill\":\"#a35ea1\"}})],1)],1)],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.CandleGraph),expression:\"CandleGraph\"}],staticClass:\"bc-white\"},[_c('ejs-chart',{attrs:{\"id\":\"containerCost2\",\"legendSettings\":_vm.legendSettings,\"title\":_vm.title,\"zoomSettings\":_vm.zoom,\"primaryXAxis\":_vm.primaryXAxis,\"primaryYAxis\":_vm.primaryYAxis,\"tooltip\":_vm.tooltip,\"textRender\":_vm.textRender,\"tooltipRender\":_vm.tooltipRenderWhisker}},[_c('e-series-collection',[_c('e-series',{attrs:{\"dataSource\":_vm.seriesDataCost,\"tooltipFormat\":\" \",\"type\":\"Candle\",\"xName\":\"periodName\",\"high\":\"highestCost\",\"low\":\"lowestCost\",\"open\":\"firstQuartileCost\",\"close\":\"thridQuartileCost\",\"name\":\"Box plot\",\"bearFillColor\":\"#B3edff\",\"bullFillColor\":\"#B3edff\",\"fill\":\"#B3edff\",\"opacity\":\"0.5\",\"enableSolidCandles\":_vm.enableSolidCandles,\"marker\":_vm.candleMarker,\"border\":_vm.border}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesDataCost,\"type\":\"Line\",\"xName\":\"periodName\",\"yName\":\"medianCost\",\"name\":\"Median\",\"opacity\":\"0\",\"marker\":_vm.medianMarker,\"fill\":\"#d9853c\"}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesDataCost,\"type\":\"Line\",\"xName\":\"periodName\",\"yName\":\"m2mCost\",\"name\":\"M2M\",\"width\":\"2\",\"marker\":_vm.marker,\"fill\":\"#001c55\"}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesDataCost,\"type\":\"Line\",\"xName\":\"periodName\",\"yName\":\"referenceCost\",\"name\":\"Reference\",\"width\":\"2\",\"marker\":_vm.marker,\"fill\":\"#a35ea1\"}})],1)],1)],1),_c('div',{directives:[{name:\"show\",rawName:\"v-show\",value:(_vm.StackedGraph),expression:\"StackedGraph\"}],staticClass:\"bc-white\"},[_c('ejs-chart',{attrs:{\"id\":\"containerCost3\",\"legendSettings\":_vm.legendSettings,\"title\":_vm.title,\"zoomSettings\":_vm.zoom,\"primaryXAxis\":_vm.primaryXAxis,\"primaryYAxis\":_vm.primaryYAxis,\"tooltipRender\":_vm.tooltipRender,\"tooltip\":_vm.tooltip,\"textRender\":_vm.textRender,\"palettes\":_vm.palettes}},[_c('e-series-collection',[_c('e-series',{attrs:{\"dataSource\":_vm.seriesDataCost,\"type\":\"StackingColumn\",\"xName\":\"periodName\",\"yName\":\"lowestCost\",\"name\":\" \",\"width\":\"2\",\"opacity\":\"0\",\"marker\":_vm.marker}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesDataCost,\"type\":\"StackingColumn\",\"xName\":\"periodName\",\"yName\":\"medianMinCost\",\"name\":\"Min-Median\",\"opacity\":\"0.7\",\"width\":\"2\",\"marker\":_vm.marker}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesDataCost,\"type\":\"StackingColumn\",\"xName\":\"periodName\",\"yName\":\"maxMedianCost\",\"name\":\"Median-Max\",\"opacity\":\"0.7\",\"width\":\"2\",\"marker\":_vm.marker}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesDataCost,\"type\":\"StackingLine\",\"xName\":\"periodName\",\"yName\":\"m2mCost\",\"name\":\"M2M\",\"width\":\"2\",\"marker\":_vm.marker}}),_c('e-series',{attrs:{\"dataSource\":_vm.seriesDataCost,\"type\":\"Line\",\"xName\":\"periodName\",\"yName\":\"referenceCost\",\"name\":\"Reference\",\"width\":\"2\",\"marker\":_vm.marker}})],1)],1)],1),_c('ejs-grid',{ref:\"costGrid\",attrs:{\"dataSource\":_vm.gridData,\"allowFiltering\":false,\"allowPaging\":true,\"allowTextWrap\":true,\"textWrapSettings\":_vm.wrapSettings,\"allowResizing\":true,\"query\":_vm.gridQuery,\"allowReordering\":true,\"allowSorting\":true,\"toolbar\":_vm.toolbar,\"pageSettings\":_vm.pageSettings,\"actionFailure\":_vm.actionFailure,\"filterSettings\":_vm.filterOptions}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"periodName\",\"headerText\":\"Period\",\"width\":\"120\",\"isPrimaryKey\":true}}),_c('e-column',{attrs:{\"field\":\"referenceCost\",\"headerText\":\"Reference\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n0\"}}),_c('e-column',{attrs:{\"field\":\"m2mCost\",\"headerText\":\"Current M2M\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n0\"}}),_c('e-column',{attrs:{\"field\":\"lowestCost\",\"headerText\":\"Lowest\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n0\"}}),_c('e-column',{attrs:{\"field\":\"firstQuartileCost\",\"headerText\":\"1st Quartile\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n0\"}}),_c('e-column',{attrs:{\"field\":\"medianCost\",\"headerText\":\"Median\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n0\"}}),_c('e-column',{attrs:{\"field\":\"thridQuartileCost\",\"headerText\":\"3rd Quartile\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n0\"}}),_c('e-column',{attrs:{\"field\":\"highestCost\",\"headerText\":\"Highest\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n0\"}}),_c('e-column',{attrs:{\"field\":\"firstQuartileMinCost\",\"visible\":false,\"headerText\":\"1Q-Min\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n0\"}}),_c('e-column',{attrs:{\"field\":\"medianFirstQuartileCost\",\"visible\":false,\"headerText\":\"Median-1Q\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n0\"}}),_c('e-column',{attrs:{\"field\":\"thridQuartileMedianCost\",\"visible\":false,\"headerText\":\"3Q-Median\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n0\"}}),_c('e-column',{attrs:{\"field\":\"highestThridQuartileCost\",\"visible\":false,\"headerText\":\"Max-3Q\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n0\"}}),_c('e-column',{attrs:{\"field\":\"medianMinCost\",\"textAlign\":\"Right\",\"visible\":false,\"headerText\":\"Median-Min\",\"type\":\"number\",\"format\":\"n0\"}}),_c('e-column',{attrs:{\"field\":\"maxMedianCost\",\"textAlign\":\"Right\",\"visible\":false,\"headerText\":\"Max-Median\",\"type\":\"number\",\"format\":\"n0\"}})],1)],1)],1)])])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <CRow>\r\n        <CCol col>\r\n            <div class=\"col-lg-12 control-section\" style=\"padding:10px;position:relative;\">\r\n                <div id=\"cappSpinner\"></div>\r\n                <div class=\"form-row\">\r\n                    <div class=\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\">\r\n                        <ejs-dropdownlist ref='dplYears' id=\"years\" name=\"years\" :change='onYearsChange' floatLabelType='Auto' :dataSource='contractYears' :fields=\"{text: 'name', value: 'id' }\" :index='periodsIndex' placeholder=\"Years\" :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                    </div>\r\n                    <div class=\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\">\r\n                        <ejs-dropdownlist ref='dplPeriods' id='dplPeriods' :dataSource='periods' placeholder='Period' floatLabelType='Auto' :index='periodsIndex' :change='onPeriodsChange' :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                    </div>\r\n                    <div class=\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\">\r\n                        <ejs-dropdownlist ref='dplCurrencyCAP' id=\"currencyCAP\" name=\"currency\" v-model=\"data.currencyId\" :change=\"onCurrencyChangeCAP\" :dataSource='currenciesCAP' :fields=\"{text: 'name', value: 'currencyId' }\" placeholder=\"Currency\" floatLabelType='Auto' :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                    </div>\r\n                    <div class=\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\" v-if=\"showPriceAreaSection\">\r\n                        <ejs-dropdownlist ref='dplPriceAreaCost' id=\"priceAreaCost\" name=\"priceAreaCostName\" :enabled=\"false\" :change='onPriceAreaCostChange' floatLabelType='Auto' :dataSource='priceAreaCost' :index='periodsIndex' :fields=\"{text: 'name', value: 'id' }\" placeholder=\"Price Area:\" :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                    </div>\r\n\r\n                </div>\r\n                <div class=\"form-row\">\r\n                    <div class=\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\">\r\n                        <ejs-dropdownlist ref='dplGraphTypes' id='dplGraphTypes' :dataSource='graphTypes' placeholder='Type' floatLabelType='Auto' :index='periodsIndex' :change='onGraphChange' :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                    </div>\r\n                    <div class=\"form-group col-md-4 ml-5 d-flex justify-content-center input-group\">\r\n                        <ejs-dropdownlist ref='dplPerformanceTypes' id='dplPerformanceTypes' :dataSource='performanceTypes' placeholder='Performance type' floatLabelType='Auto' :index='periodsIndex' :change='onTypeChange' :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                    </div>\r\n                    <ejs-checkbox ref=\"costCheckDM\" :change=\"onCheckCostAndPriceDefault\" label='Default Mechanism' id=\"CostAndPriceCheckDefalt\" name=\"checkName\" floatLabelType='Auto' cssClass=\"costAndPriceCheck check-d\"></ejs-checkbox>\r\n                </div>\r\n                <div class=\"form-row  justify-content-end \">\r\n                    <ejs-button style=\"margin-right:10px\" cssClass=\"e-primary\" v-on:click.native='download'>Price And Cost Performance Report</ejs-button>\r\n                </div>\r\n                <div v-show=\"priceViewEnabled\">\r\n                    <div v-show=\"LineGraph\"  class=\"bc-white\">\r\n                        <ejs-chart id=\"container\" :title='title' :legendSettings=\"legendSettings\" :zoomSettings='zoom' :primaryXAxis='primaryXAxis' :primaryYAxis='primaryYAxis' :tooltip='tooltip' :tooltipRender='tooltipRenderM2MAndReference' :textRender='textRender'>\r\n                            <e-series-collection>\r\n                                <e-series :dataSource=\"seriesData\" type=\"Line\" xName=\"periodName\" yName=\"m2m\" name=\"M2M\" width=\"2\" :marker=\"marker\" fill=\"#001c55\"></e-series>\r\n                                <e-series :dataSource=\"seriesData\" type=\"Line\" xName=\"periodName\" yName=\"reference\" name=\"Reference\" width=\"2\" :marker=\"marker\" fill=\"#a35ea1\"></e-series>\r\n                            </e-series-collection>\r\n                        </ejs-chart>\r\n                    </div>\r\n                    <div v-show=\"CandleGraph\"  class=\"bc-white\">\r\n                        <ejs-chart id=\"container2\" :title='title' :legendSettings=\"legendSettings\" :zoomSettings='zoom' :primaryXAxis='primaryXAxis' :primaryYAxis='primaryYAxis' :tooltip='tooltip' :textRender='textRender' :tooltipRender='tooltipRenderWhisker'>\r\n                            <e-series-collection>\r\n                                <e-series :dataSource='seriesData' tooltipFormat=' ' type='Candle' xName='periodName' high='highest' low='lowest'\r\n                                          open='firstQuartile' close='thridQuartile' name='Box plot' bearFillColor='#B3edff' bullFillColor='#B3edff' fill=\"#B3edff\" opacity=0.5 :enableSolidCandles='enableSolidCandles' :marker=\"candleMarker\" :border='border'> </e-series>\r\n\r\n                                <e-series :dataSource='seriesData' type='Line' xName='periodName' yName='median' name='Median' opacity=0 :marker=\"medianMarker\" fill=\"#d9853c\"> </e-series>\r\n                                <e-series :dataSource=\"seriesData\" type=\"Line\" xName=\"periodName\" yName=\"m2m\" name=\"M2M\" width=\"2\" :marker=\"marker\" fill=\"#001c55\"></e-series>\r\n                                <e-series :dataSource=\"seriesData\" type=\"Line\" xName=\"periodName\" yName=\"reference\" name=\"Reference\" width=\"2\" :marker=\"marker\" fill=\"#a35ea1\"></e-series>\r\n                            </e-series-collection>\r\n                        </ejs-chart>\r\n                    </div>\r\n                    <div v-show=\"StackedGraph\"  class=\"bc-white\">\r\n                        <ejs-chart id=\"container3\" :title='title' :legendSettings=\"legendSettings\" :zoomSettings='zoom' :primaryXAxis='primaryXAxis' :primaryYAxis='primaryYAxis' :tooltip='tooltip' :tooltipRender='tooltipRender' :textRender='textRender'\r\n                                   :palettes=\"palettes\">\r\n                            <e-series-collection>\r\n                                <e-series :dataSource=\"seriesData\" type=\"StackingColumn\" xName=\"periodName\" yName=\"lowest\" name=\" \" width=\"2\" opacity=0 :marker=\"marker\"></e-series>\r\n                                <e-series :dataSource=\"seriesData\" type=\"StackingColumn\" xName=\"periodName\" yName=\"medianMin\" name=\"Min-Median\" opacity=0.7 width=\"2\" :marker=\"marker\"></e-series>\r\n                                <e-series :dataSource=\"seriesData\" type=\"StackingColumn\" xName=\"periodName\" yName=\"maxMedian\" name=\"Median-Max\" opacity=0.7 width=\"2\" :marker=\"marker\"></e-series>\r\n                                <e-series :dataSource=\"seriesData\" type=\"StackingLine\" xName=\"periodName\" yName=\"m2m\" name=\"M2M\" width=\"2\" :marker=\"marker\"></e-series>\r\n                                <e-series :dataSource=\"seriesData\" type=\"Line\" xName=\"periodName\" yName=\"reference\" name=\"Reference\" width=\"2\" :marker=\"marker\"></e-series>\r\n\r\n                            </e-series-collection>\r\n                        </ejs-chart>\r\n                    </div>\r\n                    <ejs-grid ref='grid' :dataSource=\"gridData\" :allowFiltering='false' :allowPaging=\"true\" :allowTextWrap='true' :textWrapSettings='wrapSettings' :allowResizing='true' :query='gridQuery' :allowReordering='true' :allowSorting='true' :toolbar='toolbar' :pageSettings='pageSettings' :actionFailure=\"actionFailure\" :filterSettings='filterOptions'>\r\n                        <e-columns>\r\n                            <e-column field='periodName' headerText='Period' width=120 :isPrimaryKey='true'></e-column>\r\n\r\n                            <e-column field='reference' headerText='Reference' textAlign='Right' type=\"number\" format=\"n3\"></e-column>\r\n                            <e-column field='m2m' headerText='Current M2M' textAlign='Right' type=\"number\" format=\"n3\"></e-column>\r\n                            <e-column field='lowest' headerText='Lowest' textAlign='Right' type=\"number\" format=\"n3\"></e-column>\r\n                            <e-column field='firstQuartile' headerText='1st Quartile' textAlign='Right' type=\"number\" format=\"n3\"></e-column>\r\n                            <e-column field='median' headerText='Median' textAlign='Right' type=\"number\" format=\"n3\"></e-column>\r\n                            <e-column field='thridQuartile' headerText='3rd Quartile' textAlign='Right' type=\"number\" format=\"n3\"></e-column>\r\n                            <e-column field='highest' headerText='Highest' textAlign='Right' type=\"number\" format=\"n3\"></e-column>\r\n\r\n                            <e-column field='firstQuartileMin' :visible='false'  headerText='1Q-Min' textAlign='Right' type=\"number\" format=\"n3\"></e-column>\r\n                            <e-column field='medianFirstQuartile' :visible='false'  headerText='Median-1Q' textAlign='Right' type=\"number\" format=\"n3\"></e-column>\r\n                            <e-column field='thridQuartileMedian' :visible='false'  headerText='3Q-Median' textAlign='Right' type=\"number\" format=\"n3\"></e-column>\r\n                            <e-column field='highestThridQuartile' :visible='false'  headerText='Max-3Q' textAlign='Right' type=\"number\" format=\"n3\"></e-column>\r\n                            <e-column field='medianMin' :visible='false'  textAlign='Right' headerText='Median-Min' type=\"number\" format=\"n3\"></e-column>\r\n                            <e-column field='maxMedian' :visible='false'  textAlign='Right' headerText='Max-Median' type=\"number\" format=\"n3\"></e-column>\r\n                        </e-columns>\r\n                    </ejs-grid>\r\n                </div>\r\n                <div v-show=\"costViewEnabled\">\r\n\r\n                    <div v-show=\"LineGraph\"  class=\"bc-white\">\r\n                        <ejs-chart id=\"containerCost\" :legendSettings=\"legendSettings\" :title='title' :zoomSettings='zoom' :primaryXAxis='primaryXAxis' :primaryYAxis='primaryYAxis' :tooltip='tooltip' :tooltipRender=\"tooltipRenderM2MAndReference\" :textRender='textRender'>\r\n                            <e-series-collection>\r\n                                <e-series :dataSource=\"seriesDataCost\" type=\"Line\" xName=\"periodName\" yName=\"m2mCost\" name=\"M2M\" width=\"2\" :marker=\"marker\" fill=\"#001c55\"></e-series>\r\n                                <e-series :dataSource=\"seriesDataCost\" type=\"Line\" xName=\"periodName\" yName=\"referenceCost\" name=\"Reference\" width=\"2\" :marker=\"marker\" fill=\"#a35ea1\"></e-series>\r\n                            </e-series-collection>\r\n                        </ejs-chart>\r\n                    </div>\r\n                    <div v-show=\"CandleGraph\"  class=\"bc-white\">\r\n                        <ejs-chart id=\"containerCost2\" :legendSettings=\"legendSettings\" :title='title' :zoomSettings='zoom' :primaryXAxis='primaryXAxis' :primaryYAxis='primaryYAxis' :tooltip='tooltip' :textRender='textRender' :tooltipRender='tooltipRenderWhisker' >\r\n                            <e-series-collection>\r\n                                <e-series :dataSource='seriesDataCost' tooltipFormat=' ' type='Candle' xName='periodName' high='highestCost' low='lowestCost'\r\n                                          open='firstQuartileCost' close='thridQuartileCost' name='Box plot' bearFillColor='#B3edff' bullFillColor='#B3edff' fill=\"#B3edff\" opacity=0.5 :enableSolidCandles='enableSolidCandles' :marker=\"candleMarker\" :border='border'> </e-series>\r\n\r\n                                <e-series :dataSource='seriesDataCost' type='Line' xName='periodName' yName='medianCost' name='Median' opacity=0 :marker=\"medianMarker\" fill=\"#d9853c\"> </e-series>\r\n                                <e-series :dataSource=\"seriesDataCost\" type=\"Line\" xName=\"periodName\" yName=\"m2mCost\" name=\"M2M\" width=\"2\" :marker=\"marker\" fill=\"#001c55\"></e-series>\r\n                                <e-series :dataSource=\"seriesDataCost\" type=\"Line\" xName=\"periodName\" yName=\"referenceCost\" name=\"Reference\" width=\"2\" :marker=\"marker\" fill=\"#a35ea1\"></e-series>\r\n                            </e-series-collection>\r\n                        </ejs-chart>\r\n                    </div>\r\n                    <div v-show=\"StackedGraph\"  class=\"bc-white\">\r\n                        <ejs-chart id=\"containerCost3\" :legendSettings=\"legendSettings\" :title='title' :zoomSettings='zoom' :primaryXAxis='primaryXAxis' :primaryYAxis='primaryYAxis' :tooltipRender='tooltipRender' :tooltip='tooltip' :textRender='textRender'\r\n                                   :palettes=\"palettes\">\r\n                            <e-series-collection>\r\n                                <e-series :dataSource=\"seriesDataCost\" type=\"StackingColumn\" xName=\"periodName\" yName=\"lowestCost\" name=\" \" width=\"2\" opacity=0 :marker=\"marker\"></e-series>\r\n                                <e-series :dataSource=\"seriesDataCost\" type=\"StackingColumn\" xName=\"periodName\" yName=\"medianMinCost\" name=\"Min-Median\" opacity=0.7 width=\"2\" :marker=\"marker\"></e-series>\r\n                                <e-series :dataSource=\"seriesDataCost\" type=\"StackingColumn\" xName=\"periodName\" yName=\"maxMedianCost\" name=\"Median-Max\" opacity=0.7 width=\"2\" :marker=\"marker\"></e-series>\r\n                                <e-series :dataSource=\"seriesDataCost\" type=\"StackingLine\" xName=\"periodName\" yName=\"m2mCost\" name=\"M2M\" width=\"2\" :marker=\"marker\"></e-series>\r\n                                <e-series :dataSource=\"seriesDataCost\" type=\"Line\" xName=\"periodName\" yName=\"referenceCost\" name=\"Reference\" width=\"2\" :marker=\"marker\"></e-series>\r\n                            </e-series-collection>\r\n                        </ejs-chart>\r\n                    </div>\r\n                    <ejs-grid ref='costGrid' :dataSource=\"gridData\" :allowFiltering='false' :allowPaging=\"true\" :allowTextWrap='true' :textWrapSettings='wrapSettings' :allowResizing='true' :query='gridQuery' :allowReordering='true' :allowSorting='true' :toolbar='toolbar' :pageSettings='pageSettings' :actionFailure=\"actionFailure\" :filterSettings='filterOptions'>\r\n                        <e-columns>\r\n                            <e-column field='periodName' headerText='Period' width=120 :isPrimaryKey='true'></e-column>\r\n\r\n                            <e-column field='referenceCost' headerText='Reference' textAlign='Right' type=\"number\" format=\"n0\"></e-column>\r\n                            <e-column field='m2mCost' headerText='Current M2M' textAlign='Right' type=\"number\" format=\"n0\"></e-column>\r\n                            <e-column field='lowestCost' headerText='Lowest' textAlign='Right' type=\"number\" format=\"n0\"></e-column>\r\n                            <e-column field='firstQuartileCost' headerText='1st Quartile' textAlign='Right' type=\"number\" format=\"n0\"></e-column>\r\n                            <e-column field='medianCost' headerText='Median' textAlign='Right' type=\"number\" format=\"n0\"></e-column>\r\n                            <e-column field='thridQuartileCost' headerText='3rd Quartile' textAlign='Right' type=\"number\" format=\"n0\"></e-column>\r\n                            <e-column field='highestCost' headerText='Highest' textAlign='Right' type=\"number\" format=\"n0\"></e-column>\r\n\r\n                            <e-column field='firstQuartileMinCost' :visible='false' headerText='1Q-Min' textAlign='Right' type=\"number\" format=\"n0\"></e-column>\r\n                            <e-column field='medianFirstQuartileCost' :visible='false'  headerText='Median-1Q' textAlign='Right' type=\"number\" format=\"n0\"></e-column>\r\n                            <e-column field='thridQuartileMedianCost' :visible='false'  headerText='3Q-Median' textAlign='Right' type=\"number\" format=\"n0\"></e-column>\r\n                            <e-column field='highestThridQuartileCost' :visible='false'  headerText='Max-3Q' textAlign='Right' type=\"number\" format=\"n0\"></e-column>\r\n                            <e-column field='medianMinCost' textAlign='Right' :visible='false'  headerText='Median-Min' type=\"number\" format=\"n0\"></e-column>\r\n                            <e-column field='maxMedianCost' textAlign='Right' :visible='false'  headerText='Max-Median' type=\"number\" format=\"n0\"></e-column>\r\n                        </e-columns>\r\n                    </ejs-grid>\r\n                </div>\r\n            </div>\r\n        </CCol>\r\n    </CRow>\r\n</template>\r\n\r\n<script>\r\n    import Vue from \"vue\";\r\n    import { GridPlugin, Edit, Page, Toolbar, Sort, Filter, Reorder, Resize, ExcelExport, ForeignKey, CommandColumn } from \"@syncfusion/ej2-vue-grids\";\r\n    import { DropDownList } from \"@syncfusion/ej2-dropdowns\";\r\n    import { UploaderPlugin } from '@syncfusion/ej2-vue-inputs';\r\n    import { DialogUtility } from '@syncfusion/ej2-popups';\r\n    import SyncHelper from '../../common/syncfusion';\r\n    import { Query } from '@syncfusion/ej2-data';\r\n    import gridOptions from '../../common/gridOptions'\r\n    import dates from '../../common/dates'\r\n    import urls from '../../common/urls';\r\n    import apis from '../../common/network'\r\n    import { DatePickerPlugin, DatePicker } from '@syncfusion/ej2-vue-calendars';\r\n    import { CheckBoxPlugin, CheckBox } from \"@syncfusion/ej2-vue-buttons\";\r\n    import { ChartPlugin, ColumnSeries, StripLine, LineSeries, DataLabel, Category, DateTime, Tooltip, ChartAnnotation, Zoom, MultiColoredLineSeries } from \"@syncfusion/ej2-vue-charts\";\r\n    import { StackingLineSeries, StackingColumnSeries, ScatterSeries, CandleSeries, Legend } from \"@syncfusion/ej2-vue-charts\";\r\n\r\n    import { DialogPlugin } from '@syncfusion/ej2-vue-popups';\r\n    import { ButtonPlugin } from '@syncfusion/ej2-vue-buttons';\r\n    import { enableRipple } from '@syncfusion/ej2-base';\r\n    import { TextBox } from \"@syncfusion/ej2-inputs\";\r\n    import store from '../../store';\r\n    import { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\r\n\r\n\r\n    Vue.use(ChartPlugin);\r\n    Vue.use(UploaderPlugin);\r\n    Vue.use(DialogUtility);\r\n    Vue.use(GridPlugin);\r\n    Vue.use(CheckBoxPlugin);\r\n    Vue.use(ButtonPlugin);\r\n    Vue.use(DialogPlugin);\r\n    enableRipple(true);\r\n    export default {\r\n        components: {\r\n        },\r\n        data() {\r\n            return {\r\n                // needed because of form being loaded from tab,in such cases this isnt available and store is loaded from import\r\n                store: store,\r\n                palettes: [\"#fff\", \"#1a9470\", \"#f25c54\", \"#001c55\", \"#a35ea1\"],\r\n                periodsIndex: 0,\r\n                periodsIndexCurrency: 3,\r\n                performanceTypes: ['Price', 'Cost'],\r\n                graphTypes: ['Line', 'Candle', 'Stacked'],\r\n                periods: ['Month', 'Quarter', 'Season', 'Fiscal', 'Calendar'],\r\n                draggable: true,\r\n                position: { X: 'center', Y: 'center' },\r\n                zoom:\r\n                {\r\n                    enableMouseWheelZooming: true,\r\n                    enablePinchZooming: true,\r\n                    enableSelectionZooming: true\r\n                },\r\n                priceViewEnabled: true,\r\n                costViewEnabled: false,\r\n                LineGraph: true,\r\n                CandleGraph: false,\r\n                StackedGraph: false,\r\n                loadGraphData: null,\r\n                enableSolidCandles: true,\r\n                showPriceAreaSection: false,\r\n                contractId: parseInt(store.state.reportContractId),\r\n                priceAreaNames: store.state.pricingAreaNames,\r\n                gridQuery: new Query().addParams(\"contractId\", store.state.reportContractId),\r\n                title: \"\",\r\n                tooltip: { enable: true},\r\n                //type: \"\",\r\n                max: 0,\r\n                min: 0,\r\n                border: {\r\n                    color: \"#f25c54\", width: 2 },\r\n                wrapSettings: { wrapMode: 'Header' },\r\n                gridData: null,\r\n                seriesData: null,\r\n                seriesDataCost : null,\r\n                pageSettings: gridOptions.pageSettings,\r\n                toolbar: [],\r\n                requiredRules: { required: true },\r\n                percentageRules: { required: true, number: true },\r\n                nameRules: { required: true, maxLength: 50 },\r\n                editparams: { params: { popupHeight: '300px' } },\r\n                filterOptions: gridOptions.filterSettings,\r\n                primaryXAxis: {\r\n                    valueType: 'Category',\r\n                    title: '',\r\n                    labelStyle: {\r\n                        fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '14px', fontWeight: 'normal', textAnchor: 'middle', color: '#7d84b2' }\r\n                },\r\n                legendSettings: {\r\n                    textStyle: {\r\n                        fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '13px', fontWeight: 'normal', textAnchor: 'middle', color: '#7d84b2' }\r\n                },\r\n                primaryYAxis:\r\n                {\r\n                    title: 'Price',\r\n                    titleStyle: {\r\n                        fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '14px', fontWeight: 'normal', textAnchor: 'middle', color: '#7d84b2' },\r\n                    labelStyle: {\r\n                        fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '14px', fontWeight: 'normal', textAnchor: 'middle', color: '#7d84b2' }\r\n                },\r\n                titleStyle: {\r\n                    fontFamily: \"Arial Narrow\",\r\n                    fontStyle: 'italic',\r\n                    fontWeight: 'regular',\r\n                    color: \"#ff9c54\",\r\n                    size: '23px'\r\n                },\r\n                title: this.title,\r\n                medianMarker: { visible: true, shape: 'HorizontalLine', dataLabel: { visible: true } },\r\n                candleMarker: { dataLabel: { visible: false } },\r\n                marker: { visible: true, dataLabel: { visible: true } },\r\n                type: 'Price',\r\n                allowFiltering: true\r\n            };\r\n        },\r\n        methods: {\r\n\r\n            onPriceAreaCostChange: function (args) {\r\n                let currencyId = this.$refs.dplCurrencyCAP.ej2Instances.value;\r\n                let year = document.getElementById('years').value;\r\n                let performanceType = document.getElementById('dplPerformanceTypes').value;\r\n                if (args.isInteracted) {\r\n\r\n                    this.loadGraph(year, currencyId, performanceType, args.itemData.id, false);\r\n                }\r\n            },\r\n            onCheckPASystemCost(args) {\r\n                let pricingAreaId = document.getElementById('priceAreaCost') == null ? undefined : document.getElementById('priceAreaCost').ej2_instances[0].value;\r\n                let currencyId = this.$refs.dplCurrencyCAP.ej2Instances.value;\r\n                let year = document.getElementById('years').value;\r\n                let performanceType = document.getElementById('dplPerformanceTypes').value;\r\n                console.log()\r\n                    this.loadGraph(year, currencyId, performanceType, pricingAreaId, false);\r\n                \r\n            },\r\n\r\n            tooltipRender: function (args) {\r\n                \r\n                var pointData = this.seriesData.filter(tp => { return tp.periodName === args.data.pointX })[0];\r\n                var unit = this.type == 'Cost' ? this.loadGraphData.currency : this.loadGraphData.value;\r\n                var median = this.type == 'Cost' ? pointData.medianCost?.toLocaleString(\"en-US\", { maximumFractionDigits: 0 }) : pointData.median?.toLocaleString(\"en-US\", { minimumFractionDigits: 3, maximumFractionDigits: 3 });\r\n                if (args.data.seriesName == \"Median-Max\") {\r\n\r\n                    var max = this.type == 'Cost' ? pointData.highestCost.toLocaleString(\"en-US\", { maximumFractionDigits: 0 }) : pointData.highest.toLocaleString(\"en-US\", { minimumFractionDigits: 3, maximumFractionDigits: 3 });\r\n                    args.text = \"Median: \" + median + \" \" + unit + \"<br> Max: \" + max + \" \" + unit;\r\n                }\r\n                else if (args.data.seriesName == \"Min-Median\"){\r\n                    var min = this.type == 'Cost' ? pointData.lowestCost.toLocaleString(\"en-US\", { maximumFractionDigits: 0 }) : pointData.lowest.toLocaleString(\"en-US\", { minimumFractionDigits: 3, maximumFractionDigits: 3 });\r\n                    args.text = \"Median: \" + median + \" \" + unit + \"<br> Min: \" + min + \" \" + unit ;\r\n                }\r\n\r\n                this.tooltipRenderM2MAndReference(args);\r\n\r\n            },\r\n            tooltipRenderWhisker: function (args) {\r\n                var pointData = this.seriesData.filter(tp => { return tp.periodName === args.data.pointX })[0];\r\n                var unit = this.type == 'Cost' ? this.loadGraphData.currency : this.loadGraphData.value;\r\n                if (args.data.seriesName == \"Box plot\") {\r\n                    var max = this.type == 'Cost' ? pointData.highestCost.toLocaleString(\"en-US\", { maximumFractionDigits: 0 }) : pointData.highest.toLocaleString(\"en-US\", { minimumFractionDigits: 3, maximumFractionDigits: 3 });\r\n                    var min = this.type == 'Cost' ? pointData.lowestCost.toLocaleString(\"en-US\", { maximumFractionDigits: 0 }) : pointData.lowest.toLocaleString(\"en-US\", { minimumFractionDigits: 3, maximumFractionDigits: 3 });\r\n                    var firstQ = this.type == 'Cost' ? pointData.firstQuartileCost.toLocaleString(\"en-US\", { maximumFractionDigits: 0 }) : pointData.firstQuartile.toLocaleString(\"en-US\", { minimumFractionDigits: 3, maximumFractionDigits: 3 });\r\n                    var thirdQ = this.type == 'Cost' ? pointData.thridQuartileCost.toLocaleString(\"en-US\", { maximumFractionDigits: 0 }) : pointData.thridQuartile.toLocaleString(\"en-US\", { minimumFractionDigits: 3, maximumFractionDigits: 3 });\r\n\r\n                    args.text = \"Min: \" + min + \" \" + unit + \"<br> 1Q: \" + firstQ + \" \" + unit + \"<br> 3Q: \" + thirdQ + \" \" + unit + \"<br> Max: \" + max + \" \" + unit;\r\n                }\r\n                else if (args.data.seriesName == 'Median') {\r\n                    var medianValue = this.type == 'Cost' ? pointData.medianCost.toLocaleString(\"en-US\", { maximumFractionDigits: 0 }) : pointData.median.toLocaleString(\"en-US\", { minimumFractionDigits: 3, maximumFractionDigits: 3 });\r\n                    args.text = \"Median: \" + medianValue + \" \" + unit;\r\n                }\r\n                this.tooltipRenderM2MAndReference(args);\r\n            },\r\n            onCheckCostAndPriceDefault(args) {\r\n                store.state.isCheckDefaultM = args.checked;\r\n                let pricingAreaId = document.getElementById('priceAreaCost') == null ? undefined : document.getElementById('priceAreaCost').ej2_instances[0].value;\r\n                let currencyId = this.$refs.dplCurrencyCAP.ej2Instances.value;\r\n                let year = document.getElementById('years').value;\r\n                let performanceType = document.getElementById('dplPerformanceTypes').value;\r\n               \r\n                    this.loadGraph(year, currencyId, performanceType, pricingAreaId, false);\r\n                \r\n               \r\n            },\r\n            onYearsChange: function (e) {\r\n                this.loadGraph(e.value);\r\n            },\r\n            onPeriodsChange: function (e) {\r\n                let pricingAreaId = document.getElementById('priceAreaCost') == null ? undefined : document.getElementById('priceAreaCost').ej2_instances[0].value;\r\n                let currencyId = this.$refs.dplCurrencyCAP.ej2Instances.value;\r\n                let year = document.getElementById('years').value;\r\n                let performanceType = document.getElementById('dplPerformanceTypes').value;\r\n                \r\n                    this.loadGraph(year, currencyId, performanceType, pricingAreaId, false);\r\n                \r\n                this.updateGraph();\r\n            },\r\n            onTypeChange: function (e) {\r\n                this.type = e.value;\r\n                let pricingAreaId = document.getElementById('priceAreaCost') == null ? undefined : document.getElementById('priceAreaCost').ej2_instances[0].value;\r\n                let currencyId = this.$refs.dplCurrencyCAP.ej2Instances.value;\r\n                let year = document.getElementById('years').value;\r\n               \r\n                    this.loadGraph(year, currencyId, this.type, pricingAreaId, false);\r\n                \r\n                this.updateGraph();\r\n            },\r\n            onGraphChange: function (e) {\r\n                this.updateGraphTpeToShow(e.value);\r\n            },\r\n            textRender: function (args) {\r\n                args.text = \"\";\r\n            },\r\n            onCurrencyChangeCAP: function (args) {\r\n                let pricingAreaId = document.getElementById('priceAreaCost') == null ? undefined : document.getElementById('priceAreaCost').ej2_instances[0].value;\r\n                let currencyId = args.itemData.currencyId;\r\n                let year = document.getElementById('years').value;\r\n                let performanceType = document.getElementById('dplPerformanceTypes').value;\r\n               \r\n                    this.loadGraph(year, currencyId, performanceType, pricingAreaId, false);\r\n                \r\n\r\n            },\r\n            loadGraph: function (year, currencyId, type, pricingAreaId, priceSystemArea) {\r\n                this.showPriceAreaSection = this.priceAreaNames == undefined ? false : true;\r\n                console.log(this.priceAreaNames);\r\n                showSpinner(document.getElementById('cappSpinner'));\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                apis.protectedApi(`Report/GetPricePerformanceForContract?contractId=${this.contractId}&year=${year}&currencyId=${currencyId == undefined ? \"\" : currencyId}&performanceType=${type}&defaultM=${this.$refs.costCheckDM.ej2Instances.checked}\r\n                &pricingAreaId=${pricingAreaId == undefined ? \"\" : pricingAreaId}&priceSystemArea=${priceSystemArea == undefined ? false : priceSystemArea} `).then(it => {\r\n                    this.loadGraphData = it.data;\r\n                    this.updateGraph();\r\n                    this.$refs.costCheckDM.ej2Instances.checked = store.state.isCheckDefaultM;\r\n                    if (it.data.value == 'p/therm') {\r\n\r\n                        this.$refs.dplCurrencyCAP.ej2Instances.text = \"p - GBp\";\r\n\r\n                    } else {\r\n\r\n                        this.$refs.dplCurrencyCAP.ej2Instances.text = it.data.currencySymbolAndName;\r\n                    }\r\n                    hideSpinner(document.getElementById('cappSpinner'));\r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                })\r\n                    .catch(\r\n                        response => {\r\n                            hideSpinner(document.getElementById('cappSpinner'));\r\n                            hideSpinner(document.getElementById('mainSpinner'));\r\n                            var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                            gridOptions.errorAlert(\"Error: \" + message);\r\n                        }\r\n                    );\r\n            },\r\n            updateGraph: function () {\r\n                if (this.loadGraphData != null) {\r\n                    var chart, chart2, chart3;\r\n                    var title = \"\";\r\n                    var type = this.$refs.dplPerformanceTypes.ej2Instances.value;\r\n                    if (type == 'Cost') {\r\n                        title = type + ' ' + this.loadGraphData.currency;\r\n                        this.seriesDataCost = this.getSeriesData();\r\n                        this.gridData = this.getSeriesData();\r\n                        this.costViewEnabled = true;\r\n                        this.priceViewEnabled = false;\r\n                        chart = document.getElementById('containerCost').ej2_instances[0];\r\n                        chart2 = document.getElementById('containerCost2').ej2_instances[0];\r\n                        chart3 = document.getElementById('containerCost3').ej2_instances[0];\r\n\r\n                        this.$refs.costGrid.refresh();\r\n                    } else {\r\n                        title = type + ' ' + this.loadGraphData.value;\r\n                        this.seriesData = this.getSeriesData();\r\n                        this.gridData = this.getSeriesData();\r\n                        this.costViewEnabled = false;\r\n                        this.priceViewEnabled = true;\r\n                        chart = document.getElementById('container').ej2_instances[0];\r\n                        chart2 = document.getElementById('container2').ej2_instances[0];\r\n                        chart3 = document.getElementById('container3').ej2_instances[0];\r\n\r\n                        this.$refs.grid.refresh();\r\n\r\n                    }\r\n\r\n                    chart.primaryYAxis =\r\n                    {\r\n                        title: title\r\n                    };\r\n                    chart2.primaryYAxis = chart.primaryYAxis;\r\n                    chart3.primaryYAxis = chart.primaryYAxis;\r\n\r\n                    chart.refresh();\r\n                    chart2.refresh();\r\n                   chart3.refresh();\r\n                }\r\n            },\r\n            getSeriesData: function () {\r\n                var seriesData;\r\n                var period = this.$refs.dplPeriods.ej2Instances.value;\r\n                if (period == \"Month\") {\r\n                    seriesData = this.loadGraphData.result.month;\r\n                } else if (period == \"Quarter\") {\r\n                    seriesData = this.loadGraphData.result.quarter;\r\n                } else if (period == \"Season\") {\r\n                    seriesData = this.loadGraphData.result.season;\r\n                } else if (period == \"Calendar\") {\r\n                    seriesData = this.loadGraphData.result.calendar;\r\n                } else {\r\n                    seriesData = this.loadGraphData.result.fiscal;\r\n                }\r\n                return seriesData;\r\n            },\r\n            updateGraphTpeToShow: function (type) {\r\n                if (type == 'Line') {\r\n                    this.LineGraph = true;\r\n                    this.CandleGraph = false;\r\n                    this.StackedGraph = false;\r\n                } else if (type == 'Candle') {\r\n                    this.LineGraph = false;\r\n                    this.CandleGraph = true;\r\n                    this.StackedGraph = false;\r\n                } else {\r\n                    this.LineGraph = false;\r\n                    this.CandleGraph = false;\r\n                    this.StackedGraph = true;\r\n                }\r\n            },\r\n            download: function (args) {\r\n                showSpinner(document.getElementById('cappSpinner'));\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                this.currencyId = this.$refs.dplCurrencyCAP.ej2Instances.value;\r\n                apis.protectedApi(`${urls.apiBaseUrl}ReportTemplate/generatePriceAndCostReportPage/${this.contractId}?currencyId=${this.currencyId == undefined ? \"\" : this.currencyId}&performanceType=${this.type}&defaultM=${store.state.isCheckDefaultM == undefined ? \"\" : store.state.isCheckDefaultM}`).then(it => {\r\n                    window.open(it.data.reportUri);\r\n                    hideSpinner(document.getElementById('cappSpinner'));\r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                }\r\n                ).catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                    }\r\n                );\r\n            },\r\n            actionFailure(args) {\r\n                gridOptions.actionFailure(args);\r\n                hideSpinner(document.getElementById('mainSpinner'));\r\n            },\r\n            tooltipRenderM2MAndReference : function (args) {\r\n                var pointData = this.seriesData.filter(tp => { return tp.periodName === args.data.pointX })[0];\r\n                if (args.data.seriesName == \"M2M\") {\r\n                    if (this.type == 'Cost') {\r\n                        args.text = pointData.periodName + \": \" + pointData.m2mCost.toLocaleString(\"en-US\", { maximumFractionDigits: 0 }) + \" \" + this.loadGraphData.currency;\r\n                    }\r\n                    else if (this.type == 'Price') {\r\n                        args.text = pointData.periodName + \": \" + pointData.m2m.toLocaleString(\"en-US\", { minimumFractionDigits: 3, maximumFractionDigits: 3 }) + \" \" + this.loadGraphData.value;\r\n                    }\r\n                }\r\n                else if (args.data.seriesName == \"Reference\") {\r\n                    if (this.type == 'Cost') {\r\n                        args.text = pointData.periodName + \": \" + pointData.referenceCost.toLocaleString(\"en-US\", { maximumFractionDigits: 0 }) + \" \" + this.loadGraphData.currency;\r\n                    }\r\n                    else if (this.type == 'Price') {\r\n                        args.text = pointData.periodName + \": \" + pointData.reference.toLocaleString(\"en-US\", { minimumFractionDigits: 3, maximumFractionDigits: 3 }) + \" \" + this.loadGraphData.value;\r\n                    }\r\n                }\r\n            }\r\n\r\n        }, mounted: function () {\r\n            createSpinner({\r\n                target: document.getElementById('cappSpinner')\r\n            });\r\n            createSpinner({\r\n                target: document.getElementById('mainSpinner'),\r\n                width: '50',\r\n                type: 'Material',\r\n                label: 'Loading data...',\r\n                cssClass: 'loading'\r\n            });\r\n            this.loadGraph();\r\n        }, computed: {\r\n            contractYears() {\r\n                return SyncHelper.getDataManager(\"utils/contractYears?contractId=\" + this.contractId);\r\n            },\r\n            currenciesCAP() {\r\n                return SyncHelper.getDataManager(\"utils/currenciesAvailable?contractId=\" + store.state.reportContractId);\r\n            },\r\n            priceAreaCost() {\r\n                return SyncHelper.getDataManager(\"utils/pricingContractAreas?contractId=\" + store.state.reportContractId);\r\n            }\r\n        }, updated: function () {\r\n            this.$nextTick(() => {\r\n                window.dispatchEvent(new Event('resize'));\r\n            });\r\n        },\r\n        provide: {\r\n            grid: [Page, Edit, Toolbar, Sort, Filter, Reorder, Resize, ExcelExport, ForeignKey, CommandColumn],\r\n            chart: [ColumnSeries, StripLine, LineSeries, Category, DataLabel, DateTime, Tooltip, ChartAnnotation, ScatterSeries, StackingColumnSeries, CandleSeries, Zoom, MultiColoredLineSeries, StackingLineSeries, Legend]\r\n        }\r\n    };\r\n\r\n</script>\r\n<style>\r\n    #container {\r\n        height: 350px;\r\n    }\r\n    .bc-white {\r\n        background-color: #FFFFFF;\r\n    }\r\n    .costAndPriceCheck {\r\n        margin: 32px 0px 0px 0px;\r\n    }\r\n    tspan {\r\n        font-size: 11px !important;\r\n        font-weight: normal !important;\r\n    }\r\n    #cappSpinner {\r\n        display: none;\r\n    }\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CostAndPricingReportTemplate.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./CostAndPricingReportTemplate.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./CostAndPricingReportTemplate.vue?vue&type=template&id=11582c69\"\nimport script from \"./CostAndPricingReportTemplate.vue?vue&type=script&lang=js\"\nexport * from \"./CostAndPricingReportTemplate.vue?vue&type=script&lang=js\"\nimport style0 from \"./CostAndPricingReportTemplate.vue?vue&type=style&index=0&id=11582c69&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',[_c('h5',{staticClass:\"mt-3 ml-3 activeTriggerHeader\"},[_c('u',[_vm._v(\"HIT TRIGGERS \"+_vm._s(_vm.hit))])]),_c('TriggerHitAlert',{attrs:{\"reportContractId\":_vm.reportContractId}}),_c('h5',{staticClass:\"ml-3 dueLiveTriggerHeader\"},[_c('u',[_vm._v(\"TRIGGERS STATUS \"+_vm._s(_vm.status))])]),_c('StatusAlert',{attrs:{\"reportContractId\":_vm.reportContractId}}),_c('h5',{staticClass:\"ml-3 expiredTriggerHeader\"},[_c('u',[_vm._v(\"DEFAULT DEADLINES \"+_vm._s(_vm.deadline))])]),_c('DeadlineAlert',{attrs:{\"reportContractId\":_vm.reportContractId}})],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div>\r\n        <h5 class=\"mt-3 ml-3 activeTriggerHeader\"><u>HIT TRIGGERS {{hit}}</u></h5>\r\n        <TriggerHitAlert :reportContractId=\"reportContractId\" />\r\n        <h5 class=\"ml-3 dueLiveTriggerHeader\"><u>TRIGGERS STATUS {{status}}</u></h5>\r\n        <StatusAlert :reportContractId=\"reportContractId\" />\r\n        <h5 class=\"ml-3 expiredTriggerHeader\"><u>DEFAULT DEADLINES {{deadline}}</u></h5>\r\n        <DeadlineAlert :reportContractId=\"reportContractId\" />\r\n    </div>\r\n</template>\r\n<script>\r\n    import TriggerHitAlert from \"../triggerAlerts/TriggerHitAlert.vue\";\r\n    import StatusAlert from \"../triggerAlerts/StatusAlert.vue\";\r\n    import DeadlineAlert from \"../triggerAlerts/DeadlineAlert.vue\";\r\n    import store from '../../store';\r\n    import urls from '../../common/urls';\r\n    import apis from '../../common/network';\r\n    import { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\r\n\r\n    export default {\r\n        name: \"\",\r\n        data() {\r\n            return {\r\n                store: store,\r\n                reportContractId: store.state.reportContractId,\r\n                deadline: \"\",\r\n                status: \"\",\r\n                hit: \"\"\r\n            };\r\n        },\r\n        components: {\r\n            TriggerHitAlert,\r\n            StatusAlert,\r\n            DeadlineAlert\r\n        },\r\n        computed: {},\r\n        mounted: function () {\r\n            const spinners = document.querySelectorAll(\".e-grid .e-spinner-pane:not(#mainSpinner)\");\r\n            spinners.forEach(spinner => {\r\n\r\n                spinner.style.display = 'none';\r\n\r\n            });\r\n            createSpinner({\r\n                target: document.getElementById('mainSpinner'),\r\n                width: '50',\r\n                type: 'Material',\r\n                label: 'Loading data...',\r\n                cssClass: 'loading'\r\n            });\r\n            showSpinner(document.getElementById('mainSpinner'));\r\n        },\r\n        methods: {\r\n            fetchData(id) {\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                apis.protectedApi(`${urls.apiBaseUrl}TriggerAlert/GroupCounts?contractId=${id}`).then(it => {\r\n                    this.deadline = it.data.deadline;\r\n                    this.status = it.data.status;\r\n                    this.hit = it.data.hit;\r\n                    \r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                }\r\n                ).catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        alert(\"Error: \" + message);\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                    }\r\n                );\r\n                \r\n            },\r\n        },\r\n        created: function () {\r\n            this.fetchData(store.state.reportContractId);\r\n        },\r\n    };\r\n</script>\r\n<style>\r\n\r\n    .activeTriggerHeader {\r\n        text-align: left;\r\n        text-transform: uppercase;\r\n        color: #001c55;\r\n    }\r\n\r\n    .dueLiveTriggerHeader {\r\n        text-align: left;\r\n        text-transform: uppercase;\r\n        color: #7FB7BE;\r\n    }\r\n\r\n    .expiredTriggerHeader {\r\n        text-align: left;\r\n        text-transform: uppercase;\r\n        color: #d9843b;\r\n    }\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContractAlertsReportTemplate.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContractAlertsReportTemplate.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ContractAlertsReportTemplate.vue?vue&type=template&id=580f4762\"\nimport script from \"./ContractAlertsReportTemplate.vue?vue&type=script&lang=js\"\nexport * from \"./ContractAlertsReportTemplate.vue?vue&type=script&lang=js\"\nimport style0 from \"./ContractAlertsReportTemplate.vue?vue&type=style&index=0&id=580f4762&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\"},[_c('div',{attrs:{\"id\":\"ticketsSpinner\"}}),_c('div',{staticClass:\"e-card mt-2\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col-sm-2 mt-3\"},[_c('ejs-dropdownlist',{ref:\"dplCurrencyTrade\",attrs:{\"id\":\"currencyTrade\",\"name\":\"currency\",\"change\":_vm.onCurrencyChangeTrade,\"dataSource\":_vm.currenciesTrade,\"fields\":{text: 'name', value: 'currencyId' },\"placeholder\":\"Currency\",\"floatLabelType\":\"Auto\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true},model:{value:(_vm.data.currencyId),callback:function ($$v) {_vm.$set(_vm.data, \"currencyId\", $$v)},expression:\"data.currencyId\"}})],1),_c('div',{staticClass:\"col-sm-7 mt-3\"}),_c('div',{staticClass:\"col-sm-2 mt-3\"},[_c('ejs-button',{attrs:{\"cssClass\":\"e-primary btn-download\"},nativeOn:{\"click\":function($event){return _vm.btnTradeReportDownload($event)}}},[_vm._v(\"Trade Report\")])],1)]),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col m-3\"},[_c('ejs-grid',{ref:\"grid\",attrs:{\"dataSource\":_vm.gridData,\"filterSettings\":_vm.filterOptions,\"allowPaging\":false,\"allowResizing\":true,\"allowReordering\":true,\"allowSorting\":true,\"allowFiltering\":true,\"autoFit\":true,\"toolbarClick\":_vm.toolbarClick,\"toolbar\":_vm.toolbar,\"actionBegin\":_vm.actionBegin,\"actionComplete\":_vm.actionComplete,\"actionFailure\":_vm.actionFailure,\"queryCellInfo\":_vm.customiseCell}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"tradeReference\",\"headerText\":\"Trade ID\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"tradeDate\",\"headerText\":\"Trade Date\",\"type\":\"date\",\"format\":_vm.dateFormatOptions}}),_c('e-column',{attrs:{\"field\":\"ticketPeriod\",\"headerText\":\"Trade Period\"}}),_c('e-column',{attrs:{\"field\":\"product\",\"headerText\":\"Product\"}}),_c('e-column',{attrs:{\"field\":\"priceAreaName\",\"headerText\":\"Price Area\",\"width\":\"150\"}}),_c('e-column',{attrs:{\"headerText\":\"Complex trade\",\"field\":\"isComplexGroup\",\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"Volume\",\"columns\":_vm.volumeColumnes,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"price\",\"headerText\":\"Price\",\"format\":\"n3\",\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"tradedBy\",\"headerText\":\"Traded by\",\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"confirmationReference\",\"headerText\":\"Confirmation Reference\",\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"note\",\"headerText\":\"Supplementary Note\",\"textAlign\":\"Center\"}})],1)],1)],1)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"row\">\r\n        <div id=\"ticketsSpinner\"></div>\r\n        <div class=\"e-card mt-2\">\r\n            <div class=\"row\">\r\n                <div class=\"col-sm-2 mt-3\">\r\n                    <ejs-dropdownlist ref='dplCurrencyTrade' id=\"currencyTrade\" name=\"currency\" v-model=\"data.currencyId\" :change=\"onCurrencyChangeTrade\" :dataSource='currenciesTrade' :fields=\"{text: 'name', value: 'currencyId' }\" placeholder=\"Currency\" floatLabelType='Auto' :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                </div>\r\n                <!--<div class=\"col-sm-2 mt-3 d-flex\">\r\n                    <ejs-checkbox ref=\"tradeCheckDM\" :change=\"onCheckTradeDefault\" label='Default Mechanism' id=\"TradeCheckDefault\" name=\"checkName\" floatLabelType='Auto' cssClass=\"tradeCheck check-d\"></ejs-checkbox>\r\n                </div>-->\r\n                \r\n                <div class=\"col-sm-7 mt-3\">\r\n\r\n                </div>\r\n                <div class=\"col-sm-2 mt-3\">\r\n                    <ejs-button cssClass=\"e-primary btn-download\" v-on:click.native='btnTradeReportDownload'>Trade Report</ejs-button>\r\n                </div>\r\n            </div>\r\n            <div class=\"row\">\r\n                <div class=\"col m-3\">\r\n                    <ejs-grid ref='grid'\r\n                              :dataSource='gridData'\r\n                              :filterSettings='filterOptions'\r\n                              :allowPaging='false'\r\n                              :allowResizing='true'\r\n                              :allowReordering='true'\r\n                              :allowSorting='true'\r\n                              :allowFiltering='true'\r\n                              :autoFit='true'\r\n                              :toolbarClick='toolbarClick'\r\n                              :toolbar='toolbar'\r\n                              :actionBegin ='actionBegin'\r\n                              :actionComplete ='actionComplete'\r\n                              :actionFailure ='actionFailure'\r\n                               :queryCellInfo='customiseCell'>\r\n                        <e-columns>\r\n                            <e-column field='tradeReference' headerText='Trade ID' width=120></e-column>\r\n                            <e-column field='tradeDate' headerText='Trade Date' type=\"date\" :format='dateFormatOptions'></e-column>\r\n                            <e-column field='ticketPeriod' headerText='Trade Period'></e-column>\r\n                            <e-column field='product' headerText='Product'></e-column>\r\n                            <e-column field='priceAreaName' headerText='Price Area' width=150></e-column>\r\n                            <e-column headerText='Complex trade' field='isComplexGroup' textAlign=\"Center\"></e-column>\r\n                            <e-column headerText='Volume' :columns='volumeColumnes' textAlign=\"Center\"></e-column>\r\n                            <e-column field='price' headerText='Price' format=\"n3\" textAlign=\"Center\"></e-column>\r\n                            <e-column field='tradedBy' headerText='Traded by' textAlign=\"Center\"></e-column>\r\n                            <e-column field='confirmationReference' headerText='Confirmation Reference' textAlign=\"Center\"></e-column>\r\n                            <e-column field='note' headerText='Supplementary Note' textAlign=\"Center\"></e-column>\r\n                            <!--<e-column headerText='Actions' width='150' textAlign='Center' :template='pdfTemplate'></e-column>-->\r\n                        </e-columns>\r\n                    </ejs-grid>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n    import Vue from \"vue\";\r\n    import { GridPlugin, Toolbar, Filter, Edit, Resize, Sort, Reorder } from \"@syncfusion/ej2-vue-grids\";\r\n    import { ButtonPlugin } from \"@syncfusion/ej2-vue-buttons\";\r\n    import { DialogPlugin } from '@syncfusion/ej2-vue-popups';\r\n    import { TextBoxPlugin } from \"@syncfusion/ej2-vue-inputs\";\r\n    import apis from '../../common/network'\r\n    import urls from '../../common/urls';\r\n    import authToken from '../../common/authToken';\r\n    import gridOptions from '../../common/gridOptions'\r\n    import { Query } from '@syncfusion/ej2-data';\r\n    import store from '../../store';\r\n    import router from '../../router/index';\r\n    import { ToastPlugin, Toast } from \"@syncfusion/ej2-vue-notifications\";\r\n    import { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\r\n    import { isNullOrUndefined } from '@syncfusion/ej2-base';\r\n    import { DialogUtility } from '@syncfusion/ej2-vue-popups';\r\n    import { CheckBoxPlugin, CheckBox } from \"@syncfusion/ej2-vue-buttons\";\r\n    import SyncHelper from '../../common/syncfusion';\r\n\r\n    Vue.use(ButtonPlugin);\r\n    Vue.use(DialogPlugin);\r\n    Vue.use(TextBoxPlugin);\r\n    Vue.use(GridPlugin);\r\n    Vue.use(CheckBoxPlugin);\r\n\r\n    export default {\r\n        name: 'TicketsReport',\r\n        created() {\r\n        },\r\n        data() {\r\n            return {\r\n                gridData: {},\r\n                firstIndexTrade: 3,\r\n                unit: null,\r\n                volumeColumnes: [\r\n                    {\r\n                        field: 'volumeInContractTradingUnit',\r\n                        headerText: 'Trading Unit',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n2\"\r\n                    },\r\n                    {\r\n                        field: 'volumeHedgedPercentage',\r\n                        headerText: '%',\r\n                        textAlign: 'Center',\r\n                        width: \"120\",\r\n                        format: \"n1\"\r\n                    }\r\n                ],\r\n                toolbar: [{ text: 'Add', tooltipText: 'Add', prefixIcon: 'e-add', id: 'AddTrades' }],\r\n                filterOptions: gridOptions.filterSettings,\r\n                allowFiltering: true,\r\n                dateFormatOptions: { type: 'date', format: 'dd/MM/yyyy', max: new Date(), params: { max: new Date() } },\r\n                pdfTemplate: function () {\r\n                    return {\r\n                        template: Vue.component('columnTemplate', {\r\n                            template: `<ejs-button cssClass='secondary' v-on:click.native=\"click(data)\">Download</ejs-button>`,// <a :href=\"this.data.reportUrl\" cssClass='e-block e-success'   download> Download</a>\r\n                            data: function () {\r\n                                return {\r\n                                    data: {}\r\n                                }\r\n                            },\r\n                            methods: {\r\n                                click: function (args) {\r\n                                    showSpinner(document.getElementById('mainSpinner'));\r\n                                    apis.protectedApi(`${urls.apiBaseUrl}Trade/getTradePdfUrl/${args.tradeId}`,\r\n                                        { responseType: 'blob' }).then(\r\n                                            it => {\r\n                                                var blob = new Blob([it.data], { type: 'application/' + it.headers['content-type'] })\r\n                                                var downloadElement = document.createElement('a')\r\n                                                var href = window.URL.createObjectURL(blob) // Create a downloaded link\r\n                                                downloadElement.href = href\r\n                                                downloadElement.download = \"Trade_\" + args.tradeId + \".pdf\"; // filename after download\r\n                                                document.body.appendChild(downloadElement)\r\n                                                downloadElement.click() // Click to download\r\n                                                document.body.removeChild(downloadElement)\r\n                                                hideSpinner(document.getElementById('mainSpinner'));\r\n                                            }).catch(\r\n                                                response => {\r\n                                                    var message = response.response.data.message != undefined ? response.response.data.message : \"Trade does not have pdf file.\";\r\n                                                    gridOptions.errorAlert(\"Error: \" + message);\r\n                                                    hideSpinner(document.getElementById('mainSpinner'));\r\n                                                }\r\n                                            );\r\n                                }\r\n                            }\r\n                        })\r\n                    }\r\n                }\r\n\r\n            }\r\n        },\r\n  \r\n        methods: {\r\n            toolbarClick(args) {\r\n                if (args.item.id === 'AddTrades' && store.state.permissions[\"Permissions.Trades.Create\"]) {\r\n                    router.push({ name: \"Trade\", params: { callerId: store.state.reportContractId, callerForm: \"Reports UI\", callerTab: \"Trades\" } });\r\n                }\r\n            },\r\n            //onCheckTradeDefault(args) {\r\n            //    store.state.isCheckDefaultM = args.checked; \r\n            //    let currencySymbol = document.getElementById('currencyTrade').value;\r\n            //    this.getTradeData(currencySymbol);\r\n            //},\r\n            onCurrencyChangeTrade: function (args) {\r\n                let currencyId = args.itemData.currencyId;\r\n                this.getTradeData(currencyId);\r\n\r\n            },\r\n            getTradeData: function (currencyId) {\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                apis.protectedApi(`report/tradingReport/${store.state.reportContractId}?currencyId=${currencyId == undefined ? \"\" : currencyId}&defaultM=${store.state.isCheckDefaultM == undefined ? \"\" : store.state.isCheckDefaultM}`)\r\n                    .then(response => {\r\n                        hideSpinner(document.getElementById('ticketsSpinner'));\r\n                        this.gridData = response.data.result;\r\n                        this.gridData.forEach(item => {\r\n                            item.tradeDate = new Date(item.tradeDate);\r\n                        });\r\n                        this.unit = response.data.unit;\r\n\r\n                        this.reutersPricingUnit = response.data.reutersPricingUnit;\r\n                        this.$refs.tradeCheckDM.ej2Instances.checked = store.state.isCheckDefaultM;\r\n                      \r\n                        if (response.data.value == 'p/therm') {\r\n\r\n                            this.$refs.dplCurrencyTrade.ej2Instances.text = \"p - GBp\";\r\n\r\n                        } else {\r\n\r\n                            this.$refs.dplCurrencyTrade.ej2Instances.text = response.data.currencySymbolAndName;\r\n                        }\r\n                        hideSpinner(document.getElementById('mainSpinner'))\r\n                    }).catch(e => {\r\n                        hideSpinner(document.getElementById('ticketsSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'))\r\n                        if (e.response) {\r\n                            this.showErrorDialog(e.response.data.message);\r\n                        }\r\n                    })\r\n\r\n            },     \r\n            btnTradeReportDownload: function (args) {\r\n                showSpinner(document.getElementById('ticketsSpinner'));\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                this.currencyId = this.$refs.dplCurrencyTrade.ej2Instances.value;\r\n                apis.protectedApi(`${urls.apiBaseUrl}reportTemplate/generateTicketsReportPage/${store.state.reportContractId}?currencyId=${this.currencyId == undefined ? \"\" : this.currencyId}&defaultM=${store.state.isCheckDefaultM == undefined ? \"\" : store.state.isCheckDefaultM}`).then(it => {\r\n                    window.open(it.data.reportUri);\r\n                    hideSpinner(document.getElementById('ticketsSpinner'));\r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                }).catch(\r\n                    response => {\r\n                        hideSpinner(document.getElementById('ticketsSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    }\r\n                );\r\n            },\r\n            setToolbarVisibility: function () {\r\n                if (!store.state.permissions[\"Permissions.Trades.Create\"]) {\r\n                    this.$refs.grid.ej2Instances.toolbarModule.enableItems(['AddTrades'], false);\r\n                }\r\n            },\r\n            showErrorDialog: function (message) {\r\n                DialogUtility.alert({\r\n                    title: 'Alert Dialog',\r\n                    content: message,\r\n                    position: { X: 700, Y: 200 },\r\n                    showCloseIcon: true,\r\n                    closeOnEscape: true,\r\n                    animationSettings: { effect: 'Zoom' },\r\n                    zIndex: 1100\r\n                });\r\n            },\r\n            customiseCell: function (args) {\r\n                if (args.column.field === 'volumeInContractTradingUnit') {\r\n                    args.cell.textContent = args.cell.textContent + \" \" + this.unit;\r\n                }\r\n                if (args.column.field === 'price') {\r\n                    args.cell.textContent = args.cell.textContent + \" \" + this.reutersPricingUnit;\r\n                }\r\n            },\r\n            actionBegin(args) {\r\n                gridOptions.actionBegin(args);\r\n                apis.protectedApi(`contract/getContractStatus?contractId=${store.state.reportContractId}`).then(it => {\r\n                    if (it.data.data == false) {\r\n                        this.$refs.grid.ej2Instances.toolbarModule.enableItems(['AddTrades'], false);\r\n                    }\r\n                }).catch(\r\n                    response => {\r\n                        hideSpinner(document.getElementById('ticketsSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    }\r\n                );\r\n\r\n            },\r\n            actionComplete(args) {\r\n                gridOptions.actionComplete(args, this.$refs);\r\n            },\r\n            actionFailure(args) {\r\n                gridOptions.actionFailure(args, this.$refs);\r\n            }\r\n        },\r\n        mounted() {\r\n            let spinner = document.getElementById('ticketsSpinner');\r\n            createSpinner({\r\n                target: spinner\r\n            });\r\n            showSpinner(spinner);\r\n            createSpinner({\r\n                target: document.getElementById('mainSpinner'),\r\n                width: '50',\r\n                type: 'Material',\r\n                label: 'Loading data...',\r\n                cssClass: 'loading'\r\n            });\r\n            showSpinner(document.getElementById('mainSpinner'));\r\n            this.getTradeData();\r\n            this.setToolbarVisibility();\r\n        },\r\n        computed: {\r\n            currenciesTrade() {\r\n                return SyncHelper.getDataManager(\"utils/currenciesAvailable?contractId=\" + store.state.reportContractId);\r\n            },\r\n        },\r\n        provide: {\r\n            grid: [Edit, Filter, Toolbar, Resize, Sort, Reorder]\r\n        }\r\n    }\r\n</script>\r\n\r\n<style>\r\n    .btn-download {\r\n        float: right;\r\n        margin-top: 23px;\r\n    }\r\n    .d-flex{\r\n        display: flex!important;\r\n    }\r\n    /*    .tradeCheck {\r\n        margin: 25px 0px 0px 7px;\r\n    }*/\r\n\r\n    #ticketsSpinner {\r\n        display: none;\r\n    }\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TicketsReportTemplate.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TicketsReportTemplate.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./TicketsReportTemplate.vue?vue&type=template&id=17903d5c\"\nimport script from \"./TicketsReportTemplate.vue?vue&type=script&lang=js\"\nexport * from \"./TicketsReportTemplate.vue?vue&type=script&lang=js\"\nimport style0 from \"./TicketsReportTemplate.vue?vue&type=style&index=0&id=17903d5c&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"hedgingMain\"}},[_c('div',{staticClass:\"e-card\"},[_c('div',{staticClass:\"row\",staticStyle:{\"padding\":\"2%\"},attrs:{\"id\":\"hedgingForm\"}},[_c('div',{staticClass:\"col-lg-8\"},[_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"hedgingYears\",attrs:{\"id\":\"hedgingYears\",\"name\":\"hedgingYears\",\"dataSource\":_vm.availableYears,\"select\":_vm.onYearSelect,\"fields\":{text: 'name', value: 'id' },\"placeholder\":\"Years\",\"floatLabelType\":\"Auto\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}})],1),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"hedgingView\",attrs:{\"id\":\"hedgingView\",\"name\":\"hedgingView\",\"dataSource\":_vm.views,\"index\":_vm.firstIndex,\"select\":_vm.onViewSelect,\"fields\":{text: 'name', value: 'id' },\"placeholder\":\"View\",\"floatLabelType\":\"Auto\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}})],1),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"dplCurrencyHedg\",attrs:{\"id\":\"currencyHedg\",\"name\":\"currency\",\"change\":_vm.onCurrencyChangeHedg,\"dataSource\":_vm.currenciesHedg,\"fields\":{text: 'name', value: 'currencyId' },\"placeholder\":\"Currency\",\"floatLabelType\":\"Auto\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true},model:{value:(_vm.data.currencyId),callback:function ($$v) {_vm.$set(_vm.data, \"currencyId\", $$v)},expression:\"data.currencyId\"}})],1),(_vm.showPriceAreaSection)?_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"}):_vm._e(),(_vm.showPriceAreaSection)?_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"dplPriceAreaHedg\",attrs:{\"id\":\"priceAreaHedg\",\"index\":_vm.firstIndex,\"actionComplete\":_vm.onActionComplete,\"name\":\"priceAreaHedgName\",\"change\":_vm.onPriceAreaHedgChange,\"floatLabelType\":\"Auto\",\"dataSource\":_vm.priceAreaHedg,\"fields\":{text: 'name', value: 'id' },\"placeholder\":\"Price Area:\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}})],1):_vm._e(),(_vm.showPriceAreaSection)?_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group check-dh\"}):_vm._e()]),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"hedgingProduct\",attrs:{\"id\":\"hedgingProduct\",\"name\":\"hedgingProduct\",\"index\":_vm.firstIndex,\"dataSource\":_vm.products,\"dataBound\":_vm.onProductSelect,\"select\":_vm.onProductSelect,\"fields\":{text: 'name', value: 'id' },\"placeholder\":\"Product\",\"floatLabelType\":\"Auto\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}})],1),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('div',{staticClass:\"col-sm-2 justify-content-end\"},[_c('ejs-button',{attrs:{\"cssClass\":\"e-primary\"},nativeOn:{\"click\":function($event){return _vm.download($event)}}},[_vm._v(\"Hedging Overview 100% stacked\")])],1)]),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-checkbox',{ref:\"hedgCheckDM\",attrs:{\"change\":_vm.onCheckHedingDefault,\"label\":\"Default Mechanism\",\"id\":\"HedingCheckDefault\",\"name\":\"checkName\",\"floatLabelType\":\"Auto\",\"cssClass\":\"hedingCheck check-d\"}})],1)])]),_c('div',{staticClass:\"col-lg-4\"})]),_c('div',{staticClass:\"row\",staticStyle:{\"max-width\":\"100%\"},attrs:{\"id\":\"hedgingGraph\"}},[_c('div',{staticClass:\"col\"},[_c('ejs-chart',{ref:\"priceChart\",attrs:{\"id\":\"hedgingChartContainer\",\"title\":_vm.title,\"primaryXAxis\":_vm.primaryXAxis,\"primaryYAxis\":_vm.primaryYAxis,\"palettes\":_vm.palettes,\"legendSettings\":_vm.legendSettings}},[_c('e-series-collection',[_c('e-series',{attrs:{\"dataSource\":_vm.fixedPriceDataGraph,\"type\":\"StackingColumn\",\"xName\":\"period\",\"yName\":\"value\",\"name\":\"Fixed\",\"marker\":_vm.marker}}),_c('e-series',{attrs:{\"dataSource\":_vm.openPriceDataGraph,\"type\":\"StackingColumn\",\"xName\":\"period\",\"yName\":\"value\",\"name\":\"Open\",\"marker\":_vm.openMarker}})],1)],1)],1)]),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col m-3\"},[_c('ejs-grid',{ref:\"gridOpenPrice\",attrs:{\"dataSource\":_vm.openGridData,\"id\":\"gridOpenPrice\",\"dataBound\":_vm.dataBoundOpenPrice}})],1)]),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col ml-3 mr-3\"},[_c('ejs-grid',{ref:\"gridFixedPrice\",attrs:{\"dataSource\":_vm.fixedGridData,\"id\":\"gridFixedPrice\",\"dataBound\":_vm.dataBoundFixedPrice}})],1)]),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col m-3\"},[_c('ejs-grid',{ref:\"gridM2mPrice\",attrs:{\"dataSource\":_vm.m2mGridData,\"id\":\"gridM2mPrice\",\"dataBound\":_vm.dataBoundM2mPrice}})],1)])]),_c('div',{attrs:{\"id\":\"hedgingSpinner\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div id=\"hedgingMain\">\r\n        <div class=\"e-card\">\r\n            <div id=\"hedgingForm\" class=\"row\" style=\"padding: 2%\">\r\n                <div class=\"col-lg-8\">\r\n                    <div class=\"form-row\">\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                            <ejs-dropdownlist id=\"hedgingYears\" ref=\"hedgingYears\" name=\"hedgingYears\" :dataSource='availableYears' :select=\"onYearSelect\" :fields=\"{text: 'name', value: 'id' }\" placeholder=\"Years\" floatLabelType='Auto' :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                        </div>\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                            <ejs-dropdownlist id=\"hedgingView\" ref=\"hedgingView\" name=\"hedgingView\" :dataSource='views' :index='firstIndex' :select=\"onViewSelect\" :fields=\"{text: 'name', value: 'id' }\" placeholder=\"View\" floatLabelType='Auto' :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                        </div>\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                            <ejs-dropdownlist ref='dplCurrencyHedg' id=\"currencyHedg\" name=\"currency\" v-model=\"data.currencyId\" :change=\"onCurrencyChangeHedg\" :dataSource='currenciesHedg' :fields=\"{text: 'name', value: 'currencyId' }\" placeholder=\"Currency\" floatLabelType='Auto' :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                        </div>\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group\" v-if=\"showPriceAreaSection\">\r\n\r\n                        </div>\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group\" v-if=\"showPriceAreaSection\">\r\n                            <ejs-dropdownlist ref='dplPriceAreaHedg' id=\"priceAreaHedg\" :index='firstIndex' :actionComplete=\"onActionComplete\" name=\"priceAreaHedgName\" :change='onPriceAreaHedgChange' floatLabelType='Auto' :dataSource='priceAreaHedg' :fields=\"{text: 'name', value: 'id' }\" placeholder=\"Price Area:\" :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                        </div>\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group check-dh\" v-if=\"showPriceAreaSection\">\r\n\r\n                        </div>\r\n                        </div>\r\n                        <div class=\"form-row\">\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-dropdownlist id=\"hedgingProduct\" ref=\"hedgingProduct\" name=\"hedgingProduct\" :index='firstIndex' :dataSource='products' :dataBound=\"onProductSelect\" :select=\"onProductSelect\" :fields=\"{text: 'name', value: 'id' }\" placeholder=\"Product\" floatLabelType='Auto' :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                            </div>\r\n\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <div class=\"col-sm-2 justify-content-end\">\r\n                                    <ejs-button cssClass=\"e-primary\" v-on:click.native='download'>Hedging Overview 100% stacked</ejs-button>\r\n                                </div>\r\n                            </div>\r\n                            <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                                <ejs-checkbox ref=\"hedgCheckDM\" :change=\"onCheckHedingDefault\" label='Default Mechanism' id=\"HedingCheckDefault\" name=\"checkName\" floatLabelType='Auto' cssClass=\"hedingCheck check-d\"></ejs-checkbox>\r\n                            </div>\r\n                        </div>\r\n                    </div>\r\n                <div class=\"col-lg-4\">\r\n                </div>\r\n            </div>\r\n            <div id=\"hedgingGraph\" class=\"row\" style=\"max-width:100%\">\r\n                <div class=\"col\">\r\n                    <ejs-chart id=\"hedgingChartContainer\" ref=\"priceChart\" :title='title' :primaryXAxis='primaryXAxis' :primaryYAxis='primaryYAxis' :palettes='palettes' :legendSettings='legendSettings'>\r\n                        <e-series-collection>\r\n                            <e-series :dataSource='fixedPriceDataGraph' type='StackingColumn' xName='period' yName='value' name='Fixed' :marker=\"marker\"></e-series>\r\n                            <e-series :dataSource='openPriceDataGraph' type='StackingColumn' xName='period' yName='value' name='Open' :marker=\"openMarker\"></e-series>\r\n                        </e-series-collection>\r\n                    </ejs-chart>\r\n                </div>\r\n            </div>\r\n            <div class=\"row\">\r\n                <div class=\"col m-3\">\r\n                    <ejs-grid ref=\"gridOpenPrice\"\r\n                              :dataSource=\"openGridData\" id=\"gridOpenPrice\"\r\n                              :dataBound=\"dataBoundOpenPrice\"></ejs-grid>\r\n                </div>\r\n            </div>\r\n            <div class=\"row\">\r\n                <div class=\"col ml-3 mr-3\">\r\n                    <ejs-grid ref=\"gridFixedPrice\"\r\n                              :dataSource=\"fixedGridData\" id=\"gridFixedPrice\"\r\n                              :dataBound=\"dataBoundFixedPrice\"></ejs-grid>\r\n                </div>\r\n            </div>\r\n            <div class=\"row\">\r\n                <div class=\"col m-3\">\r\n                    <ejs-grid ref=\"gridM2mPrice\"\r\n                              :dataSource=\"m2mGridData\" id=\"gridM2mPrice\"\r\n                              :dataBound=\"dataBoundM2mPrice\"></ejs-grid>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <div id=\"hedgingSpinner\"></div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n    import Vue from \"vue\";\r\n    import { GridPlugin, Grid } from \"@syncfusion/ej2-vue-grids\";\r\n    import { ButtonPlugin } from \"@syncfusion/ej2-vue-buttons\";\r\n    import { DialogPlugin, DialogUtility } from '@syncfusion/ej2-vue-popups';\r\n    import { TextBoxPlugin } from \"@syncfusion/ej2-vue-inputs\";\r\n    import apis from '../../common/network'\r\n    import store from '../../store';\r\n    import urls from '../../common/urls';\r\n    import SyncHelper from '../../common/syncfusion';\r\n    import { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\r\n    import { isNullOrUndefined } from '@syncfusion/ej2-base';\r\n    import { ChartPlugin, StackingColumnSeries, Category, DataLabel, Legend } from \"@syncfusion/ej2-vue-charts\";\r\n    import { CheckBoxPlugin, CheckBox } from \"@syncfusion/ej2-vue-buttons\";\r\n    import gridOptions from '../../common/gridOptions' \r\n\r\n    Vue.use(ButtonPlugin);\r\n    Vue.use(DialogPlugin);\r\n    Vue.use(TextBoxPlugin);\r\n    Vue.use(GridPlugin);\r\n    Vue.use(DialogPlugin);\r\n    Vue.use(ChartPlugin);\r\n    Vue.use(CheckBoxPlugin);\r\n\r\n    export default {\r\n        name: 'HedgingOverviewReport',\r\n        created() {\r\n        },\r\n        data() {\r\n            return {\r\n                data: {},\r\n                palettes: [\"#485696\", \"#Dae0f2\"],\r\n                openGridData: [],\r\n                fixedGridData: [],\r\n                m2mGridData: [],\r\n                unit: null,\r\n                currency: null,\r\n                value: null,\r\n                firstIndex: 0,\r\n                firstIndexCurrency: 3,\r\n                fixedPriceDataGraph: [],\r\n                openPriceDataGraph:[],\r\n                openPriceGrid: null,\r\n                fixedPriceGrid: null,\r\n                m2mPriceGrid: null,\r\n                triggeredFixedPrice: false,\r\n                triggeredOpenPrice: false,\r\n                triggeredM2mPrice: false,\r\n                showPriceAreaSection: false,\r\n                priceAreaNames: store.state.pricingAreaNames,\r\n                openPeriods: [],\r\n                fixedPeriods: [],\r\n                openPriceData: [],\r\n                fixedPriceData: [],\r\n                availableYears: [],\r\n                openMarker: {\r\n                    dataLabel: {\r\n                        visible: true,\r\n                        font: { fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '12px', fontWeight: 'normal', textAnchor: 'middle' }, position: 'Middle'\r\n                    }\r\n                },\r\n                marker: {\r\n                    dataLabel: {\r\n                        visible: true,\r\n                        position: 'Bottom',\r\n                        font: { fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '12px', fontWeight: 'normal', textAnchor: 'middle' }, position: 'Middle'\r\n                    },\r\n\r\n                },\r\n                legendSettings: {\r\n                    visible: true,\r\n                    position: 'Bottom',\r\n                    textStyle: { fontFamily: \"Arial Narrow\", fontStyle: 'normal', fontSize: '12px', fontWeight: 'normal', textAnchor: 'middle', color: '#8a93a2' }\r\n                },\r\n                primaryXAxis: {\r\n                    valueType: 'Category',\r\n                    title: ' ',\r\n                    labelStyle: { fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '13px', fontWeight: 'normal', textAnchor: 'middle', color: '#8a93a2' },\r\n                  \r\n                },\r\n                primaryYAxis:\r\n                {\r\n                    title: 'Volume',\r\n                    labelFormat: 'n1',\r\n                    titleStyle: { fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '13px', fontWeight: 'normal', textAnchor: 'middle', color: '#8a93a2' },\r\n                    labelStyle: { fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '13px', fontWeight: 'normal', textAnchor: 'middle', color: '#8a93a2' },\r\n                },\r\n                years: null,\r\n                title: \"Hedging Overview\",\r\n                views: [{ \"name\": \"100% Stacked\", \"id\": 1 }, { \"name\": \"Stacked\", \"id\": 2 }, { \"name\": \"Cost\", \"id\": 3 }],\r\n                allowFiltering: true\r\n            }\r\n        },\r\n        mounted() {\r\n            createSpinner({\r\n                target: document.getElementById('hedgingSpinner')\r\n            });\r\n            createSpinner({\r\n                target: document.getElementById('mainSpinner')\r\n            });\r\n            showSpinner(document.getElementById('mainSpinner'));\r\n        },\r\n        methods: {\r\n            onActionComplete(args) { //initial load to be set on the first pricing area\r\n                /*let currencySymbol = document.getElementById('currencyHedg').value.split(' - ')[0];*/\r\n                let currencyId = this.$refs.dplCurrencyHedg.ej2Instances.value;\r\n                if (args.result && args.result.length > 0) {\r\n                    this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, args.result[0].id, false);\r\n                }\r\n            },\r\n            onPriceAreaHedgChange: function (args) {\r\n                if (args.isInteracted) {\r\n                    let currencyId = this.$refs.dplCurrencyHedg.ej2Instances.value;\r\n                    this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, args.itemData == null ? null : args.itemData.id, false);\r\n                }\r\n            },\r\n            onCheckPASystemHedg(args) {\r\n                let pricingAreaId = document.getElementById('priceAreaHedg') == null ? undefined : document.getElementById('priceAreaHedg').ej2_instances[0].value;\r\n                let currencyId = this.$refs.dplCurrencyHedg.ej2Instances.value;\r\n               \r\n                    this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, false);\r\n                \r\n            },\r\n            calculateYears: function (startDate, endDate) {\r\n                this.availableYears = [];\r\n                var startYearMonth = new Date(startDate).getMonth();\r\n                var endYearMonth = new Date(endDate).getMonth();\r\n                var min = new Date(startDate).getFullYear();\r\n                var max = new Date(endDate).getFullYear();\r\n                if (endYearMonth < startYearMonth) {\r\n                    max = max - 1;\r\n                }\r\n                var j = 1;\r\n\r\n                for (var i = min; i <= max; i++) {\r\n                    var nextyear = i + 1;\r\n                    var yearName = startYearMonth == 0 ? (\"Y\" + j + \"-\" + i) : (\"Y\" + j + \"-\" + i + \"/\" + nextyear);\r\n                    this.availableYears.push({ \"name\": yearName, \"id\": j })\r\n                    j++;\r\n                }\r\n                this.$ref.hedgingYears.ej2Instances.value = 1;\r\n            },\r\n            onCheckHedingDefault(args) {\r\n                let pricingAreaId = document.getElementById('priceAreaHedg') == null ? undefined : document.getElementById('priceAreaHedg').ej2_instances[0].value;\r\n                store.state.isCheckDefaultM = args.checked;\r\n                let currencyId = this.$refs.dplCurrencyHedg.ej2Instances.value;\r\n                \r\n                    this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, false);\r\n                \r\n            },\r\n            onViewSelect: function (args) {\r\n                this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, args.itemData.name);\r\n            },\r\n            onProductSelect: function (args) {\r\n                let pricingAreaId = document.getElementById('priceAreaHedg') == null ? undefined : document.getElementById('priceAreaHedg').ej2_instances[0].value;\r\n                var prodName = args.itemData == null ? this.$refs.hedgingProduct.ej2Instances.text : args.itemData.name;\r\n                let currencyId = this.$refs.dplCurrencyHedg.ej2Instances.value;\r\n               \r\n                    this.getHedgingData(prodName, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, false);\r\n                \r\n            },\r\n            onYearSelect: function (args) {\r\n                let pricingAreaId = document.getElementById('priceAreaHedg') == null ? undefined : document.getElementById('priceAreaHedg').ej2_instances[0].value;\r\n                let currencyId = this.$refs.dplCurrencyHedg.ej2Instances.value;\r\n                \r\n                    this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, args.itemData.name, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, false);\r\n                \r\n            },\r\n            onCurrencyChangeHedg: function (args) {\r\n                let pricingAreaId = document.getElementById('priceAreaHedg') == null ? undefined : document.getElementById('priceAreaHedg').ej2_instances[0].value;\r\n                let currencyId = this.$refs.dplCurrencyHedg.ej2Instances.value;\r\n               \r\n                    this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, false);\r\n                \r\n\r\n            },\r\n            getHedgingData: function (product, year, view, currencyId, pricingAreaId, pricingAreaSystem) {\r\n                this.showPriceAreaSection = this.priceAreaNames == undefined ? false : true;\r\n                showSpinner(document.getElementById('hedgingSpinner'));\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                apis.protectedApi(`report/hedgingOverview/${store.state.reportContractId}?product=${product}&year=${year}&view=${view}&currencyId=${currencyId == undefined ? \"\" : currencyId}\r\n                &defaultM=${store.state.isCheckDefaultM == undefined ? \"\" : store.state.isCheckDefaultM}&pricingAreaId=${pricingAreaId == undefined ? \"\" : pricingAreaId}&pricingAreaSystem=${pricingAreaSystem == undefined ? false : pricingAreaSystem}`)\r\n                    .then(response => {\r\n                        this.data = response.data.data;\r\n                        this.bindGrids(view);\r\n                        this.unit = response.data.unit;\r\n                        this.currency = response.data.currency;\r\n                        this.value = response.data.value;\r\n\r\n                        this.$refs.hedgCheckDM.ej2Instances.checked = store.state.isCheckDefaultM;\r\n                        if (response.data.value == 'p/therm') {\r\n\r\n                            this.$refs.dplCurrencyHedg.ej2Instances.text = \"p - GBp\";\r\n\r\n                        } else {\r\n\r\n                            this.$refs.dplCurrencyHedg.ej2Instances.text = response.data.currencySymbolAndName;\r\n                        }\r\n                        this.calculateYears(response.data.startDate, response.data.endDate);\r\n                   \r\n                        hideSpinner(document.getElementById('hedgingSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                    }).catch(e => {\r\n                        hideSpinner(document.getElementById('hedgingSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                        if (e.response) {\r\n                            this.showErrorDialog(e.response.data.message);\r\n                        }\r\n                    })\r\n            },\r\n            download: function (args) {\r\n                showSpinner(document.getElementById('hedgingSpinner'));\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                let currencyId = this.$refs.dplCurrencyHedg.ej2Instances.value;\r\n                apis.protectedApi(`${urls.apiBaseUrl}ReportTemplate/generateHedgingReportPage/${store.state.reportContractId}?currencyId=${currencyId == undefined ? \"\" : currencyId}&defaultM=${this.$refs.hedgCheckDM.ej2Instances.checked}`).then(it => {\r\n                    window.open(it.data.reportUri);\r\n                    hideSpinner(document.getElementById('hedgingSpinner'));\r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                }\r\n                ).catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                        hideSpinner(document.getElementById('hedgingSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                    }\r\n                );\r\n            }, \r\n            bindGrids: function (view) {\r\n                this.openGridData = this.data.open;\r\n                this.fixedGridData = this.data.fixed;\r\n                this.m2mGridData = this.data.m2m;\r\n                this.openPriceDataGraph = [];\r\n\r\n                for (const property in this.data.open[2]) {\r\n                    var s = {\r\n                        period: property,\r\n                        value: this.data.open[2][property].replaceAll(\",\", \"\")\r\n                    };\r\n                    if (property != \"Open\") {\r\n                        this.openPriceDataGraph.push(s);\r\n                    }\r\n                }\r\n                this.fixedPriceDataGraph = [];\r\n                for (const property in this.data.fixed[1]) {\r\n                    var s = {\r\n                        period: property,\r\n                        value: this.data.fixed[1][property].replaceAll(\",\", \"\")\r\n                    };\r\n                    if (property != \"Fixed\") {\r\n                        this.fixedPriceDataGraph.push(s);\r\n      \r\n                    }\r\n                }\r\n\r\n                //var maxHeight=\"0\";\r\n                //var minHeight = \"0\";\r\n\r\n                //for (var i = 0; i < this.fixedPriceDataGraph.length; i++) {\r\n                //    if (parseInt(this.fixedPriceDataGraph[i].value.replaceAll(\",\", \"\")) > parseInt(maxHeight.replaceAll(\",\", \"\"))) {\r\n                //        maxHeight = this.fixedPriceDataGraph[i].value;\r\n                //    }\r\n                //    if (parseInt(this.fixedPriceDataGraph[i].value.replaceAll(\",\", \"\")) < parseInt(minHeight.replaceAll(\",\", \"\"))) {\r\n                //        minHeight = this.fixedPriceDataGraph[i].value;\r\n                //    }\r\n                //}\r\n                //for (var i = 0; i < this.openPriceDataGraph.length; i++) {\r\n                //    if (parseInt(this.openPriceDataGraph[i].value.replaceAll(\",\", \"\")) > parseInt(maxHeight.replaceAll(\",\", \"\"))) {\r\n                //        maxHeight = this.openPriceDataGraph[i].value;\r\n                //    }\r\n                //    if (parseInt(this.openPriceDataGraph[i].value.replaceAll(\",\", \"\")) < parseInt(minHeight.replaceAll(\",\", \"\"))) {\r\n                //        minHeight = this.openPriceDataGraph[i].value;\r\n                //    }\r\n                //}\r\n                var chart = document.getElementById('hedgingChartContainer').ej2_instances[0];\r\n                if (view == \"100% Stacked\") {\r\n                    chart.primaryYAxis =\r\n                    {\r\n                        //minimum: 0,\r\n                        //maximum: 100,\r\n                        //interval: 20,\r\n                        title: 'Volume %',\r\n                        labelFormat: 'N1'\r\n                    }\r\n                }\r\n\r\n                else if (view == \"Stacked\") {\r\n          \r\n                        chart.primaryYAxis =\r\n                        {\r\n                            //minimum: (parseInt(minHeight.replaceAll(\",\", \"\")) > 10) ? parseInt(minHeight.replaceAll(\",\", \"\"))-10 : 0,\r\n                            //maximum: parseInt(maxHeight.replaceAll(\",\", \"\"))*2,\r\n                            //interval: ((parseInt(maxHeight.replaceAll(\",\", \"\"))*2) - parseInt(minHeight.replaceAll(\",\", \"\"))) / 10,\r\n                            title: 'Volume ' + this.unit,\r\n                            labelFormat: 'N2'\r\n                        }\r\n                    \r\n           \r\n                    \r\n                }\r\n                else {//cost\r\n                    chart.primaryYAxis =\r\n                    {\r\n                        //minimum: (parseInt(minHeight.replaceAll(\",\", \"\")) > 10) ? parseInt(minHeight.replaceAll(\",\", \"\")) - 10 : 0,\r\n                        //maximum: parseInt(maxHeight.replaceAll(\",\", \"\"))*2,\r\n                        //interval: ((parseInt(maxHeight.replaceAll(\",\", \"\"))*2) - parseInt(minHeight.replaceAll(\",\", \"\"))) / 10,\r\n                        title: 'Cost ' + this.value,\r\n                        labelFormat: 'N0'\r\n                    }\r\n                    this.openMarker = {\r\n                        dataLabel: {\r\n                            visible: true,\r\n                        }\r\n                    }\r\n                }\r\n                chart.refresh();\r\n                this.triggeredOpenPrice = false;\r\n                this.triggeredFixedPrice = false;\r\n                this.triggeredM2mPrice = false;\r\n                setTimeout(function (e) {\r\n                    e.refresh();\r\n                }, 0, this.$refs.gridOpenPrice);\r\n                \r\n                setTimeout(function (e) { e.refresh();}, 50, this.$refs.gridFixedPrice);\r\n                setTimeout(function (e) {\r\n                    e.refresh();\r\n                }, 150, this.$refs.gridM2mPrice);\r\n\r\n               \r\n            },\r\n            \r\n            dataBoundOpenPrice: function () {\r\n                if (this.triggeredOpenPrice == false) {\r\n                    this.dataBound(this.$refs.gridOpenPrice);\r\n                }\r\n                this.triggeredOpenPrice = true;\r\n            },\r\n            dataBoundFixedPrice: function () {\r\n                if (this.triggeredFixedPrice == false) {\r\n                    this.dataBound(this.$refs.gridFixedPrice);\r\n                }\r\n                this.triggeredFixedPrice = true;\r\n            },\r\n            dataBoundM2mPrice: function () {\r\n                if (this.triggeredM2mPrice == false) {\r\n                    this.dataBound(this.$refs.gridM2mPrice);\r\n                }\r\n                this.triggeredM2mPrice = true;\r\n            },\r\n            dataBound: function (grid) {\r\n                var cols = Object.keys(grid.getCurrentViewRecords()[0]);\r\n                var length = cols.length;\r\n                var col = [];\r\n                for (var i = 0; i < length; i++) {\r\n                    var field = cols[i];\r\n                    var obj = {};\r\n                    \r\n                    obj[\"field\"] = field;\r\n                    if (field == \"Open\" || field == \"Fixed\" || field == \"M2M\") {\r\n                        obj[\"width\"] = 190;\r\n                    }else{\r\n                        obj[\"width\"] = 120;\r\n                    }\r\n                    col.push(obj);\r\n                }\r\n                grid.setProperties({ columns: col });\r\n            },\r\n\r\n            showErrorDialog: function (message) {\r\n                DialogUtility.alert({\r\n                    title: 'Alert Dialog',\r\n                    content: message,\r\n                    position: { X: 700, Y: 200 },\r\n                    showCloseIcon: true,\r\n                    closeOnEscape: true,\r\n                    animationSettings: { effect: 'Zoom' }\r\n                });\r\n            },\r\n            populateChart: function (data) {\r\n\r\n            },\r\n\r\n        },\r\n        computed: {\r\n            products() {\r\n                return SyncHelper.getDataManager(\"utils/products?contractId=\" + store.state.reportContractId + \"&includeCombined=true\");\r\n            },\r\n            currenciesHedg() {\r\n                return SyncHelper.getDataManager(\"utils/currenciesAvailable?contractId=\" + store.state.reportContractId);\r\n            },\r\n            priceAreaHedg() {\r\n                return SyncHelper.getDataManager(\"utils/pricingContractAreas?contractId=\" + store.state.reportContractId);\r\n            }\r\n        },\r\n        provide: {\r\n            chart: [StackingColumnSeries, Category, DataLabel, Legend]\r\n        },\r\n        updated: function () {\r\n            this.$nextTick(() => {\r\n                window.dispatchEvent(new Event('resize'));\r\n            });\r\n        },\r\n    }\r\n\r\n</script>\r\n\r\n<style>\r\n    #hedgingChartContainer_ChartTitle {\r\n        font-family: 'Arial Narrow', Arial, sans-serif;\r\n        font-style: normal;\r\n        font-size: 15px;\r\n        font-weight: 500;\r\n        text-anchor: middle;\r\n        fill: #8a93a2;\r\n    }\r\n\r\n    .hedingCheck {\r\n        padding: 1em 24em 0em 0em;\r\n    }\r\n\r\n    .check-dh {\r\n        padding-top: 2rem!important;\r\n        padding-right: 23rem !important;\r\n    }\r\n\r\n    #hedgingSpinner {\r\n        display: none;\r\n    }\r\n\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HedgingOverviewReportTemplate.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HedgingOverviewReportTemplate.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./HedgingOverviewReportTemplate.vue?vue&type=template&id=7c78f8cc\"\nimport script from \"./HedgingOverviewReportTemplate.vue?vue&type=script&lang=js\"\nexport * from \"./HedgingOverviewReportTemplate.vue?vue&type=script&lang=js\"\nimport style0 from \"./HedgingOverviewReportTemplate.vue?vue&type=style&index=0&id=7c78f8cc&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{attrs:{\"id\":\"hedgingMain\"}},[_c('div',{staticClass:\"e-card\"},[_c('div',{staticClass:\"row\",staticStyle:{\"padding\":\"2%\"},attrs:{\"id\":\"hedgingForm\"}},[_c('div',{staticClass:\"col-lg-8\"},[_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"hedgingYears\",attrs:{\"id\":\"hedgingYears\",\"name\":\"hedgingYears\",\"dataSource\":_vm.availableYears,\"select\":_vm.onYearSelect,\"fields\":{text: 'name', value: 'id' },\"placeholder\":\"Years\",\"floatLabelType\":\"Auto\"}})],1),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"hedgingView\",attrs:{\"id\":\"hedgingView\",\"name\":\"hedgingView\",\"dataSource\":_vm.views,\"index\":_vm.firstIndex,\"select\":_vm.onViewSelect,\"fields\":{text: 'name', value: 'id' },\"placeholder\":\"View\",\"floatLabelType\":\"Auto\"}})],1),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"dplCurrencyHyp\",attrs:{\"id\":\"currencyHypTrade\",\"name\":\"currencyHypTrade\",\"change\":_vm.onCurrencyChangeHypTrade,\"dataSource\":_vm.currenciesHypTrade,\"fields\":{text: 'name', value: 'currencyId' },\"placeholder\":\"Currency\",\"floatLabelType\":\"Auto\",\"showClearButton\":true},model:{value:(_vm.data.currencyId),callback:function ($$v) {_vm.$set(_vm.data, \"currencyId\", $$v)},expression:\"data.currencyId\"}})],1),(_vm.showPriceAreaSection)?_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"}):_vm._e(),(_vm.showPriceAreaSection)?_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"dplPriceAreaHypo\",attrs:{\"id\":\"priceAreaHypo\",\"name\":\"priceAreaHypoName\",\"index\":_vm.firstIndex,\"actionComplete\":_vm.onActionComplete,\"change\":_vm.onPriceAreaHypoChange,\"floatLabelType\":\"Auto\",\"dataSource\":_vm.priceAreaHypo,\"fields\":{text: 'name', value: 'id' },\"placeholder\":\"Price Area:\",\"allowFiltering\":_vm.allowFiltering,\"showClearButton\":true}})],1):_vm._e(),(_vm.showPriceAreaSection)?_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group check-dh\"}):_vm._e()]),_c('div',{staticClass:\"form-row\"},[_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-dropdownlist',{ref:\"hedgingProduct\",attrs:{\"id\":\"hedgingProduct\",\"name\":\"hedgingProduct\",\"index\":_vm.firstIndex,\"dataSource\":_vm.products,\"dataBound\":_vm.onProductSelect,\"select\":_vm.onProductSelect,\"fields\":{text: 'name', value: 'id' },\"placeholder\":\"Product\",\"floatLabelType\":\"Auto\"}})],1),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('div',{staticClass:\"col-sm-2 justify-content-end\"},[_c('ejs-button',{attrs:{\"cssClass\":\"e-primary\"},nativeOn:{\"click\":function($event){return _vm.download($event)}}},[_vm._v(\" Hypothetical Position Report \")])],1)]),_c('div',{staticClass:\"form-group col-md-6 d-flex justify-content-center input-group\"},[_c('ejs-checkbox',{ref:\"hypoCheckDM\",attrs:{\"change\":_vm.onCheckHypoDefault,\"label\":\"Default Mechanism\",\"id\":\"HypoCheckDefault\",\"name\":\"checkName\",\"floatLabelType\":\"Auto\",\"cssClass\":\"hypoCheck check-d\"}})],1)])]),_c('div',{staticClass:\"col-lg-4\"})]),_c('div',{staticClass:\"row\",staticStyle:{\"max-width\":\"100%\"},attrs:{\"id\":\"hedgingGraph\"}},[_c('div',{staticClass:\"col\"},[_c('ejs-chart',{ref:\"priceChart\",staticStyle:{\"margin-top\":\"10px\"},attrs:{\"id\":\"hypoChartContainer\",\"title\":_vm.title,\"primaryXAxis\":_vm.primaryXAxis,\"primaryYAxis\":_vm.primaryYAxis,\"palettes\":_vm.palettes,\"legendSettings\":_vm.legendSettings,\"textRender\":_vm.textRender}},[_c('e-series-collection',[_c('e-series',{attrs:{\"dataSource\":_vm.fixedPriceDataGraph,\"type\":\"StackingColumn\",\"xName\":\"period\",\"yName\":\"value\",\"name\":\"Fixed\",\"marker\":_vm.marker}}),_c('e-series',{attrs:{\"dataSource\":_vm.impliedDataGraph,\"type\":\"StackingColumn\",\"xName\":\"period\",\"yName\":\"value\",\"name\":\"Implied\",\"marker\":_vm.marker}}),_c('e-series',{attrs:{\"dataSource\":_vm.openPriceDataGraph,\"type\":\"StackingColumn\",\"xName\":\"period\",\"yName\":\"value\",\"name\":\"Open\",\"marker\":_vm.openMarker}})],1)],1)],1)]),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col m-3\"},[_c('ejs-grid',{ref:\"gridOpenPrice\",attrs:{\"dataSource\":_vm.openGridData,\"id\":\"gridOpenPrice\",\"dataBound\":_vm.dataBoundOpenPrice}})],1)]),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col ml-3 mr-3\"},[_c('ejs-grid',{ref:\"gridFixedPrice\",attrs:{\"dataSource\":_vm.fixedGridData,\"id\":\"gridFixedPrice\",\"dataBound\":_vm.dataBoundFixedPrice}})],1)]),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col m-3\"},[_c('ejs-grid',{ref:\"gridM2mPrice\",attrs:{\"dataSource\":_vm.m2mGridData,\"id\":\"gridM2mPrice\",\"dataBound\":_vm.dataBoundM2mPrice}})],1)]),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col m-3\"},[_c('ejs-grid',{ref:\"gridImplied\",attrs:{\"dataSource\":_vm.impliedGridData,\"id\":\"gridImplied\",\"dataBound\":_vm.dataBoundImplied}})],1)])]),_c('div',{staticStyle:{\"margin-top\":\"10px\"}},[_c('ejs-button',{ref:\"btnAddWhatIf\",attrs:{\"id\":\"btnAddWhatIf\",\"isPrimary\":true},nativeOn:{\"click\":function($event){return _vm.modalBtnClick($event)}}},[_vm._v(\"Add 'What If?' Position\")]),_c('ejs-button',{staticStyle:{\"margin-left\":\"10px\"},attrs:{\"id\":\"btnClearWhatIf\"},nativeOn:{\"click\":function($event){return _vm.clearWhatIf($event)}}},[_vm._v(\"Clear 'What If?' Position\")])],1),_c('div',{attrs:{\"id\":\"hedgingSpinner\"}})])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div id=\"hedgingMain\">\r\n        <div class=\"e-card\">\r\n            <div id=\"hedgingForm\" class=\"row\" style=\"padding: 2%\">\r\n                <div class=\"col-lg-8\">\r\n                    <div class=\"form-row\">\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                            <ejs-dropdownlist id=\"hedgingYears\" ref=\"hedgingYears\" name=\"hedgingYears\" :dataSource='availableYears' :select=\"onYearSelect\" :fields=\"{text: 'name', value: 'id' }\" placeholder=\"Years\" floatLabelType='Auto'></ejs-dropdownlist>\r\n                        </div>\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                            <ejs-dropdownlist id=\"hedgingView\" ref=\"hedgingView\" name=\"hedgingView\" :dataSource='views' :index='firstIndex' :select=\"onViewSelect\" :fields=\"{text: 'name', value: 'id' }\" placeholder=\"View\" floatLabelType='Auto'></ejs-dropdownlist>\r\n                        </div>\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                            <ejs-dropdownlist ref='dplCurrencyHyp' id=\"currencyHypTrade\" name=\"currencyHypTrade\" v-model=\"data.currencyId\" :change=\"onCurrencyChangeHypTrade\" :dataSource='currenciesHypTrade' :fields=\"{text: 'name', value: 'currencyId' }\" placeholder=\"Currency\" floatLabelType='Auto' :showClearButton='true'></ejs-dropdownlist>\r\n                        </div>\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group\" v-if=\"showPriceAreaSection\">\r\n\r\n                        </div>\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group\" v-if=\"showPriceAreaSection\">\r\n                            <ejs-dropdownlist ref='dplPriceAreaHypo' id=\"priceAreaHypo\" name=\"priceAreaHypoName\" :index='firstIndex' :actionComplete=\"onActionComplete\" :change='onPriceAreaHypoChange' floatLabelType='Auto' :dataSource='priceAreaHypo' :fields=\"{text: 'name', value: 'id' }\" placeholder=\"Price Area:\" :allowFiltering='allowFiltering' :showClearButton='true'></ejs-dropdownlist>\r\n                        </div>\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group check-dh\" v-if=\"showPriceAreaSection\">\r\n\r\n                        </div>\r\n                    </div>\r\n                    <div class=\"form-row\">\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                            <ejs-dropdownlist id=\"hedgingProduct\" ref=\"hedgingProduct\" name=\"hedgingProduct\" :index='firstIndex' :dataSource='products' :dataBound=\"onProductSelect\" :select=\"onProductSelect\" :fields=\"{text: 'name', value: 'id' }\" placeholder=\"Product\" floatLabelType='Auto'></ejs-dropdownlist>\r\n                        </div>\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                            <div class=\"col-sm-2 justify-content-end\">\r\n                                <ejs-button cssClass=\"e-primary\" v-on:click.native='download'> Hypothetical Position Report </ejs-button>\r\n                            </div>\r\n                        </div>\r\n                        <div class=\"form-group col-md-6 d-flex justify-content-center input-group\">\r\n                            <ejs-checkbox ref=\"hypoCheckDM\" :change=\"onCheckHypoDefault\" label='Default Mechanism' id=\"HypoCheckDefault\" name=\"checkName\" floatLabelType='Auto' cssClass=\"hypoCheck check-d\"></ejs-checkbox>\r\n                        </div>\r\n                    </div>\r\n                </div>\r\n                <div class=\"col-lg-4\">\r\n                </div>\r\n            </div>\r\n            <div id=\"hedgingGraph\" class=\"row\" style=\"max-width:100%\">\r\n                <div class=\"col\">\r\n                    <ejs-chart id=\"hypoChartContainer\" ref=\"priceChart\" :title='title' :primaryXAxis='primaryXAxis' :primaryYAxis='primaryYAxis' style=\"margin-top: 10px;\" :palettes='palettes' :legendSettings='legendSettings'  :textRender='textRender'>\r\n                        <e-series-collection>\r\n                            <e-series :dataSource='fixedPriceDataGraph' type='StackingColumn' xName='period' yName='value' name='Fixed' :marker=\"marker\"></e-series>\r\n                            <e-series :dataSource='impliedDataGraph' type='StackingColumn' xName='period' yName='value' name='Implied' :marker=\"marker\"></e-series>\r\n                            <e-series :dataSource='openPriceDataGraph' type='StackingColumn' xName='period' yName='value' name='Open' :marker=\"openMarker\"></e-series>\r\n\r\n                        </e-series-collection>\r\n                    </ejs-chart>\r\n                </div>\r\n            </div>\r\n            <div class=\"row\">\r\n                <div class=\"col m-3\">\r\n                    <ejs-grid ref=\"gridOpenPrice\"\r\n                              :dataSource=\"openGridData\" id=\"gridOpenPrice\"\r\n                              :dataBound=\"dataBoundOpenPrice\"></ejs-grid>\r\n                </div>\r\n            </div>\r\n            <div class=\"row\">\r\n                <div class=\"col ml-3 mr-3\">\r\n                    <ejs-grid ref=\"gridFixedPrice\"\r\n                              :dataSource=\"fixedGridData\" id=\"gridFixedPrice\"\r\n                              :dataBound=\"dataBoundFixedPrice\"></ejs-grid>\r\n                </div>\r\n            </div>\r\n            <div class=\"row\">\r\n                <div class=\"col m-3\">\r\n                    <ejs-grid ref=\"gridM2mPrice\"\r\n                              :dataSource=\"m2mGridData\" id=\"gridM2mPrice\"\r\n                              :dataBound=\"dataBoundM2mPrice\"></ejs-grid>\r\n                </div>\r\n            </div>\r\n            <div class=\"row\">\r\n                <div class=\"col m-3\">\r\n                    <ejs-grid ref=\"gridImplied\"\r\n                              :dataSource=\"impliedGridData\" id=\"gridImplied\"\r\n                              :dataBound=\"dataBoundImplied\"></ejs-grid>\r\n                </div>\r\n            </div>\r\n        </div>\r\n        <div style=\"margin-top: 10px;\">\r\n            <ejs-button id='btnAddWhatIf' ref='btnAddWhatIf' :isPrimary=\"true\" v-on:click.native=\"modalBtnClick\">Add 'What If?' Position</ejs-button>\r\n            <ejs-button id='btnClearWhatIf' v-on:click.native=\"clearWhatIf\" style=\"margin-left: 10px;\">Clear 'What If?' Position</ejs-button>\r\n        </div>\r\n        <div id=\"hedgingSpinner\"></div>\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n    import Vue from \"vue\";\r\n    import { GridPlugin, Grid } from \"@syncfusion/ej2-vue-grids\";\r\n    import { ButtonPlugin } from \"@syncfusion/ej2-vue-buttons\";\r\n    import { DialogPlugin, DialogUtility } from '@syncfusion/ej2-vue-popups';\r\n    import { TextBoxPlugin } from \"@syncfusion/ej2-vue-inputs\";\r\n    import apis from '../../common/network'\r\n    import store from '../../store';\r\n    import urls from '../../common/urls';\r\n    import SyncHelper from '../../common/syncfusion';\r\n    import { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\r\n    import { ChartPlugin, StackingColumnSeries, Category, DataLabel, Legend } from \"@syncfusion/ej2-vue-charts\";\r\n    import { CheckBoxPlugin, CheckBox } from \"@syncfusion/ej2-vue-buttons\";\r\n    import gridOptions from '../../common/gridOptions'\r\n\r\n    Vue.use(ButtonPlugin);\r\n    Vue.use(DialogPlugin);\r\n    Vue.use(TextBoxPlugin);\r\n    Vue.use(GridPlugin);\r\n    Vue.use(DialogPlugin);\r\n    Vue.use(ChartPlugin);\r\n    Vue.use(CheckBoxPlugin);\r\n    export default {\r\n        name: 'HedgingOverviewReport',\r\n        created() {\r\n        },\r\n        data() {\r\n            return {\r\n                data: {},\r\n                palettes: [\"#485696\", \"#a35ea1\", \"#dadada\"],\r\n                openGridData: [],\r\n                fixedGridData: [],\r\n                m2mGridData: [],\r\n                impliedGridData: [],\r\n                firstIndex: 0,\r\n                unit: null,\r\n                currencyHypTrade: null,\r\n                value: null,\r\n                fixedPriceDataGraph: [],\r\n                openPriceDataGraph: [],\r\n                impliedDataGraph: [],\r\n                openPriceGrid: null,\r\n                fixedPriceGrid: null,\r\n                m2mPriceGrid: null,\r\n                triggeredFixedPrice: false,\r\n                triggeredOpenPrice: false,\r\n                triggeredM2mPrice: false,\r\n                triggeredImplied: false,\r\n                showPriceAreaSection: false,\r\n                priceAreaNames: store.state.pricingAreaNames,\r\n                openPeriods: [],\r\n                firstIndexCurrency: 3,\r\n                fixedPeriods: [],\r\n                openPriceData: [],\r\n                fixedPriceData: [],\r\n                availableYears: [],\r\n                openMarker: {\r\n                    dataLabel: {\r\n                        visible: true,\r\n                        font: { fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '13px', fontWeight: 'normal', textAnchor: 'middle' }, position: 'Middle'\r\n                    }\r\n                },\r\n                marker: {\r\n                    dataLabel: {\r\n                        visible: true,\r\n                        font: { fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '13px', fontWeight: 'normal', textAnchor: 'middle' }, position: 'Middle'\r\n                    }\r\n                },\r\n                legendSettings: {\r\n                    visible: true,\r\n                    position: 'Bottom',\r\n                    textStyle: { fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '13px', fontWeight: 'normal', textAnchor: 'middle', color: '#8a93a2' }\r\n                },\r\n                primaryXAxis: {\r\n                    valueType: 'Category',\r\n                    title: ' ',\r\n                    labelStyle: { fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '14px', fontWeight: 'normal', textAnchor: 'middle', color: '#8a93a2' }\r\n                },\r\n                primaryYAxis:\r\n                {\r\n                    title: 'Volume',\r\n                    labelFormat: 'n1',\r\n                    titleStyle: { fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '14px', fontWeight: 'normal', textAnchor: 'middle', color: '#8a93a2' },\r\n                    labelStyle: { fontFamily: 'Arial Narrow', fontStyle: 'normal', fontSize: '14px', fontWeight: 'normal', textAnchor: 'middle', color: '#8a93a2' },\r\n                },\r\n                years: null,\r\n                title: \"Hedging Overview\",\r\n                views: [{ \"name\": \"100% Stacked\", \"id\": 1 }, { \"name\": \"Stacked\", \"id\": 2 }, { \"name\": \"Cost\", \"id\": 3 }],\r\n\r\n                isModalVisible: false,\r\n                isModal: true,\r\n                target: \"#mainHypothetical\",\r\n                header: 'What if?',\r\n                width: '1300px',\r\n                animationSettings: { effect: 'None' },\r\n                allowFiltering: true\r\n\r\n            }\r\n        },\r\n        mounted() {\r\n            if (this.$route.params.navigateFrom != \"trade\") {\r\n                apis.protectedApi.delete(`hypoTrade`);\r\n            }\r\n            createSpinner({\r\n                target: document.getElementById('hedgingSpinner')\r\n            });\r\n            createSpinner({\r\n                target: document.getElementById('mainSpinner')\r\n            });\r\n            document.getElementById('btnAddWhatIf').focus();\r\n        },\r\n        methods: {\r\n            onActionComplete(args) { //initial load to be set on the first pricing area\r\n                let currencyId = this.$refs.dplCurrencyHyp.ej2Instances.value;\r\n                if (args.result && args.result.length > 0) {\r\n                    this.getHedgingHypoData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, args.result[0].id, false);\r\n                    this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, args.result[0].id, false);\r\n                }\r\n            },\r\n            onPriceAreaHypoChange: function (args) {\r\n                if (args.isInteracted) {\r\n                    let currencyId = this.$refs.dplCurrencyHyp.ej2Instances.value;\r\n                    this.getHedgingHypoData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, args.itemData == null ? null : args.itemData.id, false);\r\n                    this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, args.itemData == null ? null : args.itemData.id, false);\r\n\r\n                }\r\n            },\r\n            onCheckPASystemHypo(args) {\r\n                let pricingAreaId = document.getElementById('priceAreaHypo') == null ? undefined : document.getElementById('priceAreaHypo').ej2_instances[0].value;\r\n                let currencyId = this.$refs.dplCurrencyHyp.ej2Instances.value;\r\n               \r\n                    this.getHedgingHypoData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, false);\r\n                    this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, false);\r\n                \r\n\r\n            },\r\n            textRender: function (args) {\r\n                if (args.text == '0.0' || args.text == '0.00') {\r\n                    args.text = ''; \r\n                }\r\n            },\r\n            calculateYears: function (startDate, endDate) {\r\n                this.availableYears = [];\r\n                var startYearMonth = new Date(startDate).getMonth();\r\n                var endYearMonth = new Date(endDate).getMonth();\r\n                var min = new Date(startDate).getFullYear();\r\n                var max = new Date(endDate).getFullYear();\r\n                if (endYearMonth < startYearMonth) {\r\n                    max = max - 1;\r\n                }\r\n                var j = 1;\r\n\r\n                for (var i = min; i <= max; i++) {\r\n                    var nextyear = i + 1;\r\n                    var yearName = startYearMonth == 0 ? (\"Y\" + j + \"-\" + i) : (\"Y\" + j + \"-\" + i + \"/\" + nextyear);\r\n                    this.availableYears.push({ \"name\": yearName, \"id\": j })\r\n                    j++;\r\n                }\r\n                this.$ref.hedgingYears.ej2Instances.value = 1;\r\n            },\r\n            onCheckHypoDefault(args) {\r\n                let pricingAreaId = document.getElementById('priceAreaHypo') == null ? undefined : document.getElementById('priceAreaHypo').ej2_instances[0].value;\r\n                store.state.isCheckDefaultM = args.checked;\r\n                var checkArea = false;\r\n               \r\n                this.getHedgingHypoData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, pricingAreaId, checkArea);\r\n                this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, pricingAreaId, checkArea);\r\n            },\r\n            onViewSelect: function (args) {\r\n                let pricingAreaId = document.getElementById('priceAreaHypo') == null ? undefined : document.getElementById('priceAreaHypo').ej2_instances[0].value;\r\n                let currencyId = this.$refs.dplCurrencyHyp.ej2Instances.value;\r\n                var checkArea = false;\r\n               \r\n                this.getHedgingHypoData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, args.itemData.name, currencyId, pricingAreaId, checkArea);\r\n\r\n                this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, args.itemData.name, currencyId, pricingAreaId, checkArea);\r\n            },\r\n            onProductSelect: function (args) {\r\n                let pricingAreaId = document.getElementById('priceAreaHypo') == null ? undefined : document.getElementById('priceAreaHypo').ej2_instances[0].value;\r\n                var prodName = args.itemData == null ? this.$refs.hedgingProduct.ej2Instances.text : args.itemData.name;\r\n                let currencyId = this.$refs.dplCurrencyHyp.ej2Instances.value;\r\n                var checkArea = false;\r\n               \r\n                this.getHedgingHypoData(prodName, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, checkArea);\r\n\r\n                this.getHedgingData(prodName, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, checkArea);\r\n            },\r\n            onYearSelect: function (args) {\r\n                var checkArea = false;\r\n               \r\n                let pricingAreaId = document.getElementById('priceAreaHypo') == null ? undefined : document.getElementById('priceAreaHypo').ej2_instances[0].value;\r\n                let currencyId = this.$refs.dplCurrencyHyp.ej2Instances.value;\r\n                this.getHedgingHypoData(this.$refs.hedgingProduct.ej2Instances.text, args.itemData.name, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, checkArea);\r\n                this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, args.itemData.name, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, checkArea);\r\n            },\r\n            onCurrencyChangeHypTrade: function (args) {\r\n                let pricingAreaId = document.getElementById('priceAreaHypo') == null ? undefined : document.getElementById('priceAreaHypo').ej2_instances[0].value;\r\n                let currencyId = args.itemData.currencyId;\r\n                var checkArea = false;\r\n               \r\n                this.getHedgingHypoData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, checkArea);\r\n                this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, checkArea);\r\n                \r\n          \r\n            },\r\n\r\n            getHedgingData: function (product, year, view, currencyId, pricingAreaId, pricingAreaSystem) {\r\n                this.showPriceAreaSection = this.priceAreaNames == undefined ? false : true;\r\n                showSpinner(document.getElementById('hedgingSpinner'));\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                apis.protectedApi(`utils/contractTradeablePeriods?contractId=${store.state.reportContractId}`).then(ctpResponse => {\r\n                    this.allTradePeriods = ctpResponse.data;\r\n                }).catch(e => {\r\n                    if (e.response.data.message) {\r\n                        this.showErrorDialog(e.response.data.message);\r\n                    }\r\n                });\r\n\r\n                apis.protectedApi(`report/hedgingOverview/${store.state.reportContractId}?product=${product}&year=${year}&view=${view}&currencyId=${currencyId == undefined ? \"\" : currencyId}\r\n                &defaultM=${store.state.isCheckDefaultM == undefined ? \"\" : store.state.isCheckDefaultM}&pricingAreaId=${pricingAreaId == undefined ? \"\" : pricingAreaId}&pricingAreaSystem=${pricingAreaSystem == undefined ? false : pricingAreaSystem}`)\r\n                    .then(response => {\r\n                        this.data = response.data.data;\r\n                        this.value = response.data.value;\r\n                        this.unit = response.data.unit;\r\n                        this.currencyHypTrade = response.data.currencyId;\r\n                        this.bindGrids(view);                                        \r\n                        this.calculateYears(response.data.startDate, response.data.endDate);\r\n                        this.$refs.hypoCheckDM.ej2Instances.checked = store.state.isCheckDefaultM;\r\n                        hideSpinner(document.getElementById('hedgingSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                    }).catch(e => {\r\n                        hideSpinner(document.getElementById('hedgingSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                        if (e.response) {\r\n                            this.showErrorDialog(e.response.data.message);\r\n                        }\r\n                    })\r\n            },\r\n            getHedgingHypoData: function (product, year, view, currencyId, pricingAreaId, pricingAreaSystem) {\r\n                this.showPriceAreaSection = this.priceAreaNames == undefined ? false : true;\r\n                showSpinner(document.getElementById('hedgingSpinner'));\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                apis.protectedApi(`report/hedgingHypotheticalOverview/${store.state.reportContractId}?product=${product}&year=${year}&view=${view}&currencyId=${currencyId == undefined ? \"\" : currencyId}\r\n                &defaultM=${store.state.isCheckDefaultM == undefined ? \"\" : store.state.isCheckDefaultM}&pricingAreaId=${pricingAreaId == undefined ? \"\" : pricingAreaId}&pricingAreaSystem=${pricingAreaSystem == undefined ? false : pricingAreaSystem}`)\r\n                    .then(response => {\r\n                        this.bindImpliedGrid(response.data.data);\r\n\r\n                        if (response.data.value == 'p/therm') {\r\n                            this.$refs.dplCurrencyHyp.ej2Instances.text = \"p - GBp\";\r\n\r\n                        } else {\r\n\r\n                            this.$refs.dplCurrencyHyp.ej2Instances.text = response.data.currencySymbolAndName;\r\n                        }\r\n                        hideSpinner(document.getElementById('hedgingSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                        setTimeout(function (e,self) {\r\n                            self.triggeredImplied = false;\r\n                            e.refresh();\r\n                        }, 200, this.$refs.gridImplied,this);\r\n                       \r\n                    }).catch(e => {\r\n                        hideSpinner(document.getElementById('hedgingSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                        if (e.response) {\r\n                            this.showErrorDialog(e.response.data.message);\r\n                        }\r\n                    })\r\n            },\r\n            download: function (args) {\r\n                showSpinner(document.getElementById('mainSpinner'));\r\n                showSpinner(document.getElementById('hedgingSpinner'));\r\n                this.currencyId = this.$refs.dplCurrencyHyp.ej2Instances.value;\r\n                apis.protectedApi(`${urls.apiBaseUrl}ReportTemplate/generateHypotheticalReportPage/${store.state.reportContractId}?currencyId=${this.currencyId == undefined ? \"\" : this.currencyId}&defaultM=${this.$refs.hypoCheckDM.ej2Instances.checked}`).then(it => {\r\n                    window.open(it.data.reportUri);\r\n                    hideSpinner(document.getElementById('hedgingSpinner'));\r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                }\r\n                ).catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                        hideSpinner(document.getElementById('hedgingSpinner'));\r\n                        hideSpinner(document.getElementById('mainSpinner'));\r\n                    }\r\n                );\r\n            },\r\n            bindGrids: function (view) {\r\n                this.openGridData = this.data.open;\r\n                this.fixedGridData = this.data.fixed;\r\n                this.m2mGridData = this.data.m2m;\r\n\r\n                this.fixedPriceDataGraph = [];\r\n                for (const property in this.data.fixed[1]) {\r\n                    var s = {\r\n                        period: property,\r\n                        value: this.data.fixed[1][property].replaceAll(\",\", \"\")\r\n                    };\r\n                    if (property != \"Fixed\") {\r\n                        this.fixedPriceDataGraph.push(s);\r\n                    }\r\n                }\r\n\r\n                var chart = document.getElementById('hypoChartContainer').ej2_instances[0];\r\n                if (view == \"100% Stacked\") {\r\n                    chart.primaryYAxis =\r\n                    {\r\n                        title: 'Volume %',\r\n                        labelFormat: 'N1'\r\n                    }\r\n                }\r\n                if (view == \"Stacked\") {\r\n                    chart.primaryYAxis =\r\n                    {\r\n                        title: 'Volume ' + this.unit,\r\n                        labelFormat: 'N2'\r\n                    }\r\n\r\n                }\r\n                if (view == \"Cost\") {//cost\r\n                    chart.primaryYAxis =\r\n                    {\r\n                        title: 'Cost ' + this.currencyHypTrade,\r\n                        labelFormat: 'N0'\r\n                    }\r\n                    this.openMarker = {\r\n                        dataLabel: {\r\n                            visible: true,\r\n                        }\r\n                    }\r\n                }\r\n                chart.refresh();\r\n                this.triggeredOpenPrice = false;\r\n                this.triggeredFixedPrice = false;\r\n                this.triggeredM2mPrice = false;\r\n                setTimeout(function (e) {\r\n                    e.refresh();\r\n                }, 0, this.$refs.gridOpenPrice);\r\n\r\n                setTimeout(function (e) { e.refresh(); }, 50, this.$refs.gridFixedPrice);\r\n                setTimeout(function (e) {\r\n                    e.refresh();\r\n                }, 150, this.$refs.gridM2mPrice);\r\n            },\r\n            bindImpliedGrid: function (data) {\r\n\r\n                this.impliedGridData = data;\r\n\r\n                this.impliedDataGraph = [];\r\n                for (const property in data[3]) {\r\n                    var s = {\r\n                        period: property,\r\n                        value: data[3][property].replaceAll(\",\", \"\")\r\n                    };\r\n                    if (property != \"Implied\") {\r\n                        this.impliedDataGraph.push(s);\r\n                    }\r\n                }\r\n                this.openPriceDataGraph = [];\r\n                for (const property in data[7]) {\r\n                    var s = {\r\n                        period: property,\r\n                        value: data[7][property].replaceAll(\",\", \"\")\r\n                    };\r\n                    if (property != \"Implied\") {\r\n                        this.openPriceDataGraph.push(s);\r\n                    }\r\n                }\r\n\r\n                var chart = document.getElementById('hypoChartContainer').ej2_instances[0];\r\n                chart.refresh();\r\n\r\n                this.triggeredImplied = false;\r\n                this.$refs.gridImplied.refresh();\r\n            },\r\n            dataBoundImplied: function () {\r\n                if (this.triggeredImplied == false) {\r\n                    this.dataBound(this.$refs.gridImplied);\r\n                }\r\n                this.triggeredImplied = true;\r\n            },\r\n            dataBoundOpenPrice: function () {\r\n                if (this.triggeredOpenPrice == false) {\r\n                    this.dataBound(this.$refs.gridOpenPrice);\r\n                }\r\n                this.triggeredOpenPrice = true;\r\n            },\r\n            dataBoundFixedPrice: function () {\r\n                if (this.triggeredFixedPrice == false) {\r\n                    this.dataBound(this.$refs.gridFixedPrice);\r\n                }\r\n                this.triggeredFixedPrice = true;\r\n            },\r\n            dataBoundM2mPrice: function () {\r\n                if (this.triggeredM2mPrice == false) {\r\n                    this.dataBound(this.$refs.gridM2mPrice);\r\n                }\r\n                this.triggeredM2mPrice = true;\r\n            },\r\n            dataBound: function (grid) {\r\n                var cols = Object.keys(grid.getCurrentViewRecords()[0]);\r\n                var length = cols.length;\r\n                var col = [];\r\n                for (var i = 0; i < length; i++) {\r\n                    var field = cols[i];\r\n                    var obj = {};\r\n\r\n                    obj[\"field\"] = field;\r\n                    if (field == \"Open\" || field == \"Fixed\" || field == \"M2M\") {\r\n                        obj[\"width\"] = 190;\r\n                    } else if (field == \"Implied\") {\r\n                        obj[\"width\"] = 220;\r\n                        obj[\"headerText\"] = \"Implied Position\"\r\n                    } else {\r\n                        obj[\"width\"] = 120;\r\n                    }\r\n                    col.push(obj);\r\n                }\r\n                grid.setProperties({ columns: col });\r\n            },\r\n            showErrorDialog: function (message) {\r\n                DialogUtility.alert({\r\n                    title: 'Alert Dialog',\r\n                    content: message,\r\n                    position: { X: 700, Y: 200 },\r\n                    showCloseIcon: true,\r\n                    closeOnEscape: true,\r\n                    animationSettings: { effect: 'Zoom' }\r\n                });\r\n            },\r\n            modalBtnClick: function () {\r\n\r\n                this.$router.push({ name: \"Trade\", params: { callerId: store.state.reportContractId, callerForm:\"Reports UI\", callerTab: \"hypothetical\" } });\r\n            },\r\n            clearWhatIf: function () {\r\n                var checkArea = false;\r\n                let pricingAreaId = document.getElementById('priceAreaHypo') == null ? undefined : document.getElementById('priceAreaHypo').ej2_instances[0].value;\r\n                let currencyId = this.$refs.dplCurrencyHyp.ej2Instances.value;\r\n\r\n                apis.protectedApi.delete(`hypoTrade`).then(response => {\r\n                    this.getHedgingHypoData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId == undefined ? \"\" : currencyId, pricingAreaId, checkArea);\r\n                    this.getHedgingData(this.$refs.hedgingProduct.ej2Instances.text, this.$refs.hedgingYears.ej2Instances.text, this.$refs.hedgingView.ej2Instances.text, currencyId, pricingAreaId, checkArea);\r\n                }).catch(e => {\r\n                    this.showErrorDialog(e.response.data.message);\r\n                });\r\n                \r\n            },\r\n        },\r\n        computed: {\r\n            products() {\r\n                return SyncHelper.getDataManager(\"utils/products?contractId=\" + store.state.reportContractId + \"&includeCombined=true\");\r\n            },\r\n            currenciesHypTrade() {\r\n                return SyncHelper.getDataManager(\"utils/currenciesAvailable?contractId=\" + store.state.reportContractId);\r\n            },\r\n            priceAreaHypo() {\r\n                return SyncHelper.getDataManager(\"utils/pricingContractAreas?contractId=\" + store.state.reportContractId);\r\n            }\r\n        },\r\n        provide: {\r\n            chart: [StackingColumnSeries, Category, DataLabel, Legend]\r\n        },\r\n        updated: function () {\r\n            this.$nextTick(() => {\r\n                window.dispatchEvent(new Event('resize'));\r\n            });\r\n        },\r\n    }\r\n\r\n</script>\r\n\r\n<style>\r\n    #hypoChartContainer_ChartTitle {\r\n        font-family: 'Arial Narrow', Arial, sans-serif !important;\r\n        font-style: normal;\r\n        font-size: 15px;\r\n        font-weight: 500;\r\n        text-anchor: middle;\r\n        fill: #8a93a2;\r\n    }\r\n\r\n    .hypoCheck {\r\n        padding: 1em 24em 0em 0em;\r\n    }\r\n    .check-dh {\r\n        padding-top: 2rem !important;\r\n        padding-right: 23rem !important;\r\n    }\r\n    #hedgingSpinner {\r\n        display: none;\r\n    }\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HypotheticalTradeReportTemplate.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HypotheticalTradeReportTemplate.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./HypotheticalTradeReportTemplate.vue?vue&type=template&id=865d7f0a\"\nimport script from \"./HypotheticalTradeReportTemplate.vue?vue&type=script&lang=js\"\nexport * from \"./HypotheticalTradeReportTemplate.vue?vue&type=script&lang=js\"\nimport style0 from \"./HypotheticalTradeReportTemplate.vue?vue&type=style&index=0&id=865d7f0a&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('div',{staticClass:\"row\"},[_c('div',{attrs:{\"id\":\"ticketsLogsSpinner\"}}),_c('div',{staticClass:\"e-card mt-2\"},[_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"col m-3\"},[_c('ejs-grid',{ref:\"grid\",attrs:{\"dataSource\":_vm.tradeLogData,\"allowPaging\":true,\"allowResizing\":true,\"allowReordering\":false,\"allowSorting\":false,\"allowFiltering\":true,\"allowExcelExport\":true,\"excelExportComplete\":_vm.excelExportComplete,\"filterSettings\":_vm.filterOptions,\"autoFit\":true,\"pageSettings\":_vm.pageSettings,\"actionComplete\":_vm.actionComplete,\"excelQueryCellInfo\":_vm.excelQueryCellInfo,\"toolbar\":_vm.toolbar,\"actionBegin\":_vm.actionBegin,\"toolbarClick\":_vm.toolbarClick,\"actionFailure\":_vm.actionFailure,\"queryCellInfo\":_vm.customiseCell}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"ticketLogId\",\"headerText\":\"Trade Log ID\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"ticketId\",\"headerText\":\"Trade ID\"}}),_c('e-column',{attrs:{\"field\":\"priceAreaName\",\"headerText\":\"Price Area\",\"width\":\"150\"}}),_c('e-column',{attrs:{\"field\":\"tradeDate\",\"headerText\":\"Trade Date\",\"type\":\"date\",\"format\":_vm.dateFormatOptions}}),_c('e-column',{attrs:{\"field\":\"contractTradeablePeriodName\",\"headerText\":\"Trade Period\"}}),_c('e-column',{attrs:{\"field\":\"productName\",\"headerText\":\"Product\"}}),_c('e-column',{attrs:{\"headerText\":\"Complex trade\",\"field\":\"partOfComplexTrade\",\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"Locked Volume\",\"field\":\"lockedVolume\",\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"Trading Unit\",\"field\":\"volumeUnitName\",\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"Volume Hedged Percentage\",\"field\":\"volumeHedgedPercentage\",\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"headerText\":\"Market Volume Unit\",\"field\":\"tradingUnitName\",\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"price\",\"headerText\":\"Price\",\"format\":\"n3\",\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"tradedBy\",\"headerText\":\"Traded by\",\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"confirmationReference\",\"headerText\":\"Confirmation Reference\",\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"supplementaryNote\",\"headerText\":\"Supplementary Note\",\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"deleted\",\"headerText\":\"Is Deleted\",\"textAlign\":\"Center\",\"type\":\"string\"}}),_c('e-column',{attrs:{\"field\":\"childTicket\",\"headerText\":\"Is Child Ticket\",\"textAlign\":\"Center\",\"type\":\"string\"}}),_c('e-column',{attrs:{\"field\":\"ticketLogDate\",\"headerText\":\"Log Date\",\"textAlign\":\"Left\",\"type\":\"date\",\"format\":_vm.dateFormatOptions}}),_c('e-column',{attrs:{\"field\":\"ticketLogDate\",\"headerText\":\"Log Time\",\"textAlign\":\"Left\",\"type\":\"string\"}}),_c('e-column',{attrs:{\"field\":\"userName\",\"headerText\":\"User\",\"textAlign\":\"Left\",\"type\":\"string\"}})],1)],1)],1)])])])}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <div class=\"row\">\r\n        <div id=\"ticketsLogsSpinner\"></div>\r\n        <div class=\"e-card mt-2\">\r\n            <div class=\"row\">\r\n                <div class=\"col m-3\">\r\n                    <ejs-grid ref='grid'\r\n                              :dataSource='tradeLogData'\r\n                              :allowPaging='true'\r\n                              :allowResizing='true'\r\n                              :allowReordering='false'\r\n                              :allowSorting='false'\r\n                              :allowFiltering='true'\r\n                              :allowExcelExport='true'\r\n                              :excelExportComplete='excelExportComplete'\r\n                              :filterSettings='filterOptions'\r\n                              :autoFit='true'\r\n                              :pageSettings='pageSettings'\r\n                              :actionComplete='actionComplete'\r\n                              :excelQueryCellInfo='excelQueryCellInfo'\r\n                              :toolbar='toolbar'\r\n                              :actionBegin ='actionBegin'\r\n                              :toolbarClick='toolbarClick'\r\n                              :actionFailure='actionFailure'\r\n                              :queryCellInfo='customiseCell'>\r\n                        <e-columns>\r\n                            <e-column field='ticketLogId' headerText='Trade Log ID' width=120></e-column>\r\n                            <e-column field='ticketId' headerText='Trade ID'></e-column>\r\n                            <e-column field='priceAreaName' headerText='Price Area' width=150></e-column>\r\n                            <e-column field='tradeDate' headerText='Trade Date' type=\"date\" :format='dateFormatOptions'></e-column>\r\n                            <e-column field='contractTradeablePeriodName' headerText='Trade Period'></e-column>\r\n                            <e-column field='productName' headerText='Product'></e-column>\r\n                            <e-column headerText='Complex trade' field='partOfComplexTrade' textAlign=\"Center\"></e-column>\r\n                            <e-column headerText='Locked Volume' field='lockedVolume' textAlign=\"Center\"></e-column>\r\n                            <e-column headerText='Trading Unit' field='volumeUnitName' textAlign=\"Center\"></e-column>\r\n                            <e-column headerText='Volume Hedged Percentage' field='volumeHedgedPercentage' textAlign=\"Center\"></e-column>\r\n                            <!--<e-column headerText='Volume in Market Volume Unit' field='calculatedLockedVolume' textAlign=\"Center\"></e-column>-->\r\n\r\n                            <e-column headerText='Market Volume Unit' field='tradingUnitName' textAlign=\"Center\"></e-column>\r\n                            <e-column field='price' headerText='Price' format=\"n3\" textAlign=\"Center\"></e-column>\r\n                            <e-column field='tradedBy' headerText='Traded by' textAlign=\"Center\"></e-column>\r\n                            <e-column field='confirmationReference' headerText='Confirmation Reference' textAlign=\"Center\"></e-column>\r\n                            <e-column field='supplementaryNote' headerText='Supplementary Note' textAlign=\"Center\"></e-column>\r\n                            <e-column field='deleted' headerText='Is Deleted' textAlign='Center' type='string'></e-column>\r\n                            <e-column field='childTicket' headerText='Is Child Ticket' textAlign='Center' type='string'></e-column>\r\n                            <e-column field='ticketLogDate' headerText='Log Date' textAlign='Left' type=\"date\" :format='dateFormatOptions'></e-column>\r\n                            <e-column field='ticketLogDate' headerText='Log Time' textAlign='Left' type='string'></e-column>\r\n                            <e-column field='userName' headerText='User' textAlign='Left' type=\"string\"></e-column>\r\n                        </e-columns>\r\n                    </ejs-grid>\r\n                </div>\r\n            </div>\r\n        </div>\r\n    </div>\r\n</template>\r\n\r\n\r\n<script>\r\n    import Vue from 'vue';\r\n    import { GridPlugin, Filter, Resize, ForeignKey, Toolbar, ExcelExport, Page } from '@syncfusion/ej2-vue-grids';\r\n    import { ButtonPlugin } from '@syncfusion/ej2-vue-buttons';\r\n    import { TextBoxPlugin } from \"@syncfusion/ej2-vue-inputs\";\r\n    import { DialogPlugin } from '@syncfusion/ej2-vue-popups';\r\n    import store from '../../store';\r\n    import gridOptions from '../../common/gridOptions';\r\n    import apis from '../../common/network';\r\n    import authToken from '../../common/authToken';\r\n    import { createSpinner, showSpinner, hideSpinner, DialogUtility } from '@syncfusion/ej2-popups';\r\n\r\n    Vue.use(ButtonPlugin);\r\n    Vue.use(TextBoxPlugin);\r\n    Vue.use(DialogPlugin);\r\n    Vue.use(GridPlugin);\r\n\r\n    export default {\r\n        name: 'TicketsLogsReport',\r\n        created() {\r\n        },\r\n        data() {\r\n            return {\r\n                store: store,\r\n                tradeLogData: {},\r\n                filterOptions: gridOptions.filterSettings,\r\n                pageSettings: gridOptions.pageSettings,\r\n                toolbar: ['ExcelExport'],\r\n                dateFormatOptions: { type: 'date', format: 'dd/MM/yyyy', max: new Date(), params: { max: new Date() } }\r\n            };\r\n        },\r\n        mounted() {\r\n            showSpinner(document.getElementById('mainSpinner'));\r\n            this.getTradeLogData();\r\n        },\r\n        methods: {\r\n            getTradeLogData: function () {\r\n\r\n                apis.protectedApi(`report/tradeLogs/${store.state.reportContractId}`)\r\n                    .then(response => {\r\n                         hideSpinner(document.getElementById('ticketsSpinner'));\r\n                        this.tradeLogData = response.data.result;\r\n                        this.tradeLogData.forEach(item => {\r\n                            item.tradeDate = new Date(item.tradeDate);\r\n                            item.ticketLogDate = new Date(item.ticketLogDate);\r\n                        });\r\n                    }).catch(e => {\r\n                        hideSpinner(document.getElementById('ticketsSpinner'));\r\n                        if (e.response) {\r\n                            this.showAlertDialog(e.response.data.message);\r\n                        }\r\n                    })\r\n            },\r\n            actionBegin(args) {\r\n                gridOptions.actionBegin(args);\r\n\r\n            },\r\n            actionComplete(args) {\r\n                gridOptions.actionComplete(args, this.$refs);\r\n                hideSpinner(document.getElementById('mainSpinner'));\r\n            },\r\n            actionFailure(args) {\r\n                gridOptions.actionFailure(args, this.$refs);\r\n            },\r\n            showAlertDialog: function (message) {\r\n                DialogUtility.alert({\r\n                    title: \"Alert\",\r\n                    content: message,\r\n                    showCloseIcon: false,\r\n                    closeOnEscape: true,\r\n                    position: { X: 700, Y: 200 },\r\n                    animationSettings: { effect: \"Zoom\" },\r\n                    zIndex: 1100\r\n\r\n                });\r\n            },\r\n            customiseCell: function (args) {\r\n                //if (args.column.field === 'lockedVolume') {\r\n                //    args.cell.textContent = args.cell.textContent + \" \" + args.data.volumeUnitName;\r\n                //}\r\n                if (args.column.field === 'volumeHedgedPercentage') {\r\n                    args.cell.textContent = args.cell.textContent + \"%\";\r\n                }\r\n                if (args.column.field === 'price') {\r\n                    args.cell.textContent = args.data.price + \" \" + args.data.priceUnitName;\r\n                }\r\n                if (args.column.headerText === 'Log Time') {\r\n                    args.cell.textContent = this.convertUTCDateToLocalTime(args.data['ticketLogDate']);\r\n                }\r\n\r\n            },\r\n            excelQueryCellInfo: function (args) {\r\n                //if (args.column.field === 'lockedVolume') {\r\n                //    args.value = args.value + \" \" + args.data.volumeUnitName;\r\n                //}\r\n                if (args.column.field === 'volumeHedgedPercentage') {\r\n                    args.value = args.value + \"%\";\r\n                }\r\n                if (args.column.field === 'price') {\r\n                    args.value = args.data.price + \" \" + args.data.priceUnitName;\r\n                }\r\n                if (args.column.headerText === 'Log Time') {\r\n                    args.value = this.convertUTCDateToLocalTime(args.data['ticketLogDate']);\r\n                }\r\n                if (args.column.headerText === 'Log Date') {\r\n                    args.value = this.convertUTCDateToLocaDate(args.data['ticketLogDate']);\r\n                }\r\n                if (args.column.headerText === 'Trade Date') {\r\n                    args.value = this.formatDate(args.data['tradeDate']);\r\n                }\r\n\r\n            },\r\n            convertUTCDateToLocalTime(dateString) {\r\n                const date = new Date(dateString)\r\n                var newDate = new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000);\r\n                return newDate.toLocaleTimeString();\r\n            },\r\n            convertUTCDateToLocaDate(dateString) {\r\n                const date = new Date(dateString)\r\n                var newDate = new Date(date.getTime() - date.getTimezoneOffset() * 60 * 1000);\r\n                return newDate.toLocaleDateString();\r\n            },\r\n            formatDate(dateString) {\r\n                const date = new Date(dateString)\r\n                return date.toLocaleDateString();\r\n            },\r\n            toolbarClick(args) {\r\n                gridOptions.excelExport(args, \"Trades Logs.xlsx\", this.$refs);\r\n            },\r\n            addHeaders: function (args) {\r\n                args.currentRequest.setRequestHeader('Authorization', `Bearer ${authToken.get()}`);\r\n            },\r\n            excelExportComplete(args) {\r\n                this.$refs.grid.hideSpinner();\r\n            }\r\n        },\r\n        provide: {\r\n            grid: [ Filter, Resize, ForeignKey, Toolbar, ExcelExport, Page ]\r\n        }\r\n    };\r\n</script>\r\n\r\n<style scoped>\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TicketsLogsReportTemplate.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TicketsLogsReportTemplate.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./TicketsLogsReportTemplate.vue?vue&type=template&id=ff147d1c&scoped=true\"\nimport script from \"./TicketsLogsReportTemplate.vue?vue&type=script&lang=js\"\nexport * from \"./TicketsLogsReportTemplate.vue?vue&type=script&lang=js\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"ff147d1c\",\n  null\n  \n)\n\nexport default component.exports","<template>\r\n    <div id=\"appContractReports\">\r\n        <div class=\"c-subheader\">\r\n            <h5 id=\"headerContract\"></h5>\r\n        </div>\r\n        <ejs-tab id=\"element\" :selectedItem=\"selectedItem\" ref=contractReportTabs>\r\n            <e-tabitems>\r\n                <e-tabitem :header='headerText0' :content='PositionReportTemplate'></e-tabitem>\r\n                <e-tabitem :header='headerText1' :content='M2MReportTemplate'></e-tabitem>\r\n                <e-tabitem :header='headerText9' :content='VolumeReportTemplate'></e-tabitem> \r\n                <e-tabitem :header='headerText3' :content='CostAndPricingReportTemplate'></e-tabitem>\r\n                <e-tabitem :header='headerText4' :content='ContractAlertsReportTemplate'></e-tabitem>\r\n                <e-tabitem :header='headerText5' :content='HedgingOverviewReportTemplate'></e-tabitem>\r\n                <e-tabitem :header='headerText6' :content='TicketsReportTemplate'></e-tabitem>\r\n                <e-tabitem :header='headerText8' :content='TicketsLogsReportTemplate'></e-tabitem>\r\n                <e-tabitem :header='headerText7' :content='hypotheticalTradesTemplate'></e-tabitem>\r\n            </e-tabitems>\r\n        </ejs-tab>\r\n        <!--<ejs-toast ref='toastrRef' id='contractToast' :position='position'></ejs-toast>-->\r\n    </div>\r\n</template>\r\n\r\n<script>\r\n    import Vue from 'vue';\r\n    import { TabPlugin } from '@syncfusion/ej2-vue-navigations';\r\n    import PositionReport from '@/views/templates/PositionReportTemplate.vue';\r\n    import M2MReportTemplate from '@/views/templates/M2MReportTemplate.vue';\r\n    import VolumeReportTemplate from '@/views/templates/VolumeReportTemplate.vue';\r\n    import CostAndPricingReportTemplate from '@/views/templates/CostAndPricingReportTemplate.vue';\r\n    import ContractAlertsReportTemplate from '@/views/templates/ContractAlertsReportTemplate.vue';\r\n    import TicketsReportTemplate from '@/views/templates/TicketsReportTemplate.vue';\r\n    import HedgingOverviewReportTemplate from '@/views/templates/HedgingOverviewReportTemplate.vue';\r\n    import HypotheticalTrades from '@/views/templates/HypotheticalTradeReportTemplate.vue';\r\n    import TicketsLogsReportTemplate from '@/views/templates/TicketsLogsReportTemplate.vue';\r\n    import urls from '../../common/urls';\r\n    import apis from '../../common/network';\r\n\r\n    Vue.use(TabPlugin);\r\n    export default {\r\n        name: 'ContractReportTabs',\r\n        created() {\r\n            this.$store.commit('setReportsContractId', this.$route.params.contractId);\r\n            this.fetchData(this.$route.params.contractId);\r\n            this.fetchContract(this.$route.params.contractId);\r\n\r\n        },\r\n        data: function () {\r\n            return {\r\n                headerText0: { text: 'Position Summary' },\r\n                headerText1: { text: 'M2M' },\r\n                headerText3: { text: 'Contract Performance' },\r\n                headerText5: { text: 'Hedging Overview' },\r\n                headerText6: { text: 'Trades' },\r\n                headerText7: { text: 'Hypothetical Trades' },\r\n                headerText8: { text: 'Trades Logs' },\r\n                headerText9: { text: 'Volume Report' },\r\n                position: { X: 'Right', Y: 'Bottom' },\r\n                propsData: null,\r\n                selectedItem: this.$route.params.callerTab == \"hypothetical\" ? 8 : this.$route.params.callerTab == \"Trades\"? 6: 0,\r\n                deadline: 0,\r\n                status: 0,\r\n                hit: 0,\r\n                AlertsCount:0,\r\n                PositionReportTemplate: function () {\r\n                    return {\r\n                        template: {\r\n                            extends: PositionReport\r\n                        }\r\n                    };\r\n                },\r\n                M2MReportTemplate: function () {\r\n                    return {\r\n                        template: {\r\n                            extends: M2MReportTemplate\r\n                        }\r\n                    }\r\n                },\r\n                VolumeReportTemplate: function () {\r\n                    return {\r\n                        template: {\r\n                            extends: VolumeReportTemplate\r\n                        }\r\n                    }\r\n                },\r\n                CostAndPricingReportTemplate: function () {\r\n                    return {\r\n                        template: {\r\n                            extends: CostAndPricingReportTemplate\r\n                        }\r\n                    }\r\n                },\r\n                ContractAlertsReportTemplate: function () {\r\n                    return {\r\n                        template: {\r\n                            extends: ContractAlertsReportTemplate\r\n                        }\r\n                    }\r\n                },\r\n                HedgingOverviewReportTemplate: function () {\r\n                    return {\r\n                        template: {\r\n                            extends: HedgingOverviewReportTemplate\r\n                        }\r\n                    }\r\n                },\r\n                TicketsReportTemplate: function () {\r\n                    return {\r\n                        template: {\r\n                            extends: TicketsReportTemplate\r\n                        }\r\n                    }\r\n                },\r\n                hypotheticalTradesTemplate: function () {\r\n                    return {\r\n                        template: {\r\n                            extends: HypotheticalTrades\r\n                        }\r\n                    }\r\n                },\r\n                TicketsLogsReportTemplate: function () {\r\n                    return {\r\n                        template: {\r\n                            extends: TicketsLogsReportTemplate\r\n                        }\r\n                    }\r\n                }\r\n            }\r\n        },\r\n        methods: {\r\n            fetchData(id) {\r\n                apis.protectedApi(`${urls.apiBaseUrl}TriggerAlert/GroupCounts?contractId=${id}`).then(it => {\r\n                    this.deadline = it.data.deadline;\r\n                    this.status = it.data.status;\r\n                    this.hit = it.data.hit;\r\n                    this.AlertsCount = this.hit + this.deadline + this.status;\r\n                }\r\n                ).catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        alert(\"Error: \" + message);\r\n                    }\r\n                );\r\n\r\n            },\r\n\r\n            fetchContract(id) {\r\n                apis.protectedApi.get(`contract/getContractName?contractId=${id}`)\r\n                    .then(response => {\r\n\r\n                        this.contractName = response.data.contractName;\r\n                        document.getElementById('headerContract').textContent = this.contractName;\r\n\r\n                    }).catch(response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        alert(\"Error: \" + message);\r\n                    }\r\n                 );\r\n            }\r\n        },\r\n        computed: {\r\n            headerText4() {\r\n                return { text: \"Alerts (\" + this.AlertsCount +\")\"};\r\n            },\r\n        },\r\n    }\r\n</script>\r\n\r\n<style scoped>\r\n</style>\r\n\r\n\r\n<style>\r\n    #headerContract {\r\n        color: #8a93a2;\r\n        margin-top: 10px;\r\n        margin-left: 11px;\r\n    }\r\n</style>","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContractReportTabs.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./ContractReportTabs.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./ContractReportTabs.vue?vue&type=template&id=5a4a3418&scoped=true\"\nimport script from \"./ContractReportTabs.vue?vue&type=script&lang=js\"\nexport * from \"./ContractReportTabs.vue?vue&type=script&lang=js\"\nimport style1 from \"./ContractReportTabs.vue?vue&type=style&index=1&id=5a4a3418&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  \"5a4a3418\",\n  null\n  \n)\n\nexport default component.exports","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { ChildProperty, extend, deleteObject, Property, addClass, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * @param {Object} props - Specifies the properties\n * @param {string[]} model - Specifies the model\n * @returns {Object} Component Model\n */\nexport function getModel(props, model) {\n    var obj = extend({}, props);\n    for (var _i = 0, _a = Object.keys(obj); _i < _a.length; _i++) {\n        var prop = _a[_i];\n        if ((model).indexOf(prop) < 0) {\n            deleteObject(obj, prop);\n        }\n    }\n    return obj;\n}\n/** @hidden\n * @param {HTMLElement} ul - Specifies the UL element\n * @param {number} keyCode - Specifies the keycode\n * @returns {void}\n */\nexport function upDownKeyHandler(ul, keyCode) {\n    var defaultIdx = keyCode === 40 ? 0 : ul.childElementCount - 1;\n    var liIdx = defaultIdx;\n    var li;\n    var selectedLi = ul.querySelector('.e-selected');\n    if (selectedLi) {\n        selectedLi.classList.remove('e-selected');\n    }\n    for (var i = 0, len = ul.children.length; i < len; i++) {\n        if (ul.children[i].classList.contains('e-focused')) {\n            li = ul.children[i];\n            liIdx = i;\n            li.classList.remove('e-focused');\n            if (keyCode === 40) {\n                liIdx++;\n            }\n            else {\n                liIdx--;\n            }\n            if (liIdx === (keyCode === 40 ? ul.childElementCount : -1)) {\n                liIdx = defaultIdx;\n            }\n        }\n    }\n    li = ul.children[liIdx];\n    liIdx = isValidLI(ul, li, liIdx, keyCode);\n    if (liIdx !== -1) {\n        addClass([ul.children[liIdx]], 'e-focused');\n        ul.children[liIdx].focus();\n    }\n}\n/**\n * Get Valid LI element\n *\n * @param {HTMLElement} ul - Specifies the UL element\n * @param {Element} li - Specifies the LI element\n * @param {number} index - Specifies the index\n * @param {number} keyCode - Specifies the keycode\n * @param {number} count - Specifies the count\n * @returns {number} - Index\n */\nfunction isValidLI(ul, li, index, keyCode, count) {\n    if (count === void 0) { count = 0; }\n    if (li.classList.contains('e-separator') || li.classList.contains('e-disabled')) {\n        if (index === (keyCode === 40 ? ul.childElementCount - 1 : 0)) {\n            index = keyCode === 40 ? 0 : ul.childElementCount - 1;\n        }\n        else {\n            if (keyCode === 40) {\n                index++;\n            }\n            else {\n                index--;\n            }\n        }\n    }\n    li = ul.children[index];\n    if (li.classList.contains('e-separator') || li.classList.contains('e-disabled')) {\n        count++;\n        if (count === ul.childElementCount) {\n            return index = -1;\n        }\n        index = isValidLI(ul, li, index, keyCode, count);\n    }\n    return index;\n}\n/** @hidden\n * @param {HTMLElement} popup - Specifies the popup element.\n * @returns {void}\n */\nexport function setBlankIconStyle(popup, blankIcon) {\n    var blankIconList = [].slice.call(popup.getElementsByClassName('e-blank-icon'));\n    if (blankIcon) {\n        var menuItem = [].slice.call(popup.getElementsByClassName('e-item'));\n        menuItem.forEach(function (li) {\n            if (li.style.paddingLeft || li.style.paddingRight) {\n                li.removeAttribute('style');\n            }\n        });\n    }\n    if (!blankIconList.length) {\n        return;\n    }\n    var iconLi = popup.querySelector('.e-item:not(.e-blank-icon):not(.e-separator)');\n    if (isNullOrUndefined(iconLi)) {\n        return;\n    }\n    if (iconLi.classList.contains('e-url')) {\n        iconLi = iconLi.querySelector('.e-menu-url');\n    }\n    var icon = iconLi.querySelector('.e-menu-icon');\n    var cssProp;\n    var enableRtl = popup.classList.contains('e-rtl');\n    if (enableRtl) {\n        cssProp = { padding: 'paddingRight', margin: 'marginLeft' };\n    }\n    else {\n        cssProp = { padding: 'paddingLeft', margin: 'marginRight' };\n    }\n    /* eslint-disable */\n    var size = parseInt(getComputedStyle(icon).fontSize, 10) + parseInt((enableRtl ? getComputedStyle(icon)[cssProp.margin] : getComputedStyle(icon)[cssProp.margin]), 10)\n        + parseInt(getComputedStyle(iconLi).paddingLeft, 10) + \"px\";\n    blankIconList.forEach(function (li) {\n        if (li.classList.contains('e-url')) {\n            li.querySelector('.e-menu-url').style[cssProp.padding] = size;\n        }\n        else {\n            li.style[cssProp.padding] = size;\n        }\n    });\n    /* eslint-enable */\n}\n/**\n * Defines the items of Split Button/DropDownButton.\n */\nvar Item = /** @class */ (function (_super) {\n    __extends(Item, _super);\n    function Item() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('')\n    ], Item.prototype, \"iconCss\", void 0);\n    __decorate([\n        Property('')\n    ], Item.prototype, \"id\", void 0);\n    __decorate([\n        Property(false)\n    ], Item.prototype, \"separator\", void 0);\n    __decorate([\n        Property('')\n    ], Item.prototype, \"text\", void 0);\n    __decorate([\n        Property('')\n    ], Item.prototype, \"url\", void 0);\n    __decorate([\n        Property(false)\n    ], Item.prototype, \"disabled\", void 0);\n    return Item;\n}(ChildProperty));\nexport { Item };\n","//! moment.js locale configuration\n//! locale : Slovak [sk]\n//! author : Martin Minka : https://github.com/k2s\n//! based on work of petrbela : https://github.com/petrbela\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months =\n            'január_február_marec_apríl_máj_jún_júl_august_september_október_november_december'.split(\n                '_'\n            ),\n        monthsShort = 'jan_feb_mar_apr_máj_jún_júl_aug_sep_okt_nov_dec'.split('_');\n    function plural(n) {\n        return n > 1 && n < 5;\n    }\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's': // a few seconds / in a few seconds / a few seconds ago\n                return withoutSuffix || isFuture ? 'pár sekúnd' : 'pár sekundami';\n            case 'ss': // 9 seconds / in 9 seconds / 9 seconds ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'sekundy' : 'sekúnd');\n                } else {\n                    return result + 'sekundami';\n                }\n            case 'm': // a minute / in a minute / a minute ago\n                return withoutSuffix ? 'minúta' : isFuture ? 'minútu' : 'minútou';\n            case 'mm': // 9 minutes / in 9 minutes / 9 minutes ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'minúty' : 'minút');\n                } else {\n                    return result + 'minútami';\n                }\n            case 'h': // an hour / in an hour / an hour ago\n                return withoutSuffix ? 'hodina' : isFuture ? 'hodinu' : 'hodinou';\n            case 'hh': // 9 hours / in 9 hours / 9 hours ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'hodiny' : 'hodín');\n                } else {\n                    return result + 'hodinami';\n                }\n            case 'd': // a day / in a day / a day ago\n                return withoutSuffix || isFuture ? 'deň' : 'dňom';\n            case 'dd': // 9 days / in 9 days / 9 days ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'dni' : 'dní');\n                } else {\n                    return result + 'dňami';\n                }\n            case 'M': // a month / in a month / a month ago\n                return withoutSuffix || isFuture ? 'mesiac' : 'mesiacom';\n            case 'MM': // 9 months / in 9 months / 9 months ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'mesiace' : 'mesiacov');\n                } else {\n                    return result + 'mesiacmi';\n                }\n            case 'y': // a year / in a year / a year ago\n                return withoutSuffix || isFuture ? 'rok' : 'rokom';\n            case 'yy': // 9 years / in 9 years / 9 years ago\n                if (withoutSuffix || isFuture) {\n                    return result + (plural(number) ? 'roky' : 'rokov');\n                } else {\n                    return result + 'rokmi';\n                }\n        }\n    }\n\n    var sk = moment.defineLocale('sk', {\n        months: months,\n        monthsShort: monthsShort,\n        weekdays: 'nedeľa_pondelok_utorok_streda_štvrtok_piatok_sobota'.split('_'),\n        weekdaysShort: 'ne_po_ut_st_št_pi_so'.split('_'),\n        weekdaysMin: 'ne_po_ut_st_št_pi_so'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[dnes o] LT',\n            nextDay: '[zajtra o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[v] dddd [o] LT';\n                    case 3:\n                        return '[v stredu o] LT';\n                    case 4:\n                        return '[vo štvrtok o] LT';\n                    case 5:\n                        return '[v piatok o] LT';\n                    case 6:\n                        return '[v sobotu o] LT';\n                }\n            },\n            lastDay: '[včera o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[minulú nedeľu o] LT';\n                    case 1:\n                    case 2:\n                        return '[minulý] dddd [o] LT';\n                    case 3:\n                        return '[minulú stredu o] LT';\n                    case 4:\n                    case 5:\n                        return '[minulý] dddd [o] LT';\n                    case 6:\n                        return '[minulú sobotu o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pred %s',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sk;\n\n})));\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Internationalization, setCulture } from '@syncfusion/ej2-base';\n/**\n * ValueFormatter class to globalize the value.\n *\n * @hidden\n */\nvar ValueFormatter = /** @class */ (function () {\n    function ValueFormatter(cultureName) {\n        this.intl = new Internationalization();\n        if (!isNullOrUndefined(cultureName)) {\n            this.intl.culture = cultureName;\n        }\n    }\n    ValueFormatter.prototype.getFormatFunction = function (format) {\n        if (format.type) {\n            return this.intl.getDateFormat(format);\n        }\n        else {\n            return this.intl.getNumberFormat(format);\n        }\n    };\n    ValueFormatter.prototype.getParserFunction = function (format) {\n        if (format.type) {\n            return this.intl.getDateParser(format);\n        }\n        else {\n            return this.intl.getNumberParser(format);\n        }\n    };\n    ValueFormatter.prototype.fromView = function (value, format, type) {\n        if ((type === 'date' || type === 'datetime' || type === 'number') && (!isNullOrUndefined(format))) {\n            return format(value);\n        }\n        else {\n            return value;\n        }\n    };\n    ValueFormatter.prototype.toView = function (value, format) {\n        var result = value;\n        if (!isNullOrUndefined(format) && !isNullOrUndefined(value)) {\n            result = format(value);\n        }\n        return result;\n    };\n    ValueFormatter.prototype.setCulture = function (cultureName) {\n        if (!isNullOrUndefined(cultureName)) {\n            setCulture(cultureName);\n        }\n    };\n    return ValueFormatter;\n}());\nexport { ValueFormatter };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { isNullOrUndefined, getValue, closest } from '@syncfusion/ej2-base';\nimport { attributes } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { appendChildren, addStickyColumnPosition } from '../base/util';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport * as events from '../base/constant';\n/**\n * FilterCellRenderer class which responsible for building filter cell.\n *\n * @hidden\n */\nvar FilterCellRenderer = /** @class */ (function (_super) {\n    __extends(FilterCellRenderer, _super);\n    function FilterCellRenderer() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.element = _this.parent.createElement('TH', { className: 'e-filterbarcell', attrs: { role: 'columnheader' } });\n        return _this;\n    }\n    /**\n     * Function to return the wrapper for the TH content.\n     *\n     * @returns {string} returns the gui\n     */\n    FilterCellRenderer.prototype.getGui = function () {\n        return this.parent.createElement('div');\n    };\n    /**\n     * Function to render the cell content based on Column object.\n     *\n     * @param  {Cell} cell\n     * @param  {Object} data\n     */\n    /* tslint:disable-next-line:max-func-body-length */\n    FilterCellRenderer.prototype.render = function (cell, data) {\n        var tr = this.parent.element.querySelector('.e-filterbar');\n        var node = this.element.cloneNode();\n        var innerDIV = this.getGui();\n        var input;\n        var column = cell.column;\n        tr.appendChild(node);\n        node.setAttribute('e-mappinguid', column.uid);\n        if (column.filterTemplate) {\n            var fltrData = {};\n            if (data) {\n                fltrData[column.field] = data[column.field];\n            }\n            var col = 'column';\n            fltrData[\"\" + col] = column;\n            if (column.visible) {\n                var isReactCompiler = this.parent.isReact && typeof (column.filterTemplate) !== 'string';\n                var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n                    this.parent.parentDetails.parentInstObj.isReact;\n                var tempID = this.parent.element.id + column.uid + 'filterTemplate';\n                if (isReactCompiler || isReactChild) {\n                    column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate', tempID, null, null, node);\n                    this.parent.renderTemplates();\n                }\n                else {\n                    var element = column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate', tempID);\n                    appendChildren(node, element);\n                }\n            }\n            else {\n                node.classList.add('e-hide');\n            }\n        }\n        else {\n            if (column.type !== 'checkbox') {\n                if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n                    node.classList.add('e-fltrtemp');\n                    attributes(innerDIV, {\n                        'class': 'e-fltrtempdiv'\n                    });\n                    if (isNullOrUndefined(column.filterBarTemplate.create)) {\n                        input = this.parent.createElement('input', {\n                            id: column.field + '_filterBarcell', className: 'e-filterUi_input e-filtertext e-fltrTemp',\n                            attrs: { type: 'search', title: column.headerText }\n                        });\n                        innerDIV.appendChild(input);\n                    }\n                    else {\n                        var args = { column: column, node: Element };\n                        var temp = column.filterBarTemplate.create;\n                        if (typeof temp === 'string') {\n                            temp = getValue(temp, window);\n                        }\n                        input = temp(args);\n                        if (typeof input === 'string') {\n                            var div = this.parent.createElement('div');\n                            div.innerHTML = input;\n                            input = div.firstChild;\n                        }\n                        attributes(innerDIV, {\n                            class: 'e-filterUi_input e-filtertext e-fltrTemp',\n                            title: column.headerText,\n                            id: column.field + '_filterBarcell'\n                        });\n                        innerDIV.appendChild(input);\n                    }\n                }\n                else {\n                    attributes(innerDIV, {\n                        'class': 'e-filterdiv e-fltrinputdiv'\n                    });\n                    input = this.parent.createElement('input', {\n                        id: column.field + '_filterBarcell', className: 'e-filtertext',\n                        attrs: {\n                            type: 'search', title: column.headerText + cell.attributes.title,\n                            value: data[cell.column.field] ? data[cell.column.field] : ''\n                        }\n                    });\n                    innerDIV.appendChild(input);\n                    var args = {\n                        element: input, floatLabelType: 'Never',\n                        properties: {\n                            enableRtl: this.parent.enableRtl, showClearButton: true, cssClass: this.parent.cssClass\n                        }\n                    };\n                    Input.createInput(args, this.parent.createElement);\n                }\n                //TODO: apply intial filtering\n                if (column.allowFiltering === false || column.field === '' || isNullOrUndefined(column.field)) {\n                    input.setAttribute('disabled', 'true');\n                    input.classList.add('e-disable');\n                }\n                var clearIconElem = innerDIV.querySelector('.e-clear-icon');\n                if (clearIconElem) {\n                    clearIconElem.setAttribute('title', this.parent.localeObj.getConstant('ClearButton'));\n                }\n                if (!column.visible) {\n                    node.classList.add('e-hide');\n                }\n                this.appendHtml(node, innerDIV);\n                // render's the dropdownlist component if showFilterBarOperator sets to true\n                if (this.parent.filterSettings.showFilterBarOperator && this.parent.filterSettings.type === 'FilterBar' &&\n                    !this.parent.isPrinting && isNullOrUndefined(column.filterTemplate) && isNullOrUndefined(column.filterBarTemplate)) {\n                    this.operatorIconRender(innerDIV, column, cell);\n                }\n                if ((isNullOrUndefined(column.allowFiltering) || column.allowFiltering) && !isNullOrUndefined(column.filterBarTemplate)) {\n                    var templateWrite = column.filterBarTemplate.write;\n                    var args = { element: input, column: column };\n                    if (typeof templateWrite === 'string') {\n                        templateWrite = getValue(templateWrite, window);\n                    }\n                    templateWrite.call(this, args);\n                }\n            }\n        }\n        if (this.parent.isFrozenGrid()) {\n            addStickyColumnPosition(this.parent, column, node);\n        }\n        return node;\n    };\n    /**\n     * Function to specifies how the result content to be placed in the cell.\n     *\n     * @param {Element} node - specifies the node\n     * @param {string|Element} innerHtml - specifies the innerHTML\n     * @returns {Element} retruns the element\n     */\n    FilterCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n        node.appendChild(innerHtml);\n        return node;\n    };\n    FilterCellRenderer.prototype.operatorIconRender = function (innerDIV, column, cell) {\n        var gObj = this.parent;\n        var operators;\n        var fbicon = this.parent.createElement('input', {\n            className: ' e-filterbaroperator e-icons e-icon-filter',\n            id: cell.column.uid\n        });\n        innerDIV.querySelector('span').appendChild(fbicon);\n        if (column.filter && column.filter.operator) {\n            operators = column.filter.operator;\n        }\n        else if (gObj.filterSettings.columns.length) {\n            for (var i = 0, a = gObj.filterSettings.columns; i < a.length; i++) {\n                var col = a[parseInt(i.toString(), 10)];\n                if (col.field === column.field) {\n                    operators = col.operator;\n                    break;\n                }\n                else {\n                    operators = 'equal';\n                }\n            }\n        }\n        else {\n            operators = 'equal';\n        }\n        if (!isNullOrUndefined(gObj.filterModule.operators[column.field])) {\n            operators = gObj.filterModule.operators[column.field];\n        }\n        this.dropOptr = new DropDownList({\n            fields: { text: 'text', value: 'value' },\n            popupHeight: 'auto',\n            value: operators,\n            width: '0px',\n            enabled: column.allowFiltering,\n            popupWidth: 'auto',\n            enableRtl: this.parent.enableRtl,\n            change: this.internalEvent.bind(this),\n            beforeOpen: function () {\n                var operator = gObj.filterModule.customOperators;\n                this.dataSource = operator[gObj.getColumnByUid(this.element.id).type + 'Operator'];\n                for (var i = 0; i < this.dataSource.length; i++) {\n                    if (column.filter && column.filter.operator && isNullOrUndefined(gObj.filterModule.operators[column.field]) &&\n                        this.dataSource[parseInt(i.toString(), 10)].value === column.filter.operator) {\n                        this.value = column.filter.operator;\n                    }\n                }\n            },\n            cssClass: this.parent.cssClass ? 'e-popup-flbar' + ' ' + this.parent.cssClass : 'e-popup-flbar'\n        });\n        this.dropOptr.appendTo(fbicon);\n        var spanElmt = closest(this.dropOptr.element, 'span');\n        spanElmt.classList.add('e-filterbardropdown');\n        spanElmt.removeAttribute('tabindex');\n    };\n    FilterCellRenderer.prototype.internalEvent = function (e) {\n        var gObj = this.parent;\n        var col = gObj.getColumnByUid(e.element.getAttribute('id'));\n        e.column = col;\n        gObj.filterModule.operators[col.field] = e.value;\n        gObj.notify(events.getFilterBarOperator, e);\n    };\n    return FilterCellRenderer;\n}(CellRenderer));\nexport { FilterCellRenderer };\n","import { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * `filter operators` render boolean column.\n *\n * @hidden\n */\nvar FlMenuOptrUI = /** @class */ (function () {\n    function FlMenuOptrUI(parent, customFltrOperators, serviceLocator, filterSettings) {\n        this.ddOpen = this.dropDownOpen.bind(this);\n        this.parent = parent;\n        this.serviceLocator = serviceLocator;\n        this.filterSettings = filterSettings;\n        this.customFilterOperators = customFltrOperators;\n        if (this.parent) {\n            this.parent.on(events.filterMenuClose, this.destroyDropDownList, this);\n            this.parent.on(events.destroy, this.destroyDropDownList, this);\n        }\n    }\n    /**\n     * @param {Element} dlgConetntEle - specifies the content element\n     * @param {Element} target - specifies the target\n     * @param {Column} column - specifies the column\n     * @param {Dialog} dlgObj - specifies the dialog\n     * @param {Object[]} operator - specifies the operator list\n     * @returns {void}\n     * @hidden\n     */\n    // eslint-disable-next-line max-len\n    FlMenuOptrUI.prototype.renderOperatorUI = function (dlgConetntEle, target, column, dlgObj, operator) {\n        this.dialogObj = dlgObj;\n        var optr = column.type + 'Operator';\n        this.optrData = this.customOptr = !isNullOrUndefined(operator) ? operator :\n            (!isNullOrUndefined(this.parent.filterSettings.operators) && !isNullOrUndefined(this.parent.filterSettings.operators[\"\" + optr])) ?\n                this.parent.filterSettings.operators[\"\" + optr] : this.customFilterOperators[\"\" + optr];\n        var dropDatasource = this.customOptr;\n        var selectedValue = this.dropSelectedVal(column, optr);\n        var optrDiv = this.parent.createElement('div', { className: 'e-flm_optrdiv' });\n        dlgConetntEle.appendChild(optrDiv);\n        var optrInput = this.parent.createElement('input', { id: column.uid + '-floptr' });\n        optrDiv.appendChild(optrInput);\n        this.dropOptr = new DropDownList({\n            dataSource: dropDatasource,\n            fields: { text: 'text', value: 'value' },\n            cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n            enableRtl: this.parent.enableRtl,\n            text: selectedValue,\n            // eslint-disable-next-line @typescript-eslint/tslint/config\n            change: function () {\n                var valInput = document.querySelector('.e-flmenu-valuediv').querySelector('input');\n                if (this.value === 'isempty' || this.value === 'isnotempty' ||\n                    this.value === 'isnull' || this.value === 'isnotnull') {\n                    valInput['ej2_instances'][0]['enabled'] = false;\n                }\n                else if (!isNullOrUndefined(valInput.getAttribute('disabled'))) {\n                    valInput['ej2_instances'][0]['enabled'] = true;\n                }\n            }\n        });\n        this.dropOptr.addEventListener(literals['open'], this.ddOpen);\n        this.dropOptr.appendTo('#' + column.uid + '-floptr');\n    };\n    FlMenuOptrUI.prototype.renderResponsiveDropDownList = function (args) {\n        args.popup.element.style.width = '100%';\n    };\n    FlMenuOptrUI.prototype.dropDownOpen = function (args) {\n        args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n        if (this.parent.enableAdaptiveUI) {\n            this.renderResponsiveDropDownList(args);\n        }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    FlMenuOptrUI.prototype.dropSelectedVal = function (col, optr) {\n        var selValue = '';\n        var columns = this.parent.filterSettings.columns;\n        for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n            var column = columns_1[_i];\n            if (col.field === column.field || (col.isForeignColumn() && col.foreignKeyValue === column.field)) {\n                var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', column.operator));\n                selValue = !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n            }\n        }\n        if (selValue === '') { // rewuired or not\n            if (col.filter.operator) {\n                var optrLen = Object.keys(this.optrData).length;\n                for (var i = 0; i < optrLen; i++) {\n                    if (this.optrData[parseInt(i.toString(), 10)].value === col.filter.operator) {\n                        selValue = this.optrData[parseInt(i.toString(), 10)].text;\n                    }\n                }\n            }\n            else {\n                selValue = this.optrData[0].text;\n            }\n        }\n        return selValue;\n    };\n    /**\n     * @returns {string} returns the operator\n     * @hidden\n     */\n    FlMenuOptrUI.prototype.getFlOperator = function () {\n        return this.dropOptr.value;\n    };\n    FlMenuOptrUI.prototype.destroyDropDownList = function () {\n        if (this.dropOptr.isDestroyed) {\n            return;\n        }\n        this.dropOptr.removeEventListener(literals['open'], this.ddOpen);\n        this.dropOptr.destroy();\n        this.parent.off(events.filterMenuClose, this.destroyDropDownList);\n        this.parent.off(events.destroy, this.destroyDropDownList);\n    };\n    return FlMenuOptrUI;\n}());\nexport { FlMenuOptrUI };\n","import { AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { DataManager, Query, Predicate } from '@syncfusion/ej2-data';\nimport { Browser, isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\nimport { getZIndexCalcualtion, eventPromise } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\n/**\n * `string filterui` render string column.\n *\n * @hidden\n */\nvar StringFilterUI = /** @class */ (function () {\n    function StringFilterUI(parent, serviceLocator, filterSettings) {\n        this.parent = parent;\n        this.serLocator = serviceLocator;\n        this.filterSettings = filterSettings;\n        if (this.parent) {\n            this.parent.on(events.filterMenuClose, this.destroy, this);\n            this.parent.on(events.destroy, this.destroy, this);\n        }\n    }\n    StringFilterUI.prototype.create = function (args) {\n        this.instance = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'strui-' + args.column.uid });\n        args.target.appendChild(this.instance);\n        this.dialogObj = args.dialogObj;\n        this.processDataOperation(args);\n    };\n    StringFilterUI.prototype.processDataOperation = function (args) {\n        var _this = this;\n        if (args.column.isForeignColumn()) {\n            this.parent.getDataModule().dataManager.executeQuery(this.parent.getDataModule().generateQuery(true))\n                .then(function (result) { _this.getAutoCompleteOptions(args, result); });\n            return;\n        }\n        this.getAutoCompleteOptions(args);\n    };\n    StringFilterUI.prototype.getAutoCompleteOptions = function (args, result) {\n        var isForeignColumn = args.column.isForeignColumn();\n        var foreignColumnQuery;\n        if (isForeignColumn) {\n            var filteredData = CheckBoxFilterBase.getDistinct(result.result, args.column.field)\n                .records || [];\n            var filterQuery = void 0;\n            for (var i = 0; i < filteredData.length; i++) {\n                if (filterQuery) {\n                    filterQuery = filterQuery.or(args.column.field, 'contains', filteredData[parseInt(i.toString(), 10)][args.column.field], this.parent\n                        .filterSettings.enableCaseSensitivity, this.parent.filterSettings.ignoreAccent);\n                }\n                else {\n                    filterQuery = new Predicate(args.column.field, 'contains', filteredData[parseInt(i.toString(), 10)][args.column.field], this.parent\n                        .filterSettings.enableCaseSensitivity, this.parent.filterSettings.ignoreAccent);\n                }\n            }\n            foreignColumnQuery = new Query().where(filterQuery);\n            foreignColumnQuery.params = this.parent.query.params;\n        }\n        var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n        var fields = { value: isForeignColumn ? args.column.foreignKeyValue : args.column.field };\n        var autoComplete = new AutoComplete(extend({\n            dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n            fields: fields,\n            locale: this.parent.locale,\n            enableRtl: this.parent.enableRtl,\n            query: isForeignColumn ? foreignColumnQuery : this.parent.getDataModule().generateQuery(true, true),\n            sortOrder: 'Ascending',\n            cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n            autofill: true,\n            placeholder: args.localizeText.getConstant('EnterValue'),\n            actionBegin: function () {\n                if (this.query.queries.length && this.query.queries[0].fn === 'onWhere' && this.query.queries[0].e\n                    && this.query.queries[0].e.predicates) {\n                    for (var i = 0; i < this.query.queries[0].e.predicates.length; i++) {\n                        if (this.properties.fields.value === this.query.queries[0].e.predicates[\"\" + i].field) {\n                            this.query.queries[0].e.predicates.splice(i, 1);\n                            i = i - 1;\n                        }\n                    }\n                    if (!this.query.queries[0].e.predicates.length) {\n                        this.query.queries.splice(0, 1);\n                    }\n                }\n            }\n        }, args.column.filter.params));\n        this.acFocus = this.focus(autoComplete, args);\n        this.acComplete = this.actionComplete(autoComplete);\n        this.acOpen = this.openPopup.bind(this);\n        autoComplete.addEventListener(literals.focus, this.acFocus);\n        autoComplete.addEventListener(literals['open'], this.acOpen);\n        autoComplete.addEventListener(events.actionComplete, this.acComplete);\n        if (dataSource && 'result' in dataSource) {\n            var query = this.parent.getQuery ? this.parent.getQuery().clone() : new Query();\n            var defObj = eventPromise({ requestType: 'stringfilterrequest' }, query);\n            this.parent.trigger(events.dataStateChange, defObj.state);\n            var def = defObj.deffered;\n            def.promise.then(function (e) {\n                autoComplete.dataSource = new DataManager(e);\n            });\n        }\n        this.actObj = autoComplete;\n        this.actObj.appendTo(this.instance);\n        if (isForeignColumn) {\n            this.parent.filterModule.filterModule.afterRenderFilterUI();\n        }\n    };\n    StringFilterUI.prototype.write = function (args) {\n        if (args.filteredValue !== '' && !isNullOrUndefined(args.filteredValue)) {\n            var struiObj = document.querySelector('#strui-' + args.column.uid).ej2_instances[0];\n            struiObj.value = args.filteredValue;\n        }\n    };\n    StringFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n        var actuiObj = document.querySelector('#strui-' + column.uid).ej2_instances[0];\n        if (Browser.isDevice) {\n            actuiObj.hidePopup();\n            actuiObj.focusOut();\n        }\n        var filterValue = actuiObj.value;\n        if (isNullOrUndefined(filterValue) || filterValue === '') {\n            filterValue = null;\n        }\n        filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', this.parent.filterSettings.enableCaseSensitivity);\n    };\n    StringFilterUI.prototype.openPopup = function (args) {\n        getZIndexCalcualtion(args, this.dialogObj);\n    };\n    StringFilterUI.prototype.focus = function (actObj, args) {\n        return function () {\n            actObj.filterType = args.getOptrInstance.getFlOperator();\n        };\n    };\n    StringFilterUI.prototype.actionComplete = function (actObj) {\n        return function (e) {\n            e.result = e.result.filter(function (obj, index, arr) {\n                return arr.map(function (mapObj) {\n                    return (getValue(actObj.fields.value, mapObj));\n                }).indexOf(getValue((actObj.fields.value), obj)) === index;\n            });\n        };\n    };\n    StringFilterUI.prototype.destroy = function () {\n        if (!this.actObj || this.actObj.isDestroyed) {\n            return;\n        }\n        this.actObj.removeEventListener(literals.focus, this.acFocus);\n        this.actObj.removeEventListener(literals['open'], this.acOpen);\n        this.actObj.removeEventListener(events.actionComplete, this.acComplete);\n        this.actObj.destroy();\n        this.parent.off(events.filterMenuClose, this.destroy);\n        this.parent.off(events.destroy, this.destroy);\n    };\n    return StringFilterUI;\n}());\nexport { StringFilterUI };\n","import { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { extend, isUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\n/**\n * `numberfilterui` render number column.\n *\n * @hidden\n */\nvar NumberFilterUI = /** @class */ (function () {\n    function NumberFilterUI(parent, serviceLocator, filterSettings) {\n        this.filterSettings = filterSettings;\n        this.parent = parent;\n        this.serviceLocator = serviceLocator;\n        if (this.parent) {\n            this.parent.on(events.filterMenuClose, this.destroy, this);\n            this.parent.on(events.destroy, this.destroy, this);\n        }\n    }\n    NumberFilterUI.prototype.keyEventHandler = function (args) {\n        if (args.keyCode === 13 || args.keyCode === 9) {\n            var evt = document.createEvent('HTMLEvents');\n            evt.initEvent('change', false, true);\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            this.dispatchEvent(evt);\n        }\n    };\n    NumberFilterUI.prototype.create = function (args) {\n        this.instance = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'numberui-' + args.column.uid });\n        args.target.appendChild(this.instance);\n        this.numericTxtObj = new NumericTextBox(extend({\n            format: typeof (args.column.format) === 'string' || isUndefined(args.column.format) ? args.column.format :\n                args.column.format.format,\n            locale: this.parent.locale,\n            cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n            placeholder: args.localizeText.getConstant('EnterValue'),\n            enableRtl: this.parent.enableRtl\n        }, args.column.filter.params));\n        this.numericTxtObj.appendTo(this.instance);\n    };\n    NumberFilterUI.prototype.write = function (args) {\n        var numberuiObj = document.querySelector('#numberui-' + args.column.uid).ej2_instances[0];\n        numberuiObj.element.addEventListener('keydown', this.keyEventHandler);\n        numberuiObj.value = args.filteredValue;\n    };\n    NumberFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n        var numberuiObj = document.querySelector('#numberui-' + column.uid).ej2_instances[0];\n        var filterValue = numberuiObj.value;\n        filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n    };\n    NumberFilterUI.prototype.destroy = function () {\n        if (!this.numericTxtObj || this.numericTxtObj.isDestroyed) {\n            return;\n        }\n        this.numericTxtObj.destroy();\n        this.parent.off(events.filterMenuClose, this.destroy);\n        this.parent.off(events.destroy, this.destroy);\n    };\n    return NumberFilterUI;\n}());\nexport { NumberFilterUI };\n","import { getZIndexCalcualtion } from '../base/util';\nimport { Query, DataManager, DataUtil } from '@syncfusion/ej2-data';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * `boolfilterui` render boolean column.\n *\n * @hidden\n */\nvar BooleanFilterUI = /** @class */ (function () {\n    function BooleanFilterUI(parent, serviceLocator, filterSettings) {\n        this.parent = parent;\n        this.serviceLocator = serviceLocator;\n        this.filterSettings = filterSettings;\n        if (this.parent) {\n            this.parent.on(events.filterMenuClose, this.destroy, this);\n            this.parent.on(events.destroy, this.destroy, this);\n        }\n    }\n    BooleanFilterUI.prototype.create = function (args) {\n        var isForeignColumn = args.column.isForeignColumn();\n        var dataSource = isForeignColumn ? args.column.dataSource : this.parent.dataSource;\n        var fields = isForeignColumn ? args.column.foreignKeyValue : args.column.field;\n        this.elem = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'bool-ui-' + args.column.uid });\n        args.target.appendChild(this.elem);\n        this.dialogObj = args.dialogObj;\n        this.dropInstance = new DropDownList(extend({\n            dataSource: dataSource instanceof DataManager ?\n                dataSource : new DataManager(dataSource),\n            query: new Query().select(fields),\n            fields: { text: fields, value: fields },\n            placeholder: args.localizeText.getConstant('SelectValue'),\n            cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n            locale: this.parent.locale,\n            enableRtl: this.parent.enableRtl\n        }, args.column.filter.params));\n        this.ddOpen = this.openPopup.bind(this);\n        this.ddComplete = this.actionComplete(fields);\n        this.dropInstance.addEventListener(literals['open'], this.ddOpen);\n        this.dropInstance.addEventListener(events.actionComplete, this.ddComplete);\n        this.dropInstance.appendTo(this.elem);\n    };\n    BooleanFilterUI.prototype.write = function (args) {\n        var drpuiObj = document.querySelector('#bool-ui-' + args.column.uid).ej2_instances[0];\n        if (!isNullOrUndefined(args.filteredValue)) {\n            drpuiObj.value = args.filteredValue;\n        }\n    };\n    BooleanFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n        var drpuiObj = document.querySelector('#bool-ui-' + column.uid).ej2_instances[0];\n        var filterValue = drpuiObj.value;\n        filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', false);\n    };\n    BooleanFilterUI.prototype.openPopup = function (args) {\n        getZIndexCalcualtion(args, this.dialogObj);\n    };\n    BooleanFilterUI.prototype.actionComplete = function (fields) {\n        return function (e) {\n            e.result = DataUtil.distinct(e.result, fields, true);\n        };\n    };\n    BooleanFilterUI.prototype.destroy = function () {\n        if (!this.dropInstance || this.dropInstance.isDestroyed) {\n            return;\n        }\n        this.dropInstance.removeEventListener(literals['open'], this.ddOpen);\n        this.dropInstance.removeEventListener(events.actionComplete, this.ddComplete);\n        this.dropInstance.destroy();\n        this.parent.off(events.filterMenuClose, this.destroy);\n        this.parent.off(events.destroy, this.destroy);\n    };\n    return BooleanFilterUI;\n}());\nexport { BooleanFilterUI };\n","import { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { getCustomDateFormat } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * `datefilterui` render date column.\n *\n * @hidden\n */\nvar DateFilterUI = /** @class */ (function () {\n    function DateFilterUI(parent, serviceLocator, filterSettings) {\n        this.dpOpen = this.openPopup.bind(this);\n        this.parent = parent;\n        this.locator = serviceLocator;\n        this.fltrSettings = filterSettings;\n        if (this.parent) {\n            this.parent.on(events.filterMenuClose, this.destroy, this);\n            this.parent.on(events.destroy, this.destroy, this);\n        }\n    }\n    DateFilterUI.prototype.create = function (args) {\n        var format = getCustomDateFormat(args.column.format, args.column.type);\n        this.dialogObj = args.dialogObj;\n        this.inputElem = this.parent.createElement('input', { className: 'e-flmenu-input', id: 'dateui-' + args.column.uid });\n        args.target.appendChild(this.inputElem);\n        if (args.column.type === 'date' || args.column.type === 'dateonly') {\n            this.datePickerObj = new DatePicker(extend({\n                format: format,\n                cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n                placeholder: args.localizeText.getConstant('ChooseDate'),\n                width: '100%',\n                locale: this.parent.locale,\n                enableRtl: this.parent.enableRtl\n            }, args.column.filter.params));\n        }\n        else if (args.column.type === 'datetime') {\n            this.datePickerObj = new DateTimePicker(extend({\n                format: format,\n                cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n                placeholder: args.localizeText.getConstant('ChooseDate'),\n                width: '100%',\n                locale: this.parent.locale,\n                enableRtl: this.parent.enableRtl\n            }, args.column.filter.params));\n        }\n        this.datePickerObj.addEventListener(literals['open'], this.dpOpen);\n        this.datePickerObj.appendTo(this.inputElem);\n    };\n    DateFilterUI.prototype.write = function (args) {\n        var dateuiObj = document.querySelector('#dateui-' + args.column.uid).ej2_instances[0];\n        dateuiObj.value = !isNullOrUndefined(args.filteredValue) ? new Date(args.filteredValue) : null;\n    };\n    DateFilterUI.prototype.read = function (element, column, filterOptr, filterObj) {\n        var dateuiObj = document.querySelector('#dateui-' + column.uid).ej2_instances[0];\n        var filterValue = dateuiObj.value;\n        filterValue = isNullOrUndefined(filterValue) ? null : filterValue;\n        filterObj.filterByColumn(column.field, filterOptr, filterValue, 'and', true);\n    };\n    DateFilterUI.prototype.openPopup = function (args) {\n        args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n    };\n    DateFilterUI.prototype.destroy = function () {\n        this.parent.off(events.filterMenuClose, this.destroy);\n        this.parent.off(events.destroy, this.destroy);\n        if (isNullOrUndefined(this.datePickerObj) || this.datePickerObj.isDestroyed) {\n            return;\n        }\n        this.datePickerObj.removeEventListener(literals['open'], this.dpOpen);\n        this.datePickerObj.destroy();\n    };\n    return DateFilterUI;\n}());\nexport { DateFilterUI };\n","import { isNullOrUndefined, getValue, remove } from '@syncfusion/ej2-base';\nimport { Browser } from '@syncfusion/ej2-base';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { FlMenuOptrUI } from './filter-menu-operator';\nimport { StringFilterUI } from './string-filter-ui';\nimport { NumberFilterUI } from './number-filter-ui';\nimport { BooleanFilterUI } from './boolean-filter-ui';\nimport { DateFilterUI } from './date-filter-ui';\nimport { getFilterMenuPostion, parentsUntil, appendChildren, clearReactVueTemplates } from '../base/util';\nimport * as events from '../base/constant';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\n/**\n * `filter menu` render boolean column.\n *\n * @hidden\n */\nvar FilterMenuRenderer = /** @class */ (function () {\n    function FilterMenuRenderer(parent, filterSettings, serviceLocator, customFltrOperators, fltrObj) {\n        this.isDialogOpen = false;\n        this.maxHeight = '350px';\n        this.isMenuCheck = false;\n        this.colTypes = {\n            'string': StringFilterUI, 'number': NumberFilterUI, 'date': DateFilterUI, 'dateonly': DateFilterUI, 'boolean': BooleanFilterUI, 'datetime': DateFilterUI\n        };\n        this.parent = parent;\n        this.filterSettings = filterSettings;\n        this.serviceLocator = serviceLocator;\n        this.customFilterOperators = customFltrOperators;\n        this.filterObj = fltrObj;\n        this.flMuiObj = new FlMenuOptrUI(this.parent, this.customFilterOperators, this.serviceLocator);\n        this.l10n = this.serviceLocator.getService('localization');\n        this.menuFilterBase = new CheckBoxFilterBase(parent);\n    }\n    FilterMenuRenderer.prototype.clearCustomFilter = function (col) {\n        this.clearBtnClick(col);\n    };\n    FilterMenuRenderer.prototype.applyCustomFilter = function (args) {\n        this.filterBtnClick(args.col);\n    };\n    FilterMenuRenderer.prototype.openDialog = function (args) {\n        this.options = args;\n        this.col = this.parent.getColumnByField(args.field);\n        if (isNullOrUndefined(this.col.filter) || (isNullOrUndefined(this.col.filter.type) || this.col.filter.type === 'Menu')) { ///\n            this.renderDlgContent(args.target, this.col);\n        }\n    };\n    FilterMenuRenderer.prototype.closeDialog = function (target) {\n        if (!this.dlgObj) {\n            return;\n        }\n        if (this.parent.isReact || this.parent.isVue) {\n            clearReactVueTemplates(this.parent, ['filterTemplate']);\n        }\n        var elem = document.getElementById(this.dlgObj.element.id);\n        if (this.dlgObj && !this.dlgObj.isDestroyed && elem) {\n            var argument = { cancel: false, column: this.col, target: target, element: elem };\n            this.parent.notify(events.filterMenuClose, argument);\n            if (argument.cancel) {\n                return;\n            }\n            this.isDialogOpen = false;\n            if (this.isMenuCheck) {\n                this.menuFilterBase.unWireEvents();\n                this.parent.off(events.cBoxFltrComplete, this.actionComplete);\n                this.isMenuCheck = false;\n            }\n            this.dlgObj.destroy();\n            remove(elem);\n        }\n        this.parent.notify(events.filterDialogClose, {});\n    };\n    FilterMenuRenderer.prototype.renderDlgContent = function (target, column) {\n        var args = {\n            requestType: events.filterBeforeOpen,\n            columnName: column.field, columnType: column.type\n        };\n        var filterModel = 'filterModel';\n        args[\"\" + filterModel] = this;\n        this.parent.trigger(events.actionBegin, args);\n        var mainDiv = this.parent.createElement('div', { className: 'e-flmenu-maindiv', id: column.uid + '-flmenu' });\n        this.dlgDiv = this.parent.createElement('div', { className: 'e-flmenu', id: column.uid + '-flmdlg' });\n        this.dlgDiv.setAttribute('aria-label', this.l10n.getConstant('FilterMenuDialogARIA'));\n        if (this.parent.enableAdaptiveUI) {\n            var responsiveCnt = document.querySelector('.e-resfilter > .e-dlg-content > .e-mainfilterdiv');\n            responsiveCnt.appendChild(this.dlgDiv);\n        }\n        else {\n            this.parent.element.appendChild(this.dlgDiv);\n        }\n        this.dlgObj = new Dialog({\n            showCloseIcon: false,\n            closeOnEscape: false,\n            locale: this.parent.locale,\n            visible: false,\n            enableRtl: this.parent.enableRtl,\n            created: this.dialogCreated.bind(this, target, column),\n            position: this.parent.element.classList.contains('e-device') ? { X: 'center', Y: 'center' } : { X: '', Y: '' },\n            target: this.parent.element.classList.contains('e-device') ? document.body : this.parent.element,\n            buttons: [{\n                    click: this.filterBtnClick.bind(this, column),\n                    buttonModel: {\n                        content: this.l10n.getConstant('FilterButton'), isPrimary: true,\n                        cssClass: this.parent.cssClass ? 'e-flmenu-okbtn' + ' ' + this.parent.cssClass : 'e-flmenu-okbtn'\n                    }\n                },\n                {\n                    click: this.clearBtnClick.bind(this, column),\n                    buttonModel: { content: this.l10n.getConstant('ClearButton'),\n                        cssClass: this.parent.cssClass ? 'e-flmenu-cancelbtn' + ' ' + this.parent.cssClass : 'e-flmenu-cancelbtn' }\n                }],\n            content: mainDiv,\n            width: (!isNullOrUndefined(parentsUntil(target, 'e-bigger'))) || this.parent.element.classList.contains('e-device') ? 260 : 250,\n            animationSettings: { effect: 'None' },\n            cssClass: this.parent.cssClass ? 'e-filter-popup' + ' ' + this.parent.cssClass : 'e-filter-popup'\n        });\n        var isStringTemplate = 'isStringTemplate';\n        this.dlgObj[\"\" + isStringTemplate] = true;\n        this.renderResponsiveDialog();\n        this.dlgObj.appendTo(this.dlgDiv);\n    };\n    FilterMenuRenderer.prototype.renderResponsiveDialog = function () {\n        var gObj = this.parent;\n        if (gObj.enableAdaptiveUI) {\n            this.dlgObj.position = { X: '', Y: '' };\n            this.dlgObj.target = document.querySelector('.e-resfilter > .e-dlg-content > .e-mainfilterdiv');\n            this.dlgObj.width = '100%';\n            this.dlgObj.isModal = false;\n            this.dlgObj.buttons = [{}];\n        }\n    };\n    FilterMenuRenderer.prototype.dialogCreated = function (target, column) {\n        if (!Browser.isDevice && target) {\n            getFilterMenuPostion(target, this.dlgObj);\n        }\n        this.currentDialogCreatedColumn = column;\n        this.renderFilterUI(target, column);\n        if (!(column.isForeignColumn() && !(!isNullOrUndefined(column.filter) && !isNullOrUndefined(column.filter.ui)\n            && !isNullOrUndefined(column.filter.ui.create)))) {\n            this.afterRenderFilterUI();\n        }\n        if (!isNullOrUndefined(column.filterTemplate)) {\n            this.dlgDiv.querySelector('.e-flmenu-valuediv').firstElementChild.focus();\n            this.dlgDiv.querySelector('.e-flmenu-valuediv').firstElementChild.classList.add('e-input-focus');\n        }\n        else if (!isNullOrUndefined(this.dlgDiv.querySelector('.e-flmenu-input'))) {\n            this.dlgDiv.querySelector('.e-flmenu-input').focus();\n            this.dlgDiv.querySelector('.e-flmenu-input').parentElement.classList.add('e-input-focus');\n        }\n    };\n    /**\n     * Function to notify filterDialogCreated and trigger actionComplete\n     *\n     * @returns {void}\n     * @hidden\n     */\n    FilterMenuRenderer.prototype.afterRenderFilterUI = function () {\n        var column = this.currentDialogCreatedColumn;\n        if (column.showColumnMenu) {\n            this.parent.notify(events.filterDialogCreated, {});\n        }\n        if (this.parent.enableAdaptiveUI) {\n            this.dlgObj.element.style.left = '0px';\n            this.dlgObj.element.style.maxHeight = 'none';\n        }\n        else {\n            this.dlgObj.element.style.maxHeight = this.maxHeight;\n        }\n        this.dlgObj.show();\n        var optrInput = this.dlgObj.element.querySelector('.e-flm_optrdiv').querySelector('input');\n        var valInput = this.dlgObj.element.querySelector('.e-flmenu-valuediv').querySelector('input');\n        if (optrInput.value === 'Empty' || optrInput.value === 'Not Empty' ||\n            optrInput.value === 'Null' || optrInput.value === 'Not Null') {\n            valInput['ej2_instances'][0]['enabled'] = false;\n        }\n        else if (!isNullOrUndefined(valInput && valInput.getAttribute('disabled'))) {\n            valInput['ej2_instances'][0]['enabled'] = true;\n        }\n        if (!column.filterTemplate) {\n            this.writeMethod(column, this.dlgObj.element.querySelector('#' + column.uid + '-flmenu'));\n        }\n        var args = {\n            requestType: events.filterAfterOpen,\n            columnName: column.field, columnType: column.type\n        };\n        var filterModel = 'filterModel';\n        args[\"\" + filterModel] = this;\n        this.isDialogOpen = true;\n        if (!this.isMenuCheck) {\n            this.parent.trigger(events.actionComplete, args);\n        }\n    };\n    FilterMenuRenderer.prototype.renderFilterUI = function (target, col) {\n        var dlgConetntEle = this.dlgObj.element.querySelector('.e-flmenu-maindiv');\n        this.parent.log('column_type_missing', { column: col });\n        this.renderOperatorUI(dlgConetntEle, target, col);\n        this.renderFlValueUI(dlgConetntEle, target, col);\n    };\n    FilterMenuRenderer.prototype.renderOperatorUI = function (dlgConetntEle, target, column) {\n        this.flMuiObj.renderOperatorUI(dlgConetntEle, target, column, this.dlgObj, this.filterObj.menuOperator);\n    };\n    FilterMenuRenderer.prototype.renderFlValueUI = function (dlgConetntEle, target, column) {\n        var valueDiv = this.parent.createElement('div', { className: 'e-flmenu-valuediv' });\n        var fObj = this.filterObj;\n        dlgConetntEle.appendChild(valueDiv);\n        var instanceofFilterUI = new this.colTypes[column.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n        if (column.filterTemplate) {\n            var fltrData = {};\n            var valueInString = 'value';\n            fltrData[column.field] = fltrData[\"\" + valueInString] = fObj.values[column.field];\n            if (column.foreignKeyValue) {\n                fltrData[column.foreignKeyValue] = fObj.values[column.field];\n                fltrData[column.field] = undefined;\n            }\n            var col = 'column';\n            fltrData[\"\" + col] = column;\n            var isReactCompiler = this.parent.isReact && typeof (column.filterTemplate) !== 'string';\n            var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n                this.parent.parentDetails.parentInstObj.isReact;\n            var tempID = this.parent.element.id + column.uid + 'filterTemplate';\n            if (isReactCompiler || isReactChild) {\n                column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate', tempID, null, null, valueDiv);\n                this.parent.renderTemplates();\n            }\n            else {\n                var compElement = column.getFilterTemplate()(fltrData, this.parent, 'filterTemplate', tempID);\n                appendChildren(valueDiv, compElement);\n            }\n            if (this.isMenuCheck) {\n                this.menuFilterBase.cBox = this.dlgObj.element.querySelector('.e-checkboxlist.e-fields');\n                this.menuFilterBase.wireEvents();\n                this.parent.on(events.cBoxFltrComplete, this.actionComplete, this);\n                this.menuFilterBase.getAllData();\n            }\n        }\n        else {\n            if (!isNullOrUndefined(column.filter) && !isNullOrUndefined(column.filter.ui)\n                && !isNullOrUndefined(column.filter.ui.create)) {\n                var temp = column.filter.ui.create;\n                if (typeof temp === 'string') {\n                    temp = getValue(temp, window);\n                }\n                temp({\n                    column: column, target: valueDiv,\n                    getOptrInstance: this.flMuiObj, dialogObj: this.dlgObj\n                });\n            }\n            else {\n                instanceofFilterUI.create({\n                    column: column, target: valueDiv,\n                    getOptrInstance: this.flMuiObj, localizeText: this.l10n, dialogObj: this.dlgObj\n                });\n            }\n        }\n    };\n    FilterMenuRenderer.prototype.writeMethod = function (col, dlgContentEle) {\n        var flValue;\n        var target = dlgContentEle.querySelector('.e-flmenu-valinput');\n        var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n        var columns = this.filterSettings.columns;\n        for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n            var column = columns_1[_i];\n            if (col.uid === column.uid) {\n                flValue = column.value;\n            }\n        }\n        if (!isNullOrUndefined(col.filter) && !isNullOrUndefined(col.filter.ui)\n            && !isNullOrUndefined(col.filter.ui.write)) {\n            var temp = col.filter.ui.write;\n            if (typeof temp === 'string') {\n                temp = getValue(temp, window);\n            }\n            temp({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n        }\n        else {\n            instanceofFilterUI.write({ column: col, target: target, parent: this.parent, filteredValue: flValue });\n        }\n    };\n    FilterMenuRenderer.prototype.filterBtnClick = function (col) {\n        var flValue;\n        var targ = this.dlgObj.element.querySelector('.e-flmenu-valuediv input');\n        var flOptrValue = this.flMuiObj.getFlOperator();\n        var instanceofFilterUI = new this.colTypes[col.type](this.parent, this.serviceLocator, this.parent.filterSettings);\n        if (col.filterTemplate) {\n            var element = this.dlgDiv.querySelector('.e-flmenu-valuediv');\n            var fltrValue = void 0;\n            if (element.children[0].value) {\n                fltrValue = element.children[0].value;\n            }\n            else {\n                if (!isNullOrUndefined(element.children[0].ej2_instances)) {\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    fltrValue = (this.parent.isAngular ? element.children[0] :\n                        element.querySelector('input')).ej2_instances[0].value;\n                }\n                else {\n                    var eControl = element.querySelector('.e-control');\n                    if (!isNullOrUndefined(eControl)) {\n                        fltrValue = col.type === 'boolean' ? eControl.checked :\n                            !isNullOrUndefined(eControl.ej2_instances) ?\n                                eControl.ej2_instances[0].value :\n                                eControl.value;\n                    }\n                }\n            }\n            this.filterObj.filterByColumn(col.field, flOptrValue, fltrValue);\n        }\n        else {\n            if (!isNullOrUndefined(col.filter) &&\n                !isNullOrUndefined(col.filter.ui) && !isNullOrUndefined(col.filter.ui.read)) {\n                var temp = col.filter.ui.read;\n                if (typeof temp === 'string') {\n                    temp = getValue(temp, window);\n                }\n                // eslint-disable-next-line\n                flValue = temp({ element: targ, column: col, operator: flOptrValue, fltrObj: this.filterObj });\n            }\n            else {\n                instanceofFilterUI.read(targ, col, flOptrValue, this.filterObj);\n            }\n        }\n        this.closeDialog();\n        if (this.parent.showColumnMenu) {\n            this.parent.notify(events.afterFilterColumnMenuClose, {});\n        }\n    };\n    FilterMenuRenderer.prototype.closeResponsiveDialog = function () {\n        this.closeDialog();\n    };\n    FilterMenuRenderer.prototype.clearBtnClick = function (column) {\n        this.filterObj.removeFilteredColsByField(column.field);\n        this.closeDialog();\n    };\n    FilterMenuRenderer.prototype.destroy = function () {\n        this.closeDialog();\n    };\n    /**\n     * @returns {FilterUI} returns the filterUI\n     * @hidden\n     */\n    FilterMenuRenderer.prototype.getFilterUIInfo = function () {\n        return { field: this.col.field, operator: this.flMuiObj.getFlOperator() };\n    };\n    FilterMenuRenderer.prototype.renderCheckBoxMenu = function () {\n        this.isMenuCheck = true;\n        this.menuFilterBase.updateModel(this.options);\n        this.menuFilterBase.getAndSetChkElem(this.options);\n        this.dlgObj.buttons = [{\n                click: this.menuFilterBase.btnClick.bind(this.menuFilterBase),\n                buttonModel: {\n                    content: this.menuFilterBase.getLocalizedLabel('FilterButton'),\n                    cssClass: 'e-primary', isPrimary: true\n                }\n            },\n            {\n                click: this.menuFilterBase.btnClick.bind(this.menuFilterBase),\n                buttonModel: { cssClass: 'e-flat', content: this.menuFilterBase.getLocalizedLabel('ClearButton') }\n            }];\n        this.menuFilterBase.dialogObj = this.dlgObj;\n        this.menuFilterBase.dlg = this.dlgObj.element;\n        this.menuFilterBase.dlg.classList.add('e-menucheckbox');\n        this.menuFilterBase.dlg.classList.remove('e-checkboxfilter');\n        this.maxHeight = '800px';\n        return this.menuFilterBase.sBox.innerHTML;\n    };\n    FilterMenuRenderer.prototype.actionComplete = function (args) {\n        if (this.isMenuCheck) {\n            this.parent.trigger(events.actionComplete, args);\n        }\n    };\n    return FilterMenuRenderer;\n}());\nexport { FilterMenuRenderer };\n","import * as events from '../base/constant';\nimport { isActionPrevent } from '../base/util';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\n/**\n * @hidden\n * `CheckBoxFilter` module is used to handle filtering action.\n */\nvar CheckBoxFilter = /** @class */ (function () {\n    /**\n     * Constructor for checkbox filtering module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {FilterSettings} filterSettings - specifies the filtersettings\n     * @param {ServiceLocator} serviceLocator - specifies the ServiceLocator\n     * @hidden\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    function CheckBoxFilter(parent, filterSettings, serviceLocator) {\n        this.parent = parent;\n        this.isresetFocus = true;\n        this.checkBoxBase = new CheckBoxFilterBase(parent);\n        this.addEventListener();\n    }\n    /**\n     * To destroy the check box filter.\n     *\n     * @returns {void}\n     * @hidden\n     */\n    CheckBoxFilter.prototype.destroy = function () {\n        this.removeEventListener();\n        this.checkBoxBase.closeDialog();\n    };\n    CheckBoxFilter.prototype.openDialog = function (options) {\n        this.checkBoxBase.openDialog(options);\n        this.parent.log('column_type_missing', { column: options.column });\n    };\n    CheckBoxFilter.prototype.closeDialog = function () {\n        this.destroy();\n        if (this.isresetFocus) {\n            this.parent.notify(events.restoreFocus, {});\n        }\n    };\n    CheckBoxFilter.prototype.closeResponsiveDialog = function () {\n        this.checkBoxBase.closeDialog();\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} - returns the module name\n     * @private\n     */\n    CheckBoxFilter.prototype.getModuleName = function () {\n        return 'checkboxFilter';\n    };\n    CheckBoxFilter.prototype.actionBegin = function (args) {\n        this.parent.trigger(events.actionBegin, args);\n    };\n    CheckBoxFilter.prototype.actionComplete = function (args) {\n        this.parent.trigger(events.actionComplete, args);\n    };\n    CheckBoxFilter.prototype.actionPrevent = function (args) {\n        if (isActionPrevent(this.parent)) {\n            this.parent.notify(events.preventBatch, args);\n            args.cancel = true;\n        }\n    };\n    CheckBoxFilter.prototype.clearCustomFilter = function (col) {\n        this.checkBoxBase.clearFilter(col);\n    };\n    CheckBoxFilter.prototype.applyCustomFilter = function () {\n        this.checkBoxBase.fltrBtnHandler();\n        this.checkBoxBase.closeDialog();\n    };\n    CheckBoxFilter.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.on(events.cBoxFltrBegin, this.actionBegin, this);\n        this.parent.on(events.cBoxFltrComplete, this.actionComplete, this);\n        this.parent.on(events.fltrPrevent, this.actionPrevent, this);\n    };\n    CheckBoxFilter.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.off(events.cBoxFltrBegin, this.actionBegin);\n        this.parent.off(events.cBoxFltrComplete, this.actionComplete);\n        this.parent.off(events.fltrPrevent, this.actionPrevent);\n    };\n    return CheckBoxFilter;\n}());\nexport { CheckBoxFilter };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { EventHandler, remove, Browser } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { DropDownList, AutoComplete } from '@syncfusion/ej2-dropdowns';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { RadioButton, CheckBox } from '@syncfusion/ej2-buttons';\nimport { distinctStringValues, isComplexField, getComplexFieldID, getCustomDateFormat, applyBiggerTheme, performComplexDataOperation, registerEventHandlers, removeEventHandlers, clearReactVueTemplates } from '../base/util';\nimport { DatePicker, DateTimePicker } from '@syncfusion/ej2-calendars';\nimport { parentsUntil, appendChildren, extend, eventPromise } from '../base/util';\nimport * as events from '../base/constant';\nimport { ContextMenu } from '@syncfusion/ej2-navigations';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\nimport * as literals from '../base/string-literals';\n/**\n * @hidden\n * `ExcelFilter` module is used to handle filtering action.\n */\nvar ExcelFilterBase = /** @class */ (function (_super) {\n    __extends(ExcelFilterBase, _super);\n    /**\n     * Constructor for excel filtering module\n     *\n     * @param {IXLFilter} parent - parent details\n     * @param {Object} customFltrOperators - operator details\n     * @hidden\n     */\n    function ExcelFilterBase(parent, customFltrOperators) {\n        var _this = _super.call(this, parent) || this;\n        _this.childRefs = [];\n        _this.eventHandlers = {};\n        _this.isDevice = false;\n        _this.focusedMenuItem = null;\n        _this.customFilterOperators = customFltrOperators;\n        _this.isExcel = true;\n        return _this;\n    }\n    ExcelFilterBase.prototype.getCMenuDS = function (type, operator) {\n        var options = {\n            number: ['Equal', 'NotEqual', '', 'LessThan', 'LessThanOrEqual', 'GreaterThan',\n                'GreaterThanOrEqual', 'Between', '', 'CustomFilter'],\n            string: ['Equal', 'NotEqual', '', 'StartsWith', 'EndsWith', '', 'Contains', 'NotContains', '', 'CustomFilter']\n        };\n        options.date = options.number;\n        options.datetime = options.number;\n        options.dateonly = options.number;\n        var model = [];\n        for (var i = 0; i < options[\"\" + type].length; i++) {\n            if (options[\"\" + type][parseInt(i.toString(), 10)].length) {\n                if (operator) {\n                    model.push({\n                        text: this.getLocalizedLabel(options[\"\" + type][parseInt(i.toString(), 10)]) + '...',\n                        iconCss: 'e-icons e-icon-check ' + (operator === options[\"\" + type][parseInt(i.toString(), 10)].toLowerCase() ? '' : 'e-emptyicon')\n                    });\n                }\n                else {\n                    model.push({\n                        text: this.getLocalizedLabel(options[\"\" + type][parseInt(i.toString(), 10)]) + '...'\n                    });\n                }\n            }\n            else {\n                model.push({ separator: true });\n            }\n        }\n        return model;\n    };\n    /**\n     * To destroy the filter bar.\n     *\n     * @returns {void}\n     * @hidden\n     */\n    ExcelFilterBase.prototype.destroy = function () {\n        if (this.dlg) {\n            this.unwireExEvents();\n            _super.prototype.closeDialog.call(this);\n        }\n        if (!this.isDevice && this.menuObj) {\n            var li = this.menuObj.element.querySelector('li.e-focused');\n            if (!(li && parentsUntil(li, 'e-excel-menu'))) {\n                this.destroyCMenu();\n            }\n        }\n        if (this.dlgObj && !this.dlgObj.isDestroyed) {\n            this.removeDialog();\n        }\n    };\n    ExcelFilterBase.prototype.createMenu = function (type, isFiltered, isCheckIcon, eleOptions) {\n        var options = { string: 'TextFilter', date: 'DateFilter', dateonly: 'DateFilter', datetime: 'DateTimeFilter', number: 'NumberFilter' };\n        this.menu = this.parent.createElement('div', { className: 'e-contextmenu-wrapper' });\n        if (this.parent.enableRtl) {\n            this.menu.classList.add('e-rtl');\n        }\n        else {\n            this.menu.classList.remove('e-rtl');\n        }\n        if (this.parent.cssClass) {\n            this.menu.classList.add(this.parent.cssClass);\n        }\n        var ul = this.parent.createElement('ul');\n        var icon = isFiltered ? 'e-excl-filter-icon e-filtered' : 'e-excl-filter-icon';\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        if (this.parent.allowSorting && this.parent.getModuleName() === 'grid'\n            && !this.options.isResponsiveFilter) {\n            var hdrele = this.parent.getColumnHeaderByUid(eleOptions.uid).getAttribute('aria-sort');\n            var colIsSort = this.parent.getColumnByField(eleOptions.field).allowSorting;\n            var isAsc = (!colIsSort || hdrele === 'ascending') ? 'e-disabled e-excel-ascending' : 'e-excel-ascending';\n            var isDesc = (!colIsSort || hdrele === 'descending') ? 'e-disabled e-excel-descending' : 'e-excel-descending';\n            var ascName = (type === 'string') ? this.getLocalizedLabel('SortAtoZ') : (type === 'datetime' || type === 'date') ?\n                this.getLocalizedLabel('SortByOldest') : this.getLocalizedLabel('SortSmallestToLargest');\n            var descName = (type === 'string') ? this.getLocalizedLabel('SortZtoA') : (type === 'datetime' || type === 'date') ?\n                this.getLocalizedLabel('SortByNewest') : this.getLocalizedLabel('SortLargestToSmallest');\n            ul.appendChild(this.createMenuElem(ascName, isAsc, 'e-sortascending'));\n            ul.appendChild(this.createMenuElem(descName, isDesc, 'e-sortdescending'));\n            var separator = this.parent.createElement('li', { className: 'e-separator e-menu-item e-excel-separator' });\n            ul.appendChild(separator);\n        }\n        if (!this.options.isResponsiveFilter) {\n            ul.appendChild(this.createMenuElem(this.getLocalizedLabel('ClearFilter'), isFiltered ? '' : 'e-disabled', icon));\n        }\n        if (type !== 'boolean') {\n            ul.appendChild(this.createMenuElem(this.getLocalizedLabel(options[\"\" + type]), 'e-submenu', isCheckIcon && this.ensureTextFilter() ? 'e-icon-check' : icon + ' e-emptyicon', true));\n        }\n        this.menu.appendChild(ul);\n        this.parent.notify(events.beforeFltrcMenuOpen, { element: this.menu });\n        this.parent.notify(events.refreshCustomFilterClearBtn, { isFiltered: isFiltered });\n    };\n    ExcelFilterBase.prototype.createMenuElem = function (val, className, iconName, isSubMenu) {\n        var li = this.parent.createElement('li', { className: className + ' e-menu-item' });\n        li.innerHTML = val;\n        li.tabIndex = li.classList.contains('e-disabled') ? -1 : 0;\n        li.insertBefore(this.parent.createElement('span', { className: 'e-menu-icon e-icons ' + iconName, attrs: { 'aria-hidden': 'true' } }), li.firstChild);\n        if (isSubMenu) {\n            li.appendChild(this.parent.createElement('span', { className: 'e-icons e-caret' }));\n        }\n        return li;\n    };\n    ExcelFilterBase.prototype.wireExEvents = function () {\n        if (!Browser.isDevice) {\n            EventHandler.add(this.dlg, 'mouseover', this.hoverHandler, this);\n        }\n        EventHandler.add(this.dlg, 'click', this.clickExHandler, this);\n        EventHandler.add(this.dlg, 'keyup', this.keyUp, this);\n        EventHandler.add(this.dlg, 'keydown', this.keyDown, this);\n    };\n    ExcelFilterBase.prototype.unwireExEvents = function () {\n        if (!Browser.isDevice) {\n            EventHandler.remove(this.dlg, 'mouseover', this.hoverHandler);\n        }\n        EventHandler.remove(this.dlg, 'click', this.clickExHandler);\n        EventHandler.remove(this.dlg, 'keyup', this.keyUp);\n        EventHandler.remove(this.dlg, 'keydown', this.keyDown);\n    };\n    ExcelFilterBase.prototype.clickExHandler = function (e) {\n        var options = { string: 'TextFilter', date: 'DateFilter', datetime: 'DateTimeFilter', number: 'NumberFilter' };\n        var menuItem = parentsUntil(e.target, 'e-menu-item');\n        if (menuItem) {\n            if (this.getLocalizedLabel('ClearFilter') === menuItem.innerText.trim()) {\n                this.clearFilter();\n                this.closeDialog();\n            }\n            else if ((this.options.isResponsiveFilter || Browser.isDevice)\n                && this.getLocalizedLabel(options[this.options.type]) === menuItem.innerText.trim()) {\n                this.hoverHandler(e);\n            }\n        }\n    };\n    ExcelFilterBase.prototype.focusNextOrPrevElement = function (e, focusableElements, focusClassName) {\n        var nextIndex = (e.key === 'ArrowUp' || (e.key === 'Tab' && e.shiftKey)) ? focusableElements.indexOf(document.activeElement) - 1\n            : focusableElements.indexOf(document.activeElement) + 1;\n        var nextElement = focusableElements[((nextIndex + focusableElements.length) % focusableElements.length)];\n        // Set focus on the next / previous element\n        if (nextElement) {\n            nextElement.focus();\n            var focusClass = nextElement.classList.contains('e-chk-hidden') ? 'e-chkfocus' : focusClassName;\n            var target = nextElement.classList.contains('e-chk-hidden') ? parentsUntil(nextElement, 'e-ftrchk') : parentsUntil(nextElement, 'e-menu-item');\n            this.excelSetFocus(target, focusClass);\n        }\n    };\n    ExcelFilterBase.prototype.keyUp = function (e) {\n        if ((e.key === 'Tab' && e.shiftKey) || e.key === 'Tab') {\n            var focusClass = e.target.classList.contains('e-chk-hidden') ? 'e-chkfocus' : 'e-menufocus';\n            var target = e.target.classList.contains('e-menu-item')\n                ? parentsUntil(e.target, 'e-menu-item') : parentsUntil(e.target, 'e-ftrchk');\n            this.excelSetFocus(target, focusClass);\n        }\n        else if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && !e.altKey) {\n            e.preventDefault();\n            var focusableElements = Array.from(this.dlg.querySelectorAll('input, button, [tabindex]:not([tabindex=\"-1\"]), .e-menu-item:not(.e-disabled):not(.e-separator)'));\n            this.focusNextOrPrevElement(e, focusableElements, 'e-menufocus');\n        }\n        else if ((e.key === 'Enter' || e.code === 'ArrowRight') && e.target.classList.contains('e-menu-item')) {\n            e.preventDefault();\n            e.target.click();\n            if (e.target.classList.contains('e-submenu')) {\n                this.hoverHandler(e);\n                this.menuObj.element.querySelector('.e-menu-item').focus();\n                this.excelSetFocus(parentsUntil(this.menuObj.element.querySelector('.e-menu-item'), 'e-menu-item'), 'e-focused');\n                this.focusedMenuItem = this.menuObj.element.querySelector('.e-menu-item');\n            }\n        }\n    };\n    ExcelFilterBase.prototype.keyDown = function (e) {\n        //prevented up and down arrow key press default functionality to prevent the browser scroll when performing keyboard navigation in excel filter element.\n        if (e.key === 'ArrowUp' || e.key === 'ArrowDown') {\n            e.preventDefault();\n        }\n    };\n    ExcelFilterBase.prototype.excelSetFocus = function (elem, className) {\n        var prevElem = document.querySelector('.' + className);\n        if (prevElem) {\n            prevElem.classList.remove(className);\n        }\n        if (elem) {\n            elem.classList.add(className);\n        }\n    };\n    ExcelFilterBase.prototype.destroyCMenu = function () {\n        this.isCMenuOpen = false;\n        if (this.menuObj && !this.menuObj.isDestroyed) {\n            this.menuObj.destroy();\n            EventHandler.remove(this.menuObj.element, 'keydown', this.contextKeyDownHandler);\n            remove(this.cmenu);\n            this.parent.notify(events.renderResponsiveCmenu, { target: null, header: '', isOpen: false, col: this.options.column });\n        }\n    };\n    ExcelFilterBase.prototype.hoverHandler = function (e) {\n        if (this.options.isResponsiveFilter && e.type === 'mouseover') {\n            return;\n        }\n        var target = e.target.querySelector('.e-contextmenu');\n        var li = parentsUntil(e.target, 'e-menu-item');\n        var focused = this.menu.querySelector('.e-focused');\n        var isSubMenu;\n        if (focused) {\n            focused.classList.remove('e-focused');\n        }\n        if (li) {\n            li.classList.add('e-focused');\n            isSubMenu = li.classList.contains('e-submenu');\n        }\n        if (target) {\n            return;\n        }\n        if (!isSubMenu) {\n            var submenu = this.menu.querySelector('.e-submenu');\n            if (!isNullOrUndefined(submenu)) {\n                submenu.classList.remove('e-selected');\n            }\n            this.destroyCMenu();\n        }\n        var selectedMenu = this.ensureTextFilter();\n        if (!this.isCMenuOpen && isSubMenu) {\n            li.classList.add('e-selected');\n            this.isCMenuOpen = true;\n            var menuOptions = {\n                items: this.getCMenuDS(this.options.type, selectedMenu ? selectedMenu.replace(/\\s/g, '') : undefined),\n                select: this.selectHandler.bind(this),\n                onClose: this.destroyCMenu.bind(this),\n                enableRtl: this.parent.enableRtl,\n                animationSettings: { effect: 'None' },\n                beforeClose: this.preventClose.bind(this),\n                cssClass: this.options.isResponsiveFilter && this.parent.cssClass ?\n                    'e-res-contextmenu-wrapper' + ' ' + this.parent.cssClass : this.options.isResponsiveFilter ?\n                    'e-res-contextmenu-wrapper' : this.parent.cssClass ? this.parent.cssClass : ''\n            };\n            this.parent.element.appendChild(this.cmenu);\n            this.menuObj = new ContextMenu(menuOptions, this.cmenu);\n            EventHandler.add(this.menuObj.element, 'keydown', this.contextKeyDownHandler, this);\n            var client = this.menu.querySelector('.e-submenu').getBoundingClientRect();\n            var pos = { top: 0, left: 0 };\n            if (this.options.isResponsiveFilter) {\n                var options = { string: 'TextFilter', date: 'DateFilter', datetime: 'DateTimeFilter', number: 'NumberFilter' };\n                var content = document.querySelector('.e-responsive-dialog > .e-dlg-header-content');\n                var height = content.offsetHeight + 4;\n                this.menuObj.element.style.height = 'calc(100% - ' + height + 'px)';\n                this.menuObj['open'](height, 0, document.body);\n                var header = this.getLocalizedLabel(options[this.options.type]);\n                this.parent.notify(events.renderResponsiveCmenu, {\n                    target: this.menuObj.element.parentElement, header: header, isOpen: true\n                });\n            }\n            else {\n                if (Browser.isDevice) {\n                    this.isDevice = true;\n                    var contextRect = this.getContextBounds();\n                    pos.top = (window.innerHeight - contextRect.height) / 2;\n                    pos.left = (window.innerWidth - contextRect.width) / 2;\n                    this.closeDialog();\n                    this.isDevice = false;\n                }\n                else {\n                    pos.top = Browser.isIE ? window.pageYOffset + client.top : window.scrollY + client.top;\n                    pos.left = this.getCMenuYPosition(this.dlg);\n                }\n                this.menuObj['open'](pos.top, pos.left, e.target);\n            }\n            applyBiggerTheme(this.parent.element, this.menuObj.element.parentElement);\n        }\n    };\n    ExcelFilterBase.prototype.contextKeyDownHandler = function (e) {\n        if ((e.key === 'Tab' && e.shiftKey) || e.key === 'Tab') {\n            e.preventDefault();\n            var focusableElements = Array.from(this.menuObj.element.querySelectorAll('[tabindex]:not([tabindex=\"-1\"]), .e-menu-item:not(.e-disabled):not(.e-separator)'));\n            // Focus the next / previous context menu item\n            this.focusNextOrPrevElement(e, focusableElements, 'e-focused');\n        }\n        else if (e.key === 'ArrowLeft' || e.key === 'Escape') {\n            e.preventDefault();\n            this.menuObj.close();\n            this.focusedMenuItem = null;\n            document.querySelector('.e-submenu.e-menu-item').classList.remove('e-selected');\n            document.querySelector('.e-submenu.e-menu-item').focus();\n        }\n    };\n    ExcelFilterBase.prototype.ensureTextFilter = function () {\n        var selectedMenu;\n        var predicates = this.existingPredicate[this.options.field];\n        if (predicates && predicates.length === 2) {\n            if (predicates[0].operator === 'greaterthanorequal' && predicates[1].operator === 'lessthanorequal') {\n                selectedMenu = 'between';\n            }\n            else {\n                selectedMenu = 'customfilter';\n            }\n        }\n        else {\n            if (predicates && predicates.length === 1) {\n                this.optrData = this.customFilterOperators[this.options.type + 'Operator'];\n                selectedMenu = predicates[0].operator;\n            }\n        }\n        return selectedMenu;\n    };\n    ExcelFilterBase.prototype.preventClose = function (args) {\n        if (this.options && this.options.isResponsiveFilter && args.event) {\n            var target = args.event.target;\n            var isFilterBack = target.classList.contains('e-resfilterback')\n                || target.classList.contains('e-res-back-btn') || target.classList.contains('e-menu-item');\n            args.cancel = !isFilterBack;\n        }\n        else {\n            if (args.event instanceof MouseEvent && args.event.target.classList.contains('e-submenu')) {\n                args.cancel = true;\n            }\n        }\n    };\n    ExcelFilterBase.prototype.getContextBounds = function () {\n        this.menuObj.element.style.display = 'block';\n        return this.menuObj.element.getBoundingClientRect();\n    };\n    ExcelFilterBase.prototype.getCMenuYPosition = function (target) {\n        var contextWidth = this.getContextBounds().width;\n        var targetPosition = target.getBoundingClientRect();\n        var leftPos = targetPosition.right + contextWidth - this.parent.element.clientWidth;\n        var targetBorder = target.offsetWidth - target.clientWidth;\n        targetBorder = targetBorder ? targetBorder + 1 : 0;\n        return (leftPos < 1) ? (targetPosition.right + 1 - targetBorder) : (targetPosition.left - contextWidth - 1 + targetBorder);\n    };\n    ExcelFilterBase.prototype.openDialog = function (options) {\n        var _this = this;\n        this.updateModel(options);\n        this.getAndSetChkElem(options);\n        this.showDialog(options);\n        if (options.cancel) {\n            return;\n        }\n        this.dialogObj.dataBind();\n        var filterLength = (this.existingPredicate[options.field] && this.existingPredicate[options.field].length) ||\n            this.options.filteredColumns.filter(function (col) {\n                return _this.options.field === col.field;\n            }).length;\n        this.createMenu(options.type, filterLength > 0, (filterLength === 1 || filterLength === 2), options);\n        this.dlg.insertBefore(this.menu, this.dlg.firstChild);\n        this.dlg.classList.add('e-excelfilter');\n        if (this.parent.enableRtl) {\n            this.dlg.classList.add('e-rtl');\n        }\n        this.dlg.classList.remove('e-checkboxfilter');\n        this.cmenu = this.parent.createElement('ul', { className: 'e-excel-menu' });\n        if (options.column.showColumnMenu) {\n            this.parent.notify(events.filterDialogCreated, {});\n        }\n        this.wireExEvents();\n    };\n    ExcelFilterBase.prototype.closeDialog = function () {\n        this.destroy();\n    };\n    ExcelFilterBase.prototype.selectHandler = function (e) {\n        if (e.item) {\n            this.parent.notify(events.filterCmenuSelect, {});\n            this.menuItem = e.item;\n            this.closeDialog();\n            this.renderDialogue(e);\n        }\n    };\n    /**\n     * @hidden\n     * @param {MenuEventArgs} e - event args\n     * @returns {void}\n     */\n    ExcelFilterBase.prototype.renderDialogue = function (e) {\n        var _this = this;\n        var target = e ? e.element : undefined;\n        var column = this.options.field;\n        var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n        var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n        var mainDiv = this.parent.createElement('div', {\n            className: 'e-xlfl-maindiv',\n            id: isComplex ? complexFieldName + '-xlflmenu' : column + '-xlflmenu'\n        });\n        this.dlgDiv = this.parent.createElement('div', {\n            className: 'e-xlflmenu',\n            id: isComplex ? complexFieldName + '-xlfldlg' : column + '-xlfldlg'\n        });\n        if (this.options.isResponsiveFilter) {\n            var responsiveCnt = document.querySelector('.e-resfilter > .e-dlg-content > .e-xl-customfilterdiv');\n            responsiveCnt.appendChild(this.dlgDiv);\n        }\n        else {\n            this.parent.element.appendChild(this.dlgDiv);\n        }\n        this.dlgObj = new Dialog({\n            header: this.getLocalizedLabel('CustomFilter'),\n            isModal: true,\n            overlayClick: this.removeDialog.bind(this),\n            showCloseIcon: true,\n            locale: this.parent.locale,\n            closeOnEscape: true,\n            target: document.body,\n            // target: this.parent.element,\n            visible: false,\n            enableRtl: this.parent.enableRtl,\n            open: function () {\n                var rows = [].slice.call(_this.dlgObj.element.querySelectorAll('table.e-xlfl-table tr.e-xlfl-fields'));\n                for (var i = 0; i < rows.length; i++) {\n                    var valInput = rows[i].children[1].querySelector('.e-control');\n                    var dropDownList = rows[i]\n                        .querySelector('.e-dropdownlist.e-control')['ej2_instances'][0];\n                    if (dropDownList.value === 'isempty' || dropDownList.value === 'isnotempty' ||\n                        dropDownList.value === 'isnull' || dropDownList.value === 'isnotnull') {\n                        valInput['ej2_instances'][0]['enabled'] = false;\n                    }\n                    else if (valInput && !isNullOrUndefined(valInput.getAttribute('disabled'))) {\n                        valInput['ej2_instances'][0]['enabled'] = true;\n                    }\n                }\n                var row = _this.dlgObj.element.querySelector('table.e-xlfl-table>tr');\n                if (_this.options.column.filterTemplate) {\n                    var templateField_1 = isComplexField(_this.options.column.field) ?\n                        getComplexFieldID(_this.options.column.field) : _this.options.column.field;\n                    var isReactCompiler = _this.parent.isReact && typeof (_this.options.column.filterTemplate) !== 'string';\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    var isReactChild = _this.parent.parentDetails && _this.parent.parentDetails.parentInstObj &&\n                        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                        _this.parent.parentDetails.parentInstObj.isReact;\n                    if (isReactCompiler || isReactChild) {\n                        _this.parent.renderTemplates(function () {\n                            row.querySelector('#' + templateField_1 + '-xlfl-frstvalue').focus();\n                        });\n                    }\n                    else {\n                        row.querySelector('#' + templateField_1 + '-xlfl-frstvalue').focus();\n                    }\n                }\n                else {\n                    //(row.cells[1].querySelector('input:not([type=hidden])') as HTMLElement).focus();\n                }\n            },\n            close: this.removeDialog.bind(this),\n            created: this.createdDialog.bind(this, target, column),\n            buttons: [{\n                    click: this.filterBtnClick.bind(this, column),\n                    buttonModel: {\n                        content: this.getLocalizedLabel('OKButton'), isPrimary: true,\n                        cssClass: this.parent.cssClass ? 'e-xlfl-okbtn' + ' ' + this.parent.cssClass : 'e-xlfl-okbtn'\n                    }\n                },\n                {\n                    click: this.removeDialog.bind(this),\n                    buttonModel: { content: this.getLocalizedLabel('CancelButton'),\n                        cssClass: this.parent.cssClass ? 'e-xlfl-cancelbtn' + ' ' + this.parent.cssClass : 'e-xlfl-cancelbtn' }\n                }],\n            content: mainDiv,\n            width: 430,\n            animationSettings: { effect: 'None' },\n            cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n        });\n        var isStringTemplate = 'isStringTemplate';\n        this.dlgObj[\"\" + isStringTemplate] = true;\n        this.renderResponsiveDialog();\n        this.dlgDiv.setAttribute('aria-label', this.getLocalizedLabel('CustomFilterDialogARIA'));\n        this.childRefs.push(this.dlgObj);\n        this.dlgObj.appendTo(this.dlgDiv);\n    };\n    ExcelFilterBase.prototype.renderResponsiveDialog = function () {\n        if (this.options.isResponsiveFilter) {\n            var rowResponsiveDlg = document.querySelector('.e-row-responsive-filter');\n            if (rowResponsiveDlg) {\n                rowResponsiveDlg.classList.remove('e-row-responsive-filter');\n            }\n            this.dlgObj.buttons = [{}];\n            this.dlgObj.header = undefined;\n            this.dlgObj.position = { X: '', Y: '' };\n            this.dlgObj.target = document.querySelector('.e-resfilter > .e-dlg-content > .e-xl-customfilterdiv');\n            this.dlgObj.width = '100%';\n            this.dlgObj.isModal = false;\n            this.dlgObj.showCloseIcon = false;\n        }\n    };\n    /**\n     * @hidden\n     * @returns {void}\n     */\n    ExcelFilterBase.prototype.removeDialog = function () {\n        this.parent.notify(events.customFilterClose, {});\n        if ((this.parent.isReact || this.parent.isVue) && this.parent.destroyTemplate !== undefined) {\n            clearReactVueTemplates(this.parent, ['filterTemplate']);\n        }\n        this.removeObjects(this.childRefs);\n        remove(this.dlgDiv);\n        this.parent.notify(events.filterDialogClose, {});\n    };\n    ExcelFilterBase.prototype.createdDialog = function (target, column) {\n        this.renderCustomFilter(target, column);\n        this.dlgObj.element.style.left = '0px';\n        if (!this.options.isResponsiveFilter) {\n            this.dlgObj.element.style.top = '0px';\n        }\n        else {\n            var content = document.querySelector('.e-responsive-dialog > .e-dlg-header-content');\n            var height = content.offsetHeight + 4;\n            this.dlgObj.element.style.top = height + 'px';\n        }\n        if (!this.options.isResponsiveFilter && Browser.isDevice && window.innerWidth < 440) {\n            this.dlgObj.element.style.width = '90%';\n        }\n        this.parent.notify(events.beforeCustomFilterOpen, { column: column, dialog: this.dialogObj });\n        this.dlgObj.show();\n        applyBiggerTheme(this.parent.element, this.dlgObj.element.parentElement);\n    };\n    ExcelFilterBase.prototype.renderCustomFilter = function (target, column) {\n        var dlgConetntEle = this.dlgObj.element.querySelector('.e-xlfl-maindiv');\n        var dlgFields = this.parent.createElement('div', { innerHTML: this.getLocalizedLabel('ShowRowsWhere'), className: 'e-xlfl-dlgfields' });\n        dlgConetntEle.appendChild(dlgFields);\n        //column name\n        var fieldSet = this.parent.createElement('div', { innerHTML: this.options.displayName, className: 'e-xlfl-fieldset' });\n        dlgConetntEle.appendChild(fieldSet);\n        this.renderFilterUI(column, dlgConetntEle);\n    };\n    /**\n     * @hidden\n     * @param {string} col - Defines column details\n     * @returns {void}\n     */\n    ExcelFilterBase.prototype.filterBtnClick = function (col) {\n        var isComplex = !isNullOrUndefined(col) && isComplexField(col);\n        var complexFieldName = !isNullOrUndefined(col) && getComplexFieldID(col);\n        var colValue = isComplex ? complexFieldName : col;\n        var fValue = this.dlgDiv.querySelector('#' + colValue + '-xlfl-frstvalue').ej2_instances[0];\n        var fOperator = this.dlgDiv.querySelector('#' + colValue + '-xlfl-frstoptr').ej2_instances[0];\n        var sValue = this.dlgDiv.querySelector('#' + colValue + '-xlfl-secndvalue').ej2_instances[0];\n        var sOperator = this.dlgDiv.querySelector('#' + colValue + '-xlfl-secndoptr').ej2_instances[0];\n        var checkBoxValue;\n        if (this.options.type === 'string') {\n            var checkBox = this.dlgDiv.querySelector('#' + colValue + '-xlflmtcase').ej2_instances[0];\n            checkBoxValue = checkBox.checked;\n        }\n        var andRadio = this.dlgDiv.querySelector('#' + colValue + 'e-xlfl-frstpredicate').ej2_instances[0];\n        var predicate = (andRadio.checked ? 'and' : 'or');\n        if (sValue.value === null) {\n            predicate = 'or';\n        }\n        this.filterByColumn(this.options.field, fOperator.value, fValue.value, predicate, checkBoxValue, this.options.ignoreAccent, sOperator.value, sValue.value);\n        this.removeDialog();\n    };\n    /**\n     * @hidden\n     * Filters grid row by column name with given options.\n     *\n     * @param {string} fieldName - Defines the field name of the filter column.\n     * @param {string} firstOperator - Defines the first operator by how to filter records.\n     * @param {string | number | Date | boolean} firstValue - Defines the first value which is used to filter records.\n     * @param  {string} predicate - Defines the relationship between one filter query with another by using AND or OR predicate.\n     * @param {boolean} matchCase - If ignore case set to true, then filter records with exact match or else\n     * filter records with case insensitive(uppercase and lowercase letters treated as same).\n     * @param {boolean} ignoreAccent - If ignoreAccent set to true, then ignores the diacritic characters or accents when filtering.\n     * @param {string} secondOperator - Defines the second operator by how to filter records.\n     * @param {string | number | Date | boolean} secondValue - Defines the first value which is used to filter records.\n     * @returns {void}\n     */\n    ExcelFilterBase.prototype.filterByColumn = function (fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue) {\n        var col = this.parent.getColumnByField ? this.parent.getColumnByField(fieldName) : this.options.column;\n        var field = this.isForeignColumn(col) ? col.foreignKeyValue : fieldName;\n        var fColl = [];\n        var mPredicate;\n        var arg = {\n            instance: this, handler: this.filterByColumn, arg1: fieldName, arg2: firstOperator, arg3: firstValue, arg4: predicate,\n            arg5: matchCase, arg6: ignoreAccent, arg7: secondOperator, arg8: secondValue, cancel: false\n        };\n        this.parent.notify(events.fltrPrevent, arg);\n        if (arg.cancel) {\n            return;\n        }\n        fColl.push({\n            field: field,\n            predicate: predicate,\n            matchCase: matchCase,\n            ignoreAccent: ignoreAccent,\n            operator: firstOperator,\n            value: arg.arg3,\n            type: this.options.type\n        });\n        mPredicate = new Predicate(field, firstOperator.toLowerCase(), arg.arg3, !matchCase, ignoreAccent);\n        if (!isNullOrUndefined(secondValue) && !isNullOrUndefined(secondOperator)) {\n            fColl.push({\n                field: field,\n                predicate: predicate,\n                matchCase: matchCase,\n                ignoreAccent: ignoreAccent,\n                operator: secondOperator,\n                value: arg.arg8,\n                type: this.options.type\n            });\n            mPredicate = mPredicate[\"\" + predicate](field, secondOperator.toLowerCase(), secondValue, !matchCase, ignoreAccent);\n        }\n        var args = {\n            action: 'filtering', filterCollection: fColl, field: this.options.field,\n            ejpredicate: mPredicate, actualPredicate: fColl\n        };\n        if (this.isForeignColumn(col)) {\n            this.foreignKeyFilter(args, fColl, mPredicate);\n        }\n        else {\n            this.options.handler(args);\n        }\n    };\n    // eslint-disable-next-line max-len\n    ExcelFilterBase.prototype.renderOperatorUI = function (column, table, elementID, predicates, isFirst) {\n        var fieldElement = this.parent.createElement('tr', { className: 'e-xlfl-fields', attrs: { role: 'row' } });\n        table.appendChild(fieldElement);\n        var xlfloptr = this.parent.createElement('td', { className: 'e-xlfl-optr' });\n        fieldElement.appendChild(xlfloptr);\n        var optrDiv = this.parent.createElement('div', { className: 'e-xlfl-optrdiv' });\n        var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n        var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n        var optrInput = this.parent\n            .createElement('input', { id: isComplex ? complexFieldName + elementID : column + elementID });\n        optrDiv.appendChild(optrInput);\n        xlfloptr.appendChild(optrDiv);\n        var optr = this.options.type + 'Operator';\n        var dropDatasource = this.customFilterOperators[\"\" + optr];\n        this.optrData = dropDatasource;\n        var selectedValue = this.dropSelectedVal(this.options.column, predicates, isFirst);\n        //Trailing three dots are sliced.\n        var menuText = '';\n        if (this.menuItem) {\n            menuText = this.menuItem.text.slice(0, -3);\n            if (menuText !== this.getLocalizedLabel('CustomFilter')) {\n                selectedValue = isFirst ? menuText : undefined;\n            }\n            if (menuText === this.getLocalizedLabel('Between')) {\n                selectedValue = this.getLocalizedLabel(isFirst ? 'GreaterThanOrEqual' : 'LessThanOrEqual');\n            }\n        }\n        var col = this.options.column;\n        var dropOptr = new DropDownList(extend({\n            dataSource: dropDatasource,\n            fields: { text: 'text', value: 'value' },\n            text: selectedValue,\n            enableRtl: this.parent.enableRtl,\n            cssClass: this.parent.cssClass ? this.parent.cssClass : null\n        }, col.filter.params));\n        this.childRefs.push(dropOptr);\n        var evt = { 'open': this.dropDownOpen.bind(this), 'change': this.dropDownValueChange.bind(this) };\n        registerEventHandlers(optrInput.id, [literals.open, literals.change], evt, this);\n        dropOptr.addEventListener(literals['open'], this.eventHandlers[optrInput.id][literals.open]);\n        dropOptr.addEventListener(literals.change, this.eventHandlers[optrInput.id][literals.change]);\n        dropOptr.appendTo(optrInput);\n        var operator = this.getSelectedValue(selectedValue);\n        return { fieldElement: fieldElement, operator: operator };\n    };\n    ExcelFilterBase.prototype.removeHandlersFromComponent = function (component) {\n        if (component.element.classList.contains('e-dropdownlist')) {\n            removeEventHandlers(component, [literals.open, literals.change], this);\n        }\n        else if (component.element.classList.contains('e-autocomplete')) {\n            removeEventHandlers(component, [events.actionComplete, literals.focus], this);\n        }\n    };\n    ExcelFilterBase.prototype.dropDownOpen = function (args) {\n        args.popup.element.style.zIndex = (this.dialogObj.zIndex + 1).toString();\n    };\n    ExcelFilterBase.prototype.dropDownValueChange = function (args) {\n        if (args.element.id.includes('-xlfl-frstoptr')) {\n            this.firstOperator = args.value.toString();\n        }\n        else {\n            this.secondOperator = args.value.toString();\n        }\n        var valInput = args.element.closest('.e-xlfl-fields').children[1].querySelector('.e-control');\n        var dropDownList = args.element['ej2_instances'][0];\n        if (dropDownList.value === 'isempty' || dropDownList.value === 'isnotempty' ||\n            dropDownList.value === 'isnull' || dropDownList.value === 'isnotnull') {\n            valInput['ej2_instances'][0]['enabled'] = false;\n        }\n        else if (!isNullOrUndefined(valInput.getAttribute('disabled'))) {\n            valInput['ej2_instances'][0]['enabled'] = true;\n        }\n    };\n    /**\n     * @hidden\n     * @returns {FilterUI} returns filter UI\n     */\n    ExcelFilterBase.prototype.getFilterUIInfo = function () {\n        return { firstOperator: this.firstOperator, secondOperator: this.secondOperator, field: this.options.field };\n    };\n    ExcelFilterBase.prototype.getSelectedValue = function (text) {\n        var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('text', 'equal', text));\n        return !isNullOrUndefined(selectedField[0]) ? selectedField[0].value : '';\n    };\n    ExcelFilterBase.prototype.dropSelectedVal = function (col, predicates, isFirst) {\n        var operator;\n        if (predicates && predicates.length > 0) {\n            operator = predicates.length === 2 ?\n                (isFirst ? predicates[0].operator : predicates[1].operator) :\n                (isFirst ? predicates[0].operator : undefined);\n        }\n        else if (isFirst && col.type === 'string' && !col.filter.operator) {\n            operator = 'startswith';\n        }\n        else {\n            operator = isFirst ? col.filter.operator || 'equal' : undefined;\n        }\n        return this.getSelectedText(operator);\n    };\n    ExcelFilterBase.prototype.getSelectedText = function (operator) {\n        var selectedField = new DataManager(this.optrData).executeLocal(new Query().where('value', 'equal', operator));\n        return !isNullOrUndefined(selectedField[0]) ? selectedField[0].text : '';\n    };\n    ExcelFilterBase.prototype.renderFilterUI = function (column, dlgConetntEle) {\n        var predicates = this.existingPredicate[\"\" + column];\n        var table = this.parent.createElement('table', { className: 'e-xlfl-table', attrs: { role: 'grid' } });\n        dlgConetntEle.appendChild(table);\n        var colGroup = this.parent.createElement(literals.colGroup);\n        colGroup.innerHTML = '<col style=\"width: 50%\"></col><col style=\"width: 50%\"></col>';\n        table.appendChild(colGroup);\n        //Renders first dropdown\n        var optr = this.renderOperatorUI(column, table, '-xlfl-frstoptr', predicates, true);\n        this.firstOperator = optr.operator;\n        //Renders first value\n        this.renderFlValueUI(column, optr, '-xlfl-frstvalue', predicates, true);\n        var predicate = this.parent.createElement('tr', { className: 'e-xlfl-predicate', attrs: { role: 'row' } });\n        table.appendChild(predicate);\n        //Renders first radion button\n        this.renderRadioButton(column, predicate, predicates);\n        //Renders second dropdown\n        optr = this.renderOperatorUI(column, table, '-xlfl-secndoptr', predicates, false);\n        this.secondOperator = optr.operator;\n        //Renders second text box\n        this.renderFlValueUI(column, optr, '-xlfl-secndvalue', predicates, false);\n    };\n    ExcelFilterBase.prototype.renderRadioButton = function (column, tr, predicates) {\n        var td = this.parent.createElement('td', { className: 'e-xlfl-radio', attrs: { 'colSpan': '2' } });\n        tr.appendChild(td);\n        var radioDiv = this.parent\n            .createElement('div', { className: 'e-xlfl-radiodiv', attrs: { 'style': 'display: inline-block' } });\n        var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n        var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n        var frstpredicate = this.parent.createElement('input', { id: isComplex ? complexFieldName + 'e-xlfl-frstpredicate' : column + 'e-xlfl-frstpredicate', attrs: { 'type': 'radio' } });\n        var secndpredicate = this.parent.createElement('input', { id: isComplex ? complexFieldName + 'e-xlfl-secndpredicate' : column + 'e-xlfl-secndpredicate', attrs: { 'type': 'radio' } });\n        //appends into div\n        radioDiv.appendChild(frstpredicate);\n        radioDiv.appendChild(secndpredicate);\n        td.appendChild(radioDiv);\n        if (this.options.type === 'string') {\n            this.renderMatchCase(column, tr, td, '-xlflmtcase', predicates);\n        }\n        // Initialize AND RadioButton component.\n        var andRadio = new RadioButton({\n            label: this.getLocalizedLabel('AND'),\n            name: 'default', checked: true,\n            enableRtl: this.parent.enableRtl,\n            cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n        });\n        this.childRefs.push(andRadio);\n        // Initialize OR RadioButton component.\n        var orRadio = new RadioButton({\n            label: this.getLocalizedLabel('OR'),\n            name: 'default',\n            enableRtl: this.parent.enableRtl,\n            cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n        });\n        this.childRefs.push(orRadio);\n        var flValue = predicates && predicates.length === 2 ? predicates[1].predicate : 'and';\n        if (flValue === 'and') {\n            andRadio.checked = true;\n            orRadio.checked = false;\n        }\n        else {\n            orRadio.checked = true;\n            andRadio.checked = false;\n        }\n        // Render initialized RadioButton.\n        andRadio.appendTo(frstpredicate);\n        orRadio.appendTo(secndpredicate);\n        andRadio.element.nextElementSibling.classList.add('e-xlfl-radio-and');\n        orRadio.element.nextElementSibling.classList.add('e-xlfl-radio-or');\n    };\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    ExcelFilterBase.prototype.removeObjects = function (elements) {\n        for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n            var obj = elements_1[_i];\n            if (obj && !obj.isDestroyed) {\n                this.removeHandlersFromComponent(obj);\n                obj.destroy();\n            }\n        }\n    };\n    // eslint-disable-next-line max-len\n    ExcelFilterBase.prototype.renderFlValueUI = function (column, optr, elementId, predicates, isFirst) {\n        var value = this.parent.createElement('td', { className: 'e-xlfl-value' });\n        optr.fieldElement.appendChild(value);\n        var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n        var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n        var valueDiv = this.parent.createElement('div', { className: 'e-xlfl-valuediv' });\n        var isFilteredCol = this.options.filteredColumns.some(function (col) { return column === col.field; });\n        var fltrPredicates = this.options.filteredColumns.filter(function (col) { return col.field === column; });\n        if (this.options.column.filterTemplate) {\n            var data = {};\n            var columnObj = this.options.column;\n            if (isFilteredCol && elementId) {\n                data = this.getExcelFilterData(elementId, data, columnObj, predicates, fltrPredicates);\n            }\n            var isReactCompiler = this.parent.isReact && typeof (this.options.column.filterTemplate) !== 'string';\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                this.parent.parentDetails.parentInstObj.isReact;\n            var tempID = this.parent.element.id + columnObj.uid + 'filterTemplate';\n            if (isReactCompiler || isReactChild) {\n                this.options.column.getFilterTemplate()(data, this.parent, 'filterTemplate', tempID, null, null, valueDiv);\n            }\n            else {\n                var element = this.options.column.getFilterTemplate()(data, this.parent, 'filterTemplate', tempID);\n                appendChildren(valueDiv, element);\n            }\n            if (isReactCompiler || isReactChild) {\n                this.parent.renderTemplates(function () {\n                    valueDiv.querySelector('input').id = isComplex ? complexFieldName + elementId : column + elementId;\n                    value.appendChild(valueDiv);\n                });\n            }\n            else {\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                (this.parent.isAngular ? valueDiv.children[0] : valueDiv.querySelector('input')).id = isComplex ?\n                    complexFieldName + elementId : column + elementId;\n                value.appendChild(valueDiv);\n            }\n        }\n        else {\n            var valueInput = this.parent\n                .createElement('input', { id: isComplex ? complexFieldName + elementId : column + elementId });\n            valueDiv.appendChild(valueInput);\n            value.appendChild(valueDiv);\n            var flValue = void 0;\n            var predicate = void 0;\n            if (predicates && predicates.length > 0) {\n                predicate = predicates.length === 2 ?\n                    (isFirst ? predicates[0] : predicates[1]) :\n                    (isFirst ? predicates[0] : undefined);\n                flValue = (predicate && predicate.operator === optr.operator) ? predicate.value : undefined;\n                if (isNullOrUndefined(flValue)) {\n                    flValue = undefined;\n                }\n            }\n            var types = {\n                'string': this.renderAutoComplete.bind(this),\n                'number': this.renderNumericTextBox.bind(this),\n                'date': this.renderDate.bind(this),\n                'dateonly': this.renderDate.bind(this),\n                'datetime': this.renderDateTime.bind(this)\n            };\n            types[this.options.type](this.options, column, valueInput, flValue, this.parent.enableRtl);\n        }\n    };\n    ExcelFilterBase.prototype.getExcelFilterData = function (elementId, data, columnObj, predicates, fltrPredicates) {\n        var predIndex = elementId === '-xlfl-frstvalue' ? 0 : 1;\n        if (elementId === '-xlfl-frstvalue' || fltrPredicates.length > 1) {\n            data = { column: predicates instanceof Array ? predicates[parseInt(predIndex.toString(), 10)] : predicates };\n            var indx = this.options.column.columnData && fltrPredicates.length > 1 ?\n                (this.options.column.columnData.length === 1 ? 0 : 1) : predIndex;\n            data[this.options.field] = columnObj.foreignKeyValue ?\n                this.options.column.columnData[parseInt(indx.toString(), 10)][columnObj.foreignKeyValue] :\n                fltrPredicates[parseInt(indx.toString(), 10)].value;\n            if (this.options.foreignKeyValue) {\n                data[this.options.foreignKeyValue] = this.options.column\n                    .columnData[parseInt(indx.toString(), 10)][columnObj.foreignKeyValue];\n            }\n        }\n        return data;\n    };\n    // eslint-disable-next-line max-len\n    ExcelFilterBase.prototype.renderMatchCase = function (column, tr, matchCase, elementId, predicates) {\n        var matchCaseDiv = this.parent.createElement('div', { className: 'e-xlfl-matchcasediv', attrs: { 'style': 'display: inline-block' } });\n        var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n        var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n        var matchCaseInput = this.parent.createElement('input', { id: isComplex ? complexFieldName + elementId : column + elementId, attrs: { 'type': 'checkbox' } });\n        matchCaseDiv.appendChild(matchCaseInput);\n        matchCase.appendChild(matchCaseDiv);\n        var flValue = predicates && predicates.length > 0 ?\n            (predicates && predicates.length === 2 ? predicates[1].matchCase : predicates[0].matchCase) :\n            false;\n        // Initialize Match Case check box.\n        var checkbox = new CheckBox({\n            label: this.getLocalizedLabel('MatchCase'),\n            enableRtl: this.parent.enableRtl, checked: flValue,\n            cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n        });\n        this.childRefs.push(checkbox);\n        // Render initialized CheckBox.\n        checkbox.appendTo(matchCaseInput);\n    };\n    // eslint-disable-next-line max-len\n    ExcelFilterBase.prototype.renderDate = function (options, column, inputValue, fValue, isRtl) {\n        var format = getCustomDateFormat(options.format, options.type) || options.format;\n        var datePicker = new DatePicker(extend({\n            format: format,\n            cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n            placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n            width: '100%',\n            enableRtl: isRtl,\n            value: new Date(fValue),\n            locale: this.parent.locale\n        }, options.column.filter.params));\n        this.childRefs.push(datePicker);\n        datePicker.appendTo(inputValue);\n    };\n    // eslint-disable-next-line max-len\n    ExcelFilterBase.prototype.renderDateTime = function (options, column, inputValue, fValue, isRtl) {\n        var format = getCustomDateFormat(options.format, options.type);\n        var dateTimePicker = new DateTimePicker(extend({\n            format: format,\n            cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n            placeholder: this.getLocalizedLabel('CustomFilterDatePlaceHolder'),\n            width: '100%',\n            enableRtl: isRtl,\n            value: new Date(fValue),\n            locale: this.parent.locale\n        }, options.column.filter.params));\n        this.childRefs.push(dateTimePicker);\n        dateTimePicker.appendTo(inputValue);\n    };\n    ExcelFilterBase.prototype.completeAction = function (e) {\n        e.result = distinctStringValues(e.result);\n    };\n    // eslint-disable-next-line max-len\n    ExcelFilterBase.prototype.renderNumericTextBox = function (options, column, inputValue, fValue, isRtl) {\n        var numericTextBox = new NumericTextBox(extend({\n            format: options.format,\n            placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n            enableRtl: isRtl,\n            value: fValue,\n            locale: this.parent.locale,\n            cssClass: this.parent.cssClass ? this.parent.cssClass : null\n        }, options.column.filter.params));\n        this.childRefs.push(numericTextBox);\n        numericTextBox.appendTo(inputValue);\n    };\n    // eslint-disable-next-line max-len\n    ExcelFilterBase.prototype.renderAutoComplete = function (options, column, inputValue, fValue, isRtl) {\n        var colObj = this.options.column;\n        var isForeignColumn = this.isForeignColumn(colObj);\n        var dataSource = isForeignColumn ? colObj.dataSource : options.dataSource;\n        var fields = { value: isForeignColumn ? colObj.foreignKeyValue : column };\n        var actObj = new AutoComplete(extend({\n            dataSource: dataSource instanceof DataManager ? dataSource : new DataManager(dataSource),\n            fields: fields,\n            query: this.getQuery(),\n            sortOrder: 'Ascending',\n            locale: this.parent.locale,\n            cssClass: this.parent.cssClass ? 'e-popup-flmenu' + ' ' + this.parent.cssClass : 'e-popup-flmenu',\n            autofill: true,\n            placeholder: this.getLocalizedLabel('CustomFilterPlaceHolder'),\n            enableRtl: isRtl,\n            text: fValue\n        }, colObj.filter.params));\n        if (dataSource && 'result' in dataSource) {\n            var defObj = eventPromise({ requestType: 'stringfilterrequest' }, this.getQuery());\n            this.parent.trigger(events.dataStateChange, defObj.state);\n            var def = defObj.deffered;\n            def.promise.then(function (e) {\n                actObj.dataSource = new DataManager(e);\n            });\n        }\n        this.childRefs.push(actObj);\n        var evt = { 'actionComplete': this.acActionComplete(actObj, column), 'focus': this.acFocus(actObj, column, options, inputValue) };\n        registerEventHandlers(inputValue.id, [events.actionComplete, literals.focus], evt, this);\n        actObj.addEventListener(literals.focus, this.eventHandlers[inputValue.id][literals.focus]);\n        actObj.addEventListener(events.actionComplete, this.eventHandlers[inputValue.id][events.actionComplete]);\n        actObj.appendTo(inputValue);\n    };\n    ExcelFilterBase.prototype.acActionComplete = function (actObj, column) {\n        return function (e) {\n            var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n            e.result = e.result.filter(function (obj, index, arr) {\n                return arr.map(function (mapObject) {\n                    return isComplex ? performComplexDataOperation(actObj.fields.value, mapObject)\n                        : mapObject[actObj.fields.value];\n                }).indexOf(isComplex ? performComplexDataOperation(actObj.fields.value, obj) :\n                    obj[actObj.fields.value]) === index;\n            });\n        };\n    };\n    ExcelFilterBase.prototype.acFocus = function (actObj, column, options, inputValue) {\n        var _this = this;\n        return function () {\n            var isComplex = !isNullOrUndefined(column) && isComplexField(column);\n            var complexFieldName = !isNullOrUndefined(column) && getComplexFieldID(column);\n            var columnvalue = isComplex ? complexFieldName : column;\n            actObj.filterType = _this.dlgDiv.querySelector('#' + columnvalue +\n                (inputValue.id === (columnvalue + '-xlfl-frstvalue') ?\n                    '-xlfl-frstoptr' :\n                    '-xlfl-secndoptr')).ej2_instances[0].value;\n            actObj.ignoreCase = options.type === 'string' ?\n                !_this.dlgDiv.querySelector('#' + columnvalue + '-xlflmtcase').ej2_instances[0].checked :\n                true;\n            actObj.filterType = !isNullOrUndefined(actObj.filterType) ? actObj.filterType :\n                'equal';\n        };\n    };\n    return ExcelFilterBase;\n}(CheckBoxFilterBase));\nexport { ExcelFilterBase };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { ExcelFilterBase } from '../common/excel-filter-base';\nimport { CheckBoxFilter } from './checkbox-filter';\nimport * as events from '../base/constant';\n/**\n * @hidden\n * `ExcelFilter` module is used to handle filtering action.\n */\nvar ExcelFilter = /** @class */ (function (_super) {\n    __extends(ExcelFilter, _super);\n    /**\n     * Constructor for excelbox filtering module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {FilterSettings} filterSettings - specifies the Filtersettings\n     * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n     * @param {object} customFltrOperators - specifies the customFltrOperators\n     * @hidden\n     */\n    function ExcelFilter(parent, filterSettings, serviceLocator, customFltrOperators) {\n        var _this = _super.call(this, parent, filterSettings, serviceLocator) || this;\n        _this.parent = parent;\n        _this.isresetFocus = true;\n        _this.excelFilterBase = new ExcelFilterBase(parent, customFltrOperators);\n        return _this;\n    }\n    /**\n     * To destroy the excel filter.\n     *\n     * @returns {void}\n     * @hidden\n     */\n    ExcelFilter.prototype.destroy = function () {\n        this.excelFilterBase.closeDialog();\n    };\n    ExcelFilter.prototype.openDialog = function (options) {\n        this.excelFilterBase.openDialog(options);\n    };\n    ExcelFilter.prototype.closeDialog = function () {\n        this.excelFilterBase.closeDialog();\n        if (this.isresetFocus) {\n            this.parent.notify(events.restoreFocus, {});\n        }\n    };\n    ExcelFilter.prototype.clearCustomFilter = function (col) {\n        this.excelFilterBase.clearFilter(col);\n    };\n    ExcelFilter.prototype.closeResponsiveDialog = function (isCustomFilter) {\n        if (isCustomFilter) {\n            this.excelFilterBase.removeDialog();\n        }\n        else {\n            this.closeDialog();\n        }\n    };\n    ExcelFilter.prototype.applyCustomFilter = function (args) {\n        if (!args.isCustomFilter) {\n            this.excelFilterBase.fltrBtnHandler();\n            this.excelFilterBase.closeDialog();\n        }\n        else {\n            this.excelFilterBase.filterBtnClick(args.col.field);\n        }\n    };\n    ExcelFilter.prototype.filterByColumn = function (fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue) {\n        this.excelFilterBase.filterByColumn(fieldName, firstOperator, firstValue, predicate, matchCase, ignoreAccent, secondOperator, secondValue);\n    };\n    /**\n     * @returns {FilterUI} returns the filterUI\n     * @hidden\n     */\n    ExcelFilter.prototype.getFilterUIInfo = function () {\n        return this.excelFilterBase.getFilterUIInfo();\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    ExcelFilter.prototype.getModuleName = function () {\n        return 'excelFilter';\n    };\n    return ExcelFilter;\n}(CheckBoxFilter));\nexport { ExcelFilter };\n","import { EventHandler, isNullOrUndefined, extend, closest, getValue } from '@syncfusion/ej2-base';\nimport { getActualPropFromColl, isActionPrevent, getColumnByForeignKeyValue } from '../base/util';\nimport { remove, matches } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager } from '@syncfusion/ej2-data';\nimport * as events from '../base/constant';\nimport { CellType, ResponsiveDialogAction } from '../base/enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport { FilterCellRenderer } from '../renderer/filter-cell-renderer';\nimport { parentsUntil, addFixedColumnBorder, applyStickyLeftRightPosition } from '../base/util';\nimport { FilterMenuRenderer } from '../renderer/filter-menu-renderer';\nimport { CheckBoxFilter } from '../actions/checkbox-filter';\nimport { ExcelFilter } from '../actions/excel-filter';\nimport * as literals from '../base/string-literals';\nimport { Input } from '@syncfusion/ej2-inputs';\n/**\n *\n * The `Filter` module is used to handle filtering action.\n */\nvar Filter = /** @class */ (function () {\n    /**\n     * Constructor for Grid filtering module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {FilterSettings} filterSettings - specifies the filterSettings\n     * @param {ServiceLocator} serviceLocator - specifes the serviceLocator\n     * @hidden\n     */\n    function Filter(parent, filterSettings, serviceLocator) {\n        this.predicate = 'and';\n        this.contentRefresh = true;\n        this.filterByMethod = true;\n        this.refresh = true;\n        this.values = {};\n        this.operators = {};\n        this.cellText = {};\n        this.nextFlMenuOpen = '';\n        this.type = { 'Menu': FilterMenuRenderer, 'CheckBox': CheckBoxFilter, 'Excel': ExcelFilter };\n        /** @hidden */\n        this.filterOperators = {\n            contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n            lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith', wildCard: 'wildcard',\n            isNull: 'isnull', notNull: 'notnull', like: 'like'\n        };\n        this.fltrDlgDetails = { field: '', isOpen: false };\n        /** @hidden */\n        this.skipNumberInput = ['=', ' ', '!'];\n        this.skipStringInput = ['>', '<', '='];\n        this.actualPredicate = {};\n        this.parent = parent;\n        this.filterSettings = filterSettings;\n        this.serviceLocator = serviceLocator;\n        this.addEventListener();\n        this.setFullScreenDialog();\n    }\n    /**\n     * To render filter bar when filtering enabled.\n     *\n     * @param {NotifyArgs} e - specifies the NotifyArgs\n     * @returns {void}\n     * @hidden\n     */\n    Filter.prototype.render = function (e) {\n        if (DataUtil.getObject('args.isFrozen', e)) {\n            return;\n        }\n        var gObj = this.parent;\n        this.l10n = this.serviceLocator.getService('localization');\n        this.getLocalizedCustomOperators();\n        if (this.parent.filterSettings.type === 'FilterBar') {\n            if (gObj.columns.length) {\n                var fltrElem = this.parent.element.querySelector('.e-filterbar');\n                if (fltrElem) {\n                    remove(fltrElem);\n                }\n                var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Filter, gObj);\n                var cellrender = this.serviceLocator.getService('cellRendererFactory');\n                cellrender.addCellRenderer(CellType.Filter, new FilterCellRenderer(this.parent, this.serviceLocator));\n                this.valueFormatter = this.serviceLocator.getService('valueFormatter');\n                rowRenderer.element = this.parent.createElement('tr', { className: 'e-filterbar', attrs: { role: 'row' } });\n                var row = this.generateRow();\n                row.data = this.values;\n                this.parent.getHeaderContent().querySelector('thead:not(.e-masked-thead)').appendChild(rowRenderer.element);\n                var rowdrag = this.parent.element.querySelector('.e-rowdragheader');\n                this.element = rowRenderer.render(row, gObj.getColumns(), null, null, rowRenderer.element);\n                if (this.element.querySelectorAll('.e-leftfreeze').length &&\n                    (this.element.querySelectorAll('.e-indentcell').length || this.element.querySelectorAll('.e-grouptopleftcell').length)) {\n                    var td = this.element.querySelectorAll('.e-indentcell, .e-grouptopleftcell');\n                    for (var i = 0; i < td.length; i++) {\n                        td[parseInt(i.toString(), 10)].classList.add('e-leftfreeze');\n                        applyStickyLeftRightPosition(td[parseInt(i.toString(), 10)], i * 30, this.parent.enableRtl, 'Left');\n                    }\n                }\n                addFixedColumnBorder(this.element);\n                var detail = this.element.querySelector('.e-detailheadercell');\n                if (detail) {\n                    detail.className = 'e-filterbarcell e-mastercell';\n                }\n                if (rowdrag) {\n                    if (rowdrag.classList.contains('e-leftfreeze')) {\n                        rowdrag.className = 'e-dragheadercell e-mastercell e-leftfreeze';\n                    }\n                    else {\n                        rowdrag.className = 'e-filterbarcell e-mastercell';\n                    }\n                }\n                var gCells = [].slice.call(this.element.getElementsByClassName('e-grouptopleftcell'));\n                if (gCells.length) {\n                    gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n                }\n                this.wireEvents();\n                this.parent.notify(events.freezeRender, { case: 'filter' });\n            }\n        }\n    };\n    /**\n     * To show the responsive custom filter dialog\n     *\n     * @param {boolean} enable - specifes dialog open\n     * @returns {void}\n     * @hidden\n     */\n    Filter.prototype.showCustomFilter = function (enable) {\n        this.responsiveDialogRenderer.isCustomDialog = enable;\n        this.responsiveDialogRenderer.showResponsiveDialog(this.column);\n    };\n    Filter.prototype.renderResponsiveChangeAction = function (args) {\n        this.responsiveDialogRenderer.action = args.action;\n    };\n    /**\n     * To create the filter module.\n     *\n     * @param {Column} col - specifies the filtering column name\n     * @returns {void}\n     * @hidden\n     */\n    Filter.prototype.setFilterModel = function (col) {\n        var type = col.filter.type || this.parent.filterSettings.type;\n        this.filterModule = new this.type[\"\" + type](this.parent, this.parent.filterSettings, this.serviceLocator, this.customOperators, this);\n    };\n    /**\n     * To destroy the filter bar.\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Filter.prototype.destroy = function () {\n        var gridElement = this.parent.element;\n        if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n            return;\n        }\n        if (this.filterModule) {\n            this.filterModule.destroy();\n        }\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        if (!this.parent.refreshing && (this.parent.isDestroyed || !this.parent.allowFiltering)) {\n            this.filterSettings.columns = [];\n        }\n        this.updateFilterMsg();\n        this.removeEventListener();\n        this.unWireEvents();\n        if (this.filterSettings.type === 'FilterBar' && this.filterSettings.showFilterBarOperator) {\n            var dropdownlist = [].slice.call(this.element.getElementsByClassName('e-filterbaroperator'));\n            for (var i = 0; i < dropdownlist.length; i++) {\n                if (dropdownlist[parseInt(i.toString(), 10)].ej2_instances[0]) {\n                    dropdownlist[parseInt(i.toString(), 10)].ej2_instances[0].destroy();\n                }\n            }\n        }\n        if (this.element) {\n            if (this.element.parentElement) {\n                remove(this.element);\n            }\n            var filterBarElement = this.parent.getHeaderContent().querySelector('.e-filterbar');\n            if (filterBarElement) {\n                remove(filterBarElement);\n            }\n        }\n    };\n    Filter.prototype.setFullScreenDialog = function () {\n        if (this.serviceLocator) {\n            this.serviceLocator.registerAdaptiveService(this, this.parent.enableAdaptiveUI, ResponsiveDialogAction.isFilter);\n        }\n    };\n    Filter.prototype.generateRow = function () {\n        var options = {};\n        var row = new Row(options);\n        row.cells = this.generateCells();\n        return row;\n    };\n    Filter.prototype.generateCells = function () {\n        //TODO: generate dummy column for group, detail, stacked row here for filtering;\n        var cells = [];\n        if (this.parent.allowGrouping) {\n            for (var c = 0, len = this.parent.groupSettings.columns.length; c < len; c++) {\n                cells.push(this.generateCell({}, CellType.HeaderIndent));\n            }\n        }\n        if (this.parent.detailTemplate || this.parent.childGrid) {\n            cells.push(this.generateCell({}, CellType.DetailHeader));\n        }\n        if (this.parent.isRowDragable() && this.parent.getFrozenMode() !== 'Right') {\n            cells.push(this.generateCell({}, CellType.RowDragHIcon));\n        }\n        for (var _i = 0, _a = this.parent.getColumns(); _i < _a.length; _i++) {\n            var dummy = _a[_i];\n            cells.push(this.generateCell(dummy));\n        }\n        if (this.parent.isRowDragable() && this.parent.getFrozenMode() === 'Right') {\n            cells.push(this.generateCell({}, CellType.RowDragHIcon));\n        }\n        return cells;\n    };\n    Filter.prototype.generateCell = function (column, cellType) {\n        var opt = {\n            'visible': column.visible,\n            'isDataCell': false,\n            'rowId': '',\n            'column': column,\n            'cellType': cellType ? cellType : CellType.Filter,\n            'attributes': { title: this.l10n.getConstant('FilterbarTitle') }\n        };\n        return new Cell(opt);\n    };\n    /**\n     * To update filterSettings when applying filter.\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Filter.prototype.updateModel = function () {\n        var col = this.column.isForeignColumn() ? this.parent.getColumnByUid(this.column.uid) :\n            this.parent.getColumnByField(this.fieldName);\n        this.filterObjIndex = this.getFilteredColsIndexByField(col);\n        this.prevFilterObject = this.filterSettings.columns[this.filterObjIndex];\n        var arrayVal = Array.isArray(this.value) ? this.value : [this.value];\n        var moduleName = this.parent.dataSource.adaptor && this.parent.dataSource.adaptor.getModuleName ? this.parent.dataSource.adaptor.getModuleName() : undefined;\n        for (var i = 0, len = arrayVal.length; i < len; i++) {\n            var field = col.isForeignColumn() ? col.foreignKeyValue : this.fieldName;\n            var isMenuNotEqual = this.operator === 'notequal';\n            this.currentFilterObject = {\n                field: field, uid: col.uid, isForeignKey: col.isForeignColumn(), operator: this.operator,\n                value: arrayVal[parseInt(i.toString(), 10)], predicate: this.predicate,\n                matchCase: this.matchCase, ignoreAccent: this.ignoreAccent, actualFilterValue: {}, actualOperator: {}\n            };\n            var index = this.getFilteredColsIndexByField(col);\n            if (index > -1 && !Array.isArray(this.value)) {\n                this.filterSettings.columns[parseInt(index.toString(), 10)] = this.currentFilterObject;\n            }\n            else {\n                this.filterSettings.columns.push(this.currentFilterObject);\n            }\n            if (!this.column.isForeignColumn() && isNullOrUndefined(this.value) && (this.operator === 'equal' ||\n                this.operator === 'notequal') && (moduleName !== 'ODataAdaptor' && moduleName !== 'ODataV4Adaptor')) {\n                for (var i_1 = 0; i_1 < this.filterSettings.columns.length; i_1++) {\n                    if (this.filterSettings.columns[\"\" + i_1].field === field &&\n                        (this.filterSettings.columns[\"\" + i_1].operator === 'equal' || this.filterSettings.columns[\"\" + i_1].operator === 'notequal')\n                        && isNullOrUndefined(this.filterSettings.columns[\"\" + i_1].value)) {\n                        this.filterSettings.columns.splice(i_1, 1);\n                        i_1 = i_1 - 1;\n                    }\n                }\n                if (col.type === 'string') {\n                    this.filterSettings.columns.push({\n                        field: field, ignoreAccent: this.ignoreAccent, matchCase: this.matchCase,\n                        operator: this.operator, predicate: isMenuNotEqual ? 'and' : 'or', value: ''\n                    });\n                }\n                this.filterSettings.columns.push({\n                    field: field, ignoreAccent: this.ignoreAccent, matchCase: this.matchCase,\n                    operator: this.operator, predicate: isMenuNotEqual ? 'and' : 'or', value: undefined\n                });\n                this.filterSettings.columns.push({\n                    field: field, ignoreAccent: this.ignoreAccent, matchCase: this.matchCase,\n                    operator: this.operator, predicate: isMenuNotEqual ? 'and' : 'or', value: null\n                });\n            }\n        }\n        // eslint-disable-next-line no-self-assign\n        this.filterSettings.columns = this.filterSettings.columns;\n        this.parent.dataBind();\n    };\n    Filter.prototype.getFilteredColsIndexByField = function (col) {\n        var cols = this.filterSettings.columns;\n        for (var i = 0, len = cols.length; i < len; i++) {\n            if (cols[parseInt(i.toString(), 10)].uid === col.uid || (col.isForeignColumn()\n                && this.parent.getColumnByUid(col.uid).field === col.foreignKeyValue)) {\n                return i;\n            }\n        }\n        return -1;\n    };\n    /**\n     * To trigger action complete event.\n     *\n     * @param {NotifyArgs} e - specifies the NotifyArgs\n     * @returns {void}\n     * @hidden\n     */\n    Filter.prototype.onActionComplete = function (e) {\n        var args = !this.isRemove ? {\n            currentFilterObject: this.currentFilterObject,\n            /* tslint:disable:no-string-literal */\n            currentFilteringColumn: !isNullOrUndefined(this.column) ? this.column.field : undefined,\n            /* tslint:enable:no-string-literal */\n            columns: this.filterSettings.columns, requestType: 'filtering', type: events.actionComplete\n        } : {\n            requestType: 'filtering', type: events.actionComplete\n        };\n        this.parent.trigger(events.actionComplete, extend(e, args));\n        this.isRemove = false;\n    };\n    Filter.prototype.wireEvents = function () {\n        EventHandler.add(this.parent.getHeaderContent(), 'keyup', this.keyUpHandlerImmediate, this);\n    };\n    Filter.prototype.unWireEvents = function () {\n        EventHandler.remove(this.parent.getHeaderContent(), 'keyup', this.keyUpHandlerImmediate);\n    };\n    Filter.prototype.enableAfterRender = function (e) {\n        if (e.module === this.getModuleName() && e.enable) {\n            this.parent.getHeaderTable().classList.add('e-sortfilter');\n            this.render();\n        }\n    };\n    Filter.prototype.refreshFilterValue = function () {\n        this.parent.removeEventListener(events.beforeDataBound, this.refreshFilterValueFn);\n        if (this.filterSettings.type === 'FilterBar' && this.filterSettings.columns.length &&\n            !this.parent.getCurrentViewRecords().length) {\n            this.initialEnd();\n        }\n    };\n    Filter.prototype.initialEnd = function () {\n        this.parent.off(events.contentReady, this.initialEnd);\n        if (this.parent.getColumns().length && this.filterSettings.columns.length) {\n            var gObj = this.parent;\n            this.contentRefresh = false;\n            this.initialLoad = true;\n            for (var _i = 0, _a = gObj.filterSettings.columns; _i < _a.length; _i++) {\n                var col = _a[_i];\n                this.filterByColumn(col.field, col.operator, col.value, col.predicate, col.matchCase, col.ignoreAccent, col.actualFilterValue, col.actualOperator, col.isForeignKey);\n            }\n            this.initialLoad = false;\n            this.updateFilterMsg();\n            this.contentRefresh = true;\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Filter.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.on(events.setFullScreenDialog, this.setFullScreenDialog, this);\n        this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n        this.parent.on(events.filterComplete, this.onActionComplete, this);\n        this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n        this.parent.on(events.keyPressed, this.keyUpHandler, this);\n        this.parent.on(events.columnPositionChanged, this.columnPositionChanged, this);\n        this.parent.on(events.headerRefreshed, this.render, this);\n        this.parent.on(events.contentReady, this.initialEnd, this);\n        this.parent.on(events.filterMenuClose, this.filterMenuClose, this);\n        this.parent.on(events.renderResponsiveChangeAction, this.renderResponsiveChangeAction, this);\n        this.docClickHandler = this.clickHandler.bind(this);\n        EventHandler.add(document, 'click', this.docClickHandler, this);\n        EventHandler.add(this.parent.element, 'mousedown', this.refreshClearIcon, this);\n        this.parent.on(events.filterOpen, this.columnMenuFilter, this);\n        this.parent.on(events.click, this.filterIconClickHandler, this);\n        this.parent.on('persist-data-changed', this.initialEnd, this);\n        this.parent.on(events.closeFilterDialog, this.clickHandler, this);\n        this.parent.on(events.destroy, this.destroy, this);\n        this.refreshFilterValueFn = this.refreshFilterValue.bind(this);\n        this.parent.addEventListener(events.beforeDataBound, this.refreshFilterValueFn);\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Filter.prototype.removeEventListener = function () {\n        EventHandler.remove(document, 'click', this.docClickHandler);\n        EventHandler.remove(this.parent.element, 'mousedown', this.refreshClearIcon);\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.off(events.setFullScreenDialog, this.setFullScreenDialog);\n        this.parent.off(events.uiUpdate, this.enableAfterRender);\n        this.parent.off(events.filterComplete, this.onActionComplete);\n        this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n        this.parent.off(events.keyPressed, this.keyUpHandler);\n        this.parent.off(events.columnPositionChanged, this.columnPositionChanged);\n        this.parent.off(events.headerRefreshed, this.render);\n        this.parent.off(events.filterOpen, this.columnMenuFilter);\n        this.parent.off(events.filterMenuClose, this.filterMenuClose);\n        this.parent.off(events.renderResponsiveChangeAction, this.renderResponsiveChangeAction);\n        this.parent.off(events.click, this.filterIconClickHandler);\n        this.parent.off(events.closeFilterDialog, this.clickHandler);\n        this.parent.off(events.destroy, this.destroy);\n    };\n    Filter.prototype.refreshClearIcon = function (e) {\n        if (this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar' &&\n            e.target.closest('th') && e.target.closest('th').classList.contains('e-filterbarcell') &&\n            e.target.classList.contains('e-clear-icon')) {\n            var targetText = e.target.previousElementSibling;\n            Input.setValue(null, targetText, 'Never', true);\n            if (this.filterSettings.mode === 'Immediate') {\n                this.removeFilteredColsByField(targetText.id.slice(0, -14)); //Length of _filterBarcell = 14\n            }\n        }\n    };\n    Filter.prototype.filterMenuClose = function () {\n        this.fltrDlgDetails.isOpen = false;\n    };\n    /**\n     * Filters the Grid row by fieldName, filterOperator, and filterValue.\n     *\n     * @param  {string} fieldName - Defines the field name of the filter column.\n     * @param  {string} filterOperator - Defines the operator to filter records.\n     * @param  {string | number | Date | boolean} filterValue - Defines the value which is used to filter records.\n     * @param  {string} predicate - Defines the relationship of one filter query with another by using AND or OR predicate.\n     * @param  {boolean} matchCase - If match case is set to true, then the filter records\n     * the exact match or <br> filters records that are case insensitive (uppercase and lowercase letters treated the same).\n     * @param {boolean} ignoreAccent - If ignoreAccent set to true, then filter ignores the diacritic characters or accents while filtering.\n     * @param  {string} actualFilterValue - Defines the actual filter value for the filter column.\n     * @param  {string} actualOperator - Defines the actual filter operator for the filter column.\n     * @param  {boolean} isForeignColumn - Defines whether it is a foreign key column.\n     * @returns {void}\n     */\n    Filter.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator, isForeignColumn) {\n        var _this = this;\n        var gObj = this.parent;\n        var filterCell;\n        this.column = gObj.grabColumnByFieldFromAllCols(fieldName, isForeignColumn);\n        if (this.filterSettings.type === 'FilterBar' && this.filterSettings.showFilterBarOperator\n            && isNullOrUndefined(this.column.filterBarTemplate) && isNullOrUndefined(this.column.filterTemplate)) {\n            filterOperator = this.getOperatorName(fieldName);\n        }\n        if (filterOperator === 'like' && filterValue && filterValue.indexOf('%') === -1) {\n            filterValue = '%' + filterValue + '%';\n        }\n        if (!this.column) {\n            return;\n        }\n        if (this.filterSettings.type === 'FilterBar') {\n            filterCell = gObj.getHeaderContent().querySelector('[id=\\'' + this.column.field + '_filterBarcell\\']');\n        }\n        if (!isNullOrUndefined(this.column.allowFiltering) && !this.column.allowFiltering) {\n            this.parent.log('action_disabled_column', { moduleName: this.getModuleName(), columnName: this.column.headerText });\n            return;\n        }\n        if (isActionPrevent(gObj)) {\n            gObj.notify(events.preventBatch, {\n                instance: this, handler: this.filterByColumn, arg1: fieldName, arg2: filterOperator, arg3: filterValue, arg4: predicate,\n                arg5: matchCase, arg6: ignoreAccent, arg7: actualFilterValue, arg8: actualOperator\n            });\n            return;\n        }\n        this.predicate = predicate ? predicate : Array.isArray(filterValue) ? 'or' : 'and';\n        this.value = filterValue;\n        this.matchCase = matchCase || false;\n        this.ignoreAccent = this.ignoreAccent = !isNullOrUndefined(ignoreAccent) ? ignoreAccent : this.parent.filterSettings.ignoreAccent;\n        this.fieldName = fieldName;\n        this.operator = filterOperator;\n        filterValue = !isNullOrUndefined(filterValue) ? filterValue.toString() : filterValue;\n        if (filterValue === '') {\n            filterValue = null;\n        }\n        if (this.column.type === 'number' || this.column.type === 'date') {\n            this.matchCase = true;\n        }\n        if (filterCell && this.filterSettings.type === 'FilterBar') {\n            if ((filterValue && filterValue.length < 1) || (!this.filterByMethod &&\n                this.checkForSkipInput(this.column, filterValue))) {\n                this.filterStatusMsg = (filterValue && filterValue.length < 1) ? '' : this.l10n.getConstant('InvalidFilterMessage');\n                this.updateFilterMsg();\n                return;\n            }\n            if (filterCell.value !== filterValue) {\n                filterCell.value = filterValue;\n            }\n        }\n        if (!isNullOrUndefined(this.column.format)) {\n            this.applyColumnFormat(filterValue);\n            if (this.initialLoad && this.filterSettings.type === 'FilterBar') {\n                filterCell.value = this.values[this.column.field];\n            }\n        }\n        else {\n            this.values[this.column.field] = filterValue; //this line should be above updateModel\n        }\n        var predObj = {\n            field: this.fieldName,\n            predicate: predicate,\n            matchCase: matchCase,\n            ignoreAccent: ignoreAccent,\n            operator: this.operator,\n            value: this.value,\n            type: this.column.type\n        };\n        var filterColumn = this.parent.filterSettings.columns.filter(function (fColumn) {\n            return (fColumn.field === _this.fieldName);\n        });\n        if (filterColumn.length > 1 && !isNullOrUndefined(this.actualPredicate[this.fieldName])) {\n            this.actualPredicate[this.fieldName].push(predObj);\n        }\n        else {\n            this.actualPredicate[this.fieldName] = [predObj];\n        }\n        if (this.checkAlreadyColFiltered(this.column.field)) {\n            return;\n        }\n        this.updateModel();\n    };\n    Filter.prototype.applyColumnFormat = function (filterValue) {\n        var _this = this;\n        var getFlvalue = (this.column.type === 'date' || this.column.type === 'datetime' || this.column.type === 'dateonly') ?\n            new Date(filterValue) : parseFloat(filterValue);\n        if ((this.column.type === 'date' || this.column.type === 'datetime' || this.column.type === 'dateonly') && filterValue &&\n            Array.isArray(this.value) && filterValue.split(',').length > 1) {\n            this.values[this.column.field] = ((filterValue).split(',')).map(function (val) {\n                if (val === '') {\n                    val = null;\n                }\n                return _this.setFormatForFlColumn(new Date(val), _this.column);\n            });\n        }\n        else {\n            this.values[this.column.field] = this.setFormatForFlColumn(getFlvalue, this.column);\n        }\n    };\n    // To skip the second time request to server while applying initial filtering - EJ2-44361\n    Filter.prototype.skipUid = function (col) {\n        var flag = true;\n        var colLen = Object.keys((col));\n        for (var i = 0; i < colLen.length; i++) {\n            var key = Object.keys(col[colLen[parseInt(i.toString(), 10)]]);\n            if (key.length === 1 && key[0] === 'uid') {\n                flag = false;\n            }\n        }\n        return flag;\n    };\n    Filter.prototype.onPropertyChanged = function (e) {\n        if (e.module !== this.getModuleName()) {\n            return;\n        }\n        for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'columns':\n                    // eslint-disable-next-line no-case-declarations\n                    var col = 'columns';\n                    // eslint-disable-next-line no-case-declarations\n                    var args = {\n                        currentFilterObject: this.currentFilterObject, currentFilteringColumn: this.column ?\n                            this.column.field : undefined, action: 'filter', columns: this.filterSettings.columns,\n                        requestType: 'filtering', type: events.actionBegin, cancel: false\n                    };\n                    if (this.contentRefresh && this.skipUid(e.properties[\"\" + col])) {\n                        this.parent.notify(events.modelChanged, args);\n                        if (args.cancel) {\n                            if ((this.filterSettings.type === 'CheckBox' || this.filterSettings.type === 'Excel')) {\n                                this.filterSettings.columns = (this.actualData.length <= 1) ? this.checkboxPrevFilterObject :\n                                    this.checkboxFilterObject;\n                                this.actualPredicate[this.column.field] = this.filterSettings.columns;\n                                var col_1 = this.parent.getColumnByField(this.column.field);\n                                var iconClass = this.parent.showColumnMenu && col_1.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n                                var filterIconElement = this.parent.getColumnHeaderByField(this.column.field)\n                                    .querySelector(iconClass);\n                                if (this.checkboxPrevFilterObject.length === 0) {\n                                    filterIconElement.classList.remove('e-filtered');\n                                }\n                                else {\n                                    filterIconElement.classList.add('e-filtered');\n                                }\n                            }\n                            else {\n                                if (isNullOrUndefined(this.prevFilterObject)) {\n                                    this.filterSettings.columns.splice(this.filterSettings.columns.length - 1, 1);\n                                }\n                                else {\n                                    this.filterSettings.columns[this.filterObjIndex] = this.prevFilterObject;\n                                }\n                            }\n                            return;\n                        }\n                        this.updateFilterIcon();\n                        this.refreshFilterSettings();\n                        this.updateFilterMsg();\n                        this.updateFilter();\n                    }\n                    break;\n                case 'showFilterBarStatus':\n                    if (e.properties[\"\" + prop]) {\n                        this.updateFilterMsg();\n                    }\n                    else if (this.parent.allowPaging) {\n                        this.parent.updateExternalMessage('');\n                    }\n                    break;\n                case 'showFilterBarOperator':\n                case 'type':\n                    this.parent.refreshHeader();\n                    this.refreshFilterSettings();\n                    if (this.parent.height === '100%') {\n                        this.parent.scrollModule.refresh();\n                    }\n                    break;\n            }\n        }\n    };\n    Filter.prototype.refreshFilterSettings = function () {\n        if (this.filterSettings.type === 'FilterBar') {\n            for (var i = 0; i < this.filterSettings.columns.length; i++) {\n                this.column = this.parent.grabColumnByUidFromAllCols(this.filterSettings.columns[parseInt(i.toString(), 10)].uid);\n                var filterValue = this.filterSettings.columns[parseInt(i.toString(), 10)].value;\n                filterValue = !isNullOrUndefined(filterValue) && filterValue.toString();\n                if (!isNullOrUndefined(this.column.format)) {\n                    this.applyColumnFormat(filterValue);\n                }\n                else {\n                    var key = this.filterSettings.columns[parseInt(i.toString(), 10)].field;\n                    this.values[\"\" + key] = this.filterSettings.columns[parseInt(i.toString(), 10)].value;\n                }\n                var filterElement = this.getFilterBarElement(this.column.field);\n                if (filterElement) {\n                    if (this.cellText[this.filterSettings.columns[parseInt(i.toString(), 10)].field] !== ''\n                        && !isNullOrUndefined(this.cellText[this.filterSettings.columns[parseInt(i.toString(), 10)].field])) {\n                        filterElement.value = this.cellText[this.column.field];\n                    }\n                    else {\n                        filterElement.value = this.filterSettings.columns[parseInt(i.toString(), 10)].value;\n                    }\n                }\n            }\n            if (this.filterSettings.columns.length === 0) {\n                var col = this.parent.getColumns();\n                for (var i = 0; i < col.length; i++) {\n                    var filterElement = this.getFilterBarElement(col[parseInt(i.toString(), 10)].field);\n                    if (filterElement && filterElement.value !== '') {\n                        filterElement.value = '';\n                        delete this.values[col[parseInt(i.toString(), 10)].field];\n                    }\n                }\n            }\n        }\n    };\n    Filter.prototype.updateFilterIcon = function () {\n        if (this.filterSettings.columns.length === 0 && this.parent.element.querySelector('.e-filtered')) {\n            var fltrIconElement = [].slice.call(this.parent.element.getElementsByClassName('e-filtered'));\n            for (var i = 0, len = fltrIconElement.length; i < len; i++) {\n                fltrIconElement[parseInt(i.toString(), 10)].classList.remove('e-filtered');\n            }\n        }\n    };\n    Filter.prototype.getFilterBarElement = function (col) {\n        var selector = '[id=\\'' + col + '_filterBarcell\\']';\n        var filterElement;\n        if (selector && !isNullOrUndefined(this.element)) {\n            filterElement = this.element.querySelector(selector);\n        }\n        return filterElement;\n    };\n    /**\n     * @private\n     * @returns {void}\n     */\n    Filter.prototype.refreshFilter = function () {\n        this.refreshFilterSettings();\n        this.updateFilterMsg();\n    };\n    /**\n     * Clears all the filtered rows of the Grid.\n     *\n     * @param {string[]} fields - returns the fields\n     * @returns {void}\n     */\n    Filter.prototype.clearFiltering = function (fields) {\n        var _this = this;\n        var cols = getActualPropFromColl(this.filterSettings.columns);\n        if (!isNullOrUndefined(fields)) {\n            this.refresh = false;\n            fields.forEach(function (field) { _this.removeFilteredColsByField(field, false); });\n            this.parent.setProperties({ filterSettings: { columns: this.filterSettings.columns } }, true);\n            this.parent.renderModule.refresh();\n            this.refresh = true;\n            return;\n        }\n        if (isActionPrevent(this.parent)) {\n            this.parent.notify(events.preventBatch, { instance: this, handler: this.clearFiltering });\n            return;\n        }\n        for (var i = 0; i < cols.length; i++) {\n            cols[parseInt(i.toString(), 10)].uid = cols[parseInt(i.toString(), 10)].uid\n                || this.parent.getColumnByField(cols[parseInt(i.toString(), 10)].field).uid;\n        }\n        var colUid = cols.map(function (f) { return f.uid; });\n        var filteredcols = colUid.filter(function (item, pos) { return colUid.indexOf(item) === pos; });\n        this.refresh = false;\n        for (var i = 0, len = filteredcols.length; i < len; i++) {\n            this.removeFilteredColsByField(this.parent.getColumnByUid(filteredcols[parseInt(i.toString(), 10)]).field, false);\n        }\n        this.refresh = true;\n        if (filteredcols.length) {\n            this.parent.renderModule.refresh();\n        }\n        if (this.parent.filterSettings.columns.length === 0 && this.parent.element.querySelector('.e-filtered')) {\n            var fltrElement = [].slice.call(this.parent.element.getElementsByClassName('e-filtered'));\n            for (var i = 0, len = fltrElement.length; i < len; i++) {\n                fltrElement[0].classList.remove('e-filtered');\n            }\n        }\n        this.isRemove = true;\n        this.filterStatusMsg = '';\n        this.updateFilterMsg();\n    };\n    Filter.prototype.checkAlreadyColFiltered = function (field) {\n        var columns = this.filterSettings.columns;\n        for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n            var col = columns_1[_i];\n            if (col.field === field && col.value === this.value &&\n                col.operator === this.operator && col.predicate === this.predicate) {\n                return true;\n            }\n        }\n        return false;\n    };\n    Filter.prototype.columnMenuFilter = function (args) {\n        this.column = args.col;\n        var ele = closest(args.target, '#' + args.id);\n        if (args.isClose && !ele) {\n            this.filterModule.closeDialog();\n        }\n        else if (ele) {\n            this.filterDialogOpen(this.column, args.target);\n        }\n    };\n    Filter.prototype.filterDialogOpen = function (col, target, left, top) {\n        if (this.filterModule) {\n            this.filterModule.isresetFocus = false;\n            this.filterModule.closeDialog();\n        }\n        this.setFilterModel(col);\n        this.filterModule.openDialog(this.createOptions(col, target, left, top));\n    };\n    /**\n     * Create filter dialog options\n     *\n     * @param  {Column} col - Filtering column detail.\n     * @param  {Element} target -  Filter dialog target.\n     * @param  {number} left -  Filter dialog left position.\n     * @param  {number} top -  Filter dialog top position.\n     * @returns {Object} returns the created dialog options\n     * @hidden\n     */\n    Filter.prototype.createOptions = function (col, target, left, top) {\n        var gObj = this.parent;\n        var dataSource = col.filter.dataSource || gObj.dataSource && 'result' in gObj.dataSource ? gObj.dataSource :\n            gObj.getDataModule().dataManager;\n        var type = col.filter.type || this.parent.filterSettings.type;\n        var options = {\n            type: col.type, field: col.field, displayName: col.headerText,\n            dataSource: dataSource, format: col.format, height: 800, columns: gObj.getColumns(),\n            filteredColumns: gObj.filterSettings.columns, target: target, dataManager: gObj.getDataModule().dataManager,\n            formatFn: col.getFormatter(), ignoreAccent: gObj.filterSettings.ignoreAccent,\n            parserFn: col.getParser(), query: gObj.query, template: col.getFilterItemTemplate(),\n            hideSearchbox: isNullOrUndefined(col.filter.hideSearchbox) ? false : col.filter.hideSearchbox,\n            handler: this.filterHandler.bind(this), localizedStrings: gObj.getLocaleConstants(),\n            position: { X: left, Y: top }, column: col, foreignKeyValue: col.foreignKeyValue,\n            actualPredicate: this.actualPredicate, localeObj: gObj.localeObj,\n            isRemote: gObj.getDataModule().isRemote(), allowCaseSensitive: this.filterSettings.enableCaseSensitivity,\n            isResponsiveFilter: this.parent.enableAdaptiveUI,\n            operator: this.actualPredicate[col.field] && type === 'Menu' ? this.actualPredicate[col.field][0].operator : 'equal',\n            parentTotalDataCount: gObj.getDataModule().isRemote() && gObj.allowPaging ? gObj.pagerModule.pagerObj.totalRecordsCount :\n                gObj.getDataModule().isRemote() ? gObj.totalDataRecordsCount : gObj.getFilteredRecords().length,\n            parentCurrentViewDataCount: gObj.currentViewData.length,\n            parentFilteredLocalRecords: !gObj.getDataModule().isRemote() ? gObj.getFilteredRecords() : []\n        };\n        return options;\n    };\n    /**\n     * Removes filtered column by field name.\n     *\n     * @param  {string} field - Defines column field name to remove filter.\n     * @param  {boolean} isClearFilterBar - Specifies whether the filter bar value needs to be cleared.\n     * @returns {void}\n     * @hidden\n     */\n    Filter.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n        var fCell;\n        var cols = this.filterSettings.columns;\n        if (isActionPrevent(this.parent)) {\n            var args = { instance: this, handler: this.removeFilteredColsByField, arg1: field, arg2: isClearFilterBar };\n            this.parent.notify(events.preventBatch, args);\n            return;\n        }\n        var colUid = cols.map(function (f) { return f.uid; });\n        var filteredColsUid = colUid.filter(function (item, pos) { return colUid.indexOf(item) === pos; });\n        if (!isNullOrUndefined(this.column)) {\n            var col = this.column.isForeignColumn() ? this.parent.getColumnByUid(this.column.uid) :\n                this.parent.getColumnByField(field);\n            this.filterObjIndex = this.getFilteredColsIndexByField(col);\n            this.prevFilterObject = this.filterSettings.columns[this.filterObjIndex];\n        }\n        var _loop_1 = function (i, len) {\n            cols[parseInt(i.toString(), 10)].uid = cols[parseInt(i.toString(), 10)].uid\n                || this_1.parent.getColumnByField(cols[parseInt(i.toString(), 10)].field).uid;\n            var len_1 = cols.length;\n            var column = this_1.parent.grabColumnByUidFromAllCols(filteredColsUid[parseInt(i.toString(), 10)]);\n            if (column.field === field || (column.field === column.foreignKeyValue && column.isForeignColumn())) {\n                var currentPred = this_1.filterSettings.columns.filter(function (e) {\n                    return e.uid === column.uid;\n                })[0];\n                if (this_1.filterSettings.type === 'FilterBar' && !isClearFilterBar) {\n                    var selector = '[id=\\'' + column.field + '_filterBarcell\\']';\n                    fCell = this_1.parent.getHeaderContent().querySelector(selector);\n                    if (fCell) {\n                        fCell.value = '';\n                        delete this_1.values[\"\" + field];\n                    }\n                }\n                while (len_1--) {\n                    if (cols[parseInt(len_1.toString(), 10)].uid === column.uid) {\n                        cols.splice(len_1, 1);\n                    }\n                }\n                var fltrElement = this_1.parent.getColumnHeaderByField(column.field);\n                if (this_1.filterSettings.type !== 'FilterBar' || this_1.parent.showColumnMenu) {\n                    var iconClass = this_1.parent.showColumnMenu && column.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n                    fltrElement.querySelector(iconClass).classList.remove('e-filtered');\n                }\n                this_1.isRemove = true;\n                if (this_1.actualPredicate[\"\" + field]) {\n                    delete this_1.actualPredicate[\"\" + field];\n                }\n                if (this_1.values[\"\" + field]) {\n                    delete this_1.values[\"\" + field];\n                }\n                if (this_1.refresh) {\n                    this_1.parent.notify(events.modelChanged, {\n                        requestType: 'filtering', type: events.actionBegin, currentFilterObject: currentPred,\n                        currentFilterColumn: column, action: 'clearFilter'\n                    });\n                }\n                return \"break\";\n            }\n        };\n        var this_1 = this;\n        for (var i = 0, len = filteredColsUid.length; i < len; i++) {\n            var state_1 = _loop_1(i, len);\n            if (state_1 === \"break\")\n                break;\n        }\n        this.updateFilterMsg();\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    Filter.prototype.getModuleName = function () {\n        return 'filter';\n    };\n    Filter.prototype.keyUpHandlerImmediate = function (e) {\n        if (e.keyCode !== 13) {\n            this.keyUpHandler(e);\n        }\n    };\n    Filter.prototype.keyUpHandler = function (e) {\n        var gObj = this.parent;\n        var target = e.target;\n        if (target && matches(target, '.e-filterbar input')) {\n            var closeHeaderEle = closest(target, 'th.e-filterbarcell');\n            this.column = gObj.getColumnByUid(closeHeaderEle.getAttribute('e-mappinguid'));\n            if (!this.column) {\n                return;\n            }\n            if (e.action === 'altDownArrow' && this.parent.filterSettings.showFilterBarOperator) {\n                var dropDownListInput = closest(target, 'span').querySelector('.e-filterbaroperator');\n                dropDownListInput.ej2_instances[0].showPopup();\n                dropDownListInput.focus();\n            }\n            if ((this.filterSettings.mode === 'Immediate' || (e.keyCode === 13 &&\n                !e.target.classList.contains('e-filterbaroperator')))\n                && e.keyCode !== 9 && !this.column.filterTemplate) {\n                this.value = target.value.trim();\n                this.processFilter(e);\n            }\n        }\n        if (e.action === 'altDownArrow' && this.filterSettings.type !== 'FilterBar' && !parentsUntil(e.target, 'e-toolbar')\n            && isNullOrUndefined(this.parent.element.querySelector('.e-filter-popup'))) {\n            var element = gObj.focusModule.currentInfo.element;\n            if (element && element.classList.contains('e-headercell')) {\n                var column = gObj.getColumnByUid(element.firstElementChild.getAttribute('e-mappinguid'));\n                this.openMenuByField(column.field);\n                this.parent.focusModule.clearIndicator();\n            }\n        }\n        if (e.action === 'escape' && this.filterSettings.type === 'Menu' && this.filterModule) {\n            this.filterModule.closeDialog();\n            gObj.notify(events.restoreFocus, {});\n        }\n    };\n    Filter.prototype.updateCrossIcon = function (element) {\n        if (element.value.length) {\n            element.nextElementSibling.classList.remove('e-hide');\n        }\n    };\n    Filter.prototype.updateFilterMsg = function () {\n        if (this.filterSettings.type === 'FilterBar') {\n            var gObj = this.parent;\n            var getFormatFlValue = void 0;\n            var columns = this.filterSettings.columns;\n            var column = void 0;\n            if (!this.filterSettings.showFilterBarStatus) {\n                return;\n            }\n            if (columns.length > 0 && this.filterStatusMsg !== this.l10n.getConstant('InvalidFilterMessage')) {\n                this.filterStatusMsg = '';\n                for (var index = 0; index < columns.length; index++) {\n                    column = gObj.grabColumnByUidFromAllCols(columns[parseInt(index.toString(), 10)].uid)\n                        || gObj.grabColumnByFieldFromAllCols(columns[parseInt(index.toString(), 10)].field, columns[parseInt(index.toString(), 10)].isForeignKey);\n                    if (index) {\n                        this.filterStatusMsg += ' && ';\n                    }\n                    if (!isNullOrUndefined(column.format)) {\n                        var flValue = (column.type === 'date' || column.type === 'datetime' || column.type === 'dateonly') ?\n                            this.valueFormatter.fromView(this.values[column.field], column.getParser(), (column.type === 'dateonly' ? 'date' : column.type)) :\n                            this.values[column.field];\n                        if (!(column.type === 'date' || column.type === 'datetime' || column.type === 'dateonly')) {\n                            var formater = this.serviceLocator.getService('valueFormatter');\n                            getFormatFlValue = formater.toView(flValue, column.getParser()).toString();\n                        }\n                        else {\n                            getFormatFlValue = this.setFormatForFlColumn(flValue, column);\n                        }\n                        this.filterStatusMsg += column.headerText + ': ' + getFormatFlValue;\n                    }\n                    else {\n                        this.filterStatusMsg += column.headerText + ': ' + this.values[column.field];\n                    }\n                }\n            }\n            if (gObj.allowPaging) {\n                gObj.updateExternalMessage(this.filterStatusMsg);\n            }\n            //TODO: virtual paging\n            this.filterStatusMsg = '';\n        }\n    };\n    Filter.prototype.setFormatForFlColumn = function (value, column) {\n        var formater = this.serviceLocator.getService('valueFormatter');\n        return formater.toView(value, column.getFormatter()).toString();\n    };\n    Filter.prototype.checkForSkipInput = function (column, value) {\n        var isSkip;\n        if (column.type === 'number') {\n            if (DataUtil.operatorSymbols[\"\" + value] || this.skipNumberInput.indexOf(value) > -1) {\n                isSkip = true;\n            }\n        }\n        else if (column.type === 'string') {\n            for (var _i = 0, value_1 = value; _i < value_1.length; _i++) {\n                var val = value_1[_i];\n                if (this.skipStringInput.indexOf(val) > -1) {\n                    isSkip = true;\n                }\n            }\n        }\n        return isSkip;\n    };\n    Filter.prototype.processFilter = function (e) {\n        this.stopTimer();\n        this.startTimer(e);\n    };\n    Filter.prototype.startTimer = function (e) {\n        var _this = this;\n        this.timer = window.setInterval(function () { _this.onTimerTick(); }, e.keyCode === 13 ? 0 : this.filterSettings.immediateModeDelay);\n    };\n    Filter.prototype.stopTimer = function () {\n        window.clearInterval(this.timer);\n    };\n    Filter.prototype.onTimerTick = function () {\n        var selector = '[id=\\'' + this.column.field + '_filterBarcell\\']';\n        var filterElement = this.element.querySelector(selector);\n        if (!filterElement) {\n            filterElement = this.parent.getHeaderContent().querySelector(selector);\n        }\n        var filterValue;\n        this.cellText[this.column.field] = filterElement.value;\n        this.stopTimer();\n        if (!isNullOrUndefined(this.column.filterBarTemplate)) {\n            var templateRead = this.column.filterBarTemplate.read;\n            if (typeof templateRead === 'string') {\n                templateRead = getValue(templateRead, window);\n            }\n            if (!isNullOrUndefined(templateRead)) {\n                this.value = templateRead.call(this, filterElement);\n            }\n        }\n        else {\n            filterValue = JSON.parse(JSON.stringify(filterElement.value));\n        }\n        if (isNullOrUndefined(this.value) || this.value === '') {\n            this.removeFilteredColsByField(this.column.field);\n            return;\n        }\n        this.validateFilterValue(this.value);\n        this.filterByMethod = false;\n        this.filterByColumn(this.column.field, this.operator, this.value, this.predicate, this.filterSettings.enableCaseSensitivity, this.ignoreAccent, this.column.isForeignColumn());\n        this.filterByMethod = true;\n        filterElement.value = filterValue;\n        this.updateFilterMsg();\n    };\n    Filter.prototype.validateFilterValue = function (value) {\n        var skipInput;\n        var index;\n        this.matchCase = this.filterSettings.enableCaseSensitivity;\n        switch (this.column.type) {\n            case 'number':\n                if (this.column.filter.operator) {\n                    this.operator = this.column.filter.operator;\n                }\n                else {\n                    this.operator = this.filterOperators.equal;\n                }\n                skipInput = ['>', '<', '=', '!'];\n                for (var i = 0; i < value.length; i++) {\n                    if (skipInput.indexOf(value[parseInt(i.toString(), 10)]) > -1) {\n                        index = i;\n                        break;\n                    }\n                }\n                this.getOperator(value.substring(index));\n                if (index !== 0) {\n                    this.value = value.substring(0, index);\n                }\n                if (this.value !== '' && value.length >= 1) {\n                    this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n                }\n                if (isNaN(this.value)) {\n                    this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n                }\n                break;\n            case 'date':\n            case 'datetime':\n                this.operator = this.filterOperators.equal;\n                if (this.value !== '' && !(this.value instanceof Date)) {\n                    this.getOperator(value);\n                    this.value = this.valueFormatter.fromView(this.value, this.column.getParser(), this.column.type);\n                    if (isNullOrUndefined(this.value)) {\n                        this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n                    }\n                }\n                break;\n            case 'string':\n                this.matchCase = false;\n                if (this.column.filter.operator) {\n                    this.operator = this.column.filter.operator;\n                }\n                else {\n                    if (value.indexOf('*') !== -1 || value.indexOf('?') !== -1 || value.indexOf('%3f') !== -1) {\n                        this.operator = this.filterOperators.wildCard;\n                    }\n                    else if (value.indexOf('%') !== -1) {\n                        this.operator = this.filterOperators.like;\n                    }\n                    else {\n                        this.operator = this.filterOperators.startsWith;\n                    }\n                }\n                break;\n            case 'boolean':\n                if (value.toLowerCase() === 'true' || value === '1') {\n                    this.value = true;\n                }\n                else if (value.toLowerCase() === 'false' || value === '0') {\n                    this.value = false;\n                }\n                else if (value.length) {\n                    this.filterStatusMsg = this.l10n.getConstant('InvalidFilterMessage');\n                }\n                this.operator = this.filterOperators.equal;\n                break;\n            default:\n                if (this.column.filter.operator) {\n                    this.operator = this.column.filter.operator;\n                }\n                else {\n                    this.operator = this.filterOperators.equal;\n                }\n        }\n    };\n    Filter.prototype.getOperator = function (value) {\n        var singleOp = value.charAt(0);\n        var multipleOp = value.slice(0, 2);\n        var operators = extend({ '=': this.filterOperators.equal, '!': this.filterOperators.notEqual }, DataUtil.operatorSymbols);\n        // eslint-disable-next-line no-prototype-builtins\n        if (operators.hasOwnProperty(singleOp) || operators.hasOwnProperty(multipleOp)) {\n            this.operator = operators[\"\" + singleOp];\n            this.value = value.substring(1);\n            if (!this.operator) {\n                this.operator = operators[\"\" + multipleOp];\n                this.value = value.substring(2);\n            }\n        }\n        if (this.operator === this.filterOperators.lessThan || this.operator === this.filterOperators.greaterThan) {\n            if (this.value.charAt(0) === '=') {\n                this.operator = this.operator + 'orequal';\n                this.value = this.value.substring(1);\n            }\n        }\n    };\n    Filter.prototype.columnPositionChanged = function () {\n        if (this.parent.filterSettings.type !== 'FilterBar') {\n            return;\n        }\n    };\n    Filter.prototype.getLocalizedCustomOperators = function () {\n        var numOptr = [\n            { value: 'equal', text: this.l10n.getConstant('Equal') },\n            { value: 'greaterthan', text: this.l10n.getConstant('GreaterThan') },\n            { value: 'greaterthanorequal', text: this.l10n.getConstant('GreaterThanOrEqual') },\n            { value: 'lessthan', text: this.l10n.getConstant('LessThan') },\n            { value: 'lessthanorequal', text: this.l10n.getConstant('LessThanOrEqual') },\n            { value: 'notequal', text: this.l10n.getConstant('NotEqual') },\n            { value: 'isnull', text: this.l10n.getConstant('IsNull') },\n            { value: 'isnotnull', text: this.l10n.getConstant('NotNull') }\n        ];\n        this.customOperators = {\n            stringOperator: [\n                { value: 'startswith', text: this.l10n.getConstant('StartsWith') },\n                { value: 'endswith', text: this.l10n.getConstant('EndsWith') },\n                { value: 'contains', text: this.l10n.getConstant('Contains') },\n                { value: 'equal', text: this.l10n.getConstant('Equal') },\n                { value: 'isempty', text: this.l10n.getConstant('IsEmpty') },\n                { value: 'doesnotstartwith', text: this.l10n.getConstant('NotStartsWith') },\n                { value: 'doesnotendwith', text: this.l10n.getConstant('NotEndsWith') },\n                { value: 'doesnotcontain', text: this.l10n.getConstant('NotContains') },\n                { value: 'notequal', text: this.l10n.getConstant('NotEqual') },\n                { value: 'isnotempty', text: this.l10n.getConstant('IsNotEmpty') },\n                { value: 'like', text: this.l10n.getConstant('Like') }\n            ],\n            numberOperator: numOptr,\n            dateOperator: numOptr,\n            datetimeOperator: numOptr,\n            dateonlyOperator: numOptr,\n            booleanOperator: [\n                { value: 'equal', text: this.l10n.getConstant('Equal') },\n                { value: 'notequal', text: this.l10n.getConstant('NotEqual') }\n            ]\n        };\n    };\n    /**\n     * @param {string} field - specifies the field name\n     * @returns {void}\n     * @hidden\n     */\n    Filter.prototype.openMenuByField = function (field) {\n        var gObj = this.parent;\n        if (gObj.enableAdaptiveUI) {\n            this.showCustomFilter(false);\n            return;\n        }\n        var column = gObj.getColumnByField(field);\n        var header = gObj.getColumnHeaderByField(field);\n        var target = header.querySelector('.e-filtermenudiv');\n        if (!target) {\n            return;\n        }\n        var gClient = gObj.element.getBoundingClientRect();\n        var fClient = target.getBoundingClientRect();\n        this.filterDialogOpen(column, target, fClient.right - gClient.left, fClient.bottom - gClient.top);\n    };\n    Filter.prototype.filterIconClickHandler = function (e) {\n        var target = e.target;\n        if (target.classList.contains('e-filtermenudiv') && (this.parent.filterSettings.type === 'Menu' ||\n            this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel')) {\n            var gObj = this.parent;\n            var col = gObj.getColumnByUid(parentsUntil(target, 'e-headercell').firstElementChild.getAttribute('e-mappinguid'));\n            this.column = col;\n            if (this.fltrDlgDetails.field === col.field && this.fltrDlgDetails.isOpen) {\n                return;\n            }\n            if (this.filterModule) {\n                this.filterModule.closeDialog();\n            }\n            this.fltrDlgDetails = { field: col.field, isOpen: true };\n            this.openMenuByField(col.field);\n        }\n    };\n    Filter.prototype.clickHandler = function (e) {\n        if (this.filterSettings.type === 'FilterBar' && this.filterSettings.showFilterBarOperator) {\n            if (parentsUntil(e.target, 'e-filterbarcell') &&\n                e.target.classList.contains('e-input-group-icon')) {\n                var filterOperatorElement = closest(e.target, 'div').\n                    querySelector('.e-filterbaroperator');\n                if (filterOperatorElement) {\n                    filterOperatorElement.focus();\n                }\n                else {\n                    e.target.focus();\n                }\n            }\n            if (e.target.classList.contains('e-list-item')) {\n                var inputId = document.querySelector('.e-popup-open').getAttribute('id').replace('_popup', '');\n                if (inputId.indexOf('grid-column') !== -1) {\n                    closest(document.getElementById(inputId), 'div').querySelector('.e-filtertext').focus();\n                }\n            }\n        }\n        if (this.filterSettings.mode === 'Immediate' || this.parent.filterSettings.type === 'Menu' ||\n            this.parent.filterSettings.type === 'CheckBox' || this.parent.filterSettings.type === 'Excel') {\n            var target = e.target;\n            var datepickerEle = target.classList.contains('e-day'); // due to datepicker popup cause\n            var dialog = parentsUntil(this.parent.element, 'e-dialog');\n            var hasDialog = false;\n            var popupEle = parentsUntil(target, 'e-popup');\n            var hasDialogClosed = this.parent.element.classList.contains('e-device') ? document.querySelector('.e-filter-popup')\n                : this.parent.element.querySelector('.e-filter-popup');\n            if (dialog && popupEle) {\n                hasDialog = dialog.id === popupEle.id;\n            }\n            if ((this.filterModule && hasDialogClosed && (parentsUntil(target, 'e-excel-ascending') ||\n                parentsUntil(target, 'e-excel-descending')))) {\n                this.filterModule.closeDialog(target);\n            }\n            if (parentsUntil(target, 'e-filter-popup') || target.classList.contains('e-filtermenudiv')) {\n                return;\n            }\n            else if (this.filterModule && !parentsUntil(target, 'e-date-overflow') && (!parentsUntil(target, 'e-popup-wrapper')\n                && (!closest(target, '.e-filter-item.e-menu-item'))) && !datepickerEle\n                && !(parentsUntil(target, 'e-search-wrapper') && !hasDialogClosed)) {\n                if ((hasDialog && (!parentsUntil(target, 'e-filter-popup'))\n                    && (!parentsUntil(target, 'e-popup-flmenu'))) || (!popupEle && hasDialogClosed)) {\n                    this.filterModule.isresetFocus = parentsUntil(target, 'e-grid') &&\n                        parentsUntil(target, 'e-grid').id === this.parent.element.id && !(parentsUntil(target, 'e-search-wrapper')\n                        && hasDialogClosed);\n                    this.filterModule.closeDialog(target);\n                }\n            }\n        }\n    };\n    Filter.prototype.filterHandler = function (args) {\n        this.actualPredicate[args.field] = args.actualPredicate;\n        this.actualData = Object.keys(this.actualPredicate);\n        var dataManager = new DataManager(this.filterSettings.columns);\n        var query = new Query().where('field', this.filterOperators.equal, args.field);\n        this.checkboxFilterObject = dataManager.dataSource.json;\n        this.checkboxPrevFilterObject = dataManager.executeLocal(query);\n        for (var i = 0; i < this.checkboxPrevFilterObject.length; i++) {\n            var index = -1;\n            for (var j = 0; j < this.filterSettings.columns.length; j++) {\n                if (this.checkboxPrevFilterObject[parseInt(i.toString(), 10)].field ===\n                    this.filterSettings.columns[parseInt(j.toString(), 10)].field) {\n                    index = j;\n                    break;\n                }\n            }\n            if (index !== -1) {\n                this.filterSettings.columns.splice(index, 1);\n            }\n        }\n        if (this.values[args.field]) {\n            delete this.values[args.field];\n        }\n        var col = this.parent.getColumnByField(args.field);\n        var iconClass = this.parent.showColumnMenu && col.showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n        var filterIconElement = this.parent.getColumnHeaderByField(args.field).querySelector(iconClass);\n        if (args.action === 'filtering') {\n            this.filterSettings.columns = this.filterSettings.columns.concat(args.filterCollection);\n            if (this.filterSettings.columns.length && filterIconElement) {\n                filterIconElement.classList.add('e-filtered');\n            }\n        }\n        else {\n            if (filterIconElement) {\n                filterIconElement.classList.remove('e-filtered');\n            }\n            args.requestType = 'filtering';\n            this.parent.renderModule.refresh(args); //hot-fix onpropertychanged not working for object { array }\n        }\n        this.parent.dataBind();\n    };\n    Filter.prototype.updateFilter = function () {\n        var cols = this.filterSettings.columns;\n        this.actualPredicate = {};\n        for (var i = 0; i < cols.length; i++) {\n            this.column = this.parent.getColumnByField(cols[parseInt(i.toString(), 10)].field) ||\n                getColumnByForeignKeyValue(cols[parseInt(i.toString(), 10)].field, this.parent.getForeignKeyColumns());\n            var fieldName = cols[parseInt(i.toString(), 10)].field;\n            if (!this.parent.getColumnByField(cols[parseInt(i.toString(), 10)].field)) {\n                fieldName = getColumnByForeignKeyValue(cols[parseInt(i.toString(), 10)].field, this.parent.getForeignKeyColumns()).field;\n            }\n            this.refreshFilterIcon(fieldName, cols[parseInt(i.toString(), 10)].operator, cols[parseInt(i.toString(), 10)].value, cols[parseInt(i.toString(), 10)].type, cols[parseInt(i.toString(), 10)].predicate, cols[parseInt(i.toString(), 10)].matchCase, cols[parseInt(i.toString(), 10)].ignoreAccent, cols[parseInt(i.toString(), 10)].uid);\n        }\n    };\n    Filter.prototype.refreshFilterIcon = function (fieldName, operator, value, type, predicate, matchCase, ignoreAccent, uid) {\n        var obj = {\n            field: fieldName,\n            predicate: predicate,\n            matchCase: matchCase,\n            ignoreAccent: ignoreAccent,\n            operator: operator,\n            value: value,\n            type: type\n        };\n        if (this.actualPredicate[\"\" + fieldName]) {\n            this.actualPredicate[\"\" + fieldName].push(obj);\n        }\n        else {\n            this.actualPredicate[\"\" + fieldName] = [obj];\n        }\n        var field = uid ? this.parent.grabColumnByUidFromAllCols(uid).field : fieldName;\n        this.addFilteredClass(field);\n    };\n    Filter.prototype.addFilteredClass = function (fieldName) {\n        var filterIconElement;\n        var col = this.parent.getColumnByField(fieldName);\n        if (this.parent.showColumnMenu && col.showColumnMenu) {\n            filterIconElement = this.parent.getColumnHeaderByField(fieldName).querySelector('.e-columnmenu');\n        }\n        else if (col) {\n            filterIconElement = this.parent.getColumnHeaderByField(fieldName).querySelector('.e-icon-filter');\n        }\n        if (filterIconElement) {\n            filterIconElement.classList.add('e-filtered');\n        }\n    };\n    /**\n     * @hidden\n     * @returns {FilterUI} returns the FilterUI\n     */\n    Filter.prototype.getFilterUIInfo = function () {\n        return this.filterModule ? this.filterModule.getFilterUIInfo() : {};\n    };\n    /**\n     * @param {string} field - specifies the field name\n     * @returns {string} returns the operator name\n     * @hidden\n     */\n    Filter.prototype.getOperatorName = function (field) {\n        return document.getElementById(this.parent.getColumnByField(field).uid).ej2_instances[0].value;\n    };\n    /**\n     * Renders checkbox items in Menu filter dialog.\n     *\n     * @returns {void}\n     */\n    Filter.prototype.renderCheckboxOnFilterMenu = function () {\n        return this.filterModule.renderCheckBoxMenu();\n    };\n    return Filter;\n}());\nexport { Filter };\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var TrendlinesDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-trendlines';\n        }\n    }\n});\nexport var TrendlinesPlugin = {\n    name: 'e-trendlines',\n    install: function (Vue) {\n        Vue.component(TrendlinesPlugin.name, TrendlinesDirective);\n    }\n};\nexport var TrendlineDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-trendline';\n        }\n    }\n});\nexport var TrendlinePlugin = {\n    name: 'e-trendline',\n    install: function (Vue) {\n        Vue.component(TrendlinePlugin.name, TrendlineDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var SegmentsDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-segments';\n        }\n    }\n});\nexport var SegmentsPlugin = {\n    name: 'e-segments',\n    install: function (Vue) {\n        Vue.component(SegmentsPlugin.name, SegmentsDirective);\n    }\n};\nexport var SegmentDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-segment';\n        }\n    }\n});\nexport var SegmentPlugin = {\n    name: 'e-segment',\n    install: function (Vue) {\n        Vue.component(SegmentPlugin.name, SegmentDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var SeriesCollectionDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-series-collection';\n        }\n    }\n});\nexport var SeriesCollectionPlugin = {\n    name: 'e-series-collection',\n    install: function (Vue) {\n        Vue.component(SeriesCollectionPlugin.name, SeriesCollectionDirective);\n    }\n};\nexport var SeriesDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-series';\n        }\n    }\n});\nexport var SeriesPlugin = {\n    name: 'e-series',\n    install: function (Vue) {\n        Vue.component(SeriesPlugin.name, SeriesDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var StripLinesDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-striplines';\n        }\n    }\n});\nexport var StripLinesPlugin = {\n    name: 'e-striplines',\n    install: function (Vue) {\n        Vue.component(StripLinesPlugin.name, StripLinesDirective);\n    }\n};\nexport var StripLineDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-stripline';\n        }\n    }\n});\nexport var StripLinePlugin = {\n    name: 'e-stripline',\n    install: function (Vue) {\n        Vue.component(StripLinePlugin.name, StripLineDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var CategoriesDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-categories';\n        }\n    }\n});\nexport var CategoriesPlugin = {\n    name: 'e-categories',\n    install: function (Vue) {\n        Vue.component(CategoriesPlugin.name, CategoriesDirective);\n    }\n};\nexport var CategoryDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-category';\n        }\n    }\n});\nexport var CategoryPlugin = {\n    name: 'e-category',\n    install: function (Vue) {\n        Vue.component(CategoryPlugin.name, CategoryDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var MultiLevelLabelsDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-multilevellabels';\n        }\n    }\n});\nexport var MultiLevelLabelsPlugin = {\n    name: 'e-multilevellabels',\n    install: function (Vue) {\n        Vue.component(MultiLevelLabelsPlugin.name, MultiLevelLabelsDirective);\n    }\n};\nexport var MultiLevelLabelDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-multilevellabel';\n        }\n    }\n});\nexport var MultiLevelLabelPlugin = {\n    name: 'e-multilevellabel',\n    install: function (Vue) {\n        Vue.component(MultiLevelLabelPlugin.name, MultiLevelLabelDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var AxesDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-axes';\n        }\n    }\n});\nexport var AxesPlugin = {\n    name: 'e-axes',\n    install: function (Vue) {\n        Vue.component(AxesPlugin.name, AxesDirective);\n    }\n};\nexport var AxisDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-axis';\n        }\n    }\n});\nexport var AxisPlugin = {\n    name: 'e-axis',\n    install: function (Vue) {\n        Vue.component(AxisPlugin.name, AxisDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var RowsDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-rows';\n        }\n    }\n});\nexport var RowsPlugin = {\n    name: 'e-rows',\n    install: function (Vue) {\n        Vue.component(RowsPlugin.name, RowsDirective);\n    }\n};\nexport var RowDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-row';\n        }\n    }\n});\nexport var RowPlugin = {\n    name: 'e-row',\n    install: function (Vue) {\n        Vue.component(RowPlugin.name, RowDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var ColumnsDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-columns';\n        }\n    }\n});\nexport var ColumnsPlugin = {\n    name: 'e-columns',\n    install: function (Vue) {\n        Vue.component(ColumnsPlugin.name, ColumnsDirective);\n    }\n};\nexport var ColumnDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-column';\n        }\n    }\n});\nexport var ColumnPlugin = {\n    name: 'e-column',\n    install: function (Vue) {\n        Vue.component(ColumnPlugin.name, ColumnDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var RangeColorSettingsDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-rangecolorsettings';\n        }\n    }\n});\nexport var RangeColorSettingsPlugin = {\n    name: 'e-rangecolorsettings',\n    install: function (Vue) {\n        Vue.component(RangeColorSettingsPlugin.name, RangeColorSettingsDirective);\n    }\n};\nexport var RangeColorSettingDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-rangecolorsetting';\n        }\n    }\n});\nexport var RangeColorSettingPlugin = {\n    name: 'e-rangecolorsetting',\n    install: function (Vue) {\n        Vue.component(RangeColorSettingPlugin.name, RangeColorSettingDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var AnnotationsDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-annotations';\n        }\n    }\n});\nexport var AnnotationsPlugin = {\n    name: 'e-annotations',\n    install: function (Vue) {\n        Vue.component(AnnotationsPlugin.name, AnnotationsDirective);\n    }\n};\n/**\n * `e-annotation` directive represent a annotation of the VueJS Chart.\n * It must be contained in a Chart component(`ejs-chart`).\n * ```vue\n * <ejs-chart>\n *   <e-annotations>\n *    <e-annotation content='ID' />\n *    <e-annotation content='ID' />\n *   </e-annotations>\n * </ejs-chart>\n * ```\n */\nexport var AnnotationDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-annotation';\n        }\n    }\n});\nexport var AnnotationPlugin = {\n    name: 'e-annotation',\n    install: function (Vue) {\n        Vue.component(AnnotationPlugin.name, AnnotationDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var SelectedDataIndexesDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-selecteddataindexes';\n        }\n    }\n});\nexport var SelectedDataIndexesPlugin = {\n    name: 'e-selecteddataindexes',\n    install: function (Vue) {\n        Vue.component(SelectedDataIndexesPlugin.name, SelectedDataIndexesDirective);\n    }\n};\nexport var SelectedDataIndexDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-selecteddataindex';\n        }\n    }\n});\nexport var SelectedDataIndexPlugin = {\n    name: 'e-selecteddataindex',\n    install: function (Vue) {\n        Vue.component(SelectedDataIndexPlugin.name, SelectedDataIndexDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var IndicatorsDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-indicators';\n        }\n    }\n});\nexport var IndicatorsPlugin = {\n    name: 'e-indicators',\n    install: function (Vue) {\n        Vue.component(IndicatorsPlugin.name, IndicatorsDirective);\n    }\n};\nexport var IndicatorDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-indicator';\n        }\n    }\n});\nexport var IndicatorPlugin = {\n    name: 'e-indicator',\n    install: function (Vue) {\n        Vue.component(IndicatorPlugin.name, IndicatorDirective);\n    }\n};\n","import { ComponentBase, gh, getProps, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { isUndefined } from '@syncfusion/ej2-base';\nimport { Chart } from '@syncfusion/ej2-charts';\nimport { TrendlinesDirective, TrendlineDirective, TrendlinesPlugin, TrendlinePlugin } from './trendlines.directive';\nimport { SegmentsDirective, SegmentDirective, SegmentsPlugin, SegmentPlugin } from './segments.directive';\nimport { SeriesCollectionDirective, SeriesDirective, SeriesCollectionPlugin, SeriesPlugin } from './series.directive';\nimport { StripLinesDirective, StripLineDirective, StripLinesPlugin, StripLinePlugin } from './striplines.directive';\nimport { CategoriesDirective, CategoryDirective, CategoriesPlugin, CategoryPlugin } from './categories.directive';\nimport { MultiLevelLabelsDirective, MultiLevelLabelDirective, MultiLevelLabelsPlugin, MultiLevelLabelPlugin } from './multilevellabels.directive';\nimport { AxesDirective, AxisDirective, AxesPlugin, AxisPlugin } from './axes.directive';\nimport { RowsDirective, RowDirective, RowsPlugin, RowPlugin } from './rows.directive';\nimport { ColumnsDirective, ColumnDirective, ColumnsPlugin, ColumnPlugin } from './columns.directive';\nimport { RangeColorSettingsDirective, RangeColorSettingDirective, RangeColorSettingsPlugin, RangeColorSettingPlugin } from './rangecolorsettings.directive';\nimport { AnnotationsDirective, AnnotationDirective, AnnotationsPlugin, AnnotationPlugin } from './annotations.directive';\nimport { SelectedDataIndexesDirective, SelectedDataIndexDirective, SelectedDataIndexesPlugin, SelectedDataIndexPlugin } from './selecteddataindexes.directive';\nimport { IndicatorsDirective, IndicatorDirective, IndicatorsPlugin, IndicatorPlugin } from './indicators.directive';\nexport var properties = ['isLazyUpdate', 'plugins', 'allowExport', 'allowMultiSelection', 'annotations', 'axes', 'background', 'backgroundImage', 'border', 'chartArea', 'columns', 'crosshair', 'currencyCode', 'dataSource', 'description', 'enableAnimation', 'enableAutoIntervalOnBothAxis', 'enableCanvas', 'enableExport', 'enablePersistence', 'enableRtl', 'enableSideBySidePlacement', 'height', 'highlightColor', 'highlightMode', 'highlightPattern', 'indicators', 'isMultiSelect', 'isTransposed', 'legendSettings', 'locale', 'margin', 'palettes', 'primaryXAxis', 'primaryYAxis', 'rangeColorSettings', 'rows', 'selectedDataIndexes', 'selectionMode', 'selectionPattern', 'series', 'subTitle', 'subTitleStyle', 'tabIndex', 'theme', 'title', 'titleStyle', 'tooltip', 'useGroupingSeparator', 'width', 'zoomSettings', 'afterExport', 'animationComplete', 'annotationRender', 'axisLabelClick', 'axisLabelRender', 'axisMultiLabelRender', 'axisRangeCalculated', 'beforeExport', 'beforePrint', 'beforeResize', 'chartDoubleClick', 'chartMouseClick', 'chartMouseDown', 'chartMouseLeave', 'chartMouseMove', 'chartMouseUp', 'drag', 'dragComplete', 'dragEnd', 'dragStart', 'legendClick', 'legendRender', 'load', 'loaded', 'multiLevelLabelClick', 'onZooming', 'pointClick', 'pointDoubleClick', 'pointMove', 'pointRender', 'resized', 'scrollChanged', 'scrollEnd', 'scrollStart', 'selectionComplete', 'seriesRender', 'sharedTooltipRender', 'textRender', 'tooltipRender', 'zoomComplete'];\nexport var modelProps = ['dataSource'];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0], watch = testProp[1], emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged', 'update:modelValue');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n    var props_1 = modelProps_1[_i];\n    emitProbs.push('update:' + props_1);\n}\n/**\n * Represents Vuejs chart Component\n * ```vue\n * <ejs-chart></ejs-chart>\n * ```\n */\nexport var ChartComponent = vueDefineComponent({\n    name: 'ChartComponent',\n    mixins: [ComponentBase],\n    props: props,\n    watch: watch,\n    emits: emitProbs,\n    model: { event: 'modelchanged' },\n    provide: function () { return { custom: this.custom }; },\n    data: function () {\n        return {\n            ej2Instances: new Chart({}),\n            propKeys: properties,\n            models: modelProps,\n            hasChildDirective: true,\n            hasInjectedModules: true,\n            tagMapper: { \"e-series-collection\": { \"e-series\": { \"e-trendlines\": \"e-trendline\", \"e-segments\": \"e-segment\" } }, \"e-axes\": { \"e-axis\": { \"e-striplines\": \"e-stripline\", \"e-multilevellabels\": { \"e-multilevellabel\": { \"e-categories\": \"e-category\" } } } }, \"e-rows\": \"e-row\", \"e-columns\": \"e-column\", \"e-rangecolorsettings\": \"e-rangecolorsetting\", \"e-annotations\": \"e-annotation\", \"e-selecteddataindexes\": \"e-selecteddataindex\", \"e-indicators\": \"e-indicator\" },\n            tagNameMapper: { \"e-series-collection\": \"e-series\", \"e-striplines\": \"e-stripLines\", \"e-multilevellabels\": \"e-multiLevelLabels\", \"e-rangecolorsettings\": \"e-rangeColorSettings\", \"e-selecteddataindexes\": \"e-selectedDataIndexes\" },\n            isVue3: !isExecute,\n            templateCollection: {},\n        };\n    },\n    created: function () {\n        this.ej2Instances._trigger = this.ej2Instances.trigger;\n        this.ej2Instances.trigger = this.trigger;\n        this.bindProperties();\n        this.ej2Instances._setProperties = this.ej2Instances.setProperties;\n        this.ej2Instances.setProperties = this.setProperties;\n        this.ej2Instances.clearTemplate = this.clearTemplate;\n        this.updated = this.updated;\n    },\n    render: function (createElement) {\n        var h = !isExecute ? gh : createElement;\n        var slots = null;\n        if (!isNullOrUndefined(this.$slots.default)) {\n            slots = !isExecute ? this.$slots.default() : this.$slots.default;\n        }\n        return h('div', slots);\n    },\n    methods: {\n        clearTemplate: function (templateNames) {\n            if (!templateNames) {\n                templateNames = Object.keys(this.templateCollection || {});\n            }\n            if (templateNames.length && this.templateCollection) {\n                for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n                    var tempName = templateNames_1[_i];\n                    var elementCollection = this.templateCollection[tempName];\n                    if (elementCollection && elementCollection.length) {\n                        for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n                            var ele = elementCollection_1[_a];\n                            var destroy = getValue('__vue__.$destroy', ele);\n                            if (destroy) {\n                                ele.__vue__.$destroy();\n                            }\n                            if (ele.innerHTML) {\n                                ele.innerHTML = '';\n                            }\n                        }\n                        delete this.templateCollection[tempName];\n                    }\n                }\n            }\n        },\n        setProperties: function (prop, muteOnChange) {\n            var _this = this;\n            if (this.isVue3) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if (this.ej2Instances && this.ej2Instances._setProperties) {\n                this.ej2Instances._setProperties(prop, muteOnChange);\n            }\n            if (prop && this.models && this.models.length) {\n                Object.keys(prop).map(function (key) {\n                    _this.models.map(function (model) {\n                        if ((key === model) && !(/datasource/i.test(key))) {\n                            if (_this.isVue3) {\n                                _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n                            }\n                            else {\n                                _this.$emit('update:' + key, prop[key]);\n                                _this.$emit('modelchanged', prop[key]);\n                            }\n                        }\n                    });\n                });\n            }\n        },\n        trigger: function (eventName, eventProp, successHandler) {\n            if (!isExecute) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if ((eventName === 'change' || eventName === 'input') && this.models && (this.models.length !== 0)) {\n                var key = this.models.toString().match(/checked|value/) || [];\n                var propKey = key[0];\n                if (eventProp && key && !isUndefined(eventProp[propKey])) {\n                    if (!isExecute) {\n                        this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('update:modelValue', eventProp[propKey]);\n                    }\n                    else {\n                        if (eventName === 'change' || (this.$props && !this.$props.isLazyUpdate)) {\n                            this.$emit('update:' + propKey, eventProp[propKey]);\n                            this.$emit('modelchanged', eventProp[propKey]);\n                        }\n                    }\n                }\n            }\n            else if ((eventName === 'actionBegin' && eventProp.requestType === 'dateNavigate') && this.models && (this.models.length !== 0)) {\n                var key = this.models.toString().match(/currentView|selectedDate/) || [];\n                var propKey = key[0];\n                if (eventProp && key && !isUndefined(eventProp[propKey])) {\n                    if (!isExecute) {\n                        this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n                    }\n                    else {\n                        this.$emit('update:' + propKey, eventProp[propKey]);\n                        this.$emit('modelchanged', eventProp[propKey]);\n                    }\n                }\n            }\n            if ((this.ej2Instances && this.ej2Instances._trigger)) {\n                this.ej2Instances._trigger(eventName, eventProp, successHandler);\n            }\n        },\n        custom: function () {\n            this.updated();\n        },\n        addAxes: function (axisCollection) {\n            return this.ej2Instances.addAxes(axisCollection);\n        },\n        addSeries: function (seriesCollection) {\n            return this.ej2Instances.addSeries(seriesCollection);\n        },\n        clearSeries: function () {\n            return this.ej2Instances.clearSeries();\n        },\n        createChartSvg: function () {\n            return this.ej2Instances.createChartSvg();\n        },\n        export: function (type, fileName) {\n            return this.ej2Instances.export(type, fileName);\n        },\n        getLocalizedLabel: function (key) {\n            return this.ej2Instances.getLocalizedLabel(key);\n        },\n        hideCrosshair: function () {\n            return this.ej2Instances.hideCrosshair();\n        },\n        hideTooltip: function () {\n            return this.ej2Instances.hideTooltip();\n        },\n        isSecondaryAxis: function (axis) {\n            return this.ej2Instances.isSecondaryAxis(axis);\n        },\n        print: function (id) {\n            return this.ej2Instances.print(id);\n        },\n        processData: function (render) {\n            return this.ej2Instances.processData(render);\n        },\n        refreshLiveData: function () {\n            return this.ej2Instances.refreshLiveData();\n        },\n        removeAxis: function (index) {\n            return this.ej2Instances.removeAxis(index);\n        },\n        removeSeries: function (index) {\n            return this.ej2Instances.removeSeries(index);\n        },\n        setAnnotationValue: function (annotationIndex, content) {\n            return this.ej2Instances.setAnnotationValue(annotationIndex, content);\n        },\n        showCrosshair: function (x, y) {\n            return this.ej2Instances.showCrosshair(x, y);\n        },\n        showTooltip: function (x, y, isPoint) {\n            return this.ej2Instances.showTooltip(x, y, isPoint);\n        },\n    }\n});\nexport var ChartPlugin = {\n    name: 'ejs-chart',\n    install: function (Vue) {\n        Vue.component(ChartPlugin.name, ChartComponent);\n        Vue.component(SeriesPlugin.name, SeriesDirective);\n        Vue.component(SeriesCollectionPlugin.name, SeriesCollectionDirective);\n        Vue.component(TrendlinePlugin.name, TrendlineDirective);\n        Vue.component(TrendlinesPlugin.name, TrendlinesDirective);\n        Vue.component(SegmentPlugin.name, SegmentDirective);\n        Vue.component(SegmentsPlugin.name, SegmentsDirective);\n        Vue.component(AxisPlugin.name, AxisDirective);\n        Vue.component(AxesPlugin.name, AxesDirective);\n        Vue.component(StripLinePlugin.name, StripLineDirective);\n        Vue.component(StripLinesPlugin.name, StripLinesDirective);\n        Vue.component(MultiLevelLabelPlugin.name, MultiLevelLabelDirective);\n        Vue.component(MultiLevelLabelsPlugin.name, MultiLevelLabelsDirective);\n        Vue.component(CategoryPlugin.name, CategoryDirective);\n        Vue.component(CategoriesPlugin.name, CategoriesDirective);\n        Vue.component(RowPlugin.name, RowDirective);\n        Vue.component(RowsPlugin.name, RowsDirective);\n        Vue.component(ColumnPlugin.name, ColumnDirective);\n        Vue.component(ColumnsPlugin.name, ColumnsDirective);\n        Vue.component(RangeColorSettingPlugin.name, RangeColorSettingDirective);\n        Vue.component(RangeColorSettingsPlugin.name, RangeColorSettingsDirective);\n        Vue.component(AnnotationPlugin.name, AnnotationDirective);\n        Vue.component(AnnotationsPlugin.name, AnnotationsDirective);\n        Vue.component(SelectedDataIndexPlugin.name, SelectedDataIndexDirective);\n        Vue.component(SelectedDataIndexesPlugin.name, SelectedDataIndexesDirective);\n        Vue.component(IndicatorPlugin.name, IndicatorDirective);\n        Vue.component(IndicatorsPlugin.name, IndicatorsDirective);\n    }\n};\n","//! moment.js locale configuration\n//! locale : Yoruba Nigeria [yo]\n//! author : Atolagbe Abisoye : https://github.com/andela-batolagbe\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var yo = moment.defineLocale('yo', {\n        months: 'Sẹ́rẹ́_Èrèlè_Ẹrẹ̀nà_Ìgbé_Èbibi_Òkùdu_Agẹmo_Ògún_Owewe_Ọ̀wàrà_Bélú_Ọ̀pẹ̀̀'.split(\n            '_'\n        ),\n        monthsShort: 'Sẹ́r_Èrl_Ẹrn_Ìgb_Èbi_Òkù_Agẹ_Ògú_Owe_Ọ̀wà_Bél_Ọ̀pẹ̀̀'.split('_'),\n        weekdays: 'Àìkú_Ajé_Ìsẹ́gun_Ọjọ́rú_Ọjọ́bọ_Ẹtì_Àbámẹ́ta'.split('_'),\n        weekdaysShort: 'Àìk_Ajé_Ìsẹ́_Ọjr_Ọjb_Ẹtì_Àbá'.split('_'),\n        weekdaysMin: 'Àì_Aj_Ìs_Ọr_Ọb_Ẹt_Àb'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Ònì ni] LT',\n            nextDay: '[Ọ̀la ni] LT',\n            nextWeek: \"dddd [Ọsẹ̀ tón'bọ] [ni] LT\",\n            lastDay: '[Àna ni] LT',\n            lastWeek: 'dddd [Ọsẹ̀ tólọ́] [ni] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ní %s',\n            past: '%s kọjá',\n            s: 'ìsẹjú aayá die',\n            ss: 'aayá %d',\n            m: 'ìsẹjú kan',\n            mm: 'ìsẹjú %d',\n            h: 'wákati kan',\n            hh: 'wákati %d',\n            d: 'ọjọ́ kan',\n            dd: 'ọjọ́ %d',\n            M: 'osù kan',\n            MM: 'osù %d',\n            y: 'ọdún kan',\n            yy: 'ọdún %d',\n        },\n        dayOfMonthOrdinalParse: /ọjọ́\\s\\d{1,2}/,\n        ordinal: 'ọjọ́ %d',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return yo;\n\n})));\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DeadlineAlert.vue?vue&type=style&index=0&id=917cdcba&prod&lang=css\"","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n// eslint-disable-next-line @typescript-eslint/triple-slash-reference\n/// <reference path='../drop-down-list/drop-down-list-model.d.ts'/>\nimport { EventHandler, Property, Event, addClass, Browser, removeClass, detach } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, NotifyPropertyChanges, getValue, setValue } from '@syncfusion/ej2-base';\nimport { DropDownList, dropDownListClasses } from '../drop-down-list/drop-down-list';\nimport { Search } from '../common/incremental-search';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { DataManager, Predicate, Query } from '@syncfusion/ej2-data';\nvar SPINNER_CLASS = 'e-atc-spinner-icon';\ndropDownListClasses.root = 'e-combobox';\nvar inputObject = {\n    container: null,\n    buttons: []\n};\n/**\n * The ComboBox component allows the user to type a value or choose an option from the list of predefined options.\n * ```html\n * <select id=\"list\">\n *      <option value='1'>Badminton</option>\n *      <option value='2'>Basketball</option>\n *      <option value='3'>Cricket</option>\n *      <option value='4'>Football</option>\n *      <option value='5'>Tennis</option>\n * </select>\n * ```\n * ```typescript\n *   let games:ComboBox = new ComboBox();\n *   games.appendTo(\"#list\");\n * ```\n */\nvar ComboBox = /** @class */ (function (_super) {\n    __extends(ComboBox, _super);\n    /**\n     * *Constructor for creating the component\n     *\n     * @param {ComboBoxModel} options - Specifies the ComboBox model.\n     * @param {string | HTMLElement} element - Specifies the element to render as component.\n     * @private\n     */\n    function ComboBox(options, element) {\n        return _super.call(this, options, element) || this;\n    }\n    /**\n     * Initialize the event handler\n     *\n     * @private\n     * @returns {void}\n     */\n    ComboBox.prototype.preRender = function () {\n        _super.prototype.preRender.call(this);\n    };\n    ComboBox.prototype.getLocaleName = function () {\n        return 'combo-box';\n    };\n    ComboBox.prototype.wireEvent = function () {\n        if (this.getModuleName() === 'combobox') {\n            EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur, this);\n            EventHandler.add(this.inputWrapper.container, 'blur', this.onBlurHandler, this);\n        }\n        if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n            EventHandler.add(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick, this);\n        }\n        EventHandler.add(this.inputElement, 'focus', this.targetFocus, this);\n        if (!this.readonly) {\n            EventHandler.add(this.inputElement, 'input', this.onInput, this);\n            EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n            EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n            EventHandler.add(this.inputElement, 'paste', this.pasteHandler, this);\n            EventHandler.add(window, 'resize', this.windowResize, this);\n        }\n        this.bindCommonEvent();\n    };\n    ComboBox.prototype.preventBlur = function (e) {\n        if ((!this.allowFiltering && document.activeElement !== this.inputElement &&\n            !document.activeElement.classList.contains(dropDownListClasses.input) && Browser.isDevice || !Browser.isDevice)) {\n            e.preventDefault();\n        }\n    };\n    ComboBox.prototype.onBlurHandler = function (e) {\n        var inputValue = this.inputElement && this.inputElement.value === '' ?\n            null : this.inputElement && this.inputElement.value;\n        if (!isNullOrUndefined(this.listData) && !isNullOrUndefined(inputValue) && inputValue !== this.text) {\n            this.customValue(e);\n        }\n        _super.prototype.onBlurHandler.call(this, e);\n    };\n    ComboBox.prototype.targetElement = function () {\n        return this.inputElement;\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    ComboBox.prototype.setOldText = function (text) {\n        Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n        this.customValue();\n        this.removeSelection();\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    ComboBox.prototype.setOldValue = function (value) {\n        if (this.allowCustom) {\n            this.valueMuteChange(this.value);\n        }\n        else {\n            this.valueMuteChange(null);\n        }\n        this.removeSelection();\n        this.setHiddenValue();\n    };\n    ComboBox.prototype.valueMuteChange = function (value) {\n        var inputValue = isNullOrUndefined(value) ? null : value.toString();\n        Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n        this.setProperties({ value: value, text: value, index: null }, true);\n        this.activeIndex = this.index;\n        var fields = this.fields;\n        var dataItem = {};\n        dataItem[fields.text] = isNullOrUndefined(value) ? null : value.toString();\n        dataItem[fields.value] = isNullOrUndefined(value) ? null : value.toString();\n        this.itemData = dataItem;\n        this.item = null;\n        if (this.previousValue !== this.value) {\n            this.detachChangeEvent(null);\n        }\n    };\n    ComboBox.prototype.updateValues = function () {\n        if (!isNullOrUndefined(this.value)) {\n            var li = this.getElementByValue(this.value);\n            var isExistItem = !isNullOrUndefined(li) ? true : false;\n            if (this.enableVirtualization && this.value) {\n                var fields = (this.fields.value) ? this.fields.value : '';\n                if (this.dataSource instanceof DataManager && this.virtualGroupDataSource) {\n                    var getItem = new DataManager(this.virtualGroupDataSource).executeLocal(new Query().where(new Predicate(fields, 'equal', this.value)));\n                    if (getItem && getItem.length > 0) {\n                        this.itemData = getItem[0];\n                        isExistItem = true;\n                        var dataItem = this.getItemData();\n                        if ((this.value === dataItem.value && this.text !== dataItem.text) || (this.value !== dataItem.value && this.text === dataItem.text)) {\n                            this.setProperties({ 'text': dataItem.text, 'value': dataItem.value });\n                        }\n                    }\n                }\n                else {\n                    var getItem = new DataManager(this.dataSource).executeLocal(new Query().where(new Predicate(fields, 'equal', this.value)));\n                    if (getItem && getItem.length > 0) {\n                        this.itemData = getItem[0];\n                        isExistItem = true;\n                        var dataItem = this.getItemData();\n                        if ((this.value === dataItem.value && this.text !== dataItem.text) || (this.value !== dataItem.value && this.text === dataItem.text)) {\n                            this.setProperties({ 'text': dataItem.text, 'value': dataItem.value });\n                        }\n                    }\n                }\n            }\n            if (li) {\n                this.setSelection(li, null);\n            }\n            else if ((!this.enableVirtualization && this.allowCustom) || (this.allowCustom && this.enableVirtualization && !isExistItem)) {\n                this.valueMuteChange(this.value);\n            }\n            else if (!this.enableVirtualization || (this.enableVirtualization && !isExistItem)) {\n                this.valueMuteChange(null);\n            }\n        }\n        else if (this.text && isNullOrUndefined(this.value)) {\n            var li = this.getElementByText(this.text);\n            if (li) {\n                this.setSelection(li, null);\n            }\n            else {\n                Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n                this.customValue();\n            }\n        }\n        else {\n            this.setSelection(this.liCollections[this.activeIndex], null);\n        }\n        this.setHiddenValue();\n        Input.setValue(this.text, this.inputElement, this.floatLabelType, this.showClearButton);\n    };\n    ComboBox.prototype.updateIconState = function () {\n        if (this.showClearButton) {\n            if (this.inputElement && this.inputElement.value !== '' && !this.readonly) {\n                removeClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n            }\n            else {\n                addClass([this.inputWrapper.clearButton], dropDownListClasses.clearIconHide);\n            }\n        }\n    };\n    ComboBox.prototype.getAriaAttributes = function () {\n        var ariaAttributes = {\n            'role': 'combobox',\n            'aria-autocomplete': 'both',\n            'aria-labelledby': this.hiddenElement.id,\n            'aria-expanded': 'false',\n            'aria-readonly': this.readonly.toString(),\n            'autocomplete': 'off',\n            'autocapitalize': 'off',\n            'spellcheck': 'false'\n        };\n        return ariaAttributes;\n    };\n    ComboBox.prototype.searchLists = function (e) {\n        this.isTyped = true;\n        if (this.isFiltering()) {\n            _super.prototype.searchLists.call(this, e);\n            if (this.ulElement && this.filterInput.value.trim() === '') {\n                this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n            }\n        }\n        else {\n            if (this.ulElement && this.inputElement.value === '' && this.preventAutoFill) {\n                this.setHoverList(this.ulElement.querySelector('.' + dropDownListClasses.li));\n            }\n            this.incrementalSearch(e);\n        }\n    };\n    ComboBox.prototype.getNgDirective = function () {\n        return 'EJS-COMBOBOX';\n    };\n    ComboBox.prototype.setSearchBox = function () {\n        this.filterInput = this.inputElement;\n        var searchBoxContainer = (this.isFiltering() || (this.isReact && this.getModuleName() === 'combobox')) ? this.inputWrapper : inputObject;\n        return searchBoxContainer;\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    ComboBox.prototype.onActionComplete = function (ulElement, list, e, isUpdated) {\n        var _this = this;\n        _super.prototype.onActionComplete.call(this, ulElement, list, e);\n        if (this.isSelectCustom) {\n            this.removeSelection();\n        }\n        if (!this.preventAutoFill && this.getModuleName() === 'combobox' && this.isTyped && !this.enableVirtualization) {\n            setTimeout(function () {\n                _this.inlineSearch();\n            });\n        }\n    };\n    ComboBox.prototype.getFocusElement = function () {\n        var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n        var selected = !isNullOrUndefined(this.list) ? this.list.querySelector('.' + dropDownListClasses.selected) : this.list;\n        var isSelected = dataItem.text && dataItem.text.toString() === this.inputElement.value && !isNullOrUndefined(selected);\n        if (isSelected) {\n            return selected;\n        }\n        if ((Browser.isDevice && !this.isDropDownClick || !Browser.isDevice) &&\n            !isNullOrUndefined(this.liCollections) && this.liCollections.length > 0) {\n            var inputValue = this.inputElement.value;\n            var dataSource = this.sortedData;\n            var type = this.typeOfData(dataSource).typeof;\n            var activeItem = Search(inputValue, this.liCollections, this.filterType, true, dataSource, this.fields, type);\n            if (this.enableVirtualization && inputValue !== '' && this.getModuleName() !== 'autocomplete' && this.isTyped && !this.allowFiltering) {\n                var updatingincrementalindex = false;\n                if ((this.viewPortInfo.endIndex >= this.incrementalEndIndex && this.incrementalEndIndex <= this.totalItemCount) || this.incrementalEndIndex == 0) {\n                    updatingincrementalindex = true;\n                    this.incrementalStartIndex = this.incrementalEndIndex;\n                    if (this.incrementalEndIndex == 0) {\n                        this.incrementalEndIndex = 100 > this.totalItemCount ? this.totalItemCount : 100;\n                    }\n                    else {\n                        this.incrementalEndIndex = this.incrementalEndIndex + 100 > this.totalItemCount ? this.totalItemCount : this.incrementalEndIndex + 100;\n                    }\n                    this.updateIncrementalInfo(this.incrementalStartIndex, this.incrementalEndIndex);\n                    updatingincrementalindex = true;\n                }\n                if (this.viewPortInfo.startIndex !== 0 || updatingincrementalindex) {\n                    this.updateIncrementalView(0, this.itemCount);\n                }\n                activeItem = Search(inputValue, this.incrementalLiCollections, this.filterType, true, dataSource, this.fields, type);\n                while (isNullOrUndefined(activeItem) && this.incrementalEndIndex < this.totalItemCount) {\n                    this.incrementalStartIndex = this.incrementalEndIndex;\n                    this.incrementalEndIndex = this.incrementalEndIndex + 100 > this.totalItemCount ? this.totalItemCount : this.incrementalEndIndex + 100;\n                    this.updateIncrementalInfo(this.incrementalStartIndex, this.incrementalEndIndex);\n                    updatingincrementalindex = true;\n                    if (this.viewPortInfo.startIndex !== 0 || updatingincrementalindex) {\n                        this.updateIncrementalView(0, this.itemCount);\n                    }\n                    activeItem = Search(inputValue, this.incrementalLiCollections, this.filterType, true, dataSource, this.fields, type);\n                    if (!isNullOrUndefined(activeItem)) {\n                        break;\n                    }\n                    if (isNullOrUndefined(activeItem) && this.incrementalEndIndex >= this.totalItemCount) {\n                        this.incrementalStartIndex = 0;\n                        this.incrementalEndIndex = 100 > this.totalItemCount ? this.totalItemCount : 100;\n                        break;\n                    }\n                }\n                if (activeItem.index) {\n                    if ((!(this.viewPortInfo.startIndex >= activeItem.index)) || (!(activeItem.index >= this.viewPortInfo.endIndex))) {\n                        var startIndex = activeItem.index - ((this.itemCount / 2) - 2) > 0 ? activeItem.index - ((this.itemCount / 2) - 2) : 0;\n                        var endIndex = this.viewPortInfo.startIndex + this.itemCount > this.totalItemCount ? this.totalItemCount : this.viewPortInfo.startIndex + this.itemCount;\n                        if (startIndex != this.viewPortInfo.startIndex) {\n                            this.updateIncrementalView(startIndex, endIndex);\n                        }\n                    }\n                }\n                if (!isNullOrUndefined(activeItem.item)) {\n                    var index_1 = this.getIndexByValue(activeItem.item.getAttribute('data-value')) - this.skeletonCount;\n                    if (index_1 > this.itemCount / 2) {\n                        var startIndex = this.viewPortInfo.startIndex + ((this.itemCount / 2) - 2) < this.totalItemCount ? this.viewPortInfo.startIndex + ((this.itemCount / 2) - 2) : this.totalItemCount;\n                        var endIndex = this.viewPortInfo.startIndex + this.itemCount > this.totalItemCount ? this.totalItemCount : this.viewPortInfo.startIndex + this.itemCount;\n                        this.updateIncrementalView(startIndex, endIndex);\n                    }\n                    activeItem.item = this.getElementByValue(activeItem.item.getAttribute('data-value'));\n                }\n                else {\n                    this.updateIncrementalView(0, this.itemCount);\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    this.list.getElementsByClassName('e-virtual-ddl-content')[0].style = this.getTransformValues();\n                    this.list.scrollTop = 0;\n                }\n                if (activeItem && activeItem.item) {\n                    activeItem.item = this.getElementByValue(activeItem.item.getAttribute('data-value'));\n                }\n            }\n            var activeElement = activeItem.item;\n            if (!isNullOrUndefined(activeElement)) {\n                var count = this.getIndexByValue(activeElement.getAttribute('data-value')) - 1;\n                var height = parseInt(getComputedStyle(this.liCollections[0], null).getPropertyValue('height'), 10);\n                if (!isNaN(height) && this.getModuleName() !== 'autocomplete') {\n                    this.removeFocus();\n                    var fixedHead = this.fields.groupBy ? this.liCollections[0].offsetHeight : 0;\n                    if (!this.enableVirtualization) {\n                        this.list.scrollTop = count * height + fixedHead;\n                    }\n                    else {\n                        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                        this.list.getElementsByClassName('e-virtual-ddl-content')[0].style = this.getTransformValues();\n                        if (this.enableVirtualization && !this.fields.groupBy) {\n                            var selectedLiOffsetTop = this.virtualListInfo && this.virtualListInfo.startIndex ? activeElement.offsetTop + (this.virtualListInfo.startIndex * activeElement.offsetHeight) : activeElement.offsetTop;\n                            this.list.scrollTop = selectedLiOffsetTop - (this.list.querySelectorAll('.e-virtual-list').length * activeElement.offsetHeight);\n                        }\n                    }\n                    addClass([activeElement], dropDownListClasses.focus);\n                }\n            }\n            else {\n                if (this.isSelectCustom && this.inputElement.value.trim() !== '') {\n                    this.removeFocus();\n                    if (!this.enableVirtualization) {\n                        this.list.scrollTop = 0;\n                    }\n                }\n            }\n            return activeElement;\n        }\n        else {\n            return null;\n        }\n    };\n    ComboBox.prototype.setValue = function (e) {\n        if (e && e.type === 'keydown' && e.action === 'enter') {\n            this.removeFillSelection();\n        }\n        if (this.autofill && this.getModuleName() === 'combobox' && e && e.type === 'keydown' && e.action !== 'enter') {\n            this.preventAutoFill = false;\n            this.inlineSearch(e);\n            return false;\n        }\n        else {\n            return _super.prototype.setValue.call(this, e);\n        }\n    };\n    ComboBox.prototype.checkCustomValue = function () {\n        this.itemData = this.getDataByValue(this.value);\n        var dataItem = this.getItemData();\n        if (!(this.allowCustom && isNullOrUndefined(dataItem.value) && isNullOrUndefined(dataItem.text))) {\n            this.setProperties({ 'value': dataItem.value }, !this.allowCustom);\n        }\n    };\n    /**\n     * Shows the spinner loader.\n     *\n     * @returns {void}\n\n     */\n    ComboBox.prototype.showSpinner = function () {\n        if (isNullOrUndefined(this.spinnerElement)) {\n            this.spinnerElement = (this.getModuleName() === 'autocomplete') ? (this.inputWrapper.buttons[0] ||\n                this.inputWrapper.clearButton ||\n                Input.appendSpan('e-input-group-icon ' + SPINNER_CLASS, this.inputWrapper.container, this.createElement)) :\n                (this.inputWrapper.buttons[0] || this.inputWrapper.clearButton);\n            addClass([this.spinnerElement], dropDownListClasses.disableIcon);\n            createSpinner({\n                target: this.spinnerElement,\n                width: Browser.isDevice ? '16px' : '14px'\n            }, this.createElement);\n            showSpinner(this.spinnerElement);\n        }\n    };\n    /**\n     * Hides the spinner loader.\n     *\n     * @returns {void}\n\n     */\n    ComboBox.prototype.hideSpinner = function () {\n        if (!isNullOrUndefined(this.spinnerElement)) {\n            hideSpinner(this.spinnerElement);\n            removeClass([this.spinnerElement], dropDownListClasses.disableIcon);\n            if (this.spinnerElement.classList.contains(SPINNER_CLASS)) {\n                detach(this.spinnerElement);\n            }\n            else {\n                this.spinnerElement.innerHTML = '';\n            }\n            this.spinnerElement = null;\n        }\n    };\n    ComboBox.prototype.setAutoFill = function (activeElement, isHover) {\n        if (!isHover) {\n            this.setHoverList(activeElement);\n        }\n        if (this.autofill && !this.preventAutoFill) {\n            var currentValue = this.getTextByValue(activeElement.getAttribute('data-value')).toString();\n            var currentFillValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n            if (this.getModuleName() === 'combobox') {\n                if (!this.isSelected && this.previousValue !== currentFillValue) {\n                    this.updateSelectedItem(activeElement, null);\n                    this.isSelected = true;\n                    this.previousValue = this.getFormattedValue(activeElement.getAttribute('data-value'));\n                }\n                else {\n                    this.updateSelectedItem(activeElement, null, true);\n                }\n            }\n            if (!this.isAndroidAutoFill(currentValue)) {\n                this.setAutoFillSelection(currentValue, isHover);\n            }\n        }\n    };\n    ComboBox.prototype.isAndroidAutoFill = function (value) {\n        if (Browser.isAndroid) {\n            var currentPoints = this.getSelectionPoints();\n            var prevEnd = this.prevSelectPoints.end;\n            var curEnd = currentPoints.end;\n            var prevStart = this.prevSelectPoints.start;\n            var curStart = currentPoints.start;\n            if (prevEnd !== 0 && ((prevEnd === value.length && prevStart === value.length) ||\n                (prevStart > curStart && prevEnd > curEnd) || (prevEnd === curEnd && prevStart === curStart))) {\n                return true;\n            }\n            else {\n                return false;\n            }\n        }\n        else {\n            return false;\n        }\n    };\n    ComboBox.prototype.clearAll = function (e, property) {\n        if (isNullOrUndefined(property) || (!isNullOrUndefined(property) && isNullOrUndefined(property.dataSource))) {\n            _super.prototype.clearAll.call(this, e);\n        }\n        if (this.isFiltering() && !isNullOrUndefined(e) && e.target === this.inputWrapper.clearButton) {\n            this.searchLists(e);\n        }\n    };\n    ComboBox.prototype.isSelectFocusItem = function (element) {\n        return !isNullOrUndefined(element);\n    };\n    ComboBox.prototype.inlineSearch = function (e) {\n        var isKeyNavigate = (e && (e.action === 'down' || e.action === 'up' ||\n            e.action === 'home' || e.action === 'end' || e.action === 'pageUp' || e.action === 'pageDown'));\n        var activeElement = isKeyNavigate ? this.liCollections[this.activeIndex] : this.getFocusElement();\n        if (!isNullOrUndefined(activeElement)) {\n            if (!isKeyNavigate) {\n                var value = this.getFormattedValue(activeElement.getAttribute('data-value'));\n                this.activeIndex = this.getIndexByValue(value);\n                this.activeIndex = !isNullOrUndefined(this.activeIndex) ? this.activeIndex : null;\n            }\n            this.preventAutoFill = this.inputElement.value === '' ? false : this.preventAutoFill;\n            this.setAutoFill(activeElement, isKeyNavigate);\n        }\n        else if (this.inputElement.value === '') {\n            this.activeIndex = null;\n            if (!isNullOrUndefined(this.list)) {\n                if (!this.enableVirtualization) {\n                    this.list.scrollTop = 0;\n                }\n                var focusItem = this.list.querySelector('.' + dropDownListClasses.li);\n                this.setHoverList(focusItem);\n            }\n        }\n        else {\n            this.activeIndex = null;\n            this.removeSelection();\n            if (this.liCollections && this.liCollections.length > 0 && !this.isCustomFilter) {\n                this.removeFocus();\n            }\n        }\n    };\n    ComboBox.prototype.incrementalSearch = function (e) {\n        this.showPopup(e);\n        if (!isNullOrUndefined(this.listData)) {\n            this.inlineSearch(e);\n            e.preventDefault();\n        }\n    };\n    ComboBox.prototype.setAutoFillSelection = function (currentValue, isKeyNavigate) {\n        if (isKeyNavigate === void 0) { isKeyNavigate = false; }\n        var selection = this.getSelectionPoints();\n        var value = this.inputElement.value.substr(0, selection.start);\n        if (value && (value.toLowerCase() === currentValue.substr(0, selection.start).toLowerCase())) {\n            var inputValue = value + currentValue.substr(value.length, currentValue.length);\n            Input.setValue(inputValue, this.inputElement, this.floatLabelType, this.showClearButton);\n            this.inputElement.setSelectionRange(selection.start, this.inputElement.value.length);\n        }\n        else if (isKeyNavigate) {\n            Input.setValue(currentValue, this.inputElement, this.floatLabelType, this.showClearButton);\n            this.inputElement.setSelectionRange(0, this.inputElement.value.length);\n        }\n    };\n    ComboBox.prototype.getValueByText = function (text) {\n        return _super.prototype.getValueByText.call(this, text, true, this.ignoreAccent);\n    };\n    ComboBox.prototype.unWireEvent = function () {\n        if (this.getModuleName() === 'combobox') {\n            EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.preventBlur);\n            EventHandler.remove(this.inputWrapper.container, 'blur', this.onBlurHandler);\n        }\n        if (!isNullOrUndefined(this.inputWrapper.buttons[0])) {\n            EventHandler.remove(this.inputWrapper.buttons[0], 'mousedown', this.dropDownClick);\n        }\n        if (this.inputElement) {\n            EventHandler.remove(this.inputElement, 'focus', this.targetFocus);\n            if (!this.readonly) {\n                EventHandler.remove(this.inputElement, 'input', this.onInput);\n                EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n                EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n                EventHandler.remove(this.inputElement, 'paste', this.pasteHandler);\n                EventHandler.remove(window, 'resize', this.windowResize);\n            }\n        }\n        this.unBindCommonEvent();\n    };\n    ComboBox.prototype.setSelection = function (li, e) {\n        _super.prototype.setSelection.call(this, li, e);\n        if (!isNullOrUndefined(li) && !this.autofill && !this.isDropDownClick) {\n            this.removeFocus();\n        }\n    };\n    ComboBox.prototype.selectCurrentItem = function (e) {\n        var li;\n        if (this.isPopupOpen) {\n            if (this.isSelected) {\n                li = this.list.querySelector('.' + dropDownListClasses.selected);\n            }\n            else {\n                li = this.list.querySelector('.' + dropDownListClasses.focus);\n            }\n            if (li) {\n                this.setSelection(li, e);\n                this.isTyped = false;\n            }\n            if (this.isSelected) {\n                this.isSelectCustom = false;\n                this.onChangeEvent(e);\n            }\n        }\n        if (e.action === 'enter' && this.inputElement.value.trim() === '') {\n            this.clearAll(e);\n        }\n        else if (this.isTyped && !this.isSelected && isNullOrUndefined(li)) {\n            this.customValue(e);\n        }\n        this.hidePopup(e);\n    };\n    ComboBox.prototype.setHoverList = function (li) {\n        this.removeSelection();\n        if (this.isValidLI(li) && !li.classList.contains(dropDownListClasses.selected)) {\n            this.removeFocus();\n            li.classList.add(dropDownListClasses.focus);\n        }\n    };\n    ComboBox.prototype.targetFocus = function (e) {\n        if (Browser.isDevice && !this.allowFiltering) {\n            this.preventFocus = false;\n        }\n        this.onFocus(e);\n        Input.calculateWidth(this.inputElement, this.inputWrapper.container);\n    };\n    ComboBox.prototype.dropDownClick = function (e) {\n        e.preventDefault();\n        if (Browser.isDevice && !this.isFiltering()) {\n            this.preventFocus = true;\n        }\n        _super.prototype.dropDownClick.call(this, e);\n    };\n    ComboBox.prototype.customValue = function (e) {\n        var _this = this;\n        var value = this.getValueByText(this.inputElement.value);\n        if (!this.allowCustom && this.inputElement.value !== '') {\n            var previousValue = this.previousValue;\n            var currentValue = this.value;\n            this.setProperties({ value: value });\n            if (isNullOrUndefined(this.value)) {\n                Input.setValue('', this.inputElement, this.floatLabelType, this.showClearButton);\n            }\n            if (this.autofill && previousValue === this.value && currentValue !== this.value) {\n                this.onChangeEvent(null);\n            }\n        }\n        else if (this.inputElement.value.trim() !== '') {\n            var previousValue_1 = this.value;\n            if (isNullOrUndefined(value)) {\n                var value_1 = this.inputElement.value === '' ? null : this.inputElement.value;\n                // eslint-disable-next-line max-len\n                var eventArgs = { text: value_1, item: {} };\n                if (!this.initial) {\n                    this.trigger('customValueSpecifier', eventArgs, function (eventArgs) {\n                        _this.updateCustomValueCallback(value_1, eventArgs, previousValue_1, e);\n                    });\n                }\n                else {\n                    this.updateCustomValueCallback(value_1, eventArgs, previousValue_1);\n                }\n            }\n            else {\n                this.isSelectCustom = false;\n                this.setProperties({ value: value });\n                if (previousValue_1 !== this.value) {\n                    this.onChangeEvent(e);\n                }\n            }\n        }\n        else if (this.allowCustom) {\n            this.isSelectCustom = true;\n        }\n    };\n    ComboBox.prototype.updateCustomValueCallback = function (value, eventArgs, previousValue, e) {\n        var fields = this.fields;\n        var item = eventArgs.item;\n        var dataItem = {};\n        if (item && getValue(fields.text, item) && getValue(fields.value, item)) {\n            dataItem = item;\n        }\n        else {\n            setValue(fields.text, value, dataItem);\n            setValue(fields.value, value, dataItem);\n        }\n        this.itemData = dataItem;\n        var changeData = {\n            text: getValue(fields.text, this.itemData),\n            value: getValue(fields.value, this.itemData),\n            index: null\n        };\n        this.setProperties(changeData, true);\n        this.setSelection(null, null);\n        this.isSelectCustom = true;\n        if (previousValue !== this.value) {\n            this.onChangeEvent(e);\n        }\n    };\n    /**\n     * Dynamically change the value of properties.\n     *\n     * @param {ComboBoxModel} newProp - Returns the dynamic property value of the component.\n     * @param {ComboBoxModel} oldProp - Returns the previous property value of the component.\n     * @private\n     * @returns {void}\n     */\n    ComboBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n        if (this.getModuleName() === 'combobox') {\n            this.checkData(newProp);\n            this.setUpdateInitial(['fields', 'query', 'dataSource'], newProp);\n        }\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'readonly':\n                    Input.setReadonly(this.readonly, this.inputElement);\n                    if (this.readonly) {\n                        EventHandler.remove(this.inputElement, 'input', this.onInput);\n                        EventHandler.remove(this.inputElement, 'keyup', this.onFilterUp);\n                        EventHandler.remove(this.inputElement, 'keydown', this.onFilterDown);\n                    }\n                    else {\n                        EventHandler.add(this.inputElement, 'input', this.onInput, this);\n                        EventHandler.add(this.inputElement, 'keyup', this.onFilterUp, this);\n                        EventHandler.add(this.inputElement, 'keydown', this.onFilterDown, this);\n                    }\n                    this.setReadOnly();\n                    break;\n                case 'allowFiltering':\n                    this.setSearchBox();\n                    if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n                        _super.prototype.renderList.call(this);\n                    }\n                    break;\n                case 'allowCustom':\n                    break;\n                default: {\n                    // eslint-disable-next-line max-len\n                    var comboProps = this.getPropObject(prop, newProp, oldProp);\n                    _super.prototype.onPropertyChanged.call(this, comboProps.newProperty, comboProps.oldProperty);\n                    if (this.isFiltering() && prop === 'dataSource' && isNullOrUndefined(this.list) && this.itemTemplate &&\n                        this.getModuleName() === 'combobox') {\n                        _super.prototype.renderList.call(this);\n                    }\n                    break;\n                }\n            }\n        }\n    };\n    /**\n     * To initialize the control rendering.\n     *\n     * @private\n     * @returns {void}\n     */\n    ComboBox.prototype.render = function () {\n        _super.prototype.render.call(this);\n        this.setSearchBox();\n        if (this.isFiltering() && this.getModuleName() === 'combobox' && isNullOrUndefined(this.list)) {\n            _super.prototype.renderList.call(this);\n        }\n        this.renderComplete();\n    };\n    /**\n     * Return the module name of this component.\n     *\n     * @private\n     * @returns {string} Return the module name of this component.\n     */\n    ComboBox.prototype.getModuleName = function () {\n        return 'combobox';\n    };\n    /**\n     * Adds a new item to the combobox popup list. By default, new item appends to the list as the last item,\n     * but you can insert based on the index parameter.\n     *\n     * @param { Object[] } items - Specifies an array of JSON data or a JSON data.\n     * @param { number } itemIndex - Specifies the index to place the newly added item in the popup list.\n     * @returns {void}\n\n     */\n    ComboBox.prototype.addItem = function (items, itemIndex) {\n        _super.prototype.addItem.call(this, items, itemIndex);\n    };\n    /**\n     * To filter the data from given data source by using query\n     *\n     * @param {Object[] | DataManager } dataSource - Set the data source to filter.\n     * @param {Query} query - Specify the query to filter the data.\n     * @param {FieldSettingsModel} fields - Specify the fields to map the column in the data table.\n     * @returns {void}\n\n     */\n    ComboBox.prototype.filter = function (dataSource, query, fields) {\n        _super.prototype.filter.call(this, dataSource, query, fields);\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-param */\n    /**\n     * Opens the popup that displays the list of items.\n     *\n     * @returns {void}\n\n     */\n    ComboBox.prototype.showPopup = function (e) {\n        /* eslint-enable valid-jsdoc, jsdoc/require-param */\n        _super.prototype.showPopup.call(this, e);\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-param */\n    /**\n     * Hides the popup if it is in open state.\n     *\n     * @returns {void}\n\n     */\n    ComboBox.prototype.hidePopup = function (e) {\n        /* eslint-enable valid-jsdoc, jsdoc/require-param */\n        var inputValue = this.inputElement && this.inputElement.value === '' ? null\n            : this.inputElement && this.inputElement.value;\n        if (!isNullOrUndefined(this.listData)) {\n            var isEscape = this.isEscapeKey;\n            if (this.isEscapeKey) {\n                Input.setValue(this.typedString, this.inputElement, this.floatLabelType, this.showClearButton);\n                this.isEscapeKey = false;\n            }\n            if (this.autofill) {\n                this.removeFillSelection();\n            }\n            var dataItem = this.isSelectCustom ? { text: '' } : this.getItemData();\n            var selected = !isNullOrUndefined(this.list) ? this.list.querySelector('.' + dropDownListClasses.selected) : null;\n            if (this.inputElement && dataItem.text === this.inputElement.value && !isNullOrUndefined(selected)) {\n                if (this.isSelected) {\n                    this.onChangeEvent(e);\n                    this.isSelectCustom = false;\n                }\n                _super.prototype.hidePopup.call(this, e);\n                return;\n            }\n            if (this.getModuleName() === 'combobox' && this.inputElement.value.trim() !== '') {\n                var dataSource = this.sortedData;\n                var type = this.typeOfData(dataSource).typeof;\n                var searchItem = Search(this.inputElement.value, this.liCollections, 'Equal', true, dataSource, this.fields, type);\n                this.selectedLI = searchItem.item;\n                if (isNullOrUndefined(searchItem.index)) {\n                    searchItem.index = Search(this.inputElement.value, this.liCollections, 'StartsWith', true, dataSource, this.fields, type).index;\n                }\n                this.activeIndex = searchItem.index;\n                if (!isNullOrUndefined(this.selectedLI)) {\n                    this.updateSelectedItem(this.selectedLI, null, true);\n                }\n                else if (isEscape) {\n                    this.isSelectCustom = true;\n                    this.removeSelection();\n                }\n            }\n            if (!this.isEscapeKey && this.isTyped && !this.isInteracted) {\n                this.customValue(e);\n            }\n        }\n        if (isNullOrUndefined(this.listData) && this.allowCustom && !isNullOrUndefined(inputValue) && inputValue !== this.value) {\n            this.customValue();\n        }\n        _super.prototype.hidePopup.call(this, e);\n    };\n    /**\n     * Sets the focus to the component for interaction.\n     *\n     * @returns {void}\n     */\n    ComboBox.prototype.focusIn = function () {\n        if (!this.enabled) {\n            return;\n        }\n        if (Browser.isDevice && !this.isFiltering()) {\n            this.preventFocus = true;\n        }\n        _super.prototype.focusIn.call(this);\n    };\n    /**\n     * Allows you to clear the selected values from the component.\n     *\n     * @returns {void}\n\n     */\n    ComboBox.prototype.clear = function () {\n        this.value = null;\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-param */\n    /**\n     * Moves the focus from the component if the component is already focused.\n     *\n     * @returns {void}\n\n     */\n    ComboBox.prototype.focusOut = function (e) {\n        /* eslint-enable valid-jsdoc, jsdoc/require-param */\n        _super.prototype.focusOut.call(this, e);\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Gets all the list items bound on this component.\n     *\n     * @returns {Element[]}\n\n     */\n    ComboBox.prototype.getItems = function () {\n        return _super.prototype.getItems.call(this);\n    };\n    /**\n     * Gets the data Object that matches the given value.\n     *\n     * @param { string | number } value - Specifies the value of the list item.\n     * @returns {Object}\n\n     */\n    ComboBox.prototype.getDataByValue = function (value) {\n        return _super.prototype.getDataByValue.call(this, value);\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n    ComboBox.prototype.renderHightSearch = function () {\n        // update high light search\n    };\n    __decorate([\n        Property(false)\n    ], ComboBox.prototype, \"autofill\", void 0);\n    __decorate([\n        Property(true)\n    ], ComboBox.prototype, \"allowCustom\", void 0);\n    __decorate([\n        Property({})\n    ], ComboBox.prototype, \"htmlAttributes\", void 0);\n    __decorate([\n        Property(false)\n    ], ComboBox.prototype, \"allowFiltering\", void 0);\n    __decorate([\n        Property(null)\n    ], ComboBox.prototype, \"query\", void 0);\n    __decorate([\n        Property(null)\n    ], ComboBox.prototype, \"index\", void 0);\n    __decorate([\n        Property(true)\n    ], ComboBox.prototype, \"showClearButton\", void 0);\n    __decorate([\n        Property(false)\n    ], ComboBox.prototype, \"enableRtl\", void 0);\n    __decorate([\n        Event()\n    ], ComboBox.prototype, \"customValueSpecifier\", void 0);\n    __decorate([\n        Event()\n    ], ComboBox.prototype, \"filtering\", void 0);\n    __decorate([\n        Property(null)\n    ], ComboBox.prototype, \"valueTemplate\", void 0);\n    __decorate([\n        Property('Never')\n    ], ComboBox.prototype, \"floatLabelType\", void 0);\n    __decorate([\n        Property(null)\n    ], ComboBox.prototype, \"filterBarPlaceholder\", void 0);\n    __decorate([\n        Property(null)\n    ], ComboBox.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(null)\n    ], ComboBox.prototype, \"headerTemplate\", void 0);\n    __decorate([\n        Property(null)\n    ], ComboBox.prototype, \"footerTemplate\", void 0);\n    __decorate([\n        Property(null)\n    ], ComboBox.prototype, \"placeholder\", void 0);\n    __decorate([\n        Property('100%')\n    ], ComboBox.prototype, \"width\", void 0);\n    __decorate([\n        Property('300px')\n    ], ComboBox.prototype, \"popupHeight\", void 0);\n    __decorate([\n        Property('100%')\n    ], ComboBox.prototype, \"popupWidth\", void 0);\n    __decorate([\n        Property(false)\n    ], ComboBox.prototype, \"readonly\", void 0);\n    __decorate([\n        Property(null)\n    ], ComboBox.prototype, \"text\", void 0);\n    __decorate([\n        Property(null)\n    ], ComboBox.prototype, \"value\", void 0);\n    ComboBox = __decorate([\n        NotifyPropertyChanges\n    ], ComboBox);\n    return ComboBox;\n}(DropDownList));\nexport { ComboBox };\n","//! moment.js locale configuration\n//! locale : Slovenian [sl]\n//! author : Robert Sedovšek : https://github.com/sedovsek\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var result = number + ' ';\n        switch (key) {\n            case 's':\n                return withoutSuffix || isFuture\n                    ? 'nekaj sekund'\n                    : 'nekaj sekundami';\n            case 'ss':\n                if (number === 1) {\n                    result += withoutSuffix ? 'sekundo' : 'sekundi';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'sekundi' : 'sekundah';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'sekunde' : 'sekundah';\n                } else {\n                    result += 'sekund';\n                }\n                return result;\n            case 'm':\n                return withoutSuffix ? 'ena minuta' : 'eno minuto';\n            case 'mm':\n                if (number === 1) {\n                    result += withoutSuffix ? 'minuta' : 'minuto';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'minuti' : 'minutama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'minute' : 'minutami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'minut' : 'minutami';\n                }\n                return result;\n            case 'h':\n                return withoutSuffix ? 'ena ura' : 'eno uro';\n            case 'hh':\n                if (number === 1) {\n                    result += withoutSuffix ? 'ura' : 'uro';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'uri' : 'urama';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'ure' : 'urami';\n                } else {\n                    result += withoutSuffix || isFuture ? 'ur' : 'urami';\n                }\n                return result;\n            case 'd':\n                return withoutSuffix || isFuture ? 'en dan' : 'enim dnem';\n            case 'dd':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'dan' : 'dnem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevoma';\n                } else {\n                    result += withoutSuffix || isFuture ? 'dni' : 'dnevi';\n                }\n                return result;\n            case 'M':\n                return withoutSuffix || isFuture ? 'en mesec' : 'enim mesecem';\n            case 'MM':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'mesec' : 'mesecem';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'meseca' : 'mesecema';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'mesece' : 'meseci';\n                } else {\n                    result += withoutSuffix || isFuture ? 'mesecev' : 'meseci';\n                }\n                return result;\n            case 'y':\n                return withoutSuffix || isFuture ? 'eno leto' : 'enim letom';\n            case 'yy':\n                if (number === 1) {\n                    result += withoutSuffix || isFuture ? 'leto' : 'letom';\n                } else if (number === 2) {\n                    result += withoutSuffix || isFuture ? 'leti' : 'letoma';\n                } else if (number < 5) {\n                    result += withoutSuffix || isFuture ? 'leta' : 'leti';\n                } else {\n                    result += withoutSuffix || isFuture ? 'let' : 'leti';\n                }\n                return result;\n        }\n    }\n\n    var sl = moment.defineLocale('sl', {\n        months: 'januar_februar_marec_april_maj_junij_julij_avgust_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj._jun._jul._avg._sep._okt._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljek_torek_sreda_četrtek_petek_sobota'.split('_'),\n        weekdaysShort: 'ned._pon._tor._sre._čet._pet._sob.'.split('_'),\n        weekdaysMin: 'ne_po_to_sr_če_pe_so'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD. MM. YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[danes ob] LT',\n            nextDay: '[jutri ob] LT',\n\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[v] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[v] [sredo] [ob] LT';\n                    case 6:\n                        return '[v] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[v] dddd [ob] LT';\n                }\n            },\n            lastDay: '[včeraj ob] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[prejšnjo] [nedeljo] [ob] LT';\n                    case 3:\n                        return '[prejšnjo] [sredo] [ob] LT';\n                    case 6:\n                        return '[prejšnjo] [soboto] [ob] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[prejšnji] dddd [ob] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'čez %s',\n            past: 'pred %s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Finnish [fi]\n//! author : Tarmo Aidantausta : https://github.com/bleadof\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var numbersPast =\n            'nolla yksi kaksi kolme neljä viisi kuusi seitsemän kahdeksan yhdeksän'.split(\n                ' '\n            ),\n        numbersFuture = [\n            'nolla',\n            'yhden',\n            'kahden',\n            'kolmen',\n            'neljän',\n            'viiden',\n            'kuuden',\n            numbersPast[7],\n            numbersPast[8],\n            numbersPast[9],\n        ];\n    function translate(number, withoutSuffix, key, isFuture) {\n        var result = '';\n        switch (key) {\n            case 's':\n                return isFuture ? 'muutaman sekunnin' : 'muutama sekunti';\n            case 'ss':\n                result = isFuture ? 'sekunnin' : 'sekuntia';\n                break;\n            case 'm':\n                return isFuture ? 'minuutin' : 'minuutti';\n            case 'mm':\n                result = isFuture ? 'minuutin' : 'minuuttia';\n                break;\n            case 'h':\n                return isFuture ? 'tunnin' : 'tunti';\n            case 'hh':\n                result = isFuture ? 'tunnin' : 'tuntia';\n                break;\n            case 'd':\n                return isFuture ? 'päivän' : 'päivä';\n            case 'dd':\n                result = isFuture ? 'päivän' : 'päivää';\n                break;\n            case 'M':\n                return isFuture ? 'kuukauden' : 'kuukausi';\n            case 'MM':\n                result = isFuture ? 'kuukauden' : 'kuukautta';\n                break;\n            case 'y':\n                return isFuture ? 'vuoden' : 'vuosi';\n            case 'yy':\n                result = isFuture ? 'vuoden' : 'vuotta';\n                break;\n        }\n        result = verbalNumber(number, isFuture) + ' ' + result;\n        return result;\n    }\n    function verbalNumber(number, isFuture) {\n        return number < 10\n            ? isFuture\n                ? numbersFuture[number]\n                : numbersPast[number]\n            : number;\n    }\n\n    var fi = moment.defineLocale('fi', {\n        months: 'tammikuu_helmikuu_maaliskuu_huhtikuu_toukokuu_kesäkuu_heinäkuu_elokuu_syyskuu_lokakuu_marraskuu_joulukuu'.split(\n            '_'\n        ),\n        monthsShort:\n            'tammi_helmi_maalis_huhti_touko_kesä_heinä_elo_syys_loka_marras_joulu'.split(\n                '_'\n            ),\n        weekdays:\n            'sunnuntai_maanantai_tiistai_keskiviikko_torstai_perjantai_lauantai'.split(\n                '_'\n            ),\n        weekdaysShort: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        weekdaysMin: 'su_ma_ti_ke_to_pe_la'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'Do MMMM[ta] YYYY',\n            LLL: 'Do MMMM[ta] YYYY, [klo] HH.mm',\n            LLLL: 'dddd, Do MMMM[ta] YYYY, [klo] HH.mm',\n            l: 'D.M.YYYY',\n            ll: 'Do MMM YYYY',\n            lll: 'Do MMM YYYY, [klo] HH.mm',\n            llll: 'ddd, Do MMM YYYY, [klo] HH.mm',\n        },\n        calendar: {\n            sameDay: '[tänään] [klo] LT',\n            nextDay: '[huomenna] [klo] LT',\n            nextWeek: 'dddd [klo] LT',\n            lastDay: '[eilen] [klo] LT',\n            lastWeek: '[viime] dddd[na] [klo] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s päästä',\n            past: '%s sitten',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fi;\n\n})));\n","import { createTemplate, measureElementRect, logBase, removeElement } from '../utils/helper';\nimport { ChartLocation, stringToNumber, appendElement, withIn } from '../utils/helper';\nimport { Rect } from '@syncfusion/ej2-svg-base';\nimport { getPoint } from '../utils/helper';\nimport { createElement, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { annotationRender } from '../model/constants';\nimport { DataUtil } from '@syncfusion/ej2-data';\n/**\n * Annotation Module handles the Annotation for chart and accumulation series.\n */\nvar AnnotationBase = /** @class */ (function () {\n    /**\n     * Constructor for chart and accumulation annotation\n     *\n     * @param control\n     */\n    function AnnotationBase(control) {\n        this.control = control;\n    }\n    /**\n     * Method to render the annotation for chart and accumulation series.\n     *\n     * @private\n     * @param annotation\n     * @param index\n     */\n    AnnotationBase.prototype.render = function (annotation, index) {\n        this.isChart = this.control.getModuleName() === 'chart';\n        this.annotation = annotation;\n        var childElement = createTemplate(createElement('div', {\n            id: this.control.element.id + '_Annotation_' + index,\n            styles: 'position: absolute; z-index: 1' //by default z-index set for annotation elements\n        }), index, annotation.content, this.control);\n        return childElement;\n    };\n    /**\n     * Method to calculate the location for annotation - coordinate unit as pixel.\n     *\n     * @private\n     * @param location\n     */\n    AnnotationBase.prototype.setAnnotationPixelValue = function (location) {\n        var rect = this.annotation.region === 'Chart' ?\n            new Rect(0, 0, this.control.availableSize.width, this.control.availableSize.height) :\n            this.isChart ?\n                this.control.chartAxisLayoutPanel.seriesClipRect :\n                this.control.series[0].accumulationBound;\n        location.x = ((typeof this.annotation.x !== 'string') ?\n            ((typeof this.annotation.x === 'number') ? this.annotation.x : 0) :\n            stringToNumber(this.annotation.x, rect.width)) + rect.x;\n        location.y = ((typeof this.annotation.y === 'number') ? this.annotation.y :\n            stringToNumber(this.annotation.y, rect.height)) + rect.y;\n        return true;\n    };\n    /**\n     * Method to calculate the location for annotation - coordinate unit as point.\n     *\n     * @private\n     * @param location\n     */\n    AnnotationBase.prototype.setAnnotationPointValue = function (location) {\n        var symbolLocation = new ChartLocation(0, 0);\n        if (this.isChart) {\n            var chart = this.control;\n            var annotation = this.annotation;\n            var xAxisName = annotation.xAxisName;\n            var yAxisName = annotation.yAxisName;\n            var isInverted = chart.requireInvertedAxis;\n            var stockChart = this.control.stockChart;\n            var xAxis = void 0;\n            var yAxis = void 0;\n            var xValue = void 0;\n            for (var _i = 0, _a = chart.axisCollections; _i < _a.length; _i++) {\n                var axis = _a[_i];\n                if (xAxisName === axis.name || (xAxisName == null && axis.name === 'primaryXAxis')) {\n                    xAxis = axis;\n                    if (xAxis.valueType.indexOf('Category') > -1) {\n                        var xAnnotation = xAxis.valueType === 'DateTimeCategory' ? (annotation.x.getTime()).toString() :\n                            annotation.x;\n                        if (xAxis.labels.indexOf(xAnnotation) < 0) {\n                            return false;\n                        }\n                        else {\n                            xValue = xAxis.labels.indexOf(xAnnotation);\n                        }\n                    }\n                    else if (xAxis.valueType === 'DateTime') {\n                        var option = { skeleton: 'full', type: 'dateTime' };\n                        xValue = (typeof this.annotation.x === 'object' || typeof new Date(this.annotation.x) === 'object') ?\n                            Date.parse(chart.intl.getDateParser(option)(chart.intl.getDateFormat(option)(new Date(DataUtil.parse.parseJson({ val: annotation.x }).val)))) : 0;\n                    }\n                    else {\n                        xValue = +annotation.x;\n                    }\n                }\n                else if (yAxisName === axis.name || (yAxisName == null && axis.name === 'primaryYAxis')) {\n                    yAxis = axis;\n                }\n            }\n            if (xAxis && yAxis && withIn(xAxis.valueType === 'Logarithmic' ? logBase(xValue, xAxis.logBase) : xValue, xAxis.visibleRange) && withIn(yAxis.valueType === 'Logarithmic' ? logBase(+annotation.y, yAxis.logBase) : +annotation.y, yAxis.visibleRange)) {\n                symbolLocation = getPoint(xValue, +annotation.y, xAxis, yAxis, isInverted);\n                location.x = symbolLocation.x + (isInverted ? yAxis.rect.x : xAxis.rect.x);\n                // for stockchart, stockchart's toolbar height and title size is added for annotation content\n                location.y = symbolLocation.y + (isInverted ? xAxis.rect.y : yAxis.rect.y) +\n                    ((stockChart && stockChart.enablePeriodSelector) ? stockChart.toolbarHeight + stockChart.titleSize.height : 0);\n            }\n            else {\n                return false;\n            }\n            return true;\n        }\n        else {\n            return this.setAccumulationPointValue(location);\n        }\n    };\n    /**\n     * To process the annotation for accumulation chart.\n     *\n     * @param annotation\n     * @param index\n     * @param parentElement\n     */\n    AnnotationBase.prototype.processAnnotation = function (annotation, index, parentElement) {\n        var chart = this.control;\n        var location = new ChartLocation(0, 0);\n        var annotationElement = this.render(annotation, index);\n        var annotationRendered = function () {\n            annotationElement.style.transform = 'translate(-50%, -50%)';\n        };\n        annotationRendered.bind(location, this);\n        if (this['setAnnotation' + annotation.coordinateUnits + 'Value'](location)) {\n            this.setElementStyle(location, annotationElement, parentElement);\n        }\n        else if (this.control.redraw) {\n            removeElement(annotationElement.id);\n        }\n        updateBlazorTemplate((this.control.element.id + 'Annotation' + index).replace(/[^a-zA-Z0-9]/g, ''), 'ContentTemplate', chart.stockChart ? chart.stockChart.annotations[index] : this.control.annotations[index], undefined, annotationRendered);\n    };\n    /**\n     * Method to calculate the location for annotation - coordinate unit as point in accumulation chart.\n     *\n     * @private\n     * @param location\n     */\n    AnnotationBase.prototype.setAccumulationPointValue = function (location) {\n        var accumulation = this.control;\n        var point;\n        for (var _i = 0, _a = accumulation.visibleSeries[0].points; _i < _a.length; _i++) {\n            var accPoint = _a[_i];\n            if (typeof accPoint.x === 'object') {\n                if (Date.parse(accPoint.x) === Date.parse(this.annotation.x) &&\n                    accPoint.y === this.annotation.y) {\n                    point = accPoint;\n                    break;\n                }\n            }\n            else {\n                if (accPoint.x === this.annotation.x && accPoint.y === this.annotation.y) {\n                    point = accPoint;\n                    break;\n                }\n            }\n        }\n        if (point && point.visible) {\n            location.x = point.symbolLocation.x;\n            location.y = point.symbolLocation.y;\n            return true;\n        }\n        else {\n            return false;\n        }\n    };\n    /**\n     * Method to set the element style for accumulation / chart annotation.\n     *\n     * @private\n     * @param location\n     * @param element\n     * @param parentElement\n     */\n    AnnotationBase.prototype.setElementStyle = function (location, element, parentElement) {\n        var elementRect = measureElementRect(element, this.control.redraw);\n        var argsData = {\n            cancel: false, name: annotationRender, content: element,\n            location: location\n        };\n        this.control.trigger(annotationRender, argsData);\n        if (!argsData.cancel) {\n            argsData.content.style.left = this.setAlignmentValue(this.annotation.horizontalAlignment, elementRect.width, argsData.location.x) + 'px';\n            argsData.content.style.top = this.setAlignmentValue(this.annotation.verticalAlignment, elementRect.height, argsData.location.y) + 'px';\n            argsData.content.setAttribute('aria-label', this.annotation.description || 'Annotation');\n            appendElement(argsData.content, parentElement, this.control.redraw, true, 'left', 'top');\n        }\n    };\n    /**\n     * Method to calculate the alignment value for annotation.\n     *\n     * @private\n     * @param alignment\n     * @param size\n     * @param value\n     */\n    AnnotationBase.prototype.setAlignmentValue = function (alignment, size, value) {\n        switch (alignment) {\n            case 'Top':\n            case 'Near':\n                value -= size;\n                break;\n            case 'Bottom':\n            case 'Far':\n                value += 0;\n                break;\n            case 'Middle':\n            case 'Center':\n                value -= (size / 2);\n                break;\n        }\n        return value;\n    };\n    return AnnotationBase;\n}());\nexport { AnnotationBase };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { AnnotationBase } from '../../common/annotation/annotation';\nimport { appendElement, redrawElement } from '../../common/utils/helper';\nimport { createElement } from '@syncfusion/ej2-base';\n/**\n * `ChartAnnotation` module handles the annotation for chart.\n */\nvar ChartAnnotation = /** @class */ (function (_super) {\n    __extends(ChartAnnotation, _super);\n    /**\n     * Constructor for chart annotation.\n     *\n     * @private\n     */\n    function ChartAnnotation(control, annotations) {\n        var _this = _super.call(this, control) || this;\n        _this.chart = control;\n        _this.annotations = annotations;\n        return _this;\n    }\n    /**\n     * Method to render the annotation for chart\n     *\n     * @param {Element} element annotation element\n     * @private\n     */\n    ChartAnnotation.prototype.renderAnnotations = function (element) {\n        var _this = this;\n        this.annotations = this.chart.annotations;\n        this.parentElement = redrawElement(this.chart.redraw, this.chart.element.id + '_Annotation_Collections') ||\n            createElement('div', {\n                id: this.chart.element.id + '_Annotation_Collections'\n            });\n        this.annotations.map(function (annotation, index) {\n            _this.processAnnotation(annotation, index, _this.parentElement);\n        });\n        appendElement(this.parentElement, element, this.chart.redraw);\n    };\n    /**\n     * To destroy the annotation.\n     *\n     * @returns {void}\n     * @private\n     */\n    ChartAnnotation.prototype.destroy = function () {\n        // Destroy method performed here\n    };\n    /**\n     * Get module name.\n     */\n    ChartAnnotation.prototype.getModuleName = function () {\n        // Returns te module name\n        return 'Annotation';\n    };\n    return ChartAnnotation;\n}(AnnotationBase));\nexport { ChartAnnotation };\n","//! moment.js locale configuration\n//! locale : Arabic (Saudi Arabia) [ar-sa]\n//! author : Suhail Alkowaileet : https://github.com/xsoh\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        };\n\n    var arSa = moment.defineLocale('ar-sa', {\n        months: 'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'يناير_فبراير_مارس_أبريل_مايو_يونيو_يوليو_أغسطس_سبتمبر_أكتوبر_نوفمبر_ديسمبر'.split(\n                '_'\n            ),\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم على الساعة] LT',\n            nextDay: '[غدا على الساعة] LT',\n            nextWeek: 'dddd [على الساعة] LT',\n            lastDay: '[أمس على الساعة] LT',\n            lastWeek: 'dddd [على الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'في %s',\n            past: 'منذ %s',\n            s: 'ثوان',\n            ss: '%d ثانية',\n            m: 'دقيقة',\n            mm: '%d دقائق',\n            h: 'ساعة',\n            hh: '%d ساعات',\n            d: 'يوم',\n            dd: '%d أيام',\n            M: 'شهر',\n            MM: '%d أشهر',\n            y: 'سنة',\n            yy: '%d سنوات',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return arSa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bulgarian [bg]\n//! author : Krasen Borisov : https://github.com/kraz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var bg = moment.defineLocale('bg', {\n        months: 'януари_февруари_март_април_май_юни_юли_август_септември_октомври_ноември_декември'.split(\n            '_'\n        ),\n        monthsShort: 'яну_фев_мар_апр_май_юни_юли_авг_сеп_окт_ное_дек'.split('_'),\n        weekdays: 'неделя_понеделник_вторник_сряда_четвъртък_петък_събота'.split(\n            '_'\n        ),\n        weekdaysShort: 'нед_пон_вто_сря_чет_пет_съб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Днес в] LT',\n            nextDay: '[Утре в] LT',\n            nextWeek: 'dddd [в] LT',\n            lastDay: '[Вчера в] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 6:\n                        return '[Миналата] dddd [в] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[Миналия] dddd [в] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'след %s',\n            past: 'преди %s',\n            s: 'няколко секунди',\n            ss: '%d секунди',\n            m: 'минута',\n            mm: '%d минути',\n            h: 'час',\n            hh: '%d часа',\n            d: 'ден',\n            dd: '%d дена',\n            w: 'седмица',\n            ww: '%d седмици',\n            M: 'месец',\n            MM: '%d месеца',\n            y: 'година',\n            yy: '%d години',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(ев|ен|ти|ви|ри|ми)/,\n        ordinal: function (number) {\n            var lastDigit = number % 10,\n                last2Digits = number % 100;\n            if (number === 0) {\n                return number + '-ев';\n            } else if (last2Digits === 0) {\n                return number + '-ен';\n            } else if (last2Digits > 10 && last2Digits < 20) {\n                return number + '-ти';\n            } else if (lastDigit === 1) {\n                return number + '-ви';\n            } else if (lastDigit === 2) {\n                return number + '-ри';\n            } else if (lastDigit === 7 || lastDigit === 8) {\n                return number + '-ми';\n            } else {\n                return number + '-ти';\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return bg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Burmese [my]\n//! author : Squar team, mysquar.com\n//! author : David Rossellat : https://github.com/gholadr\n//! author : Tin Aung Lin : https://github.com/thanyawzinmin\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '၁',\n            2: '၂',\n            3: '၃',\n            4: '၄',\n            5: '၅',\n            6: '၆',\n            7: '၇',\n            8: '၈',\n            9: '၉',\n            0: '၀',\n        },\n        numberMap = {\n            '၁': '1',\n            '၂': '2',\n            '၃': '3',\n            '၄': '4',\n            '၅': '5',\n            '၆': '6',\n            '၇': '7',\n            '၈': '8',\n            '၉': '9',\n            '၀': '0',\n        };\n\n    var my = moment.defineLocale('my', {\n        months: 'ဇန်နဝါရီ_ဖေဖော်ဝါရီ_မတ်_ဧပြီ_မေ_ဇွန်_ဇူလိုင်_သြဂုတ်_စက်တင်ဘာ_အောက်တိုဘာ_နိုဝင်ဘာ_ဒီဇင်ဘာ'.split(\n            '_'\n        ),\n        monthsShort: 'ဇန်_ဖေ_မတ်_ပြီ_မေ_ဇွန်_လိုင်_သြ_စက်_အောက်_နို_ဒီ'.split('_'),\n        weekdays: 'တနင်္ဂနွေ_တနင်္လာ_အင်္ဂါ_ဗုဒ္ဓဟူး_ကြာသပတေး_သောကြာ_စနေ'.split(\n            '_'\n        ),\n        weekdaysShort: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n        weekdaysMin: 'နွေ_လာ_ဂါ_ဟူး_ကြာ_သော_နေ'.split('_'),\n\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ယနေ.] LT [မှာ]',\n            nextDay: '[မနက်ဖြန်] LT [မှာ]',\n            nextWeek: 'dddd LT [မှာ]',\n            lastDay: '[မနေ.က] LT [မှာ]',\n            lastWeek: '[ပြီးခဲ့သော] dddd LT [မှာ]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'လာမည့် %s မှာ',\n            past: 'လွန်ခဲ့သော %s က',\n            s: 'စက္ကန်.အနည်းငယ်',\n            ss: '%d စက္ကန့်',\n            m: 'တစ်မိနစ်',\n            mm: '%d မိနစ်',\n            h: 'တစ်နာရီ',\n            hh: '%d နာရီ',\n            d: 'တစ်ရက်',\n            dd: '%d ရက်',\n            M: 'တစ်လ',\n            MM: '%d လ',\n            y: 'တစ်နှစ်',\n            yy: '%d နှစ်',\n        },\n        preparse: function (string) {\n            return string.replace(/[၁၂၃၄၅၆၇၈၉၀]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return my;\n\n})));\n","import { isNullOrUndefined, extend, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { attributes as addAttributes } from '@syncfusion/ej2-base';\nimport { rowDataBound, queryCellInfo } from '../base/constant';\nimport { setStyleAndAttributes, getObject, extendObjWithFn, applyStickyLeftRightPosition, groupCaptionRowLeftRightPos, resetColspanGroupCaption } from '../base/util';\nimport { CellType } from '../base/enum';\nimport { CellMergeRender } from './cell-merge-renderer';\nimport * as literals from '../base/string-literals';\n/**\n * RowRenderer class which responsible for building row content.\n *\n * @hidden\n */\nvar RowRenderer = /** @class */ (function () {\n    function RowRenderer(serviceLocator, cellType, parent) {\n        this.isSpan = false;\n        this.cellType = cellType;\n        this.serviceLocator = serviceLocator;\n        this.parent = parent;\n        this.element = this.parent.createElement('tr', { attrs: { role: 'row' } });\n    }\n    /* eslint-disable */\n    /**\n     * Function to render the row content based on Column[] and data.\n     *\n     * @param {Row<T>} row - specifies the row\n     * @param {Column[]} columns - specifies the columns\n     * @param {Object} attributes - specifies the attributes\n     * @param {string} rowTemplate - specifies the rowTemplate\n     * @param {Element} cloneNode - specifies the cloneNode\n     * @returns {Element} returns the element\n     */\n    /* eslint-enable */\n    RowRenderer.prototype.render = function (row, columns, attributes, rowTemplate, cloneNode) {\n        return this.refreshRow(row, columns, attributes, rowTemplate, cloneNode);\n    };\n    /* eslint-disable */\n    /**\n     * Function to refresh the row content based on Column[] and data.\n     *\n     * @param {Row<T>} row - specifies the row\n     * @param {Column[]} columns - specifies the column\n     * @param {boolean} isChanged - specifies isChanged\n     * @param {Object} attributes - specifies the attributes\n     * @param {string} rowTemplate - specifies the rowTemplate\n     * @returns {void}\n     */\n    /* eslint-enable */\n    RowRenderer.prototype.refresh = function (row, columns, isChanged, attributes, rowTemplate) {\n        var _this = this;\n        if (isChanged) {\n            row.data = extendObjWithFn({}, row.changes);\n            this.refreshMergeCells(row);\n        }\n        var node = this.parent.element.querySelector('[data-uid=' + row.uid + ']');\n        var tr = this.refreshRow(row, columns, attributes, rowTemplate, null, isChanged);\n        var cells = [].slice.call(tr.cells);\n        var tempCells = [].slice.call(node.querySelectorAll('.e-templatecell'));\n        if (this.parent.isReact && tempCells.length) {\n            var _loop_1 = function (col) {\n                if (col.template) {\n                    setTimeout(function () {\n                        _this.parent.refreshReactColumnTemplateByUid(col.uid, true);\n                    }, 0);\n                    return \"break\";\n                }\n            };\n            for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n                var col = columns_1[_i];\n                var state_1 = _loop_1(col);\n                if (state_1 === \"break\")\n                    break;\n            }\n        }\n        var attr = [].slice.call(tr.attributes);\n        attr.map(function (item) {\n            node.setAttribute(item['name'], item['value']);\n        });\n        node.innerHTML = '';\n        for (var _a = 0, cells_1 = cells; _a < cells_1.length; _a++) {\n            var cell = cells_1[_a];\n            node.appendChild(cell);\n        }\n    };\n    // tslint:disable-next-line:max-func-body-length\n    RowRenderer.prototype.refreshRow = function (row, columns, attributes, rowTemplate, cloneNode, isEdit) {\n        var tr = !isNullOrUndefined(cloneNode) ? cloneNode : this.element.cloneNode();\n        var rowArgs = { data: row.data };\n        var cellArgs = { data: row.data };\n        var chekBoxEnable = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox' && col.field; })[0];\n        var value = false;\n        if (chekBoxEnable) {\n            value = getObject(chekBoxEnable.field, rowArgs.data);\n        }\n        var selIndex = this.parent.getSelectedRowIndexes();\n        if (row.isDataRow) {\n            row.isSelected = selIndex.indexOf(row.index) > -1 || value;\n        }\n        if (row.isDataRow && this.parent.isCheckBoxSelection\n            && this.parent.checkAllRows === 'Check' && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n            row.isSelected = true;\n            if (selIndex.indexOf(row.index) === -1) {\n                selIndex.push(row.index);\n            }\n        }\n        this.buildAttributeFromRow(tr, row);\n        addAttributes(tr, extend({}, attributes, {}));\n        setStyleAndAttributes(tr, row.attributes);\n        var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n        var _loop_2 = function (i, len) {\n            var cell = row.cells[parseInt(i.toString(), 10)];\n            cell.isSelected = row.isSelected;\n            cell.isColumnSelected = cell.column.isSelected;\n            var cellRenderer = cellRendererFact.getCellRenderer(row.cells[parseInt(i.toString(), 10)].cellType\n                || CellType.Data);\n            var attrs = { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' };\n            if (row.isExpand && row.cells[parseInt(i.toString(), 10)].cellType === CellType.DetailExpand) {\n                attrs['class'] = this_1.parent.isPrinting ? 'e-detailrowcollapse' : 'e-detailrowexpand';\n            }\n            var td = cellRenderer.render(row.cells[parseInt(i.toString(), 10)], row.data, attrs, row.isExpand, isEdit);\n            if (row.cells[parseInt(i.toString(), 10)].cellType !== CellType.Filter) {\n                if (row.cells[parseInt(i.toString(), 10)].cellType === CellType.Data\n                    || row.cells[parseInt(i.toString(), 10)].cellType === CellType.CommandColumn) {\n                    var isReactChild = this_1.parent.parentDetails && this_1.parent.parentDetails.parentInstObj &&\n                        this_1.parent.parentDetails.parentInstObj.isReact;\n                    if (((this_1.parent.isReact && this_1.parent.requireTemplateRef) || (isReactChild &&\n                        this_1.parent.parentDetails.parentInstObj.requireTemplateRef)) && cell.isTemplate) {\n                        // eslint-disable-next-line @typescript-eslint/no-this-alias\n                        var thisRef_1 = this_1;\n                        thisRef_1.parent.renderTemplates(function () {\n                            if (typeof (cell.column.template) !== 'string') {\n                                var ariaAttr = td.getAttribute('aria-label');\n                                td.setAttribute('aria-label', td.innerText + ariaAttr);\n                            }\n                            thisRef_1.parent.trigger(queryCellInfo, extend(cellArgs, {\n                                cell: td, column: cell.column, colSpan: 1,\n                                rowSpan: 1, foreignKeyData: row.cells[parseInt(i.toString(), 10)].foreignKeyData,\n                                requestType: thisRef_1.parent.requestTypeAction\n                            }));\n                        });\n                    }\n                    else {\n                        this_1.parent.trigger(queryCellInfo, extend(cellArgs, {\n                            cell: td, column: cell.column, colSpan: 1,\n                            rowSpan: 1, foreignKeyData: row.cells[parseInt(i.toString(), 10)].foreignKeyData,\n                            requestType: this_1.parent.requestTypeAction\n                        }));\n                    }\n                    var isRowSpanned = false;\n                    if (row.index > 0 && this_1.isSpan) {\n                        var rowsObject = this_1.parent.getRowsObject();\n                        var prevRowCells = this_1.parent.groupSettings.columns.length > 0 &&\n                            !rowsObject[row.index - 1].isDataRow ? rowsObject[row.index].cells : rowsObject[row.index - 1].cells;\n                        var uid_1 = 'uid';\n                        var prevRowCell = prevRowCells.filter(function (cell) {\n                            return cell.column.uid === row.cells[parseInt(i.toString(), 10)].column[\"\" + uid_1];\n                        })[0];\n                        isRowSpanned = prevRowCell.isRowSpanned ? prevRowCell.isRowSpanned : prevRowCell.rowSpanRange > 1;\n                    }\n                    if (cellArgs.colSpan > 1 || row.cells[parseInt(i.toString(), 10)].cellSpan > 1 || cellArgs.rowSpan > 1\n                        || isRowSpanned) {\n                        this_1.isSpan = true;\n                        var cellMerge = new CellMergeRender(this_1.serviceLocator, this_1.parent);\n                        td = cellMerge.render(cellArgs, row, i, td);\n                    }\n                }\n                if (!row.cells[parseInt(i.toString(), 10)].isSpanned) {\n                    tr.appendChild(td);\n                }\n            }\n        };\n        var this_1 = this;\n        for (var i = 0, len = row.cells.length; i < len; i++) {\n            _loop_2(i, len);\n        }\n        var emptyColspan = 0;\n        if (this.parent.groupSettings.columns.length && this.parent.getFrozenLeftColumnsCount()) {\n            if (tr.classList.contains('e-groupcaptionrow')) {\n                var freezeCells = [].slice.call(tr.querySelectorAll('.e-leftfreeze,.e-unfreeze,.e-rightfreeze,.e-fixedfreeze,.e-freezerightborder,.e-freezeleftborder'));\n                if (freezeCells.length) {\n                    removeClass(freezeCells, ['e-leftfreeze', 'e-unfreeze', 'e-rightfreeze', 'e-fixedfreeze', 'e-freezerightborder', 'e-freezeleftborder']);\n                }\n                if (tr.querySelector('.e-summarycell')) {\n                    groupCaptionRowLeftRightPos(tr, this.parent);\n                }\n                else {\n                    for (var j = 0; j < tr.childNodes.length; j++) {\n                        var td = tr.childNodes[parseInt(j.toString(), 10)];\n                        td.classList.add('e-leftfreeze');\n                        applyStickyLeftRightPosition(td, j * 30, this.parent.enableRtl, 'Left');\n                        if (td.classList.contains('e-groupcaption')) {\n                            var oldColspan = parseInt(td.getAttribute('colspan'), 10);\n                            var colspan = resetColspanGroupCaption(this.parent, j);\n                            td.setAttribute('colspan', colspan.toString());\n                            emptyColspan = oldColspan - colspan;\n                        }\n                    }\n                    if (emptyColspan) {\n                        var td = this.parent.createElement('TD', {\n                            className: 'e-groupcaption',\n                            attrs: { colspan: emptyColspan.toString(), id: this.parent.element.id + 'captioncell', tabindex: '-1' }\n                        });\n                        tr.appendChild(td);\n                    }\n                }\n            }\n            if (tr.querySelectorAll('.e-leftfreeze').length &&\n                (tr.querySelectorAll('.e-indentcell').length || tr.querySelectorAll('.e-grouptopleftcell').length)) {\n                var td = tr.querySelectorAll('.e-indentcell, .e-grouptopleftcell');\n                for (var i = 0; i < td.length; i++) {\n                    td[parseInt(i.toString(), 10)].classList.add('e-leftfreeze');\n                    applyStickyLeftRightPosition(td[parseInt(i.toString(), 10)], i * 30, this.parent.enableRtl, 'Left');\n                }\n            }\n        }\n        var args = { row: tr, rowHeight: this.parent.rowHeight };\n        if (row.isDataRow) {\n            var eventArg_1 = extend(rowArgs, args);\n            eventArg_1.isSelectable = true;\n            var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n                this.parent.parentDetails.parentInstObj.isReact;\n            var cellTemplate = eventArg_1.row.querySelectorAll('.e-templatecell');\n            if (((this.parent.isReact && this.parent.requireTemplateRef) || (isReactChild &&\n                this.parent.parentDetails.parentInstObj.requireTemplateRef)) && cellTemplate.length) {\n                // eslint-disable-next-line @typescript-eslint/no-this-alias\n                var thisRef_2 = this;\n                thisRef_2.parent.renderTemplates(function () {\n                    thisRef_2.parent.trigger(rowDataBound, eventArg_1);\n                    if (!eventArg_1.isSelectable) {\n                        row.isSelectable = eventArg_1.isSelectable;\n                        thisRef_2.disableRowSelection(thisRef_2, row, args, eventArg_1);\n                    }\n                });\n            }\n            else {\n                this.parent.trigger(rowDataBound, eventArg_1);\n            }\n            row.isSelectable = eventArg_1.isSelectable;\n            var isDraggable = this.parent.isRowDragable();\n            if (this.parent.allowPaging && this.parent.selectionSettings.persistSelection) {\n                var primaryKey_1 = this.parent.getPrimaryKeyFieldNames()[0];\n                var pKey_1 = row.data ? row.data[\"\" + primaryKey_1] : null;\n                var SelectedRecords = eventArg_1.isSelectable ? this.parent.partialSelectedRecords :\n                    this.parent.disableSelectedRecords;\n                if (!SelectedRecords.some(function (data) { return data[\"\" + primaryKey_1] === pKey_1; })) {\n                    SelectedRecords.push(row.data);\n                }\n            }\n            if (!eventArg_1.isSelectable) {\n                this.disableRowSelection(this, row, args, eventArg_1);\n            }\n            if (this.parent.childGrid || isDraggable || this.parent.detailTemplate) {\n                var td = tr.querySelectorAll('.e-rowcell:not(.e-hide)')[0];\n                if (td) {\n                    td.classList.add('e-detailrowvisible');\n                }\n            }\n        }\n        if (this.parent.enableVirtualization) {\n            rowArgs.rowHeight = this.parent.rowHeight;\n        }\n        if (rowArgs.rowHeight) {\n            tr.style.height = rowArgs.rowHeight + 'px';\n        }\n        else if (this.parent.rowHeight && (tr.querySelector('.e-headercell') || tr.querySelector('.e-groupcaption'))) {\n            tr.style.height = this.parent.rowHeight + 'px';\n        }\n        if (row.cssClass) {\n            tr.classList.add(row.cssClass);\n        }\n        if (row.lazyLoadCssClass) {\n            tr.classList.add(row.lazyLoadCssClass);\n        }\n        if (this.parent.rowRenderingMode === 'Vertical' && this.parent.allowTextWrap && (this.parent.textWrapSettings.wrapMode === 'Header'\n            || this.parent.textWrapSettings.wrapMode === 'Both')) {\n            tr.classList.add('e-verticalwrap');\n        }\n        var vFTable = this.parent.enableColumnVirtualization;\n        if (!vFTable && this.parent.aggregates.length && this.parent.element.scrollHeight > this.parent.height) {\n            for (var i = 0; i < this.parent.aggregates.length; i++) {\n                var property = 'properties';\n                var column = 'columns';\n                if (this.parent.aggregates[parseInt(i.toString(), 10)][\"\" + property][\"\" + column][0].footerTemplate) {\n                    var summarycell = [].slice.call(tr.getElementsByClassName('e-summarycell'));\n                    if (summarycell.length) {\n                        var lastSummaryCell = (summarycell[summarycell.length - 1]);\n                        addClass([lastSummaryCell], ['e-lastsummarycell']);\n                        var firstSummaryCell = (summarycell[0]);\n                        addClass([firstSummaryCell], ['e-firstsummarycell']);\n                    }\n                }\n            }\n        }\n        return tr;\n    };\n    RowRenderer.prototype.disableRowSelection = function (thisRef, row, args, eventArg) {\n        var selIndex = this.parent.getSelectedRowIndexes();\n        this.parent.selectionModule.isPartialSelection = true;\n        row.isSelected = false;\n        var selRowIndex = selIndex.indexOf(row.index);\n        if (selRowIndex > -1) {\n            selIndex.splice(selRowIndex, 1);\n        }\n        var chkBox = args.row.querySelectorAll('.e-rowcell.e-gridchkbox');\n        var isDrag = eventArg.row.querySelector('.e-rowdragdrop');\n        var cellIdx = thisRef.parent.groupSettings.columns.length + (isDrag || thisRef.parent.isDetail() ? 1 : 0);\n        for (var i = 0; i < chkBox.length; i++) {\n            chkBox[parseInt(i.toString(), 10)].firstElementChild.classList.add('e-checkbox-disabled');\n            chkBox[parseInt(i.toString(), 10)].querySelector('.e-frame').classList.remove('e-check');\n        }\n        if (row.cells.length) {\n            for (var i = cellIdx; i < row.cells.length; i++) {\n                var cell = eventArg.row.querySelector('.e-rowcell[data-colindex=\"' + row.cells[parseInt(i.toString(), 10)].index + '\"]');\n                if (cell) {\n                    removeClass([cell], ['e-selectionbackground', 'e-active']);\n                }\n            }\n        }\n        if (isDrag) {\n            removeClass([isDrag], ['e-selectionbackground', 'e-active']);\n        }\n    };\n    ;\n    RowRenderer.prototype.refreshMergeCells = function (row) {\n        for (var _i = 0, _a = row.cells; _i < _a.length; _i++) {\n            var cell = _a[_i];\n            cell.isSpanned = false;\n        }\n        return row;\n    };\n    /* eslint-disable */\n    /**\n     * Function to check and add alternative row css class.\n     *\n     * @param {Element} tr - specifies the tr element\n     * @param {Row<T>} row - specifies the row\n     * @returns {void}\n     */\n    /* eslint-enable */\n    RowRenderer.prototype.buildAttributeFromRow = function (tr, row) {\n        var attr = {};\n        var prop = { 'rowindex': literals.dataRowIndex, 'dataUID': 'data-uid', 'ariaSelected': 'aria-selected' };\n        var classes = [];\n        if (row.isDataRow) {\n            classes.push(literals.row);\n        }\n        if (row.isAltRow) {\n            classes.push('e-altrow');\n        }\n        if (row.isCaptionRow) {\n            classes.push('e-groupcaptionrow');\n        }\n        if (row.isAggregateRow && row.parentUid) {\n            classes.push('e-groupfooterrow');\n        }\n        if (!isNullOrUndefined(row.index)) {\n            attr[literals.ariaRowIndex] = row.index + 1;\n            attr[prop.rowindex] = row.index;\n        }\n        if (row.rowSpan) {\n            attr.rowSpan = row.rowSpan;\n        }\n        if (row.uid) {\n            attr[prop.dataUID] = row.uid;\n        }\n        if (row.isSelected) {\n            attr[prop.ariaSelected] = true;\n        }\n        if (row.visible === false) {\n            classes.push('e-hide');\n        }\n        attr.class = classes;\n        setStyleAndAttributes(tr, attr);\n    };\n    return RowRenderer;\n}());\nexport { RowRenderer };\n","//! moment.js locale configuration\n//! locale : Galician [gl]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var gl = moment.defineLocale('gl', {\n        months: 'xaneiro_febreiro_marzo_abril_maio_xuño_xullo_agosto_setembro_outubro_novembro_decembro'.split(\n            '_'\n        ),\n        monthsShort:\n            'xan._feb._mar._abr._mai._xuñ._xul._ago._set._out._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'domingo_luns_martes_mércores_xoves_venres_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mér._xov._ven._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mé_xo_ve_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoxe ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañá ' + (this.hours() !== 1 ? 'ás' : 'á') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT';\n            },\n            lastDay: function () {\n                return '[onte ' + (this.hours() !== 1 ? 'á' : 'a') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[o] dddd [pasado ' + (this.hours() !== 1 ? 'ás' : 'a') + '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: function (str) {\n                if (str.indexOf('un') === 0) {\n                    return 'n' + str;\n                }\n                return 'en ' + str;\n            },\n            past: 'hai %s',\n            s: 'uns segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'unha hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return gl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish [es]\n//! author : Julio Napurí : https://github.com/julionc\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var es = moment.defineLocale('es', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return es;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-returns */\nimport { withInRange } from '../../common/utils/helper';\nimport { ColumnBase } from './column-base';\n/**\n * `ColumnSeries` Module used to render the column series.\n */\nvar ColumnSeries = /** @class */ (function (_super) {\n    __extends(ColumnSeries, _super);\n    function ColumnSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    ColumnSeries.prototype.render = function (series) {\n        var sideBySideInfo = this.getSideBySideInfo(series);\n        var origin = Math.max(series.yAxis.visibleRange.min, 0);\n        var argsData;\n        for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n            var pointColumn = _a[_i];\n            pointColumn.symbolLocations = [];\n            pointColumn.regions = [];\n            if (pointColumn.visible && withInRange(series.points[pointColumn.index - 1], pointColumn, series.points[pointColumn.index + 1], series)) {\n                this.rect = this.getRectangle(pointColumn.xValue + sideBySideInfo.start, pointColumn.yValue, pointColumn.xValue + sideBySideInfo.end, origin, series);\n                this.rect.width = series.columnWidthInPixel ? (series.columnWidthInPixel - (series.chart.enableSideBySidePlacement ? series.columnWidthInPixel * series.columnSpacing : 0)) : this.rect.width;\n                this.rect.x = series.columnWidthInPixel ? this.rect.x - (((series.columnWidthInPixel / 2) * series.rectCount) -\n                    (series.columnWidthInPixel * series.index)) : this.rect.x;\n                var color = series.category === 'Indicator' ? pointColumn.color : series.interior;\n                argsData = this.triggerEvent(series, pointColumn, color, { width: series.border.width, color: series.border.color });\n                if (!argsData.cancel) {\n                    this.updateSymbolLocation(pointColumn, this.rect, series);\n                    this.drawRectangle(series, pointColumn, this.rect, argsData);\n                    if (series.columnFacet === 'Cylinder') {\n                        var cylinderSeriesOption = {\n                            'isColumn': true,\n                            'stacking': false,\n                            'isLastSeries': true\n                        };\n                        this.drawCylinder(this.options, this.element, cylinderSeriesOption, this.rect, series);\n                    }\n                }\n            }\n        }\n        this.renderMarker(series);\n    };\n    /**\n     * Animates the series.\n     *\n     * @param  {Series} series - Defines the series to animate.\n     * @returns {void}\n     */\n    ColumnSeries.prototype.doAnimation = function (series) {\n        this.animate(series);\n    };\n    /**\n     * Get module name.\n     */\n    ColumnSeries.prototype.getModuleName = function () {\n        return 'ColumnSeries';\n        /**\n         * return the module name\n         */\n    };\n    /**\n     * To destroy the column series.\n     *\n     * @returns {void}\n     * @private\n     */\n    ColumnSeries.prototype.destroy = function () {\n        /**\n         * Destroy method performed here\n         */\n    };\n    return ColumnSeries;\n}(ColumnBase));\nexport { ColumnSeries };\n","import { isNullOrUndefined, getValue, setValue } from '@syncfusion/ej2-base';\nimport { Row } from '../models/row';\nimport { CellType } from '../base/enum';\nimport { Cell } from '../models/cell';\nimport { getUid } from '../base/util';\nimport { getForeignData } from '../../grid/base/util';\nimport * as events from '../base/constant';\n/**\n * RowModelGenerator is used to generate grid data rows.\n *\n * @hidden\n */\nvar RowModelGenerator = /** @class */ (function () {\n    /**\n     * Constructor for header renderer module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     */\n    function RowModelGenerator(parent) {\n        this.parent = parent;\n    }\n    RowModelGenerator.prototype.generateRows = function (data, args) {\n        var rows = [];\n        var startIndex = this.parent.enableVirtualization && args ? args.startIndex : 0;\n        startIndex = this.parent.enableInfiniteScrolling && args ? this.getInfiniteIndex(args) : startIndex;\n        if (this.parent.enableImmutableMode && args && args.startIndex) {\n            startIndex = args.startIndex;\n        }\n        for (var i = 0, len = Object.keys(data).length; i < len; i++, startIndex++) {\n            rows[parseInt(i.toString(), 10)] = this.generateRow(data[parseInt(i.toString(), 10)], startIndex);\n        }\n        return rows;\n    };\n    RowModelGenerator.prototype.ensureColumns = function () {\n        //TODO: generate dummy column for group, detail here;\n        var cols = [];\n        if (this.parent.detailTemplate || this.parent.childGrid) {\n            var args = {};\n            this.parent.notify(events.detailIndentCellInfo, args);\n            cols.push(this.generateCell(args, null, CellType.DetailExpand));\n        }\n        if (this.parent.isRowDragable()) {\n            cols.push(this.generateCell({}, null, CellType.RowDragIcon));\n        }\n        return cols;\n    };\n    RowModelGenerator.prototype.generateRow = function (data, index, cssClass, indent, pid, tIndex, parentUid) {\n        var options = {};\n        options.foreignKeyData = {};\n        options.uid = getUid('grid-row');\n        options.data = data;\n        options.index = index;\n        options.indent = indent;\n        options.tIndex = tIndex;\n        options.isDataRow = true;\n        options.parentGid = pid;\n        options.parentUid = parentUid;\n        if (this.parent.isPrinting) {\n            if (this.parent.hierarchyPrintMode === 'All') {\n                options.isExpand = true;\n            }\n            else if (this.parent.hierarchyPrintMode === 'Expanded' && this.parent.expandedRows && this.parent.expandedRows[parseInt(index.toString(), 10)]) {\n                options.isExpand = this.parent.expandedRows[parseInt(index.toString(), 10)].isExpand;\n            }\n        }\n        options.cssClass = cssClass;\n        options.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n        options.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n        options.isSelected = this.parent.getSelectedRowIndexes().indexOf(index) > -1;\n        this.refreshForeignKeyRow(options);\n        var cells = this.ensureColumns();\n        var row = new Row(options, this.parent);\n        row.cells = this.parent.getFrozenMode() === 'Right' ? this.generateCells(options).concat(cells)\n            : cells.concat(this.generateCells(options));\n        return row;\n    };\n    RowModelGenerator.prototype.refreshForeignKeyRow = function (options) {\n        var foreignKeyColumns = this.parent.getForeignKeyColumns();\n        for (var i = 0; i < foreignKeyColumns.length; i++) {\n            setValue(foreignKeyColumns[parseInt(i.toString(), 10)].field, getForeignData(foreignKeyColumns[parseInt(i.toString(), 10)], options.data), options.foreignKeyData);\n        }\n    };\n    RowModelGenerator.prototype.generateCells = function (options) {\n        var dummies = this.parent.getColumns();\n        var tmp = [];\n        for (var i = 0; i < dummies.length; i++) {\n            tmp.push(this.generateCell(dummies[parseInt(i.toString(), 10)], options.uid, isNullOrUndefined(dummies[parseInt(i.toString(), 10)].commands) ? undefined : CellType.CommandColumn, null, i, options.foreignKeyData));\n        }\n        return tmp;\n    };\n    /**\n     *\n     * @param {Column} column - Defines column details\n     * @param {string} rowId - Defines row id\n     * @param {CellType} cellType  - Defines cell type\n     * @param {number} colSpan - Defines colSpan\n     * @param {number} oIndex - Defines index\n     * @param {Object} foreignKeyData - Defines foreign key data\n     * @returns {Cell<Column>} returns cell model\n     * @hidden\n     */\n    RowModelGenerator.prototype.generateCell = function (column, rowId, cellType, colSpan, oIndex, foreignKeyData) {\n        var opt = {\n            'visible': column.visible,\n            'isDataCell': !isNullOrUndefined(column.field || column.template),\n            'isTemplate': !isNullOrUndefined(column.template),\n            'rowID': rowId,\n            'column': column,\n            'cellType': !isNullOrUndefined(cellType) ? cellType : CellType.Data,\n            'colSpan': colSpan,\n            'commands': column.commands,\n            'isForeignKey': column.isForeignColumn && column.isForeignColumn(),\n            'foreignKeyData': column.isForeignColumn && column.isForeignColumn() && getValue(column.field, foreignKeyData)\n        };\n        if (opt.isDataCell || opt.column.type === 'checkbox' || opt.commands) {\n            opt.index = oIndex;\n        }\n        return new Cell(opt);\n    };\n    RowModelGenerator.prototype.refreshRows = function (input) {\n        for (var i = 0; i < input.length; i++) {\n            this.refreshForeignKeyRow(input[parseInt(i.toString(), 10)]);\n            input[parseInt(i.toString(), 10)].cells = this.generateCells(input[parseInt(i.toString(), 10)]);\n        }\n        return input;\n    };\n    RowModelGenerator.prototype.getInfiniteIndex = function (args) {\n        return args.requestType === 'infiniteScroll' || args.requestType === 'delete' || args.action === 'add'\n            ? (isNullOrUndefined(args.startIndex) ? args['index'] : args.startIndex) : 0;\n    };\n    return RowModelGenerator;\n}());\nexport { RowModelGenerator };\n","//! moment.js locale configuration\n//! locale : Greek [el]\n//! author : Aggelos Karalias : https://github.com/mehiel\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    var el = moment.defineLocale('el', {\n        monthsNominativeEl:\n            'Ιανουάριος_Φεβρουάριος_Μάρτιος_Απρίλιος_Μάιος_Ιούνιος_Ιούλιος_Αύγουστος_Σεπτέμβριος_Οκτώβριος_Νοέμβριος_Δεκέμβριος'.split(\n                '_'\n            ),\n        monthsGenitiveEl:\n            'Ιανουαρίου_Φεβρουαρίου_Μαρτίου_Απριλίου_Μαΐου_Ιουνίου_Ιουλίου_Αυγούστου_Σεπτεμβρίου_Οκτωβρίου_Νοεμβρίου_Δεκεμβρίου'.split(\n                '_'\n            ),\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return this._monthsNominativeEl;\n            } else if (\n                typeof format === 'string' &&\n                /D/.test(format.substring(0, format.indexOf('MMMM')))\n            ) {\n                // if there is a day number before 'MMMM'\n                return this._monthsGenitiveEl[momentToFormat.month()];\n            } else {\n                return this._monthsNominativeEl[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'Ιαν_Φεβ_Μαρ_Απρ_Μαϊ_Ιουν_Ιουλ_Αυγ_Σεπ_Οκτ_Νοε_Δεκ'.split('_'),\n        weekdays: 'Κυριακή_Δευτέρα_Τρίτη_Τετάρτη_Πέμπτη_Παρασκευή_Σάββατο'.split(\n            '_'\n        ),\n        weekdaysShort: 'Κυρ_Δευ_Τρι_Τετ_Πεμ_Παρ_Σαβ'.split('_'),\n        weekdaysMin: 'Κυ_Δε_Τρ_Τε_Πε_Πα_Σα'.split('_'),\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'μμ' : 'ΜΜ';\n            } else {\n                return isLower ? 'πμ' : 'ΠΜ';\n            }\n        },\n        isPM: function (input) {\n            return (input + '').toLowerCase()[0] === 'μ';\n        },\n        meridiemParse: /[ΠΜ]\\.?Μ?\\.?/i,\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendarEl: {\n            sameDay: '[Σήμερα {}] LT',\n            nextDay: '[Αύριο {}] LT',\n            nextWeek: 'dddd [{}] LT',\n            lastDay: '[Χθες {}] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 6:\n                        return '[το προηγούμενο] dddd [{}] LT';\n                    default:\n                        return '[την προηγούμενη] dddd [{}] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        calendar: function (key, mom) {\n            var output = this._calendarEl[key],\n                hours = mom && mom.hours();\n            if (isFunction(output)) {\n                output = output.apply(mom);\n            }\n            return output.replace('{}', hours % 12 === 1 ? 'στη' : 'στις');\n        },\n        relativeTime: {\n            future: 'σε %s',\n            past: '%s πριν',\n            s: 'λίγα δευτερόλεπτα',\n            ss: '%d δευτερόλεπτα',\n            m: 'ένα λεπτό',\n            mm: '%d λεπτά',\n            h: 'μία ώρα',\n            hh: '%d ώρες',\n            d: 'μία μέρα',\n            dd: '%d μέρες',\n            M: 'ένας μήνας',\n            MM: '%d μήνες',\n            y: 'ένας χρόνος',\n            yy: '%d χρόνια',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}η/,\n        ordinal: '%dη',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4st is the first week of the year.\n        },\n    });\n\n    return el;\n\n})));\n","//! moment.js locale configuration\n//! locale : Polish [pl]\n//! author : Rafal Hirsz : https://github.com/evoL\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsNominative =\n            'styczeń_luty_marzec_kwiecień_maj_czerwiec_lipiec_sierpień_wrzesień_październik_listopad_grudzień'.split(\n                '_'\n            ),\n        monthsSubjective =\n            'stycznia_lutego_marca_kwietnia_maja_czerwca_lipca_sierpnia_września_października_listopada_grudnia'.split(\n                '_'\n            ),\n        monthsParse = [\n            /^sty/i,\n            /^lut/i,\n            /^mar/i,\n            /^kwi/i,\n            /^maj/i,\n            /^cze/i,\n            /^lip/i,\n            /^sie/i,\n            /^wrz/i,\n            /^paź/i,\n            /^lis/i,\n            /^gru/i,\n        ];\n    function plural(n) {\n        return n % 10 < 5 && n % 10 > 1 && ~~(n / 10) % 10 !== 1;\n    }\n    function translate(number, withoutSuffix, key) {\n        var result = number + ' ';\n        switch (key) {\n            case 'ss':\n                return result + (plural(number) ? 'sekundy' : 'sekund');\n            case 'm':\n                return withoutSuffix ? 'minuta' : 'minutę';\n            case 'mm':\n                return result + (plural(number) ? 'minuty' : 'minut');\n            case 'h':\n                return withoutSuffix ? 'godzina' : 'godzinę';\n            case 'hh':\n                return result + (plural(number) ? 'godziny' : 'godzin');\n            case 'ww':\n                return result + (plural(number) ? 'tygodnie' : 'tygodni');\n            case 'MM':\n                return result + (plural(number) ? 'miesiące' : 'miesięcy');\n            case 'yy':\n                return result + (plural(number) ? 'lata' : 'lat');\n        }\n    }\n\n    var pl = moment.defineLocale('pl', {\n        months: function (momentToFormat, format) {\n            if (!momentToFormat) {\n                return monthsNominative;\n            } else if (/D MMMM/.test(format)) {\n                return monthsSubjective[momentToFormat.month()];\n            } else {\n                return monthsNominative[momentToFormat.month()];\n            }\n        },\n        monthsShort: 'sty_lut_mar_kwi_maj_cze_lip_sie_wrz_paź_lis_gru'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays:\n            'niedziela_poniedziałek_wtorek_środa_czwartek_piątek_sobota'.split('_'),\n        weekdaysShort: 'ndz_pon_wt_śr_czw_pt_sob'.split('_'),\n        weekdaysMin: 'Nd_Pn_Wt_Śr_Cz_Pt_So'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Dziś o] LT',\n            nextDay: '[Jutro o] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W niedzielę o] LT';\n\n                    case 2:\n                        return '[We wtorek o] LT';\n\n                    case 3:\n                        return '[W środę o] LT';\n\n                    case 6:\n                        return '[W sobotę o] LT';\n\n                    default:\n                        return '[W] dddd [o] LT';\n                }\n            },\n            lastDay: '[Wczoraj o] LT',\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[W zeszłą niedzielę o] LT';\n                    case 3:\n                        return '[W zeszłą środę o] LT';\n                    case 6:\n                        return '[W zeszłą sobotę o] LT';\n                    default:\n                        return '[W zeszły] dddd [o] LT';\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: '%s temu',\n            s: 'kilka sekund',\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: '1 dzień',\n            dd: '%d dni',\n            w: 'tydzień',\n            ww: translate,\n            M: 'miesiąc',\n            MM: translate,\n            y: 'rok',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Persian [fa]\n//! author : Ebrahim Byagowi : https://github.com/ebraminio\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '۱',\n            2: '۲',\n            3: '۳',\n            4: '۴',\n            5: '۵',\n            6: '۶',\n            7: '۷',\n            8: '۸',\n            9: '۹',\n            0: '۰',\n        },\n        numberMap = {\n            '۱': '1',\n            '۲': '2',\n            '۳': '3',\n            '۴': '4',\n            '۵': '5',\n            '۶': '6',\n            '۷': '7',\n            '۸': '8',\n            '۹': '9',\n            '۰': '0',\n        };\n\n    var fa = moment.defineLocale('fa', {\n        months: 'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n            '_'\n        ),\n        monthsShort:\n            'ژانویه_فوریه_مارس_آوریل_مه_ژوئن_ژوئیه_اوت_سپتامبر_اکتبر_نوامبر_دسامبر'.split(\n                '_'\n            ),\n        weekdays:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysShort:\n            'یک\\u200cشنبه_دوشنبه_سه\\u200cشنبه_چهارشنبه_پنج\\u200cشنبه_جمعه_شنبه'.split(\n                '_'\n            ),\n        weekdaysMin: 'ی_د_س_چ_پ_ج_ش'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /قبل از ظهر|بعد از ظهر/,\n        isPM: function (input) {\n            return /بعد از ظهر/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'قبل از ظهر';\n            } else {\n                return 'بعد از ظهر';\n            }\n        },\n        calendar: {\n            sameDay: '[امروز ساعت] LT',\n            nextDay: '[فردا ساعت] LT',\n            nextWeek: 'dddd [ساعت] LT',\n            lastDay: '[دیروز ساعت] LT',\n            lastWeek: 'dddd [پیش] [ساعت] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'در %s',\n            past: '%s پیش',\n            s: 'چند ثانیه',\n            ss: '%d ثانیه',\n            m: 'یک دقیقه',\n            mm: '%d دقیقه',\n            h: 'یک ساعت',\n            hh: '%d ساعت',\n            d: 'یک روز',\n            dd: '%d روز',\n            M: 'یک ماه',\n            MM: '%d ماه',\n            y: 'یک سال',\n            yy: '%d سال',\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[۰-۹]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}م/,\n        ordinal: '%dم',\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return fa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic [ar]\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '١',\n            2: '٢',\n            3: '٣',\n            4: '٤',\n            5: '٥',\n            6: '٦',\n            7: '٧',\n            8: '٨',\n            9: '٩',\n            0: '٠',\n        },\n        numberMap = {\n            '١': '1',\n            '٢': '2',\n            '٣': '3',\n            '٤': '4',\n            '٥': '5',\n            '٦': '6',\n            '٧': '7',\n            '٨': '8',\n            '٩': '9',\n            '٠': '0',\n        },\n        pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                ? 1\n                : n === 2\n                ? 2\n                : n % 100 >= 3 && n % 100 <= 10\n                ? 3\n                : n % 100 >= 11\n                ? 4\n                : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'يناير',\n            'فبراير',\n            'مارس',\n            'أبريل',\n            'مايو',\n            'يونيو',\n            'يوليو',\n            'أغسطس',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var ar = moment.defineLocale('ar', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        preparse: function (string) {\n            return string\n                .replace(/[١٢٣٤٥٦٧٨٩٠]/g, function (match) {\n                    return numberMap[match];\n                })\n                .replace(/،/g, ',');\n        },\n        postformat: function (string) {\n            return string\n                .replace(/\\d/g, function (match) {\n                    return symbolMap[match];\n                })\n                .replace(/,/g, '،');\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return ar;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-param */\nimport { withInRange, getPoint, TransformToVisible } from '../../common/utils/helper';\nimport { PathOption } from '@syncfusion/ej2-svg-base';\nimport { LineBase } from './line-base';\n/**\n * `LineSeries` module used to render the line series.\n */\nvar LineSeries = /** @class */ (function (_super) {\n    __extends(LineSeries, _super);\n    function LineSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Render Line Series.\n     *\n     * @returns {void}\n     * @private\n     */\n    LineSeries.prototype.render = function (series, xAxis, yAxis, isInverted) {\n        var point1;\n        var point2;\n        var direction = '';\n        var prevPoint = null;\n        var startPoint = 'M';\n        var isPolar = (series.chart && series.chart.chartAreaType === 'PolarRadar');\n        var isDrop = (series.emptyPointSettings && series.emptyPointSettings.mode === 'Drop');\n        var getCoordinate = isPolar ? TransformToVisible : getPoint;\n        var visiblePoints = series.category === 'TrendLine' ? series.points : this.enableComplexProperty(series);\n        for (var _i = 0, visiblePoints_1 = visiblePoints; _i < visiblePoints_1.length; _i++) {\n            var point = visiblePoints_1[_i];\n            point.regions = [];\n            point.symbolLocations = [];\n            if (point.visible && withInRange(visiblePoints[point.index - 1], point, visiblePoints[point.index + 1], series)) {\n                direction += this.getLineDirection(prevPoint, point, series, isInverted, getCoordinate, startPoint);\n                startPoint = prevPoint ? 'L' : startPoint;\n                prevPoint = point;\n                this.storePointLocation(point, series, isInverted, getCoordinate);\n            }\n            else {\n                prevPoint = isDrop ? prevPoint : null;\n                startPoint = isDrop ? startPoint : 'M';\n            }\n        }\n        if (isPolar) {\n            if (series.isClosed) {\n                var points = this.getFirstLastVisiblePoint(visiblePoints);\n                point2 = getCoordinate(points.last.xValue, points.last.yValue, xAxis, yAxis, isInverted, series);\n                point1 = getCoordinate(points.first.xValue, points.first.yValue, xAxis, yAxis, isInverted, series);\n                direction = direction.concat(startPoint + ' ' + point2.x + ' ' + point2.y + ' ' + 'L' + ' ' + point1.x + ' ' + point1.y);\n            }\n        }\n        var name = series.category === 'Indicator' ? series.chart.element.id + '_Indicator_' + series.index + '_' + series.name :\n            series.category === 'TrendLine' ? series.chart.element.id + '_Series_' + series.sourceIndex + '_TrendLine_' + series.index :\n                series.chart.element.id + '_Series_' + (series.index === undefined ? series.category : series.index);\n        var options = new PathOption(name, 'none', series.width, series.interior, series.opacity, series.dashArray, direction);\n        this.appendLinePath(options, series, '');\n        this.renderMarker(series);\n    };\n    /**\n     * Animates the series.\n     *\n     * @param  {Series} series - Defines the series to animate.\n     * @returns {void}\n     */\n    LineSeries.prototype.doAnimation = function (series) {\n        var option = series.animation;\n        this.doProgressiveAnimation(series, option);\n    };\n    /**\n     * Get module name.\n     */\n    LineSeries.prototype.getModuleName = function () {\n        /**\n         * Returns the module name of the series\n         */\n        return 'LineSeries';\n    };\n    /**\n     * To destroy the line series.\n     *\n     * @returns {void}\n     * @private\n     */\n    LineSeries.prototype.destroy = function () {\n        /**\n         * Destroy method performed here\n         */\n    };\n    return LineSeries;\n}(LineBase));\nexport { LineSeries };\n","//! moment.js locale configuration\n//! locale : Bengali [bn]\n//! author : Kaushik Gandhi : https://github.com/kaushikgandhi\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bn = moment.defineLocale('bn', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /রাত|সকাল|দুপুর|বিকাল|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'রাত' && hour >= 4) ||\n                (meridiem === 'দুপুর' && hour < 5) ||\n                meridiem === 'বিকাল'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 10) {\n                return 'সকাল';\n            } else if (hour < 17) {\n                return 'দুপুর';\n            } else if (hour < 20) {\n                return 'বিকাল';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Chinese (Taiwan) [zh-tw]\n//! author : Ben : https://github.com/ben-lin\n//! author : Chris Lam : https://github.com/hehachris\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var zhTw = moment.defineLocale('zh-tw', {\n        months: '一月_二月_三月_四月_五月_六月_七月_八月_九月_十月_十一月_十二月'.split(\n            '_'\n        ),\n        monthsShort: '1月_2月_3月_4月_5月_6月_7月_8月_9月_10月_11月_12月'.split(\n            '_'\n        ),\n        weekdays: '星期日_星期一_星期二_星期三_星期四_星期五_星期六'.split('_'),\n        weekdaysShort: '週日_週一_週二_週三_週四_週五_週六'.split('_'),\n        weekdaysMin: '日_一_二_三_四_五_六'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY年M月D日',\n            LLL: 'YYYY年M月D日 HH:mm',\n            LLLL: 'YYYY年M月D日dddd HH:mm',\n            l: 'YYYY/M/D',\n            ll: 'YYYY年M月D日',\n            lll: 'YYYY年M月D日 HH:mm',\n            llll: 'YYYY年M月D日dddd HH:mm',\n        },\n        meridiemParse: /凌晨|早上|上午|中午|下午|晚上/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === '凌晨' || meridiem === '早上' || meridiem === '上午') {\n                return hour;\n            } else if (meridiem === '中午') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === '下午' || meridiem === '晚上') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            var hm = hour * 100 + minute;\n            if (hm < 600) {\n                return '凌晨';\n            } else if (hm < 900) {\n                return '早上';\n            } else if (hm < 1130) {\n                return '上午';\n            } else if (hm < 1230) {\n                return '中午';\n            } else if (hm < 1800) {\n                return '下午';\n            } else {\n                return '晚上';\n            }\n        },\n        calendar: {\n            sameDay: '[今天] LT',\n            nextDay: '[明天] LT',\n            nextWeek: '[下]dddd LT',\n            lastDay: '[昨天] LT',\n            lastWeek: '[上]dddd LT',\n            sameElse: 'L',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(日|月|週)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + '日';\n                case 'M':\n                    return number + '月';\n                case 'w':\n                case 'W':\n                    return number + '週';\n                default:\n                    return number;\n            }\n        },\n        relativeTime: {\n            future: '%s後',\n            past: '%s前',\n            s: '幾秒',\n            ss: '%d 秒',\n            m: '1 分鐘',\n            mm: '%d 分鐘',\n            h: '1 小時',\n            hh: '%d 小時',\n            d: '1 天',\n            dd: '%d 天',\n            M: '1 個月',\n            MM: '%d 個月',\n            y: '1 年',\n            yy: '%d 年',\n        },\n    });\n\n    return zhTw;\n\n})));\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./PositionReportTemplate.vue?vue&type=style&index=0&id=398199ac&prod&lang=css\"","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-param */\nimport { withInRange, pathAnimation, getElement } from '../../common/utils/helper';\nimport { PathOption } from '@syncfusion/ej2-svg-base';\nimport { ColumnBase } from './column-base';\n/**\n * `CandleSeries` module is used to render the candle series.\n */\nvar CandleSeries = /** @class */ (function (_super) {\n    __extends(CandleSeries, _super);\n    function CandleSeries() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Render Candle series.\n     *\n     * @returns {void}\n     * @private\n     */\n    CandleSeries.prototype.render = function (series) {\n        var sideBySideInfo = this.getSideBySideInfo(series);\n        var argsData;\n        var borderWidth = Math.max(series.border.width, 1);\n        for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n            var point = _a[_i];\n            var direction = '';\n            var centerRegion = void 0;\n            var tickRegion = void 0;\n            //initializing after zooming and also normal initialization\n            point.regions = [];\n            point.symbolLocations = [];\n            if (point.visible && withInRange(series.points[point.index - 1], point, series.points[point.index + 1], series)) {\n                //region to cover the top and bottom ticks\n                tickRegion = this.getRectangle((point.xValue + sideBySideInfo.median), Math.max(point.high, point.low), (point.xValue + sideBySideInfo.median), Math.min(point.high, point.low), series);\n                if (!series.chart.requireInvertedAxis) {\n                    tickRegion.x -= borderWidth / 2;\n                    tickRegion.width = borderWidth;\n                }\n                else {\n                    tickRegion.y -= borderWidth / 2;\n                    tickRegion.height = borderWidth;\n                }\n                //get middleRect\n                centerRegion = this.getRectangle((point.xValue + sideBySideInfo.start), Math.max(point.open, point.close), (point.xValue + sideBySideInfo.end), Math.min(point.open, point.close), series);\n                direction = this.getPathString(tickRegion, centerRegion, series);\n                argsData = this.triggerPointRenderEvent(series, point);\n                if (!argsData.cancel) {\n                    this.drawCandle(series, point, centerRegion, argsData, direction);\n                    this.updateSymbolLocation(point, tickRegion, series);\n                    this.updateSymbolLocation(point, centerRegion, series);\n                }\n            }\n        }\n    };\n    /**\n     * Trigger point rendering event\n     */\n    CandleSeries.prototype.triggerPointRenderEvent = function (series, point) {\n        var fill = this.getCandleColor(point, series);\n        var border = { color: series.border.color, width: Math.max(series.border.width, 1) };\n        return this.triggerEvent(series, point, fill, border);\n    };\n    /**\n     * Find the color of the candle\n     *\n     * @param {Points} point point\n     * @param {Series} series series\n     * @returns {string} color of the candle\n     * @private\n     */\n    CandleSeries.prototype.getCandleColor = function (point, series) {\n        var previousPoint = series.points[point.index - 1];\n        if (series.enableSolidCandles === false) {\n            if (!previousPoint) {\n                return series.bearFillColor || series.chart.themeStyle.bearFillColor;\n            }\n            else {\n                return previousPoint.close > point.close ? series.bullFillColor || series.chart.themeStyle.bullFillColor\n                    : series.bearFillColor || series.chart.themeStyle.bearFillColor;\n            }\n        }\n        else {\n            return point.open > point.close ? series.bullFillColor || series.chart.themeStyle.bullFillColor :\n                series.bearFillColor || series.chart.themeStyle.bearFillColor;\n        }\n    };\n    /**\n     * Finds the path of the candle shape\n     *\n     * @private\n     */\n    CandleSeries.prototype.getPathString = function (topRect, midRect, series) {\n        var direction = '';\n        var center = series.chart.requireInvertedAxis ? topRect.y + topRect.height / 2 :\n            topRect.x + topRect.width / 2;\n        //tick 1 segment\n        direction += !series.chart.requireInvertedAxis ?\n            'M' + ' ' + (center) + ' ' + (topRect.y) + ' ' + 'L' + ' ' + (center) + ' ' + midRect.y :\n            'M' + ' ' + (topRect.x) + ' ' + (center) + ' ' + 'L' + ' ' + (midRect.x) + ' ' + center;\n        direction = direction.concat(' M' + ' ' + (midRect.x) + ' ' + (midRect.y) + ' ' +\n            'L' + ' ' + (midRect.x + midRect.width) + ' ' + (midRect.y) + ' ' +\n            'L' + ' ' + (midRect.x + midRect.width) + ' ' +\n            (midRect.y + midRect.height) + ' ' +\n            'L' + ' ' + (midRect.x) + ' ' + (midRect.y + midRect.height) +\n            ' ' + 'Z');\n        direction += !series.chart.requireInvertedAxis ?\n            ' M' + ' ' + (center) + ' ' + (midRect.y + midRect.height) + ' ' + 'L' + ' ' + (center) + ' ' + (topRect.y +\n                topRect.height) :\n            ' M' + ' ' + (midRect.x + midRect.width) + ' ' + (center) + ' ' + 'L' + ' ' +\n                (topRect.x + topRect.width) + ' ' + center;\n        return direction;\n    };\n    /**\n     * Draws the candle shape\n     *\n     * @param {Series} series series\n     * @param {Points} point point\n     * @param {Rect} rect point region\n     * @param {IPointRenderEventArgs} argsData argsData\n     * @param {string} direction path direction\n     * @returns {void}\n     * @private\n     */\n    CandleSeries.prototype.drawCandle = function (series, point, rect, argsData, direction) {\n        var check = series.chart.requireInvertedAxis ? rect.height : rect.width;\n        if (check <= 0) {\n            return null;\n        }\n        var fill = !series.enableSolidCandles ?\n            (point.open > point.close ? argsData.fill : 'transparent') : argsData.fill;\n        argsData.border.color = argsData.fill;\n        var options = new PathOption(series.chart.element.id + '_Series_' + series.index + '_Point_' + point.index, fill, argsData.border.width, argsData.border.color, series.opacity, series.dashArray, direction);\n        var element = getElement(options.id);\n        var previousDirection = element ? element.getAttribute('d') : null;\n        var candleElement = series.chart.renderer.drawPath(options, new Int32Array([series.clipRect.x, series.clipRect.y]));\n        candleElement.setAttribute('role', 'img');\n        candleElement.setAttribute('aria-label', point.x.toString() + ':' + point.high.toString()\n            + ':' + point.low.toString() + ':' + point.close.toString() + ':' + point.open.toString());\n        if (!series.chart.enableCanvas) {\n            series.seriesElement.appendChild(candleElement);\n        }\n        pathAnimation(element, direction, series.chart.redraw, previousDirection);\n    };\n    /**\n     * Animates the series.\n     *\n     * @param  {Series} series - Defines the series to animate.\n     * @returns {void}\n     */\n    CandleSeries.prototype.doAnimation = function (series) {\n        this.animate(series);\n    };\n    /**\n     * Get module name.\n     */\n    CandleSeries.prototype.getModuleName = function () {\n        return 'CandleSeries';\n        /**\n         * return the module name\n         */\n    };\n    /**\n     * To destroy the candle series.\n     *\n     * @returns {void}\n     * @private\n     */\n    CandleSeries.prototype.destroy = function () {\n        /**\n         * Destroys the candle series.\n         */\n    };\n    return CandleSeries;\n}(ColumnBase));\nexport { CandleSeries };\n","/**\n * Defines types of Cell\n *\n * @hidden\n */\nexport var CellType;\n(function (CellType) {\n    /**  Defines CellType as Data */\n    CellType[CellType[\"Data\"] = 0] = \"Data\";\n    /**  Defines CellType as Header */\n    CellType[CellType[\"Header\"] = 1] = \"Header\";\n    /**  Defines CellType as Summary */\n    CellType[CellType[\"Summary\"] = 2] = \"Summary\";\n    /**  Defines CellType as GroupSummary */\n    CellType[CellType[\"GroupSummary\"] = 3] = \"GroupSummary\";\n    /**  Defines CellType as CaptionSummary */\n    CellType[CellType[\"CaptionSummary\"] = 4] = \"CaptionSummary\";\n    /**  Defines CellType as Filter */\n    CellType[CellType[\"Filter\"] = 5] = \"Filter\";\n    /**  Defines CellType as Indent */\n    CellType[CellType[\"Indent\"] = 6] = \"Indent\";\n    /**  Defines CellType as GroupCaption */\n    CellType[CellType[\"GroupCaption\"] = 7] = \"GroupCaption\";\n    /**  Defines CellType as GroupCaptionEmpty */\n    CellType[CellType[\"GroupCaptionEmpty\"] = 8] = \"GroupCaptionEmpty\";\n    /**  Defines CellType as Expand */\n    CellType[CellType[\"Expand\"] = 9] = \"Expand\";\n    /**  Defines CellType as HeaderIndent */\n    CellType[CellType[\"HeaderIndent\"] = 10] = \"HeaderIndent\";\n    /**  Defines CellType as StackedHeader */\n    CellType[CellType[\"StackedHeader\"] = 11] = \"StackedHeader\";\n    /**  Defines CellType as DetailHeader */\n    CellType[CellType[\"DetailHeader\"] = 12] = \"DetailHeader\";\n    /**  Defines CellType as DetailExpand */\n    CellType[CellType[\"DetailExpand\"] = 13] = \"DetailExpand\";\n    /**  Defines CellType as CommandColumn */\n    CellType[CellType[\"CommandColumn\"] = 14] = \"CommandColumn\";\n    /**  Defines CellType as DetailFooterIntent */\n    CellType[CellType[\"DetailFooterIntent\"] = 15] = \"DetailFooterIntent\";\n    /**  Defines CellType as RowDrag */\n    CellType[CellType[\"RowDragIcon\"] = 16] = \"RowDragIcon\";\n    /**  Defines CellType as RowDragHeader */\n    CellType[CellType[\"RowDragHIcon\"] = 17] = \"RowDragHIcon\";\n})(CellType || (CellType = {}));\n/**\n * Defines types of Render\n *\n * @hidden\n */\nexport var RenderType;\n(function (RenderType) {\n    /**  Defines RenderType as Header */\n    RenderType[RenderType[\"Header\"] = 0] = \"Header\";\n    /**  Defines RenderType as Content */\n    RenderType[RenderType[\"Content\"] = 1] = \"Content\";\n    /**  Defines RenderType as Summary */\n    RenderType[RenderType[\"Summary\"] = 2] = \"Summary\";\n})(RenderType || (RenderType = {}));\n/**\n * Defines Predefined toolbar items.\n *\n * @hidden\n */\nexport var ToolbarItem;\n(function (ToolbarItem) {\n    ToolbarItem[ToolbarItem[\"Add\"] = 0] = \"Add\";\n    ToolbarItem[ToolbarItem[\"Edit\"] = 1] = \"Edit\";\n    ToolbarItem[ToolbarItem[\"Update\"] = 2] = \"Update\";\n    ToolbarItem[ToolbarItem[\"Delete\"] = 3] = \"Delete\";\n    ToolbarItem[ToolbarItem[\"Cancel\"] = 4] = \"Cancel\";\n    ToolbarItem[ToolbarItem[\"Print\"] = 5] = \"Print\";\n    ToolbarItem[ToolbarItem[\"Search\"] = 6] = \"Search\";\n    ToolbarItem[ToolbarItem[\"ColumnChooser\"] = 7] = \"ColumnChooser\";\n    ToolbarItem[ToolbarItem[\"PdfExport\"] = 8] = \"PdfExport\";\n    ToolbarItem[ToolbarItem[\"ExcelExport\"] = 9] = \"ExcelExport\";\n    ToolbarItem[ToolbarItem[\"CsvExport\"] = 10] = \"CsvExport\";\n    ToolbarItem[ToolbarItem[\"WordExport\"] = 11] = \"WordExport\";\n})(ToolbarItem || (ToolbarItem = {}));\n/**\n * Defines types of responsive dialogs\n *\n * @hidden\n */\nexport var ResponsiveDialogAction;\n(function (ResponsiveDialogAction) {\n    /**  Defines dialog type as Edit */\n    ResponsiveDialogAction[ResponsiveDialogAction[\"isEdit\"] = 0] = \"isEdit\";\n    /**  Defines dialog type as Add */\n    ResponsiveDialogAction[ResponsiveDialogAction[\"isAdd\"] = 1] = \"isAdd\";\n    /**  Defines dialog type as Sort */\n    ResponsiveDialogAction[ResponsiveDialogAction[\"isSort\"] = 2] = \"isSort\";\n    /**  Defines dialog type as Filter */\n    ResponsiveDialogAction[ResponsiveDialogAction[\"isFilter\"] = 3] = \"isFilter\";\n    /**  Defines dialog type as ColMenu */\n    ResponsiveDialogAction[ResponsiveDialogAction[\"isColMenu\"] = 4] = \"isColMenu\";\n    /**  Defines dialog type as ColumChooser */\n    ResponsiveDialogAction[ResponsiveDialogAction[\"isColumnChooser\"] = 5] = \"isColumnChooser\";\n})(ResponsiveDialogAction || (ResponsiveDialogAction = {}));\n/**\n * Defines responsive toolbar actions\n *\n * @hidden\n */\nexport var ResponsiveToolbarAction;\n(function (ResponsiveToolbarAction) {\n    /**  Defines initial responsive toolbar buttons */\n    ResponsiveToolbarAction[ResponsiveToolbarAction[\"isInitial\"] = 0] = \"isInitial\";\n    /**  Defines responsive toolbar search */\n    ResponsiveToolbarAction[ResponsiveToolbarAction[\"isSearch\"] = 1] = \"isSearch\";\n})(ResponsiveToolbarAction || (ResponsiveToolbarAction = {}));\n","//! moment.js locale configuration\n//! locale : Russian [ru]\n//! author : Viktorminator : https://github.com/Viktorminator\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Коренберг Марк : https://github.com/socketpair\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунды_секунд' : 'секунду_секунды_секунд',\n            mm: withoutSuffix ? 'минута_минуты_минут' : 'минуту_минуты_минут',\n            hh: 'час_часа_часов',\n            dd: 'день_дня_дней',\n            ww: 'неделя_недели_недель',\n            MM: 'месяц_месяца_месяцев',\n            yy: 'год_года_лет',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'минута' : 'минуту';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    var monthsParse = [\n        /^янв/i,\n        /^фев/i,\n        /^мар/i,\n        /^апр/i,\n        /^ма[йя]/i,\n        /^июн/i,\n        /^июл/i,\n        /^авг/i,\n        /^сен/i,\n        /^окт/i,\n        /^ноя/i,\n        /^дек/i,\n    ];\n\n    // http://new.gramota.ru/spravka/rules/139-prop : § 103\n    // Сокращения месяцев: http://new.gramota.ru/spravka/buro/search-answer?s=242637\n    // CLDR data:          http://www.unicode.org/cldr/charts/28/summary/ru.html#1753\n    var ru = moment.defineLocale('ru', {\n        months: {\n            format: 'января_февраля_марта_апреля_мая_июня_июля_августа_сентября_октября_ноября_декабря'.split(\n                '_'\n            ),\n            standalone:\n                'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n                    '_'\n                ),\n        },\n        monthsShort: {\n            // по CLDR именно \"июл.\" и \"июн.\", но какой смысл менять букву на точку?\n            format: 'янв._февр._мар._апр._мая_июня_июля_авг._сент._окт._нояб._дек.'.split(\n                '_'\n            ),\n            standalone:\n                'янв._февр._март_апр._май_июнь_июль_авг._сент._окт._нояб._дек.'.split(\n                    '_'\n                ),\n        },\n        weekdays: {\n            standalone:\n                'воскресенье_понедельник_вторник_среда_четверг_пятница_суббота'.split(\n                    '_'\n                ),\n            format: 'воскресенье_понедельник_вторник_среду_четверг_пятницу_субботу'.split(\n                '_'\n            ),\n            isFormat: /\\[ ?[Вв] ?(?:прошлую|следующую|эту)? ?] ?dddd/,\n        },\n        weekdaysShort: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'вс_пн_вт_ср_чт_пт_сб'.split('_'),\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        // полные названия с падежами, по три буквы, для некоторых, по 4 буквы, сокращения с точкой и без точки\n        monthsRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // копия предыдущего\n        monthsShortRegex:\n            /^(январ[ья]|янв\\.?|феврал[ья]|февр?\\.?|марта?|мар\\.?|апрел[ья]|апр\\.?|ма[йя]|июн[ья]|июн\\.?|июл[ья]|июл\\.?|августа?|авг\\.?|сентябр[ья]|сент?\\.?|октябр[ья]|окт\\.?|ноябр[ья]|нояб?\\.?|декабр[ья]|дек\\.?)/i,\n\n        // полные названия с падежами\n        monthsStrictRegex:\n            /^(январ[яь]|феврал[яь]|марта?|апрел[яь]|ма[яй]|июн[яь]|июл[яь]|августа?|сентябр[яь]|октябр[яь]|ноябр[яь]|декабр[яь])/i,\n\n        // Выражение, которое соответствует только сокращённым формам\n        monthsShortStrictRegex:\n            /^(янв\\.|февр?\\.|мар[т.]|апр\\.|ма[яй]|июн[ья.]|июл[ья.]|авг\\.|сент?\\.|окт\\.|нояб?\\.|дек\\.)/i,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY г.',\n            LLL: 'D MMMM YYYY г., H:mm',\n            LLLL: 'dddd, D MMMM YYYY г., H:mm',\n        },\n        calendar: {\n            sameDay: '[Сегодня, в] LT',\n            nextDay: '[Завтра, в] LT',\n            lastDay: '[Вчера, в] LT',\n            nextWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В следующее] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В следующий] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В следующую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            lastWeek: function (now) {\n                if (now.week() !== this.week()) {\n                    switch (this.day()) {\n                        case 0:\n                            return '[В прошлое] dddd, [в] LT';\n                        case 1:\n                        case 2:\n                        case 4:\n                            return '[В прошлый] dddd, [в] LT';\n                        case 3:\n                        case 5:\n                        case 6:\n                            return '[В прошлую] dddd, [в] LT';\n                    }\n                } else {\n                    if (this.day() === 2) {\n                        return '[Во] dddd, [в] LT';\n                    } else {\n                        return '[В] dddd, [в] LT';\n                    }\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'через %s',\n            past: '%s назад',\n            s: 'несколько секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'час',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            w: 'неделя',\n            ww: relativeTimeWithPlural,\n            M: 'месяц',\n            MM: relativeTimeWithPlural,\n            y: 'год',\n            yy: relativeTimeWithPlural,\n        },\n        meridiemParse: /ночи|утра|дня|вечера/i,\n        isPM: function (input) {\n            return /^(дня|вечера)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночи';\n            } else if (hour < 12) {\n                return 'утра';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечера';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го|я)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                case 'w':\n                case 'W':\n                    return number + '-я';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ru;\n\n})));\n","//! moment.js locale configuration\n//! locale : Mongolian [mn]\n//! author : Javkhlantugs Nyamdorj : https://github.com/javkhaanj7\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function translate(number, withoutSuffix, key, isFuture) {\n        switch (key) {\n            case 's':\n                return withoutSuffix ? 'хэдхэн секунд' : 'хэдхэн секундын';\n            case 'ss':\n                return number + (withoutSuffix ? ' секунд' : ' секундын');\n            case 'm':\n            case 'mm':\n                return number + (withoutSuffix ? ' минут' : ' минутын');\n            case 'h':\n            case 'hh':\n                return number + (withoutSuffix ? ' цаг' : ' цагийн');\n            case 'd':\n            case 'dd':\n                return number + (withoutSuffix ? ' өдөр' : ' өдрийн');\n            case 'M':\n            case 'MM':\n                return number + (withoutSuffix ? ' сар' : ' сарын');\n            case 'y':\n            case 'yy':\n                return number + (withoutSuffix ? ' жил' : ' жилийн');\n            default:\n                return number;\n        }\n    }\n\n    var mn = moment.defineLocale('mn', {\n        months: 'Нэгдүгээр сар_Хоёрдугаар сар_Гуравдугаар сар_Дөрөвдүгээр сар_Тавдугаар сар_Зургадугаар сар_Долдугаар сар_Наймдугаар сар_Есдүгээр сар_Аравдугаар сар_Арван нэгдүгээр сар_Арван хоёрдугаар сар'.split(\n            '_'\n        ),\n        monthsShort:\n            '1 сар_2 сар_3 сар_4 сар_5 сар_6 сар_7 сар_8 сар_9 сар_10 сар_11 сар_12 сар'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'Ням_Даваа_Мягмар_Лхагва_Пүрэв_Баасан_Бямба'.split('_'),\n        weekdaysShort: 'Ням_Дав_Мяг_Лха_Пүр_Баа_Бям'.split('_'),\n        weekdaysMin: 'Ня_Да_Мя_Лх_Пү_Ба_Бя'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'YYYY оны MMMMын D',\n            LLL: 'YYYY оны MMMMын D HH:mm',\n            LLLL: 'dddd, YYYY оны MMMMын D HH:mm',\n        },\n        meridiemParse: /ҮӨ|ҮХ/i,\n        isPM: function (input) {\n            return input === 'ҮХ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ҮӨ';\n            } else {\n                return 'ҮХ';\n            }\n        },\n        calendar: {\n            sameDay: '[Өнөөдөр] LT',\n            nextDay: '[Маргааш] LT',\n            nextWeek: '[Ирэх] dddd LT',\n            lastDay: '[Өчигдөр] LT',\n            lastWeek: '[Өнгөрсөн] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s дараа',\n            past: '%s өмнө',\n            s: translate,\n            ss: translate,\n            m: translate,\n            mm: translate,\n            h: translate,\n            hh: translate,\n            d: translate,\n            dd: translate,\n            M: translate,\n            MM: translate,\n            y: translate,\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} өдөр/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'd':\n                case 'D':\n                case 'DDD':\n                    return number + ' өдөр';\n                default:\n                    return number;\n            }\n        },\n    });\n\n    return mn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Kyrgyz [ky]\n//! author : Chyngyz Arystan uulu : https://github.com/chyngyz\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var suffixes = {\n        0: '-чү',\n        1: '-чи',\n        2: '-чи',\n        3: '-чү',\n        4: '-чү',\n        5: '-чи',\n        6: '-чы',\n        7: '-чи',\n        8: '-чи',\n        9: '-чу',\n        10: '-чу',\n        20: '-чы',\n        30: '-чу',\n        40: '-чы',\n        50: '-чү',\n        60: '-чы',\n        70: '-чи',\n        80: '-чи',\n        90: '-чу',\n        100: '-чү',\n    };\n\n    var ky = moment.defineLocale('ky', {\n        months: 'январь_февраль_март_апрель_май_июнь_июль_август_сентябрь_октябрь_ноябрь_декабрь'.split(\n            '_'\n        ),\n        monthsShort: 'янв_фев_март_апр_май_июнь_июль_авг_сен_окт_ноя_дек'.split(\n            '_'\n        ),\n        weekdays: 'Жекшемби_Дүйшөмбү_Шейшемби_Шаршемби_Бейшемби_Жума_Ишемби'.split(\n            '_'\n        ),\n        weekdaysShort: 'Жек_Дүй_Шей_Шар_Бей_Жум_Ише'.split('_'),\n        weekdaysMin: 'Жк_Дй_Шй_Шр_Бй_Жм_Иш'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Бүгүн саат] LT',\n            nextDay: '[Эртең саат] LT',\n            nextWeek: 'dddd [саат] LT',\n            lastDay: '[Кечээ саат] LT',\n            lastWeek: '[Өткөн аптанын] dddd [күнү] [саат] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ичинде',\n            past: '%s мурун',\n            s: 'бирнече секунд',\n            ss: '%d секунд',\n            m: 'бир мүнөт',\n            mm: '%d мүнөт',\n            h: 'бир саат',\n            hh: '%d саат',\n            d: 'бир күн',\n            dd: '%d күн',\n            M: 'бир ай',\n            MM: '%d ай',\n            y: 'бир жыл',\n            yy: '%d жыл',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(чи|чы|чү|чу)/,\n        ordinal: function (number) {\n            var a = number % 10,\n                b = number >= 100 ? 100 : null;\n            return number + (suffixes[number] || suffixes[a] || suffixes[b]);\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ky;\n\n})));\n","//! moment.js locale configuration\n//! locale : Bengali (Bangladesh) [bn-bd]\n//! author : Asraf Hossain Patoary : https://github.com/ashwoolford\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '১',\n            2: '২',\n            3: '৩',\n            4: '৪',\n            5: '৫',\n            6: '৬',\n            7: '৭',\n            8: '৮',\n            9: '৯',\n            0: '০',\n        },\n        numberMap = {\n            '১': '1',\n            '২': '2',\n            '৩': '3',\n            '৪': '4',\n            '৫': '5',\n            '৬': '6',\n            '৭': '7',\n            '৮': '8',\n            '৯': '9',\n            '০': '0',\n        };\n\n    var bnBd = moment.defineLocale('bn-bd', {\n        months: 'জানুয়ারি_ফেব্রুয়ারি_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্টেম্বর_অক্টোবর_নভেম্বর_ডিসেম্বর'.split(\n            '_'\n        ),\n        monthsShort:\n            'জানু_ফেব্রু_মার্চ_এপ্রিল_মে_জুন_জুলাই_আগস্ট_সেপ্ট_অক্টো_নভে_ডিসে'.split(\n                '_'\n            ),\n        weekdays: 'রবিবার_সোমবার_মঙ্গলবার_বুধবার_বৃহস্পতিবার_শুক্রবার_শনিবার'.split(\n            '_'\n        ),\n        weekdaysShort: 'রবি_সোম_মঙ্গল_বুধ_বৃহস্পতি_শুক্র_শনি'.split('_'),\n        weekdaysMin: 'রবি_সোম_মঙ্গল_বুধ_বৃহ_শুক্র_শনি'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm সময়',\n            LTS: 'A h:mm:ss সময়',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm সময়',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm সময়',\n        },\n        calendar: {\n            sameDay: '[আজ] LT',\n            nextDay: '[আগামীকাল] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[গতকাল] LT',\n            lastWeek: '[গত] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s পরে',\n            past: '%s আগে',\n            s: 'কয়েক সেকেন্ড',\n            ss: '%d সেকেন্ড',\n            m: 'এক মিনিট',\n            mm: '%d মিনিট',\n            h: 'এক ঘন্টা',\n            hh: '%d ঘন্টা',\n            d: 'এক দিন',\n            dd: '%d দিন',\n            M: 'এক মাস',\n            MM: '%d মাস',\n            y: 'এক বছর',\n            yy: '%d বছর',\n        },\n        preparse: function (string) {\n            return string.replace(/[১২৩৪৫৬৭৮৯০]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n\n        meridiemParse: /রাত|ভোর|সকাল|দুপুর|বিকাল|সন্ধ্যা|রাত/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'রাত') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ভোর') {\n                return hour;\n            } else if (meridiem === 'সকাল') {\n                return hour;\n            } else if (meridiem === 'দুপুর') {\n                return hour >= 3 ? hour : hour + 12;\n            } else if (meridiem === 'বিকাল') {\n                return hour + 12;\n            } else if (meridiem === 'সন্ধ্যা') {\n                return hour + 12;\n            }\n        },\n\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'রাত';\n            } else if (hour < 6) {\n                return 'ভোর';\n            } else if (hour < 12) {\n                return 'সকাল';\n            } else if (hour < 15) {\n                return 'দুপুর';\n            } else if (hour < 18) {\n                return 'বিকাল';\n            } else if (hour < 20) {\n                return 'সন্ধ্যা';\n            } else {\n                return 'রাত';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bnBd;\n\n})));\n","//! moment.js locale configuration\n//! locale : Romanian [ro]\n//! author : Vlad Gurdiga : https://github.com/gurdiga\n//! author : Valentin Agachi : https://github.com/avaly\n//! author : Emanuel Cepoi : https://github.com/cepem\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n                ss: 'secunde',\n                mm: 'minute',\n                hh: 'ore',\n                dd: 'zile',\n                ww: 'săptămâni',\n                MM: 'luni',\n                yy: 'ani',\n            },\n            separator = ' ';\n        if (number % 100 >= 20 || (number >= 100 && number % 100 === 0)) {\n            separator = ' de ';\n        }\n        return number + separator + format[key];\n    }\n\n    var ro = moment.defineLocale('ro', {\n        months: 'ianuarie_februarie_martie_aprilie_mai_iunie_iulie_august_septembrie_octombrie_noiembrie_decembrie'.split(\n            '_'\n        ),\n        monthsShort:\n            'ian._feb._mart._apr._mai_iun._iul._aug._sept._oct._nov._dec.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'duminică_luni_marți_miercuri_joi_vineri_sâmbătă'.split('_'),\n        weekdaysShort: 'Dum_Lun_Mar_Mie_Joi_Vin_Sâm'.split('_'),\n        weekdaysMin: 'Du_Lu_Ma_Mi_Jo_Vi_Sâ'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY H:mm',\n            LLLL: 'dddd, D MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[azi la] LT',\n            nextDay: '[mâine la] LT',\n            nextWeek: 'dddd [la] LT',\n            lastDay: '[ieri la] LT',\n            lastWeek: '[fosta] dddd [la] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'peste %s',\n            past: '%s în urmă',\n            s: 'câteva secunde',\n            ss: relativeTimeWithPlural,\n            m: 'un minut',\n            mm: relativeTimeWithPlural,\n            h: 'o oră',\n            hh: relativeTimeWithPlural,\n            d: 'o zi',\n            dd: relativeTimeWithPlural,\n            w: 'o săptămână',\n            ww: relativeTimeWithPlural,\n            M: 'o lună',\n            MM: relativeTimeWithPlural,\n            y: 'un an',\n            yy: relativeTimeWithPlural,\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ro;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Touch, Component, EventHandler, selectAll, getUniqueID, removeClass } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, Property, Browser, detach, createElement as buildTag } from '@syncfusion/ej2-base';\nimport { classList, isNullOrUndefined } from '@syncfusion/ej2-base';\nvar CLS_ROOT = 'e-vscroll';\nvar CLS_RTL = 'e-rtl';\nvar CLS_DISABLE = 'e-overlay';\nvar CLS_VSCROLLBAR = 'e-vscroll-bar';\nvar CLS_VSCROLLCON = 'e-vscroll-content';\nvar CLS_NAVARROW = 'e-nav-arrow';\nvar CLS_NAVUPARROW = 'e-nav-up-arrow';\nvar CLS_NAVDOWNARROW = 'e-nav-down-arrow';\nvar CLS_VSCROLLNAV = 'e-scroll-nav';\nvar CLS_VSCROLLNAVUP = 'e-scroll-up-nav';\nvar CLS_VSCROLLNAVDOWN = 'e-scroll-down-nav';\nvar CLS_DEVICE = 'e-scroll-device';\nvar CLS_OVERLAY = 'e-scroll-overlay';\nvar CLS_UPOVERLAY = 'e-scroll-up-overlay';\nvar CLS_DOWNOVERLAY = 'e-scroll-down-overlay';\nvar OVERLAY_MAXWID = 40;\n/**\n * VScroll module is introduces vertical scroller when content exceeds the current viewing area.\n * It can be useful for the components like Toolbar, Tab which needs vertical scrolling alone.\n * Hidden content can be view by touch moving or icon click.\n * ```html\n * <div id=\"scroll\"/>\n * <script>\n *   var scrollObj = new VScroll();\n *   scrollObj.appendTo(\"#scroll\");\n * </script>\n * ```\n */\nvar VScroll = /** @class */ (function (_super) {\n    __extends(VScroll, _super);\n    /**\n     * Initializes a new instance of the VScroll class.\n     *\n     * @param {VScrollModel} options  - Specifies VScroll model properties as options.\n     * @param {string | HTMLElement} element  - Specifies the element for which vertical scrolling applies.\n     */\n    function VScroll(options, element) {\n        return _super.call(this, options, element) || this;\n    }\n    /**\n     * Initialize the event handler\n     *\n     * @private\n     * @returns {void}\n     */\n    VScroll.prototype.preRender = function () {\n        this.browser = Browser.info.name;\n        this.browserCheck = this.browser === 'mozilla';\n        this.isDevice = Browser.isDevice;\n        this.customStep = true;\n        var ele = this.element;\n        this.ieCheck = this.browser === 'edge' || this.browser === 'msie';\n        this.initialize();\n        if (ele.id === '') {\n            ele.id = getUniqueID('vscroll');\n            this.uniqueId = true;\n        }\n        ele.style.display = 'block';\n        if (this.enableRtl) {\n            ele.classList.add(CLS_RTL);\n        }\n    };\n    /**\n     * To Initialize the vertical scroll rendering\n     *\n     * @private\n     * @returns {void}\n     */\n    VScroll.prototype.render = function () {\n        this.touchModule = new Touch(this.element, { scroll: this.touchHandler.bind(this), swipe: this.swipeHandler.bind(this) });\n        EventHandler.add(this.scrollEle, 'scroll', this.scrollEventHandler, this);\n        if (!this.isDevice) {\n            this.createNavIcon(this.element);\n        }\n        else {\n            this.element.classList.add(CLS_DEVICE);\n            this.createOverlayElement(this.element);\n        }\n        this.setScrollState();\n        EventHandler.add(this.element, 'wheel', this.wheelEventHandler, this);\n    };\n    VScroll.prototype.setScrollState = function () {\n        if (isNullOrUndefined(this.scrollStep) || this.scrollStep < 0) {\n            this.scrollStep = this.scrollEle.offsetHeight;\n            this.customStep = false;\n        }\n        else {\n            this.customStep = true;\n        }\n    };\n    VScroll.prototype.initialize = function () {\n        var scrollCnt = buildTag('div', { className: CLS_VSCROLLCON });\n        var scrollBar = buildTag('div', { className: CLS_VSCROLLBAR });\n        scrollBar.setAttribute('tabindex', '-1');\n        var ele = this.element;\n        var innerEle = [].slice.call(ele.children);\n        for (var _i = 0, innerEle_1 = innerEle; _i < innerEle_1.length; _i++) {\n            var ele_1 = innerEle_1[_i];\n            scrollCnt.appendChild(ele_1);\n        }\n        scrollBar.appendChild(scrollCnt);\n        ele.appendChild(scrollBar);\n        scrollBar.style.overflow = 'hidden';\n        this.scrollEle = scrollBar;\n        this.scrollItems = scrollCnt;\n    };\n    VScroll.prototype.getPersistData = function () {\n        var keyEntity = ['scrollStep'];\n        return this.addOnPersist(keyEntity);\n    };\n    /**\n     * Returns the current module name.\n     *\n     * @returns {string} - It returns the current module name.\n     * @private\n     */\n    VScroll.prototype.getModuleName = function () {\n        return 'vScroll';\n    };\n    /**\n     * Removes the control from the DOM and also removes all its related events.\n     *\n     * @returns {void}\n     */\n    VScroll.prototype.destroy = function () {\n        var el = this.element;\n        el.style.display = '';\n        removeClass([this.element], [CLS_ROOT, CLS_DEVICE, CLS_RTL]);\n        var navs = selectAll('.e-' + el.id + '_nav.' + CLS_VSCROLLNAV, el);\n        var overlays = selectAll('.' + CLS_OVERLAY, el);\n        [].slice.call(overlays).forEach(function (ele) {\n            detach(ele);\n        });\n        for (var _i = 0, _a = [].slice.call(this.scrollItems.children); _i < _a.length; _i++) {\n            var elem = _a[_i];\n            el.appendChild(elem);\n        }\n        if (this.uniqueId) {\n            this.element.removeAttribute('id');\n        }\n        detach(this.scrollEle);\n        if (navs.length > 0) {\n            detach(navs[0]);\n            if (!isNullOrUndefined(navs[1])) {\n                detach(navs[1]);\n            }\n        }\n        EventHandler.remove(this.scrollEle, 'scroll', this.scrollEventHandler);\n        this.touchModule.destroy();\n        this.touchModule = null;\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * Specifies the value to disable/enable the VScroll component.\n     * When set to `true` , the component will be disabled.\n     *\n     * @param  {boolean} value - Based on this Boolean value, VScroll will be enabled (false) or disabled (true).\n     * @returns {void}.\n     */\n    VScroll.prototype.disable = function (value) {\n        var navEle = selectAll('.e-scroll-nav:not(.' + CLS_DISABLE + ')', this.element);\n        if (value) {\n            this.element.classList.add(CLS_DISABLE);\n        }\n        else {\n            this.element.classList.remove(CLS_DISABLE);\n        }\n        [].slice.call(navEle).forEach(function (el) {\n            el.setAttribute('tabindex', !value ? '0' : '-1');\n        });\n    };\n    VScroll.prototype.createOverlayElement = function (element) {\n        var id = element.id.concat('_nav');\n        var downOverlayEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_DOWNOVERLAY });\n        var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n        var downEle = buildTag('div', { id: id.concat('down'), className: clsDown });\n        var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n        downEle.appendChild(navItem);\n        var upEle = buildTag('div', { className: CLS_OVERLAY + ' ' + CLS_UPOVERLAY });\n        if (this.ieCheck) {\n            downEle.classList.add('e-ie-align');\n        }\n        element.appendChild(downOverlayEle);\n        element.appendChild(downEle);\n        element.insertBefore(upEle, element.firstChild);\n        this.eventBinding([downEle]);\n    };\n    VScroll.prototype.createNavIcon = function (element) {\n        var id = element.id.concat('_nav');\n        var clsDown = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVDOWN);\n        var nav = buildTag('div', { id: id.concat('_down'), className: clsDown });\n        nav.setAttribute('aria-disabled', 'false');\n        var navItem = buildTag('div', { className: CLS_NAVDOWNARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n        var clsUp = 'e-' + element.id.concat('_nav ' + CLS_VSCROLLNAV + ' ' + CLS_VSCROLLNAVUP);\n        var navElement = buildTag('div', { id: id.concat('_up'), className: clsUp + ' ' + CLS_DISABLE });\n        navElement.setAttribute('aria-disabled', 'true');\n        var navUpItem = buildTag('div', { className: CLS_NAVUPARROW + ' ' + CLS_NAVARROW + ' e-icons' });\n        navElement.appendChild(navUpItem);\n        nav.appendChild(navItem);\n        nav.setAttribute('tabindex', '0');\n        element.appendChild(nav);\n        element.insertBefore(navElement, element.firstChild);\n        if (this.ieCheck) {\n            nav.classList.add('e-ie-align');\n            navElement.classList.add('e-ie-align');\n        }\n        this.eventBinding([nav, navElement]);\n    };\n    VScroll.prototype.onKeyPress = function (ev) {\n        var _this = this;\n        if (ev.key === 'Enter') {\n            var timeoutFun_1 = function () {\n                _this.keyTimeout = true;\n                _this.eleScrolling(10, ev.target, true);\n            };\n            this.keyTimer = window.setTimeout(function () {\n                timeoutFun_1();\n            }, 100);\n        }\n    };\n    VScroll.prototype.onKeyUp = function (ev) {\n        if (ev.key !== 'Enter') {\n            return;\n        }\n        if (this.keyTimeout) {\n            this.keyTimeout = false;\n        }\n        else {\n            ev.target.click();\n        }\n        clearTimeout(this.keyTimer);\n    };\n    VScroll.prototype.eventBinding = function (element) {\n        var _this = this;\n        [].slice.call(element).forEach(function (ele) {\n            new Touch(ele, { tapHold: _this.tabHoldHandler.bind(_this), tapHoldThreshold: 500 });\n            ele.addEventListener('keydown', _this.onKeyPress.bind(_this));\n            ele.addEventListener('keyup', _this.onKeyUp.bind(_this));\n            ele.addEventListener('mouseup', _this.repeatScroll.bind(_this));\n            ele.addEventListener('touchend', _this.repeatScroll.bind(_this));\n            ele.addEventListener('contextmenu', function (e) {\n                e.preventDefault();\n            });\n            EventHandler.add(ele, 'click', _this.clickEventHandler, _this);\n        });\n    };\n    VScroll.prototype.repeatScroll = function () {\n        clearInterval(this.timeout);\n    };\n    VScroll.prototype.tabHoldHandler = function (ev) {\n        var _this = this;\n        var trgt = ev.originalEvent.target;\n        trgt = this.contains(trgt, CLS_VSCROLLNAV) ? trgt.firstElementChild : trgt;\n        var scrollDistance = 10;\n        var timeoutFun = function () {\n            _this.eleScrolling(scrollDistance, trgt, true);\n        };\n        this.timeout = window.setInterval(function () {\n            timeoutFun();\n        }, 50);\n    };\n    VScroll.prototype.contains = function (element, className) {\n        return element.classList.contains(className);\n    };\n    VScroll.prototype.eleScrolling = function (scrollDis, trgt, isContinuous) {\n        var classList = trgt.classList;\n        if (classList.contains(CLS_VSCROLLNAV)) {\n            classList = trgt.querySelector('.' + CLS_NAVARROW).classList;\n        }\n        if (classList.contains(CLS_NAVDOWNARROW)) {\n            this.frameScrollRequest(scrollDis, 'add', isContinuous);\n        }\n        else if (classList.contains(CLS_NAVUPARROW)) {\n            this.frameScrollRequest(scrollDis, '', isContinuous);\n        }\n    };\n    VScroll.prototype.clickEventHandler = function (event) {\n        this.eleScrolling(this.scrollStep, event.target, false);\n    };\n    VScroll.prototype.wheelEventHandler = function (e) {\n        e.preventDefault();\n        this.frameScrollRequest(this.scrollStep, (e.deltaY > 0 ? 'add' : ''), false);\n    };\n    VScroll.prototype.swipeHandler = function (e) {\n        var swipeElement = this.scrollEle;\n        var distance;\n        if (e.velocity <= 1) {\n            distance = e.distanceY / (e.velocity * 10);\n        }\n        else {\n            distance = e.distanceY / e.velocity;\n        }\n        var start = 0.5;\n        var animate = function () {\n            var step = Math.sin(start);\n            if (step <= 0) {\n                window.cancelAnimationFrame(step);\n            }\n            else {\n                if (e.swipeDirection === 'Up') {\n                    swipeElement.scrollTop += distance * step;\n                }\n                else if (e.swipeDirection === 'Down') {\n                    swipeElement.scrollTop -= distance * step;\n                }\n                start -= 0.02;\n                window.requestAnimationFrame(animate);\n            }\n        };\n        animate();\n    };\n    VScroll.prototype.scrollUpdating = function (scrollVal, action) {\n        if (action === 'add') {\n            this.scrollEle.scrollTop += scrollVal;\n        }\n        else {\n            this.scrollEle.scrollTop -= scrollVal;\n        }\n    };\n    VScroll.prototype.frameScrollRequest = function (scrollValue, action, isContinuous) {\n        var _this = this;\n        var step = 10;\n        if (isContinuous) {\n            this.scrollUpdating(scrollValue, action);\n            return;\n        }\n        if (!this.customStep) {\n            [].slice.call(selectAll('.' + CLS_OVERLAY, this.element)).forEach(function (el) {\n                scrollValue -= el.offsetHeight;\n            });\n        }\n        var animate = function () {\n            if (scrollValue < step) {\n                window.cancelAnimationFrame(step);\n            }\n            else {\n                _this.scrollUpdating(step, action);\n                scrollValue -= step;\n                window.requestAnimationFrame(animate);\n            }\n        };\n        animate();\n    };\n    VScroll.prototype.touchHandler = function (e) {\n        var el = this.scrollEle;\n        var distance = e.distanceY;\n        if (e.scrollDirection === 'Up') {\n            el.scrollTop = el.scrollTop + distance;\n        }\n        else if (e.scrollDirection === 'Down') {\n            el.scrollTop = el.scrollTop - distance;\n        }\n    };\n    VScroll.prototype.arrowDisabling = function (addDisableCls, removeDisableCls) {\n        if (this.isDevice) {\n            var arrowEle = isNullOrUndefined(addDisableCls) ? removeDisableCls : addDisableCls;\n            var arrowIcon = arrowEle.querySelector('.' + CLS_NAVARROW);\n            if (isNullOrUndefined(addDisableCls)) {\n                classList(arrowIcon, [CLS_NAVDOWNARROW], [CLS_NAVUPARROW]);\n            }\n            else {\n                classList(arrowIcon, [CLS_NAVUPARROW], [CLS_NAVDOWNARROW]);\n            }\n        }\n        else {\n            addDisableCls.classList.add(CLS_DISABLE);\n            addDisableCls.setAttribute('aria-disabled', 'true');\n            addDisableCls.removeAttribute('tabindex');\n            removeDisableCls.classList.remove(CLS_DISABLE);\n            removeDisableCls.setAttribute('aria-disabled', 'false');\n            removeDisableCls.setAttribute('tabindex', '0');\n        }\n        this.repeatScroll();\n    };\n    VScroll.prototype.scrollEventHandler = function (e) {\n        var target = e.target;\n        var height = target.offsetHeight;\n        var navUpEle = this.element.querySelector('.' + CLS_VSCROLLNAVUP);\n        var navDownEle = this.element.querySelector('.' + CLS_VSCROLLNAVDOWN);\n        var upOverlay = this.element.querySelector('.' + CLS_UPOVERLAY);\n        var downOverlay = this.element.querySelector('.' + CLS_DOWNOVERLAY);\n        var scrollTop = target.scrollTop;\n        if (scrollTop <= 0) {\n            scrollTop = -scrollTop;\n        }\n        if (this.isDevice) {\n            if (scrollTop < OVERLAY_MAXWID) {\n                upOverlay.style.height = scrollTop + 'px';\n            }\n            else {\n                upOverlay.style.height = '40px';\n            }\n            if ((target.scrollHeight - Math.ceil(height + scrollTop)) < OVERLAY_MAXWID) {\n                downOverlay.style.height = (target.scrollHeight - Math.ceil(height + scrollTop)) + 'px';\n            }\n            else {\n                downOverlay.style.height = '40px';\n            }\n        }\n        if (scrollTop === 0) {\n            this.arrowDisabling(navUpEle, navDownEle);\n        }\n        else if (Math.ceil(height + scrollTop + .1) >= target.scrollHeight) {\n            this.arrowDisabling(navDownEle, navUpEle);\n        }\n        else {\n            var disEle = this.element.querySelector('.' + CLS_VSCROLLNAV + '.' + CLS_DISABLE);\n            if (disEle) {\n                disEle.classList.remove(CLS_DISABLE);\n                disEle.setAttribute('aria-disabled', 'false');\n                disEle.setAttribute('tabindex', '0');\n            }\n        }\n    };\n    /**\n     * Gets called when the model property changes.The data that describes the old and new values of property that changed.\n     *\n     * @param  {VScrollModel} newProp - It contains the new value of data.\n     * @param  {VScrollModel} oldProp - It contains the old value of data.\n     * @returns {void}\n     * @private\n     */\n    VScroll.prototype.onPropertyChanged = function (newProp, oldProp) {\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'scrollStep':\n                    this.setScrollState();\n                    break;\n                case 'enableRtl':\n                    if (newProp.enableRtl) {\n                        this.element.classList.add(CLS_RTL);\n                    }\n                    else {\n                        this.element.classList.remove(CLS_RTL);\n                    }\n                    break;\n            }\n        }\n    };\n    __decorate([\n        Property(null)\n    ], VScroll.prototype, \"scrollStep\", void 0);\n    VScroll = __decorate([\n        NotifyPropertyChanges\n    ], VScroll);\n    return VScroll;\n}(Component));\nexport { VScroll };\n","//! moment.js locale configuration\n//! locale : Welsh [cy]\n//! author : Robert Allen : https://github.com/robgallen\n//! author : https://github.com/ryangreaves\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var cy = moment.defineLocale('cy', {\n        months: 'Ionawr_Chwefror_Mawrth_Ebrill_Mai_Mehefin_Gorffennaf_Awst_Medi_Hydref_Tachwedd_Rhagfyr'.split(\n            '_'\n        ),\n        monthsShort: 'Ion_Chwe_Maw_Ebr_Mai_Meh_Gor_Aws_Med_Hyd_Tach_Rhag'.split(\n            '_'\n        ),\n        weekdays:\n            'Dydd Sul_Dydd Llun_Dydd Mawrth_Dydd Mercher_Dydd Iau_Dydd Gwener_Dydd Sadwrn'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sul_Llun_Maw_Mer_Iau_Gwe_Sad'.split('_'),\n        weekdaysMin: 'Su_Ll_Ma_Me_Ia_Gw_Sa'.split('_'),\n        weekdaysParseExact: true,\n        // time formats are the same as en-gb\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Heddiw am] LT',\n            nextDay: '[Yfory am] LT',\n            nextWeek: 'dddd [am] LT',\n            lastDay: '[Ddoe am] LT',\n            lastWeek: 'dddd [diwethaf am] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'mewn %s',\n            past: '%s yn ôl',\n            s: 'ychydig eiliadau',\n            ss: '%d eiliad',\n            m: 'munud',\n            mm: '%d munud',\n            h: 'awr',\n            hh: '%d awr',\n            d: 'diwrnod',\n            dd: '%d diwrnod',\n            M: 'mis',\n            MM: '%d mis',\n            y: 'blwyddyn',\n            yy: '%d flynedd',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(fed|ain|af|il|ydd|ed|eg)/,\n        // traditional ordinal numbers above 31 are not commonly used in colloquial Welsh\n        ordinal: function (number) {\n            var b = number,\n                output = '',\n                lookup = [\n                    '',\n                    'af',\n                    'il',\n                    'ydd',\n                    'ydd',\n                    'ed',\n                    'ed',\n                    'ed',\n                    'fed',\n                    'fed',\n                    'fed', // 1af to 10fed\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'eg',\n                    'fed',\n                    'eg',\n                    'fed', // 11eg to 20fed\n                ];\n            if (b > 20) {\n                if (b === 40 || b === 50 || b === 60 || b === 80 || b === 100) {\n                    output = 'fed'; // not 30ain, 70ain or 90ain\n                } else {\n                    output = 'ain';\n                }\n            } else if (b > 0) {\n                output = lookup[b];\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return cy;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { selectAll, select, createElement, Base, detach } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined, EventHandler } from '@syncfusion/ej2-base';\nimport { Property, NotifyPropertyChanges, Event, onIntlChange } from '@syncfusion/ej2-base';\nimport { Internationalization, L10n } from '@syncfusion/ej2-base';\n/**\n * global declarations\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport var regex = {\n    /* eslint-disable no-useless-escape */\n    EMAIL: new RegExp('^[A-Za-z0-9._%+-]{1,}@[A-Za-z0-9._%+-]{1,}([.]{1}[a-zA-Z0-9]{2,}' +\n        '|[.]{1}[a-zA-Z0-9]{2,4}[.]{1}[a-zA-Z0-9]{2,4})$'),\n    /* eslint-disable-next-line security/detect-unsafe-regex */\n    URL: /^(?:http(s)?:\\/\\/)?[\\w.-]+(?:\\.[\\w\\.-]+)+[\\w\\-\\._~:/?#[\\]@!\\$&'\\(\\)\\*\\+,;=.]+$/m,\n    DATE_ISO: new RegExp('^([0-9]{4})-(0[1-9]|1[0-2])-(0[1-9]|[1-2][0-9]|3[0-1])$'),\n    DIGITS: new RegExp('^[0-9]*$'),\n    PHONE: new RegExp('^[+]?[0-9]{9,13}$'),\n    CREDITCARD: new RegExp('^\\\\d{13,16}$')\n    /* eslint-enable no-useless-escape */\n};\n/**\n * ErrorOption values\n *\n * @private\n */\nexport var ErrorOption;\n(function (ErrorOption) {\n    /**\n     * Defines the error message.\n     */\n    ErrorOption[ErrorOption[\"Message\"] = 0] = \"Message\";\n    /**\n     * Defines the error element type.\n     */\n    ErrorOption[ErrorOption[\"Label\"] = 1] = \"Label\";\n})(ErrorOption || (ErrorOption = {}));\n/**\n * FormValidator class enables you to validate the form fields based on your defined rules\n * ```html\n * <form id='formId'>\n *  <input type='text' name='Name' />\n *  <input type='text' name='Age' />\n * </form>\n * <script>\n *   let formObject = new FormValidator('#formId', {\n *      rules: { Name: { required: true }, Age: { range: [18, 30] } };\n *   });\n *   formObject.validate();\n * </script>\n * ```\n */\nvar FormValidator = /** @class */ (function (_super) {\n    __extends(FormValidator, _super);\n    /**\n     * Initializes the FormValidator.\n     *\n     * @param {string | HTMLFormElement} element - Specifies the element to render as component.\n     * @param {FormValidatorModel} options - Specifies the FormValidator model.\n     * @private\n     */\n    function FormValidator(element, options) {\n        var _this = _super.call(this, options, element) || this;\n        _this.validated = [];\n        _this.errorRules = [];\n        _this.allowSubmit = false;\n        _this.required = 'required';\n        _this.infoElement = null;\n        _this.inputElement = null;\n        _this.selectQuery = 'input:not([type=reset]):not([type=button]), select, textarea';\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        _this.localyMessage = {};\n        /**\n         * Specifies the default messages for validation rules.\n         *\n         * @default { List of validation message }\n         */\n        _this.defaultMessages = {\n            required: 'This field is required.',\n            email: 'Please enter a valid email address.',\n            url: 'Please enter a valid URL.',\n            date: 'Please enter a valid date.',\n            dateIso: 'Please enter a valid date ( ISO ).',\n            creditcard: 'Please enter valid card number',\n            number: 'Please enter a valid number.',\n            digits: 'Please enter only digits.',\n            maxLength: 'Please enter no more than {0} characters.',\n            minLength: 'Please enter at least {0} characters.',\n            rangeLength: 'Please enter a value between {0} and {1} characters long.',\n            range: 'Please enter a value between {0} and {1}.',\n            max: 'Please enter a value less than or equal to {0}.',\n            min: 'Please enter a value greater than or equal to {0}.',\n            regex: 'Please enter a correct value.',\n            tel: 'Please enter a valid phone number.',\n            pattern: 'Please enter a correct pattern value.',\n            equalTo: 'Please enter the valid match text'\n        };\n        if (typeof _this.rules === 'undefined') {\n            _this.rules = {};\n        }\n        _this.l10n = new L10n('formValidator', _this.defaultMessages, _this.locale);\n        if (_this.locale) {\n            _this.localeFunc();\n        }\n        onIntlChange.on('notifyExternalChange', _this.afterLocalization, _this);\n        element = typeof element === 'string' ? select(element, document) : element;\n        // Set novalidate to prevent default HTML5 form validation\n        if (_this.element != null) {\n            _this.element.setAttribute('novalidate', '');\n            _this.inputElements = selectAll(_this.selectQuery, _this.element);\n            _this.createHTML5Rules();\n            _this.wireEvents();\n        }\n        else {\n            return undefined;\n        }\n        return _this;\n    }\n    FormValidator_1 = FormValidator;\n    /* eslint-enable @typescript-eslint/no-explicit-any */\n    /**\n     * Add validation rules to the corresponding input element based on `name` attribute.\n     *\n     * @param {string} name `name` of form field.\n     * @param {Object} rules Validation rules for the corresponding element.\n     * @returns {void}\n     */\n    FormValidator.prototype.addRules = function (name, rules) {\n        if (name) {\n            // eslint-disable-next-line no-prototype-builtins\n            if (this.rules.hasOwnProperty(name)) {\n                extend(this.rules[\"\" + name], rules, {});\n            }\n            else {\n                this.rules[\"\" + name] = rules;\n            }\n        }\n    };\n    /**\n     * Remove validation to the corresponding field based on name attribute.\n     * When no parameter is passed, remove all the validations in the form.\n     *\n     * @param {string} name Input name attribute value.\n     * @param {string[]} rules List of validation rules need to be remove from the corresponding element.\n     * @returns {void}\n     */\n    FormValidator.prototype.removeRules = function (name, rules) {\n        if (!name && !rules) {\n            this.rules = {};\n        }\n        else if (this.rules[\"\" + name] && !rules) {\n            delete this.rules[\"\" + name];\n        }\n        else if (!isNullOrUndefined(this.rules[\"\" + name] && rules)) {\n            for (var i = 0; i < rules.length; i++) {\n                delete this.rules[\"\" + name][rules[parseInt(i.toString())]];\n            }\n        }\n        else {\n            return;\n        }\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Validate the current form values using defined rules.\n     * Returns `true` when the form is valid otherwise `false`\n     *\n     * @param {string} selected - Optional parameter to validate specified element.\n     * @returns {boolean}\n     */\n    FormValidator.prototype.validate = function (selected) {\n        var rules = Object.keys(this.rules);\n        if (selected && rules.length) {\n            this.validateRules(selected);\n            //filter the selected element it don't have any valid input element\n            return rules.indexOf(selected) !== -1 && this.errorRules.filter(function (data) {\n                return data.name === selected;\n            }).length === 0;\n        }\n        else {\n            this.errorRules = [];\n            for (var _i = 0, rules_1 = rules; _i < rules_1.length; _i++) {\n                var name_1 = rules_1[_i];\n                this.validateRules(name_1);\n            }\n            return this.errorRules.length === 0;\n        }\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Reset the value of all the fields in form.\n     *\n     * @returns {void}\n     */\n    FormValidator.prototype.reset = function () {\n        this.element.reset();\n        this.clearForm();\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Get input element by name.\n     *\n     * @param {string} name - Input element name attribute value.\n     * @returns {HTMLInputElement}\n     */\n    FormValidator.prototype.getInputElement = function (name) {\n        this.inputElement = (select('[name=\"' + name + '\"]', this.element));\n        return this.inputElement;\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Destroy the form validator object and error elements.\n     *\n     * @returns {void}\n     */\n    FormValidator.prototype.destroy = function () {\n        this.reset();\n        this.unwireEvents();\n        this.rules = {};\n        var elements = selectAll('.' + this.errorClass + ', .' + this.validClass, this.element);\n        for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n            var element = elements_1[_i];\n            detach(element);\n        }\n        _super.prototype.destroy.call(this);\n        this.infoElement = null;\n        onIntlChange.off('notifyExternalChange', this.afterLocalization);\n    };\n    /**\n     * @param {FormValidatorModel} newProp - Returns the dynamic property value of the component.\n     * @param {FormValidatorModel} oldProp - Returns the previous property value of the component.\n     * @returns {void}\n     * @private\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    FormValidator.prototype.onPropertyChanged = function (newProp, oldProp) {\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'locale':\n                    this.localeFunc();\n                    break;\n            }\n        }\n    };\n    /**\n     * @private\n     * @returns {void}\n     */\n    FormValidator.prototype.localeFunc = function () {\n        for (var _i = 0, _a = Object.keys(this.defaultMessages); _i < _a.length; _i++) {\n            var key = _a[_i];\n            this.l10n.setLocale(this.locale);\n            var value = this.l10n.getConstant(key);\n            this.localyMessage[\"\" + key] = value;\n        }\n    };\n    /**\n     * @private\n     * @returns {string} - Returns the component name.\n     */\n    FormValidator.prototype.getModuleName = function () {\n        return 'formvalidator';\n    };\n    /**\n     * @param {any} args - Specifies the culture name.\n     * @private\n     */\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/explicit-module-boundary-types\n    FormValidator.prototype.afterLocalization = function (args) {\n        this.locale = args.locale;\n        this.localeFunc();\n    };\n    /**\n     * Allows you to refresh the form validator base events to the elements inside the form.\n     *\n     * @returns {void}\n     */\n    FormValidator.prototype.refresh = function () {\n        this.unwireEvents();\n        this.inputElements = selectAll(this.selectQuery, this.element);\n        this.wireEvents();\n    };\n    FormValidator.prototype.clearForm = function () {\n        this.errorRules = [];\n        this.validated = [];\n        var elements = selectAll(this.selectQuery, this.element);\n        for (var _i = 0, elements_2 = elements; _i < elements_2.length; _i++) {\n            var element = elements_2[_i];\n            var input = element;\n            input.removeAttribute('aria-invalid');\n            var inputParent = input.parentElement;\n            var grandParent = inputParent.parentElement;\n            if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') || (input.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n                inputParent.classList.remove(this.errorClass);\n            }\n            else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n                grandParent.classList.remove(this.errorClass);\n            }\n            else {\n                input.classList.remove(this.errorClass);\n            }\n            if (input.name.length > 0) {\n                this.getInputElement(input.name);\n                this.getErrorElement(input.name);\n                this.hideMessage(input.name);\n            }\n            if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') || (input.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n                inputParent.classList.remove(this.validClass);\n            }\n            else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n                grandParent.classList.remove(this.validClass);\n            }\n            else {\n                input.classList.remove(this.validClass);\n            }\n        }\n    };\n    FormValidator.prototype.createHTML5Rules = function () {\n        var defRules = ['required', 'validateHidden', 'regex', 'rangeLength', 'maxLength', 'minLength', 'dateIso', 'digits',\n            'pattern', 'data-val-required', 'type', 'data-validation', 'min', 'max', 'range', 'equalTo', 'data-val-minlength-min',\n            'data-val-equalto-other', 'data-val-maxlength-max', 'data-val-range-min', 'data-val-regex-pattern', 'data-val-length-max',\n            'data-val-creditcard', 'data-val-phone'];\n        var acceptedTypes = ['hidden', 'email', 'url', 'date', 'number', 'tel'];\n        for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n            var input = _a[_i];\n            // Default attribute rules\n            var allRule = {};\n            for (var _b = 0, defRules_1 = defRules; _b < defRules_1.length; _b++) {\n                var rule = defRules_1[_b];\n                if (input.getAttribute(rule) !== null) {\n                    switch (rule) {\n                        case 'required':\n                            this.defRule(input, allRule, rule, input.required);\n                            break;\n                        case 'data-validation':\n                            rule = input.getAttribute(rule);\n                            this.defRule(input, allRule, rule, true);\n                            break;\n                        case 'type':\n                            if (acceptedTypes.indexOf(input.type) !== -1) {\n                                this.defRule(input, allRule, input.type, true);\n                            }\n                            break;\n                        case 'rangeLength':\n                        case 'range':\n                            this.defRule(input, allRule, rule, JSON.parse(input.getAttribute(rule)));\n                            break;\n                        case 'equalTo':\n                            {\n                                var id = input.getAttribute(rule);\n                                this.defRule(input, allRule, rule, id);\n                            }\n                            break;\n                        default:\n                            if (input.getAttribute('data-val') === 'true') {\n                                this.annotationRule(input, allRule, rule, input.getAttribute(rule));\n                            }\n                            else {\n                                this.defRule(input, allRule, rule, input.getAttribute(rule));\n                            }\n                    }\n                }\n            }\n            //adding pattern type validation\n            if (Object.keys(allRule).length !== 0) {\n                this.addRules(input.name, allRule);\n            }\n        }\n    };\n    FormValidator.prototype.annotationRule = function (input, ruleCon, ruleName, value) {\n        var annotationRule = ruleName.split('-');\n        var rulesList = ['required', 'creditcard', 'phone', 'maxlength', 'minlength', 'range', 'regex', 'equalto'];\n        var ruleFirstName = annotationRule[annotationRule.length - 1];\n        var ruleSecondName = annotationRule[annotationRule.length - 2];\n        if (rulesList.indexOf(ruleFirstName) !== -1) {\n            switch (ruleFirstName) {\n                case 'required':\n                    this.defRule(input, ruleCon, 'required', value);\n                    break;\n                case 'creditcard':\n                    this.defRule(input, ruleCon, 'creditcard', value);\n                    break;\n                case 'phone':\n                    this.defRule(input, ruleCon, 'tel', value);\n                    break;\n            }\n        }\n        else if (rulesList.indexOf(ruleSecondName) !== -1) {\n            switch (ruleSecondName) {\n                case 'maxlength':\n                    this.defRule(input, ruleCon, 'maxLength', value);\n                    break;\n                case 'minlength':\n                    this.defRule(input, ruleCon, 'minLength', value);\n                    break;\n                case 'range':\n                    {\n                        var minvalue = input.getAttribute('data-val-range-min');\n                        var maxvalue = input.getAttribute('data-val-range-max');\n                        this.defRule(input, ruleCon, 'range', [minvalue, maxvalue]);\n                    }\n                    break;\n                case 'equalto':\n                    {\n                        var id = input.getAttribute(ruleName).split('.');\n                        this.defRule(input, ruleCon, 'equalTo', id[id.length - 1]);\n                    }\n                    break;\n                case 'regex':\n                    this.defRule(input, ruleCon, 'regex', value);\n                    break;\n            }\n        }\n    };\n    FormValidator.prototype.defRule = function (input, ruleCon, ruleName, value) {\n        var message = input.getAttribute('data-' + ruleName + '-message');\n        var annotationMessage = input.getAttribute('data-val-' + ruleName);\n        var customMessage;\n        if (this.rules[input.name] && ruleName !== 'validateHidden' && ruleName !== 'hidden') {\n            this.getInputElement(input.name);\n            customMessage = this.getErrorMessage(this.rules[input.name][\"\" + ruleName], ruleName);\n        }\n        if (message) {\n            value = [value, message];\n        }\n        else if (annotationMessage) {\n            value = [value, annotationMessage];\n        }\n        else if (customMessage) {\n            value = [value, customMessage];\n        }\n        ruleCon[\"\" + ruleName] = value;\n    };\n    // Wire events to the form elements\n    FormValidator.prototype.wireEvents = function () {\n        for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n            var input = _a[_i];\n            if (FormValidator_1.isCheckable(input)) {\n                EventHandler.add(input, 'click', this.clickHandler, this);\n            }\n            else if (input.tagName === 'SELECT') {\n                EventHandler.add(input, 'change', this.changeHandler, this);\n            }\n            else {\n                EventHandler.add(input, 'focusout', this.focusOutHandler, this);\n                EventHandler.add(input, 'keyup', this.keyUpHandler, this);\n            }\n        }\n        EventHandler.add(this.element, 'submit', this.submitHandler, this);\n        EventHandler.add(this.element, 'reset', this.resetHandler, this);\n    };\n    // UnWire events to the form elements\n    FormValidator.prototype.unwireEvents = function () {\n        for (var _i = 0, _a = (this.inputElements); _i < _a.length; _i++) {\n            var input = _a[_i];\n            EventHandler.clearEvents(input);\n        }\n        EventHandler.remove(this.element, 'submit', this.submitHandler);\n        EventHandler.remove(this.element, 'reset', this.resetHandler);\n    };\n    // Handle input element focusout event\n    FormValidator.prototype.focusOutHandler = function (e) {\n        this.trigger('focusout', e);\n        //FormValidator.triggerCallback(this.focusout, e);\n        var element = e.target;\n        if (this.rules[element.name]) {\n            if (this.rules[element.name][this.required] || element.value.length > 0) {\n                this.validate(element.name);\n            }\n            else if (this.validated.indexOf(element.name) === -1) {\n                this.validated.push(element.name);\n            }\n        }\n    };\n    // Handle input element keyup event\n    FormValidator.prototype.keyUpHandler = function (e) {\n        this.trigger('keyup', e);\n        var element = e.target;\n        // List of keys need to prevent while validation\n        var excludeKeys = [16, 17, 18, 20, 35, 36, 37, 38, 39, 40, 45, 144, 225];\n        if (e.which === 9 && (!this.rules[element.name] || (this.rules[element.name] && !this.rules[element.name][this.required]))) {\n            return;\n        }\n        if (this.validated.indexOf(element.name) !== -1 && this.rules[element.name] && excludeKeys.indexOf(e.which) === -1) {\n            this.validate(element.name);\n        }\n    };\n    // Handle input click event\n    FormValidator.prototype.clickHandler = function (e) {\n        this.trigger('click', e);\n        var element = e.target;\n        // If element type is not submit allow validation\n        if (element.type !== 'submit') {\n            this.validate(element.name);\n        }\n        else if (element.getAttribute('formnovalidate') !== null) {\n            // Prevent form validation, if submit button has formnovalidate attribute\n            this.allowSubmit = true;\n        }\n    };\n    // Handle input change event\n    FormValidator.prototype.changeHandler = function (e) {\n        this.trigger('change', e);\n        var element = e.target;\n        this.validate(element.name);\n    };\n    // Handle form submit event\n    FormValidator.prototype.submitHandler = function (e) {\n        this.trigger('submit', e);\n        //FormValidator.triggerCallback(this.submit, e);\n        // Prevent form submit if validation failed\n        if (!this.allowSubmit && !this.validate()) {\n            e.preventDefault();\n        }\n        else {\n            this.allowSubmit = false;\n        }\n    };\n    // Handle form reset\n    FormValidator.prototype.resetHandler = function () {\n        this.clearForm();\n    };\n    // Validate each rule based on input element name\n    FormValidator.prototype.validateRules = function (name) {\n        if (!this.rules[\"\" + name]) {\n            return;\n        }\n        var rules = Object.keys(this.rules[\"\" + name]);\n        var hiddenType = false;\n        var validateHiddenType = false;\n        var vhPos = rules.indexOf('validateHidden');\n        var hPos = rules.indexOf('hidden');\n        this.getInputElement(name);\n        if (hPos !== -1) {\n            hiddenType = true;\n        }\n        if (vhPos !== -1) {\n            validateHiddenType = true;\n        }\n        if (!hiddenType || (hiddenType && validateHiddenType)) {\n            if (vhPos !== -1) {\n                rules.splice(vhPos, 1);\n            }\n            if (hPos !== -1) {\n                rules.splice((hPos - 1), 1);\n            }\n            this.getErrorElement(name);\n            for (var _i = 0, rules_2 = rules; _i < rules_2.length; _i++) {\n                var rule = rules_2[_i];\n                var errorMessage = this.getErrorMessage(this.rules[\"\" + name][\"\" + rule], rule);\n                var errorRule = { name: name, message: errorMessage };\n                var eventArgs = {\n                    inputName: name,\n                    element: this.inputElement,\n                    message: errorMessage\n                };\n                if (!this.isValid(name, rule) && !this.inputElement.classList.contains(this.ignore)) {\n                    this.removeErrorRules(name);\n                    this.errorRules.push(errorRule);\n                    // Set aria attributes to invalid elements\n                    this.inputElement.setAttribute('aria-invalid', 'true');\n                    this.inputElement.setAttribute('aria-describedby', this.inputElement.id + '-info');\n                    var inputParent = this.inputElement.parentElement;\n                    var grandParent = inputParent.parentElement;\n                    if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') || (this.inputElement.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n                        inputParent.classList.add(this.errorClass);\n                        inputParent.classList.remove(this.validClass);\n                    }\n                    else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n                        grandParent.classList.add(this.errorClass);\n                        grandParent.classList.remove(this.validClass);\n                    }\n                    else {\n                        this.inputElement.classList.add(this.errorClass);\n                        this.inputElement.classList.remove(this.validClass);\n                    }\n                    if (!this.infoElement) {\n                        this.createErrorElement(name, errorRule.message, this.inputElement);\n                    }\n                    else {\n                        this.showMessage(errorRule);\n                    }\n                    eventArgs.errorElement = this.infoElement;\n                    eventArgs.status = 'failure';\n                    if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') || (this.inputElement.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n                        inputParent.classList.add(this.errorClass);\n                        inputParent.classList.remove(this.validClass);\n                    }\n                    else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n                        grandParent.classList.add(this.errorClass);\n                        grandParent.classList.remove(this.validClass);\n                    }\n                    else {\n                        this.inputElement.classList.add(this.errorClass);\n                        this.inputElement.classList.remove(this.validClass);\n                    }\n                    this.optionalValidationStatus(name, eventArgs);\n                    this.trigger('validationComplete', eventArgs);\n                    // Set aria-required to required rule elements\n                    if (rule === 'required') {\n                        this.inputElement.setAttribute('aria-required', 'true');\n                    }\n                    break;\n                }\n                else {\n                    this.hideMessage(name);\n                    eventArgs.status = 'success';\n                    this.trigger('validationComplete', eventArgs);\n                }\n            }\n        }\n        else {\n            return;\n        }\n    };\n    // Update the optional validation status\n    FormValidator.prototype.optionalValidationStatus = function (name, refer) {\n        if (!this.rules[\"\" + name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n            this.infoElement.innerHTML = this.inputElement.value;\n            this.infoElement.setAttribute('aria-invalid', 'false');\n            refer.status = '';\n            this.hideMessage(name);\n        }\n    };\n    // Check the input element whether it's value satisfy the validation rule or not\n    FormValidator.prototype.isValid = function (name, rule) {\n        var params = this.rules[\"\" + name][\"\" + rule];\n        var param = (params instanceof Array && typeof params[1] === 'string') ? params[0] : params;\n        var currentRule = this.rules[\"\" + name][\"\" + rule];\n        var args = { value: this.inputElement.value, param: param, element: this.inputElement, formElement: this.element };\n        this.trigger('validationBegin', args);\n        if (!args.param && rule === 'required') {\n            return true;\n        }\n        if (currentRule && typeof currentRule[0] === 'function') {\n            var fn = currentRule[0];\n            return fn.call(this, { element: this.inputElement, value: this.inputElement.value });\n        }\n        else if (FormValidator_1.isCheckable(this.inputElement)) {\n            if (rule !== 'required') {\n                return true;\n            }\n            return selectAll('input[name=\"' + name + '\"]:checked', this.element).length > 0;\n        }\n        else {\n            return FormValidator_1.checkValidator[\"\" + rule](args);\n        }\n    };\n    // Return default error message or custom error message\n    FormValidator.prototype.getErrorMessage = function (ruleValue, rule) {\n        var message = this.inputElement.getAttribute('data-' + rule + '-message') ?\n            this.inputElement.getAttribute('data-' + rule + '-message') :\n            (ruleValue instanceof Array && typeof ruleValue[1] === 'string') ? ruleValue[1] :\n                (Object.keys(this.localyMessage).length !== 0) ? this.localyMessage[\"\" + rule] : this.defaultMessages[\"\" + rule];\n        var formats = message.match(/{(\\d)}/g);\n        if (!isNullOrUndefined(formats)) {\n            for (var i = 0; i < formats.length; i++) {\n                var value = ruleValue instanceof Array ? ruleValue[parseInt(i.toString())] : ruleValue;\n                message = message.replace(formats[parseInt(i.toString())], value);\n            }\n        }\n        return message;\n    };\n    // Create error element based on name and error message\n    FormValidator.prototype.createErrorElement = function (name, message, input) {\n        var errorElement = createElement(this.errorElement, {\n            className: this.errorClass,\n            innerHTML: message,\n            attrs: { for: name }\n        });\n        // Create message design if errorOption is message\n        if (this.errorOption === ErrorOption.Message) {\n            errorElement.classList.remove(this.errorClass);\n            errorElement.classList.add('e-message');\n            errorElement = createElement(this.errorContainer, { className: this.errorClass, innerHTML: errorElement.outerHTML });\n        }\n        errorElement.id = this.inputElement.name + '-info';\n        // Append error message into MVC error message element\n        if (this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]')) {\n            this.element.querySelector('[data-valmsg-for=\"' + input.id + '\"]').appendChild(errorElement);\n        }\n        else if (input.hasAttribute('data-msg-containerid') === true) {\n            // Append error message into custom div element\n            var containerId = input.getAttribute('data-msg-containerid');\n            var divElement = select('#' + containerId, this.element);\n            divElement.appendChild(errorElement);\n        }\n        else if (this.customPlacement != null) {\n            // Call custom placement function if customPlacement is not null\n            this.customPlacement.call(this, this.inputElement, errorElement);\n        }\n        else {\n            var inputParent = this.inputElement.parentElement;\n            var grandParent = inputParent.parentElement;\n            if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper')) {\n                grandParent.insertBefore(errorElement, inputParent.nextSibling);\n            }\n            else if (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper')) {\n                grandParent.parentElement.insertBefore(errorElement, grandParent.nextSibling);\n            }\n            else {\n                inputParent.insertBefore(errorElement, this.inputElement.nextSibling);\n            }\n        }\n        errorElement.style.display = 'block';\n        this.getErrorElement(name);\n        this.validated.push(name);\n        this.checkRequired(name);\n    };\n    // Get error element by name\n    FormValidator.prototype.getErrorElement = function (name) {\n        this.infoElement = select(this.errorElement + '.' + this.errorClass, this.inputElement.parentElement);\n        if (!this.infoElement) {\n            this.infoElement = select(this.errorElement + '.' + this.errorClass + '[for=\"' + name + '\"]', this.element);\n        }\n        return this.infoElement;\n    };\n    // Remove existing rule from errorRules object\n    FormValidator.prototype.removeErrorRules = function (name) {\n        for (var i = 0; i < this.errorRules.length; i++) {\n            var rule = this.errorRules[parseInt(i.toString())];\n            if (rule.name === name) {\n                this.errorRules.splice(i, 1);\n            }\n        }\n    };\n    // Show error message to the input element\n    FormValidator.prototype.showMessage = function (errorRule) {\n        this.infoElement.style.display = 'block';\n        this.infoElement.innerHTML = errorRule.message;\n        this.checkRequired(errorRule.name);\n    };\n    // Hide error message based on input name\n    FormValidator.prototype.hideMessage = function (name) {\n        if (this.infoElement) {\n            this.infoElement.style.display = 'none';\n            this.removeErrorRules(name);\n            var inputParent = this.inputElement.parentElement;\n            var grandParent = inputParent.parentElement;\n            if (inputParent.classList.contains('e-control-wrapper') || inputParent.classList.contains('e-wrapper') || (this.inputElement.classList.contains('e-input') && inputParent.classList.contains('e-input-group'))) {\n                inputParent.classList.add(this.validClass);\n                inputParent.classList.remove(this.errorClass);\n            }\n            else if ((grandParent != null) && (grandParent.classList.contains('e-control-wrapper') || grandParent.classList.contains('e-wrapper'))) {\n                grandParent.classList.add(this.validClass);\n                grandParent.classList.remove(this.errorClass);\n            }\n            else {\n                this.inputElement.classList.add(this.validClass);\n                this.inputElement.classList.remove(this.errorClass);\n            }\n            this.inputElement.setAttribute('aria-invalid', 'false');\n        }\n    };\n    // Check whether the input element have required rule and its value is not empty\n    FormValidator.prototype.checkRequired = function (name) {\n        if (!this.rules[\"\" + name][this.required] && !this.inputElement.value.length && !isNullOrUndefined(this.infoElement)) {\n            this.infoElement.innerHTML = this.inputElement.value;\n            this.infoElement.setAttribute('aria-invalid', 'false');\n            this.hideMessage(name);\n        }\n    };\n    // Return boolean result if the input have chekcable or submit types\n    FormValidator.isCheckable = function (input) {\n        var inputType = input.getAttribute('type');\n        return inputType && (inputType === 'checkbox' || inputType === 'radio' || inputType === 'submit');\n    };\n    var FormValidator_1;\n    // List of function to validate the rules\n    FormValidator.checkValidator = {\n        required: function (option) {\n            return !isNaN(Date.parse(option.value)) ? !isNaN(new Date(option.value).getTime()) : option.value.toString().length > 0;\n        },\n        email: function (option) {\n            return regex.EMAIL.test(option.value);\n        },\n        url: function (option) {\n            return regex.URL.test(option.value);\n        },\n        dateIso: function (option) {\n            return regex.DATE_ISO.test(option.value);\n        },\n        tel: function (option) {\n            return regex.PHONE.test(option.value);\n        },\n        creditcard: function (option) {\n            return regex.CREDITCARD.test(option.value);\n        },\n        number: function (option) {\n            return !isNaN(Number(option.value)) && option.value.indexOf(' ') === -1;\n        },\n        digits: function (option) {\n            return regex.DIGITS.test(option.value);\n        },\n        maxLength: function (option) {\n            return option.value.length <= option.param;\n        },\n        minLength: function (option) {\n            return option.value.length >= option.param;\n        },\n        rangeLength: function (option) {\n            var param = option.param;\n            return option.value.length >= param[0] && option.value.length <= param[1];\n        },\n        range: function (option) {\n            var param = option.param;\n            return !isNaN(Number(option.value)) && Number(option.value) >= param[0] && Number(option.value) <= param[1];\n        },\n        date: function (option) {\n            if (!isNullOrUndefined(option.param) && (typeof (option.param) === 'string' && option.param !== '')) {\n                var globalize = new Internationalization;\n                var dateOptions = { format: option.param.toString(), type: 'dateTime', skeleton: 'yMd' };\n                var dateValue = globalize.parseDate(option.value, dateOptions);\n                return (!isNullOrUndefined(dateValue) && dateValue instanceof Date && !isNaN(+dateValue));\n            }\n            else {\n                return !isNaN(new Date(option.value).getTime());\n            }\n        },\n        max: function (option) {\n            if (!isNaN(Number(option.value))) {\n                // Maximum rule validation for number\n                return +option.value <= option.param;\n            }\n            // Maximum rule validation for date\n            return new Date(option.value).getTime() <= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n        },\n        min: function (option) {\n            if (!isNaN(Number(option.value))) {\n                // Minimum rule validation for number\n                return +option.value >= option.param;\n            }\n            else if ((option.value).indexOf(',') !== -1) {\n                var uNum = (option.value).replace(/,/g, '');\n                return parseFloat(uNum) >= option.param;\n            }\n            else {\n                // Minimum rule validation for date\n                return new Date(option.value).getTime() >= new Date(JSON.parse(JSON.stringify(option.param))).getTime();\n            }\n        },\n        regex: function (option) {\n            /* eslint-disable-next-line security/detect-non-literal-regexp */\n            return new RegExp(option.param).test(option.value);\n        },\n        equalTo: function (option) {\n            var compareTo = option.formElement.querySelector('#' + option.param);\n            option.param = compareTo.value;\n            return option.param === option.value;\n        }\n    };\n    __decorate([\n        Property('')\n    ], FormValidator.prototype, \"locale\", void 0);\n    __decorate([\n        Property('e-hidden')\n    ], FormValidator.prototype, \"ignore\", void 0);\n    __decorate([\n        Property()\n    ], FormValidator.prototype, \"rules\", void 0);\n    __decorate([\n        Property('e-error')\n    ], FormValidator.prototype, \"errorClass\", void 0);\n    __decorate([\n        Property('e-valid')\n    ], FormValidator.prototype, \"validClass\", void 0);\n    __decorate([\n        Property('label')\n    ], FormValidator.prototype, \"errorElement\", void 0);\n    __decorate([\n        Property('div')\n    ], FormValidator.prototype, \"errorContainer\", void 0);\n    __decorate([\n        Property(ErrorOption.Label)\n    ], FormValidator.prototype, \"errorOption\", void 0);\n    __decorate([\n        Event()\n    ], FormValidator.prototype, \"focusout\", void 0);\n    __decorate([\n        Event()\n    ], FormValidator.prototype, \"keyup\", void 0);\n    __decorate([\n        Event()\n    ], FormValidator.prototype, \"click\", void 0);\n    __decorate([\n        Event()\n    ], FormValidator.prototype, \"change\", void 0);\n    __decorate([\n        Event()\n    ], FormValidator.prototype, \"submit\", void 0);\n    __decorate([\n        Event()\n    ], FormValidator.prototype, \"validationBegin\", void 0);\n    __decorate([\n        Event()\n    ], FormValidator.prototype, \"validationComplete\", void 0);\n    __decorate([\n        Event()\n    ], FormValidator.prototype, \"customPlacement\", void 0);\n    FormValidator = FormValidator_1 = __decorate([\n        NotifyPropertyChanges\n    ], FormValidator);\n    return FormValidator;\n}(Base));\nexport { FormValidator };\n","import { ComponentBase, gh, getProps, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nexport var properties = ['isLazyUpdate', 'plugins', 'content', 'cssClass', 'disabled', 'enableHtmlSanitizer', 'enablePersistence', 'enableRtl', 'iconCss', 'iconPosition', 'isPrimary', 'isToggle', 'locale', 'created'];\nexport var modelProps = [];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0], watch = testProp[1], emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged', 'update:modelValue');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n    var props_1 = modelProps_1[_i];\n    emitProbs.push('update:' + props_1);\n}\n/**\n * Represents the Essential JS 2 VueJS Button Component\n * ```html\n * <ejs-button>Button</ejs-button>\n * ```\n */\nexport var ButtonComponent = vueDefineComponent({\n    name: 'ButtonComponent',\n    mixins: [ComponentBase],\n    props: props,\n    watch: watch,\n    emits: emitProbs,\n    provide: function () { return { custom: this.custom }; },\n    data: function () {\n        return {\n            ej2Instances: new Button({}),\n            propKeys: properties,\n            models: modelProps,\n            hasChildDirective: false,\n            hasInjectedModules: false,\n            tagMapper: {},\n            tagNameMapper: {},\n            isVue3: !isExecute,\n            templateCollection: {},\n        };\n    },\n    created: function () {\n        this.bindProperties();\n        this.ej2Instances._setProperties = this.ej2Instances.setProperties;\n        this.ej2Instances.setProperties = this.setProperties;\n        this.ej2Instances.clearTemplate = this.clearTemplate;\n        this.updated = this.updated;\n    },\n    render: function (createElement) {\n        var h = !isExecute ? gh : createElement;\n        var slots = null;\n        if (!isNullOrUndefined(this.$slots.default)) {\n            slots = !isExecute ? this.$slots.default() : this.$slots.default;\n        }\n        return h('button', slots);\n    },\n    methods: {\n        clearTemplate: function (templateNames) {\n            if (!templateNames) {\n                templateNames = Object.keys(this.templateCollection || {});\n            }\n            if (templateNames.length && this.templateCollection) {\n                for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n                    var tempName = templateNames_1[_i];\n                    var elementCollection = this.templateCollection[tempName];\n                    if (elementCollection && elementCollection.length) {\n                        for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n                            var ele = elementCollection_1[_a];\n                            var destroy = getValue('__vue__.$destroy', ele);\n                            if (destroy) {\n                                ele.__vue__.$destroy();\n                            }\n                            if (ele.innerHTML) {\n                                ele.innerHTML = '';\n                            }\n                        }\n                        delete this.templateCollection[tempName];\n                    }\n                }\n            }\n        },\n        setProperties: function (prop, muteOnChange) {\n            var _this = this;\n            if (this.isVue3) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if (this.ej2Instances && this.ej2Instances._setProperties) {\n                this.ej2Instances._setProperties(prop, muteOnChange);\n            }\n            if (prop && this.models && this.models.length) {\n                Object.keys(prop).map(function (key) {\n                    _this.models.map(function (model) {\n                        if ((key === model) && !(/datasource/i.test(key))) {\n                            if (_this.isVue3) {\n                                _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n                            }\n                            else {\n                                _this.$emit('update:' + key, prop[key]);\n                                _this.$emit('modelchanged', prop[key]);\n                            }\n                        }\n                    });\n                });\n            }\n        },\n        custom: function () {\n            this.updated();\n        },\n        click: function () {\n            return this.ej2Instances.click();\n        },\n        focusIn: function () {\n            return this.ej2Instances.focusIn();\n        },\n    }\n});\nexport var ButtonPlugin = {\n    name: 'ejs-button',\n    install: function (Vue) {\n        Vue.component(ButtonPlugin.name, ButtonComponent);\n    }\n};\n","import { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, closest as getClosest, remove } from '@syncfusion/ej2-base';\nimport { classList } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowRenderer } from './row-renderer';\nimport { Cell } from '../models/cell';\nimport { Row } from '../models/row';\nimport * as events from '../base/constant';\nimport { Draggable, Droppable } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { parentsUntil, wrap, measureColumnDepth, appendChildren, addFixedColumnBorder } from '../base/util';\nimport * as literals from '../base/string-literals';\n// eslint-disable-next-line valid-jsdoc\n/**\n * Content module is used to render grid content\n *\n * @hidden\n */\nvar HeaderRender = /** @class */ (function () {\n    /**\n     * Constructor for header renderer module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n     */\n    function HeaderRender(parent, serviceLocator) {\n        var _this = this;\n        this.frzIdx = 0;\n        this.notfrzIdx = 0;\n        this.isFirstCol = false;\n        this.isReplaceDragEle = true;\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        this.helper = function (e) {\n            var gObj = _this.parent;\n            var target = _this.draggable.currentStateTarget;\n            var parentEle = parentsUntil(target, 'e-headercell');\n            if (!(gObj.allowReordering || gObj.allowGrouping) || (!isNullOrUndefined(parentEle)\n                && parentEle.getElementsByClassName('e-checkselectall').length > 0)) {\n                return false;\n            }\n            var visualElement = _this.parent.createElement('div', { className: 'e-cloneproperties e-dragclone e-headerclone' });\n            var element = target.classList.contains('e-headercell') ? target : parentEle;\n            if (!element || (!gObj.allowReordering && element.classList.contains('e-stackedheadercell'))) {\n                return false;\n            }\n            var height = element.offsetHeight;\n            var headercelldiv = element.querySelector('.e-headercelldiv') || element.querySelector('.e-stackedheadercelldiv');\n            var col;\n            if (headercelldiv) {\n                if (element.querySelector('.e-stackedheadercelldiv')) {\n                    col = gObj.getStackedHeaderColumnByHeaderText(headercelldiv.innerText.trim(), gObj.columns);\n                }\n                else {\n                    col = gObj.getColumnByUid(headercelldiv.getAttribute('e-mappinguid'));\n                }\n                _this.column = col;\n                if (_this.column.lockColumn) {\n                    return false;\n                }\n                visualElement.setAttribute('e-mappinguid', _this.column.uid);\n            }\n            if (col && !isNullOrUndefined(col.headerTemplate)) {\n                if (!isNullOrUndefined(col.headerTemplate)) {\n                    var colIndex = gObj.getColumnIndexByField(col.field);\n                    var result = col.getHeaderTemplate()(extend({ 'index': colIndex }, col), gObj, 'headerTemplate');\n                    var isReactCompiler = gObj.isReact && typeof (col.headerTemplate) !== 'string';\n                    var isReactChild = gObj.parentDetails && gObj.parentDetails.parentInstObj &&\n                        gObj.parentDetails.parentInstObj.isReact;\n                    if (isReactCompiler || isReactChild) {\n                        gObj.renderTemplates();\n                    }\n                    appendChildren(visualElement, result);\n                }\n                else {\n                    visualElement.innerHTML = col.headerTemplate;\n                }\n                if (!isNullOrUndefined(visualElement.firstChild) && visualElement.firstChild.nodeType === 1) {\n                    visualElement.firstChild.style.pointerEvents = 'none';\n                }\n            }\n            else {\n                visualElement.innerHTML = headercelldiv ?\n                    col.headerText : element.firstElementChild.innerHTML;\n            }\n            visualElement.style.width = element.offsetWidth + 'px';\n            visualElement.style.height = element.offsetHeight + 'px';\n            visualElement.style.lineHeight = (height - 6).toString() + 'px';\n            gObj.element.appendChild(visualElement);\n            return visualElement;\n        };\n        this.dragStart = function (e) {\n            var gObj = _this.parent;\n            gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n            gObj.notify(events.columnDragStart, { target: _this.draggable.currentStateTarget, column: _this.column, event: e.event });\n        };\n        this.drag = function (e) {\n            var gObj = _this.parent;\n            var target = e.target;\n            if (target) {\n                var closest = getClosest(target, '.e-grid');\n                var cloneElement = _this.parent.element.querySelector('.e-cloneproperties');\n                if (!closest || closest.getAttribute('id') !== gObj.element.getAttribute('id')) {\n                    classList(cloneElement, ['e-notallowedcur'], ['e-defaultcur']);\n                    if (gObj.allowReordering) {\n                        gObj.element.querySelector('.e-reorderuparrow').style.display = 'none';\n                        gObj.element.querySelector('.e-reorderdownarrow').style.display = 'none';\n                    }\n                    if (!gObj.groupSettings.allowReordering) {\n                        return;\n                    }\n                }\n                gObj.notify(events.columnDrag, { target: e.target, column: _this.column, event: e.event });\n            }\n        };\n        this.dragStop = function (e) {\n            var gObj = _this.parent;\n            var cancel;\n            gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n            if ((!parentsUntil(e.target, 'e-headercell') && !parentsUntil(e.target, 'e-groupdroparea')) ||\n                (!gObj.allowReordering && parentsUntil(e.target, 'e-headercell')) ||\n                (!e.helper.getAttribute('e-mappinguid') && parentsUntil(e.target, 'e-groupdroparea'))) {\n                remove(e.helper);\n                cancel = true;\n            }\n            gObj.notify(events.columnDragStop, { target: e.target, event: e.event, column: _this.column, cancel: cancel });\n        };\n        this.drop = function (e) {\n            var gObj = _this.parent;\n            var uid = e.droppedElement.getAttribute('e-mappinguid');\n            var closest = getClosest(e.target, '.e-grid');\n            remove(e.droppedElement);\n            if (closest && closest.getAttribute('id') !== gObj.element.getAttribute('id') ||\n                !(gObj.allowReordering || gObj.allowGrouping)) {\n                return;\n            }\n            gObj.notify(events.headerDrop, { target: e.target, uid: uid, droppedElement: e.droppedElement });\n        };\n        this.parent = parent;\n        this.serviceLocator = serviceLocator;\n        this.ariaService = this.serviceLocator.getService('ariaService');\n        this.widthService = this.serviceLocator.getService('widthService');\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        if (!this.parent.enableColumnVirtualization) {\n            this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n        }\n        this.parent.on(events.columnPositionChanged, this.colPosRefresh, this);\n        this.parent.on(events.initialEnd, this.renderCustomToolbar, this);\n        if (this.parent.rowRenderingMode === 'Vertical') {\n            this.parent.on(events.uiUpdate, this.updateCustomResponsiveToolbar, this);\n        }\n    }\n    /**\n     * The function is used to render grid header div\n     *\n     * @returns {void}\n     */\n    HeaderRender.prototype.renderPanel = function () {\n        var div = this.parent.element.querySelector('.' + literals.gridHeader);\n        var isRendered = (div != null);\n        div = isRendered ? div : this.parent.createElement('div', { className: 'e-gridheader' });\n        var innerDiv = isRendered ? div.querySelector('.' + literals.headerContent) :\n            this.parent.createElement('div', { className: literals.headerContent });\n        this.toggleStackClass(div);\n        div.appendChild(innerDiv);\n        this.setPanel(div);\n        if (!isRendered) {\n            this.parent.element.appendChild(div);\n        }\n    };\n    /**\n     * The function is used to render grid header div\n     *\n     * @returns {void}\n     */\n    HeaderRender.prototype.renderTable = function () {\n        var headerDiv = this.getPanel();\n        headerDiv.appendChild(this.createHeaderTable());\n        this.setTable(headerDiv.querySelector('.' + literals.table));\n        this.initializeHeaderDrag();\n        this.initializeHeaderDrop();\n        this.parent.notify(events.headerRefreshed, { rows: this.rows });\n    };\n    /**\n     * Get the header content div element of grid\n     *\n     * @returns {Element} returns the element\n     */\n    HeaderRender.prototype.getPanel = function () {\n        return this.headerPanel;\n    };\n    /**\n     * Set the header content div element of grid\n     *\n     * @param  {Element} panel - specifies the panel element\n     * @returns {void}\n     */\n    HeaderRender.prototype.setPanel = function (panel) {\n        this.headerPanel = panel;\n    };\n    /**\n     * Get the header table element of grid\n     *\n     * @returns {Element} returns the element\n     */\n    HeaderRender.prototype.getTable = function () {\n        return this.headerTable;\n    };\n    /**\n     * Set the header table element of grid\n     *\n     * @param  {Element} table - specifies the table element\n     * @returns {void}\n     */\n    HeaderRender.prototype.setTable = function (table) {\n        this.headerTable = table;\n    };\n    /**\n     * Get the header colgroup element\n     *\n     * @returns {Element} returns the element\n     */\n    HeaderRender.prototype.getColGroup = function () {\n        return this.colgroup;\n    };\n    /**\n     * Set the header colgroup element\n     *\n     * @param {Element} colGroup - specifies the colgroup\n     * @returns {Element} returns the element\n     */\n    HeaderRender.prototype.setColGroup = function (colGroup) {\n        return this.colgroup = colGroup;\n    };\n    /**\n     * Get the header row element collection.\n     *\n     * @returns {Element[]} returns the element\n     */\n    HeaderRender.prototype.getRows = function () {\n        var table = this.getTable();\n        return table.tHead.rows;\n    };\n    /**\n     * The function is used to create header table elements\n     *\n     * @returns {Element} returns the element\n     * @hidden\n     */\n    HeaderRender.prototype.createHeaderTable = function () {\n        var table = this.createTable();\n        var innerDiv = this.getPanel().querySelector('.' + literals.headerContent);\n        innerDiv.appendChild(table);\n        return innerDiv;\n    };\n    /**\n     * The function is used to create header table elements\n     *\n     * @param {Element} tableEle - specifies the table Element\n     * @param {freezeTable} tableName - specifies the table name\n     * @returns {Element} returns the element\n     * @hidden\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    HeaderRender.prototype.createHeader = function (tableEle, tableName) {\n        if (tableEle === void 0) { tableEle = null; }\n        var gObj = this.parent;\n        if (this.getTable()) {\n            remove(this.getTable());\n        }\n        var table = this.parent.createElement('table', { className: literals.table, attrs: { cellspacing: '0.25px', role: 'presentation' } });\n        var findHeaderRow = this.createHeaderContent(tableName);\n        var thead = findHeaderRow.thead;\n        var tbody = this.parent.createElement(literals.tbody, { className: this.parent.frozenRows ? '' : 'e-hide', attrs: { role: 'rowgroup' } });\n        this.caption = this.parent.createElement('caption', { innerHTML: this.parent.element.id + '_header_table', className: 'e-hide' });\n        var colGroup = this.parent.createElement(literals.colGroup);\n        var rowBody = this.parent.createElement('tr', { attrs: { role: 'row' } });\n        var bodyCell;\n        var rows = this.rows = findHeaderRow.rows;\n        for (var i = 0, len = rows.length; i < len; i++) {\n            for (var j = 0, len_1 = rows[parseInt(i.toString(), 10)].cells.length; j < len_1; j++) {\n                bodyCell = this.parent.createElement('td');\n                rowBody.appendChild(bodyCell);\n            }\n        }\n        if (gObj.allowFiltering || gObj.allowSorting || gObj.allowGrouping) {\n            table.classList.add('e-sortfilter');\n        }\n        this.updateColGroup(colGroup);\n        tbody.appendChild(rowBody);\n        table.appendChild(this.setColGroup(colGroup));\n        table.appendChild(thead);\n        table.appendChild(tbody);\n        table.appendChild(this.caption);\n        return table;\n    };\n    /**\n     * @param {Element} tableEle - specifies the column\n     * @returns {Element} returns the element\n     * @hidden\n     */\n    HeaderRender.prototype.createTable = function (tableEle) {\n        if (tableEle === void 0) { tableEle = null; }\n        return this.createHeader(tableEle);\n    };\n    HeaderRender.prototype.createHeaderContent = function (tableName) {\n        var gObj = this.parent;\n        var columns = gObj.getColumns();\n        var thead = this.parent.createElement('thead', { attrs: { 'role': 'rowgroup' } });\n        var colHeader = this.parent.createElement('tr', { className: 'e-columnheader', attrs: { role: 'row' } });\n        var rowRenderer = new RowRenderer(this.serviceLocator, CellType.Header, gObj);\n        rowRenderer.element = colHeader;\n        var rows = [];\n        var headerRow;\n        this.colDepth = measureColumnDepth(gObj.columns);\n        for (var i = 0, len = this.colDepth; i < len; i++) {\n            rows[parseInt(i.toString(), 10)] = this.generateRow(i);\n            rows[parseInt(i.toString(), 10)].cells = [];\n        }\n        rows = this.ensureColumns(rows);\n        rows = this.getHeaderCells(rows, tableName);\n        if (gObj.isRowDragable() && this.parent.getFrozenMode() === 'Right') {\n            for (var i = 0, len = rows.length; i < len; i++) {\n                rows[parseInt(i.toString(), 10)].cells.push(this.generateCell({}, CellType.RowDragHIcon));\n            }\n        }\n        for (var i = 0, len = this.colDepth; i < len; i++) {\n            headerRow = rowRenderer.render(rows[parseInt(i.toString(), 10)], columns);\n            if (this.parent.rowHeight && headerRow.querySelector('.e-headercell')) {\n                headerRow.style.height = this.parent.rowHeight + 'px';\n            }\n            addFixedColumnBorder(headerRow);\n            thead.appendChild(headerRow);\n        }\n        var findHeaderRow = {\n            thead: thead,\n            rows: rows\n        };\n        return findHeaderRow;\n    };\n    HeaderRender.prototype.updateColGroup = function (colGroup) {\n        var cols = this.parent.getColumns();\n        var col;\n        var indexes = this.parent.getColumnIndexesInView();\n        colGroup.id = this.parent.element.id + literals.colGroup;\n        if (this.parent.allowGrouping) {\n            for (var i = 0, len = this.parent.groupSettings.columns.length; i < len; i++) {\n                if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n                    continue;\n                }\n                col = this.parent.createElement('col', { className: 'e-group-intent' });\n                colGroup.appendChild(col);\n            }\n        }\n        if (this.parent.detailTemplate || this.parent.childGrid) {\n            col = this.parent.createElement('col', { className: 'e-detail-intent' });\n            colGroup.appendChild(col);\n        }\n        if (this.parent.isRowDragable() && this.parent.getFrozenMode() !== 'Right') {\n            col = this.parent.createElement('col', { className: 'e-drag-intent' });\n            colGroup.appendChild(col);\n        }\n        for (var i = 0, len = cols.length; i < len; i++) {\n            col = this.parent.createElement('col');\n            if (cols[parseInt(i.toString(), 10)].visible === false) {\n                setStyleAttribute(col, { 'display': 'none' });\n            }\n            colGroup.appendChild(col);\n        }\n        if (this.parent.isRowDragable() && this.parent.getFrozenMode() === 'Right') {\n            col = this.parent.createElement('col', { className: 'e-drag-intent' });\n            colGroup.appendChild(col);\n        }\n        return colGroup;\n    };\n    HeaderRender.prototype.ensureColumns = function (rows) {\n        //TODO: generate dummy column for group, detail, stacked row here; ensureColumns here\n        var gObj = this.parent;\n        var indexes = this.parent.getColumnIndexesInView();\n        for (var i = 0, len = rows.length; i < len; i++) {\n            if (gObj.allowGrouping) {\n                for (var c = 0, len_2 = gObj.groupSettings.columns.length; c < len_2; c++) {\n                    if (this.parent.enableColumnVirtualization && indexes.indexOf(c) === -1) {\n                        continue;\n                    }\n                    rows[parseInt(i.toString(), 10)].cells.push(this.generateCell({}, CellType.HeaderIndent));\n                }\n            }\n            if (gObj.detailTemplate || gObj.childGrid) {\n                var args = {};\n                this.parent.notify(events.detailIndentCellInfo, args);\n                rows[parseInt(i.toString(), 10)].cells.push(this.generateCell(args, CellType.DetailHeader));\n            }\n            if (gObj.isRowDragable() && this.parent.getFrozenMode() !== 'Right') {\n                rows[parseInt(i.toString(), 10)].cells.push(this.generateCell({}, CellType.RowDragHIcon));\n            }\n        }\n        return rows;\n    };\n    HeaderRender.prototype.getHeaderCells = function (rows, tableName) {\n        var thead = this.parent.getHeaderTable() && this.parent.getHeaderTable().querySelector('thead');\n        var cols = this.parent.enableColumnVirtualization ?\n            this.parent.getColumns(this.parent.enablePersistence) : this.parent.columns;\n        this.frzIdx = 0;\n        this.notfrzIdx = 0;\n        if (this.parent.lockcolPositionCount) {\n            for (var i = 0; i < cols.length; i++) {\n                this.lockColsRendered = false;\n                rows = this.appendCells(cols[parseInt(i.toString(), 10)], rows, 0, i === 0, false, i === (cols.length - 1), thead, tableName, false);\n            }\n        }\n        for (var i = 0, len = cols.length; i < len; i++) {\n            this.notfrzIdx = 0;\n            this.lockColsRendered = true;\n            rows = this.appendCells(cols[parseInt(i.toString(), 10)], rows, 0, i === 0, false, i === (len - 1), thead, tableName, false);\n        }\n        return rows;\n    };\n    HeaderRender.prototype.appendCells = function (cols, rows, index, isFirstObj, isFirstCol, isLastCol, isMovable, tableName, isStackLastCol) {\n        var lastCol = isLastCol ? isStackLastCol ? 'e-laststackcell' : 'e-lastcell' : '';\n        var isLockColumn = !this.parent.lockcolPositionCount\n            || (cols.lockColumn && !this.lockColsRendered) || (!cols.lockColumn && this.lockColsRendered);\n        if (!cols.columns) {\n            if (isLockColumn) {\n                rows[parseInt(index.toString(), 10)].cells.push(this.generateCell(cols, CellType.Header, this.colDepth - index, (isFirstObj ? '' : (isFirstCol ? 'e-firstcell' : '')) + lastCol, index, this.parent.getColumnIndexByUid(cols.uid)));\n            }\n            if (this.parent.lockcolPositionCount) {\n                if ((this.frzIdx + this.notfrzIdx < this.parent.frozenColumns) &&\n                    ((cols.lockColumn && !this.lockColsRendered) || (!cols.lockColumn && this.lockColsRendered))) {\n                    this.frzIdx++;\n                }\n                else {\n                    this.notfrzIdx++;\n                }\n            }\n            else {\n                this.frzIdx++;\n            }\n        }\n        else {\n            this.isFirstCol = false;\n            var colSpan = this.getCellCnt(cols, 0);\n            if (colSpan) {\n                var stackedLockColsCount = this.getStackedLockColsCount(cols, 0);\n                var isStackedLockColumn = this.parent.lockcolPositionCount === 0\n                    || (!this.lockColsRendered && stackedLockColsCount !== 0)\n                    || (this.lockColsRendered && (colSpan - stackedLockColsCount) !== 0);\n                if (isStackedLockColumn) {\n                    rows[parseInt(index.toString(), 10)].cells.push(new Cell({\n                        cellType: CellType.StackedHeader, column: cols,\n                        colSpan: this.getColSpan(colSpan, stackedLockColsCount),\n                        className: isFirstObj ? '' : (isFirstCol ? 'e-firstcell' : '')\n                    }));\n                }\n            }\n            if (this.parent.lockcolPositionCount && !this.lockColsRendered) {\n                for (var i = 0; i < cols.columns.length; i++) {\n                    rows = this.appendCells(cols.columns[parseInt(i.toString(), 10)], rows, index + 1, isFirstObj, i === 0, i === (cols.columns.length - 1) && isLastCol, isMovable, tableName, false);\n                }\n            }\n            if (this.lockColsRendered) {\n                for (var i = 0, len = cols.columns.length; i < len; i++) {\n                    isFirstObj = isFirstObj && i === 0;\n                    var isFirstCol_1 = this.isFirstCol = cols.columns[parseInt(i.toString(), 10)].visible\n                        && !isFirstObj;\n                    var isLaststackedCol = i === (len - 1) && isLastCol;\n                    rows = this.appendCells(cols.columns[parseInt(i.toString(), 10)], rows, index + 1, isFirstObj, isFirstCol_1 && !isLaststackedCol, isLaststackedCol, isMovable, tableName, true);\n                }\n            }\n        }\n        return rows;\n    };\n    HeaderRender.prototype.getStackedLockColsCount = function (col, lockColsCount) {\n        if (col.columns) {\n            for (var i = 0; i < col.columns.length; i++) {\n                lockColsCount = this.getStackedLockColsCount(col.columns[parseInt(i.toString(), 10)], lockColsCount);\n            }\n        }\n        else if (col.lockColumn) {\n            lockColsCount++;\n        }\n        return lockColsCount;\n    };\n    HeaderRender.prototype.getColSpan = function (colSpan, stackedLockColsCount) {\n        colSpan = !this.lockColsRendered ? stackedLockColsCount : colSpan - stackedLockColsCount;\n        return colSpan;\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    HeaderRender.prototype.generateRow = function (index) {\n        return new Row({});\n    };\n    HeaderRender.prototype.generateCell = function (column, cellType, rowSpan, className, rowIndex, colIndex) {\n        var opt = {\n            'visible': column.visible,\n            'isDataCell': false,\n            'isTemplate': !isNullOrUndefined(column.headerTemplate),\n            'rowID': '',\n            'column': column,\n            'cellType': cellType,\n            'rowSpan': rowSpan,\n            'className': className,\n            'index': rowIndex,\n            'colIndex': colIndex\n        };\n        if (!opt.rowSpan || opt.rowSpan < 2) {\n            delete opt.rowSpan;\n        }\n        return new Cell(opt);\n    };\n    /**\n     * Function to hide header table column based on visible property\n     *\n     * @param {Column[]} columns - specifies the column\n     * @returns {void}\n     */\n    HeaderRender.prototype.setVisible = function (columns) {\n        var gObj = this.parent;\n        var displayVal;\n        var idx;\n        for (var c = 0, clen = columns.length; c < clen; c++) {\n            var column = columns[parseInt(c.toString(), 10)];\n            idx = gObj.getNormalizedColumnIndex(column.uid);\n            displayVal = column.visible ? '' : 'none';\n            setStyleAttribute(this.getColGroup().children[parseInt(idx.toString(), 10)], { 'display': displayVal });\n        }\n        this.refreshUI();\n    };\n    HeaderRender.prototype.colPosRefresh = function () {\n        this.refreshUI();\n    };\n    /**\n     * Refresh the header of the Grid.\n     *\n     * @returns {void}\n     */\n    HeaderRender.prototype.refreshUI = function () {\n        var headerDiv = this.getPanel();\n        this.toggleStackClass(headerDiv);\n        var table = this.freezeReorder ? this.headerPanel.querySelector('.' + literals.movableHeader).querySelector('.' + literals.table)\n            : this.getTable();\n        var tableName = undefined;\n        if (table) {\n            remove(table);\n            table.removeChild(table.firstChild);\n            table.removeChild(table.childNodes[0]);\n            var colGroup = this.parent.createElement(literals.colGroup);\n            var findHeaderRow = this.createHeaderContent(tableName);\n            this.rows = findHeaderRow.rows;\n            table.insertBefore(findHeaderRow.thead, table.firstChild);\n            this.updateColGroup(colGroup);\n            table.insertBefore(this.setColGroup(colGroup), table.firstChild);\n            this.appendContent(table);\n            this.parent.notify(events.colGroupRefresh, {});\n            this.widthService.setWidthToColumns();\n            this.parent.updateDefaultCursor();\n            this.initializeHeaderDrag();\n            var rows = [].slice.call(headerDiv.querySelectorAll('tr.e-columnheader'));\n            for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n                var row = rows_1[_i];\n                var gCells = [].slice.call(row.getElementsByClassName('e-grouptopleftcell'));\n                if (gCells.length) {\n                    gCells[gCells.length - 1].classList.add('e-lastgrouptopleftcell');\n                }\n            }\n            this.parent.notify(events.headerRefreshed, { rows: this.rows });\n            if (this.parent.enableColumnVirtualization && parentsUntil(table, literals.movableHeader)) {\n                this.parent.notify(events.headerRefreshed, { rows: this.rows, args: { isFrozen: false, isXaxis: true } });\n            }\n            if (this.parent.allowTextWrap && this.parent.textWrapSettings.wrapMode === 'Header') {\n                wrap(rows, true);\n            }\n        }\n        var firstHeaderCell = this.parent.getHeaderContent().querySelector('.e-headercell:not(.e-hide)');\n        if (!isNullOrUndefined(firstHeaderCell)) {\n            firstHeaderCell.tabIndex = 0;\n        }\n    };\n    HeaderRender.prototype.toggleStackClass = function (div) {\n        var column = this.parent.columns;\n        var stackedHdr = column.some(function (column) { return !isNullOrUndefined(column.columns); });\n        if (stackedHdr) {\n            div.classList.add('e-stackedheader');\n        }\n        else {\n            div.classList.remove('e-stackedheader');\n        }\n    };\n    HeaderRender.prototype.appendContent = function (table) {\n        this.getPanel().querySelector('.' + literals.headerContent).appendChild(table);\n    };\n    HeaderRender.prototype.getCellCnt = function (col, cnt) {\n        if (col.columns) {\n            for (var i = 0, len = col.columns.length; i < len; i++) {\n                cnt = this.getCellCnt(col.columns[parseInt(i.toString(), 10)], cnt);\n            }\n        }\n        else {\n            if (col.visible) {\n                cnt++;\n            }\n        }\n        return cnt;\n    };\n    HeaderRender.prototype.initializeHeaderDrag = function () {\n        var gObj = this.parent;\n        if (!(this.parent.allowReordering || (this.parent.allowGrouping && this.parent.groupSettings.showDropArea))) {\n            return;\n        }\n        this.draggable = new Draggable(gObj.getHeaderContent(), {\n            dragTarget: '.e-headercell',\n            distance: 5,\n            helper: this.helper,\n            dragStart: this.dragStart,\n            drag: this.drag,\n            dragStop: this.dragStop,\n            abort: '.e-rhandler',\n            isReplaceDragEle: this.isReplaceDragEle\n        });\n        this.parent.on(events.destroy, this.droppableDestroy, this);\n    };\n    HeaderRender.prototype.initializeHeaderDrop = function () {\n        var gObj = this.parent;\n        this.droppable = new Droppable(gObj.getHeaderContent(), {\n            accept: '.e-dragclone',\n            drop: this.drop\n        });\n        this.parent.on(events.destroy, this.droppableDestroy, this);\n    };\n    HeaderRender.prototype.droppableDestroy = function () {\n        if (this.droppable && !this.droppable.isDestroyed) {\n            this.droppable.destroy();\n        }\n        if (this.draggable && !this.draggable.isDestroyed) {\n            this.draggable.destroy();\n        }\n    };\n    HeaderRender.prototype.renderCustomToolbar = function () {\n        var _this = this;\n        var gObj = this.parent;\n        if (gObj.rowRenderingMode === 'Vertical' && !gObj.toolbar\n            && (gObj.allowSorting || (gObj.allowFiltering && gObj.filterSettings.type !== 'FilterBar'))) {\n            var div = gObj.createElement('div', { className: 'e-res-toolbar e-toolbar' });\n            var toolbarItems = gObj.createElement('div', { className: 'e-toolbar-items' });\n            var toolbarLeft = gObj.createElement('div', { className: 'e-toolbar-left' });\n            var count = this.parent.allowFiltering && this.parent.allowSorting ? 2 : 1;\n            for (var i = 0; i < count; i++) {\n                var toolbarItem = gObj.createElement('div', { className: 'e-toolbar-item e-gridresponsiveicons e-icons e-tbtn-align' });\n                var cls = count === 1 ? this.parent.allowSorting ? 'sort'\n                    : 'filter' : i === 1 ? 'sort' : 'filter';\n                var button = gObj.createElement('button', { className: 'e-tbar-btn e-control e-btn e-lib e-icon-btn' });\n                var span = gObj.createElement('span', { className: 'e-btn-icon e-res' + cls + '-icon e-icons' });\n                button.appendChild(span);\n                var btnObj = new Button({\n                    cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n                });\n                btnObj.appendTo(button);\n                button.onclick = function (e) {\n                    if (e.target.classList.contains('e-ressort-btn')\n                        || e.target.classList.contains('e-ressort-icon')) {\n                        _this.parent.showResponsiveCustomSort();\n                    }\n                    else {\n                        _this.parent.showResponsiveCustomFilter();\n                    }\n                };\n                toolbarItem.appendChild(button);\n                toolbarLeft.appendChild(toolbarItem);\n            }\n            toolbarItems.appendChild(toolbarLeft);\n            div.appendChild(toolbarItems);\n            gObj.element.insertBefore(div, this.parent.element.querySelector('.' + literals.gridHeader));\n        }\n        else {\n            if (gObj.enableAdaptiveUI && !gObj.toolbar) {\n                gObj.getContent().classList.add('e-responsive-header');\n            }\n        }\n    };\n    HeaderRender.prototype.updateCustomResponsiveToolbar = function (args) {\n        var resToolbar = this.parent.element.querySelector('.e-responsive-toolbar');\n        if (args.module === 'toolbar') {\n            if (resToolbar) {\n                remove(resToolbar);\n            }\n            else {\n                this.renderCustomToolbar();\n            }\n        }\n    };\n    return HeaderRender;\n}());\nexport { HeaderRender };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { isNullOrUndefined, extend, addClass } from '@syncfusion/ej2-base';\nimport { attributes } from '@syncfusion/ej2-base';\nimport { setStyleAndAttributes, appendChildren, addStickyColumnPosition } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\nimport { AriaService } from '../services/aria-service';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { headerCellInfo } from '../base/constant';\n/**\n * HeaderCellRenderer class which responsible for building header cell content.\n *\n * @hidden\n */\nvar HeaderCellRenderer = /** @class */ (function (_super) {\n    __extends(HeaderCellRenderer, _super);\n    function HeaderCellRenderer() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.element = _this.parent\n            .createElement('TH', { className: 'e-headercell', attrs: { tabindex: '-1', role: 'columnheader' } });\n        _this.ariaService = new AriaService();\n        _this.hTxtEle = _this.parent.createElement('span', { className: 'e-headertext' });\n        _this.sortEle = _this.parent.createElement('div', { className: 'e-sortfilterdiv e-icons', attrs: { 'aria-hidden': 'true' } });\n        _this.gui = _this.parent.createElement('div');\n        _this.chkAllBox = _this.parent.createElement('input', { className: 'e-checkselectall', attrs: { 'type': 'checkbox', 'aria-label': _this.localizer.getConstant('SelectAllCheckbox') } });\n        return _this;\n    }\n    /**\n     * Function to return the wrapper for the TH content.\n     *\n     * @returns {string | Element} returns the element\n     */\n    HeaderCellRenderer.prototype.getGui = function () {\n        return this.gui.cloneNode();\n    };\n    /**\n     * Function to render the cell content based on Column object.\n     *\n     * @param {Cell} cell - specifies the column\n     * @param {Object} data - specifies the data\n     * @param {object} attributes - specifies the aattributes\n     * @returns {Element} returns the element\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    HeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n        var node = this.element.cloneNode();\n        var fltrMenuEle = this.parent.createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter', attrs: { 'aria-hidden': 'true' } });\n        return this.prepareHeader(cell, node, fltrMenuEle);\n    };\n    /**\n     * Function to refresh the cell content based on Column object.\n     *\n     * @param  {Cell} cell - specifies the cell\n     * @param  {Element} node - specifies the noe\n     * @returns {Element} returns the element\n     */\n    HeaderCellRenderer.prototype.refresh = function (cell, node) {\n        this.clean(node);\n        var fltrMenuEle = this.parent.createElement('div', { className: 'e-filtermenudiv e-icons e-icon-filter', attrs: { 'aria-hidden': 'true' } });\n        return this.prepareHeader(cell, node, fltrMenuEle);\n    };\n    HeaderCellRenderer.prototype.clean = function (node) {\n        node.innerHTML = '';\n    };\n    /* tslint:disable-next-line:max-func-body-length */\n    HeaderCellRenderer.prototype.prepareHeader = function (cell, node, fltrMenuEle) {\n        var column = cell.column;\n        var ariaAttr = {};\n        var elementDesc = '';\n        //Prepare innerHtml\n        var innerDIV = this.getGui();\n        var hValueAccer;\n        attributes(innerDIV, {\n            'e-mappinguid': column.uid,\n            'class': 'e-headercelldiv'\n        });\n        if (!isNullOrUndefined(column.headerValueAccessor)) {\n            hValueAccer = this.getValue(column.headerText, column);\n        }\n        if (column.type !== 'checkbox') {\n            var value = column.headerText;\n            if (!isNullOrUndefined(hValueAccer)) {\n                value = hValueAccer;\n            }\n            var headerText = this.hTxtEle.cloneNode();\n            headerText[column.getDomSetter()] = this.parent.sanitize(value);\n            innerDIV.appendChild(headerText);\n        }\n        else {\n            column.editType = 'booleanedit';\n            var checkAllWrap = createCheckBox(this.parent.createElement, false, { checked: false, label: ' ' });\n            this.chkAllBox.id = 'checkbox-' + column.uid;\n            checkAllWrap.insertBefore(this.chkAllBox.cloneNode(), checkAllWrap.firstChild);\n            if (this.parent.cssClass) {\n                addClass([checkAllWrap], [this.parent.cssClass]);\n            }\n            innerDIV.appendChild(checkAllWrap);\n            innerDIV.classList.add('e-headerchkcelldiv');\n        }\n        this.buildAttributeFromCell(node, cell);\n        this.appendHtml(node, innerDIV);\n        node.appendChild(this.sortEle.cloneNode());\n        if ((this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') &&\n            (column.allowFiltering && !isNullOrUndefined(column.field)) &&\n            !(this.parent.showColumnMenu && column.showColumnMenu)) {\n            attributes(fltrMenuEle, {\n                'e-mappinguid': 'e-flmenu-' + column.uid\n            });\n            elementDesc = elementDesc.length ? elementDesc + '. ' + this.localizer.getConstant('FilterDescription') : this.localizer.getConstant('FilterDescription');\n            node.classList.add('e-fltr-icon');\n            var matchFlColumns = [];\n            if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFlColumns.length) {\n                var foreignColumn = this.parent.getForeignKeyColumns();\n                for (var index = 0; index < this.parent.columns.length; index++) {\n                    for (var count = 0; count < this.parent.filterSettings.columns.length; count++) {\n                        if (this.parent.filterSettings.columns[parseInt(count.toString(), 10)].field === column.field\n                            || (foreignColumn.length\n                                && column.foreignKeyValue === this.parent.filterSettings.columns[parseInt(count.toString(), 10)].field)) {\n                            fltrMenuEle.classList.add('e-filtered');\n                            matchFlColumns.push(column.field);\n                            break;\n                        }\n                    }\n                }\n            }\n            node.appendChild(fltrMenuEle.cloneNode());\n        }\n        if (cell.className) {\n            node.classList.add(cell.className);\n        }\n        if (column.customAttributes) {\n            setStyleAndAttributes(node, column.customAttributes);\n        }\n        if (this.parent.allowSorting && column.allowSorting) {\n            ariaAttr.sort = 'none';\n            elementDesc = elementDesc.length ? elementDesc + '. ' + this.localizer.getConstant('SortDescription') : this.localizer.getConstant('SortDescription');\n        }\n        if ((this.parent.allowGrouping && column.allowGrouping) || this.parent.allowReordering && column.allowReordering) {\n            ariaAttr.grabbed = false;\n            elementDesc = elementDesc.length ? elementDesc + '. ' + this.localizer.getConstant('GroupDescription') : this.localizer.getConstant('GroupDescription');\n        }\n        if (this.parent.showColumnMenu && column.type !== 'checkbox' && !column.template) {\n            elementDesc = elementDesc.length ? elementDesc + '. ' + this.localizer.getConstant('ColumnMenuDescription') : this.localizer.getConstant('ColumnMenuDescription');\n        }\n        node = this.extendPrepareHeader(column, node);\n        var result;\n        var gridObj = this.parent;\n        var colIndex = gridObj.getColumnIndexByField(column.field);\n        if (!isNullOrUndefined(column.headerTemplate)) {\n            //need to pass the template id for blazor headertemplate\n            var headerTempID = gridObj.element.id + column.uid + 'headerTemplate';\n            var str = 'isStringTemplate';\n            var col = column;\n            var isReactCompiler = this.parent.isReact && typeof (column.headerTemplate) !== 'string';\n            var isReactChild_1 = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n                this.parent.parentDetails.parentInstObj.isReact;\n            if (isReactCompiler || isReactChild_1) {\n                var copied = { 'index': colIndex };\n                node.firstElementChild.innerHTML = '';\n                column.getHeaderTemplate()(extend(copied, col), gridObj, 'headerTemplate', headerTempID, this.parent[\"\" + str], null, node.firstElementChild);\n                this.parent.renderTemplates();\n            }\n            else {\n                result = column.getHeaderTemplate()(extend({ 'index': colIndex }, col), gridObj, 'headerTemplate', headerTempID, this.parent[\"\" + str], undefined, undefined, this.parent['root']);\n                node.firstElementChild.innerHTML = '';\n                appendChildren(node.firstElementChild, result);\n            }\n        }\n        this.ariaService.setOptions(node, ariaAttr);\n        if (!isNullOrUndefined(column.headerTextAlign) || !isNullOrUndefined(column.textAlign)) {\n            var alignment = column.headerTextAlign || column.textAlign;\n            innerDIV.style.textAlign = alignment;\n            if (alignment === 'Right' || alignment === 'Left') {\n                node.classList.add(alignment === 'Right' ? 'e-rightalign' : 'e-leftalign');\n            }\n            else if (alignment === 'Center') {\n                node.classList.add('e-centeralign');\n            }\n        }\n        if (column.clipMode === 'Clip' || (!column.clipMode && this.parent.clipMode === 'Clip')) {\n            node.classList.add('e-gridclip');\n        }\n        else if ((column.clipMode === 'EllipsisWithTooltip' || (!column.clipMode && this.parent.clipMode === 'EllipsisWithTooltip'))\n            && !(gridObj.allowTextWrap && (gridObj.textWrapSettings.wrapMode === 'Header'\n                || gridObj.textWrapSettings.wrapMode === 'Both'))) {\n            if (column.type !== 'checkbox') {\n                node.classList.add('e-ellipsistooltip');\n            }\n        }\n        if (elementDesc) {\n            var titleElem = (this.parent.createElement('span', { id: 'headerTitle-' + column.uid, innerHTML: elementDesc, attrs: { style: 'display:none' } }));\n            node.appendChild(titleElem);\n            node.setAttribute('aria-describedby', titleElem.id);\n        }\n        node.setAttribute('aria-rowspan', (!isNullOrUndefined(cell.rowSpan) ? cell.rowSpan : 1).toString());\n        node.setAttribute('aria-colspan', '1');\n        var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n            this.parent.parentDetails.parentInstObj.isReact;\n        if (((this.parent.isReact && this.parent.requireTemplateRef)\n            || (isReactChild && this.parent.parentDetails.parentInstObj.requireTemplateRef))\n            && !isNullOrUndefined(column.headerTemplate)) {\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            var thisRef_1 = this;\n            thisRef_1.parent.renderTemplates(function () {\n                thisRef_1.parent.trigger(headerCellInfo, { cell: cell, node: node });\n            });\n        }\n        else {\n            this.parent.trigger(headerCellInfo, { cell: cell, node: node });\n        }\n        if (this.parent.isFrozenGrid()) {\n            addStickyColumnPosition(this.parent, column, node);\n        }\n        return node;\n    };\n    HeaderCellRenderer.prototype.getValue = function (field, column) {\n        return column.headerValueAccessor(field, column);\n    };\n    HeaderCellRenderer.prototype.extendPrepareHeader = function (column, node) {\n        if (this.parent.showColumnMenu && column.showColumnMenu && !isNullOrUndefined(column.field)) {\n            var element = (this.parent.createElement('div', { className: 'e-icons e-columnmenu', attrs: { 'aria-hidden': 'true' } }));\n            var matchFilteredColumns = [];\n            if (this.parent.filterSettings.columns.length && this.parent.filterSettings.columns.length !== matchFilteredColumns.length) {\n                for (var i = 0; i < this.parent.columns.length; i++) {\n                    for (var j = 0; j < this.parent.filterSettings.columns.length; j++) {\n                        if (this.parent.filterSettings.columns[parseInt(j.toString(), 10)].field === column.field) {\n                            element.classList.add('e-filtered');\n                            matchFilteredColumns.push(column.field);\n                            break;\n                        }\n                    }\n                }\n            }\n            node.classList.add('e-fltr-icon');\n            node.appendChild(element);\n        }\n        if (this.parent.allowResizing) {\n            var handler = this.parent.createElement('div');\n            handler.className = column.allowResizing ? 'e-rhandler e-rcursor' : 'e-rsuppress';\n            node.appendChild(handler);\n        }\n        return node;\n    };\n    /**\n     * Function to specifies how the result content to be placed in the cell.\n     *\n     * @param  {Element} node - specifies the node\n     * @param  {string|Element} innerHtml - specifies the innerHtml\n     * @returns {Element} returns the element\n     */\n    HeaderCellRenderer.prototype.appendHtml = function (node, innerHtml) {\n        node.appendChild(innerHtml);\n        return node;\n    };\n    return HeaderCellRenderer;\n}(CellRenderer));\nexport { HeaderCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { headerCellInfo } from '../base/constant';\nimport { setStyleAndAttributes, appendChildren, frozenDirection, isChildColumn, applyStickyLeftRightPosition } from '../base/util';\n/**\n * StackedHeaderCellRenderer class which responsible for building stacked header cell content.\n *\n * @hidden\n */\nvar StackedHeaderCellRenderer = /** @class */ (function (_super) {\n    __extends(StackedHeaderCellRenderer, _super);\n    function StackedHeaderCellRenderer() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.element = _this.parent.createElement('TH', {\n            className: 'e-headercell e-stackedheadercell', attrs: {\n                tabindex: '-1', role: 'columnheader'\n            }\n        });\n        return _this;\n    }\n    /**\n     * Function to render the cell content based on Column object.\n     *\n     * @param {Cell<Column>} cell - specifies the cell\n     * @param {Object} data - specifies the data\n     * @param {object} attributes - specifies the attributes\n     * @returns {Element} returns the element\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    StackedHeaderCellRenderer.prototype.render = function (cell, data, attributes) {\n        var node = this.element.cloneNode();\n        var div = this.parent.createElement('div', {\n            className: 'e-stackedheadercelldiv',\n            attrs: { 'e-mappinguid': cell.column.uid }\n        });\n        var column = cell.column;\n        node.appendChild(div);\n        if (!isNullOrUndefined(column.headerTemplate)) {\n            appendChildren(div, column.getHeaderTemplate()(column, this.parent, 'headerTemplate'));\n        }\n        else {\n            this.appendHtml(div, this.parent.sanitize(column.headerText), column.getDomSetter());\n        }\n        if (cell.column.toolTip) {\n            node.setAttribute('title', cell.column.toolTip);\n        }\n        if (column.clipMode === 'Clip' || (!column.clipMode && this.parent.clipMode === 'Clip')) {\n            node.classList.add('e-gridclip');\n        }\n        else if (column.clipMode === 'EllipsisWithTooltip' || (!column.clipMode && this.parent.clipMode === 'EllipsisWithTooltip')) {\n            node.classList.add('e-ellipsistooltip');\n        }\n        if (!isNullOrUndefined(cell.column.textAlign)) {\n            div.style.textAlign = cell.column.textAlign;\n        }\n        if (cell.column.customAttributes) {\n            setStyleAndAttributes(node, cell.column.customAttributes);\n        }\n        node.setAttribute('colspan', cell.colSpan.toString());\n        node.setAttribute('aria-colspan', cell.colSpan.toString());\n        node.setAttribute('aria-rowspan', '1');\n        if (this.parent.allowResizing) {\n            var handler = this.parent.createElement('div');\n            handler.className = cell.column.allowResizing ? 'e-rhandler e-rcursor' : 'e-rsuppress';\n            node.appendChild(handler);\n        }\n        if (cell.className) {\n            node.classList.add(cell.className);\n        }\n        this.parent.trigger(headerCellInfo, { cell: cell, node: node });\n        if (frozenDirection(column) === 'Left') {\n            node.classList.add('e-leftfreeze');\n            if (column.border === 'Left') {\n                node.classList.add('e-freezeleftborder');\n            }\n            if (column.index === 0) {\n                applyStickyLeftRightPosition(node, (this.parent.getIndentCount() * 30), this.parent.enableRtl, 'Left');\n            }\n            else {\n                var cols = this.parent.getColumns();\n                var width = this.parent.getIndentCount() * 30;\n                for (var i = 0; i < cols.length; i++) {\n                    if (column.index < cols[parseInt(i.toString(), 10)].index) {\n                        break;\n                    }\n                    if (cols[parseInt(i.toString(), 10)].visible) {\n                        width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n                    }\n                }\n                applyStickyLeftRightPosition(node, width, this.parent.enableRtl, 'Left');\n            }\n        }\n        else if (frozenDirection(column) === 'Right') {\n            node.classList.add('e-rightfreeze');\n            var cols = this.parent.getColumns();\n            var width = this.parent.getFrozenMode() === 'Right' && this.parent.isRowDragable() ? 30 : 0;\n            for (var i = cols.length - 1; i >= 0; i--) {\n                if (isChildColumn(column, cols[parseInt(i.toString(), 10)].uid) || column.index > cols[parseInt(i.toString(), 10)].index) {\n                    break;\n                }\n                if (cols[parseInt(i.toString(), 10)].visible) {\n                    width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n                }\n            }\n            applyStickyLeftRightPosition(node, width, this.parent.enableRtl, 'Right');\n            if (column.border === 'Right') {\n                node.classList.add('e-freezerightborder');\n            }\n        }\n        else if (frozenDirection(column) === 'Fixed') {\n            node.classList.add('e-fixedfreeze');\n            var cols = this.parent.getColumns();\n            var width = 0;\n            if (this.parent.getVisibleFrozenLeftCount()) {\n                width = this.parent.getIndentCount() * 30;\n            }\n            else if (this.parent.getFrozenMode() === 'Right') {\n                width = this.parent.groupSettings.columns.length * 30;\n            }\n            for (var i = 0; i < cols.length; i++) {\n                if (column.index > cols[parseInt(i.toString(), 10)].index) {\n                    if ((cols[parseInt(i.toString(), 10)].freeze === 'Left' || cols[parseInt(i.toString(), 10)].isFrozen) ||\n                        cols[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n                        if (cols[parseInt(i.toString(), 10)].visible) {\n                            width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n                        }\n                    }\n                }\n            }\n            applyStickyLeftRightPosition(node, width - 1, this.parent.enableRtl, 'Left');\n            width = this.parent.getFrozenMode() === 'Right' && this.parent.isRowDragable() ? 30 : 0;\n            for (var i = cols.length - 1; i >= 0; i--) {\n                if (column.index < cols[parseInt(i.toString(), 10)].index) {\n                    if (isChildColumn(column, cols[parseInt(i.toString(), 10)].uid) ||\n                        column.index > cols[parseInt(i.toString(), 10)].index) {\n                        break;\n                    }\n                    if (cols[parseInt(i.toString(), 10)].freeze === 'Right' || cols[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n                        if (cols[parseInt(i.toString(), 10)].visible) {\n                            width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n                        }\n                    }\n                }\n            }\n            applyStickyLeftRightPosition(node, width - 1, this.parent.enableRtl, 'Right');\n        }\n        else {\n            node.classList.add('e-unfreeze');\n        }\n        return node;\n    };\n    return StackedHeaderCellRenderer;\n}(CellRenderer));\nexport { StackedHeaderCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { setStyleAndAttributes } from '../base/util';\nimport { CellRenderer } from './cell-renderer';\n/**\n * IndentCellRenderer class which responsible for building group indent cell.\n *\n * @hidden\n */\nvar IndentCellRenderer = /** @class */ (function (_super) {\n    __extends(IndentCellRenderer, _super);\n    function IndentCellRenderer() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.element = _this.parent.createElement('TD', { className: 'e-indentcell' });\n        return _this;\n    }\n    /**\n     * Function to render the indent cell\n     *\n     * @param  {Cell} cell - specifies the cell\n     * @param  {Object} data - specifies the data\n     * @returns {Element} returns the element\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    IndentCellRenderer.prototype.render = function (cell, data) {\n        var node = this.element.cloneNode();\n        setStyleAndAttributes(node, cell.attributes);\n        return node;\n    };\n    return IndentCellRenderer;\n}(CellRenderer));\nexport { IndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { appendChildren, templateCompiler } from '../base/util';\nimport { CellType } from '../base/enum';\n/**\n * GroupCaptionCellRenderer class which responsible for building group caption cell.\n *\n * @hidden\n */\nvar GroupCaptionCellRenderer = /** @class */ (function (_super) {\n    __extends(GroupCaptionCellRenderer, _super);\n    function GroupCaptionCellRenderer() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.cellUid = 0;\n        _this.element = _this.parent\n            .createElement('TD', { className: 'e-groupcaption',\n            attrs: { id: _this.parent.element.id + 'captioncell', tabindex: '-1' } });\n        return _this;\n    }\n    /**\n     * Function to render the cell content based on Column object.\n     *\n     * @param  {Cell} cell - specifies the cell\n     * @param  {Object} data - specifies the GroupedData\n     * @returns {Element} returns the element\n     */\n    GroupCaptionCellRenderer.prototype.render = function (cell, data) {\n        this.element.id = this.parent.element.id + 'captioncell' + this.cellUid++;\n        var node = this.element.cloneNode();\n        var gObj = this.parent;\n        var column = cell.column;\n        var domSetter = column.getDomSetter ? column.getDomSetter() : 'innerHTML';\n        var result;\n        var fKeyValue;\n        var gTemplateValue;\n        data.headerText = cell.column.headerText;\n        if (cell.isForeignKey) {\n            fKeyValue = this.format(cell.column, cell.column.valueAccessor('foreignKey', data, cell.column));\n        }\n        var value = cell.isForeignKey ? fKeyValue : cell.column.enableGroupByFormat ? data.key :\n            this.format(cell.column, cell.column.valueAccessor('key', data, cell.column));\n        for (var j = 0; j < gObj.aggregates.length; j++) {\n            var _loop_1 = function (i) {\n                if (gObj.getVisibleColumns()[0].field === gObj.aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)]\n                    .field && gObj.aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)].groupCaptionTemplate) {\n                    var gCaptionTemp = gObj.aggregates[parseInt(j.toString(), 10)]\n                        .columns[parseInt(i.toString(), 10)].groupCaptionTemplate;\n                    if (typeof gCaptionTemp === 'string' && gCaptionTemp.includes('$')) {\n                        gTemplateValue = gObj.aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)]\n                            .groupCaptionTemplate.split('$')[0] + data[gObj.getVisibleColumns()[0].field][gObj\n                            .aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)].type] +\n                            gObj.aggregates[parseInt(j.toString(), 10)].columns[parseInt(i.toString(), 10)]\n                                .groupCaptionTemplate.split('}')[1];\n                    }\n                    else {\n                        var column_1 = (gObj.aggregates[parseInt(j.toString(), 10)]\n                            .columns[parseInt(i.toString(), 10)]);\n                        var tempObj = column_1.getTemplate(CellType.CaptionSummary);\n                        var tempID = '';\n                        if (!isNullOrUndefined(tempObj)) {\n                            var tempValue_1 = tempObj.fn(data[column_1.columnName], this_1.parent, tempObj.property, tempID);\n                            if (this_1.parent.isReact && typeof column_1.groupCaptionTemplate !== 'string') {\n                                this_1.parent.renderTemplates(function () {\n                                    if (tempValue_1 && tempValue_1.length) {\n                                        if (!isNullOrUndefined(gObj.groupSettings.captionTemplate)) {\n                                            node.appendChild(tempValue_1[0]);\n                                        }\n                                        else {\n                                            node.innerText += ' ' + tempValue_1[0].textContent;\n                                        }\n                                    }\n                                });\n                            }\n                            else {\n                                if (tempValue_1 && tempValue_1.length) {\n                                    if (!isNullOrUndefined(gObj.groupSettings.captionTemplate)) {\n                                        gTemplateValue = tempValue_1;\n                                    }\n                                    else {\n                                        gTemplateValue = tempValue_1[0].textContent;\n                                    }\n                                }\n                            }\n                        }\n                    }\n                    return \"break\";\n                }\n            };\n            var this_1 = this;\n            for (var i = 0; i < gObj.aggregates[parseInt(j.toString(), 10)].columns.length; i++) {\n                var state_1 = _loop_1(i);\n                if (state_1 === \"break\")\n                    break;\n            }\n        }\n        if (!isNullOrUndefined(gObj.groupSettings.captionTemplate)) {\n            var isReactCompiler = this.parent.isReact && typeof (gObj.groupSettings.captionTemplate) !== 'string';\n            var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n                this.parent.parentDetails.parentInstObj.isReact;\n            if (isReactCompiler || isReactChild) {\n                var tempID = gObj.element.id + 'captionTemplate';\n                templateCompiler(gObj.groupSettings.captionTemplate)(data, this.parent, 'captionTemplate', tempID, null, null, node);\n                this.parent.renderTemplates();\n            }\n            else if (this.parent.isVue) {\n                result = templateCompiler(gObj.groupSettings.captionTemplate)(data, this.parent);\n            }\n            else {\n                result = templateCompiler(gObj.groupSettings.captionTemplate)(data);\n            }\n            if (!isReactCompiler && !isReactChild) {\n                appendChildren(node, result);\n                if (gTemplateValue && gTemplateValue.length && gTemplateValue[0].textContent) {\n                    node.appendChild(gTemplateValue[0]);\n                }\n            }\n        }\n        else {\n            if (gObj.groupSettings.enableLazyLoading) {\n                node[\"\" + domSetter] = this.parent.sanitize(cell.column.headerText) + ': ' + this.parent.sanitize(value) +\n                    (gTemplateValue ? '   ' + gTemplateValue : '');\n            }\n            else {\n                node[\"\" + domSetter] = this.parent.sanitize(cell.column.headerText) + ': ' + this.parent.sanitize(value) +\n                    ' - ' + data.count + ' ' + (data.count < 2 ? this.localizer.getConstant('Item') : this.localizer.getConstant('Items'))\n                    + (gTemplateValue ? '   ' + gTemplateValue : '');\n            }\n        }\n        node.setAttribute('colspan', cell.colSpan.toString());\n        node.setAttribute('aria-label', node.innerHTML + this.localizer.getConstant('GroupCaption'));\n        node.setAttribute('title', node.textContent);\n        return node;\n    };\n    return GroupCaptionCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionCellRenderer };\n/**\n * GroupCaptionEmptyCellRenderer class which responsible for building group caption empty cell.\n *\n * @hidden\n */\nvar GroupCaptionEmptyCellRenderer = /** @class */ (function (_super) {\n    __extends(GroupCaptionEmptyCellRenderer, _super);\n    function GroupCaptionEmptyCellRenderer() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.element = _this.parent.createElement('TD', { className: 'e-groupcaption' });\n        return _this;\n    }\n    /**\n     * Function to render the cell content based on Column object.\n     *\n     * @param {Cell} cell - specifies the cell\n     * @param {Object} data - specifies the Object\n     * @param {string} data.field - Defines the field\n     * @param {string} data.key - Defines the key\n     * @param {number} data.count - Defines the count\n     * @returns {Element} returns the element\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    GroupCaptionEmptyCellRenderer.prototype.render = function (cell, data) {\n        var node = this.element.cloneNode();\n        node.innerHTML = '&nbsp;';\n        node.setAttribute('colspan', cell.colSpan.toString());\n        return node;\n    };\n    return GroupCaptionEmptyCellRenderer;\n}(CellRenderer));\nexport { GroupCaptionEmptyCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { IndentCellRenderer } from './indent-cell-renderer';\nimport { CellType } from '../base/enum';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n *\n * @hidden\n */\nvar ExpandCellRenderer = /** @class */ (function (_super) {\n    __extends(ExpandCellRenderer, _super);\n    function ExpandCellRenderer() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    /**\n     * Function to render the expand cell\n     *\n     * @param {Cell} cell - specifies the cell\n     * @param {Object} data - specifies the data\n     * @param {string} data.field - Defines the field\n     * @param {string} data.key - Defines the key\n     * @param {Object} attr - specifies the attribute\n     * @param {boolean} isExpand - specifies isexpand\n     * @returns {Element} returns the element\n     */\n    ExpandCellRenderer.prototype.render = function (cell, data, attr, isExpand) {\n        var node = this.element.cloneNode();\n        node.setAttribute('ej-mappingname', data.field);\n        node.setAttribute('ej-mappingvalue', data.key);\n        node.setAttribute('aria-expanded', isExpand ? 'true' : 'false');\n        node.setAttribute('tabindex', '-1');\n        if (this.parent.infiniteScrollSettings && this.parent.infiniteScrollSettings.enableCache) {\n            cell.cellType = CellType.Indent;\n            node.className = isExpand ? 'e-recordplusexpand e-disablepointer' : 'e-recordpluscollapse e-disablepointer';\n        }\n        else {\n            node.className = isExpand ? 'e-recordplusexpand' : 'e-recordpluscollapse';\n            node.appendChild(this.parent.createElement('a', {\n                className: isExpand ? 'e-icons e-gdiagonaldown e-icon-gdownarrow' : 'e-icons e-gnextforward e-icon-grightarrow',\n                attrs: { href: '#', 'title': isExpand ? 'expanded' : 'collapsed' }\n            }));\n        }\n        return node;\n    };\n    return ExpandCellRenderer;\n}(IndentCellRenderer));\nexport { ExpandCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { CellRenderer } from './cell-renderer';\n/**\n * HeaderIndentCellRenderer class which responsible for building header indent cell.\n *\n * @hidden\n */\nvar HeaderIndentCellRenderer = /** @class */ (function (_super) {\n    __extends(HeaderIndentCellRenderer, _super);\n    function HeaderIndentCellRenderer() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.element = _this.parent.createElement('TH', { className: 'e-grouptopleftcell' });\n        return _this;\n    }\n    /**\n     * Function to render the indent cell\n     *\n     * @param  {Cell} cell - specifies the cell\n     * @param  {Object} data - specifies the data\n     * @returns {Element} returns the element\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    HeaderIndentCellRenderer.prototype.render = function (cell, data) {\n        var node = this.element.cloneNode();\n        node.appendChild(this.parent.createElement('div', { className: 'e-headercelldiv e-emptycell', innerHTML: '' }));\n        return node;\n    };\n    return HeaderIndentCellRenderer;\n}(CellRenderer));\nexport { HeaderIndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { CellRenderer } from './cell-renderer';\n/**\n * DetailHeaderIndentCellRenderer class which responsible for building detail header indent cell.\n *\n * @hidden\n */\nvar DetailHeaderIndentCellRenderer = /** @class */ (function (_super) {\n    __extends(DetailHeaderIndentCellRenderer, _super);\n    function DetailHeaderIndentCellRenderer() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.element = _this.parent.createElement('TH', { className: 'e-detailheadercell' });\n        return _this;\n    }\n    /**\n     * Function to render the detail indent cell\n     *\n     * @param  {Cell} cell - specifies the cell\n     * @param  {Object} data - specifies the data\n     * @returns {Element} returns the element\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    DetailHeaderIndentCellRenderer.prototype.render = function (cell, data) {\n        var node = this.element.cloneNode();\n        node.appendChild(this.parent.createElement('div', { className: 'e-emptycell' }));\n        return node;\n    };\n    return DetailHeaderIndentCellRenderer;\n}(CellRenderer));\nexport { DetailHeaderIndentCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n *\n * @hidden\n */\nvar DetailExpandCellRenderer = /** @class */ (function (_super) {\n    __extends(DetailExpandCellRenderer, _super);\n    function DetailExpandCellRenderer() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.element = _this.parent.createElement('TD', {\n            className: 'e-detailrowcollapse',\n            attrs: { 'aria-expanded': 'false', tabindex: '-1' }\n        });\n        return _this;\n    }\n    /**\n     * Function to render the detail expand cell\n     *\n     * @param {Cell<Column>} cell - specifies the cell\n     * @param {Object} data - specifies the data\n     * @param {Object} attributes - specifies the attributes\n     * @returns {Element} returns the element\n     */\n    DetailExpandCellRenderer.prototype.render = function (cell, data, attributes) {\n        var node = this.element.cloneNode();\n        if (attributes && !isNullOrUndefined(attributes['class'])) {\n            node.className = '';\n            node.className = attributes['class'];\n            node.appendChild(this.parent.createElement('a', { className: 'e-icons e-dtdiagonaldown e-icon-gdownarrow', attrs: {\n                    href: '#', 'title': this.localizer.getConstant('Expanded')\n                } }));\n        }\n        else {\n            node.appendChild(this.parent.createElement('a', { className: 'e-icons e-dtdiagonalright e-icon-grightarrow', attrs: {\n                    href: '#', 'title': this.localizer.getConstant('Collapsed')\n                } }));\n        }\n        if (cell.isSelected) {\n            node.classList.add('e-selectionbackground', 'e-active');\n        }\n        return node;\n    };\n    return DetailExpandCellRenderer;\n}(CellRenderer));\nexport { DetailExpandCellRenderer };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { CellRenderer } from './cell-renderer';\nimport { applyStickyLeftRightPosition } from '../base/util';\n/**\n * ExpandCellRenderer class which responsible for building group expand cell.\n *\n * @hidden\n */\nvar RowDragDropRenderer = /** @class */ (function (_super) {\n    __extends(RowDragDropRenderer, _super);\n    function RowDragDropRenderer() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.element = _this.parent.createElement('TD', {\n            className: 'e-rowdragdrop e-rowdragdropcell',\n            attrs: { tabindex: '-1', role: 'gridcell' }\n        });\n        return _this;\n    }\n    /**\n     * Function to render the detail expand cell\n     *\n     * @param {Cell<Column>} cell - specifies the cell\n     * @param {Object} data - specifies the data\n     * @returns {Element} returns the element\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    RowDragDropRenderer.prototype.render = function (cell, data) {\n        var nodeElement = this.element.cloneNode();\n        nodeElement.appendChild(this.parent.createElement('div', {\n            className: 'e-icons e-rowcelldrag e-dtdiagonalright e-icon-rowdragicon',\n            attrs: { 'aria-hidden': 'true' }\n        }));\n        if (cell.isSelected) {\n            nodeElement.classList.add('e-selectionbackground');\n            nodeElement.classList.add('e-active');\n        }\n        if (this.parent.getVisibleFrozenRightCount() || this.parent.getVisibleFrozenLeftCount()) {\n            nodeElement.classList.add('e-leftfreeze');\n            var width = this.parent.getFrozenMode() === 'Right' ? 0 : this.parent.groupSettings.columns.length * 30;\n            applyStickyLeftRightPosition(nodeElement, width, this.parent.enableRtl, this.parent.getFrozenMode() === 'Right' ? 'Right' : 'Left');\n        }\n        return nodeElement;\n    };\n    return RowDragDropRenderer;\n}(CellRenderer));\nexport { RowDragDropRenderer };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { createElement } from '@syncfusion/ej2-base';\nimport { CellRenderer } from './cell-renderer';\nimport { applyStickyLeftRightPosition } from '../base/util';\n/**\n * DetailHeaderIndentCellRenderer class which responsible for building detail header indent cell.\n *\n * @hidden\n */\nvar RowDragDropHeaderRenderer = /** @class */ (function (_super) {\n    __extends(RowDragDropHeaderRenderer, _super);\n    function RowDragDropHeaderRenderer() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.element = _this.parent.createElement('TH', { className: 'e-rowdragheader' });\n        return _this;\n    }\n    /**\n     * Function to render the detail indent cell\n     *\n     * @param  {Cell} cell - specifies the cell\n     * @param  {Object} data - specifies the data\n     * @returns {Element} returns the element\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    RowDragDropHeaderRenderer.prototype.render = function (cell, data) {\n        var node = this.element.cloneNode();\n        node.appendChild(createElement('div', { className: 'e-emptycell' }));\n        if (this.parent.getVisibleFrozenRightCount() || this.parent.getVisibleFrozenLeftCount()) {\n            node.classList.add('e-leftfreeze');\n            var width = this.parent.getFrozenMode() === 'Right' ? 0 : this.parent.groupSettings.columns.length * 30;\n            applyStickyLeftRightPosition(node, width, this.parent.enableRtl, this.parent.getFrozenMode() === 'Right' ? 'Right' : 'Left');\n        }\n        return node;\n    };\n    return RowDragDropHeaderRenderer;\n}(CellRenderer));\nexport { RowDragDropHeaderRenderer };\n","import { remove, resetBlazorTemplate, blazorTemplates, getValue } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { DataManager, Query, Deferred, Predicate, DataUtil } from '@syncfusion/ej2-data';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RenderType, CellType } from '../base/enum';\nimport { Data } from '../actions/data';\nimport { Column } from '../models/column';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport * as events from '../base/constant';\nimport { prepareColumns, setFormatter, isGroupAdaptive, getDatePredicate, getObject, clearReactVueTemplates } from '../base/util';\nimport { ContentRender } from '../renderer/content-renderer';\nimport { HeaderRender } from '../renderer/header-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { HeaderCellRenderer } from '../renderer/header-cell-renderer';\nimport { StackedHeaderCellRenderer } from '../renderer/stacked-cell-renderer';\nimport { IndentCellRenderer } from '../renderer/indent-cell-renderer';\nimport { GroupCaptionCellRenderer, GroupCaptionEmptyCellRenderer } from '../renderer/caption-cell-renderer';\nimport { ExpandCellRenderer } from '../renderer/expand-cell-renderer';\nimport { HeaderIndentCellRenderer } from '../renderer/header-indent-renderer';\nimport { DetailHeaderIndentCellRenderer } from '../renderer/detail-header-indent-renderer';\nimport { DetailExpandCellRenderer } from '../renderer/detail-expand-cell-renderer';\nimport { RowDragDropRenderer } from './row-drag-drop-renderer';\nimport { RowDragDropHeaderRenderer } from '../renderer/row-drag-header-indent-render';\nimport * as literals from '../base/string-literals';\n/**\n * Content module is used to render grid content\n *\n * @hidden\n */\nvar Render = /** @class */ (function () {\n    /**\n     * Constructor for render module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {ServiceLocator} locator - specifies the serviceLocator\n     */\n    function Render(parent, locator) {\n        this.emptyGrid = false;\n        this.counter = 0;\n        this.parent = parent;\n        this.locator = locator;\n        this.data = new Data(parent, locator);\n        this.l10n = locator.getService('localization');\n        this.ariaService = this.locator.getService('ariaService');\n        this.renderer = this.locator.getService('rendererFactory');\n        this.addEventListener();\n    }\n    /**\n     * To initialize grid header, content and footer rendering\n     *\n     * @returns {void}\n     */\n    Render.prototype.render = function () {\n        var gObj = this.parent;\n        this.headerRenderer = this.renderer.getRenderer(RenderType.Header);\n        this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n        this.headerRenderer.renderPanel();\n        this.contentRenderer.renderPanel();\n        if (gObj.getColumns().length) {\n            this.isLayoutRendered = true;\n            this.headerRenderer.renderTable();\n            this.contentRenderer.renderTable();\n            this.emptyRow(false);\n        }\n        this.parent.scrollModule.setWidth();\n        this.parent.scrollModule.setHeight();\n        if (this.parent.height !== 'auto') {\n            this.parent.scrollModule.setPadding();\n        }\n        this.refreshDataManager();\n    };\n    /**\n     * Refresh the entire Grid.\n     *\n     * @param {NotifyArgs} e - specifies the NotifyArgs\n     * @returns {void}\n     */\n    Render.prototype.refresh = function (e) {\n        var _this = this;\n        if (e === void 0) { e = { requestType: 'refresh' }; }\n        var gObj = this.parent;\n        gObj.notify(e.requestType + \"-begin\", e);\n        gObj.trigger(events.actionBegin, e, function (args) {\n            if (args === void 0) { args = { requestType: 'refresh' }; }\n            if (args.cancel) {\n                gObj.notify(events.cancelBegin, args);\n                if (args.action === 'clearFilter' && _this.parent.filterSettings.type === 'Menu') {\n                    _this.parent.filterSettings.columns[_this.parent.filterModule.filterObjIndex] = _this.parent.filterModule.prevFilterObject;\n                    var iconClass = _this.parent.showColumnMenu && _this.parent.filterModule['column'].showColumnMenu ? '.e-columnmenu' : '.e-icon-filter';\n                    var col = _this.parent.element.querySelector('[e-mappinguid=\"' + _this.parent.filterModule['column'].uid + '\"]').parentElement;\n                    var flIcon = col.querySelector(iconClass);\n                    if (!isNullOrUndefined(_this.parent.filterModule.prevFilterObject)) {\n                        flIcon.classList.add('e-filtered');\n                    }\n                }\n                if (args.action === 'clear-filter' && (_this.parent.filterSettings.type === 'CheckBox' || _this.parent.filterSettings.type === 'Excel')) {\n                    _this.parent.filterSettings.columns = _this.parent.filterModule.checkboxPrevFilterObject;\n                }\n                if (args.requestType === 'grouping') {\n                    // Remove the dropped column name from groupsettings.columns if args.cancel is true                \n                    var index = gObj.groupSettings.columns.indexOf(args.columnName);\n                    if (index !== -1) {\n                        gObj.setProperties({ groupSettings: { Columns: gObj.groupSettings.columns.splice(index, 1) } }, true);\n                        gObj.setProperties({ sortSettings: { Columns: gObj.sortSettings.columns.splice(index, 1) } }, true);\n                        var column = gObj.getColumnByField(args.columnName);\n                        var headerCell = gObj.getColumnHeaderByField(column.field);\n                        column.visible = (!isNullOrUndefined(headerCell) && !headerCell.classList.contains('e-hide'));\n                    }\n                }\n                return;\n            }\n            if (gObj.allowSelection && (args.action === 'clearFilter' || args.action === 'clear-filter' ||\n                (args.requestType === 'searching' && args.searchString === '') || args.action === 'add')) {\n                gObj.selectionModule['rmtHdrChkbxClicked'] = false;\n            }\n            if (gObj.allowPaging && gObj.pageSettings.pageSizes && gObj.pagerModule.pagerObj.isAllPage &&\n                (args.action === 'add' && args.requestType === 'save') && gObj.pagerModule.pagerObj.checkAll) {\n                gObj.setProperties({ pageSettings: { pageSize: gObj.pageSettings.pageSize + 1 } }, true);\n            }\n            if (args.requestType === 'delete' && gObj.allowPaging) {\n                var dataLength = args.data.length;\n                var count = gObj.pageSettings.totalRecordsCount - dataLength;\n                var currentViewData = gObj.getCurrentViewRecords().length;\n                // eslint-disable-next-line max-len\n                if ((!(currentViewData - dataLength) && count && ((gObj.pageSettings.currentPage - 1) * gObj.pageSettings.pageSize) === count) || (count && count <= dataLength)) {\n                    gObj.prevPageMoving = true;\n                    gObj.setProperties({\n                        pageSettings: {\n                            totalRecordsCount: count, currentPage: Math.ceil(count / gObj.pageSettings.pageSize)\n                        }\n                    }, true);\n                    gObj.pagerModule.pagerObj.totalRecordsCount = count;\n                }\n            }\n            if (args.requestType === 'reorder' && _this.parent.dataSource && 'result' in _this.parent.dataSource) {\n                _this.contentRenderer.refreshContentRows(args);\n            }\n            else if ((args.requestType === 'paging' || args.requestType === 'columnstate' || args.requestType === 'reorder')\n                && _this.parent.groupSettings.enableLazyLoading && _this.parent.groupSettings.columns.length\n                && (_this.parent.enableVirtualization ? _this.parent.lazyLoadRender :\n                    _this.parent.contentModule).getGroupCache()[_this.parent.pageSettings.currentPage]) {\n                _this.contentRenderer.refreshContentRows(args);\n            }\n            else {\n                _this.refreshDataManager(args);\n            }\n        });\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Render.prototype.resetTemplates = function () {\n        var gObj = this.parent;\n        var gridColumns = gObj.getColumns();\n        if (gObj.detailTemplate) {\n            var detailTemplateID = gObj.element.id + 'detailTemplate';\n            blazorTemplates[\"\" + detailTemplateID] = [];\n            resetBlazorTemplate(detailTemplateID, 'DetailTemplate');\n        }\n        if (gObj.groupSettings.captionTemplate) {\n            resetBlazorTemplate(gObj.element.id + 'captionTemplate', 'CaptionTemplate');\n        }\n        if (gObj.rowTemplate) {\n            resetBlazorTemplate(gObj.element.id + 'rowTemplate', 'RowTemplate');\n        }\n        if (gObj.toolbarTemplate) {\n            resetBlazorTemplate(gObj.element.id + 'toolbarTemplate', 'ToolbarTemplate');\n        }\n        if (gObj.pageSettings.template) {\n            resetBlazorTemplate(gObj.element.id + '_template', 'pageSettings');\n        }\n        for (var i = 0; i < gridColumns.length; i++) {\n            if (gridColumns[parseInt(i.toString(), 10)].template) {\n                blazorTemplates[gObj.element.id + gridColumns[parseInt(i.toString(), 10)].uid] = [];\n                resetBlazorTemplate(gObj.element.id + gridColumns[parseInt(i.toString(), 10)].uid, 'Template');\n            }\n            if (gridColumns[parseInt(i.toString(), 10)].headerTemplate) {\n                resetBlazorTemplate(gObj.element.id + gridColumns[parseInt(i.toString(), 10)].uid + 'headerTemplate', 'HeaderTemplate');\n            }\n            if (gridColumns[parseInt(i.toString(), 10)].filterTemplate) {\n                resetBlazorTemplate(gObj.element.id + gridColumns[parseInt(i.toString(), 10)].uid + 'filterTemplate', 'FilterTemplate');\n            }\n        }\n        var guid = 'guid';\n        for (var k = 0; k < gObj.aggregates.length; k++) {\n            for (var j = 0; j < gObj.aggregates[parseInt(k.toString(), 10)].columns.length; j++) {\n                if (gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)].footerTemplate) {\n                    var tempID = gObj.element.id + gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)][\"\" + guid] + 'footerTemplate';\n                    resetBlazorTemplate(tempID, 'FooterTemplate');\n                }\n                if (gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)].groupFooterTemplate) {\n                    var tempID = gObj.element.id + gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)][\"\" + guid] + 'groupFooterTemplate';\n                    resetBlazorTemplate(tempID, 'GroupFooterTemplate');\n                }\n                if (gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)].groupCaptionTemplate) {\n                    var tempID = gObj.element.id + gObj.aggregates[parseInt(k.toString(), 10)].columns[parseInt(j.toString(), 10)][\"\" + guid] + 'groupCaptionTemplate';\n                    resetBlazorTemplate(tempID, 'GroupCaptionTemplate');\n                }\n            }\n        }\n    };\n    Render.prototype.refreshComplete = function (e) {\n        this.parent.trigger(events.actionComplete, e);\n    };\n    /**\n     * The function is used to refresh the dataManager\n     *\n     * @param {NotifyArgs} args - specifies the args\n     * @returns {void}\n     */\n    Render.prototype.refreshDataManager = function (args) {\n        var _this = this;\n        if (args === void 0) { args = {}; }\n        var gObj = this.parent;\n        var maskRow = (gObj.loadingIndicator.indicatorType === 'Shimmer' && args.requestType !== 'virtualscroll'\n            && args.requestType !== 'infiniteScroll') || ((args.requestType === 'virtualscroll' || args.requestType === 'infiniteScroll')\n            && gObj.enableVirtualMaskRow);\n        if (args.requestType !== 'virtualscroll' && !args.isCaptionCollapse && !maskRow) {\n            this.parent.showSpinner();\n        }\n        if (maskRow) {\n            gObj.showMaskRow(args.requestType === 'virtualscroll' ? args.virtualInfo.sentinelInfo.axis\n                : args.requestType === 'infiniteScroll' ? args.direction : undefined);\n        }\n        this.parent.notify(events.resetInfiniteBlocks, args);\n        this.emptyGrid = false;\n        var dataManager;\n        var isFActon = this.isNeedForeignAction();\n        this.ariaService.setBusy(this.parent.getContent().querySelector('.' + literals.content), true);\n        if (isFActon) {\n            var deffered = new Deferred();\n            dataManager = this.getFData(deffered, args);\n        }\n        if (!dataManager) {\n            if (gObj.allowPaging && !gObj.getDataModule().dataManager.dataSource.offline && gObj.pageSettings\n                && gObj.pageSettings.pageSizes && gObj.pagerModule && gObj.pagerModule.pagerObj && gObj.pagerModule.pagerObj.isAllPage) {\n                gObj.pagerModule.pagerObj.isAllPage = undefined;\n            }\n            dataManager = this.data.getData(args, this.data.generateQuery().requiresCount());\n        }\n        else {\n            // eslint-disable-next-line @typescript-eslint/no-unused-vars\n            dataManager = dataManager.then(function (e) {\n                var query = _this.data.generateQuery().requiresCount();\n                if (_this.emptyGrid) {\n                    var def = new Deferred();\n                    def.resolve({ result: [], count: 0 });\n                    return def.promise;\n                }\n                return _this.data.getData(args, query);\n            });\n        }\n        if (this.parent.getForeignKeyColumns().length && (!isFActon || this.parent.searchSettings.key.length)) {\n            var deffered_1 = new Deferred();\n            dataManager = dataManager.then(function (e) {\n                _this.parent.notify(events.getForeignKeyData, { dataManager: dataManager, result: e, promise: deffered_1, action: args });\n                return deffered_1.promise;\n            });\n        }\n        if (this.parent.groupSettings.disablePageWiseAggregates && this.parent.groupSettings.columns.length) {\n            dataManager = dataManager.then(function (e) { return _this.validateGroupRecords(e); });\n        }\n        dataManager.then(function (e) { return _this.dataManagerSuccess(e, args); })\n            .catch(function (e) { return _this.dataManagerFailure(e, args); });\n    };\n    Render.prototype.getFData = function (deferred, args) {\n        this.parent.notify(events.getForeignKeyData, { isComplex: true, promise: deferred, action: args });\n        return deferred.promise;\n    };\n    Render.prototype.isNeedForeignAction = function () {\n        var gObj = this.parent;\n        return !!((gObj.allowFiltering && gObj.filterSettings.columns.length) ||\n            (gObj.searchSettings.key.length)) && this.foreignKey(this.parent.getForeignKeyColumns());\n    };\n    Render.prototype.foreignKey = function (columns) {\n        var _this = this;\n        return columns.some(function (col) {\n            var fbool = false;\n            fbool = _this.parent.filterSettings.columns.some(function (value) {\n                return col.uid === value.uid;\n            });\n            return !!(fbool || _this.parent.searchSettings.key.length);\n        });\n    };\n    Render.prototype.sendBulkRequest = function (args) {\n        var _this = this;\n        args.requestType = 'batchsave';\n        var gObj = this.parent;\n        if (gObj.allowPaging && gObj.pageSettings.pageSizes && gObj.pagerModule.pagerObj.isAllPage && gObj.pagerModule.pagerObj.checkAll) {\n            var dataLength = args['changes'].addedRecords.length;\n            if (dataLength) {\n                gObj.setProperties({ pageSettings: { pageSize: gObj.pageSettings.pageSize + dataLength } }, true);\n            }\n        }\n        if (gObj.allowPaging && (args.changes.addedRecords.length ||\n            args.changes.deletedRecords.length ||\n            args.changes.changedRecords.length) && gObj.pageSettings\n            && gObj.pageSettings.pageSizes && gObj.pagerModule && gObj.pagerModule.pagerObj\n            && !gObj.getDataModule().dataManager.dataSource.offline && gObj.pagerModule.pagerObj.isAllPage) {\n            gObj.pagerModule.pagerObj.isAllPage = undefined;\n        }\n        var promise = this.data.saveChanges(args.changes, this.parent.getPrimaryKeyFieldNames()[0], args.original);\n        var query = this.data.generateQuery().requiresCount();\n        if (this.data.dataManager.dataSource.offline) {\n            this.refreshDataManager({ requestType: 'batchsave' });\n            return;\n        }\n        else {\n            // eslint-disable-next-line @typescript-eslint/no-unused-vars\n            promise.then(function (e) {\n                _this.data.getData(args, query)\n                    .then(function (e) { return _this.dmSuccess(e, args); })\n                    .catch(function (e) { return _this.dmFailure(e, args); });\n            })\n                .catch(function (e) { return _this.dmFailure(e, args); });\n        }\n    };\n    Render.prototype.dmSuccess = function (e, args) {\n        this.dataManagerSuccess(e, args);\n    };\n    Render.prototype.dmFailure = function (e, args) {\n        this.dataManagerFailure(e, args);\n    };\n    /**\n     * Render empty row to Grid which is used at the time to represent to no records.\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Render.prototype.renderEmptyRow = function () {\n        this.emptyRow(true);\n    };\n    Render.prototype.emptyRow = function (isTrigger) {\n        var gObj = this.parent;\n        var tbody = this.contentRenderer.getTable().querySelector(literals.tbody);\n        if (!isNullOrUndefined(tbody)) {\n            remove(tbody);\n        }\n        tbody = this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n        var spanCount = gObj.allowRowDragAndDrop && isNullOrUndefined(gObj.rowDropSettings.targetID) ? 1 : 0;\n        if (gObj.detailTemplate || gObj.childGrid) {\n            ++spanCount;\n        }\n        var tr = this.parent.createElement('tr', { className: 'e-emptyrow', attrs: { role: 'row' } });\n        var td;\n        if (gObj.emptyRecordTemplate) {\n            var emptyRecordTemplateID = gObj.element.id + 'emptyRecordTemplate';\n            td = this.parent.createElement('td', { attrs: { colspan: (gObj.getVisibleColumns().length + spanCount + gObj.groupSettings.columns.length).toString() } });\n            if (gObj.isVue) {\n                td.appendChild(gObj.getEmptyRecordTemplate()(gObj.dataSource, gObj, 'emptyRecordTemplate', emptyRecordTemplateID, undefined, undefined, undefined, this.parent['root'])[1]);\n            }\n            else {\n                td.appendChild(gObj.getEmptyRecordTemplate()(gObj.dataSource, gObj, 'emptyRecordTemplate', emptyRecordTemplateID, undefined, undefined, undefined, this.parent['root'])[0]);\n            }\n            if (gObj.isReact) {\n                this.parent.renderTemplates();\n            }\n        }\n        else {\n            td = this.parent.createElement('td', {\n                innerHTML: this.l10n.getConstant('EmptyRecord'),\n                attrs: { colspan: (gObj.getVisibleColumns().length + spanCount + gObj.groupSettings.columns.length).toString() }\n            });\n        }\n        if (gObj.isFrozenGrid()) {\n            td.classList.add('e-leftfreeze');\n            td.style.left = 0 + 'px';\n        }\n        if (gObj.frozenRows && gObj.element.querySelector('.e-frozenrow-border')) {\n            this.parent.element.querySelector('.e-frozenrow-border').classList.add('e-frozenrow-empty');\n        }\n        tr.appendChild(td);\n        tbody.appendChild(tr);\n        this.contentRenderer.renderEmpty(tbody);\n        if (isTrigger) {\n            this.parent.trigger(events.dataBound, {});\n            this.parent.notify(events.onEmpty, { rows: [new Row({ isDataRow: true, cells: [new Cell({ isDataCell: true, visible: true })] })] });\n        }\n    };\n    Render.prototype.dynamicColumnChange = function () {\n        if (this.parent.getCurrentViewRecords().length) {\n            this.updateColumnType(this.parent.getCurrentViewRecords()[0]);\n        }\n    };\n    Render.prototype.updateColumnType = function (record) {\n        var columns = this.parent.getColumns();\n        var value;\n        var cFormat = 'customFormat';\n        var equalTo = 'equalTo';\n        var data = record && record.items ? record.items[0] : record;\n        var fmtr = this.locator.getService('valueFormatter');\n        for (var i = 0, len = columns.length; i < len; i++) {\n            value = getObject(columns[parseInt(i.toString(), 10)].field || '', data);\n            if (!isNullOrUndefined(columns[parseInt(i.toString(), 10)][\"\" + cFormat])) {\n                columns[parseInt(i.toString(), 10)].format = columns[parseInt(i.toString(), 10)][\"\" + cFormat];\n            }\n            if (!isNullOrUndefined(columns[parseInt(i.toString(), 10)].validationRules)\n                && !isNullOrUndefined(columns[parseInt(i.toString(), 10)].validationRules[\"\" + equalTo])) {\n                columns[parseInt(i.toString(), 10)].validationRules[\"\" + equalTo][0] = this.parent.element.id + columns[parseInt(i.toString(), 10)].validationRules[\"\" + equalTo][0];\n            }\n            if (columns[parseInt(i.toString(), 10)].isForeignColumn() && columns[parseInt(i.toString(), 10)].columnData) {\n                value = getObject(columns[parseInt(i.toString(), 10)].foreignKeyValue || '', columns[parseInt(i.toString(), 10)].columnData[0]);\n            }\n            if (!isNullOrUndefined(value)) {\n                this.isColTypeDef = true;\n                if (!columns[parseInt(i.toString(), 10)].type) {\n                    columns[parseInt(i.toString(), 10)].type = value.getDay ? (value.getHours() > 0 || value.getMinutes() > 0 ||\n                        value.getSeconds() > 0 || value.getMilliseconds() > 0 ? 'datetime' : 'date') : typeof (value);\n                }\n            }\n            else {\n                columns[parseInt(i.toString(), 10)].type = columns[parseInt(i.toString(), 10)].type || null;\n            }\n            var valueFormatter = new ValueFormatter();\n            if (columns[parseInt(i.toString(), 10)].format && (columns[parseInt(i.toString(), 10)].format.skeleton\n                || (columns[parseInt(i.toString(), 10)].format.format &&\n                    typeof columns[parseInt(i.toString(), 10)].format.format === 'string'))) {\n                columns[parseInt(i.toString(), 10)].setFormatter(valueFormatter.getFormatFunction(extend({}, columns[parseInt(i.toString(), 10)].format)));\n                columns[parseInt(i.toString(), 10)].setParser(valueFormatter.getParserFunction(columns[parseInt(i.toString(), 10)].format));\n            }\n            if (typeof (columns[parseInt(i.toString(), 10)].format) === 'string') {\n                setFormatter(this.locator, columns[parseInt(i.toString(), 10)]);\n            }\n            else if (!columns[parseInt(i.toString(), 10)].format && columns[parseInt(i.toString(), 10)].type === 'number') {\n                columns[parseInt(i.toString(), 10)].setParser(fmtr.getParserFunction({ format: 'n2' }));\n            }\n            if (columns[parseInt(i.toString(), 10)].type === 'dateonly' && !columns[parseInt(i.toString(), 10)].format) {\n                columns[parseInt(i.toString(), 10)].format = 'yMd';\n                setFormatter(this.locator, columns[parseInt(i.toString(), 10)]);\n            }\n        }\n    };\n    /**\n     * @param {ReturnType} e - specifies the return type\n     * @param {NotifyArgs} args - specifies the Notifyargs\n     * @returns {void}\n     * @hidden\n     */\n    // tslint:disable-next-line:max-func-body-length\n    Render.prototype.dataManagerSuccess = function (e, args) {\n        var _this = this;\n        var gObj = this.parent;\n        this.contentRenderer = this.renderer.getRenderer(RenderType.Content);\n        this.headerRenderer = this.renderer.getRenderer(RenderType.Header);\n        e.actionArgs = args;\n        var isInfiniteDelete = this.parent.enableInfiniteScrolling && !this.parent.infiniteScrollSettings.enableCache &&\n            !gObj.groupSettings.enableLazyLoading && (args.requestType === 'delete' || (args.requestType === 'save' &&\n            this.parent.infiniteScrollModule.requestType === 'add' && !(gObj.sortSettings.columns.length ||\n            gObj.filterSettings.columns.length || this.parent.groupSettings.columns.length || gObj.searchSettings.key)));\n        // tslint:disable-next-line:max-func-body-length\n        gObj.trigger(events.beforeDataBound, e, function (dataArgs) {\n            if (dataArgs.cancel) {\n                return;\n            }\n            dataArgs.result = isNullOrUndefined(dataArgs.result) ? [] : dataArgs.result;\n            var len = Object.keys(dataArgs.result).length;\n            if (_this.parent.isDestroyed) {\n                return;\n            }\n            if ((!gObj.getColumns().length && !len) && !(gObj.columns.length && gObj.columns[0] instanceof Column)) {\n                gObj.hideSpinner();\n                return;\n            }\n            if (_this.isInfiniteEnd(args) && !len) {\n                _this.parent.notify(events.infiniteEditHandler, { e: args, result: e.result, count: e.count, agg: e.aggregates });\n                return;\n            }\n            _this.parent.isEdit = false;\n            _this.parent.notify(events.editReset, {});\n            _this.parent.notify(events.tooltipDestroy, {});\n            if (args && args.requestType !== 'infiniteScroll') {\n                _this.parent.notify(events.commandColumnDestroy, { type: 'refreshCommandColumn' });\n            }\n            _this.contentRenderer.prevCurrentView = _this.parent.currentViewData.slice();\n            gObj.currentViewData = dataArgs.result;\n            gObj.notify(events.refreshInfiniteCurrentViewData, { args: args, data: dataArgs.result });\n            if (dataArgs.count && !gObj.allowPaging && (gObj.enableVirtualization || gObj.enableInfiniteScrolling)) {\n                gObj.totalDataRecordsCount = dataArgs.count;\n            }\n            if (!len && dataArgs.count && gObj.allowPaging && args && args.requestType !== 'delete') {\n                if (_this.parent.groupSettings.enableLazyLoading\n                    && (args.requestType === 'grouping' || args.requestType === 'ungrouping')) {\n                    _this.parent.notify(events.groupComplete, args);\n                }\n                gObj.prevPageMoving = true;\n                gObj.pageSettings.totalRecordsCount = dataArgs.count;\n                if (args.requestType !== 'paging') {\n                    gObj.pageSettings.currentPage = Math.ceil(dataArgs.count / gObj.pageSettings.pageSize);\n                }\n                gObj.dataBind();\n                return;\n            }\n            if ((!gObj.getColumns().length && len || !_this.isLayoutRendered) && !isGroupAdaptive(gObj)) {\n                gObj.removeMaskRow();\n                _this.updatesOnInitialRender(dataArgs);\n            }\n            if (!_this.isColTypeDef && gObj.getCurrentViewRecords()) {\n                if (_this.data.dataManager.dataSource.offline && gObj.dataSource && gObj.dataSource.length) {\n                    _this.updateColumnType(gObj.dataSource[0]);\n                }\n                else {\n                    _this.updateColumnType(gObj.getCurrentViewRecords()[0]);\n                }\n            }\n            if (!_this.parent.isInitialLoad && _this.parent.groupSettings.disablePageWiseAggregates &&\n                !_this.parent.groupSettings.columns.length) {\n                dataArgs.result = _this.parent.dataSource instanceof Array ? _this.parent.dataSource : _this.parent.currentViewData;\n            }\n            if ((_this.parent.isReact || _this.parent.isVue) && !isNullOrUndefined(args) && args.requestType !== 'infiniteScroll' && !args.isFrozen) {\n                clearReactVueTemplates(_this.parent, ['footerTemplate']);\n            }\n            if (_this.parent.isAngular && _this.parent.allowGrouping && _this.parent.groupSettings.captionTemplate\n                && !(!isNullOrUndefined(args) && args.requestType === 'infiniteScroll')) {\n                _this.parent.destroyTemplate(['groupSettings_captionTemplate']);\n            }\n            _this.parent.notify(events.dataReady, extend({ count: dataArgs.count, result: dataArgs.result, aggregates: dataArgs.aggregates }, args));\n            if ((gObj.groupSettings.columns.length || (args && args.requestType === 'ungrouping'))\n                && (args && args.requestType !== 'filtering')) {\n                _this.headerRenderer.refreshUI();\n            }\n            if (len) {\n                if (isGroupAdaptive(gObj)) {\n                    var content = 'content';\n                    args.scrollTop = { top: _this.contentRenderer[\"\" + content].scrollTop };\n                }\n                if (!isInfiniteDelete) {\n                    if (_this.parent.enableImmutableMode) {\n                        _this.contentRenderer.immutableModeRendering(args);\n                    }\n                    else {\n                        _this.contentRenderer.refreshContentRows(args);\n                    }\n                }\n                else {\n                    _this.parent.notify(events.infiniteEditHandler, { e: args, result: e.result, count: e.count, agg: e.aggregates });\n                }\n            }\n            else {\n                if (args && args.isCaptionCollapse) {\n                    return;\n                }\n                if (!gObj.getColumns().length) {\n                    gObj.element.innerHTML = '';\n                    alert(_this.l10n.getConstant('EmptyDataSourceError')); //ToDO: change this alert as dialog\n                    return;\n                }\n                _this.contentRenderer.setRowElements([]);\n                _this.contentRenderer.setRowObjects([]);\n                _this.ariaService.setBusy(_this.parent.getContent().querySelector('.' + literals.content), false);\n                gObj.removeMaskRow();\n                _this.renderEmptyRow();\n                if (gObj.enableColumnVirtualization && !len) {\n                    _this.parent.notify(events.contentReady, { rows: gObj.getRowsObject(), args: {} });\n                }\n                if (args) {\n                    var action = (args.requestType || '').toLowerCase() + '-complete';\n                    _this.parent.notify(action, args);\n                    if (args.requestType === 'batchsave') {\n                        args.cancel = false;\n                        args.rows = [];\n                        args.isFrozen = !args.isFrozen;\n                        _this.parent.trigger(events.actionComplete, args);\n                    }\n                }\n                if (_this.parent.autoFit) {\n                    _this.parent.preventAdjustColumns();\n                }\n                _this.parent.hideSpinner();\n            }\n            _this.parent.notify(events.toolbarRefresh, {});\n            _this.setRowCount(_this.parent.getCurrentViewRecords().length);\n            if ('query' in e) {\n                _this.parent.getDataModule().isQueryInvokedFromData = false;\n            }\n        });\n    };\n    /**\n     * @param {object} e - specifies the object\n     * @param {Object[]} e.result - specifies the result\n     * @param {NotifyArgs} args - specifies the args\n     * @returns {void}\n     * @hidden\n     */\n    Render.prototype.dataManagerFailure = function (e, args) {\n        if (!isNullOrUndefined(this.parent.contentModule)) {\n            this.ariaService.setOptions(this.parent.getContent().querySelector('.' + literals.content), { busy: false, invalid: true });\n            this.setRowCount(1);\n        }\n        this.parent.trigger(events.actionFailure, { error: e });\n        this.parent.hideSpinner();\n        this.parent.removeMaskRow();\n        if (args.requestType === 'save' || args.requestType === 'delete'\n            || args.name === 'bulk-save') {\n            return;\n        }\n        this.parent.currentViewData = [];\n        this.renderEmptyRow();\n        if (!this.parent.isInitialLoad) {\n            this.parent.focusModule.setFirstFocusableTabIndex();\n        }\n        this.parent.log('actionfailure', { error: e });\n    };\n    Render.prototype.setRowCount = function (dataRowCount) {\n        this.ariaService.setOptions(this.parent.element, {\n            rowcount: dataRowCount ? dataRowCount.toString() : '1'\n        });\n    };\n    Render.prototype.isInfiniteEnd = function (args) {\n        return this.parent.enableInfiniteScrolling && !this.parent.infiniteScrollSettings.enableCache && args.requestType === 'delete';\n    };\n    Render.prototype.updatesOnInitialRender = function (e) {\n        this.isLayoutRendered = true;\n        var isEmptyCol = false;\n        if (this.parent.columns.length < 1) {\n            this.buildColumns(e.result[0]);\n            isEmptyCol = true;\n        }\n        prepareColumns(this.parent.columns, null, this.parent);\n        if (isEmptyCol) {\n            this.parent.notify(events.refreshSplitFrozenColumn, {});\n        }\n        this.headerRenderer.renderTable();\n        this.contentRenderer.renderTable();\n        this.parent.isAutoGen = true;\n        this.parent.notify(events.autoCol, {});\n    };\n    Render.prototype.iterateComplexColumns = function (obj, field, split) {\n        var keys = Object.keys(obj);\n        for (var i = 0; i < keys.length; i++) {\n            var childKeys = typeof obj[keys[parseInt(i.toString(), 10)]] === 'object'\n                && obj[keys[parseInt(i.toString(), 10)]] && !(obj[keys[parseInt(i.toString(), 10)]] instanceof Date) ?\n                Object.keys(obj[keys[parseInt(i.toString(), 10)]]) : [];\n            if (childKeys.length) {\n                this.iterateComplexColumns(obj[keys[parseInt(i.toString(), 10)]], field + (keys[parseInt(i.toString(), 10)] + '.'), split);\n            }\n            else {\n                split[this.counter] = field + keys[parseInt(i.toString(), 10)];\n                this.counter++;\n            }\n        }\n    };\n    Render.prototype.buildColumns = function (record) {\n        var cols = [];\n        var complexCols = {};\n        this.iterateComplexColumns(record, '', complexCols);\n        var columns = Object.keys(complexCols).filter(function (e) { return complexCols[\"\" + e] !== 'BlazId'; }).\n            map(function (field) { return complexCols[\"\" + field]; });\n        for (var i = 0, len = columns.length; i < len; i++) {\n            cols[parseInt(i.toString(), 10)] = { 'field': columns[parseInt(i.toString(), 10)] };\n            if (this.parent.enableColumnVirtualization) {\n                cols[parseInt(i.toString(), 10)].width = !isNullOrUndefined(cols[parseInt(i.toString(), 10)].width) ?\n                    cols[parseInt(i.toString(), 10)].width : 200;\n            }\n        }\n        this.parent.setProperties({ 'columns': cols }, true);\n    };\n    Render.prototype.instantiateRenderer = function () {\n        this.renderer.addRenderer(RenderType.Header, new HeaderRender(this.parent, this.locator));\n        this.renderer.addRenderer(RenderType.Content, new ContentRender(this.parent, this.locator));\n        var cellrender = this.locator.getService('cellRendererFactory');\n        cellrender.addCellRenderer(CellType.Header, new HeaderCellRenderer(this.parent, this.locator));\n        cellrender.addCellRenderer(CellType.Data, new CellRenderer(this.parent, this.locator));\n        cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n        cellrender.addCellRenderer(CellType.Indent, new IndentCellRenderer(this.parent, this.locator));\n        cellrender.addCellRenderer(CellType.GroupCaption, new GroupCaptionCellRenderer(this.parent, this.locator));\n        cellrender.addCellRenderer(CellType.GroupCaptionEmpty, new GroupCaptionEmptyCellRenderer(this.parent, this.locator));\n        cellrender.addCellRenderer(CellType.Expand, new ExpandCellRenderer(this.parent, this.locator));\n        cellrender.addCellRenderer(CellType.HeaderIndent, new HeaderIndentCellRenderer(this.parent, this.locator));\n        cellrender.addCellRenderer(CellType.StackedHeader, new StackedHeaderCellRenderer(this.parent, this.locator));\n        cellrender.addCellRenderer(CellType.DetailHeader, new DetailHeaderIndentCellRenderer(this.parent, this.locator));\n        cellrender.addCellRenderer(CellType.RowDragHIcon, new RowDragDropHeaderRenderer(this.parent, this.locator));\n        cellrender.addCellRenderer(CellType.DetailExpand, new DetailExpandCellRenderer(this.parent, this.locator));\n        cellrender.addCellRenderer(CellType.DetailFooterIntent, new IndentCellRenderer(this.parent, this.locator));\n        cellrender.addCellRenderer(CellType.RowDragIcon, new RowDragDropRenderer(this.parent, this.locator));\n    };\n    Render.prototype.addEventListener = function () {\n        var _this = this;\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.on(events.initialLoad, this.instantiateRenderer, this);\n        this.parent.on('refreshdataSource', this.dataManagerSuccess, this);\n        this.parent.on(events.modelChanged, this.refresh, this);\n        this.parent.on(events.refreshComplete, this.refreshComplete, this);\n        this.parent.on(events.bulkSave, this.sendBulkRequest, this);\n        this.parent.on(events.showEmptyGrid, function () { _this.emptyGrid = true; }, this);\n        this.parent.on(events.autoCol, this.dynamicColumnChange, this);\n    };\n    /**\n     * @param {ReturnType} e - specifies the Return type\n     * @returns {Promise<Object>} returns the object\n     * @hidden\n     */\n    Render.prototype.validateGroupRecords = function (e) {\n        var _this = this;\n        var index = e.result.length - 1;\n        if (index < 0) {\n            return Promise.resolve(e);\n        }\n        var group0 = e.result[0];\n        var groupN = e.result[parseInt(index.toString(), 10)];\n        var predicate = [];\n        var addWhere = function (input) {\n            var groups = [group0, groupN];\n            for (var i = 0; i < groups.length; i++) {\n                predicate.push(new Predicate('field', '==', groups[parseInt(i.toString(), 10)].field).and(_this.getPredicate('key', 'equal', groups[parseInt(i.toString(), 10)].key)));\n            }\n            input.where(Predicate.or(predicate));\n        };\n        var query = new Query();\n        addWhere(query);\n        var curDm = new DataManager(e.result);\n        var curFilter = curDm.executeLocal(query);\n        var newQuery = this.data.generateQuery(true);\n        var rPredicate = [];\n        if (this.data.isRemote()) {\n            var groups = [group0, groupN];\n            for (var i = 0; i < groups.length; i++) {\n                rPredicate.push(this.getPredicate(groups[parseInt(i.toString(), 10)].field, 'equal', groups[parseInt(i.toString(), 10)].key));\n            }\n            newQuery.where(Predicate.or(rPredicate));\n        }\n        else {\n            addWhere(newQuery);\n        }\n        var deferred = new Deferred();\n        this.data.getData({}, newQuery).then(function (r) {\n            _this.updateGroupInfo(curFilter, r.result);\n            deferred.resolve(e);\n        }).catch(function (e) { return deferred.reject(e); });\n        return deferred.promise;\n    };\n    Render.prototype.getPredicate = function (key, operator, value) {\n        if (value instanceof Date) {\n            return getDatePredicate({ field: key, operator: operator, value: value });\n        }\n        return new Predicate(key, operator, value);\n    };\n    Render.prototype.updateGroupInfo = function (current, untouched) {\n        var dm = new DataManager(untouched);\n        var elements = current;\n        for (var i = 0; i < elements.length; i++) {\n            var uGroup = dm.executeLocal(new Query()\n                .where(new Predicate('field', '==', elements[parseInt(i.toString(), 10)].field).and(this.getPredicate('key', 'equal', elements[parseInt(i.toString(), 10)].key))))[0];\n            elements[parseInt(i.toString(), 10)].count = uGroup.count;\n            var itemGroup = elements[parseInt(i.toString(), 10)].items;\n            var uGroupItem = uGroup.items;\n            if (itemGroup.GroupGuid) {\n                elements[parseInt(i.toString(), 10)].items =\n                    this.updateGroupInfo(elements[parseInt(i.toString(), 10)].items, uGroup.items);\n            }\n            var rows = this.parent.aggregates;\n            for (var j = 0; j < rows.length; j++) {\n                var row = rows[parseInt(j.toString(), 10)];\n                for (var k = 0; k < row.columns.length; k++) {\n                    var types = row.columns[parseInt(k.toString(), 10)].type instanceof Array ?\n                        (row.columns[parseInt(k.toString(), 10)].type) :\n                        [(row.columns[parseInt(k.toString(), 10)].type)];\n                    for (var l = 0; l < types.length; l++) {\n                        var key = row.columns[parseInt(k.toString(), 10)].field + ' - ' + types[parseInt(l.toString(), 10)].toLowerCase();\n                        var data = itemGroup.level ? uGroupItem.records : uGroup.items;\n                        var context = this.parent;\n                        if (types[parseInt(l.toString(), 10)] === 'Custom') {\n                            var data_1 = itemGroup.level ? uGroupItem : uGroup;\n                            var temp = row.columns[parseInt(k.toString(), 10)]\n                                .customAggregate;\n                            if (typeof temp === 'string') {\n                                temp = getValue(temp, window);\n                            }\n                            elements[parseInt(i.toString(), 10)].aggregates[\"\" + key] = temp ? temp.call(context, data_1, row.columns[parseInt(k.toString(), 10)]) : '';\n                        }\n                        else {\n                            elements[parseInt(i.toString(), 10)].aggregates[\"\" + key] = DataUtil.aggregates[types[parseInt(l.toString(), 10)].toLowerCase()](data, row.columns[parseInt(k.toString(), 10)].field);\n                        }\n                    }\n                }\n            }\n        }\n        return current;\n    };\n    return Render;\n}());\nexport { Render };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\n/**\n * CellRendererFactory\n *\n * @hidden\n */\nvar CellRendererFactory = /** @class */ (function () {\n    function CellRendererFactory() {\n        this.cellRenderMap = {};\n    }\n    CellRendererFactory.prototype.addCellRenderer = function (name, type) {\n        name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n        if (isNullOrUndefined(this.cellRenderMap[\"\" + name])) {\n            this.cellRenderMap[\"\" + name] = type;\n        }\n    };\n    CellRendererFactory.prototype.getCellRenderer = function (name) {\n        name = typeof name === 'string' ? name : getEnumValue(CellType, name);\n        if (isNullOrUndefined(this.cellRenderMap[\"\" + name])) {\n            // eslint-disable-next-line no-throw-literal\n            throw \"The cellRenderer \" + name + \" is not found\";\n        }\n        else {\n            return this.cellRenderMap[\"\" + name];\n        }\n    };\n    return CellRendererFactory;\n}());\nexport { CellRendererFactory };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ResponsiveDialogRenderer } from '../renderer/responsive-dialog-renderer';\n/**\n * ServiceLocator\n *\n * @hidden\n */\nvar ServiceLocator = /** @class */ (function () {\n    function ServiceLocator() {\n        this.services = {};\n    }\n    ServiceLocator.prototype.register = function (name, type) {\n        if (isNullOrUndefined(this.services[\"\" + name])) {\n            this.services[\"\" + name] = type;\n        }\n    };\n    ServiceLocator.prototype.getService = function (name) {\n        if (isNullOrUndefined(this.services[\"\" + name])) {\n            // eslint-disable-next-line no-throw-literal\n            throw \"The service \" + name + \" is not registered\";\n        }\n        return this.services[\"\" + name];\n    };\n    ServiceLocator.prototype.registerAdaptiveService = function (type, isAdaptiveUI, action) {\n        if (isAdaptiveUI) {\n            type.responsiveDialogRenderer = new ResponsiveDialogRenderer(type.parent, type.serviceLocator);\n            type.responsiveDialogRenderer.action = action;\n        }\n        else {\n            if (type.responsiveDialogRenderer) {\n                type.responsiveDialogRenderer.removeEventListener();\n                type.responsiveDialogRenderer = undefined;\n            }\n        }\n    };\n    return ServiceLocator;\n}());\nexport { ServiceLocator };\n","import { isNullOrUndefined, getEnumValue } from '@syncfusion/ej2-base';\nimport { RenderType } from '../base/enum';\n/**\n * RendererFactory\n *\n * @hidden\n */\nvar RendererFactory = /** @class */ (function () {\n    function RendererFactory() {\n        this.rendererMap = {};\n    }\n    RendererFactory.prototype.addRenderer = function (name, type) {\n        var rName = getEnumValue(RenderType, name);\n        if (isNullOrUndefined(this.rendererMap[\"\" + rName])) {\n            this.rendererMap[\"\" + rName] = type;\n        }\n    };\n    RendererFactory.prototype.getRenderer = function (name) {\n        var rName = getEnumValue(RenderType, name);\n        if (isNullOrUndefined(this.rendererMap[\"\" + rName])) {\n            // eslint-disable-next-line no-throw-literal\n            throw \"The renderer \" + rName + \" is not found\";\n        }\n        else {\n            return this.rendererMap[\"\" + rName];\n        }\n    };\n    return RendererFactory;\n}());\nexport { RendererFactory };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the paging behavior of the Grid.\n */\nvar PageSettings = /** @class */ (function (_super) {\n    __extends(PageSettings, _super);\n    function PageSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(12)\n    ], PageSettings.prototype, \"pageSize\", void 0);\n    __decorate([\n        Property(8)\n    ], PageSettings.prototype, \"pageCount\", void 0);\n    __decorate([\n        Property(1)\n    ], PageSettings.prototype, \"currentPage\", void 0);\n    __decorate([\n        Property()\n    ], PageSettings.prototype, \"totalRecordsCount\", void 0);\n    __decorate([\n        Property(false)\n    ], PageSettings.prototype, \"enableQueryString\", void 0);\n    __decorate([\n        Property(false)\n    ], PageSettings.prototype, \"pageSizes\", void 0);\n    __decorate([\n        Property(null)\n    ], PageSettings.prototype, \"template\", void 0);\n    return PageSettings;\n}(ChildProperty));\nexport { PageSettings };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the column chooser behavior of the Grid.\n */\nvar ColumnChooserSettings = /** @class */ (function (_super) {\n    __extends(ColumnChooserSettings, _super);\n    function ColumnChooserSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('startsWith')\n    ], ColumnChooserSettings.prototype, \"operator\", void 0);\n    __decorate([\n        Property(false)\n    ], ColumnChooserSettings.prototype, \"ignoreAccent\", void 0);\n    return ColumnChooserSettings;\n}(ChildProperty));\nexport { ColumnChooserSettings };\n","import { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { isActionPrevent } from '../base/util';\n/**\n * The `Search` module is used to handle search action.\n */\nvar Search = /** @class */ (function () {\n    /**\n     * Constructor for Grid search module.\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @hidden\n     */\n    function Search(parent) {\n        this.parent = parent;\n        this.addEventListener();\n    }\n    /**\n     * Searches Grid records by given key.\n     *\n     * > You can customize the default search action by using [`searchSettings`](./searchsettings/).\n     *\n     * @param  {string} searchString - Defines the key.\n     * @returns {void}\n     */\n    Search.prototype.search = function (searchString) {\n        var gObj = this.parent;\n        searchString = isNullOrUndefined(searchString) ? '' : searchString;\n        if (isActionPrevent(gObj)) {\n            gObj.notify(events.preventBatch, { instance: this, handler: this.search, arg1: searchString });\n            return;\n        }\n        if (searchString !== gObj.searchSettings.key) {\n            // Check searchString is decimal or integer and parseFloat to remove trailing zeros\n            /* eslint-disable-next-line */\n            gObj.searchSettings.key = /^\\d+(\\.\\d+)?$/.test(searchString) ? parseFloat(searchString).toString() : searchString.toString();\n            gObj.dataBind();\n        }\n        else if (this.refreshSearch) {\n            gObj.refresh();\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Search.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.on(events.inBoundModelChanged, this.onPropertyChanged, this);\n        this.parent.on(events.searchComplete, this.onSearchComplete, this);\n        this.parent.on(events.destroy, this.destroy, this);\n        this.actionCompleteFunc = this.onActionComplete.bind(this);\n        this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n        this.parent.on(events.cancelBegin, this.cancelBeginEvent, this);\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Search.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.off(events.inBoundModelChanged, this.onPropertyChanged);\n        this.parent.off(events.searchComplete, this.onSearchComplete);\n        this.parent.off(events.destroy, this.destroy);\n        this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunc);\n        this.parent.off(events.cancelBegin, this.cancelBeginEvent);\n    };\n    /**\n     * To destroy the print\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Search.prototype.destroy = function () {\n        this.removeEventListener();\n    };\n    /**\n     * @param {NotifyArgs} e - specfies the NotifyArgs\n     * @returns {void}\n     * @hidden\n     */\n    Search.prototype.onPropertyChanged = function (e) {\n        if (e.module !== this.getModuleName()) {\n            return;\n        }\n        if (!isNullOrUndefined(e.properties.key)) {\n            this.parent.notify(events.modelChanged, {\n                requestType: 'searching', type: events.actionBegin, searchString: this.parent.searchSettings.key\n            });\n        }\n        else {\n            this.parent.notify(events.modelChanged, {\n                requestType: 'searching', type: events.actionBegin\n            });\n        }\n    };\n    /**\n     * The function used to trigger onActionComplete\n     *\n     * @param {NotifyArgs} e - specifies the NotifyArgs\n     * @returns {void}\n     * @hidden\n     */\n    Search.prototype.onSearchComplete = function (e) {\n        this.parent.trigger(events.actionComplete, extend(e, {\n            searchString: this.parent.searchSettings.key, requestType: 'searching', type: events.actionComplete\n        }));\n    };\n    /**\n     * The function used to store the requestType\n     *\n     * @param {NotifyArgs} e - specifies the NotifyArgs\n     * @returns {void}\n     * @hidden\n     */\n    Search.prototype.onActionComplete = function (e) {\n        this.refreshSearch = e.requestType !== 'searching';\n    };\n    Search.prototype.cancelBeginEvent = function (e) {\n        if (e.requestType === 'searching') {\n            this.parent.setProperties({ searchSettings: { key: '' } }, true);\n        }\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    Search.prototype.getModuleName = function () {\n        return 'search';\n    };\n    return Search;\n}());\nexport { Search };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject, isGroupAdaptive, isActionPrevent, addRemoveEventListener } from '../base/util';\nimport * as events from '../base/constant';\n/**\n * The `ShowHide` module is used to control column visibility.\n */\nvar ShowHide = /** @class */ (function () {\n    /**\n     * Constructor for the show hide module.\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @hidden\n     */\n    function ShowHide(parent) {\n        this.colName = [];\n        this.isShowHide = false;\n        this.parent = parent;\n        this.addEventListener();\n    }\n    ShowHide.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.evtHandlers = [{ event: events.batchCancel, handler: this.batchChanges },\n            { event: events.batchCnfrmDlgCancel, handler: this.resetColumnState }\n        ];\n        addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    ShowHide.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        addRemoveEventListener(this.parent, this.evtHandlers, false);\n    };\n    ShowHide.prototype.batchChanges = function () {\n        if (this.isShowHide) {\n            this.isShowHide = false;\n            this.setVisible(this.colName, this.changedCol);\n            this.changedCol = this.colName = [];\n        }\n    };\n    /**\n     * Shows a column by column name.\n     *\n     * @param  {string|string[]} columnName - Defines a single or collection of column names to show.\n     * @param  {string} showBy - Defines the column key either as field name or header text.\n     * @returns {void}\n     */\n    ShowHide.prototype.show = function (columnName, showBy) {\n        var keys = this.getToggleFields(columnName);\n        var columns = this.getColumns(keys, showBy);\n        this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n        for (var i = 0; i < columns.length; i++) {\n            columns[parseInt(i.toString(), 10)].visible = true;\n        }\n        this.setVisible(columns);\n    };\n    /**\n     * Hides a column by column name.\n     *\n     * @param  {string|string[]} columnName - Defines a single or collection of column names to hide.\n     * @param  {string} hideBy - Defines the column key either as field name or header text.\n     * @returns {void}\n     */\n    ShowHide.prototype.hide = function (columnName, hideBy) {\n        var keys = this.getToggleFields(columnName);\n        var columns = this.getColumns(keys, hideBy);\n        this.parent.notify(events.tooltipDestroy, { module: 'edit' });\n        for (var i = 0; i < columns.length; i++) {\n            columns[parseInt(i.toString(), 10)].visible = false;\n        }\n        this.setVisible(columns);\n    };\n    ShowHide.prototype.getToggleFields = function (key) {\n        var finalized = [];\n        if (typeof key === 'string') {\n            finalized = [key];\n        }\n        else {\n            finalized = key;\n        }\n        return finalized;\n    };\n    ShowHide.prototype.getColumns = function (keys, getKeyBy) {\n        var _this = this;\n        var columns = iterateArrayOrObject(keys, function (key) {\n            return iterateArrayOrObject(_this.parent.columnModel, function (item) {\n                if (item[\"\" + getKeyBy] === key) {\n                    return item;\n                }\n                return undefined;\n            })[0];\n        });\n        return columns;\n    };\n    ShowHide.prototype.batchActionPrevent = function (columns, changedStateColumns) {\n        if (changedStateColumns === void 0) { changedStateColumns = []; }\n        if (isActionPrevent(this.parent)) {\n            this.colName = columns;\n            this.changedCol = changedStateColumns;\n            this.parent.closeEdit();\n            return false;\n        }\n        return true;\n    };\n    ShowHide.prototype.resetColumnState = function () {\n        if (this.isShowHide) {\n            for (var i = 0; i < this.colName.length; i++) {\n                this.colName[parseInt(i.toString(), 10)].visible = !this.colName[parseInt(i.toString(), 10)].visible;\n            }\n        }\n    };\n    /**\n     * Shows or hides columns by given column collection.\n     *\n     * @private\n     * @param {Column[]} columns - Specifies the columns.\n     * @param {Column[]} changedStateColumns - specifies the changedStateColumns\n     * @returns {void}\n     */\n    ShowHide.prototype.setVisible = function (columns, changedStateColumns) {\n        var _this = this;\n        if (changedStateColumns === void 0) { changedStateColumns = []; }\n        this.isShowHide = true;\n        if (!this.batchActionPrevent(columns, changedStateColumns)) {\n            return;\n        }\n        changedStateColumns = (changedStateColumns.length > 0) ? changedStateColumns : columns;\n        var args = {\n            requestType: 'columnstate',\n            cancel: false,\n            columns: changedStateColumns\n        };\n        var cancel = 'cancel';\n        if (this.parent.enableInfiniteScrolling && this.parent.allowGrouping\n            && this.parent.groupModule.groupSettings.columns.length > 0) {\n            this.parent.contentModule.visibleRows = [];\n        }\n        this.parent.trigger(events.actionBegin, args, function (showHideArgs) {\n            var currentViewCols = _this.parent.getColumns();\n            columns = isNullOrUndefined(columns) ? currentViewCols : columns;\n            if (showHideArgs[\"\" + cancel]) {\n                _this.parent.notify(events.resetColumns, { showHideArgs: showHideArgs });\n                if (columns.length > 0) {\n                    columns[0].visible = true;\n                }\n                return;\n            }\n            if (isGroupAdaptive(_this.parent)) {\n                _this.parent.contentModule.emptyVcRows();\n            }\n            if (_this.parent.allowSelection && _this.parent.getSelectedRecords().length &&\n                !_this.parent.selectionSettings.persistSelection) {\n                _this.parent.clearSelection();\n            }\n            if (_this.parent.enableColumnVirtualization) {\n                var colsInCurrentView = columns.filter(function (col1) { return (currentViewCols.some(function (col2) { return col1.field === col2.field; })); });\n                if (colsInCurrentView.length) {\n                    _this.parent.notify(events.columnVisibilityChanged, columns);\n                }\n            }\n            else {\n                if (_this.parent.isFrozenGrid() && columns.length) {\n                    _this.parent.notify(events.refreshFrozenPosition, { isModeChg: true });\n                }\n                _this.parent.notify(events.columnVisibilityChanged, columns);\n            }\n            var params = {\n                requestType: 'columnstate',\n                columns: changedStateColumns\n            };\n            _this.parent.trigger(events.actionComplete, params);\n            if (_this.parent.columnQueryMode !== 'All') {\n                _this.parent.refresh();\n            }\n        });\n        if (this.parent.autoFit && !this.parent.groupSettings.columns.length) {\n            this.parent.preventAdjustColumns();\n        }\n    };\n    return ShowHide;\n}());\nexport { ShowHide };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { compile } from '@syncfusion/ej2-base';\nimport { getEnumValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { Property, Collection, ChildProperty } from '@syncfusion/ej2-base';\n/**\n * Configures the Grid's aggregate column.\n */\nvar AggregateColumn = /** @class */ (function (_super) {\n    __extends(AggregateColumn, _super);\n    function AggregateColumn() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.templateFn = {};\n        return _this;\n    }\n    /**\n     * @param {Function} value - specifies the value\n     * @returns {void}\n     * @hidden\n     */\n    AggregateColumn.prototype.setFormatter = function (value) {\n        this.formatFn = value;\n    };\n    /**\n     * @returns {Function} returns the Function\n     * @hidden\n     */\n    AggregateColumn.prototype.getFormatter = function () {\n        return this.formatFn;\n    };\n    /**\n     * @param {Object} helper - specifies the helper\n     * @returns {void}\n     * @hidden\n     */\n    AggregateColumn.prototype.setTemplate = function (helper) {\n        if (helper === void 0) { helper = {}; }\n        if (this.footerTemplate !== undefined) {\n            this.templateFn[getEnumValue(CellType, CellType.Summary)] = { fn: compile(this.footerTemplate, helper),\n                property: 'footerTemplate' };\n        }\n        if (this.groupFooterTemplate !== undefined) {\n            this.templateFn[getEnumValue(CellType, CellType.GroupSummary)] = { fn: compile(this.groupFooterTemplate, helper),\n                property: 'groupFooterTemplate' };\n        }\n        if (this.groupCaptionTemplate !== undefined) {\n            this.templateFn[getEnumValue(CellType, CellType.CaptionSummary)] = { fn: compile(this.groupCaptionTemplate, helper),\n                property: 'groupCaptionTemplate' };\n        }\n    };\n    /**\n     * @param {CellType} type - specifies the cell type\n     * @returns {Object} returns the object\n     * @hidden\n     */\n    AggregateColumn.prototype.getTemplate = function (type) {\n        return this.templateFn[getEnumValue(CellType, type)];\n    };\n    /**\n     * @param {Object} prop - returns the Object\n     * @returns {void}\n     * @hidden\n     */\n    AggregateColumn.prototype.setPropertiesSilent = function (prop) {\n        this.setProperties(prop, true);\n    };\n    __decorate([\n        Property()\n    ], AggregateColumn.prototype, \"type\", void 0);\n    __decorate([\n        Property()\n    ], AggregateColumn.prototype, \"field\", void 0);\n    __decorate([\n        Property()\n    ], AggregateColumn.prototype, \"columnName\", void 0);\n    __decorate([\n        Property()\n    ], AggregateColumn.prototype, \"format\", void 0);\n    __decorate([\n        Property()\n    ], AggregateColumn.prototype, \"footerTemplate\", void 0);\n    __decorate([\n        Property()\n    ], AggregateColumn.prototype, \"groupFooterTemplate\", void 0);\n    __decorate([\n        Property()\n    ], AggregateColumn.prototype, \"groupCaptionTemplate\", void 0);\n    __decorate([\n        Property()\n    ], AggregateColumn.prototype, \"customAggregate\", void 0);\n    return AggregateColumn;\n}(ChildProperty));\nexport { AggregateColumn };\n/**\n * Configures the aggregate rows.\n */\nvar AggregateRow = /** @class */ (function (_super) {\n    __extends(AggregateRow, _super);\n    function AggregateRow() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Collection([], AggregateColumn)\n    ], AggregateRow.prototype, \"columns\", void 0);\n    return AggregateRow;\n}(ChildProperty));\nexport { AggregateRow };\n","import { Browser, remove, EventHandler, isUndefined, closest, classList } from '@syncfusion/ej2-base';\nimport { parentsUntil, isGroupAdaptive } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * The `Clipboard` module is used to handle clipboard copy action.\n */\nvar Clipboard = /** @class */ (function () {\n    /**\n     * Constructor for the Grid clipboard module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n     * @hidden\n     */\n    function Clipboard(parent, serviceLocator) {\n        this.copyContent = '';\n        this.isSelect = false;\n        this.parent = parent;\n        this.serviceLocator = serviceLocator;\n        this.addEventListener();\n    }\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Clipboard.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.on(events.contentReady, this.initialEnd, this);\n        this.parent.on(events.keyPressed, this.keyDownHandler, this);\n        this.parent.on(events.click, this.clickHandler, this);\n        this.parent.on(events.onEmpty, this.initialEnd, this);\n        EventHandler.add(this.parent.element, 'keydown', this.pasteHandler, this);\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Clipboard.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.off(events.keyPressed, this.keyDownHandler);\n        this.parent.off(events.contentReady, this.initialEnd);\n        this.parent.off(events.click, this.clickHandler);\n        this.parent.off(events.onEmpty, this.initialEnd);\n        EventHandler.remove(this.parent.element, 'keydown', this.pasteHandler);\n    };\n    Clipboard.prototype.clickHandler = function (e) {\n        var target = e.target;\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        target = parentsUntil(target, 'e-rowcell');\n    };\n    Clipboard.prototype.pasteHandler = function (e) {\n        var _this = this;\n        var grid = this.parent;\n        var isMacLike = /(Mac)/i.test(navigator.platform);\n        var selectedRowCellIndexes = this.parent.getSelectedRowCellIndexes();\n        if (e.keyCode === 67 && isMacLike && e.metaKey && !grid.isEdit) {\n            this.copy();\n        }\n        if (selectedRowCellIndexes.length && e.keyCode === 86 && ((!isMacLike && e.ctrlKey) || (isMacLike && e.metaKey)) && !grid.isEdit) {\n            var target = closest(document.activeElement, '.' + literals.rowCell);\n            if (!this.clipBoardTextArea || !target || !grid.editSettings.allowEditing || grid.editSettings.mode !== 'Batch' ||\n                grid.selectionSettings.mode !== 'Cell' || grid.selectionSettings.cellSelectionMode === 'Flow') {\n                return;\n            }\n            this.activeElement = document.activeElement;\n            var x_1 = window.scrollX;\n            var y_1 = window.scrollY;\n            this.clipBoardTextArea.focus();\n            setTimeout(function () {\n                _this.activeElement.focus();\n                window.scrollTo(x_1, y_1);\n                _this.paste(_this.clipBoardTextArea.value, selectedRowCellIndexes[0].rowIndex, selectedRowCellIndexes[0].cellIndexes[0]);\n            }, isMacLike ? 100 : 10);\n        }\n    };\n    /**\n     * Paste data from clipboard to selected cells.\n     *\n     * @param {boolean} data - Specifies the date for paste.\n     * @param {boolean} rowIndex - Specifies the row index.\n     * @param {boolean} colIndex - Specifies the column index.\n     * @returns {void}\n     */\n    Clipboard.prototype.paste = function (data, rowIndex, colIndex) {\n        var grid = this.parent;\n        var cIdx = colIndex;\n        var rIdx = rowIndex;\n        var col;\n        var value;\n        var isAvail;\n        var rows = data.split('\\n');\n        var cols;\n        for (var r = 0; r < rows.length; r++) {\n            cols = rows[parseInt(r.toString(), 10)].split('\\t');\n            cIdx = colIndex;\n            if ((r === rows.length - 1 && rows[parseInt(r.toString(), 10)] === '') || isUndefined(grid.getRowByIndex(rIdx))) {\n                cIdx++;\n                break;\n            }\n            for (var c = 0; c < cols.length; c++) {\n                isAvail = grid.getCellFromIndex(rIdx, cIdx);\n                if (!isAvail) {\n                    cIdx++;\n                    break;\n                }\n                col = grid.getColumnByIndex(cIdx);\n                value = col.getParser() ? col.getParser()(cols[parseInt(c.toString(), 10)]) : cols[parseInt(c.toString(), 10)];\n                if (col.allowEditing && !col.isPrimaryKey && !col.template) {\n                    var args = {\n                        column: col,\n                        data: value,\n                        rowIndex: rIdx\n                    };\n                    this.parent.trigger(events.beforePaste, args);\n                    rIdx = args.rowIndex;\n                    if (!args.cancel) {\n                        if (grid.editModule) {\n                            if (col.type === 'number') {\n                                this.parent.editModule.updateCell(rIdx, col.field, parseFloat(args.data));\n                            }\n                            else {\n                                grid.editModule.updateCell(rIdx, col.field, args.data);\n                            }\n                        }\n                    }\n                }\n                cIdx++;\n            }\n            rIdx++;\n        }\n        grid.selectionModule.selectCellsByRange({ rowIndex: rowIndex, cellIndex: colIndex }, { rowIndex: rIdx - 1, cellIndex: cIdx - 1 });\n        var cell = this.parent.getCellFromIndex(rIdx - 1, cIdx - 1);\n        if (cell) {\n            classList(cell, ['e-focus', 'e-focused'], []);\n        }\n        this.clipBoardTextArea.value = '';\n    };\n    Clipboard.prototype.initialEnd = function () {\n        this.l10n = this.serviceLocator.getService('localization');\n        this.parent.off(events.contentReady, this.initialEnd);\n        this.clipBoardTextArea = this.parent.createElement('textarea', {\n            className: 'e-clipboard',\n            styles: 'opacity: 0',\n            attrs: { tabindex: '-1', 'aria-label': this.l10n.getConstant('ClipBoard') }\n        });\n        this.parent.element.appendChild(this.clipBoardTextArea);\n    };\n    Clipboard.prototype.keyDownHandler = function (e) {\n        if (e.action === 'ctrlPlusC') {\n            this.copy();\n        }\n        else if (e.action === 'ctrlShiftPlusH') {\n            this.copy(true);\n        }\n    };\n    Clipboard.prototype.setCopyData = function (withHeader) {\n        if (window.getSelection().toString() === '') {\n            this.clipBoardTextArea.value = this.copyContent = '';\n            var rows = this.parent.getDataRows();\n            if (this.parent.selectionSettings.mode !== 'Cell') {\n                var selectedIndexes = this.parent.getSelectedRowIndexes().sort(function (a, b) { return a - b; });\n                if (withHeader) {\n                    var headerTextArray = [];\n                    for (var i = 0; i < this.parent.getVisibleColumns().length; i++) {\n                        headerTextArray[parseInt(i.toString(), 10)] = this.parent\n                            .getVisibleColumns()[parseInt(i.toString(), 10)].headerText;\n                    }\n                    this.getCopyData(headerTextArray, false, '\\t', withHeader);\n                    this.copyContent += '\\n';\n                }\n                for (var i = 0; i < selectedIndexes.length; i++) {\n                    if (i > 0) {\n                        this.copyContent += '\\n';\n                    }\n                    var leftCols = [];\n                    var idx = selectedIndexes[parseInt(i.toString(), 10)];\n                    if (!isGroupAdaptive(this.parent) && (this.parent.enableVirtualization ||\n                        (this.parent.enableInfiniteScrolling && this.parent.infiniteScrollSettings.enableCache) ||\n                        (this.parent.groupSettings.columns.length && this.parent.groupSettings.enableLazyLoading))) {\n                        idx = rows.map(function (m) { return m.getAttribute('data-rowindex'); }).indexOf(selectedIndexes[parseInt(i.toString(), 10)].toString());\n                    }\n                    leftCols.push.apply(leftCols, [].slice.call(rows[parseInt(idx.toString(), 10)].querySelectorAll('.e-rowcell:not(.e-hide)')));\n                    this.getCopyData(leftCols, false, '\\t', withHeader);\n                }\n            }\n            else {\n                var obj = this.checkBoxSelection();\n                if (obj.status) {\n                    if (withHeader) {\n                        var headers = [];\n                        for (var i = 0; i < obj.colIndexes.length; i++) {\n                            var colHeader = this.parent.getColumnHeaderByIndex(obj.colIndexes[parseInt(i.toString(), 10)]);\n                            if (!colHeader.classList.contains('e-hide')) {\n                                headers.push(colHeader);\n                            }\n                        }\n                        this.getCopyData(headers, false, '\\t', withHeader);\n                        this.copyContent += '\\n';\n                    }\n                    for (var i = 0; i < obj.rowIndexes.length; i++) {\n                        if (i > 0) {\n                            this.copyContent += '\\n';\n                        }\n                        var cells = [].slice.call(rows[obj.rowIndexes[parseInt(i.toString(), 10)]].\n                            querySelectorAll('.e-cellselectionbackground:not(.e-hide)'));\n                        this.getCopyData(cells, false, '\\t', withHeader);\n                    }\n                }\n                else {\n                    this.getCopyData([].slice.call(this.parent.element.getElementsByClassName('e-cellselectionbackground')), true, '\\n', withHeader);\n                }\n            }\n            var args = {\n                data: this.copyContent,\n                cancel: false\n            };\n            this.parent.trigger(events.beforeCopy, args);\n            if (args.cancel) {\n                return;\n            }\n            this.clipBoardTextArea.value = this.copyContent = args.data;\n            if (!Browser.userAgent.match(/ipad|ipod|iphone/i)) {\n                this.clipBoardTextArea.select();\n            }\n            else {\n                this.clipBoardTextArea.setSelectionRange(0, this.clipBoardTextArea.value.length);\n            }\n            this.isSelect = true;\n        }\n    };\n    Clipboard.prototype.getCopyData = function (cells, isCell, splitKey, withHeader) {\n        var isElement = typeof cells[0] !== 'string';\n        for (var j = 0; j < cells.length; j++) {\n            if (withHeader && isCell) {\n                var colIdx = parseInt(cells[parseInt(j.toString(), 10)].getAttribute(literals.dataColIndex), 10);\n                this.copyContent += this.parent.getColumns()[parseInt(colIdx.toString(), 10)].headerText + '\\n';\n            }\n            if (isElement) {\n                if (!cells[parseInt(j.toString(), 10)].classList.contains('e-hide')) {\n                    this.copyContent += cells[parseInt(j.toString(), 10)].innerText;\n                }\n            }\n            else {\n                this.copyContent += cells[parseInt(j.toString(), 10)];\n            }\n            if (j < cells.length - 1) {\n                this.copyContent += splitKey;\n            }\n        }\n    };\n    /**\n     * Copy selected rows or cells data into clipboard.\n     *\n     * @returns {void}\n     * @param {boolean} withHeader - Specifies whether the column header data need to be copied or not.\n     */\n    Clipboard.prototype.copy = function (withHeader) {\n        if (document.queryCommandSupported('copy') && this.clipBoardTextArea) {\n            this.setCopyData(withHeader);\n            document.execCommand('copy');\n            this.clipBoardTextArea.blur();\n        }\n        if (this.isSelect) {\n            window.getSelection().removeAllRanges();\n            this.isSelect = false;\n        }\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    Clipboard.prototype.getModuleName = function () {\n        return 'clipboard';\n    };\n    /**\n     * To destroy the clipboard\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Clipboard.prototype.destroy = function () {\n        this.removeEventListener();\n        if (this.clipBoardTextArea) {\n            remove(this.clipBoardTextArea);\n        }\n    };\n    Clipboard.prototype.checkBoxSelection = function () {\n        var gridObj = this.parent;\n        var obj = { status: false };\n        if (gridObj.selectionSettings.mode === 'Cell') {\n            var rowCellIndxes = gridObj.getSelectedRowCellIndexes();\n            var str = void 0;\n            var rowIndexes = [];\n            var i = void 0;\n            for (i = 0; i < rowCellIndxes.length; i++) {\n                if (rowCellIndxes[parseInt(i.toString(), 10)].cellIndexes.length) {\n                    rowIndexes.push(rowCellIndxes[parseInt(i.toString(), 10)].rowIndex);\n                }\n                if (rowCellIndxes[parseInt(i.toString(), 10)].cellIndexes.length) {\n                    if (!str) {\n                        str = JSON.stringify(rowCellIndxes[parseInt(i.toString(), 10)].cellIndexes.sort());\n                    }\n                    if (str !== JSON.stringify(rowCellIndxes[parseInt(i.toString(), 10)].cellIndexes.sort())) {\n                        break;\n                    }\n                }\n            }\n            rowIndexes.sort(function (a, b) { return a - b; });\n            if (i === rowCellIndxes.length) {\n                obj = { status: true, rowIndexes: rowIndexes, colIndexes: rowCellIndxes[0].cellIndexes };\n            }\n        }\n        return obj;\n    };\n    return Clipboard;\n}());\nexport { Clipboard };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { isNullOrUndefined, setValue, getValue, defaultCurrencyCode } from '@syncfusion/ej2-base';\nimport { Component, ChildProperty, Browser, closest, extend } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, append, remove, classList, setStyleAttribute } from '@syncfusion/ej2-base';\nimport { Property, Collection, Complex, Event, NotifyPropertyChanges, L10n } from '@syncfusion/ej2-base';\nimport { EventHandler, KeyboardEvents } from '@syncfusion/ej2-base';\nimport { DataManager, DataUtil, UrlAdaptor } from '@syncfusion/ej2-data';\nimport { createSpinner, hideSpinner, showSpinner, Tooltip } from '@syncfusion/ej2-popups';\nimport { iterateArrayOrObject, prepareColumns, parentsUntil, wrap, templateCompiler, isGroupAdaptive, refreshForeignData, getScrollBarWidth } from './util';\nimport { getRowHeight, setColumnIndex, Global, ispercentageWidth, getNumberFormat, getTransformValues } from './util';\nimport { setRowElements, resetRowIndex, compareChanges, getCellByColAndRowIndex, performComplexDataOperation } from './util';\nimport * as events from '../base/constant';\nimport { Render } from '../renderer/render';\nimport { Column } from '../models/column';\nimport { RenderType } from './enum';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { CellRendererFactory } from '../services/cell-render-factory';\nimport { ServiceLocator } from '../services/service-locator';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { RendererFactory } from '../services/renderer-factory';\nimport { ColumnWidthService } from '../services/width-controller';\nimport { AriaService } from '../services/aria-service';\nimport { FocusStrategy } from '../services/focus-strategy';\nimport { PageSettings } from '../models/page-settings';\nimport { ColumnChooserSettings } from '../models/column-chooser-settings';\nimport { Selection } from '../actions/selection';\nimport { Search } from '../actions/search';\nimport { ShowHide } from '../actions/show-hide';\nimport { Scroll } from '../actions/scroll';\nimport { Print } from '../actions/print';\nimport { AggregateRow } from '../models/aggregate';\nimport { Clipboard } from '../actions/clipboard';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport * as literals from '../base/string-literals';\nimport { HeaderCellRenderer } from '../renderer/header-cell-renderer';\n/**\n * Represents the field name and direction of sort column.\n */\nvar SortDescriptor = /** @class */ (function (_super) {\n    __extends(SortDescriptor, _super);\n    function SortDescriptor() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property()\n    ], SortDescriptor.prototype, \"field\", void 0);\n    __decorate([\n        Property()\n    ], SortDescriptor.prototype, \"direction\", void 0);\n    __decorate([\n        Property(false)\n    ], SortDescriptor.prototype, \"isFromGroup\", void 0);\n    return SortDescriptor;\n}(ChildProperty));\nexport { SortDescriptor };\n/**\n * Configures the sorting behavior of Grid.\n */\nvar SortSettings = /** @class */ (function (_super) {\n    __extends(SortSettings, _super);\n    function SortSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Collection([], SortDescriptor)\n    ], SortSettings.prototype, \"columns\", void 0);\n    __decorate([\n        Property(true)\n    ], SortSettings.prototype, \"allowUnsort\", void 0);\n    return SortSettings;\n}(ChildProperty));\nexport { SortSettings };\n/**\n * Represents the predicate for the filter column.\n */\nvar Predicate = /** @class */ (function (_super) {\n    __extends(Predicate, _super);\n    function Predicate() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property()\n    ], Predicate.prototype, \"field\", void 0);\n    __decorate([\n        Property()\n    ], Predicate.prototype, \"operator\", void 0);\n    __decorate([\n        Property()\n    ], Predicate.prototype, \"value\", void 0);\n    __decorate([\n        Property()\n    ], Predicate.prototype, \"matchCase\", void 0);\n    __decorate([\n        Property(false)\n    ], Predicate.prototype, \"ignoreAccent\", void 0);\n    __decorate([\n        Property()\n    ], Predicate.prototype, \"predicate\", void 0);\n    __decorate([\n        Property({})\n    ], Predicate.prototype, \"actualFilterValue\", void 0);\n    __decorate([\n        Property({})\n    ], Predicate.prototype, \"actualOperator\", void 0);\n    __decorate([\n        Property()\n    ], Predicate.prototype, \"type\", void 0);\n    __decorate([\n        Property()\n    ], Predicate.prototype, \"ejpredicate\", void 0);\n    __decorate([\n        Property()\n    ], Predicate.prototype, \"uid\", void 0);\n    __decorate([\n        Property()\n    ], Predicate.prototype, \"isForeignKey\", void 0);\n    __decorate([\n        Property()\n    ], Predicate.prototype, \"condition\", void 0);\n    return Predicate;\n}(ChildProperty));\nexport { Predicate };\n/**\n * Configures the infinite scroll behavior of Grid.\n */\nvar InfiniteScrollSettings = /** @class */ (function (_super) {\n    __extends(InfiniteScrollSettings, _super);\n    function InfiniteScrollSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(false)\n    ], InfiniteScrollSettings.prototype, \"enableCache\", void 0);\n    __decorate([\n        Property(3)\n    ], InfiniteScrollSettings.prototype, \"maxBlocks\", void 0);\n    __decorate([\n        Property(3)\n    ], InfiniteScrollSettings.prototype, \"initialBlocks\", void 0);\n    return InfiniteScrollSettings;\n}(ChildProperty));\nexport { InfiniteScrollSettings };\n/**\n * Configures the filtering behavior of the Grid.\n */\nvar FilterSettings = /** @class */ (function (_super) {\n    __extends(FilterSettings, _super);\n    function FilterSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Collection([], Predicate)\n    ], FilterSettings.prototype, \"columns\", void 0);\n    __decorate([\n        Property('FilterBar')\n    ], FilterSettings.prototype, \"type\", void 0);\n    __decorate([\n        Property('OnEnter')\n    ], FilterSettings.prototype, \"mode\", void 0);\n    __decorate([\n        Property(true)\n    ], FilterSettings.prototype, \"showFilterBarStatus\", void 0);\n    __decorate([\n        Property(1500)\n    ], FilterSettings.prototype, \"immediateModeDelay\", void 0);\n    __decorate([\n        Property()\n    ], FilterSettings.prototype, \"operators\", void 0);\n    __decorate([\n        Property(false)\n    ], FilterSettings.prototype, \"ignoreAccent\", void 0);\n    __decorate([\n        Property(false)\n    ], FilterSettings.prototype, \"enableInfiniteScrolling\", void 0);\n    __decorate([\n        Property(50)\n    ], FilterSettings.prototype, \"itemsCount\", void 0);\n    __decorate([\n        Property('Shimmer')\n    ], FilterSettings.prototype, \"loadingIndicator\", void 0);\n    __decorate([\n        Property(false)\n    ], FilterSettings.prototype, \"enableCaseSensitivity\", void 0);\n    __decorate([\n        Property(false)\n    ], FilterSettings.prototype, \"showFilterBarOperator\", void 0);\n    return FilterSettings;\n}(ChildProperty));\nexport { FilterSettings };\n/**\n * Configures the selection behavior of the Grid.\n */\nvar SelectionSettings = /** @class */ (function (_super) {\n    __extends(SelectionSettings, _super);\n    function SelectionSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('Row')\n    ], SelectionSettings.prototype, \"mode\", void 0);\n    __decorate([\n        Property('Flow')\n    ], SelectionSettings.prototype, \"cellSelectionMode\", void 0);\n    __decorate([\n        Property('Single')\n    ], SelectionSettings.prototype, \"type\", void 0);\n    __decorate([\n        Property(false)\n    ], SelectionSettings.prototype, \"checkboxOnly\", void 0);\n    __decorate([\n        Property(false)\n    ], SelectionSettings.prototype, \"persistSelection\", void 0);\n    __decorate([\n        Property('Default')\n    ], SelectionSettings.prototype, \"checkboxMode\", void 0);\n    __decorate([\n        Property(false)\n    ], SelectionSettings.prototype, \"enableSimpleMultiRowSelection\", void 0);\n    __decorate([\n        Property(true)\n    ], SelectionSettings.prototype, \"enableToggle\", void 0);\n    __decorate([\n        Property(false)\n    ], SelectionSettings.prototype, \"allowColumnSelection\", void 0);\n    return SelectionSettings;\n}(ChildProperty));\nexport { SelectionSettings };\n/**\n * Configures the search behavior of the Grid.\n */\nvar SearchSettings = /** @class */ (function (_super) {\n    __extends(SearchSettings, _super);\n    function SearchSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property([])\n    ], SearchSettings.prototype, \"fields\", void 0);\n    __decorate([\n        Property('')\n    ], SearchSettings.prototype, \"key\", void 0);\n    __decorate([\n        Property('contains')\n    ], SearchSettings.prototype, \"operator\", void 0);\n    __decorate([\n        Property(true)\n    ], SearchSettings.prototype, \"ignoreCase\", void 0);\n    __decorate([\n        Property(false)\n    ], SearchSettings.prototype, \"ignoreAccent\", void 0);\n    return SearchSettings;\n}(ChildProperty));\nexport { SearchSettings };\n/**\n * Configures the row drop settings of the Grid.\n */\nvar RowDropSettings = /** @class */ (function (_super) {\n    __extends(RowDropSettings, _super);\n    function RowDropSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property()\n    ], RowDropSettings.prototype, \"targetID\", void 0);\n    return RowDropSettings;\n}(ChildProperty));\nexport { RowDropSettings };\n/**\n * Configures the text wrap settings of the Grid.\n */\nvar TextWrapSettings = /** @class */ (function (_super) {\n    __extends(TextWrapSettings, _super);\n    function TextWrapSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('Both')\n    ], TextWrapSettings.prototype, \"wrapMode\", void 0);\n    return TextWrapSettings;\n}(ChildProperty));\nexport { TextWrapSettings };\n/**\n * Configures the resize behavior of the Grid.\n */\nvar ResizeSettings = /** @class */ (function (_super) {\n    __extends(ResizeSettings, _super);\n    function ResizeSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('Normal')\n    ], ResizeSettings.prototype, \"mode\", void 0);\n    return ResizeSettings;\n}(ChildProperty));\nexport { ResizeSettings };\n/**\n * Configures the group behavior of the Grid.\n */\nvar GroupSettings = /** @class */ (function (_super) {\n    __extends(GroupSettings, _super);\n    function GroupSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(true)\n    ], GroupSettings.prototype, \"showDropArea\", void 0);\n    __decorate([\n        Property(false)\n    ], GroupSettings.prototype, \"allowReordering\", void 0);\n    __decorate([\n        Property(false)\n    ], GroupSettings.prototype, \"showToggleButton\", void 0);\n    __decorate([\n        Property(false)\n    ], GroupSettings.prototype, \"showGroupedColumn\", void 0);\n    __decorate([\n        Property(true)\n    ], GroupSettings.prototype, \"showUngroupButton\", void 0);\n    __decorate([\n        Property(false)\n    ], GroupSettings.prototype, \"disablePageWiseAggregates\", void 0);\n    __decorate([\n        Property([])\n    ], GroupSettings.prototype, \"columns\", void 0);\n    __decorate([\n        Property()\n    ], GroupSettings.prototype, \"captionTemplate\", void 0);\n    __decorate([\n        Property(false)\n    ], GroupSettings.prototype, \"enableLazyLoading\", void 0);\n    return GroupSettings;\n}(ChildProperty));\nexport { GroupSettings };\n/**\n * Configures the edit behavior of the Grid.\n */\nvar EditSettings = /** @class */ (function (_super) {\n    __extends(EditSettings, _super);\n    function EditSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(false)\n    ], EditSettings.prototype, \"allowAdding\", void 0);\n    __decorate([\n        Property(false)\n    ], EditSettings.prototype, \"allowEditing\", void 0);\n    __decorate([\n        Property(false)\n    ], EditSettings.prototype, \"allowDeleting\", void 0);\n    __decorate([\n        Property('Normal')\n    ], EditSettings.prototype, \"mode\", void 0);\n    __decorate([\n        Property(true)\n    ], EditSettings.prototype, \"allowEditOnDblClick\", void 0);\n    __decorate([\n        Property(true)\n    ], EditSettings.prototype, \"showConfirmDialog\", void 0);\n    __decorate([\n        Property(false)\n    ], EditSettings.prototype, \"showDeleteConfirmDialog\", void 0);\n    __decorate([\n        Property()\n    ], EditSettings.prototype, \"template\", void 0);\n    __decorate([\n        Property()\n    ], EditSettings.prototype, \"headerTemplate\", void 0);\n    __decorate([\n        Property()\n    ], EditSettings.prototype, \"footerTemplate\", void 0);\n    __decorate([\n        Property('Top')\n    ], EditSettings.prototype, \"newRowPosition\", void 0);\n    __decorate([\n        Property({})\n    ], EditSettings.prototype, \"dialog\", void 0);\n    __decorate([\n        Property(false)\n    ], EditSettings.prototype, \"allowNextRowEdit\", void 0);\n    return EditSettings;\n}(ChildProperty));\nexport { EditSettings };\n/**\n * Configures the Loading Indicator of the Grid.\n */\nvar LoadingIndicator = /** @class */ (function (_super) {\n    __extends(LoadingIndicator, _super);\n    function LoadingIndicator() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('Spinner')\n    ], LoadingIndicator.prototype, \"indicatorType\", void 0);\n    return LoadingIndicator;\n}(ChildProperty));\nexport { LoadingIndicator };\n/**\n * Represents the Grid component.\n * ```html\n * <div id=\"grid\"></div>\n * <script>\n *  var gridObj = new Grid({ allowPaging: true });\n *  gridObj.appendTo(\"#grid\");\n * </script>\n * ```\n */\nvar Grid = /** @class */ (function (_super) {\n    __extends(Grid, _super);\n    /**\n     * Constructor for creating the component\n     *\n     * @param {GridModel} options - specifies the options\n     * @param {string | HTMLElement} element - specifies the element\n     * @hidden\n     */\n    function Grid(options, element) {\n        var _this_1 = _super.call(this, options, element) || this;\n        _this_1.isPreventScrollEvent = false;\n        _this_1.inViewIndexes = [];\n        _this_1.keyA = false;\n        _this_1.frozenRightCount = 0;\n        _this_1.freezeColumnRefresh = true;\n        _this_1.rightcount = 0;\n        _this_1.frozenLeftCount = 0;\n        _this_1.leftcount = 0;\n        _this_1.tablesCount = 1;\n        _this_1.movableCount = 0;\n        _this_1.movablecount = 0;\n        _this_1.fixedcount = 0;\n        _this_1.fixedCount = 0;\n        _this_1.visibleFrozenLeft = 0;\n        _this_1.visibleFrozenFixed = 0;\n        _this_1.isPreparedFrozenColumns = false;\n        _this_1.visibleFrozenRight = 0;\n        _this_1.visibleMovable = 0;\n        _this_1.frozenLeftColumns = [];\n        _this_1.frozenRightColumns = [];\n        _this_1.movableColumns = [];\n        _this_1.fixedColumns = [];\n        _this_1.stackedLeft = [];\n        _this_1.stackedRight = [];\n        _this_1.stackedFixed = [];\n        _this_1.stackedMovable = [];\n        _this_1.stackedarrayLeft = [];\n        _this_1.stackedarrayRight = [];\n        _this_1.stackedarrayFixed = [];\n        _this_1.stackedarrayMovable = [];\n        _this_1.media = {};\n        /** @hidden */\n        _this_1.tableIndex = 0;\n        _this_1.componentRefresh = Component.prototype.refresh;\n        _this_1.isChangeDataSourceCall = false;\n        _this_1.mergedColumns = false;\n        /** @hidden */\n        _this_1.isVirtualAdaptive = false;\n        /** @hidden */\n        /**\n         * * If `requireTemplateRef` is set to false in the load event, then the template element can't be accessed in grid queryCellInfo, and rowDataBound events.\n         * * By default, React's grid queryCellInfo and rowDataBound events allow access to the template element.\n         * * Avoid accessing the template elements in the grid queryCellInfo and rowDataBound events to improve rendering performance by setting this value as false.\n         *\n         * @default true\n         */\n        _this_1.requireTemplateRef = true;\n        /** @hidden */\n        _this_1.vRows = [];\n        /** @hidden */\n        _this_1.vcRows = [];\n        /** @hidden */\n        _this_1.vGroupOffsets = {};\n        /** @hidden */\n        _this_1.rowUid = 0;\n        /** @hidden */\n        _this_1.translateX = 0;\n        /** @hidden */\n        _this_1.isManualRefresh = false;\n        /** @hidden */\n        _this_1.isAutoFitColumns = false;\n        /** @hidden */\n        _this_1.enableDeepCompare = false;\n        /** @hidden */\n        _this_1.totalDataRecordsCount = 0;\n        /** @hidden */\n        _this_1.disableSelectedRecords = [];\n        /** @hidden */\n        _this_1.partialSelectedRecords = [];\n        /** @hidden */\n        _this_1.islazyloadRequest = false;\n        /** @hidden */\n        _this_1.lockcolPositionCount = 0;\n        /** @hidden */\n        _this_1.prevPageMoving = false;\n        /** @hidden */\n        _this_1.pageTemplateChange = false;\n        /** @hidden */\n        _this_1.isAutoGen = false;\n        /** @hidden */\n        _this_1.isAutoGenerateColumns = false;\n        _this_1.mediaBindInstance = {};\n        /** @hidden */\n        _this_1.commandDelIndex = undefined;\n        /** @hidden */\n        _this_1.asyncTimeOut = 50;\n        /** @hidden */\n        _this_1.isExportGrid = false;\n        // enable/disable logger for MVC & Core\n        _this_1.enableLogger = true;\n        _this_1.needsID = true;\n        Grid_1.Inject(Selection);\n        setValue('mergePersistData', _this_1.mergePersistGridData, _this_1);\n        return _this_1;\n    }\n    Grid_1 = Grid;\n    /**\n     * Get the properties to be maintained in the persisted state.\n     *\n     * @returns {string} returns the persist data\n     */\n    Grid.prototype.getPersistData = function () {\n        var keyEntity = ['pageSettings', 'sortSettings',\n            'filterSettings', 'groupSettings', 'columns', 'searchSettings', 'selectedRowIndex', 'scrollPosition'];\n        var ignoreOnPersist = {\n            pageSettings: ['template', 'pageSizes', 'enableQueryString', 'totalRecordsCount', 'pageCount'],\n            filterSettings: ['type', 'mode', 'showFilterBarStatus', 'immediateModeDelay', 'ignoreAccent'],\n            groupSettings: ['showDropArea', 'showToggleButton', 'showGroupedColumn', 'showUngroupButton',\n                'disablePageWiseAggregates', 'hideCaptionCount'],\n            searchSettings: ['fields', 'operator', 'ignoreCase'],\n            sortSettings: [], columns: [], selectedRowIndex: [], scrollPosition: []\n        };\n        for (var i = 0; i < keyEntity.length; i++) {\n            var currentObject = this[keyEntity[parseInt(i.toString(), 10)]];\n            for (var _i = 0, _a = ignoreOnPersist[keyEntity[parseInt(i.toString(), 10)]]; _i < _a.length; _i++) {\n                var val = _a[_i];\n                delete currentObject[\"\" + val];\n            }\n        }\n        var temp = this.pageSettings.template;\n        var settings = Object.assign({ template: undefined }, this.pageSettings);\n        this.setProperties({ pageSettings: settings }, true);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        if (this.isAngular) {\n            delete this.groupSettings['properties']['captionTemplate'];\n        }\n        this.pageTemplateChange = !isNullOrUndefined(this.pagerTemplate);\n        var persistData = this.addOnPersist(keyEntity);\n        settings.template = temp;\n        this.setProperties({ pageSettings: settings }, true);\n        return persistData;\n    };\n    /**\n     * To provide the array of modules needed for component rendering\n     *\n     * @returns {ModuleDeclaration[]} Returns the module Declaration\n     * @hidden\n     */\n    Grid.prototype.requiredModules = function () {\n        this.setFrozenCount();\n        this.enableInfiniteAggrgate();\n        var modules = [];\n        if (this.isDestroyed) {\n            return modules;\n        }\n        if (this.allowFiltering) {\n            modules.push({\n                member: 'filter',\n                args: [this, this.filterSettings, this.serviceLocator]\n            });\n        }\n        if (this.allowExcelExport) {\n            modules.push({\n                member: 'ExcelExport',\n                args: [this, this.serviceLocator]\n            });\n        }\n        if (this.allowPdfExport) {\n            modules.push({\n                member: 'PdfExport',\n                args: [this]\n            });\n        }\n        if (this.allowSorting) {\n            modules.push({\n                member: 'sort',\n                args: [this, this.sortSettings, this.sortedColumns, this.serviceLocator]\n            });\n        }\n        if (this.allowPaging) {\n            modules.push({\n                member: 'pager',\n                args: [this, this.pageSettings]\n            });\n        }\n        if (this.allowSelection) {\n            modules.push({\n                member: 'selection',\n                args: [this, this.selectionSettings, this.serviceLocator]\n            });\n        }\n        modules.push({\n            member: 'resize',\n            args: [this]\n        });\n        if (this.allowReordering) {\n            modules.push({\n                member: 'reorder',\n                args: [this]\n            });\n        }\n        if (this.allowRowDragAndDrop) {\n            modules.push({\n                member: 'rowDragAndDrop',\n                args: [this]\n            });\n        }\n        if (this.allowGrouping) {\n            modules.push({\n                member: 'group',\n                args: [this, this.groupSettings, this.sortedColumns, this.serviceLocator]\n            });\n        }\n        if (this.aggregates.length) {\n            modules.push({ member: 'aggregate', args: [this, this.serviceLocator] });\n        }\n        if (this.isDetail()) {\n            modules.push({\n                member: 'detailRow',\n                args: [this, this.serviceLocator]\n            });\n        }\n        if (this.toolbar || this.toolbarTemplate) {\n            modules.push({\n                member: 'toolbar',\n                args: [this, this.serviceLocator]\n            });\n        }\n        if (this.enableVirtualization || this.enableColumnVirtualization) {\n            modules.push({\n                member: 'virtualscroll',\n                args: [this, this.serviceLocator]\n            });\n        }\n        if (this.getFrozenColumns() || this.frozenRows || this.frozenRightCount || this.frozenLeftCount) {\n            modules.push({ member: 'freeze', args: [this, this.serviceLocator] });\n        }\n        if (this.isCommandColumn(this.columns)) {\n            modules.push({\n                member: 'commandColumn',\n                args: [this, this.serviceLocator]\n            });\n        }\n        if (this.editSettings.allowAdding || this.editSettings.allowDeleting || this.editSettings.allowEditing) {\n            modules.push({\n                member: 'edit',\n                args: [this, this.serviceLocator]\n            });\n        }\n        this.extendRequiredModules(modules);\n        return modules;\n    };\n    Grid.prototype.extendRequiredModules = function (modules) {\n        if (this.enableInfiniteScrolling) {\n            modules.push({\n                member: 'infiniteScroll',\n                args: [this, this.serviceLocator]\n            });\n        }\n        if (this.groupSettings.enableLazyLoading) {\n            modules.push({\n                member: 'lazyLoadGroup',\n                args: [this, this.serviceLocator]\n            });\n        }\n        if (this.contextMenuItems) {\n            modules.push({\n                member: 'contextMenu',\n                args: [this, this.serviceLocator]\n            });\n        }\n        if (this.showColumnMenu) {\n            modules.push({\n                member: 'columnMenu',\n                args: [this, this.serviceLocator]\n            });\n        }\n        if (this.showColumnChooser) {\n            modules.push({\n                member: 'columnChooser',\n                args: [this, this.serviceLocator]\n            });\n        }\n        if (this.isForeignKeyEnabled(this.columns)) {\n            modules.push({ member: 'foreignKey', args: [this, this.serviceLocator] });\n        }\n        if (this.enableLogger) {\n            modules.push({ member: 'logger', args: [this] });\n        }\n    };\n    /**\n     * For internal use only - Initialize the event handler;\n     *\n     * @returns {void}\n     * @private\n     */\n    Grid.prototype.preRender = function () {\n        this.serviceLocator = new ServiceLocator;\n        this.initProperties();\n        this.initializeServices();\n    };\n    Grid.prototype.initProperties = function () {\n        this.isInitial = true;\n        this.sortedColumns = [];\n        this.inViewIndexes = [];\n        this.mediaCol = [];\n        this.isInitialLoad = false;\n        this.allowServerDataBinding = false;\n        this.ignoreCollectionWatch = true;\n        this.mergeCells = {};\n        this.isEdit = false;\n        this.checkAllRows = 'None';\n        this.isCheckBoxSelection = false;\n        this.isPersistSelection = false;\n        this.componentRefresh = Component.prototype.refresh;\n        this.filterOperators = {\n            contains: 'contains', endsWith: 'endswith', equal: 'equal', greaterThan: 'greaterthan', greaterThanOrEqual: 'greaterthanorequal',\n            lessThan: 'lessthan', lessThanOrEqual: 'lessthanorequal', notEqual: 'notequal', startsWith: 'startswith', wildCard: 'wildcard',\n            isNull: 'isnull', notNull: 'notnull', like: 'like'\n        };\n        this.defaultLocale = {\n            EmptyRecord: 'No records to display',\n            True: 'true',\n            False: 'false',\n            InvalidFilterMessage: 'Invalid Filter Data',\n            GroupDropArea: 'Drag a column header here to group its column',\n            UnGroup: 'Click here to ungroup',\n            UnGroupButton: 'Click here to ungroup',\n            GroupDisable: 'Grouping is disabled for this column',\n            FilterbarTitle: '\\'s filter bar cell',\n            EmptyDataSourceError: 'DataSource must not be empty at initial load since columns are generated from dataSource in AutoGenerate Column Grid',\n            // Toolbar Items\n            Add: 'Add',\n            Edit: 'Edit',\n            Cancel: 'Cancel',\n            Update: 'Update',\n            Delete: 'Delete',\n            Print: 'Print',\n            Pdfexport: 'PDF Export',\n            Excelexport: 'Excel Export',\n            Wordexport: 'Word Export',\n            Csvexport: 'CSV Export',\n            Search: 'Search',\n            Columnchooser: 'Columns',\n            Save: 'Save',\n            Item: 'item',\n            Items: 'items',\n            EditOperationAlert: 'No records selected for edit operation',\n            DeleteOperationAlert: 'No records selected for delete operation',\n            SaveButton: 'Save',\n            OKButton: 'OK',\n            CancelButton: 'Cancel',\n            EditFormTitle: 'Details of ',\n            AddFormTitle: 'Add New Record',\n            BatchSaveConfirm: 'Are you sure you want to save changes?',\n            BatchSaveLostChanges: 'Unsaved changes will be lost. Are you sure you want to continue?',\n            ConfirmDelete: 'Are you sure you want to Delete Record?',\n            CancelEdit: 'Are you sure you want to Cancel the changes?',\n            ChooseColumns: 'Choose Column',\n            ColumnMenu: 'Column Menu',\n            SearchColumns: 'search columns',\n            Matchs: 'No matches found',\n            FilterButton: 'Filter',\n            ClearButton: 'Clear',\n            StartsWith: 'Starts With',\n            NotStartsWith: 'Does Not Start With',\n            Like: 'Like',\n            EndsWith: 'Ends With',\n            NotEndsWith: 'Does Not End With',\n            Contains: 'Contains',\n            NotContains: 'Does Not Contain',\n            IsNull: 'Null',\n            NotNull: 'Not Null',\n            IsEmpty: 'Empty',\n            IsNotEmpty: 'Not Empty',\n            Equal: 'Equal',\n            NotEqual: 'Not Equal',\n            LessThan: 'Less Than',\n            LessThanOrEqual: 'Less Than Or Equal',\n            GreaterThan: 'Greater Than',\n            GreaterThanOrEqual: 'Greater Than Or Equal',\n            ChooseDate: 'Choose a Date',\n            EnterValue: 'Enter the value',\n            Copy: 'Copy',\n            Group: 'Group by this column',\n            Ungroup: 'Ungroup by this column',\n            GroupButton: 'Group button',\n            UnGroupAria: 'ungroup button',\n            GroupSeperator: 'Separator for the grouped columns',\n            UnGroupIcon: 'ungroup the grouped column ',\n            GroupedSortIcon: 'sort the grouped column ',\n            GroupedDrag: 'Drag the grouped column',\n            GroupCaption: ' is groupcaption cell',\n            CheckBoxLabel: 'checkbox',\n            SelectAllCheckbox: 'Select all checkbox',\n            SelectRow: 'Select row',\n            autoFitAll: 'Autofit all columns',\n            autoFit: 'Autofit this column',\n            AutoFitAll: 'Autofit all columns',\n            AutoFit: 'Autofit this column',\n            Export: 'Export',\n            FirstPage: 'First Page',\n            LastPage: 'Last Page',\n            PreviousPage: 'Previous Page',\n            NextPage: 'Next Page',\n            SortAscending: 'Sort Ascending',\n            SortDescending: 'Sort Descending',\n            EditRecord: 'Edit Record',\n            DeleteRecord: 'Delete Record',\n            FilterMenu: 'Filter',\n            SelectAll: 'Select All',\n            AddCurrentSelection: 'Add current selection to filter',\n            Blanks: 'Blanks',\n            FilterTrue: 'True',\n            FilterFalse: 'False',\n            NoResult: 'No matches found',\n            ClearFilter: 'Clear Filter',\n            Clear: 'Clear',\n            NumberFilter: 'Number Filters',\n            TextFilter: 'Text Filters',\n            DateFilter: 'Date Filters',\n            DateTimeFilter: 'DateTime Filters',\n            MatchCase: 'Match Case',\n            Between: 'Between',\n            CustomFilter: 'Custom Filter',\n            CustomFilterPlaceHolder: 'Enter the value',\n            CustomFilterDatePlaceHolder: 'Choose a date',\n            AND: 'AND',\n            OR: 'OR',\n            ShowRowsWhere: 'Show rows where:',\n            ToolbarMenuDialogARIA: 'Toolbar menu dialog',\n            FilterMenuDialogARIA: 'Filter menu',\n            ExcelFilterDialogARIA: 'Excel filter',\n            CheckBoxFilterDialogARIA: 'Checkbox filter',\n            DialogEditARIA: 'Edit dialog',\n            ColumnMenuDialogARIA: 'Column menu dialog',\n            CustomFilterDialogARIA: 'Customer filter dialog',\n            SortAtoZ: 'Sort A to Z',\n            SortZtoA: 'Sort Z to A',\n            SortByOldest: 'Sort by Oldest',\n            SortByNewest: 'Sort by Newest',\n            SortSmallestToLargest: 'Sort Smallest to Largest',\n            SortLargestToSmallest: 'Sort Largest to Smallest',\n            Sort: 'Sort',\n            FilterDescription: 'Press Alt Down to open filter Menu',\n            SortDescription: 'Press Enter to sort',\n            ColumnMenuDescription: 'Press Alt Down to open Column Menu',\n            GroupDescription: 'Press Ctrl space to group',\n            ColumnHeader: ' column header ',\n            TemplateCell: ' is template cell',\n            CommandColumnAria: 'is Command column column header ',\n            DialogEdit: 'Dialog edit',\n            ClipBoard: 'clipboard',\n            AscendingText: 'Ascending',\n            DescendingText: 'Descending',\n            NoneText: 'None',\n            Expanded: 'Expanded',\n            Collapsed: 'Collapsed'\n        };\n        this.keyConfigs = {\n            downArrow: 'downarrow',\n            upArrow: 'uparrow',\n            rightArrow: 'rightarrow',\n            leftArrow: 'leftarrow',\n            shiftDown: 'shift+downarrow',\n            shiftUp: 'shift+uparrow',\n            shiftRight: 'shift+rightarrow',\n            shiftLeft: 'shift+leftarrow',\n            home: 'home',\n            end: 'end',\n            escape: 'escape',\n            ctrlHome: 'ctrl+home',\n            ctrlEnd: 'ctrl+end',\n            pageUp: 'pageup',\n            pageDown: 'pagedown',\n            ctrlAltPageUp: 'ctrl+alt+pageup',\n            ctrlAltPageDown: 'ctrl+alt+pagedown',\n            altPageUp: 'alt+pageup',\n            altPageDown: 'alt+pagedown',\n            altDownArrow: 'alt+downarrow',\n            altUpArrow: 'alt+uparrow',\n            ctrlDownArrow: 'ctrl+downarrow',\n            ctrlUpArrow: 'ctrl+uparrow',\n            ctrlPlusA: 'ctrl+A',\n            ctrlPlusP: 'ctrl+P',\n            insert: 'insert',\n            delete: 'delete',\n            f2: 'f2',\n            enter: 'enter',\n            ctrlEnter: 'ctrl+enter',\n            shiftEnter: 'shift+enter',\n            tab: 'tab',\n            shiftTab: 'shift+tab',\n            space: 'space',\n            ctrlPlusC: 'ctrl+C',\n            ctrlShiftPlusH: 'ctrl+shift+H',\n            ctrlSpace: 'ctrl+space',\n            ctrlLeftArrow: 'ctrl+leftarrow',\n            ctrlRightArrow: 'ctrl+rightarrow'\n        };\n    };\n    /**\n     * For internal use only - To Initialize the component rendering.\n     *\n     * @returns {void}\n     * @private\n     */\n    Grid.prototype.render = function () {\n        this.log(['module_missing', 'promise_enabled', 'locale_missing', 'check_datasource_columns']);\n        this.ariaService.setOptions(this.element, { role: 'grid' });\n        createSpinner({ target: this.element, cssClass: this.cssClass ? this.cssClass : null }, this.createElement);\n        this.renderModule = new Render(this, this.serviceLocator);\n        this.searchModule = new Search(this);\n        this.scrollModule = new Scroll(this);\n        this.notify(events.initialLoad, {});\n        if ((this.getDataModule().dataManager.dataSource.offline === true || this.getDataModule().dataManager.dataSource.url === undefined) &&\n            !(!isNullOrUndefined(this.dataSource) && this.dataSource.result)) {\n            this.isVirtualAdaptive = true;\n        }\n        if (this.isReact) {\n            var args = { requireTemplateRef: this.requireTemplateRef };\n            this.trigger(events.load, args);\n            if (!args.requireTemplateRef) {\n                this.requireTemplateRef = args.requireTemplateRef;\n            }\n        }\n        else {\n            this.trigger(events.load);\n        }\n        prepareColumns(this.columns, this.enableColumnVirtualization, this);\n        if (this.enableColumnVirtualization && this.isChangeDataSourceCall && this.columnModel) {\n            this.columnModel = [];\n            this.updateColumnModel(this.columns);\n        }\n        this.isPreparedFrozenColumns = true;\n        if (this.enablePersistence) {\n            this.notify(events.columnsPrepared, {});\n        }\n        this.getMediaColumns();\n        setColumnIndex(this.columns);\n        if (this.isFrozenGrid() && !this.mergedColumns) {\n            this.setInitialFrozenColumnIndex(this.columns);\n        }\n        this.checkLockColumns(this.columns);\n        this.getColumns();\n        this.processModel();\n        this.gridRender();\n        this.wireEvents();\n        this.addListener();\n        this.updateDefaultCursor();\n        this.updateStackedFilter();\n        if (this.loadingIndicator.indicatorType === 'Spinner') {\n            this.showSpinner();\n        }\n        this.notify(events.initialEnd, {});\n        if (this.loadingIndicator.indicatorType === 'Shimmer') {\n            this.refreshMaskRow();\n        }\n        if (this.refreshing) {\n            this.trigger('created');\n        }\n    };\n    Grid.prototype.setInitialFrozenColumnIndex = function (columns) {\n        for (var i = 0; i < columns.length; i++) {\n            var column = columns[parseInt(i.toString(), 10)];\n            column[\"\" + literals.initialFrozenColumnIndex] = column.index;\n            if (column.columns) {\n                this.setInitialFrozenColumnIndex(column.columns);\n            }\n        }\n    };\n    /**\n     * By default, grid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.showSpinner = function () {\n        if (!this.isExportGrid) {\n            showSpinner(this.element);\n        }\n    };\n    /**\n     * By default, grid shows the spinner for all its actions. You can use this method to show spinner at your needed time.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.hideSpinner = function () {\n        if (!this.isExportGrid) {\n            hideSpinner(this.element);\n        }\n    };\n    Grid.prototype.showMaskRow = function (axisDirection, dialogElement) {\n        if (isNullOrUndefined(this.headerModule) || isNullOrUndefined(this.contentModule)) {\n            return;\n        }\n        var gridHeader = this.getHeaderContent().firstChild;\n        var gridContent = this.getContent().firstChild;\n        var gridFooter = this.getFooterContent();\n        if (dialogElement) {\n            var dialogHolder = dialogElement.querySelector('.e-checkboxlist');\n            var maskRowCount = Math.floor(dialogHolder.getBoundingClientRect().height / this.getRowHeight());\n            var maskTemplate = '<div class=\"e-ftrchk e-mask-ftrchk\" style=\"width: 100%;\">'\n                + '<div class=\"e-checkbox-wrapper\" style=\"width: 100%;\"><input class=\"e-chk-hidden\">'\n                + this.getShimmerTemplate() + this.getShimmerTemplate() + '</div></div>';\n            dialogHolder.innerHTML = '';\n            for (var i = 0; i < maskRowCount; i++) {\n                dialogHolder.innerHTML += maskTemplate;\n                var maskSpan = [].slice.call(dialogHolder\n                    .querySelectorAll('.e-mask:not(.e-mask-checkbox-filter-intent):not(.e-mask-checkbox-filter-span-intent)'));\n                maskSpan[0].classList.add('e-mask-checkbox-filter-intent');\n                maskSpan[1].classList.add('e-mask-checkbox-filter-span-intent');\n            }\n            return;\n        }\n        if ((!this.enableRtl && !this.getHeaderContent().style.paddingRight)\n            || (this.enableRtl && !this.getHeaderContent().style.paddingLeft)) {\n            gridContent.style.overflowY = 'hidden';\n        }\n        if (!this.isInitialLoad && !this.getColumns().length) {\n            var contentHeight = gridContent.getBoundingClientRect().height;\n            var maskTableHeight = contentHeight === 0 ? this.allowPaging ? this.pageSettings.pageSize * this.getRowHeight()\n                : window.innerHeight : contentHeight;\n            var contentRowCount = Math.ceil(maskTableHeight / this.getRowHeight());\n            if (this.rowRenderingMode !== 'Vertical') {\n                this.headerMaskTable = this.createEmptyMaskTable(gridHeader, 1);\n            }\n            this.contentMaskTable = this.createEmptyMaskTable(gridContent, contentRowCount);\n            return;\n        }\n        this.maskRowContentScroll = (this.enableVirtualization || this.enableColumnVirtualization) && axisDirection ? true : false;\n        if (!this.contentMaskTable) {\n            var content = gridContent;\n            if (this.enableVirtualization || this.enableColumnVirtualization) {\n                content = content.querySelector('.e-virtualtable');\n            }\n            if (!isNullOrUndefined(content.querySelector('tbody'))) {\n                this.contentMaskTable = this.createMaskTable(content, this.getContentMaskColumns(), axisDirection);\n            }\n        }\n        if (!this.headerMaskTable && (this.isFrozenGrid() || (this.enableColumnVirtualization && axisDirection === 'X'))) {\n            var content = gridHeader;\n            if (this.enableColumnVirtualization && axisDirection === 'X') {\n                content = content.querySelector('.e-virtualtable');\n            }\n            this.headerMaskTable = this.createMaskTable(content, this.getContentMaskColumns(), axisDirection);\n        }\n        if (gridFooter && gridFooter.querySelector('.e-summaryrow')) {\n            var gridFooterContent = gridFooter.firstChild;\n            if (!this.footerContentMaskTable) {\n                var footerContent = gridFooterContent;\n                this.footerContentMaskTable = this.createMaskTable(footerContent);\n            }\n        }\n        if (!(this.enableVirtualization && axisDirection)) {\n            EventHandler.add(gridContent, 'scroll', this.translateMaskRow, this);\n        }\n    };\n    Grid.prototype.getContentMaskColumns = function () {\n        return this.getColumns();\n    };\n    Grid.prototype.createEmptyMaskTable = function (maskElement, rowCount) {\n        var table = this.createElement('table', { className: 'e-table e-masked-table' });\n        var tbody = this.createElement('tbody', { className: 'e-masked-tbody' });\n        var row = this.createElement('tr', { className: 'e-masked-row e-row', attrs: {\n                style: 'height: ' + this.getRowHeight() + 'px;'\n            } });\n        var cell = this.createElement('td', { className: 'e-masked-cell e-rowcell' });\n        cell.innerHTML = this.getShimmerTemplate();\n        row.appendChild(cell);\n        for (var i = 0; i < rowCount; i++) {\n            tbody.appendChild(row.cloneNode(true));\n        }\n        table.appendChild(tbody);\n        maskElement.appendChild(table);\n        return table;\n    };\n    Grid.prototype.createMaskTable = function (element, columns, axisDirection) {\n        var parentElement = element;\n        var header = closest(parentElement, '.e-gridheader') ? true : false;\n        var content = closest(parentElement, '.e-gridcontent') ? true : false;\n        var footer = closest(parentElement, '.e-gridfooter') ? true : false;\n        var gridContent = this.getContent().firstChild;\n        var gridContentScrollHeight = gridContent.scrollHeight;\n        var table = parentElement.querySelector('table');\n        var maskTable = table.cloneNode();\n        maskTable.removeAttribute('role');\n        maskTable.removeAttribute('id');\n        maskTable.style.position = 'absolute';\n        maskTable.style.zIndex = '5';\n        maskTable.style.width = table.getBoundingClientRect().width + 'px';\n        if (header && !(this.enableColumnVirtualization && axisDirection === 'X')) {\n            maskTable.style.transform = 'translate(0px,'\n                + table.querySelector('thead').getBoundingClientRect().height + 'px)';\n        }\n        maskTable.setAttribute('class', 'e-table e-masked-table');\n        var maskColgroup = table.querySelector('colgroup').cloneNode(true);\n        maskColgroup.removeAttribute('id');\n        maskColgroup.setAttribute('class', 'e-masked-colgroup');\n        maskTable.appendChild(maskColgroup);\n        if (header && this.enableColumnVirtualization && axisDirection === 'X') {\n            var row = this.createMaskRow(maskColgroup, columns);\n            if (this.isFrozenGrid()) {\n                var frzTd = [].slice.call(row.querySelectorAll('.e-rowcell'));\n                for (var i = 0; i < frzTd.length; i++) {\n                    if (i < this.frozenLeftCount) {\n                        if (this.frozenLeftCount - 1 === i) {\n                            frzTd[parseInt(i.toString(), 10)].classList.add('e-freezeleftborder');\n                        }\n                        frzTd[parseInt(i.toString(), 10)].classList.add('e-leftfreeze');\n                        frzTd[parseInt(i.toString(), 10)].setAttribute('data-colindex', i.toString());\n                        frzTd[parseInt(i.toString(), 10)].style.left = (columns[parseInt(i.toString(), 10)].valueX -\n                            this.translateX) + 'px';\n                    }\n                    else if ((frzTd.length - this.frozenRightCount) <= i && columns[parseInt(i.toString(), 10)]) {\n                        if ((frzTd.length - this.frozenRightCount) === i) {\n                            frzTd[parseInt(i.toString(), 10)].classList.add('e-freezerightborder');\n                        }\n                        frzTd[parseInt(i.toString(), 10)].classList.add('e-rightfreeze');\n                        frzTd[parseInt(i.toString(), 10)].setAttribute('data-colindex', i.toString());\n                        frzTd[parseInt(i.toString(), 10)].style.right = (this.translateX +\n                            columns[parseInt(i.toString(), 10)].valueX) + 'px';\n                    }\n                }\n            }\n            var thead = table.querySelector('thead');\n            var rows = [].slice.call(thead.querySelectorAll('tr'));\n            var maskTHead = thead.cloneNode();\n            maskTHead.removeAttribute('role');\n            maskTHead.setAttribute('class', 'e-masked-thead');\n            var rowCount = rows.length;\n            for (var i = 0; i < rowCount; i++) {\n                maskTHead.appendChild(row.cloneNode(true));\n                maskTHead.childNodes[parseInt(i.toString(), 10)].style\n                    .height = rows[parseInt(i.toString(), 10)].getBoundingClientRect().height + 'px';\n            }\n            maskTable.appendChild(maskTHead);\n        }\n        var maskTBody = table.querySelector('tbody').cloneNode();\n        maskTBody.removeAttribute('role');\n        maskTBody.setAttribute('class', 'e-masked-tbody');\n        var tbody = table.querySelector('tbody');\n        if (content || header) {\n            var rowCountElement = gridContent;\n            var rowCount = Math.ceil(rowCountElement.getBoundingClientRect().height / this.getRowHeight());\n            if (tbody.querySelector('.e-emptyrow') || !tbody.childNodes.length || (content && this.childGrid)) {\n                var row = this.createMaskRow(maskColgroup, columns);\n                var altRow = row.cloneNode(true);\n                altRow.classList.add('e-altrow');\n                for (var i = 0; i < rowCount; i++) {\n                    var altNumber = 1;\n                    maskTBody.appendChild((i + altNumber) % 2 === 0 ? altRow.cloneNode(true) : row.cloneNode(true));\n                }\n            }\n            else {\n                var rowsQuery = 'tr:not([style*=\"display:none\"]):not([style*=\"display: none\"])';\n                var rows = [].slice.call(tbody.querySelectorAll(rowsQuery));\n                var addEditRow = tbody.querySelector('.e-addedrow, .e-editedrow');\n                var addEditRowIndex = void 0;\n                if (addEditRow) {\n                    addEditRowIndex = rows.indexOf(addEditRow);\n                    if (this.isFrozenGrid() && this.enableColumnVirtualization) {\n                        var frzTd = [].slice.call(rows[addEditRowIndex + 1].querySelectorAll('.e-rowcell'));\n                        for (var i = 0; i < frzTd.length; i++) {\n                            if (i < this.frozenLeftCount) {\n                                frzTd[parseInt(i.toString(), 10)].classList.add('e-leftfreeze');\n                                frzTd[parseInt(i.toString(), 10)].setAttribute('data-colindex', i.toString());\n                                frzTd[parseInt(i.toString(), 10)].style.left = (columns[parseInt(i.toString(), 10)].valueX - this.translateX) + 'px';\n                            }\n                            else if ((frzTd.length - this.frozenRightCount) <= i && columns[parseInt(i.toString(), 10)]) {\n                                frzTd[parseInt(i.toString(), 10)].classList.add('e-rightfreeze');\n                                frzTd[parseInt(i.toString(), 10)].setAttribute('data-colindex', i.toString());\n                                frzTd[parseInt(i.toString(), 10)].style.right = (this.translateX +\n                                    columns[parseInt(i.toString(), 10)].valueX) + 'px';\n                            }\n                        }\n                    }\n                    if (addEditRow.classList.contains('e-addedrow')) {\n                        rows.splice(addEditRowIndex, 2);\n                    }\n                    else {\n                        rows.splice(addEditRowIndex, 1);\n                    }\n                }\n                rowCount = (this.enableVirtualization || this.enableColumnVirtualization) && axisDirection ? rows.length\n                    : rowCount <= rows.length ? rowCount : rows.length;\n                for (var i = 0; i < rowCount; i++) {\n                    maskTBody.appendChild(this.applyMaskRow(rows[parseInt(i.toString(), 10)].cloneNode(true), rows[parseInt(i.toString(), 10)].getBoundingClientRect().height));\n                }\n                if (addEditRow && addEditRow.classList.contains('e-editedrow') && addEditRowIndex < rowCount) {\n                    var addEditMaskRow = maskTBody.childNodes[parseInt(addEditRowIndex.toString(), 10)];\n                    addEditMaskRow.style.height = this.getRowHeight() + 'px';\n                    addEditMaskRow.classList.add('e-row');\n                    if (addEditRow.classList.contains('e-altrow')) {\n                        addEditMaskRow.classList.add('e-altrow');\n                    }\n                }\n            }\n        }\n        maskTable.appendChild(maskTBody);\n        if (footer) {\n            var tfoot = table.querySelector('tfoot');\n            var maskTFoot = tfoot.cloneNode();\n            maskTFoot.setAttribute('class', 'e-masked-tfoot');\n            var rows = [].slice.call(tfoot.querySelectorAll('tr'));\n            for (var i = 0; i < rows.length; i++) {\n                maskTFoot.appendChild(this.applyMaskRow(rows[parseInt(i.toString(), 10)].cloneNode(true), rows[parseInt(i.toString(), 10)].getBoundingClientRect().height));\n            }\n            maskTable.appendChild(maskTFoot);\n        }\n        if (header && this.isFrozenGrid() && !this.enableColumnVirtualization) {\n            this.getHeaderContent().querySelector('.' + literals.headerContent).style.position = 'relative';\n        }\n        parentElement.insertBefore(maskTable, parentElement.firstChild);\n        if (content && !(this.enableVirtualization && axisDirection)) {\n            var minScrollTop = gridContentScrollHeight - maskTable.getBoundingClientRect().height;\n            minScrollTop = minScrollTop < 0 ? 0 : minScrollTop;\n            var scrollTop = gridContent.scrollTop <= minScrollTop ? gridContent.scrollTop : minScrollTop;\n            if (this.enableVirtualization) {\n                scrollTop -= getTransformValues(closest(parentElement, '.e-virtualtable')).height;\n            }\n            maskTable.style.transform = 'translate(0px,' + scrollTop + 'px)';\n        }\n        return maskTable;\n    };\n    Grid.prototype.applyMaskRow = function (row, rowHeight) {\n        var maskRow = row;\n        maskRow.removeAttribute('role');\n        maskRow.removeAttribute('aria-rowindex');\n        maskRow.removeAttribute('data-rowindex');\n        maskRow.removeAttribute('data-uid');\n        maskRow.classList.add('e-masked-row');\n        maskRow.style.height = rowHeight + 'px';\n        var maskCells = [].slice.call(maskRow.childNodes);\n        for (var i = 0; i < maskCells.length; i++) {\n            var maskCell = maskCells[parseInt(i.toString(), 10)];\n            var displayAsCheckBoxCell = maskCell.firstChild && maskCell.firstChild.classList\n                && maskCell.firstChild.classList.contains('e-checkbox-wrapper');\n            maskCell.removeAttribute('role');\n            maskCell.removeAttribute('tabindex');\n            maskCell.removeAttribute('aria-label');\n            if (this.enableColumnVirtualization && maskCell.classList.contains('e-fixedfreeze')) {\n                removeClass([maskCell], ['e-fixedfreeze', 'e-freezeleftborder', 'e-freezerightborder']);\n                addClass([maskCell], ['e-unfreeze']);\n            }\n            if (!(this.enableColumnVirtualization && (maskCell.classList.contains('e-leftfreeze') ||\n                maskCell.classList.contains('e-rightfreeze')))) {\n                maskCell.removeAttribute('data-colindex');\n            }\n            maskCell.removeAttribute('aria-colindex');\n            maskCell.removeAttribute('index');\n            maskCell.removeAttribute('ej-mappingname');\n            maskCell.removeAttribute('ej-mappingvalue');\n            maskCell.removeAttribute('e-mappinguid');\n            maskCell.removeAttribute('aria-expanded');\n            maskCell.classList.add('e-masked-cell');\n            maskCell.innerHTML = this.getShimmerTemplate();\n            if (maskCell.classList.contains('e-recordplusexpand') || maskCell.classList.contains('e-recordpluscollapse')) {\n                maskCell.firstChild.classList.add('e-mask-group-intent');\n            }\n            else if (maskCell.classList.contains('e-gridchkbox') || displayAsCheckBoxCell) {\n                maskCell.firstChild.classList.add('e-mask-checkbox-intent');\n            }\n            else if (maskCell.classList.contains('e-rowdragdrop')) {\n                maskCell.firstChild.classList.add('e-mask-drag-intent');\n            }\n            else if (maskCell.classList.contains('e-indentcell')) {\n                maskCell.innerHTML = '';\n            }\n        }\n        return maskRow;\n    };\n    Grid.prototype.createMaskRow = function (refColgroup, refColumns) {\n        var colgroup = refColgroup;\n        var columns = refColumns;\n        var row = this.createElement('tr', { className: 'e-masked-row e-row' });\n        if (this.rowRenderingMode !== 'Vertical') {\n            row.style.height = this.getRowHeight() + 'px';\n        }\n        var td = this.createElement('td', { className: 'e-masked-cell e-rowcell' });\n        for (var i = 0, colIndex = 0; i < colgroup.childNodes.length; i++) {\n            var col = colgroup.childNodes[parseInt(i.toString(), 10)];\n            var localTD = td.cloneNode();\n            localTD.innerHTML = this.getShimmerTemplate();\n            if (!(col.classList.contains('e-group-intent') || col.classList.contains('e-detail-intent')\n                || col.classList.contains('e-drag-intent'))) {\n                if (this.rowRenderingMode === 'Vertical' && columns[parseInt(colIndex.toString(), 10)]) {\n                    localTD.setAttribute('data-cell', columns[parseInt(colIndex.toString(), 10)].headerText ?\n                        columns[parseInt(colIndex.toString(), 10)].headerText : columns[parseInt(colIndex.toString(), 10)].field);\n                }\n                if (col.style.display === 'none') {\n                    localTD.classList.add('e-hide');\n                }\n                else {\n                    localTD.style.textAlign = columns[parseInt(colIndex.toString(), 10)]\n                        && columns[parseInt(colIndex.toString(), 10)].textAlign ?\n                        columns[parseInt(colIndex.toString(), 10)].textAlign.toLowerCase()\n                        : this.enableRtl ? 'right' : 'left';\n                    if (columns[parseInt(colIndex.toString(), 10)] && (columns[parseInt(colIndex.toString(), 10)].type === 'checkbox'\n                        || columns[parseInt(colIndex.toString(), 10)].displayAsCheckBox)) {\n                        localTD.firstChild.classList.add('e-mask-checkbox-intent');\n                    }\n                }\n                colIndex++;\n            }\n            else {\n                if (col.classList.contains('e-group-intent')) {\n                    localTD.firstChild.classList.add('e-mask-group-intent');\n                }\n                else if (col.classList.contains('e-detail-intent')) {\n                    localTD.firstChild.classList.add('e-mask-detail-intent');\n                }\n                else if (col.classList.contains('e-drag-intent')) {\n                    localTD.firstChild.classList.add('e-mask-drag-intent');\n                }\n            }\n            row.appendChild(localTD);\n        }\n        return row;\n    };\n    Grid.prototype.getShimmerTemplate = function () {\n        if (this.maskRowContentScroll) {\n            return '<span class=\"e-mask e-skeleton e-skeleton-text\"></span>';\n        }\n        return '<span class=\"e-mask e-skeleton e-skeleton-text e-shimmer-wave\"></span>';\n    };\n    Grid.prototype.addShimmerEffect = function () {\n        this.maskRowContentScroll = false;\n        var maskSpan = [].slice.call(this.element.querySelectorAll('.e-mask:not(.e-shimmer-wave)'));\n        for (var i = 0; i < maskSpan.length; i++) {\n            if (maskSpan[parseInt(i.toString(), 10)]) {\n                maskSpan[parseInt(i.toString(), 10)].classList.add('e-shimmer-wave');\n            }\n        }\n    };\n    Grid.prototype.translateMaskRow = function (e) {\n        var target = e.target;\n        var maskTables = target.querySelectorAll('.e-masked-table');\n        for (var i = 0; i < maskTables.length; i++) {\n            var maskTable = maskTables[parseInt(i.toString(), 10)];\n            if (maskTable) {\n                var minScrollTop = target.scrollHeight - maskTable.getBoundingClientRect().height;\n                minScrollTop = minScrollTop < 0 ? 0 : minScrollTop;\n                var scrollTop = target.scrollTop <= minScrollTop ? target.scrollTop : minScrollTop;\n                if (this.enableVirtualization) {\n                    scrollTop -= getTransformValues(closest(maskTable, '.e-virtualtable')).height;\n                }\n                maskTable.style.transform = 'translate(0px,' + scrollTop + 'px)';\n            }\n        }\n    };\n    Grid.prototype.removeMaskRow = function () {\n        if (!isNullOrUndefined(this.contentModule)) {\n            var gridContent = this.getContent().firstChild;\n            EventHandler.remove(gridContent, 'scroll', this.translateMaskRow);\n        }\n        if (this.headerMaskTable && this.isFrozenGrid() && !this.enableColumnVirtualization) {\n            this.getHeaderContent().querySelector('.' + literals.headerContent).style.position = '';\n        }\n        var maskTables = [this.headerMaskTable,\n            this.contentMaskTable, this.footerContentMaskTable];\n        for (var i = 0; i < maskTables.length; i++) {\n            var maskTable = maskTables[parseInt(i.toString(), 10)];\n            if (maskTable) {\n                remove(maskTable);\n            }\n        }\n        this.headerMaskTable = null;\n        this.contentMaskTable = null;\n        this.footerContentMaskTable = null;\n    };\n    Grid.prototype.refreshMaskRow = function () {\n        var gridContent = this.getContent().firstChild;\n        if (!this.isInitialLoad && !this.getColumns().length) {\n            return;\n        }\n        if (this.contentMaskTable && gridContent.querySelector('.e-masked-table')) {\n            var content = gridContent;\n            if (this.enableVirtualization) {\n                content = content.querySelector('.e-virtualtable');\n            }\n            this.refreshMaskRowColgroupWidth(content);\n        }\n    };\n    Grid.prototype.refreshMaskRowColgroupWidth = function (content) {\n        var table = content.querySelector('table:not(.e-masked-table)');\n        var colgroup = table.querySelector(literals.colGroup).cloneNode(true);\n        var maskTable = content.querySelector('.e-masked-table');\n        colgroup.removeAttribute('id');\n        colgroup.setAttribute('class', 'e-masked-colgroup');\n        for (var i = 0; i < colgroup.childNodes.length; i++) {\n            colgroup.childNodes[parseInt(i.toString(), 10)].removeAttribute('class');\n        }\n        remove(maskTable.querySelector('.e-masked-colgroup'));\n        maskTable.insertBefore(colgroup, maskTable.firstChild);\n        maskTable.style.width = table.getBoundingClientRect().width + 'px';\n    };\n    Grid.prototype.updateStackedFilter = function () {\n        if (this.allowFiltering && this.filterSettings.type === 'FilterBar' &&\n            this.getHeaderContent().getElementsByClassName('e-stackedheadercell').length) {\n            this.getHeaderContent().classList.add('e-stackedfilter');\n        }\n        else {\n            this.getHeaderContent().classList.remove('e-stackedfilter');\n        }\n    };\n    Grid.prototype.getMediaColumns = function () {\n        if (!this.enableColumnVirtualization) {\n            var gcol = this.getColumns();\n            this.getShowHideService = this.serviceLocator.getService('showHideService');\n            if (!isNullOrUndefined(gcol)) {\n                for (var index = 0; index < gcol.length; index++) {\n                    if (!isNullOrUndefined(gcol[parseInt(index.toString(), 10)].hideAtMedia)\n                        && (isNullOrUndefined(gcol[parseInt(index.toString(), 10)].visible)\n                            || gcol[parseInt(index.toString(), 10)].visible)) {\n                        this.pushMediaColumn(gcol[parseInt(index.toString(), 10)], index);\n                    }\n                }\n            }\n        }\n        this.updateFrozenColumnsWidth();\n    };\n    Grid.prototype.pushMediaColumn = function (col, index) {\n        this.mediaCol.push(col);\n        this.media[col.uid] = window.matchMedia(col.hideAtMedia);\n        this.mediaQueryUpdate(index, this.media[col.uid]);\n        this.mediaBindInstance[parseInt(index.toString(), 10)] = this.mediaQueryUpdate.bind(this, index);\n        this.media[col.uid].addListener(this.mediaBindInstance[parseInt(index.toString(), 10)]);\n    };\n    /**\n     * @param {Column} col - specifies the column\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.updateMediaColumns = function (col) {\n        if (!this.enableColumnVirtualization) {\n            var index = this.getColumnIndexByUid(col.uid);\n            for (var i = 0; i < this.mediaCol.length; i++) {\n                if (col.uid === this.mediaCol[parseInt(i.toString(), 10)].uid) {\n                    this.mediaCol.splice(i, 1);\n                    return;\n                }\n            }\n            this.pushMediaColumn(col, index);\n        }\n    };\n    /**\n     * @param {number} columnIndex - specifies the column index\n     * @param {MediaQueryList} e - specifies the MediaQueryList\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.mediaQueryUpdate = function (columnIndex, e) {\n        var col = this.getColumns()[parseInt(columnIndex.toString(), 10)];\n        if (this.mediaCol.some(function (mediaColumn) { return mediaColumn.uid === col.uid; })) {\n            col.visible = e.matches;\n            if (this.isInitialLoad) {\n                this.invokedFromMedia = true;\n                if (col.visible) {\n                    this.showHider.show(col.headerText, 'headerText');\n                }\n                else {\n                    this.showHider.hide(col.headerText, 'headerText');\n                }\n            }\n        }\n    };\n    Grid.prototype.refreshMediaCol = function () {\n        this.isInitialLoad = true;\n        var footerContent = this.element.querySelector('.' + literals.gridFooter);\n        if (this.aggregates.length && this.element.scrollHeight > parseInt(this.height.toString(), 10) && footerContent) {\n            addClass([footerContent], ['e-footerpadding']);\n        }\n        var checkboxColumn = this.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n        if (checkboxColumn.length === 0 || checkboxColumn.length && this.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n            this.isCheckBoxSelection = false;\n        }\n        if (this.rowRenderingMode === 'Vertical') {\n            if (this.enableHover) {\n                this.setProperties({ enableAdaptiveUI: true, enableHover: false }, true);\n                removeClass([this.element], 'e-gridhover');\n            }\n        }\n        if (this.enableAdaptiveUI && this.scrollModule) {\n            this.scrollModule.refresh();\n        }\n        if (this.isFrozenGrid() && this.isAutoGenerateColumns) {\n            this.widthService.setWidthToColumns();\n            this.isAutoGenerateColumns = false;\n        }\n    };\n    Grid.prototype.removeMediaListener = function () {\n        for (var i = 0; i < this.mediaCol.length; i++) {\n            this.media[this.mediaCol[parseInt(i.toString(), 10)].uid]\n                .removeListener(this.mediaBindInstance[this.mediaCol[parseInt(i.toString(), 10)].index]);\n        }\n    };\n    /**\n     * For internal use only - Initialize the event handler\n     *\n     * @returns {void}\n     * @private\n     */\n    Grid.prototype.eventInitializer = function () {\n        //eventInitializer\n    };\n    /**\n     * Destroys the component (detaches/removes all event handlers, attributes, classes, and empties the component element).\n     *\n     * @function destroy\n     * @returns {void}\n     */\n    Grid.prototype.destroy = function () {\n        var gridElement = this.element;\n        if (!gridElement) {\n            return;\n        }\n        var hasGridChild = gridElement.querySelector('.' + literals.gridHeader) &&\n            gridElement.querySelector('.' + literals.gridContent) ? true : false;\n        if (hasGridChild) {\n            this.unwireEvents();\n        }\n        this.removeListener();\n        this.removeMediaListener();\n        this.notify(events.destroy, {});\n        this.destroyDependentModules();\n        if (this.isReact) {\n            this.destroyTemplate(['template']);\n        }\n        if (this.isVue) {\n            this.destroyTemplate();\n        }\n        if (hasGridChild) {\n            _super.prototype.destroy.call(this);\n        }\n        this.toolTipObj.destroy();\n        if (this.isReact && !Browser.isIE) {\n            this.element.innerHTML = '';\n        }\n        var modules = ['renderModule', 'headerModule', 'contentModule', 'valueFormatterService',\n            'serviceLocator', 'ariaService', 'keyboardModule', 'widthService', 'searchModule', 'showHider',\n            'scrollModule', 'printModule', 'clipboardModule', 'focusModule'];\n        for (var i = 0; i < modules.length; i++) {\n            if (this[modules[parseInt(i.toString(), 10)]]) {\n                this[modules[parseInt(i.toString(), 10)]] = null;\n            }\n        }\n        this.element.innerHTML = '';\n        classList(this.element, [], ['e-rtl', 'e-gridhover', 'e-responsive', 'e-default', 'e-device', 'e-grid-min-height']);\n    };\n    Grid.prototype.destroyDependentModules = function () {\n        var gridElement = this.element;\n        if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n            return;\n        }\n        this.scrollModule.destroy();\n        this.keyboardModule.destroy();\n        this.focusModule.destroy();\n        this.clipboardModule.destroy();\n        this.printModule.destroy();\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    Grid.prototype.getModuleName = function () {\n        return 'grid';\n    };\n    Grid.prototype.enableBoxSelection = function () {\n        if (this.enableAutoFill) {\n            this.selectionSettings.cellSelectionMode = 'BoxWithBorder';\n            this.element.classList.add('e-afenabled');\n        }\n        else {\n            this.element.classList.remove('e-afenabled');\n        }\n    };\n    Grid.prototype.setCSSClass = function (oldCSSClass) {\n        if (this.cssClass) {\n            addClass([this.element], this.cssClass.split(' '));\n        }\n        if (oldCSSClass) {\n            removeClass([this.element], oldCSSClass.split(' '));\n        }\n    };\n    /**\n     * Called internally if any of the property value changed.\n     *\n     * @param {GridModel} newProp - Defines new properties\n     * @param {GridModel} oldProp - Defines old properties\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.onPropertyChanged = function (newProp, oldProp) {\n        var requireRefresh = false;\n        var requireGridRefresh = false;\n        var freezeRefresh = false;\n        var checkCursor;\n        var args = { requestType: 'refresh' };\n        var childGridParent = null;\n        var parentInstance = null;\n        if (this.isDestroyed) {\n            return;\n        }\n        this.log('module_missing');\n        if (this.isEllipsisTooltip()) {\n            this.toolTipObj.close();\n        }\n        var properties = Object.keys(newProp);\n        if (properties.indexOf('columns') > -1) {\n            if (this.enableColumnVirtualization) {\n                this.columnModel = [];\n            }\n            this.updateColumnObject();\n            requireGridRefresh = true;\n        }\n        for (var _i = 0, properties_1 = properties; _i < properties_1.length; _i++) {\n            var prop = properties_1[_i];\n            switch (prop) {\n                case 'allowPaging':\n                    this.notify(events.uiUpdate, { module: 'pager', enable: this.allowPaging });\n                    requireRefresh = true;\n                    if (this.height === '100%') {\n                        this.scrollModule.refresh();\n                    }\n                    break;\n                case 'pageSettings':\n                    if (this.pageTemplateChange) {\n                        this.pageTemplateChange = false;\n                        this.notify(events.inBoundModelChanged, { module: 'pager', properties: newProp.pageSettings });\n                        break;\n                    }\n                    if (this.pagerModule && this.pagerModule.isCancel) {\n                        this.pagerModule.isCancel = false;\n                        return;\n                    }\n                    this.notify(events.inBoundModelChanged, { module: 'pager', properties: newProp.pageSettings });\n                    if (isNullOrUndefined(newProp.pageSettings.currentPage) && isNullOrUndefined(newProp.pageSettings.pageSize)\n                        && isNullOrUndefined(newProp.pageSettings.totalRecordsCount)\n                        || !isNullOrUndefined(oldProp.pageSettings) &&\n                            ((newProp.pageSettings.currentPage !== oldProp.pageSettings.currentPage)\n                                && !this.enableColumnVirtualization && !this.enableVirtualization\n                                && this.pageSettings.totalRecordsCount <= this.pageSettings.pageSize)) {\n                        requireRefresh = true;\n                    }\n                    if (this.pagerModule && this.pagerModule.isCancel) {\n                        this.pagerModule.isCancel = false;\n                    }\n                    break;\n                case 'allowSorting':\n                    this.notify(events.uiUpdate, { module: 'sort', enable: this.allowSorting });\n                    requireRefresh = true;\n                    checkCursor = true;\n                    break;\n                case 'allowFiltering':\n                    this.updateStackedFilter();\n                    this.notify(events.uiUpdate, { module: 'filter', enable: this.allowFiltering });\n                    requireRefresh = true;\n                    if (this.filterSettings.type !== 'FilterBar') {\n                        this.refreshHeader();\n                    }\n                    else {\n                        if (this.height === '100%') {\n                            this.scrollModule.refresh();\n                        }\n                    }\n                    break;\n                case 'height':\n                case 'width':\n                    this.notify(events.uiUpdate, { module: 'scroll', properties: { width: newProp.width, height: newProp.height } });\n                    if (this.allowPaging) {\n                        this.pagerModule.refresh();\n                    }\n                    break;\n                case 'allowReordering':\n                    this.headerModule.refreshUI();\n                    checkCursor = true;\n                    break;\n                case 'allowRowDragAndDrop':\n                    this.notify(events.uiUpdate, { module: 'rowDragAndDrop', enable: this.allowRowDragAndDrop });\n                    this.renderModule.refresh();\n                    this.headerModule.refreshUI();\n                    break;\n                case 'allowSelection':\n                    this.notify(events.uiUpdate, { module: 'selection', enable: this.allowSelection });\n                    break;\n                case 'cssClass':\n                    this.setCSSClass(oldProp.cssClass);\n                    break;\n                case 'enableAutoFill':\n                    if (this.selectionModule) {\n                        this.enableBoxSelection();\n                        this.selectionModule.updateAutoFillPosition();\n                    }\n                    break;\n                case 'rowTemplate':\n                    this.rowTemplateFn = templateCompiler(this.rowTemplate);\n                    requireRefresh = true;\n                    break;\n                case 'emptyRecordTemplate':\n                    this.emptyRecordTemplateFn = templateCompiler(this.emptyRecordTemplate);\n                    requireRefresh = true;\n                    break;\n                case 'detailTemplate':\n                    this.detailTemplateFn = templateCompiler(this.detailTemplate);\n                    requireRefresh = true;\n                    break;\n                case 'allowGrouping':\n                    this.notify(events.uiUpdate, { module: 'group', enable: this.allowGrouping });\n                    this.headerModule.refreshUI();\n                    requireRefresh = true;\n                    checkCursor = true;\n                    if (this.height === '100%') {\n                        this.scrollModule.refresh();\n                    }\n                    break;\n                case 'enableInfiniteScrolling':\n                case 'childGrid':\n                    requireRefresh = true;\n                    childGridParent = this.parentDetails ? document.querySelector(\"#\" + this.parentDetails.parentID) : null;\n                    parentInstance = childGridParent ? childGridParent.ej2_instances[0] : null;\n                    if (this.childGrid && parentInstance && isNullOrUndefined(parentInstance.childGrid.childGrid)) {\n                        var childGridObject = Object.assign({}, parentInstance.childGrid, { childGrid: newProp.childGrid });\n                        parentInstance.setProperties({ childGrid: childGridObject }, true);\n                        while (!isNullOrUndefined(parentInstance.parentDetails)) {\n                            var currentParent = document.querySelector(\"#\" + parentInstance.parentDetails.parentID);\n                            var currentParentInstance = currentParent ? currentParent.ej2_instances[0] : null;\n                            if (currentParentInstance) {\n                                var currentChildObject = Object.assign({}, currentParentInstance.childGrid);\n                                currentChildObject.childGrid = parentInstance.childGrid;\n                                currentParentInstance.setProperties({ childGrid: currentChildObject }, true);\n                            }\n                            parentInstance = currentParentInstance;\n                        }\n                    }\n                    this.headerModule.refreshUI();\n                    break;\n                case 'toolbar':\n                    this.notify(events.uiUpdate, { module: 'toolbar' });\n                    if (this.height === '100%') {\n                        this.scrollModule.refresh();\n                    }\n                    break;\n                case 'groupSettings':\n                    this.notify(events.inBoundModelChanged, {\n                        module: 'group', properties: newProp.groupSettings,\n                        oldProperties: oldProp.groupSettings\n                    });\n                    break;\n                case 'aggregates':\n                    if (!this.aggregates.length && this.allowGrouping && this.groupSettings.columns.length) {\n                        requireRefresh = true;\n                    }\n                    this.notify(events.uiUpdate, { module: 'aggregate', properties: newProp });\n                    if (this.height === '100%') {\n                        this.scrollModule.refresh();\n                    }\n                    break;\n                case 'frozenColumns':\n                case 'frozenRows':\n                case 'enableVirtualization':\n                case 'enableColumnVirtualization':\n                case 'currencyCode':\n                case 'locale':\n                    this.log('frozen_rows_columns');\n                    freezeRefresh = true;\n                    requireGridRefresh = true;\n                    break;\n                case 'query':\n                    if (!this.getDataModule().isQueryInvokedFromData) {\n                        requireRefresh = true;\n                    }\n                    this.getDataModule().isQueryInvokedFromData = false;\n                    break;\n                case 'autoFit':\n                    if (this.autoFit) {\n                        this.preventAdjustColumns();\n                    }\n                    else {\n                        this.restoreAdjustColumns();\n                    }\n                    break;\n                default:\n                    this.extendedPropertyChange(prop, newProp, requireGridRefresh);\n            }\n        }\n        if (checkCursor) {\n            this.updateDefaultCursor();\n        }\n        if (requireGridRefresh) {\n            if (freezeRefresh || this.getFrozenColumns() || this.frozenRows) {\n                this.freezeRefresh();\n            }\n            else {\n                this.refresh();\n            }\n        }\n        else if (requireRefresh) {\n            this.notify(events.modelChanged, args);\n            requireRefresh = false;\n            this.maintainSelection(newProp.selectedRowIndex);\n        }\n    };\n    Grid.prototype.extendedPropertyChange = function (prop, newProp, requireGridRefresh) {\n        switch (prop) {\n            case 'enableRtl':\n                this.updateRTL();\n                if (this.allowPaging) {\n                    this.element.querySelector('.e-gridpager').ej2_instances[0].enableRtl = newProp.enableRtl;\n                    this.element.querySelector('.e-gridpager').ej2_instances[0].dataBind();\n                }\n                if (this.height !== 'auto') {\n                    this.scrollModule.removePadding(!newProp.enableRtl);\n                    this.scrollModule.setPadding();\n                }\n                if (this.toolbar && this.toolbarModule) {\n                    this.toolbarModule.getToolbar().ej2_instances[0].enableRtl = newProp.enableRtl;\n                    this.toolbarModule.getToolbar().ej2_instances[0].dataBind();\n                }\n                if (this.contextMenuItems && this.contextMenuModule) {\n                    this.contextMenuModule.getContextMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n                    this.contextMenuModule.getContextMenu().ej2_instances[0].dataBind();\n                }\n                if (this.showColumnMenu && this.columnMenuModule && !this.enableAdaptiveUI) {\n                    this.columnMenuModule.getColumnMenu().ej2_instances[0].enableRtl = newProp.enableRtl;\n                    this.columnMenuModule.getColumnMenu().ej2_instances[0].dataBind();\n                }\n                if (this.filterSettings.type === 'FilterBar' && this.filterSettings.showFilterBarOperator) {\n                    this.refreshHeader();\n                }\n                this.notify(events.rtlUpdated, {});\n                break;\n            case 'enableAltRow':\n                this.renderModule.refresh();\n                break;\n            case 'allowResizing':\n                this.headerModule.refreshUI();\n                this.updateResizeLines();\n                break;\n            case 'rowHeight':\n                if (this.rowHeight) {\n                    addClass([this.element], 'e-grid-min-height');\n                }\n                else {\n                    removeClass([this.element], 'e-grid-min-height');\n                }\n                this.renderModule.refresh();\n                this.headerModule.refreshUI();\n                break;\n            case 'gridLines':\n                this.updateGridLines();\n                break;\n            case 'showColumnMenu':\n                this.headerModule.refreshUI();\n                this.notify(events.uiUpdate, { module: 'columnMenu', enable: true });\n                break;\n            case 'columnMenuItems':\n                this.notify(events.uiUpdate, { module: 'columnMenu', enable: this.columnMenuItems });\n                break;\n            case 'contextMenuItems':\n                this.notify(events.uiUpdate, { module: 'contextMenu', enable: this.contextMenuItems });\n                break;\n            case 'showColumnChooser':\n                this.notify(events.uiUpdate, { module: 'columnChooser', enable: this.showColumnChooser });\n                break;\n            case 'filterSettings':\n                this.updateStackedFilter();\n                this.notify(events.inBoundModelChanged, { module: 'filter', properties: newProp.filterSettings });\n                break;\n            case 'searchSettings':\n                this.notify(events.inBoundModelChanged, { module: 'search', properties: newProp.searchSettings });\n                break;\n            case 'sortSettings':\n                this.notify(events.inBoundModelChanged, { module: 'sort' });\n                break;\n            case 'selectionSettings':\n                this.notify(events.inBoundModelChanged, { module: 'selection', properties: newProp.selectionSettings });\n                break;\n            case 'editSettings':\n                this.notify(events.inBoundModelChanged, { module: 'edit', properties: newProp.editSettings });\n                break;\n            case 'allowTextWrap':\n            case 'textWrapSettings':\n                if (this.allowTextWrap) {\n                    this.applyTextWrap();\n                }\n                else {\n                    this.removeTextWrap();\n                }\n                this.notify(events.freezeRender, { case: 'textwrap', isModeChg: (prop === 'textWrapSettings') });\n                break;\n            case 'dataSource':\n                // eslint-disable-next-line no-case-declarations\n                var pending_1 = this.getDataModule().getState();\n                if (this.allowSelection && this.isPersistSelection && !(pending_1 && pending_1.isPending)) {\n                    this.clearSelection();\n                }\n                if (!isNullOrUndefined(this.dataSource) && this.dataSource.result) {\n                    this.isVirtualAdaptive = false;\n                }\n                if (Object.getPrototypeOf(newProp).deepWatch) {\n                    var pKeyField = this.getPrimaryKeyFieldNames()[0];\n                    for (var i = 0, props = Object.keys(newProp.dataSource); i < props.length; i++) {\n                        this.setRowData(getValue(pKeyField, this.dataSource[props[parseInt(i.toString(), 10)]]), this.dataSource[props[parseInt(i.toString(), 10)]]);\n                    }\n                }\n                else if (pending_1.isPending) {\n                    var gResult = !isNullOrUndefined(this.dataSource) ? this.dataSource.result : [];\n                    var names = (pending_1.group || []);\n                    if (names.length && !this.groupSettings.enableLazyLoading && !(gResult.length && gResult[0].field)) {\n                        for (var i = 0; i < names.length; i++) {\n                            gResult = DataUtil.group(gResult, names[parseInt(i.toString(), 10)], pending_1.aggregates || []);\n                        }\n                    }\n                    this.dataSource = {\n                        result: gResult, count: this.dataSource.count,\n                        aggregates: this.dataSource.aggregates\n                    };\n                    this.getDataModule().setState({});\n                    pending_1.resolver(this.dataSource);\n                }\n                else {\n                    this.getDataModule().setState({ isDataChanged: false });\n                    this.notify(events.dataSourceModified, {});\n                    if (!requireGridRefresh) {\n                        this.renderModule.refresh();\n                        if (this.isCheckBoxSelection) {\n                            this.notify(events.beforeRefreshOnDataChange, {});\n                        }\n                    }\n                }\n                this.scrollRefresh();\n                break;\n            case 'enableHover':\n                // eslint-disable-next-line no-case-declarations\n                var action = newProp.enableHover ? addClass : removeClass;\n                action([this.element], 'e-gridhover');\n                break;\n            case 'selectedRowIndex':\n                if (!this.isSelectedRowIndexUpdating) {\n                    this.selectRow(newProp.selectedRowIndex);\n                }\n                this.isSelectedRowIndexUpdating = false;\n                break;\n            case 'resizeSettings':\n                this.widthService.setWidthToTable();\n                break;\n            case 'enableAdaptiveUI':\n                this.notify(events.setFullScreenDialog, {});\n                break;\n            case 'rowRenderingMode':\n                this.enableVerticalRendering();\n                this.notify(events.rowModeChange, {});\n                this.refresh();\n                break;\n            case 'enableStickyHeader':\n                this.scrollModule.addStickyListener(newProp.enableStickyHeader);\n                break;\n        }\n    };\n    Grid.prototype.maintainSelection = function (index) {\n        var _this_1 = this;\n        if (index !== -1) {\n            var fn_1 = function () {\n                _this_1.selectRow(index);\n                _this_1.off(events.contentReady, fn_1);\n            };\n            this.on(events.contentReady, fn_1, this);\n        }\n    };\n    /**\n     * @param {Object} prop - Defines the property\n     * @param {boolean} muteOnChange - Defines the mute on change\n     * @returns {void}\n     * @private\n     */\n    Grid.prototype.setProperties = function (prop, muteOnChange) {\n        _super.prototype.setProperties.call(this, prop, muteOnChange);\n        var filterSettings = 'filterSettings';\n        if (prop[\"\" + filterSettings] && this.filterModule && muteOnChange) {\n            this.filterModule.refreshFilter();\n        }\n    };\n    /**\n     * @hidden\n     * @returns {number} - Returns the tables count\n     */\n    Grid.prototype.getTablesCount = function () {\n        return this.tablesCount;\n    };\n    /**\n     * @hidden\n     * @returns {void}\n     */\n    Grid.prototype.updateDefaultCursor = function () {\n        var headerCells = [].slice.call(this.getHeaderContent().querySelectorAll('.e-headercell:not(.e-stackedheadercell)'));\n        var stdHdrCell = [].slice.call(this.getHeaderContent().getElementsByClassName('e-stackedheadercell'));\n        var cols = this.getColumns();\n        for (var i = 0; i < headerCells.length; i++) {\n            var cell = headerCells[parseInt(i.toString(), 10)];\n            if (this.allowGrouping || this.allowReordering || this.allowSorting) {\n                if (!cols[parseInt(i.toString(), 10)].allowReordering || !cols[parseInt(i.toString(), 10)].allowSorting\n                    || !cols[parseInt(i.toString(), 10)].allowGrouping) {\n                    cell.classList.add('e-defaultcursor');\n                }\n                else {\n                    cell.classList.add('e-mousepointer');\n                }\n            }\n        }\n        for (var count = 0; count < stdHdrCell.length; count++) {\n            if (this.allowReordering) {\n                stdHdrCell[parseInt(count.toString(), 10)].classList.add('e-mousepointer');\n            }\n        }\n    };\n    Grid.prototype.updateColumnModel = function (columns, isRecursion) {\n        for (var i = 0, len = columns.length; i < len; i++) {\n            if (columns[parseInt(i.toString(), 10)].columns) {\n                this.updateColumnModel(columns[parseInt(i.toString(), 10)].columns, true);\n            }\n            else {\n                this.columnModel.push(columns[parseInt(i.toString(), 10)]);\n            }\n        }\n        if (isNullOrUndefined(isRecursion) || !isRecursion) {\n            this.updateLockableColumns();\n        }\n    };\n    Grid.prototype.getFrozenLeftCount = function () {\n        return this.getFrozenColumns() || this.getFrozenLeftColumnsCount();\n    };\n    Grid.prototype.isFrozenGrid = function () {\n        return this.getFrozenColumns() !== 0 || this.frozenLeftColumns.length !== 0 || this.frozenRightColumns.length !== 0 ||\n            this.fixedColumns.length !== 0;\n    };\n    Grid.prototype.getFrozenMode = function () {\n        return this.frozenName;\n    };\n    Grid.prototype.updateLockableColumns = function () {\n        var cols = this.columnModel;\n        var frozenCount = 0;\n        var movableCount = 0;\n        var frozenColumns = this.getFrozenColumns();\n        for (var i = 0; i < cols.length; i++) {\n            if (cols[parseInt(i.toString(), 10)].lockColumn) {\n                if (i < frozenColumns) {\n                    cols.splice(frozenCount, 0, cols.splice(i, 1)[0]);\n                    frozenCount++;\n                }\n                else {\n                    cols.splice(frozenColumns + movableCount, 0, cols.splice(i, 1)[0]);\n                    movableCount++;\n                }\n            }\n        }\n    };\n    Grid.prototype.checkLockColumns = function (cols) {\n        for (var i = 0; i < cols.length; i++) {\n            if (cols[parseInt(i.toString(), 10)].columns) {\n                this.checkLockColumns(cols[parseInt(i.toString(), 10)].columns);\n            }\n            else if (cols[parseInt(i.toString(), 10)].lockColumn) {\n                this.lockcolPositionCount++;\n            }\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.leftrightColumnWidth = function (position) {\n        var cols = position === 'left' ? this.getFrozenLeftColumns() : position === 'right' ? this.getFrozenRightColumns() : [];\n        var width = 0;\n        cols.filter(function (col) {\n            if (col.visible) {\n                width += parseInt(col.width.toString(), 10);\n            }\n        });\n        return width;\n    };\n    /**\n     * Gets the columns from the Grid.\n     *\n     * @param {boolean} isRefresh - Defines the boolean whether to refresh\n     * @returns {Column[]} - returns the column\n     */\n    Grid.prototype.getColumns = function (isRefresh) {\n        var _this_1 = this;\n        var inview = this.inViewIndexes.map(function (v) { return v - _this_1.groupSettings.columns.length; }).filter(function (v) { return v > -1; });\n        var vLen = inview.length;\n        if (!this.enableColumnVirtualization || isNullOrUndefined(this.columnModel) || this.columnModel.length === 0 || isRefresh) {\n            this.columnModel = [];\n            this.updateColumnModel(this.columns);\n        }\n        var columns = vLen === 0 ? this.columnModel :\n            this.columnModel.slice(inview[0], inview[vLen - 1] + 1);\n        var left = [];\n        var right = [];\n        var movable = [];\n        var isLeftRightFrozen = this.enableColumnVirtualization && this.isPreparedFrozenColumns && vLen === 0;\n        if (isLeftRightFrozen) {\n            this.frozenRightColumns = [];\n            this.frozenLeftColumns = [];\n        }\n        for (var i = 0; i < columns.length; i++) {\n            if (columns[parseInt(i.toString(), 10)].freeze === 'Left' || columns[parseInt(i.toString(), 10)].isFrozen) {\n                left.push(columns[parseInt(i.toString(), 10)]);\n                if (isLeftRightFrozen) {\n                    this.frozenLeftColumns.push(columns[parseInt(i.toString(), 10)]);\n                }\n            }\n            else if (columns[parseInt(i.toString(), 10)].freeze === 'Right') {\n                right.push(columns[parseInt(i.toString(), 10)]);\n                if (isLeftRightFrozen) {\n                    this.frozenRightColumns.push(columns[parseInt(i.toString(), 10)]);\n                }\n            }\n            else {\n                movable.push(columns[parseInt(i.toString(), 10)]);\n            }\n        }\n        if (this.enableColumnVirtualization && this.isFrozenGrid()) {\n            if (this.frozenLeftColumns.length) {\n                left = this.frozenLeftColumns;\n            }\n            if (this.frozenRightColumns.length) {\n                right = this.frozenRightColumns;\n            }\n        }\n        return left.concat(movable).concat(right);\n    };\n    /**\n     * @private\n     * @param {string} stackedHeader - Defines the stacked header\n     * @param {Column[]} col - Defines the column\n     * @returns {Column} Returns the Column\n     */\n    Grid.prototype.getStackedHeaderColumnByHeaderText = function (stackedHeader, col) {\n        for (var i = 0; i < col.length; i++) {\n            var individualColumn = col[parseInt(i.toString(), 10)];\n            if (individualColumn.field === stackedHeader || individualColumn.headerText === stackedHeader) {\n                this.stackedColumn = individualColumn;\n                break;\n            }\n            else if (individualColumn.columns) {\n                this.getStackedHeaderColumnByHeaderText(stackedHeader, individualColumn.columns);\n            }\n        }\n        return this.stackedColumn;\n    };\n    /**\n     * @private\n     * @returns {number[]} Returns the column indexes\n     */\n    Grid.prototype.getColumnIndexesInView = function () {\n        return this.inViewIndexes;\n    };\n    /**\n     * @private\n     * @returns {Query} - returns the query\n     */\n    Grid.prototype.getQuery = function () {\n        return this.query;\n    };\n    /**\n     * @private\n     * @returns {object} - returns the locale constants\n     */\n    Grid.prototype.getLocaleConstants = function () {\n        return this.defaultLocale;\n    };\n    /**\n     * @param {number[]} indexes - specifies the indexes\n     * @returns {void}\n     * @private\n     */\n    Grid.prototype.setColumnIndexesInView = function (indexes) {\n        this.inViewIndexes = indexes;\n    };\n    /**\n     * Gets the visible columns from the Grid.\n     *\n     * @returns {Column[]} returns the column\n     */\n    Grid.prototype.getVisibleColumns = function () {\n        return this.getCurrentVisibleColumns();\n    };\n    /**\n     * Gets the header div of the Grid.\n     *\n     * @returns {Element} - Returns the element\n     */\n    Grid.prototype.getHeaderContent = function () {\n        return this.headerModule.getPanel();\n    };\n    /**\n     * Sets the header div of the Grid to replace the old header.\n     *\n     * @param  {Element} element - Specifies the Grid header.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.setGridHeaderContent = function (element) {\n        this.headerModule.setPanel(element);\n    };\n    /**\n     * Gets the content table of the Grid.\n     *\n     * @returns {Element} - Returns the element\n     */\n    Grid.prototype.getContentTable = function () {\n        return this.contentModule.getTable();\n    };\n    /**\n     * Sets the content table of the Grid to replace the old content table.\n     *\n     * @param  {Element} element - Specifies the Grid content table.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.setGridContentTable = function (element) {\n        this.contentModule.setTable(element);\n    };\n    /**\n     * Gets the content div of the Grid.\n     *\n     * @returns {Element} Returns the element\n     */\n    Grid.prototype.getContent = function () {\n        return this.contentModule.getPanel();\n    };\n    /**\n     * Sets the content div of the Grid to replace the old Grid content.\n     *\n     * @param  {Element} element - Specifies the Grid content.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.setGridContent = function (element) {\n        this.contentModule.setPanel(element);\n    };\n    /**\n     * Gets the header table element of the Grid.\n     *\n     * @returns {Element} returns the element\n     */\n    Grid.prototype.getHeaderTable = function () {\n        return this.headerModule.getTable();\n    };\n    /**\n     * Sets the header table of the Grid to replace the old one.\n     *\n     * @param  {Element} element - Specifies the Grid header table.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.setGridHeaderTable = function (element) {\n        this.headerModule.setTable(element);\n    };\n    /**\n     * Gets the footer div of the Grid.\n     *\n     * @returns {Element} returns the element\n     */\n    Grid.prototype.getFooterContent = function () {\n        this.footerElement = this.element.getElementsByClassName(literals.gridFooter)[0];\n        return this.footerElement;\n    };\n    /**\n     * Gets the footer table element of the Grid.\n     *\n     * @returns {Element} returns the element\n     */\n    Grid.prototype.getFooterContentTable = function () {\n        this.footerElement = this.element.getElementsByClassName(literals.gridFooter)[0];\n        return this.footerElement.firstChild.firstChild;\n    };\n    /**\n     * Gets the pager of the Grid.\n     *\n     * @returns {Element} returns the element\n     */\n    Grid.prototype.getPager = function () {\n        return this.gridPager; //get element from pager\n    };\n    /**\n     * Sets the pager of the Grid to replace the old pager.\n     *\n     * @param  {Element} element - Specifies the Grid pager.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.setGridPager = function (element) {\n        this.gridPager = element;\n    };\n    /**\n     * Gets a row by index.\n     *\n     * @param  {number} index - Specifies the row index.\n     *\n     * @returns {Element} returns the element\n     */\n    Grid.prototype.getRowByIndex = function (index) {\n        if (this.enableVirtualization && this.groupSettings.enableLazyLoading) {\n            return this.lazyLoadRender.getRowByIndex(index);\n        }\n        else {\n            return this.contentModule.getRowByIndex(index);\n        }\n    };\n    /**\n     * Gets a movable tables row by index.\n     *\n     * @param  {number} index - Specifies the row index.\n     *\n     * @returns {Element} returns the element\n\n     */\n    Grid.prototype.getMovableRowByIndex = function (index) {\n        return this.contentModule.getRowByIndex(index);\n    };\n    /**\n     * Gets a frozen tables row by index.\n     *\n     * @param  {number} index - Specifies the row index.\n     * @returns {Element} returns the element\n\n     */\n    Grid.prototype.getFrozenRowByIndex = function (index) {\n        return this.contentModule.getRowByIndex(index);\n    };\n    /**\n     * Gets all the data rows of the Grid.\n     *\n     * @returns {Element[]} returns the element\n     */\n    Grid.prototype.getRows = function () {\n        return this.contentModule.getRowElements();\n    };\n    /**\n     * Gets a frozen right tables row element by index.\n     *\n     * @param  {number} index - Specifies the row index.\n     * @returns {Element} returns the element\n\n     */\n    Grid.prototype.getFrozenRightRowByIndex = function (index) {\n        return this.contentModule.getRowByIndex(index);\n    };\n    /**\n     * Get a row information based on cell\n     *\n     * @param {Element | EventTarget} target - specifies the element\n     *\n     * @returns {RowInfo} returns the row info\n     */\n    Grid.prototype.getRowInfo = function (target) {\n        var ele = target;\n        var args = { target: target };\n        if (!isNullOrUndefined(target) && isNullOrUndefined(parentsUntil(ele, 'e-detailrowcollapse')\n            && isNullOrUndefined(parentsUntil(ele, 'e-recordplusexpand')))) {\n            var cell = closest(ele, '.' + literals.rowCell);\n            if (!cell) {\n                var row_1 = closest(ele, '.' + literals.row);\n                if (!isNullOrUndefined(row_1) && !row_1.classList.contains('e-addedrow')) {\n                    var rowObj = this.getRowObjectFromUID(row_1.getAttribute('data-uid'));\n                    var rowIndex = parseInt(row_1.getAttribute(literals.dataRowIndex), 10);\n                    args = { row: row_1, rowData: rowObj.data, rowIndex: rowIndex };\n                }\n                return args;\n            }\n            var cellIndex = parseInt(cell.getAttribute(literals.dataColIndex), 10);\n            var row_2 = closest(cell, '.' + literals.row);\n            if (!isNullOrUndefined(cell) && !isNaN(cellIndex) && !isNullOrUndefined(row_2)) {\n                var rowIndex = parseInt(row_2.getAttribute(literals.dataRowIndex), 10);\n                var rows = this.contentModule.getRows();\n                var index = cellIndex + this.getIndentCount();\n                var rowsObject = rows.filter(function (r) { return r.uid === row_2.getAttribute('data-uid'); });\n                var rowData = {};\n                var column = void 0;\n                if (Object.keys(rowsObject).length) {\n                    rowData = rowsObject[0].data;\n                    column = rowsObject[0].cells[parseInt(index.toString(), 10)].column;\n                }\n                args = { cell: cell, cellIndex: cellIndex, row: row_2, rowIndex: rowIndex, rowData: rowData, column: column, target: target };\n            }\n        }\n        return args;\n    };\n    /**\n     * Gets the Grid's movable content rows from frozen grid.\n     *\n     * @returns {Element[]} returns the element\n\n     */\n    Grid.prototype.getMovableRows = function () {\n        return this.contentModule.getRowElements();\n    };\n    /**\n     * Gets the Grid's frozen right content rows from frozen grid.\n     *\n     * @returns {Element[]} returns the element\n\n     */\n    Grid.prototype.getFrozenRightRows = function () {\n        return this.contentModule.getRowElements();\n    };\n    /**\n     * Gets all the Grid's data rows.\n     *\n     * @returns {Element[]} returns the element\n     */\n    Grid.prototype.getDataRows = function () {\n        return this.getAllDataRows();\n    };\n    /**\n     * @param {boolean} includeAdd - specifies includeAdd\n     * @returns {Element[]} returns the element\n     * @hidden\n     */\n    Grid.prototype.getAllDataRows = function (includeAdd) {\n        if (isNullOrUndefined(this.getContentTable().querySelector(literals.tbody))) {\n            return [];\n        }\n        var tbody = this.getContentTable().querySelector(literals.tbody);\n        var rows = [].slice.call(tbody.children);\n        if (this.frozenRows) {\n            var hdrTbody = this.getHeaderTable().querySelector(literals.tbody);\n            var freezeRows = [].slice.call(hdrTbody.children);\n            rows = this.addMovableRows(freezeRows, rows);\n        }\n        var dataRows = this.generateDataRows(rows, includeAdd);\n        return dataRows;\n    };\n    /**\n     * @param {HTMLElement[]} fRows - Defines the frozen Rows\n     * @param {HTMLElement[]} mrows - Defines the movable Rows\n     * @returns {HTMLElement[]} Returns the element\n     * @hidden\n     */\n    Grid.prototype.addMovableRows = function (fRows, mrows) {\n        for (var i = 0, len = mrows.length; i < len; i++) {\n            fRows.push(mrows[parseInt(i.toString(), 10)]);\n        }\n        return fRows;\n    };\n    Grid.prototype.generateDataRows = function (rows, includAdd) {\n        var dRows = [];\n        for (var i = 0, len = rows.length; i < len; i++) {\n            if (rows[parseInt(i.toString(), 10)].classList.contains(literals.row)\n                && (!rows[parseInt(i.toString(), 10)].classList.contains('e-hiddenrow') || includAdd)) {\n                if (this.isCollapseStateEnabled()) {\n                    dRows[parseInt(rows[parseInt(i.toString(), 10)].getAttribute('data-rowindex'), 10)] = rows[parseInt(i.toString(), 10)];\n                }\n                else {\n                    dRows.push(rows[parseInt(i.toString(), 10)]);\n                }\n            }\n        }\n        return dRows;\n    };\n    /**\n     * Gets all the Grid's movable table data rows.\n     *\n     * @returns {Element[]} Returns the element\n\n     */\n    Grid.prototype.getMovableDataRows = function () {\n        return this.getAllMovableDataRows();\n    };\n    /**\n     * @param {boolean} includeAdd Defines the include add in boolean\n     * @returns {Element[]} Returns the element\n\n     * @hidden\n     */\n    Grid.prototype.getAllMovableDataRows = function (includeAdd) {\n        return this.getAllDataRows(includeAdd);\n    };\n    /**\n     * Gets all the Grid's frozen table data rows.\n     *\n     * @returns {Element[]} returns the element\n\n     */\n    Grid.prototype.getFrozenDataRows = function () {\n        return this.getAllFrozenDataRows();\n    };\n    /**\n     * @param {boolean} includeAdd Defines the include add in boolean\n     * @returns {Element[]} Returns the element\n\n     * @hidden\n     */\n    Grid.prototype.getAllFrozenDataRows = function (includeAdd) {\n        return this.getAllDataRows(includeAdd);\n    };\n    /**\n     * Gets all the Grid's frozen right table data rows.\n     *\n     * @returns {Element[]} Returns the Element\n\n     */\n    Grid.prototype.getFrozenRightDataRows = function () {\n        return this.getAllFrozenRightDataRows();\n    };\n    /**\n     * @param {boolean} includeAdd Defines the include add in boolean\n     * @returns {Element[]} Returns the element\n\n     * @hidden\n     */\n    Grid.prototype.getAllFrozenRightDataRows = function (includeAdd) {\n        return this.getAllDataRows(includeAdd);\n    };\n    /**\n     * Updates particular cell value based on the given primary key value.\n     * > Primary key column must be specified using `columns.isPrimaryKey` property.\n     *\n     * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n     * @param {string } field - Specifies the field name which you want to update.\n     * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.setCellValue = function (key, field, value) {\n        var cells = 'cells';\n        var rowData = 'data';\n        var rowIdx = 'index';\n        var rowuID = 'uid';\n        var pkName = this.getPrimaryKeyFieldNames()[0];\n        var cell = new CellRenderer(this, this.serviceLocator);\n        var fieldIdx = this.getColumnIndexByField(field);\n        var col = this.getColumnByField(field);\n        var rowObjects = this.contentModule.getRows();\n        var selectedRow = rowObjects.filter(function (r) {\n            return getValue(pkName, r.data) === key;\n        })[0];\n        var tr = selectedRow ? this.element.querySelector('[data-uid=' + selectedRow[\"\" + rowuID] + ']') : null;\n        if (!isNullOrUndefined(tr)) {\n            if (typeof value === 'string') {\n                value = this.sanitize(value);\n            }\n            setValue(field, value, selectedRow[\"\" + rowData]);\n            var left = 0;\n            if (this.isRowDragable()) {\n                left++;\n            }\n            var td = this.enableVirtualization ? tr.children[parseInt(fieldIdx.toString(), 10)]\n                : this.getCellFromIndex(selectedRow[\"\" + rowIdx], fieldIdx);\n            if (!isNullOrUndefined(td)) {\n                var Idx = 0;\n                if (this.groupSettings.columns.length) {\n                    fieldIdx = fieldIdx + this.groupSettings.columns.length;\n                }\n                if (this.childGrid || this.detailTemplate) {\n                    fieldIdx++;\n                }\n                if (this.isRowDragable()) {\n                    fieldIdx++;\n                }\n                var sRow = selectedRow[\"\" + cells][fieldIdx - Idx];\n                cell.refreshTD(td, sRow, selectedRow[\"\" + rowData], { index: selectedRow[\"\" + rowIdx] });\n                if (this.isReact) {\n                    td = this.enableVirtualization ? tr.children[parseInt(fieldIdx.toString(), 10)]\n                        : this.getCellFromIndex(selectedRow[\"\" + rowIdx], fieldIdx);\n                }\n                if (this.aggregates.length > 0) {\n                    this.notify(events.refreshFooterRenderer, {});\n                    if (this.groupSettings.columns.length > 0) {\n                        this.notify(events.groupAggregates, {});\n                    }\n                }\n                /* tslint:disable:no-string-literal */\n                if (!isNullOrUndefined(selectedRow) && !isNullOrUndefined(selectedRow['changes'])) {\n                    selectedRow['changes'][\"\" + field] = value;\n                }\n                /* tslint:disable:no-string-literal */\n                this.trigger(events.queryCellInfo, {\n                    cell: td, column: col, data: selectedRow[\"\" + rowData]\n                });\n                if (this.isReact && td.getAttribute('tabindex') === '0' && td.classList.contains('e-focused')) {\n                    td.focus();\n                }\n            }\n        }\n        else {\n            return;\n        }\n    };\n    /**\n     * @param {string} columnUid - Defines column uid\n     * @param {boolean} renderTemplates - Defines renderTemplates need to invoke\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.refreshReactColumnTemplateByUid = function (columnUid, renderTemplates) {\n        var _this_1 = this;\n        if (this.isReact) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            this.clearTemplate(['columnTemplate'], undefined, function () {\n                var isChildGrid = _this_1.childGrid && _this_1.element.querySelectorAll('.e-childgrid').length ? true : false;\n                var rows = isChildGrid ? _this_1.getContentTable().querySelectorAll('.e-row') :\n                    _this_1.getDataRows();\n                _this_1.refreshReactTemplateTD(rows, isChildGrid);\n                if (renderTemplates) {\n                    _this_1.renderTemplates();\n                }\n            });\n        }\n    };\n    /**\n     * @param {Element[] | NodeListOf<Element>} rows - Defines the rows\n     * @param {boolean} isChildGrid - Defines whether it is a Hierarchy Grid.\n     * @param {boolean} isFrozen - Defines whether it is a Frozen Grid\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.refreshReactTemplateTD = function (rows, isChildGrid, isFrozen) {\n        var cells = 'cells';\n        var rowIdx = 'index';\n        var indent = this.getIndentCount();\n        var childIndent = 0;\n        var isChildRow = false;\n        for (var j = 0; j < rows.length; j++) {\n            var rowsObj = this.getRowObjectFromUID(rows[parseInt(j.toString(), 10)].getAttribute('data-uid'));\n            if (isChildGrid && !rowsObj && parentsUntil(rows[parseInt(j.toString(), 10)], 'e-childgrid')) {\n                var gridObj = parentsUntil(rows[parseInt(j.toString(), 10)], 'e-childgrid').ej2_instances[0];\n                rowsObj = gridObj.getRowObjectFromUID(rows[parseInt(j.toString(), 10)].getAttribute('data-uid'));\n                childIndent = gridObj.getIndentCount();\n                isChildRow = true;\n            }\n            if (rowsObj && rowsObj.isDataRow && !isNullOrUndefined(rowsObj.index) &&\n                !rows[parseInt(j.toString(), 10)].classList.contains('e-editedrow')) {\n                for (var i = 0; i < rowsObj[\"\" + cells].length; i++) {\n                    var cell = rowsObj[\"\" + cells][parseInt(i.toString(), 10)];\n                    if (cell.isTemplate) {\n                        var cellRenderer = new CellRenderer(this, this.serviceLocator);\n                        var td = isChildGrid ? rows[parseInt(j.toString(), 10)]\n                            .children[cell.index + (isChildRow ? childIndent : indent)] : this.getCellFromIndex(j, isFrozen ? cell.index : i - indent);\n                        cellRenderer.refreshTD(td, cell, rowsObj.data, { index: rowsObj[\"\" + rowIdx] });\n                    }\n                }\n            }\n            isChildRow = false;\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.refreshGroupCaptionFooterTemplate = function () {\n        var isChildGrid = this.childGrid && this.element.querySelectorAll('.e-childgrid').length ? true : false;\n        var rows = this.getContentTable().querySelectorAll('.e-groupcaptionrow, .e-groupfooterrow');\n        for (var i = 0; i < rows.length; i++) {\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            var gridObj = this;\n            var rowsObj = this.getRowObjectFromUID(rows[parseInt(i.toString(), 10)].getAttribute('data-uid'));\n            if (isChildGrid && !rowsObj && parentsUntil(rows[parseInt(i.toString(), 10)], 'e-childgrid')) {\n                gridObj = parentsUntil(rows[parseInt(i.toString(), 10)], 'e-childgrid').ej2_instances[0];\n                rowsObj = gridObj.getRowObjectFromUID(rows[parseInt(i.toString(), 10)].getAttribute('data-uid'));\n            }\n            if (rowsObj) {\n                var cells = rowsObj.cells.filter(function (cell) { return cell.isDataCell; });\n                var args = { cells: cells, data: rowsObj.data, dataUid: rowsObj.uid };\n                gridObj.notify(events.refreshAggregateCell, args);\n            }\n        }\n    };\n    /**\n     * @param {string} columnUid - Defines column uid\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.refreshReactHeaderTemplateByUid = function (columnUid) {\n        if (this.isReact) {\n            var cells = 'cells';\n            var rowsObj = this.headerModule.rows;\n            var cellIndex = this.getNormalizedColumnIndex(columnUid);\n            var _loop_1 = function (j) {\n                var cell = rowsObj[parseInt(j.toString(), 10)][\"\" + cells][parseInt(cellIndex.toString(), 10)];\n                if (cell && cell.column.uid === columnUid) {\n                    var headerCellRenderer = new HeaderCellRenderer(this_1, this_1.serviceLocator);\n                    var td = parentsUntil(this_1.element.querySelectorAll('[e-mappinguid=' + columnUid + ']')[0], 'e-templatecell');\n                    headerCellRenderer.refresh(cell, td);\n                    var cols = this_1.sortSettings.columns;\n                    var columnIndex = cols.findIndex(function (col) { return col.field === cell.column.field; });\n                    if (columnIndex !== -1) {\n                        var header = this_1.getColumnHeaderByField(cell.column.field);\n                        this_1.ariaService.setSort(header, (cols[parseInt(columnIndex.toString(), 10)].direction).toLowerCase());\n                        if (cols.length > 1) {\n                            header.querySelector('.e-headercelldiv').insertBefore(this_1.createElement('span', { className: 'e-sortnumber', innerHTML: (columnIndex + 1).toString() }), header.querySelector('.e-headertext'));\n                        }\n                        var filterElement = header.querySelector('.e-sortfilterdiv');\n                        if (cols[parseInt(columnIndex.toString(), 10)].direction === 'Ascending') {\n                            classList(filterElement, ['e-ascending', 'e-icon-ascending'], []);\n                        }\n                        else {\n                            classList(filterElement, ['e-descending', 'e-icon-descending'], []);\n                        }\n                    }\n                }\n            };\n            var this_1 = this;\n            for (var j = 0; j < rowsObj.length; j++) {\n                _loop_1(j);\n            }\n        }\n    };\n    /**\n     * Updates and refresh the particular row values based on the given primary key value.\n     * > Primary key column must be specified using `columns.isPrimaryKey` property.\n     *\n     * @param {string| number} key - Specifies the PrimaryKey value of dataSource.\n     * @param {Object} rowData - To update new data for the particular row.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.setRowData = function (key, rowData) {\n        var rowuID = 'uid';\n        var rowObjects = this.contentModule.getRows();\n        var pkName = this.getPrimaryKeyFieldNames()[0];\n        if (this.groupSettings.columns.length > 0 && this.aggregates.length > 0) {\n            rowObjects = rowObjects.filter(function (row) { return row.isDataRow; });\n        }\n        var selectedRow = rowObjects.filter(function (r) {\n            return getValue(pkName, r.data) === key;\n        })[0];\n        var selectRowEle = selectedRow ? [].slice.call(this.element.querySelectorAll('[data-uid=' + selectedRow[\"\" + rowuID] + ']')) : undefined;\n        if (!isNullOrUndefined(selectedRow) && selectRowEle.length) {\n            selectedRow.changes = rowData;\n            if (this.frozenRows) {\n                var fRowTr = this.getRowsObject()[selectedRow.index];\n                this.setFrozenRowData(fRowTr, rowData);\n            }\n            else {\n                this.setFrozenRowData(selectedRow, rowData);\n            }\n            if (this.aggregates.length > 0) {\n                this.notify(events.refreshFooterRenderer, {});\n                if (this.groupSettings.columns.length > 0) {\n                    this.notify(events.groupAggregates, {});\n                }\n            }\n        }\n        else {\n            return;\n        }\n    };\n    Grid.prototype.setFrozenRowData = function (fTr, rowData) {\n        var rowRenderer = new RowRenderer(this.serviceLocator, null, this);\n        fTr.changes = rowData;\n        refreshForeignData(fTr, this.getForeignKeyColumns(), fTr.changes);\n        rowRenderer.refresh(fTr, this.getColumns(), true);\n    };\n    /**\n     * Gets a cell by row and column index.\n     *\n     * @param  {number} rowIndex - Specifies the row index.\n     * @param  {number} columnIndex - Specifies the column index.\n     *\n     * @returns {Element} Returns the Element\n     */\n    Grid.prototype.getCellFromIndex = function (rowIndex, columnIndex) {\n        var col = this.getColumnByIndex(columnIndex);\n        return getCellByColAndRowIndex(this, col, rowIndex, columnIndex);\n    };\n    /**\n     * Gets a movable table cell by row and column index.\n     *\n     * @param  {number} rowIndex - Specifies the row index.\n     * @param  {number} columnIndex - Specifies the column index.\n     *\n     * @returns {Element} Returns the Element\n\n     */\n    Grid.prototype.getMovableCellFromIndex = function (rowIndex, columnIndex) {\n        return this.getCellFromIndex(rowIndex, columnIndex);\n    };\n    /**\n     * Gets a frozen right table cell by row and column index.\n     *\n     * @param  {number} rowIndex - Specifies the row index.\n     * @param  {number} columnIndex - Specifies the column index.\n     * @returns {Element} Returns the Element\n\n     */\n    Grid.prototype.getFrozenRightCellFromIndex = function (rowIndex, columnIndex) {\n        return this.getCellFromIndex(rowIndex, columnIndex);\n    };\n    /**\n     * Gets a column header by column index.\n     *\n     * @param  {number} index - Specifies the column index.\n     *\n     * @returns {Element} Returns the Element\n     */\n    Grid.prototype.getColumnHeaderByIndex = function (index) {\n        return this.getHeaderTable().getElementsByClassName('e-headercell')[parseInt(index.toString(), 10)];\n    };\n    /**\n     * Gets a movable column header by column index.\n     *\n     * @param  {number} index - Specifies the column index.\n     * @returns {Element} Returns the Element\n\n     */\n    Grid.prototype.getMovableColumnHeaderByIndex = function (index) {\n        return this.getColumnHeaderByIndex(index);\n    };\n    /**\n     * Gets a frozen right column header by column index.\n     *\n     * @param  {number} index - Specifies the column index.\n     * @returns {Element} Returns the Element\n\n     */\n    Grid.prototype.getFrozenRightColumnHeaderByIndex = function (index) {\n        return this.getColumnHeaderByIndex(index);\n    };\n    /**\n     * Gets a frozen left column header by column index.\n     *\n     * @param  {number} index - Specifies the column index.\n     * @returns {Element} Returns the Element\n\n     */\n    Grid.prototype.getFrozenLeftColumnHeaderByIndex = function (index) {\n        return this.getColumnHeaderByIndex(index);\n    };\n    /**\n     * @param {string} uid - Defines the uid\n     * @param {boolean} isMovable - Defines isMovable\n     * @param {boolean} isFrozenRight - Defines isFrozenRight\n     * @returns {Row<Column>} Returns the row object\n     * @hidden\n     */\n    Grid.prototype.getRowObjectFromUID = function (uid) {\n        var rows = this.contentModule.getRows();\n        var row = this.rowObject(rows, uid);\n        if (isNullOrUndefined(row) && this.enableVirtualization && this.groupSettings.columns.length > 0) {\n            row = this.rowObject(this.vRows, uid);\n            return row;\n        }\n        return row;\n    };\n    Grid.prototype.rowObject = function (rows, uid) {\n        if (rows) {\n            for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n                var row = rows_1[_i];\n                if (row.uid === uid) {\n                    return row;\n                }\n            }\n        }\n        return null;\n    };\n    /**\n     * @hidden\n     * @returns {Row<Column>[]} Returns the Row object\n     */\n    Grid.prototype.getRowsObject = function () {\n        return this.contentModule.getRows();\n    };\n    /**\n     * @hidden\n     * @returns {Row<Column>[]} Returns the Row object\n\n     */\n    Grid.prototype.getMovableRowsObject = function () {\n        return this.contentModule.getRows();\n    };\n    /**\n     * @hidden\n     * @returns {Row<Column>[]} Returns the Row object\n\n     */\n    Grid.prototype.getFrozenRightRowsObject = function () {\n        return this.contentModule.getRows();\n    };\n    /**\n     * Gets a column header by column name.\n     *\n     * @param  {string} field - Specifies the column name.\n     *\n     * @returns {Element} - Returns the element\n     */\n    Grid.prototype.getColumnHeaderByField = function (field) {\n        var column = this.getColumnByField(field);\n        return column ? this.getColumnHeaderByUid(column.uid) : undefined;\n    };\n    /**\n     * Gets a column header by UID.\n     *\n     * @param {string} uid - Specifies the column uid.\n     *\n     * @returns {Element} - Returns the element\n     */\n    Grid.prototype.getColumnHeaderByUid = function (uid) {\n        var element = this.getHeaderContent().querySelector('[e-mappinguid=' + uid + ']');\n        return element ? element.parentElement : undefined;\n    };\n    /**\n     * @hidden\n     * @param {number} index - Defines the index\n     * @returns {Column} Returns the column\n     */\n    Grid.prototype.getColumnByIndex = function (index) {\n        var column;\n        this.getColumns().some(function (col, i) {\n            column = col;\n            return i === index;\n        });\n        return column;\n    };\n    /**\n     * Gets a Column by column name.\n     *\n     * @param  {string} field - Specifies the column name.\n     *\n     * @returns {Column} Returns the column\n     */\n    Grid.prototype.getColumnByField = function (field) {\n        return iterateArrayOrObject(this.getColumns(), function (item) {\n            if (item.field === field) {\n                return item;\n            }\n            return undefined;\n        })[0];\n    };\n    /**\n     * Gets a column index by column name.\n     *\n     * @param  {string} field - Specifies the column name.\n     *\n     * @returns {number} Returns the index by field\n     */\n    Grid.prototype.getColumnIndexByField = function (field) {\n        var cols = this.getColumns();\n        for (var i = 0; i < cols.length; i++) {\n            if (cols[parseInt(i.toString(), 10)].field === field) {\n                return i;\n            }\n        }\n        return -1;\n    };\n    /**\n     * Gets a column by UID.\n     *\n     * @param  {string} uid - Specifies the column UID.\n     *\n     * @returns {Column} Returns the column\n     */\n    Grid.prototype.getColumnByUid = function (uid) {\n        return iterateArrayOrObject(this.getColumns().concat(this.getStackedColumns(this.columns)), function (item) {\n            if (item.uid === uid) {\n                return item;\n            }\n            return undefined;\n        })[0];\n    };\n    /**\n     * @param {Column[]} columns - Defines the columns\n     * @param {Column[]} stackedColumn - Defines the stacked columns\n     * @returns {Column[]} Returns the columns\n     * @hidden\n     */\n    Grid.prototype.getStackedColumns = function (columns, stackedColumn) {\n        if (stackedColumn === void 0) { stackedColumn = []; }\n        for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n            var column = columns_1[_i];\n            if (column.columns) {\n                stackedColumn.push(column);\n                this.getStackedColumns(column.columns, stackedColumn);\n            }\n        }\n        return stackedColumn;\n    };\n    /**\n     * Gets a column index by UID.\n     *\n     * @param  {string} uid - Specifies the column UID.\n     *\n     * @returns {number} Returns the column by index\n     */\n    Grid.prototype.getColumnIndexByUid = function (uid) {\n        var index = iterateArrayOrObject(this.getColumns(), function (item, index) {\n            if (item.uid === uid) {\n                return index;\n            }\n            return undefined;\n        })[0];\n        return !isNullOrUndefined(index) ? index : -1;\n    };\n    /**\n     * Gets UID by column name.\n     *\n     * @param  {string} field - Specifies the column name.\n     *\n     * @returns {string} Returns the column by field\n     */\n    Grid.prototype.getUidByColumnField = function (field) {\n        return iterateArrayOrObject(this.getColumns(), function (item) {\n            if (item.field === field) {\n                return item.uid;\n            }\n            return undefined;\n        })[0];\n    };\n    /**\n     * Gets column index by column uid value.\n     *\n     * @private\n     * @param  {string} uid - Specifies the column uid.\n     * @returns {number} Returns the column by field\n     */\n    Grid.prototype.getNormalizedColumnIndex = function (uid) {\n        var index = this.getColumnIndexByUid(uid);\n        return index + this.getIndentCount();\n    };\n    /**\n     * Gets indent cell count.\n     *\n     * @private\n     * @returns {number} Returns the indent count\n     */\n    Grid.prototype.getIndentCount = function () {\n        var index = 0;\n        if (this.allowGrouping) {\n            index += this.groupSettings.columns.length;\n        }\n        if (this.isDetail()) {\n            index++;\n        }\n        if (this.isRowDragable() && isNullOrUndefined(this.rowDropSettings.targetID)) {\n            index++;\n        }\n        /**\n         * TODO: index normalization based on the stacked header, grouping and detailTemplate\n         * and frozen should be handled here\n         */\n        return index;\n    };\n    /**\n     * Gets the collection of column fields.\n     *\n     * @returns {string[]} Returns the Field names\n     */\n    Grid.prototype.getColumnFieldNames = function () {\n        var columnNames = [];\n        var column;\n        for (var i = 0, len = this.getColumns().length; i < len; i++) {\n            column = this.getColumns()[parseInt(i.toString(), 10)];\n            if (column.visible) {\n                columnNames.push(column.field);\n            }\n        }\n        return columnNames;\n    };\n    /**\n     * Gets a compiled row template.\n     *\n     * @returns {Function} Returns the row TEmplate\n     * @private\n     */\n    Grid.prototype.getRowTemplate = function () {\n        return this.rowTemplateFn;\n    };\n    /**\n     * Gets a compiled empty Record template.\n     *\n     * @returns {Function} Returns the empty Record template\n     * @private\n     */\n    Grid.prototype.getEmptyRecordTemplate = function () {\n        return this.emptyRecordTemplateFn;\n    };\n    /**\n     * Gets a compiled detail row template.\n     *\n     * @private\n     * @returns {Function} Returns the Detail template\n     */\n    Grid.prototype.getDetailTemplate = function () {\n        return this.detailTemplateFn;\n    };\n    /**\n     * Gets a compiled detail row template.\n     *\n     * @private\n     * @returns {Function}Returns the Edit template\n     */\n    Grid.prototype.getEditTemplate = function () {\n        return this.editTemplateFn;\n    };\n    /**\n     * Gets a compiled dialog edit header template.\n     *\n     * @private\n     * @returns {Function} returns template function\n     */\n    Grid.prototype.getEditHeaderTemplate = function () {\n        return this.editHeaderTemplateFn;\n    };\n    /**\n     * Gets a compiled dialog edit footer template.\n     *\n     * @private\n     * @returns {Function} Returns the Footer template\n     */\n    Grid.prototype.getEditFooterTemplate = function () {\n        return this.editFooterTemplateFn;\n    };\n    /**\n     * Get the names of the primary key columns of the Grid.\n     *\n     * @returns {string[]} Returns the field names\n     */\n    Grid.prototype.getPrimaryKeyFieldNames = function () {\n        var keys = [];\n        for (var k = 0; k < this.columnModel.length; k++) {\n            if (this.columnModel[parseInt(k.toString(), 10)].isPrimaryKey) {\n                keys.push(this.columnModel[parseInt(k.toString(), 10)].field);\n            }\n        }\n        return keys;\n    };\n    /**\n     * Refreshes the Grid header and content.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.refresh = function () {\n        if (!this.isDestroyed) {\n            this.isManualRefresh = true;\n            this.headerModule.refreshUI();\n            this.updateStackedFilter();\n            this.renderModule.refresh();\n        }\n    };\n    /**\n     * Refreshes the Grid header.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.refreshHeader = function () {\n        this.headerModule.refreshUI();\n    };\n    /**\n     * Gets the collection of selected rows.\n     *\n     * @returns {Element[]} Returns the element\n     */\n    Grid.prototype.getSelectedRows = function () {\n        return this.selectionModule ? this.selectionModule.selectedRecords : [];\n    };\n    /**\n     * Gets the collection of selected row indexes.\n     *\n     * @returns {number[]} Returns the Selected row indexes\n     */\n    Grid.prototype.getSelectedRowIndexes = function () {\n        return this.selectionModule ? this.selectionModule.selectedRowIndexes : [];\n    };\n    /**\n     * Gets the collection of selected row and cell indexes.\n     *\n     * @returns {number[]} Returns the Selected row cell indexes\n     */\n    Grid.prototype.getSelectedRowCellIndexes = function () {\n        return this.selectionModule ? this.selectionModule.selectedRowCellIndexes : [];\n    };\n    /**\n     * Gets the collection of selected records.\n     *\n     * @returns {Object[]} Returns the selected records\n     * @isGenericType true\n     */\n    Grid.prototype.getSelectedRecords = function () {\n        return this.selectionModule ? this.selectionModule.getSelectedRecords() : [];\n    };\n    /**\n     * Gets the collection of selected columns uid.\n     *\n     * @returns {string[]} Returns the selected column uid\n     * @isGenericType true\n     */\n    Grid.prototype.getSelectedColumnsUid = function () {\n        var _this_1 = this;\n        var uid = [];\n        if (this.selectionModule) {\n            this.selectionModule.selectedColumnsIndexes.filter(function (i) { return uid.push(_this_1.getColumns()[parseInt(i.toString(), 10)].uid); });\n        }\n        return uid;\n    };\n    /**\n     * Gets the data module.\n     *\n     * @returns {Data} Returns the data\n     */\n    Grid.prototype.getDataModule = function () {\n        return this.renderModule.data;\n    };\n    /**\n     * Shows a column by its column name.\n     *\n     * @param  {string|string[]} keys - Defines a single or collection of column names.\n     * @param  {string} showBy - Defines the column key either as field name or header text.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.showColumns = function (keys, showBy) {\n        showBy = showBy ? showBy : 'headerText';\n        this.showHider.show(keys, showBy);\n    };\n    /**\n     * Hides a column by column name.\n     *\n     * @param  {string|string[]} keys - Defines a single or collection of column names.\n     * @param  {string} hideBy - Defines the column key either as field name or header text.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.hideColumns = function (keys, hideBy) {\n        hideBy = hideBy ? hideBy : 'headerText';\n        this.showHider.hide(keys, hideBy);\n    };\n    /**\n     * @hidden\n     * @returns {number} Returns the Frozen column\n     */\n    Grid.prototype.getFrozenColumns = function () {\n        return this.frozenColumns + this.getFrozenCount(this.columns, 0, 0);\n    };\n    /**\n     * @hidden\n     * @returns {number} Returns the Frozen Right column count\n     */\n    Grid.prototype.getFrozenRightColumnsCount = function () {\n        return this.frozenRightCount || this.rightcount;\n    };\n    /**\n     * @hidden\n     * @returns {number} Returns the Frozen Left column\n     */\n    Grid.prototype.getFrozenLeftColumnsCount = function () {\n        return this.frozenLeftCount || this.leftcount;\n    };\n    /**\n     * @hidden\n     * @returns {number} Returns the movable column count\n     */\n    Grid.prototype.getMovableColumnsCount = function () {\n        return this.movableCount || this.movablecount;\n    };\n    Grid.prototype.updateFrozenColumnsWidth = function () {\n        if (this.isFrozenGrid() && !this.enableColumnVirtualization) {\n            var gcol = this.getColumns();\n            var isAutoWidth = true;\n            var autoCol_1 = 0;\n            var difference_1 = 0;\n            var autoWidth_1 = 0;\n            var _loop_2 = function (i) {\n                var col = gcol[parseInt(i.toString(), 10)];\n                if (isNullOrUndefined(col.width) && (col.freeze === 'Left' || col.freeze === 'Right' || col.freeze === 'Fixed' || col.isFrozen)) {\n                    col.width = Math.max(200, col.minWidth ? parseFloat(col.minWidth.toString()) : 0);\n                }\n                if (col.width === 'auto' && (col.freeze === 'Left' || col.freeze === 'Right' || col.freeze === 'Fixed' || col.isFrozen)) {\n                    var tWidth_1 = 0;\n                    if (isAutoWidth) {\n                        gcol.filter(function (cols) {\n                            if (cols.visible) {\n                                if (cols.width === 'auto') {\n                                    autoCol_1++;\n                                }\n                                if (cols.width !== 'auto') {\n                                    var width = !isNullOrUndefined(cols.width) ? parseFloat(cols.width.toString()) :\n                                        Math.max(200, cols.minWidth ? parseFloat(cols.minWidth.toString()) : 0);\n                                    tWidth_1 += width;\n                                }\n                            }\n                        });\n                        var gWidth = this_2.isPercentageWidthGrid() || this_2.width === 'auto' ? this_2.element.getBoundingClientRect().width :\n                            parseFloat(this_2.width.toString());\n                        difference_1 = this_2.height === 'auto' ? gWidth - tWidth_1 : ((gWidth - tWidth_1) - getScrollBarWidth());\n                        if (difference_1 < 0) {\n                            difference_1 = 0;\n                        }\n                        autoWidth_1 = parseFloat((difference_1 / autoCol_1).toString());\n                        gcol.filter(function (col) {\n                            if (col.visible) {\n                                if (col.minWidth && parseFloat(col.minWidth.toString()) > autoWidth_1) {\n                                    difference_1 = difference_1 - parseFloat(col.minWidth.toString());\n                                    autoCol_1--;\n                                }\n                            }\n                        });\n                        isAutoWidth = false;\n                    }\n                    if (col.minWidth && parseFloat(col.minWidth.toString()) > autoWidth_1) {\n                        col.width = parseFloat(col.minWidth.toString());\n                    }\n                    else {\n                        col.width = difference_1 / autoCol_1;\n                    }\n                }\n            };\n            var this_2 = this;\n            for (var i = 0; i < gcol.length; i++) {\n                _loop_2(i);\n            }\n        }\n    };\n    Grid.prototype.refreshSplitFrozenColumn = function () {\n        this.splitFrozenCount(this.columns);\n        this.updateFrozenColumnsWidth();\n        this.isAutoGenerateColumns = true;\n    };\n    /**\n     * @hidden\n     * @returns {void}\n     */\n    Grid.prototype.setFrozenCount = function () {\n        this.frozenLeftCount = this.frozenRightCount = this.movableCount = 0;\n        this.visibleFrozenLeft = this.visibleFrozenRight = this.visibleMovable = 0;\n        this.frozenLeftColumns = [];\n        this.frozenRightColumns = [];\n        this.movableColumns = [];\n        this.fixedColumns = [];\n        this.splitFrozenCount(this.columns);\n        this.leftcount = this.frozenLeftCount;\n        this.rightcount = this.frozenRightCount;\n        this.movablecount = this.movableCount;\n        // if (this.frozenColumns && (this.frozenLeftCount || this.frozenRightCount)) {\n        //     this.setProperties({ frozenColumns: 0 }, true);\n        // }\n        if (this.frozenLeftCount && !this.frozenRightCount) {\n            this.frozenName = 'Left';\n        }\n        else if (this.frozenRightCount && !this.frozenLeftCount) {\n            this.frozenName = 'Right';\n        }\n        else if (this.frozenLeftCount && this.frozenRightCount) {\n            this.frozenName = 'Left-Right';\n        }\n        else if (this.frozenColumns || this.frozenRows) {\n            this.frozenName = 'Left';\n        }\n        else {\n            this.frozenName = undefined;\n        }\n    };\n    /**\n     * @hidden\n     * @returns {number} Returns the visible Frozen left count\n     */\n    Grid.prototype.getVisibleFrozenLeftCount = function () {\n        return this.visibleFrozenLeft;\n    };\n    /**\n     * @hidden\n     * @returns {number} Returns the visible Frozen Right count\n     */\n    Grid.prototype.getVisibleFrozenRightCount = function () {\n        return this.visibleFrozenRight;\n    };\n    /**\n     * @hidden\n     * @returns {number} Returns the visible movable count\n     */\n    Grid.prototype.getVisibleMovableCount = function () {\n        return this.visibleMovable;\n    };\n    /**\n     * @hidden\n     * @returns {Column[]} Returns the column\n     */\n    Grid.prototype.getFrozenRightColumns = function () {\n        return this.frozenRightColumns;\n    };\n    /**\n     * @hidden\n     * @returns {Column[]} Returns the column\n     */\n    Grid.prototype.getFrozenLeftColumns = function () {\n        return this.frozenLeftColumns;\n    };\n    /**\n     * @hidden\n     * @returns {Column[]} Returns the column\n     */\n    Grid.prototype.getMovableColumns = function () {\n        return this.movableColumns;\n    };\n    Grid.prototype.splitStackedColumns = function (columns) {\n        for (var i = 0; i < columns.length; i++) {\n            if (columns[parseInt(i.toString(), 10)].columns) {\n                this.splitStackedColumns(columns[parseInt(i.toString(), 10)].columns);\n            }\n            else {\n                if (columns[parseInt(i.toString(), 10)].freeze === 'Left' || columns[parseInt(i.toString(), 10)].isFrozen) {\n                    if (columns[parseInt(i.toString(), 10)].visible !== false) {\n                        this.visibleFrozenLeft++;\n                    }\n                    this.leftcount++;\n                }\n                else if (columns[parseInt(i.toString(), 10)].freeze === 'Right') {\n                    if (columns[parseInt(i.toString(), 10)].visible !== false) {\n                        this.visibleFrozenRight++;\n                    }\n                    this.rightcount++;\n                }\n                else if (columns[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n                    if (columns[parseInt(i.toString(), 10)].visible !== false) {\n                        this.visibleFrozenFixed++;\n                    }\n                    this.fixedcount++;\n                }\n                else {\n                    if (columns[parseInt(i.toString(), 10)].visible !== false) {\n                        this.visibleMovable++;\n                    }\n                    this.movablecount++;\n                }\n            }\n        }\n    };\n    Grid.prototype.pushStackedColumns = function (columns, index, arr, col, stackedcol) {\n        arr[parseInt(index.toString(), 10)] = col.headerText;\n        for (var i = 0; i < columns.length; i++) {\n            if (columns[parseInt(i.toString(), 10)].columns) {\n                index = index + 1;\n                this.pushStackedColumns(columns[parseInt(i.toString(), 10)].columns, index, arr, columns[parseInt(i.toString(), 10)], stackedcol);\n                index = index - 1;\n            }\n            else {\n                var stockCol = [];\n                stockCol = arr.slice().slice(0, index + 1);\n                if (columns[parseInt(i.toString(), 10)].freeze === 'Left' || columns[parseInt(i.toString(), 10)].isFrozen) {\n                    this.stackedLeft.push(stockCol);\n                    this.stackedarrayLeft.push(columns[parseInt(i.toString(), 10)]);\n                }\n                else if (columns[parseInt(i.toString(), 10)].freeze === 'Right') {\n                    this.stackedRight.push(stockCol);\n                    this.stackedarrayRight.push(columns[parseInt(i.toString(), 10)]);\n                }\n                else if (columns[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n                    this.stackedFixed.push(stockCol);\n                    this.stackedarrayFixed.push(columns[parseInt(i.toString(), 10)]);\n                }\n                else {\n                    this.stackedMovable.push(stockCol);\n                    this.stackedarrayMovable.push(columns[parseInt(i.toString(), 10)]);\n                }\n            }\n        }\n    };\n    Grid.prototype.pushallcol = function (text, text1, col, columns, isTrue) {\n        if (col.headerText === text1) {\n            if (isTrue) {\n                col.columns.push(columns);\n            }\n            else {\n                col.columns.push({ headerText: text, columns: [] });\n            }\n        }\n        else {\n            if (col.columns && col.columns.length) {\n                for (var i = 0; i < col.columns.length; i++) {\n                    this.pushallcol(text, text1, col.columns[parseInt(i.toString(), 10)], columns, isTrue);\n                }\n            }\n        }\n    };\n    Grid.prototype.resetStackedColumns = function (headercol, gridcolumns, freeze) {\n        var col = {};\n        var tempHead = [];\n        for (var i = 1; i <= headercol.length; i++) {\n            var firstcol = headercol[i - 1];\n            for (var j = 0; j < firstcol.length; j++) {\n                if (!col.columns && i === 1) {\n                    col = { headerText: firstcol[parseInt(j.toString(), 10)], columns: [] };\n                    tempHead.push(firstcol[parseInt(j.toString(), 10)]);\n                }\n                else {\n                    if (tempHead.indexOf(firstcol[parseInt(j.toString(), 10)]) === -1) {\n                        this.pushallcol(firstcol[parseInt(j.toString(), 10)], firstcol[j - 1], col);\n                        tempHead.push(firstcol[parseInt(j.toString(), 10)]);\n                    }\n                }\n                if (j === firstcol.length - 1) {\n                    this.pushallcol(null, firstcol[parseInt(j.toString(), 10)], col, gridcolumns[i - 1], true);\n                    var count = 0;\n                    while (count !== headercol.length - 1 && i !== headercol.length) {\n                        if (firstcol.toString() === headercol[parseInt(i.toString(), 10)].toString()) {\n                            i++;\n                            this.pushallcol(null, firstcol[parseInt(j.toString(), 10)], col, gridcolumns[i - 1], true);\n                        }\n                        count++;\n                    }\n                }\n            }\n        }\n        if (freeze === 'Left') {\n            this.frozenLeftColumns.push(col);\n        }\n        else if (freeze === 'Right') {\n            this.frozenRightColumns.push(col);\n        }\n        else {\n            this.movableColumns.push(col);\n        }\n    };\n    Grid.prototype.splitFrozenCount = function (columns) {\n        if (this.frozenColumns || (this.changedProperties && this.changedProperties.frozenColumns === 0)) {\n            var cols = !this.enableColumnVirtualization || (this.enableColumnVirtualization && this.isPreparedFrozenColumns) ?\n                this.enableColumnVirtualization && this.columnModel && this.columnModel.length ? this.columnModel :\n                    this.getColumns() : this.columns;\n            if (!this.changedProperties || (this.changedProperties && !this.changedProperties.frozenColumns)) {\n                for (var i = 0; i < cols.length; i++) {\n                    if (this.frozenColumns > i) {\n                        cols[parseInt(i.toString(), 10)].freeze = 'Left';\n                    }\n                    else if (cols[parseInt(i.toString(), 10)].freeze === 'Right' || cols[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n                        cols[parseInt(i.toString(), 10)].freeze = cols[parseInt(i.toString(), 10)].freeze;\n                    }\n                    else {\n                        cols[parseInt(i.toString(), 10)].freeze = undefined;\n                    }\n                }\n            }\n        }\n        for (var i = 0; i < columns.length; i++) {\n            if (columns[parseInt(i.toString(), 10)].columns) {\n                this.leftcount = 0;\n                this.rightcount = 0;\n                this.movablecount = 0;\n                this.fixedcount = 0;\n                var arr = [];\n                this.splitStackedColumns(columns[parseInt(i.toString(), 10)].columns);\n                if (this.leftcount && !this.rightcount && !this.movablecount && !this.fixedcount) {\n                    this.frozenLeftCount += this.leftcount;\n                    this.frozenLeftColumns.push(columns[parseInt(i.toString(), 10)]);\n                }\n                else if (this.rightcount && !this.leftcount && !this.movablecount && !this.fixedcount) {\n                    this.frozenRightCount += this.rightcount;\n                    this.frozenRightColumns.push(columns[parseInt(i.toString(), 10)]);\n                }\n                else if (this.movablecount && !this.leftcount && !this.rightcount && !this.fixedcount) {\n                    this.movableCount += this.movablecount;\n                    this.movableColumns.push(columns[parseInt(i.toString(), 10)]);\n                }\n                else if (this.fixedcount && !this.leftcount && !this.rightcount && !this.movablecount) {\n                    this.fixedCount += this.fixedcount;\n                    this.fixedColumns.push(columns[parseInt(i.toString(), 10)]);\n                    this.movableCount += this.movablecount;\n                    this.movableColumns.push(columns[parseInt(i.toString(), 10)]);\n                }\n                else {\n                    this.frozenLeftCount += this.leftcount;\n                    this.frozenRightCount += this.rightcount;\n                    this.movableCount += this.movablecount;\n                    this.fixedCount += this.fixedcount;\n                    this.leftcount = 0;\n                    this.rightcount = 0;\n                    this.movablecount = 0;\n                    this.fixedcount = 0;\n                    this.stackedLeft = [];\n                    this.stackedRight = [];\n                    this.stackedFixed = [];\n                    this.stackedMovable = [];\n                    this.stackedarrayLeft = [];\n                    this.stackedarrayRight = [];\n                    this.stackedarrayFixed = [];\n                    this.stackedarrayMovable = [];\n                    this.pushStackedColumns(columns[parseInt(i.toString(), 10)].columns, 0, arr, columns[parseInt(i.toString(), 10)], { headerText: columns[parseInt(i.toString(), 10)].headerText, columns: [] });\n                    if (this.stackedarrayLeft.length) {\n                        this.resetStackedColumns(this.stackedLeft, this.stackedarrayLeft, 'Left');\n                    }\n                    if (this.stackedarrayRight.length) {\n                        this.resetStackedColumns(this.stackedRight, this.stackedarrayRight, 'Right');\n                    }\n                    if (this.stackedarrayFixed.length) {\n                        this.resetStackedColumns(this.stackedFixed, this.stackedarrayFixed, 'Fixed');\n                    }\n                    if (this.stackedarrayMovable.length) {\n                        this.resetStackedColumns(this.stackedMovable, this.stackedarrayMovable, 'Movable');\n                    }\n                    this.stackedLeft = [];\n                    this.stackedRight = [];\n                    this.stackedMovable = [];\n                    this.stackedFixed = [];\n                    this.stackedarrayLeft = [];\n                    this.stackedarrayRight = [];\n                    this.stackedarrayMovable = [];\n                    this.stackedarrayFixed = [];\n                }\n            }\n            else {\n                if (columns[parseInt(i.toString(), 10)].freeze === 'Right') {\n                    if (columns[parseInt(i.toString(), 10)].visible !== false) {\n                        this.visibleFrozenRight++;\n                    }\n                    this.frozenRightColumns.push(columns[parseInt(i.toString(), 10)]);\n                    this.frozenRightCount++;\n                }\n                else if (columns[parseInt(i.toString(), 10)].freeze === 'Left' || columns[parseInt(i.toString(), 10)].isFrozen) {\n                    if (columns[parseInt(i.toString(), 10)].visible !== false) {\n                        this.visibleFrozenLeft++;\n                    }\n                    this.frozenLeftColumns.push(columns[parseInt(i.toString(), 10)]);\n                    this.frozenLeftCount++;\n                }\n                else if (columns[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n                    this.fixedColumns.push(columns[parseInt(i.toString(), 10)]);\n                    this.fixedCount++;\n                    this.movableColumns.push(columns[parseInt(i.toString(), 10)]);\n                    this.movableCount++;\n                }\n                else {\n                    if (columns[parseInt(i.toString(), 10)].visible !== false) {\n                        this.visibleMovable++;\n                    }\n                    this.movableColumns.push(columns[parseInt(i.toString(), 10)]);\n                    this.movableCount++;\n                }\n            }\n        }\n        if (this.frozenLeftColumns.length) {\n            var cols = this.frozenLeftColumns[this.frozenLeftColumns.length - 1];\n            this.removeBorder(this.frozenLeftColumns);\n            this.frozenLeftBorderColumns(cols instanceof Column ? this.lastVisibleLeftCol(this.frozenLeftColumns) : cols);\n        }\n        if (this.frozenRightColumns.length) {\n            var cols = this.frozenRightColumns[0];\n            this.removeBorder(this.frozenRightColumns);\n            this.frozenRightBorderColumns(cols instanceof Column ? this.firstVisibleRightCol(this.frozenRightColumns) : cols);\n        }\n        if ((this.frozenLeftColumns.length || this.frozenRightColumns.length) && this.freezeColumnRefresh) {\n            var cols = (this.frozenLeftColumns.concat(this.movableColumns)).concat(this.frozenRightColumns);\n            this.setProperties({ columns: cols }, true);\n            this.freezeColumnRefresh = false;\n        }\n    };\n    Grid.prototype.removeBorder = function (columns) {\n        for (var i = 0; i < columns.length; i++) {\n            if (columns[parseInt(i.toString(), 10)].columns && columns[parseInt(i.toString(), 10)].columns.length) {\n                if (columns[parseInt(i.toString(), 10)].border === 'Right' ||\n                    columns[parseInt(i.toString(), 10)].border === 'Left') {\n                    columns[parseInt(i.toString(), 10)].border = undefined;\n                }\n                this.removeBorder(columns[parseInt(i.toString(), 10)].columns);\n            }\n            else {\n                if (columns[parseInt(i.toString(), 10)].border === 'Right' ||\n                    columns[parseInt(i.toString(), 10)].border === 'Left') {\n                    columns[parseInt(i.toString(), 10)].border = undefined;\n                }\n            }\n        }\n    };\n    Grid.prototype.isVisibleColumns = function (column, arr) {\n        if (column.columns && column.columns.length) {\n            for (var i = 0; i < column.columns.length; i++) {\n                this.isVisibleColumns(column.columns[parseInt(i.toString(), 10)], arr);\n                if (column.columns[parseInt(i.toString(), 10)].visible &&\n                    isNullOrUndefined(column.columns[parseInt(i.toString(), 10)].columns) &&\n                    (!isNullOrUndefined(column.columns[parseInt(i.toString(), 10)].freeze) ||\n                        column.columns[parseInt(i.toString(), 10)].isFrozen)) {\n                    arr.push('true');\n                }\n            }\n        }\n        else {\n            if (column.visible && (!isNullOrUndefined(column.freeze) || column.isFrozen)) {\n                arr.push('true');\n            }\n        }\n    };\n    Grid.prototype.lastVisibleLeftCol = function (columns) {\n        var column;\n        for (var i = columns.length - 1; i >= 0; i--) {\n            var arr = [];\n            this.isVisibleColumns(columns[parseInt(i.toString(), 10)], arr);\n            if (columns[parseInt(i.toString(), 10)].visible && arr.indexOf('true') !== -1) {\n                column = columns[parseInt(i.toString(), 10)];\n                break;\n            }\n        }\n        return column;\n    };\n    Grid.prototype.firstVisibleRightCol = function (columns) {\n        var column;\n        for (var i = 0; i < columns.length; i++) {\n            var arr = [];\n            this.isVisibleColumns(columns[parseInt(i.toString(), 10)], arr);\n            if (columns[parseInt(i.toString(), 10)].visible && arr.indexOf('true') !== -1) {\n                column = columns[parseInt(i.toString(), 10)];\n                break;\n            }\n        }\n        return column;\n    };\n    Grid.prototype.frozenLeftBorderColumns = function (columns) {\n        if (isNullOrUndefined(columns)) {\n            return;\n        }\n        if (columns.columns && columns.columns.length) {\n            columns.border = 'Left';\n            var cols = columns.columns[columns.columns.length - 1];\n            this.frozenLeftBorderColumns(cols instanceof Column && cols.columns ? this.lastVisibleLeftCol(columns.columns) : cols);\n        }\n        else {\n            columns.border = 'Left';\n        }\n    };\n    Grid.prototype.frozenRightBorderColumns = function (columns) {\n        if (isNullOrUndefined(columns)) {\n            return;\n        }\n        if (columns.columns && columns.columns.length) {\n            columns.border = 'Right';\n            var cols = columns.columns[0];\n            this.frozenRightBorderColumns(cols instanceof Column && cols.columns ? this.firstVisibleRightCol(columns.columns) : cols);\n        }\n        else {\n            columns.border = 'Right';\n        }\n    };\n    /**\n     * @hidden\n     * @returns {number} Returns the visible frozen columns count\n     */\n    Grid.prototype.getVisibleFrozenColumns = function () {\n        return this.getVisibleFrozenColumnsCount() + this.getVisibleFrozenCount(this.columns, 0);\n    };\n    /**\n     * Get the current Filter operator and field.\n     *\n     * @returns {FilterUI} Returns the filter UI\n     */\n    Grid.prototype.getFilterUIInfo = function () {\n        return this.filterModule ? this.filterModule.getFilterUIInfo() : {};\n    };\n    Grid.prototype.getVisibleFrozenColumnsCount = function () {\n        var visibleFrozenColumns = 0;\n        var columns = this.columnModel;\n        for (var i = 0; i < this.frozenColumns; i++) {\n            if (columns[parseInt(i.toString(), 10)].visible) {\n                visibleFrozenColumns++;\n            }\n        }\n        if ((this.frozenLeftCount || this.leftcount) || (this.frozenRightCount || this.rightcount)) {\n            for (var i = 0; i < columns.length; i++) {\n                if (columns[parseInt(i.toString(), 10)].visible && (columns[parseInt(i.toString(), 10)].freeze === 'Left'\n                    || columns[parseInt(i.toString(), 10)].freeze === 'Right')) {\n                    visibleFrozenColumns++;\n                }\n            }\n        }\n        return visibleFrozenColumns;\n    };\n    Grid.prototype.getVisibleFrozenCount = function (cols, cnt) {\n        if ((!this.frozenLeftCount && !this.leftcount) && (!this.frozenRightCount || !this.rightcount)) {\n            for (var i = 0, len = cols.length; i < len; i++) {\n                if (cols[parseInt(i.toString(), 10)].columns) {\n                    cnt = this.getVisibleFrozenCount(cols[parseInt(i.toString(), 10)].columns, cnt);\n                }\n                else {\n                    if (cols[parseInt(i.toString(), 10)].isFrozen && cols[parseInt(i.toString(), 10)].visible) {\n                        cnt++;\n                    }\n                }\n            }\n        }\n        return cnt;\n    };\n    Grid.prototype.getFrozenCount = function (cols, cnt, index) {\n        for (var i = 0, len = cols.length; i < len; i++) {\n            if (cols[parseInt(i.toString(), 10)].columns) {\n                cnt = this.getFrozenCount(cols[parseInt(i.toString(), 10)].columns, cnt, index);\n            }\n            else {\n                if (cols[parseInt(i.toString(), 10)].isFrozen && index > this.frozenColumns - 1) {\n                    cnt++;\n                }\n                index++;\n            }\n        }\n        return cnt;\n    };\n    /**\n     * Navigates to the specified target page.\n     *\n     * @param  {number} pageNo - Defines the page number to navigate.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.goToPage = function (pageNo) {\n        if (this.pagerModule) {\n            this.pagerModule.goToPage(pageNo);\n        }\n    };\n    /**\n     * Defines the text of external message.\n     *\n     * @param  {string} message - Defines the message to update.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.updateExternalMessage = function (message) {\n        if (this.pagerModule && !this.pagerTemplate) {\n            this.pagerModule.updateExternalMessage(message);\n        }\n    };\n    /**\n     * Sorts a column with the given options.\n     *\n     * @param {string} columnName - Defines the column name to be sorted.\n     * @param {SortDirection} direction - Defines the direction of sorting field.\n     * @param {boolean} isMultiSort - Specifies whether the previous sorted columns are to be maintained.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n        if (this.sortModule) {\n            this.sortModule.sortColumn(columnName, direction, isMultiSort);\n        }\n    };\n    /**\n     * Remove the existing columns along with the grid actions like sorting, filtering, searching, grouping, aggregate, etc., and grid will refresh with new columns based on the updated new data source.\n     * > * If no columns are specified while changing the data source, then the columns are auto generated in the Grid based on the list of columns in the updated data source.\n     *\n     * @param {Object | DataManager | DataResult} dataSource -  Assign the new datasource.\n     * @param {Column[] | string[] | ColumnModel[]} columns - Defines columns.\n     * @returns {void}\n     *\n     *\n     * ```typescript\n     * <button id=\"btn\">change dataSource </button>\n     * <div id=\"Grid\"></div>\n     * <script>\n     * let gridObj: Grid = new Grid({\n     *     dataSource: employeeData,  // you can define the datamanager here if you are binding a data through datamanager\n     *     columns: [\n     *         { field: 'OrderID', headerText: 'Order ID', width:100 },\n     *         { field: 'EmployeeID', headerText: 'Employee ID' }],\n     * });\n     * gridObj.appendTo('#Grid');\n     * document.getElementById('btn').addEventListener(\"click\", function(){\n     * let newColumn: [\n     *     { field: 'CustomerID', headerText: 'Customer ID', width:100 },\n     *     { field: 'FirstName', headerText: 'Name' }];\n     * gridObj.changeDataSource(customerData, newColumn);\n     * });\n     * </script>\n     * ```\n     *\n     */\n    Grid.prototype.changeDataSource = function (dataSource, columns) {\n        this.isChangeDataSourceCall = true;\n        this.setProperties({ sortSettings: { columns: [] } }, true);\n        this.setProperties({ filterSettings: { columns: [] } }, true);\n        this.setProperties({ searchSettings: { key: '' } }, true);\n        if (this.allowGrouping) {\n            this.setProperties({ groupSettings: { columns: [] } }, true);\n        }\n        if (columns && columns.length) {\n            this.setProperties({ columns: columns }, true);\n        }\n        if (dataSource) {\n            if (isNullOrUndefined(columns)) {\n                this.setProperties({ columns: [] }, true);\n            }\n            this.setProperties({ dataSource: dataSource }, true);\n        }\n        this.freezeRefresh();\n        this.isChangeDataSourceCall = false;\n    };\n    /**\n     * Clears all the sorted columns of the Grid.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.clearSorting = function () {\n        if (this.sortModule) {\n            this.sortModule.clearSorting();\n        }\n    };\n    /**\n     * Remove sorted column by field name.\n     *\n     * @param {string} field - Defines the column field name to remove sort.\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.removeSortColumn = function (field) {\n        if (this.sortModule) {\n            this.sortModule.removeSortColumn(field);\n        }\n    };\n    /**\n     * @hidden\n     * @returns {void}\n     */\n    Grid.prototype.clearGridActions = function () {\n        this.setProperties({ sortSettings: { columns: [] } }, true);\n        this.setProperties({ filterSettings: { columns: [] } }, true);\n        this.setProperties({ searchSettings: { key: '' } }, true);\n        if (this.allowGrouping) {\n            this.setProperties({ groupSettings: { columns: [] } }, false);\n        }\n        else {\n            this.freezeRefresh();\n        }\n    };\n    /**\n     * Filters grid row by column name with the given options.\n     *\n     * @param  {string} fieldName - Defines the field name of the column.\n     * @param  {string} filterOperator - Defines the operator to filter records.\n     * @param  {string | number | Date | boolean} filterValue - Defines the value used to filter records.\n     * @param  {string} predicate - Defines the relationship between one filter query and another by using AND or OR predicate.\n     * @param  {boolean} matchCase - If match case is set to true, the grid filters the records with exact match. if false, it filters case\n     * insensitive records (uppercase and lowercase letters treated the same).\n     * @param  {boolean} ignoreAccent - If ignoreAccent set to true,\n     * then filter ignores the diacritic characters or accents while filtering.\n     * @param  {string} actualFilterValue - Defines the actual filter value for the filter column.\n     * @param  {string} actualOperator - Defines the actual filter operator for the filter column.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.filterByColumn = function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n        if (this.filterModule) {\n            this.filterModule.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n        }\n    };\n    /**\n     * Clears all the filtered rows of the Grid.\n     *\n     * @param {string[]} fields - Defines the Fields\n     * @returns {void}\n     */\n    Grid.prototype.clearFiltering = function (fields) {\n        if (this.filterModule) {\n            this.filterModule.clearFiltering(fields);\n        }\n    };\n    /**\n     * Removes filtered column by field name.\n     *\n     * @param  {string} field - Defines column field name to remove filter.\n     * @param  {boolean} isClearFilterBar -  Specifies whether the filter bar value needs to be cleared.\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.removeFilteredColsByField = function (field, isClearFilterBar) {\n        if (this.filterModule) {\n            this.filterModule.removeFilteredColsByField(field, isClearFilterBar);\n        }\n    };\n    /**\n     * Selects a row by given index.\n     *\n     * @param  {number} index - Defines the row index.\n     * @param  {boolean} isToggle - If set to true, then it toggles the selection.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.selectRow = function (index, isToggle) {\n        if (this.selectionModule) {\n            this.selectionModule.selectRow(index, isToggle);\n        }\n    };\n    /**\n     * Selects a collection of rows by indexes.\n     *\n     * @param  {number[]} rowIndexes - Specifies the row indexes.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.selectRows = function (rowIndexes) {\n        if (this.selectionModule) {\n            this.selectionModule.selectRows(rowIndexes);\n        }\n    };\n    /**\n     * Deselects the current selected rows and cells.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.clearSelection = function () {\n        if (this.selectionModule) {\n            this.selectionModule.clearSelection();\n        }\n    };\n    /**\n     * Selects a cell by the given index.\n     *\n     * @param  {IIndex} cellIndex - Defines the row and column indexes.\n     * @param  {boolean} isToggle - If set to true, then it toggles the selection.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.selectCell = function (cellIndex, isToggle) {\n        if (this.selectionModule) {\n            this.selectionModule.selectCell(cellIndex, isToggle);\n        }\n    };\n    /**\n     * Selects a range of cells from start and end indexes.\n     *\n     * @param  {IIndex} startIndex - Specifies the row and column's start index.\n     * @param  {IIndex} endIndex - Specifies the row and column's end index.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.selectCellsByRange = function (startIndex, endIndex) {\n        this.selectionModule.selectCellsByRange(startIndex, endIndex);\n    };\n    /**\n     * Searches Grid records using the given key.\n     * You can customize the default search option by using the\n     * [`searchSettings`](./#searchsettings/).\n     *\n     * @param  {string} searchString - Defines the key.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.search = function (searchString) {\n        if (this.searchModule) {\n            this.searchModule.search(searchString);\n        }\n    };\n    /**\n     * By default, prints all the pages of the Grid and hides the pager.\n     * > You can customize print options using the\n     * [`printMode`](./#printmode).\n     *\n     * @returns {void}\n     */\n    Grid.prototype.print = function () {\n        if (this.printModule) {\n            this.printModule.print();\n        }\n    };\n    /**\n     * Delete a record with Given options. If fieldname and data is not given then grid will delete the selected record.\n     * > `editSettings.allowDeleting` should be true.\n     *\n     * @param {string} fieldname - Defines the primary key field, 'Name of the column'.\n     * @param {Object} data - Defines the JSON data of the record to be deleted.\n     * @returns {void}\n     */\n    Grid.prototype.deleteRecord = function (fieldname, data) {\n        if (this.editModule) {\n            this.editModule.deleteRecord(fieldname, data);\n        }\n    };\n    /**\n     * Starts edit the selected row. At least one row must be selected before invoking this method.\n     * `editSettings.allowEditing` should be true.\n     * {% codeBlock src='grid/startEdit/index.md' %}{% endcodeBlock %}\n     *\n     * @returns {void}\n     */\n    Grid.prototype.startEdit = function () {\n        if (this.editModule) {\n            this.editModule.startEdit();\n        }\n    };\n    /**\n     * If Grid is in editable state, you can save a record by invoking endEdit.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.endEdit = function () {\n        if (this.editModule) {\n            this.editModule.endEdit();\n        }\n    };\n    /**\n     * Cancels edited state.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.closeEdit = function () {\n        if (this.editModule) {\n            this.editModule.closeEdit();\n        }\n    };\n    /**\n     * Adds a new record to the Grid. Without passing parameters, it adds empty rows.\n     * > `editSettings.allowEditing` should be true.\n     *\n     * @param {Object} data - Defines the new add record data.\n     * @param {number} index - Defines the row index to be added\n     * @returns {void}\n     */\n    Grid.prototype.addRecord = function (data, index) {\n        if (this.editModule) {\n            this.editModule.addRecord(data, index);\n        }\n    };\n    /**\n     * Delete any visible row by TR element.\n     *\n     * @param {HTMLTableRowElement} tr - Defines the table row element.\n     * @returns {void}\n     */\n    Grid.prototype.deleteRow = function (tr) {\n        if (this.editModule) {\n            this.editModule.deleteRow(tr);\n        }\n    };\n    /**\n     * Changes a particular cell into edited state based on the row index and field name provided in the `batch` mode.\n     *\n     * @param {number} index - Defines row index to edit a particular cell.\n     * @param {string} field - Defines the field name of the column to perform batch edit.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.editCell = function (index, field) {\n        if (this.editModule) {\n            this.editModule.editCell(index, field);\n        }\n    };\n    /**\n     * Saves the cell that is currently edited. It does not save the value to the DataSource.\n     *\n     * @returns {void}\n     * {% codeBlock src='grid/saveCell/index.md' %}{% endcodeBlock %}\n     */\n    Grid.prototype.saveCell = function () {\n        if (this.editModule) {\n            this.editModule.saveCell();\n        }\n    };\n    /**\n     * To update the specified cell by given value without changing into edited state.\n     *\n     * @param {number} rowIndex Defines the row index.\n     * @param {string} field Defines the column field.\n     * @param {string | number | boolean | Date} value - Defines the value to be changed.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.updateCell = function (rowIndex, field, value) {\n        if (this.editModule) {\n            this.editModule.updateCell(rowIndex, field, value);\n        }\n    };\n    /**\n     * To update the specified row by given values without changing into edited state.\n     *\n     * {% codeBlock src='grid/updateRow/index.md' %}{% endcodeBlock %}\n     *\n     * @param {number} index Defines the row index.\n     * @param {Object} data Defines the data object to be updated.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.updateRow = function (index, data) {\n        if (this.editModule) {\n            this.editModule.updateRow(index, data);\n        }\n    };\n    /**\n     * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n     *\n     * @returns {Object} Returns the batch changes\n     */\n    Grid.prototype.getBatchChanges = function () {\n        if (this.editModule) {\n            return this.editModule.getBatchChanges();\n        }\n        return {};\n    };\n    /**\n     * Enables or disables ToolBar items.\n     *\n     * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n     * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.enableToolbarItems = function (items, isEnable) {\n        if (this.toolbarModule) {\n            this.toolbarModule.enableItems(items, isEnable);\n        }\n    };\n    /**\n     * Copy the selected rows or cells data into clipboard.\n     *\n     * @param {boolean} withHeader - Specifies whether the column header text needs to be copied along with rows or cells.\n     * @returns {void}\n     */\n    Grid.prototype.copy = function (withHeader) {\n        if (this.clipboardModule) {\n            this.clipboardModule.copy(withHeader);\n        }\n    };\n    /**\n     * @hidden\n     * @returns {void}\n     */\n    Grid.prototype.recalcIndentWidth = function () {\n        var _this_1 = this;\n        if (!this.getHeaderTable().querySelector('.e-emptycell')) {\n            return;\n        }\n        if ((!this.groupSettings.columns.length && !this.isDetail() && !this.isRowDragable()) ||\n            this.getHeaderTable().querySelector('.e-emptycell').getAttribute('indentRefreshed') ||\n            !this.getContentTable()) {\n            return;\n        }\n        var indentWidth = this.getHeaderTable().querySelector('.e-emptycell').parentElement.offsetWidth;\n        var headerCol = [].slice.call(this.getHeaderTable().querySelector(literals.colGroup).childNodes);\n        var contentCol = [].slice.call(this.getContentTable().querySelector(literals.colGroup).childNodes);\n        var perPixel = indentWidth / 30;\n        var i = this.getFrozenMode() === 'Right' ? this.groupSettings.columns.length + this.getColumns().length : 0;\n        var parentOffset = this.element.offsetWidth;\n        var applyWidth = function (index, width) {\n            if (ispercentageWidth(_this_1)) {\n                var newWidth = (width / parentOffset * 100).toFixed(1) + '%';\n                headerCol[parseInt(index.toString(), 10)].style.width = newWidth;\n                contentCol[parseInt(index.toString(), 10)].style.width = newWidth;\n            }\n            else {\n                headerCol[parseInt(index.toString(), 10)].style.width = width + 'px';\n                contentCol[parseInt(index.toString(), 10)].style.width = width + 'px';\n            }\n            _this_1.notify(events.columnWidthChanged, { index: index, width: width });\n        };\n        if (perPixel >= 1) {\n            indentWidth = (30 / perPixel);\n        }\n        if (indentWidth < 1) {\n            indentWidth = 1;\n        }\n        if (this.enableColumnVirtualization || this.isAutoGen || (this.columns.length === this.groupSettings.columns.length)) {\n            indentWidth = 30;\n        }\n        while (i < this.groupSettings.columns.length) {\n            applyWidth(i, indentWidth);\n            i++;\n        }\n        if (this.isDetail()) {\n            applyWidth(i, indentWidth);\n            i++;\n        }\n        if (this.isRowDragable()) {\n            applyWidth(i, indentWidth);\n        }\n        this.isAutoGen = false;\n        this.getHeaderTable().querySelector('.e-emptycell').setAttribute('indentRefreshed', 'true');\n    };\n    /**\n     * @hidden\n     * @returns {void}\n     */\n    Grid.prototype.resetIndentWidth = function () {\n        if (ispercentageWidth(this)) {\n            this.getHeaderTable().querySelector('.e-emptycell').removeAttribute('indentRefreshed');\n            this.widthService.setWidthToColumns();\n            this.recalcIndentWidth();\n            if (this.autoFit) {\n                this.preventAdjustColumns();\n            }\n        }\n        if ((this.width === 'auto' || typeof (this.width) === 'string' && this.width.indexOf('%') !== -1)\n            && this.getColumns().filter(function (col) { return (!col.width || col.width === 'auto') && col.minWidth; }).length > 0) {\n            var tgridWidth = this.widthService.getTableWidth(this.getColumns());\n            this.widthService.setMinwidthBycalculation(tgridWidth);\n        }\n        if (this.isFrozenGrid() && this.enableColumnVirtualization && this.widthService) {\n            this.widthService.refreshFrozenScrollbar();\n        }\n        if (this.allowTextWrap && this.textWrapSettings.wrapMode !== 'Content') {\n            this.notify(events.refreshHandlers, {});\n        }\n        if (this.frozenRows && this.scrollModule) {\n            this.scrollModule.resizeFrozenRowBorder();\n        }\n    };\n    /**\n     * @hidden\n     * @returns {boolean} Returns isRowDragable\n     */\n    Grid.prototype.isRowDragable = function () {\n        return this.allowRowDragAndDrop && !this.rowDropSettings.targetID;\n    };\n    /**\n     * Changes the Grid column positions by field names.\n     *\n     * @param  {string} fromFName - Defines the origin field name.\n     * @param  {string} toFName - Defines the destination field name.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.reorderColumns = function (fromFName, toFName) {\n        if (this.reorderModule) {\n            this.reorderModule.reorderColumns(fromFName, toFName);\n        }\n    };\n    /**\n     * Changes the Grid column positions by field index. If you invoke reorderColumnByIndex multiple times,\n     * then you won't get the same results every time.\n     *\n     * @param  {number} fromIndex - Defines the origin field index.\n     * @param  {number} toIndex - Defines the destination field index.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.reorderColumnByIndex = function (fromIndex, toIndex) {\n        if (this.reorderModule) {\n            this.reorderModule.reorderColumnByIndex(fromIndex, toIndex);\n        }\n    };\n    /**\n     * Changes the Grid column positions by field index. If you invoke reorderColumnByTargetIndex multiple times,\n     * then you will get the same results every time.\n     *\n     * @param  {string} fieldName - Defines the field name.\n     * @param  {number} toIndex - Defines the destination field index.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.reorderColumnByTargetIndex = function (fieldName, toIndex) {\n        if (this.reorderModule) {\n            this.reorderModule.reorderColumnByTargetIndex(fieldName, toIndex);\n        }\n    };\n    /**\n     * Changes the Grid Row position with given indexes.\n     *\n     * @param  {number} fromIndexes - Defines the origin Indexes.\n     * @param  {number} toIndex - Defines the destination Index.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.reorderRows = function (fromIndexes, toIndex) {\n        if (this.rowDragAndDropModule) {\n            this.rowDragAndDropModule.reorderRows(fromIndexes, toIndex);\n        }\n    };\n    /**\n     * @param {ReturnType} e - Defines the Return type\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.refreshDataSource = function (e) {\n        this.notify('refreshdataSource', e);\n    };\n    /**\n     * @param {boolean} enable -Defines the enable\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.disableRowDD = function (enable) {\n        var headerTable = this.getHeaderTable();\n        var contentTable = this.getContentTable();\n        var headerRows = headerTable.querySelectorAll('th.e-rowdragheader, th.e-mastercell');\n        var rows = this.getRows();\n        var disValue = enable ? 'none' : '';\n        setStyleAttribute(headerTable.querySelector(literals.colGroup).childNodes[0], { 'display': disValue });\n        setStyleAttribute(contentTable.querySelector(literals.colGroup).childNodes[0], { 'display': disValue });\n        for (var i = 0; i < this.getRows().length; i++) {\n            var ele = rows[parseInt(i.toString(), 10)].firstElementChild;\n            if (enable) {\n                addClass([ele], 'e-hide');\n            }\n            else {\n                removeClass([ele], ['e-hide']);\n            }\n        }\n        for (var j = 0; j < headerTable.querySelectorAll('th.e-rowdragheader, th.e-mastercell').length; j++) {\n            var ele = headerRows[parseInt(j.toString(), 10)];\n            if (enable) {\n                addClass([ele], 'e-hide');\n            }\n            else {\n                removeClass([ele], ['e-hide']);\n            }\n        }\n    };\n    /**\n     * Changes the column width to automatically fit its content to ensure that the width shows the content without wrapping/hiding.\n     * > * This method ignores the hidden columns.\n     * > * Uses the `autoFitColumns` method in the `dataBound` event to resize at initial rendering.\n     *\n     * @param  {string |string[]} fieldNames - Defines the column names.\n     * @returns {void}\n     *\n     *\n     * ```typescript\n     * <div id=\"Grid\"></div>\n     * <script>\n     * let gridObj: Grid = new Grid({\n     *     dataSource: employeeData,\n     *     columns: [\n     *         { field: 'OrderID', headerText: 'Order ID', width:100 },\n     *         { field: 'EmployeeID', headerText: 'Employee ID' }],\n     *     dataBound: () => gridObj.autoFitColumns('EmployeeID')\n     * });\n     * gridObj.appendTo('#Grid');\n     * </script>\n     * ```\n     *\n     */\n    Grid.prototype.autoFitColumns = function (fieldNames) {\n        if (this.resizeModule) {\n            this.resizeModule.autoFitColumns(fieldNames);\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.preventAdjustColumns = function () {\n        if ((this.enableAdaptiveUI && this.rowRenderingMode === 'Vertical')\n            || (this.allowResizing && this.resizeSettings.mode === 'Auto')) {\n            return;\n        }\n        var columns = this.getColumns();\n        var headerTable = this.getHeaderTable();\n        var tableWidth = 0;\n        for (var i = 0; i < columns.length; i++) {\n            if (columns[parseInt(i.toString(), 10)].visible) {\n                if (this.groupSettings.columns.length\n                    && this.groupSettings.columns.indexOf(columns[parseInt(i.toString(), 10)].field) > -1) {\n                    var headerCol = [].slice.call(headerTable.querySelector('colgroup')\n                        .querySelectorAll(':not(.e-group-intent):not(.e-detail-intent):not(.e-drag-intent)'));\n                    if (headerCol[parseInt(i.toString(), 10)].style.display === 'none') {\n                        continue;\n                    }\n                }\n                if (columns[parseInt(i.toString(), 10)].width) {\n                    tableWidth += parseFloat(columns[parseInt(i.toString(), 10)].width.toString());\n                }\n                else {\n                    tableWidth = 0;\n                    break;\n                }\n            }\n        }\n        if (tableWidth) {\n            var percentageWidth = this.isPercentageWidthGrid();\n            var unit = this.widthUnit(percentageWidth);\n            var contentTable = this.getContentTable();\n            if (this.groupSettings.columns.length || this.isDetail() || this.isRowDragable()) {\n                var indentWidth = this.defaultIndentWidth(percentageWidth);\n                var indentWidthUnitFormat = indentWidth.toString() + unit;\n                var headerIndentCol = [].slice.call(headerTable.querySelector('colgroup')\n                    .querySelectorAll('.e-group-intent, .e-detail-intent, .e-drag-intent'));\n                var contentIndentCol = [].slice.call(contentTable.querySelector('colgroup')\n                    .querySelectorAll('.e-group-intent, .e-detail-intent, .e-drag-intent'));\n                for (var i = 0; i < headerIndentCol.length; i++) {\n                    headerIndentCol[parseInt(i.toString(), 10)].style.setProperty('width', indentWidthUnitFormat);\n                    contentIndentCol[parseInt(i.toString(), 10)].style.setProperty('width', indentWidthUnitFormat);\n                    tableWidth += indentWidth;\n                }\n            }\n            if ((percentageWidth && tableWidth < 100)\n                || (!percentageWidth && tableWidth < contentTable.parentElement.clientWidth)) {\n                if (!isNullOrUndefined(contentTable.querySelector('.e-emptyrow'))) {\n                    addClass([headerTable], ['e-tableborder']);\n                    removeClass([contentTable], ['e-tableborder']);\n                }\n                else {\n                    addClass([headerTable, contentTable], ['e-tableborder']);\n                }\n            }\n            var tableWidthUnitFormat = tableWidth.toString() + unit;\n            headerTable.style.setProperty('width', tableWidthUnitFormat);\n            contentTable.style.setProperty('width', tableWidthUnitFormat);\n        }\n        else {\n            this.restoreAdjustColumns();\n        }\n    };\n    Grid.prototype.restoreAdjustColumns = function () {\n        if ((this.enableAdaptiveUI && this.rowRenderingMode === 'Vertical')\n            || (this.allowResizing && this.resizeSettings.mode === 'Auto')) {\n            return;\n        }\n        var headerTable = this.getHeaderTable();\n        var contentTable = this.getContentTable();\n        removeClass([headerTable, contentTable], ['e-tableborder']);\n        headerTable.style.removeProperty('width');\n        contentTable.style.removeProperty('width');\n        if (this.groupSettings.columns.length || this.isDetail() || this.isRowDragable()) {\n            var percentageWidth = this.isPercentageWidthGrid();\n            var indentWidthUnitFormat_1 = this.defaultIndentWidth(percentageWidth).toString() + this.widthUnit(percentageWidth);\n            var headerIndentCol = [].slice.call(headerTable.querySelector('colgroup')\n                .querySelectorAll('.e-group-intent, .e-detail-intent, .e-drag-intent'));\n            headerIndentCol.forEach(function (element) {\n                element.style.setProperty('width', indentWidthUnitFormat_1);\n            });\n            headerTable.querySelector('.e-emptycell').removeAttribute('indentRefreshed');\n            this.recalcIndentWidth();\n        }\n    };\n    Grid.prototype.widthUnit = function (percentageWidth) {\n        return percentageWidth ? '%' : 'px';\n    };\n    Grid.prototype.defaultIndentWidth = function (percentageWidth) {\n        return percentageWidth ? parseFloat((30 / this.element.offsetWidth * 100).toFixed(1)) : 30;\n    };\n    Grid.prototype.isPercentageWidthGrid = function () {\n        return this.getColumns()[0].width.toString().indexOf('%') > -1;\n    };\n    /**\n     * @param {number} x - Defines the number\n     * @param {number} y - Defines the number\n     * @param {Element} target - Defines the Element\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.createColumnchooser = function (x, y, target) {\n        if (this.columnChooserModule) {\n            this.columnChooserModule.renderColumnChooser(x, y, target);\n        }\n    };\n    Grid.prototype.initializeServices = function () {\n        this.serviceLocator.register('widthService', this.widthService = new ColumnWidthService(this));\n        this.serviceLocator.register('cellRendererFactory', new CellRendererFactory);\n        this.serviceLocator.register('rendererFactory', new RendererFactory);\n        this.serviceLocator.register('localization', this.localeObj = new L10n(this.getModuleName(), this.defaultLocale, this.locale));\n        this.serviceLocator.register('valueFormatter', this.valueFormatterService = new ValueFormatter(this.locale));\n        this.serviceLocator.register('showHideService', this.showHider = new ShowHide(this));\n        this.serviceLocator.register('ariaService', this.ariaService = new AriaService());\n        this.serviceLocator.register('focus', this.focusModule = new FocusStrategy(this));\n    };\n    Grid.prototype.processModel = function () {\n        var gCols = this.groupSettings.columns;\n        var sCols = this.sortSettings.columns;\n        var flag;\n        var j;\n        if (this.allowGrouping) {\n            var _loop_3 = function (i, len) {\n                j = 0;\n                for (var sLen = sCols.length; j < sLen; j++) {\n                    if (sCols[parseInt(j.toString(), 10)].field === gCols[parseInt(i.toString(), 10)]) {\n                        flag = true;\n                        break;\n                    }\n                }\n                if (!flag) {\n                    sCols.push({ field: gCols[parseInt(i.toString(), 10)], direction: 'Ascending', isFromGroup: true });\n                }\n                else {\n                    if (this_3.allowSorting) {\n                        this_3.sortedColumns.push(sCols[parseInt(j.toString(), 10)].field);\n                    }\n                    else {\n                        sCols[parseInt(j.toString(), 10)].direction = 'Ascending';\n                    }\n                }\n                if (!this_3.groupSettings.showGroupedColumn) {\n                    var column = this_3.enableColumnVirtualization ?\n                        this_3.columns.filter(function (c) { return c.field === gCols[parseInt(i.toString(), 10)]; })[0]\n                        : this_3.getColumnByField(gCols[parseInt(i.toString(), 10)]);\n                    if (column) {\n                        column.visible = false;\n                    }\n                    else {\n                        this_3.log('initial_action', { moduleName: 'group', columnName: gCols[parseInt(i.toString(), 10)] });\n                    }\n                }\n            };\n            var this_3 = this;\n            for (var i = 0, len = gCols.length; i < len; i++) {\n                _loop_3(i, len);\n            }\n        }\n        if (!gCols.length) {\n            for (var i = 0; i < sCols.length; i++) {\n                this.sortedColumns.push(sCols[parseInt(i.toString(), 10)].field);\n            }\n        }\n        this.rowTemplateFn = templateCompiler(this.rowTemplate);\n        this.emptyRecordTemplateFn = templateCompiler(this.emptyRecordTemplate);\n        this.detailTemplateFn = templateCompiler(this.detailTemplate);\n        this.editTemplateFn = templateCompiler(this.editSettings.template);\n        this.editHeaderTemplateFn = templateCompiler(this.editSettings.headerTemplate);\n        this.editFooterTemplateFn = templateCompiler(this.editSettings.footerTemplate);\n        if (!isNullOrUndefined(this.parentDetails)) {\n            var value = isNullOrUndefined(this.parentDetails.parentKeyFieldValue) ? 'undefined' :\n                this.parentDetails.parentKeyFieldValue;\n            this.query.where(this.queryString, 'equal', value, true);\n        }\n        this.initForeignColumn();\n    };\n    Grid.prototype.initForeignColumn = function () {\n        if (this.isForeignKeyEnabled(this.getColumns())) {\n            this.notify(events.initForeignKeyColumn, this.getForeignKeyColumns());\n        }\n    };\n    Grid.prototype.enableVerticalRendering = function () {\n        if (this.rowRenderingMode === 'Vertical') {\n            this.element.classList.add('e-row-responsive');\n        }\n        else {\n            this.element.classList.remove('e-row-responsive');\n        }\n    };\n    Grid.prototype.gridRender = function () {\n        var _a;\n        this.updateRTL();\n        if (this.rowRenderingMode === 'Vertical') {\n            this.element.classList.add('e-row-responsive');\n        }\n        if (this.enableHover) {\n            this.element.classList.add('e-gridhover');\n        }\n        if (Browser.isDevice) {\n            this.element.classList.add('e-device');\n        }\n        if (this.rowHeight) {\n            this.element.classList.add('e-grid-min-height');\n        }\n        if (this.cssClass) {\n            if (this.cssClass.indexOf(' ') !== -1) {\n                (_a = this.element.classList).add.apply(_a, this.cssClass.split(' '));\n            }\n            else {\n                this.element.classList.add(this.cssClass);\n            }\n        }\n        // If the below if statement is removed, then drag and drop between grids will not work in firefox browser.\n        if (this.allowRowDragAndDrop && this.rowDropSettings.targetID && Browser.info.name === 'mozilla') {\n            this.element.classList.add('e-disableuserselect');\n        }\n        classList(this.element, ['e-responsive', 'e-default'], []);\n        var rendererFactory = this.serviceLocator.getService('rendererFactory');\n        this.headerModule = rendererFactory.getRenderer(RenderType.Header);\n        this.contentModule = rendererFactory.getRenderer(RenderType.Content);\n        this.printModule = new Print(this, this.scrollModule);\n        this.clipboardModule = new Clipboard(this, this.serviceLocator);\n        this.renderModule.render();\n        this.eventInitializer();\n        this.createGridPopUpElement();\n        this.widthService.setWidthToColumns();\n        this.updateGridLines();\n        this.applyTextWrap();\n        this.createTooltip(); //for clip mode ellipsis\n        this.enableBoxSelection();\n    };\n    Grid.prototype.dataReady = function () {\n        this.scrollModule.setWidth();\n        this.scrollModule.setHeight();\n        if (this.height !== 'auto') {\n            this.scrollModule.setPadding();\n        }\n    };\n    Grid.prototype.updateRTL = function () {\n        if (this.enableRtl) {\n            this.element.classList.add('e-rtl');\n        }\n        else {\n            this.element.classList.remove('e-rtl');\n        }\n    };\n    Grid.prototype.createGridPopUpElement = function () {\n        var popup = this.createElement('div', { className: 'e-gridpopup', styles: 'display:none;' });\n        var content = this.createElement('div', { className: literals.content, attrs: { tabIndex: '-1' } });\n        append([content, this.createElement('div', { className: 'e-uptail e-tail' })], popup);\n        content.appendChild(this.createElement('span'));\n        append([content, this.createElement('div', { className: 'e-downtail e-tail' })], popup);\n        this.element.appendChild(popup);\n    };\n    Grid.prototype.updateGridLines = function () {\n        classList(this.element, [], ['e-verticallines', 'e-horizontallines', 'e-hidelines', 'e-bothlines']);\n        switch (this.gridLines) {\n            case 'Horizontal':\n                this.element.classList.add('e-horizontallines');\n                break;\n            case 'Vertical':\n                this.element.classList.add('e-verticallines');\n                break;\n            case 'None':\n                this.element.classList.add('e-hidelines');\n                break;\n            case 'Both':\n                this.element.classList.add('e-bothlines');\n                break;\n        }\n        this.updateResizeLines();\n    };\n    Grid.prototype.updateResizeLines = function () {\n        if (this.allowResizing &&\n            !(this.gridLines === 'Vertical' || this.gridLines === 'Both')) {\n            this.element.classList.add('e-resize-lines');\n        }\n        else {\n            this.element.classList.remove('e-resize-lines');\n        }\n    };\n    /**\n     * The function is used to apply text wrap\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.applyTextWrap = function () {\n        if (this.allowTextWrap) {\n            var headerRows = [].slice.call(this.element.getElementsByClassName('e-columnheader'));\n            switch (this.textWrapSettings.wrapMode) {\n                case 'Header':\n                    wrap(this.element, false);\n                    wrap(this.getContent(), false);\n                    wrap(headerRows, true);\n                    break;\n                case 'Content':\n                    wrap(this.getContent(), true);\n                    wrap(this.element, false);\n                    wrap(headerRows, false);\n                    break;\n                default:\n                    wrap(this.element, true);\n                    wrap(this.getContent(), false);\n                    wrap(headerRows, false);\n            }\n            if (this.textWrapSettings.wrapMode !== 'Content') {\n                this.notify(events.refreshHandlers, {});\n            }\n        }\n    };\n    /**\n     * The function is used to remove text wrap\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.removeTextWrap = function () {\n        wrap(this.element, false);\n        var headerRows = [].slice.call(this.element.getElementsByClassName('e-columnheader'));\n        wrap(headerRows, false);\n        wrap(this.getContent(), false);\n        if (this.textWrapSettings.wrapMode !== 'Content') {\n            this.notify(events.refreshHandlers, {});\n        }\n    };\n    /**\n     * The function is used to add Tooltip to the grid cell that has ellipsiswithtooltip clip mode.\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.createTooltip = function () {\n        this.toolTipObj = new Tooltip({\n            opensOn: 'custom',\n            content: '',\n            cssClass: this.cssClass ? this.cssClass : null\n        }, this.element);\n    };\n    /** @hidden\n     * @returns {void}\n     */\n    Grid.prototype.freezeRefresh = function () {\n        if (this.enableVirtualization || this.enableInfiniteScrolling) {\n            this.pageSettings.currentPage = 1;\n        }\n        this.componentRefresh();\n    };\n    Grid.prototype.getTooltipStatus = function (element) {\n        var headerTable = this.getHeaderTable();\n        var headerDivTag = this.enableAdaptiveUI && this.rowRenderingMode === 'Vertical' ? 'e-gridcontent' : 'e-gridheader';\n        var htable = this.createTable(headerTable, headerDivTag, 'header');\n        var ctable = this.createTable(headerTable, headerDivTag, 'content');\n        var table = element.classList.contains('e-headercell') ? htable : ctable;\n        var ele = element.classList.contains('e-headercell') ? 'th' : 'tr';\n        table.querySelector(ele).className = element.className;\n        table.querySelector(ele).innerHTML = element.innerHTML;\n        var width = table.querySelector(ele).getBoundingClientRect().width;\n        document.body.removeChild(htable);\n        document.body.removeChild(ctable);\n        if ((width > element.getBoundingClientRect().width && !element.classList.contains('e-editedbatchcell')) ||\n            (this.enableAdaptiveUI && this.rowRenderingMode === 'Vertical' &&\n                width > (element.getBoundingClientRect().width * 0.55) - (this.height !== 'auto' ? 16 : 0))) {\n            return true;\n        }\n        return false;\n    };\n    Grid.prototype.mouseMoveHandler = function (e) {\n        if (this.isEllipsisTooltip()) {\n            var element = parentsUntil(e.target, 'e-ellipsistooltip');\n            if (this.prevElement !== element || e.type === 'mouseout') {\n                this.toolTipObj.close();\n            }\n            var tagName = e.target.tagName;\n            var elemNames = ['A', 'BUTTON', 'INPUT'];\n            if (element && e.type !== 'mouseout' && !(Browser.isDevice && elemNames.indexOf(tagName) !== -1)) {\n                if (this.getTooltipStatus(element)) {\n                    var col = this.getColumns()[parseInt(element.getAttribute(literals.dataColIndex), 10)];\n                    var domSetter = col.disableHtmlEncode ? 'innerText' : 'innerHTML';\n                    var contentDiv = this.createElement('div');\n                    if (element.getElementsByClassName('e-headertext').length) {\n                        var innerElement = element.getElementsByClassName('e-headertext')[0];\n                        contentDiv[\"\" + domSetter] = this.sanitize(innerElement.innerText);\n                        this.toolTipObj.content = contentDiv;\n                    }\n                    else {\n                        contentDiv[\"\" + domSetter] = this.sanitize(element.innerText);\n                        this.toolTipObj.content = contentDiv;\n                    }\n                    this.prevElement = element;\n                    if (this.enableHtmlSanitizer) {\n                        this.toolTipObj.enableHtmlSanitizer = true;\n                    }\n                    if (col.disableHtmlEncode) {\n                        this.toolTipObj.enableHtmlParse = false;\n                    }\n                    this.toolTipObj['open'](element);\n                }\n            }\n        }\n    };\n    Grid.prototype.isEllipsisTooltip = function () {\n        var cols = this.getColumns();\n        if (this.clipMode === 'EllipsisWithTooltip') {\n            return true;\n        }\n        for (var i = 0; i < cols.length; i++) {\n            if (cols[parseInt(i.toString(), 10)].clipMode === 'EllipsisWithTooltip') {\n                return true;\n            }\n        }\n        return false;\n    };\n    Grid.prototype.scrollHandler = function () {\n        if (this.isEllipsisTooltip()) {\n            this.toolTipObj.close();\n        }\n    };\n    /**\n     * To create table for ellipsiswithtooltip\n     *\n     * @param {Element} table - Defines the table\n     * @param {string} tag - Defines the tag\n     * @param {string} type - Defines the type\n     * @returns {HTMLDivElement} Returns the HTML div ELement\n     * @hidden\n     */\n    Grid.prototype.createTable = function (table, tag, type) {\n        var myTableDiv = this.createElement('div');\n        myTableDiv.className = this.element.className;\n        myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n        var mySubDiv = this.createElement('div');\n        mySubDiv.className = tag;\n        var myTable = this.createElement('table');\n        myTable.className = table.className;\n        myTable.style.cssText = 'table-layout: auto;width: auto';\n        var ele = (type === 'header') ? 'th' : 'td';\n        var myTr = this.createElement('tr', { attrs: { role: 'row' } });\n        var mytd = this.createElement(ele);\n        myTr.appendChild(mytd);\n        myTable.appendChild(myTr);\n        mySubDiv.appendChild(myTable);\n        myTableDiv.appendChild(mySubDiv);\n        document.body.appendChild(myTableDiv);\n        return myTableDiv;\n    };\n    Grid.prototype.onKeyPressed = function (e) {\n        if (e.action === 'tab' || e.action === 'shiftTab') {\n            this.toolTipObj.close();\n        }\n    };\n    /**\n     * Binding events to the element while component creation.\n     *\n     * @hidden\n     * @returns {void}\n     */\n    Grid.prototype.wireEvents = function () {\n        EventHandler.add(this.element, 'click', this.mouseClickHandler, this);\n        EventHandler.add(this.element, 'touchend', this.mouseClickHandler, this);\n        EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n        EventHandler.add(this.element, 'dblclick', this.dblClickHandler, this);\n        EventHandler.add(this.element, 'keydown', this.keyPressHandler, this);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        EventHandler.add(window, 'resize', this.resetIndentWidth, this);\n        if (this.allowKeyboard) {\n            this.element.tabIndex = this.element.tabIndex === -1 ? 0 : this.element.tabIndex;\n        }\n        this.keyboardModule = new KeyboardEvents(this.element, {\n            keyAction: this.keyActionHandler.bind(this),\n            keyConfigs: this.keyConfigs,\n            eventName: 'keydown'\n        });\n        EventHandler.add(this.getContent().firstElementChild, 'scroll', this.scrollHandler, this);\n        EventHandler.add(this.element, 'mouseover', this.mouseMoveHandler, this);\n        EventHandler.add(this.element, 'mouseout', this.mouseMoveHandler, this);\n        EventHandler.add(this.getContent(), 'touchstart', this.tapEvent, this);\n        EventHandler.add(document.body, 'keydown', this.keyDownHandler, this);\n    };\n    /**\n     * Unbinding events from the element while component destroy.\n     *\n     * @hidden\n     * @returns {void}\n     */\n    Grid.prototype.unwireEvents = function () {\n        EventHandler.remove(this.element, 'click', this.mouseClickHandler);\n        EventHandler.remove(this.element, 'touchend', this.mouseClickHandler);\n        EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n        EventHandler.remove(this.element, 'dblclick', this.dblClickHandler);\n        EventHandler.remove(this.getContent().firstElementChild, 'scroll', this.scrollHandler);\n        EventHandler.remove(this.element, 'mouseover', this.mouseMoveHandler);\n        EventHandler.remove(this.element, 'mouseout', this.mouseMoveHandler);\n        EventHandler.remove(this.element, 'keydown', this.keyPressHandler);\n        EventHandler.remove(this.getContent(), 'touchstart', this.tapEvent);\n        EventHandler.remove(document.body, 'keydown', this.keyDownHandler);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        EventHandler.remove(window, 'resize', this.resetIndentWidth);\n    };\n    /**\n     * @hidden\n     * @returns {void}\n     */\n    Grid.prototype.addListener = function () {\n        if (this.isDestroyed) {\n            return;\n        }\n        this.on(events.dataReady, this.dataReady, this);\n        this.on(events.contentReady, this.recalcIndentWidth, this);\n        this.on(events.headerRefreshed, this.recalcIndentWidth, this);\n        this.on(events.refreshFrozenPosition, this.refreshFrozenPosition, this);\n        this.on(events.refreshSplitFrozenColumn, this.refreshSplitFrozenColumn, this);\n        this.dataBoundFunction = this.refreshMediaCol.bind(this);\n        this.addEventListener(events.dataBound, this.dataBoundFunction);\n        this.on(events.keyPressed, this.onKeyPressed, this);\n    };\n    /**\n     * @hidden\n     * @returns {void}\n     */\n    Grid.prototype.removeListener = function () {\n        if (this.isDestroyed) {\n            return;\n        }\n        this.off(events.dataReady, this.dataReady);\n        this.off(events.contentReady, this.recalcIndentWidth);\n        this.off(events.headerRefreshed, this.recalcIndentWidth);\n        this.on(events.refreshFrozenPosition, this.refreshFrozenPosition, this);\n        this.on(events.refreshSplitFrozenColumn, this.refreshSplitFrozenColumn, this);\n        this.removeEventListener(events.dataBound, this.dataBoundFunction);\n        this.off(events.keyPressed, this.onKeyPressed);\n    };\n    /**\n     * Get current visible data of grid.\n     *\n     * @returns {Object[]} Returns the current view records\n     *\n     * @isGenericType true\n     */\n    Grid.prototype.getCurrentViewRecords = function () {\n        if (isGroupAdaptive(this)) {\n            return isNullOrUndefined(this.currentViewData.records) ?\n                this.currentViewData : this.currentViewData.records;\n        }\n        if (this.groupSettings.enableLazyLoading) {\n            return this.currentViewData;\n        }\n        return (this.allowGrouping && this.groupSettings.columns.length && this.currentViewData.length\n            && this.currentViewData.records) ? this.currentViewData.records\n            : this.currentViewData;\n    };\n    Grid.prototype.mouseClickHandler = function (e) {\n        if (this.isChildGrid(e) || (parentsUntil(e.target, 'e-gridpopup') && e.touches) ||\n            this.element.getElementsByClassName('e-cloneproperties').length || this.checkEdit(e)) {\n            return;\n        }\n        if (((!this.allowRowDragAndDrop && (parentsUntil(e.target, literals.gridContent) ||\n            e.target.tagName === 'TD')) || (!(this.allowGrouping || this.allowReordering) &&\n            parentsUntil(e.target, 'e-gridheader'))) && e.touches) {\n            return;\n        }\n        if (parentsUntil(e.target, 'e-gridheader') && this.allowRowDragAndDrop &&\n            !(parentsUntil(e.target, 'e-filterbarcell')) && (e.target &&\n            ['A', 'BUTTON', 'INPUT'].indexOf(e.target.tagName) === -1)) {\n            e.preventDefault();\n        }\n        var args = this.getRowInfo(e.target);\n        var cancel = 'cancel';\n        args[\"\" + cancel] = false;\n        var isDataRow = false;\n        var tr = closest(e.target, 'tr');\n        if (tr && tr.getAttribute('data-uid')) {\n            var rowObj = this.getRowObjectFromUID(tr.getAttribute('data-uid'));\n            isDataRow = rowObj ? rowObj.isDataRow : false;\n        }\n        if (isDataRow) {\n            this.trigger(events.recordClick, args);\n        }\n        this.notify(events.click, e);\n    };\n    Grid.prototype.checkEdit = function (e) {\n        var tr = parentsUntil(e.target, literals.row);\n        var isEdit = this.editSettings.mode !== 'Batch' &&\n            this.isEdit && tr && (tr.classList.contains(literals.editedRow) || tr.classList.contains(literals.addedRow));\n        return !parentsUntil(e.target, 'e-unboundcelldiv') && (isEdit || (parentsUntil(e.target, literals.rowCell) &&\n            parentsUntil(e.target, literals.rowCell).classList.contains('e-editedbatchcell')));\n    };\n    Grid.prototype.dblClickHandler = function (e) {\n        var grid = parentsUntil(e.target, 'e-grid');\n        if (isNullOrUndefined(grid) || grid.id !== this.element.id || closest(e.target, '.e-unboundcelldiv')) {\n            return;\n        }\n        var dataRow = false;\n        var tr = closest(e.target, 'tr');\n        if (tr && tr.getAttribute('data-uid')) {\n            var rowObj = this.getRowObjectFromUID(tr.getAttribute('data-uid'));\n            dataRow = rowObj ? rowObj.isDataRow : false;\n        }\n        var args = this.getRowInfo(e.target);\n        args.target = e.target;\n        if (dataRow) {\n            this.trigger(events.recordDoubleClick, args);\n        }\n        this.notify(events.dblclick, e);\n    };\n    Grid.prototype.focusOutHandler = function (e) {\n        if (this.isChildGrid(e)) {\n            return;\n        }\n        if (!parentsUntil(e.target, 'e-grid')) {\n            this.element.querySelector('.e-gridpopup').style.display = 'None';\n        }\n        var filterClear = this.element.querySelector('.e-cancel:not(.e-hide)');\n        if (filterClear && !filterClear.parentElement.classList.contains('e-tbar-btn')) {\n            filterClear.classList.add('e-hide');\n        }\n        var relatedTarget = e.relatedTarget;\n        var ariaOwns = relatedTarget ? relatedTarget.getAttribute('aria-owns') : null;\n        if ((!relatedTarget || (!parentsUntil(relatedTarget, 'e-grid') &&\n            (!isNullOrUndefined(ariaOwns) &&\n                (ariaOwns)) !== e.target.getAttribute('aria-owns')))\n            && !this.keyPress && this.isEdit && !Browser.isDevice) {\n            if (this.editSettings.mode === 'Batch' && !(((parentsUntil(relatedTarget, 'e-ddl') || parentsUntil(relatedTarget, 'e-ddt')) &&\n                parentsUntil(relatedTarget, 'e-multi-select-list-wrapper')) && parentsUntil(relatedTarget, 'e-input-group'))\n                && (parentsUntil(relatedTarget, 'e-uploader') || !(relatedTarget &&\n                    isNullOrUndefined(parentsUntil(relatedTarget, 'e-input-group'))))) {\n                this.editModule.saveCell();\n                this.notify(events.editNextValCell, {});\n            }\n            if (this.editSettings.mode === 'Normal') {\n                this.editModule.editFormValidate();\n            }\n        }\n        this.keyPress = false;\n    };\n    Grid.prototype.isChildGrid = function (e) {\n        var gridElement = parentsUntil(e.target, 'e-grid');\n        if ((gridElement && gridElement.id !== this.element.id) || (parentsUntil(e.target, 'e-unboundcelldiv') &&\n            isNullOrUndefined(gridElement))) {\n            return true;\n        }\n        return false;\n    };\n    /**\n     * @param {Object} persistedData - Defines the persisted data\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.mergePersistGridData = function (persistedData) {\n        var data = this.getLocalData();\n        if (!(isNullOrUndefined(data) || (data === '')) || !isNullOrUndefined(persistedData)) {\n            var dataObj = !isNullOrUndefined(persistedData) ? persistedData : JSON.parse(data);\n            if (this.enableVirtualization && dataObj.pageSettings) {\n                dataObj.pageSettings.currentPage = 1;\n            }\n            var keys = Object.keys(dataObj);\n            this.isProtectedOnChange = true;\n            for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n                var key = keys_1[_i];\n                if ((typeof this[\"\" + key] === 'object') && !isNullOrUndefined(this[\"\" + key])) {\n                    if (Array.isArray(this[\"\" + key]) && key === 'columns') {\n                        this.setFrozenCount();\n                        setColumnIndex(this[\"\" + key]);\n                        this.mergeColumns(dataObj[\"\" + key], this[\"\" + key]);\n                        this.mergedColumns = true;\n                        this[\"\" + key] = dataObj[\"\" + key];\n                    }\n                    else {\n                        extend(this[\"\" + key], dataObj[\"\" + key]);\n                    }\n                }\n                else {\n                    this[\"\" + key] = dataObj[\"\" + key];\n                }\n            }\n            this.isProtectedOnChange = false;\n        }\n    };\n    Grid.prototype.mergeColumns = function (storedColumn, columns) {\n        var storedColumns = storedColumn;\n        var isFrozenGrid = this.isFrozenGrid();\n        var _loop_4 = function (i) {\n            var localCol = columns.filter(function (tCol) { return isFrozenGrid ?\n                tCol.index === storedColumns[parseInt(i.toString(), 10)][\"\" + literals.initialFrozenColumnIndex] :\n                tCol.index === storedColumns[parseInt(i.toString(), 10)].index; })[0];\n            if (!isNullOrUndefined(localCol)) {\n                if (isFrozenGrid) {\n                    localCol = extend({}, localCol, {}, true);\n                    localCol.freeze = storedColumns[parseInt(i.toString(), 10)].freeze;\n                }\n                if (localCol.columns && localCol.columns.length) {\n                    this_4.mergeColumns(storedColumns[parseInt(i.toString(), 10)].columns, localCol.columns);\n                    storedColumns[parseInt(i.toString(), 10)] = extend(localCol, storedColumns[parseInt(i.toString(), 10)], {}, true);\n                }\n                else {\n                    storedColumns[parseInt(i.toString(), 10)] = extend(localCol, storedColumns[parseInt(i.toString(), 10)], {}, true);\n                }\n            }\n        };\n        var this_4 = this;\n        for (var i = 0; i < storedColumns.length; i++) {\n            _loop_4(i);\n        }\n    };\n    /**\n     * @hidden\n     * @returns {boolean} Returns the isDetail\n     */\n    Grid.prototype.isDetail = function () {\n        return !isNullOrUndefined(this.detailTemplate) || !isNullOrUndefined(this.childGrid);\n    };\n    Grid.prototype.isCommandColumn = function (columns) {\n        var _this_1 = this;\n        return columns.some(function (col) {\n            if (col.columns) {\n                return _this_1.isCommandColumn(col.columns);\n            }\n            return !!(col.commands || col.commandsTemplate);\n        });\n    };\n    Grid.prototype.isForeignKeyEnabled = function (columns) {\n        var _this_1 = this;\n        return columns.some(function (col) {\n            if (col.columns) {\n                return _this_1.isForeignKeyEnabled(col.columns);\n            }\n            return !!(col.dataSource && col.foreignKeyValue);\n        });\n    };\n    Grid.prototype.keyPressHandler = function (e) {\n        var presskey = extend(e, { cancel: false });\n        this.trigger('keyPressed', presskey);\n        if (presskey.cancel === true) {\n            e.stopImmediatePropagation();\n        }\n    };\n    Grid.prototype.keyDownHandler = function (e) {\n        if (e.altKey) {\n            if (e.keyCode === 74) { //alt j\n                if (this.keyA) { //alt A J\n                    this.notify(events.groupCollapse, { target: e.target, collapse: false });\n                    this.keyA = false;\n                }\n                else {\n                    if (this.focusModule && this.focusModule.currentInfo && this.focusModule.currentInfo.element) {\n                        removeClass([this.focusModule.currentInfo.element, this.focusModule.currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n                        this.focusModule.currentInfo.element.tabIndex = -1;\n                    }\n                    if (!this.element.classList.contains('e-childgrid')) {\n                        this.element.focus();\n                    }\n                }\n            }\n            if (e.keyCode === 87) { //alt w\n                var focusModule = this.focusModule;\n                if (focusModule) {\n                    if (!this.currentViewData.length) {\n                        return;\n                    }\n                    focusModule.focusContent();\n                    focusModule.addOutline();\n                }\n            }\n            if (e.keyCode === 65) { //alt A\n                this.keyA = true;\n            }\n            if (e.keyCode === 72 && this.keyA) { //alt A H\n                this.notify(events.groupCollapse, { target: e.target, collapse: true });\n                this.keyA = false;\n            }\n        }\n        if (e.keyCode === 13) {\n            this.notify(events.enterKeyHandler, e);\n        }\n    };\n    Grid.prototype.keyActionHandler = function (e) {\n        if (this.isChildGrid(e) ||\n            (this.isEdit && e.action !== 'escape' && e.action !== 'enter' && e.action !== 'shiftEnter'\n                && e.action !== 'tab' && e.action !== 'shiftTab')) {\n            return;\n        }\n        else {\n            this.keyPress = true;\n        }\n        if (this.allowKeyboard) {\n            if (e.action === 'ctrlPlusP') {\n                e.preventDefault();\n                this.print();\n            }\n            this.notify(events.keyPressed, e);\n        }\n    };\n    /**\n     * @param {Function[]} modules - Defines the modules\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.setInjectedModules = function (modules) {\n        this.injectedModules = modules;\n    };\n    Grid.prototype.updateColumnObject = function () {\n        prepareColumns(this.columns, this.enableColumnVirtualization, this);\n        setColumnIndex(this.columns);\n        this.initForeignColumn();\n        this.notify(events.autoCol, {});\n    };\n    Grid.prototype.refreshFrozenPosition = function (obj) {\n        if (obj && obj.isModeChg) {\n            this.refreshColumns();\n            this.notify(events.refreshResizePosition, {});\n        }\n        else {\n            this.refreshColumns();\n        }\n    };\n    /**\n     * Gets the foreign columns from Grid.\n     *\n     * @returns {Column[]} Returns Foreign key column\n     */\n    Grid.prototype.getForeignKeyColumns = function () {\n        return this.getColumns().filter(function (col) {\n            return col.isForeignColumn();\n        });\n    };\n    /**\n     * @hidden\n     * @returns {number} Returns row height\n     */\n    Grid.prototype.getRowHeight = function () {\n        return this.rowHeight ? this.rowHeight : getRowHeight(this.element);\n    };\n    /**\n     * Refreshes the Grid column changes.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.refreshColumns = function () {\n        this.freezeColumnRefresh = true;\n        this.setFrozenCount();\n        this.updateFrozenColumnsWidth();\n        if (this.isFrozenGrid()) {\n            this.isPreventScrollEvent = true;\n        }\n        this.updateColumnObject();\n        this.checkLockColumns(this.getColumns());\n        this.refresh();\n        if (this.isFrozenGrid() && this.enableColumnVirtualization) {\n            var left = this.getContent().querySelector('.e-movablescrollbar').scrollLeft;\n            this.getHeaderContent().querySelector('.' + literals.headerContent).scrollLeft = left;\n            this.getContent().querySelector('.' + literals.content).scrollLeft = left;\n        }\n    };\n    /**\n     * Export Grid data to Excel file(.xlsx).\n     *\n     * @param  {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n     * @param  {boolean} isMultipleExport - Define to enable multiple export.\n     * @param  {Workbook} workbook - Defines the Workbook if multiple export is enabled.\n     * @param  {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n     * @returns {Promise<any>} Returns the excelexport\n     */\n    Grid.prototype.excelExport = function (excelExportProperties, isMultipleExport, \n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    workbook, isBlob) {\n        if (this.exportGrids && this.exportGrids.length) {\n            var gridIds = this.exportGrids.slice();\n            return this.exportMultipleExcelGrids(gridIds, excelExportProperties, isMultipleExport, workbook, isBlob);\n        }\n        else {\n            return this.excelExportModule ?\n                this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, false, isBlob) : null;\n        }\n    };\n    /**\n     * Export Grid data to CSV file.\n     *\n     * @param  {ExcelExportProperties} excelExportProperties - Defines the export properties of the Grid.\n     * @param  {boolean} isMultipleExport - Define to enable multiple export.\n     * @param  {Workbook} workbook - Defines the Workbook if multiple export is enabled.\n     * @param  {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n     * @returns {Promise<any>} Returns csv export\n     */\n    Grid.prototype.csvExport = function (excelExportProperties, \n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    isMultipleExport, workbook, isBlob) {\n        return this.excelExportModule ?\n            this.excelExportModule.Map(this, excelExportProperties, isMultipleExport, workbook, true, isBlob) : null;\n    };\n    /**\n     * Export Grid data to PDF document.\n     *\n     * @param {pdfExportProperties} pdfExportProperties - Defines the export properties of the Grid.\n     * @param {isMultipleExport} isMultipleExport - Define to enable multiple export.\n     * @param {pdfDoc} pdfDoc - Defined the Pdf Document if multiple export is enabled.\n     * @param {boolean} isBlob - If 'isBlob' set to true, then it will be returned as blob data.\n     *\n     * @returns {Promise<any>} Returns pdfexport\n     */\n    Grid.prototype.pdfExport = function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n        if (this.exportGrids && this.exportGrids.length) {\n            var gridIds = this.exportGrids.slice();\n            return this.exportMultiplePdfGrids(gridIds, pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n        }\n        else {\n            return this.pdfExportModule ? this.pdfExportModule.Map(this, pdfExportProperties, isMultipleExport, pdfDoc, isBlob) : null;\n        }\n    };\n    Grid.prototype.exportMultiplePdfGrids = function (gridIds, pdfExportProperties, isMultipleExport, \n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    pdfDoc, isBlob) {\n        var _this = this;\n        if (gridIds.length !== 0) {\n            var currentGridId = gridIds.shift();\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            var currentGridInstance = document.getElementById(currentGridId).ej2_instances[0];\n            var exportPromise = currentGridInstance.pdfExportModule ?\n                currentGridInstance.pdfExportModule.Map(currentGridInstance, pdfExportProperties, isMultipleExport, pdfDoc, isBlob)\n                : Promise.resolve();\n            return exportPromise.then(function (exportedGridResults) {\n                isMultipleExport = gridIds.length === 1 ? false : true;\n                return _this.exportMultiplePdfGrids(gridIds, pdfExportProperties, isMultipleExport, exportedGridResults, isBlob);\n            });\n        }\n        return null;\n    };\n    Grid.prototype.exportMultipleExcelGrids = function (gridIds, excelExportProperties, isMultipleExport, \n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    workbook, isBlob) {\n        var _this = this;\n        if (gridIds.length !== 0) {\n            var currentGridId = gridIds.shift();\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            var currentGridInstance = document.getElementById(currentGridId).ej2_instances[0];\n            var exportPromise = currentGridInstance.excelExportModule ?\n                currentGridInstance.excelExportModule.Map(currentGridInstance, excelExportProperties, isMultipleExport, workbook, false, isBlob) : null;\n            return exportPromise.then(function (exportedGridResults) {\n                isMultipleExport = gridIds.length === 1 ? false : true;\n                return _this.exportMultipleExcelGrids(gridIds, excelExportProperties, isMultipleExport, exportedGridResults, isBlob);\n            });\n        }\n        return null;\n    };\n    /**\n     * Groups a column by column name.\n     *\n     * @param  {string} columnName - Defines the column name to group.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.groupColumn = function (columnName) {\n        if (this.groupModule) {\n            this.groupModule.groupColumn(columnName);\n        }\n    };\n    /**\n     * Expands all the grouped rows of the Grid.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.groupExpandAll = function () {\n        if (this.groupModule) {\n            this.groupModule.expandAll();\n        }\n    };\n    /**\n     * Collapses all the grouped rows of the Grid.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.groupCollapseAll = function () {\n        if (this.groupModule) {\n            this.groupModule.collapseAll();\n        }\n    };\n    /**\n     * Expands or collapses grouped rows by target element.\n     *\n     * @param  {Element} target - Defines the target element of the grouped row.\n     * @returns {void}\n     */\n    // public expandCollapseRows(target: Element): void {\n    //     if (this.groupModule) {\n    //         this.groupModule.expandCollapseRows(target);\n    //     }\n    // }\n    /**\n     * Clears all the grouped columns of the Grid.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.clearGrouping = function () {\n        if (this.groupModule) {\n            this.groupModule.clearGrouping();\n        }\n    };\n    /**\n     * Ungroups a column by column name.\n     *\n     * {% codeBlock src='grid/ungroupColumn/index.md' %}{% endcodeBlock %}\n     *\n     * @param  {string} columnName - Defines the column name to ungroup.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.ungroupColumn = function (columnName) {\n        if (this.groupModule) {\n            this.groupModule.ungroupColumn(columnName);\n        }\n    };\n    /**\n     * Column chooser can be displayed on screen by given position(X and Y axis).\n     *\n     * @param {number} x - Defines the X axis.\n     * @param {number} y - Defines the Y axis.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.openColumnChooser = function (x, y) {\n        if (this.columnChooserModule) {\n            this.columnChooserModule.openColumnChooser(x, y);\n        }\n    };\n    Grid.prototype.scrollRefresh = function () {\n        var _this_1 = this;\n        var refresh = function () {\n            _this_1.scrollModule.refresh();\n            _this_1.off(events.contentReady, refresh);\n        };\n        this.on(events.contentReady, refresh, this);\n    };\n    /**\n     * Collapses a detail row with the given target.\n     *\n     * @param  {Element} target - Defines the expanded element to collapse.\n     * @returns {void}\n     */\n    // public detailCollapse(target: number | Element): void {\n    //     if (this.detailRowModule) {\n    //         this.detailRowModule.collapse(target);\n    //     }\n    // }\n    /**\n     * Collapses all the detail rows of the Grid.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.detailCollapseAll = function () {\n        if (this.detailRowModule) {\n            this.detailRowModule.collapseAll();\n        }\n    };\n    /**\n     * Expands a detail row with the given target.\n     *\n     * @param  {Element} target - Defines the collapsed element to expand.\n     * @returns {void}\n     */\n    // public detailExpand(target: number | Element): void {\n    //     if (this.detailRowModule) {\n    //         this.detailRowModule.expand(target);\n    //     }\n    // }\n    /**\n     * Expands all the detail rows of the Grid.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.detailExpandAll = function () {\n        if (this.detailRowModule) {\n            this.detailRowModule.expandAll();\n        }\n    };\n    /**\n     * Deselects the currently selected cells.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.clearCellSelection = function () {\n        if (this.selectionModule) {\n            this.selectionModule.clearCellSelection();\n        }\n    };\n    /**\n     * Deselects the currently selected rows.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.clearRowSelection = function () {\n        if (this.selectionModule) {\n            this.selectionModule.clearRowSelection();\n        }\n    };\n    /**\n     * Selects a collection of cells by row and column indexes.\n     *\n     * @param  {ISelectedCell[]} rowCellIndexes - Specifies the row and column indexes.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.selectCells = function (rowCellIndexes) {\n        if (this.selectionModule) {\n            this.selectionModule.selectCells(rowCellIndexes);\n        }\n    };\n    /**\n     * Selects a range of rows from start and end row indexes.\n     *\n     * @param  {number} startIndex - Specifies the start row index.\n     * @param  {number} endIndex - Specifies the end row index.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.selectRowsByRange = function (startIndex, endIndex) {\n        if (this.selectionModule) {\n            this.selectionModule.selectRowsByRange(startIndex, endIndex);\n        }\n    };\n    /**\n     * @hidden\n     * @returns {boolean} Returns whether context menu is open or not\n     */\n    Grid.prototype.isContextMenuOpen = function () {\n        return this.contextMenuModule && this.contextMenuModule.isOpen;\n    };\n    /**\n     * @param {Function} module - Defines the module\n     * @returns {boolean} return the injected modules\n     * @hidden\n     */\n    Grid.prototype.ensureModuleInjected = function (module) {\n        return this.getInjectedModules().indexOf(module) >= 0;\n    };\n    /**\n     * Destroys the given template reference.\n     *\n     * @param {string[]} propertyNames - Defines the collection of template name.\n     * @param {any} index - specifies the index\n     *\n     * @returns {void}\n     */\n    // eslint-disable-next-line\n    Grid.prototype.destroyTemplate = function (propertyNames, index) {\n        this.clearTemplate(propertyNames, index);\n    };\n    /**\n     * @param {string | string[]} type - Defines the type\n     * @param {Object} args - Defines the arguments\n     * @returns {void}\n     * @hidden\n     * @private\n     */\n    Grid.prototype.log = function (type, args) {\n        // eslint-disable-next-line\n        this.loggerModule ? this.loggerModule.log(type, args) : (function () { return 0; })();\n    };\n    /**\n     * @param {Element} element - Defines the element\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.applyBiggerTheme = function (element) {\n        if (this.element.classList.contains('e-bigger')) {\n            element.classList.add('e-bigger');\n        }\n    };\n    /**\n     * @hidden\n     * @returns {Object} Returns the previous row data\n     */\n    Grid.prototype.getPreviousRowData = function () {\n        var previousRowData = this.getRowsObject()[this.getRows().length - 1].data;\n        return previousRowData;\n    };\n    /**\n     * Hides the scrollbar placeholder of Grid content when grid content is not overflown.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.hideScroll = function () {\n        var content = this.getContent().querySelector('.' + literals.content);\n        if (content.scrollHeight <= content.clientHeight) {\n            this.scrollModule.removePadding();\n            content.style.overflowY = 'auto';\n        }\n    };\n    /**\n     * Get row index by primary key or row data.\n     *\n     * @param  {string | Object} value - Defines the primary key value.\n     *\n     * @returns {number} Returns the index\n     */\n    Grid.prototype.getRowIndexByPrimaryKey = function (value) {\n        var pkName = this.getPrimaryKeyFieldNames()[0];\n        value = typeof value === 'object' ? value[\"\" + pkName] : value;\n        var rows = this.getRowsObject();\n        for (var i = 0; i < rows.length; i++) {\n            if (rows[parseInt(i.toString(), 10)].isDetailRow || rows[parseInt(i.toString(), 10)].isCaptionRow) {\n                continue;\n            }\n            var pKvalue = rows[parseInt(i.toString(), 10)].data[\"\" + pkName];\n            if (pkName.split('.').length > 1) {\n                pKvalue = performComplexDataOperation(pkName, rows[parseInt(i.toString(), 10)].data);\n            }\n            if (pKvalue === value) {\n                return rows[parseInt(i.toString(), 10)].index;\n            }\n        }\n        return -1;\n    };\n    /**\n     * @param {string} field - Defines the field name\n     * @returns {Column} returns the column\n     * @hidden\n     */\n    // Need to have all columns while filtering with ColumnVirtualization.\n    Grid.prototype.grabColumnByFieldFromAllCols = function (field, isForeignKey) {\n        var column;\n        this.columnModel = [];\n        this.updateColumnModel(this.columns);\n        var gCols = this.columnModel;\n        for (var i = 0; i < gCols.length; i++) {\n            if ((!isForeignKey && field === gCols[parseInt(i.toString(), 10)].field) ||\n                (isForeignKey && gCols[parseInt(i.toString(), 10)].isForeignColumn() &&\n                    field === gCols[parseInt(i.toString(), 10)].foreignKeyValue)) {\n                column = gCols[parseInt(i.toString(), 10)];\n                break;\n            }\n        }\n        return column;\n    };\n    /**\n     * @param {string} uid - Defines the uid\n     * @returns {Column} returns the column\n     * @hidden\n     */\n    // Need to have all columns while filtering with ColumnVirtualization.\n    Grid.prototype.grabColumnByUidFromAllCols = function (uid) {\n        var column;\n        this.columnModel = [];\n        this.updateColumnModel(this.columns);\n        var gCols = this.columnModel;\n        for (var i = 0; i < gCols.length; i++) {\n            if (uid === gCols[parseInt(i.toString(), 10)].uid) {\n                column = gCols[parseInt(i.toString(), 10)];\n            }\n        }\n        return column;\n    };\n    /**\n     * Get all filtered records from the Grid and it returns array of objects for the local dataSource, returns a promise object if the Grid has remote data.\n     *\n     * @returns {Object[] | Promise<Object>} Returns the filtered records\n     */\n    Grid.prototype.getFilteredRecords = function () {\n        if ((this.allowFiltering && this.filterSettings.columns.length) || this.searchSettings.key.length) {\n            var query = this.renderModule.data.generateQuery(true);\n            if (this.dataSource && this.renderModule.data.isRemote() && this.dataSource instanceof DataManager) {\n                return this.renderModule.data.getData(this.dataSource, query);\n            }\n            else {\n                if (this.dataSource instanceof DataManager) {\n                    return this.dataSource.executeLocal(query);\n                }\n                else {\n                    return new DataManager(this.dataSource, query).executeLocal(query);\n                }\n            }\n        }\n        return [];\n    };\n    Grid.prototype.getUserAgent = function () {\n        var userAgent = Browser.userAgent.toLowerCase();\n        return /iphone|ipod|ipad|macintosh/.test(userAgent);\n    };\n    /**\n     * @param {TouchEventArgs} e - Defines the TouchEventArgs\n     * @returns {void}\n     * @hidden\n     */\n    // Need to have all columns while filtering with ColumnVirtualization.\n    // eslint-disable-next-line\n    Grid.prototype.tapEvent = function (e) {\n        if (this.getUserAgent()) {\n            if (!Global.timer) {\n                Global.timer = setTimeout(function () {\n                    Global.timer = null;\n                }, 300);\n            }\n            else {\n                clearTimeout(Global.timer);\n                Global.timer = null;\n                this.dblClickHandler(e);\n                this.notify(events.doubleTap, e);\n            }\n        }\n    };\n    /**\n     * @param {string} prefix - specifies the prefix\n     * @returns {string} returns the row uid\n     * @hidden\n     */\n    Grid.prototype.getRowUid = function (prefix) {\n        return \"\" + prefix + this.rowUid++;\n    };\n    /**\n     * @param {string} uid - specifies the uid\n     * @returns {Element} returns the element\n     * @hidden\n     */\n    Grid.prototype.getRowElementByUID = function (uid) {\n        var rowEle;\n        var rows = [];\n        var cntRows = [].slice.call(this.getContent().querySelector(literals.tbody).children);\n        if (this.frozenRows) {\n            rows = [].slice.call(this.getHeaderContent().querySelector(literals.tbody).children);\n            rows = rows.concat(cntRows);\n        }\n        else {\n            rows = cntRows;\n        }\n        for (var _i = 0, rows_2 = rows; _i < rows_2.length; _i++) {\n            var row = rows_2[_i];\n            if (row.getAttribute('data-uid') === uid) {\n                rowEle = row;\n                break;\n            }\n        }\n        return rowEle;\n    };\n    /**\n     * Gets the hidden columns from the Grid.\n     *\n     * @returns {Column[]} Returns the Column\n     */\n    Grid.prototype.getHiddenColumns = function () {\n        var cols = [];\n        for (var _i = 0, _a = this.columnModel; _i < _a.length; _i++) {\n            var col = _a[_i];\n            if (col.visible === false) {\n                cols.push(col);\n            }\n        }\n        return cols;\n    };\n    /**\n     * Calculates the page size by parent element height\n     *\n     * @param {number | string } containerHeight - specifies the container height\n     * @returns {number} returns the page size\n     */\n    Grid.prototype.calculatePageSizeByParentHeight = function (containerHeight) {\n        if (this.allowPaging) {\n            if ((this.allowTextWrap && this.textWrapSettings.wrapMode === 'Header') || (!this.allowTextWrap)) {\n                var pagesize = 0;\n                if (containerHeight.indexOf('%') !== -1) {\n                    containerHeight = parseInt(containerHeight, 10) / 100 * this.element.clientHeight;\n                }\n                var nonContentHeight = this.getNoncontentHeight() + this.getRowHeight();\n                if (containerHeight > nonContentHeight) {\n                    var contentHeight = 0;\n                    contentHeight = containerHeight - this.getNoncontentHeight();\n                    pagesize = (contentHeight / this.getRowHeight());\n                }\n                if (pagesize > 0) {\n                    return Math.floor(pagesize);\n                }\n            }\n        }\n        return 0;\n    };\n    Grid.prototype.getNoncontentHeight = function () {\n        var height = 0;\n        if (!isNullOrUndefined(this.getHeaderContent().clientHeight)) {\n            height += this.getHeaderContent().clientHeight;\n        }\n        if (this.toolbar && !isNullOrUndefined(this.element.querySelector('.e-toolbar').clientHeight)) {\n            height += this.element.querySelector('.e-toolbar').clientHeight;\n        }\n        if (this.allowPaging && !isNullOrUndefined(this.element.querySelector('.e-gridpager').clientHeight)) {\n            height += this.element.querySelector('.e-gridpager').clientHeight;\n        }\n        if (this.showColumnChooser && !isNullOrUndefined(this.element.querySelector('.e-columnheader').clientHeight)) {\n            height += this.element.querySelector('.e-columnheader').clientHeight;\n        }\n        if (this.allowGrouping && this.groupSettings.showDropArea && !isNullOrUndefined(this.element.querySelector('.e-groupdroparea').clientHeight)) {\n            height += this.element.querySelector('.e-groupdroparea').clientHeight;\n        }\n        if (this.aggregates.length > 0 && !isNullOrUndefined(this.element.querySelector('.e-summaryrow').clientHeight)) {\n            for (var i = 0; i < this.element.getElementsByClassName('e-summaryrow').length; i++) {\n                height += this.element.getElementsByClassName('e-summaryrow')[parseInt(i.toString(), 10)].clientHeight;\n            }\n        }\n        return height;\n    };\n    /**\n     *To perform aggregate operation on a column.\n     *\n     * @param  {AggregateColumnModel} summaryCol - Pass Aggregate Column details.\n     * @param  {Object} summaryData - Pass JSON Array for which its field values to be calculated.\n     *\n     * @returns {number} returns the summary values\n     */\n    Grid.prototype.getSummaryValues = function (summaryCol, summaryData) {\n        return DataUtil.aggregates[summaryCol.type.toLowerCase()](summaryData, summaryCol.field);\n    };\n    /**\n     * Sends a Post request to export Grid to Excel file in server side.\n     *\n     * @param  {string} url - Pass Url for server side excel export action.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.serverExcelExport = function (url) {\n        this.isExcel = true;\n        this.exportGrid(url);\n    };\n    /**\n     * Sends a Post request to export Grid to Pdf file in server side.\n     *\n     * @param  {string} url - Pass Url for server side pdf export action.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.serverPdfExport = function (url) {\n        this.isExcel = false;\n        this.exportGrid(url);\n    };\n    /**\n     * Sends a Post request to export Grid to CSV file in server side.\n     *\n     * @param  {string} url - Pass Url for server side pdf export action.\n     *\n     * @returns {void}\n     */\n    Grid.prototype.serverCsvExport = function (url) {\n        this.isExcel = true;\n        this.exportGrid(url);\n    };\n    /**\n     * @param {string} url - Defines exporting url\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.exportGrid = function (url) {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        var grid = this;\n        var query = grid.getDataModule().generateQuery(true);\n        var state = new UrlAdaptor().processQuery(new DataManager({ url: '' }), query);\n        var queries = JSON.parse(state.data);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        var gridModel = JSON.parse(this.addOnPersist(['allowGrouping', 'allowPaging', 'pageSettings', 'sortSettings', 'allowPdfExport', 'allowExcelExport', 'aggregates',\n            'filterSettings', 'groupSettings', 'columns', 'locale', 'searchSettings']));\n        var include = ['field', 'headerText', 'type', 'format', 'visible', 'foreignKeyValue', 'foreignKeyField',\n            'template', 'index', 'width', 'textAlign', 'headerTextAlign', 'columns'];\n        gridModel.filterSettings.columns = queries.where;\n        gridModel.searchSettings.fields = queries.search && queries.search[0]['fields'] || [];\n        gridModel.sortSettings.columns = queries.sorted;\n        gridModel.columns = this.setHeaderText(gridModel.columns, include);\n        var form = this.createElement('form', { id: 'ExportForm', styles: 'display:none;' });\n        var gridInput = this.createElement('input', { id: 'gridInput', attrs: { name: 'gridModel' } });\n        gridInput.value = JSON.stringify(gridModel);\n        form.method = 'POST';\n        form.action = url;\n        form.appendChild(gridInput);\n        document.body.appendChild(form);\n        form.submit();\n        form.remove();\n    };\n    /**\n     * @param {Column[]} columns - Defines array of columns\n     * @param {string[]} include - Defines array of sting\n     * @returns {Column[]} returns array of columns\n     * @hidden\n     */\n    Grid.prototype.setHeaderText = function (columns, include) {\n        for (var i = 0; i < columns.length; i++) {\n            var column = this.getColumnByUid(columns[parseInt(i.toString(), 10)].uid);\n            columns[parseInt(i.toString(), 10)].headerText = column.headerText;\n            if (!isNullOrUndefined(column.template)) {\n                columns[parseInt(i.toString(), 10)].template = 'true';\n            }\n            if (columns[parseInt(i.toString(), 10)].format) {\n                columns[parseInt(i.toString(), 10)].format = getNumberFormat(this.getFormat(columns[parseInt(i.toString(), 10)].format), columns[parseInt(i.toString(), 10)].type, this.isExcel, defaultCurrencyCode);\n            }\n            if (columns[parseInt(i.toString(), 10)].columns) {\n                this.setHeaderText(columns[parseInt(i.toString(), 10)].columns, include);\n            }\n            var keys = Object.keys(columns[parseInt(i.toString(), 10)]);\n            for (var j = 0; j < keys.length; j++) {\n                if (include.indexOf(keys[parseInt(j.toString(), 10)]) < 0) {\n                    delete columns[parseInt(i.toString(), 10)][keys[parseInt(j.toString(), 10)]];\n                }\n            }\n        }\n        return columns;\n    };\n    Grid.prototype.getFormat = function (format) {\n        return typeof (format) === 'object' ? !isNullOrUndefined(format.format) ?\n            format.format : format.skeleton : format;\n    };\n    /**\n     * @hidden\n     * @returns {boolean} returns the isCollapseStateEnabled\n     */\n    Grid.prototype.isCollapseStateEnabled = function () {\n        var isExpanded = 'isExpanded';\n        return this[\"\" + isExpanded] === false;\n    };\n    /**\n     * @param {number} key - Defines the primary key value.\n     * @param {Object} rowData - Defines the rowData\n     * @returns {void}\n     */\n    Grid.prototype.updateRowValue = function (key, rowData) {\n        var args = {\n            requestType: 'save', data: rowData\n        };\n        this.showSpinner();\n        this.notify(events.updateData, args);\n        this.refresh();\n    };\n    /**\n     * @hidden\n     * @returns {void}\n     */\n    Grid.prototype.setForeignKeyData = function () {\n        this.dataBind();\n        var colpending = this.getDataModule().getForeignKeyDataState();\n        if (colpending.isPending) {\n            this.getDataModule().setForeignKeyDataState({});\n            colpending.resolver();\n        }\n        else {\n            this.getDataModule().setForeignKeyDataState({ isDataChanged: false });\n            if (this.contentModule || this.headerModule) {\n                this.renderModule.render();\n            }\n        }\n    };\n    /**\n     * @param {string} field - specifies the field\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.resetFilterDlgPosition = function (field) {\n        var header = this.getColumnHeaderByField(field);\n        if (header) {\n            var target = header.querySelector('.e-filtermenudiv');\n            var filterDlg = this.element.querySelector('.e-filter-popup');\n            if (target && filterDlg) {\n                var gClient = this.element.getBoundingClientRect();\n                var fClient = target.getBoundingClientRect();\n                if (filterDlg) {\n                    if ((filterDlg.offsetWidth + fClient.right) > gClient.right) {\n                        filterDlg.style.left = ((fClient.right - filterDlg.offsetWidth) - gClient.left).toString() + 'px';\n                    }\n                    else {\n                        filterDlg.style.left = (fClient.right - gClient.left).toString() + 'px';\n                    }\n                }\n            }\n        }\n    };\n    /**\n     * @param {any} callBack - specifies the callBack method\n     * @returns {void}\n     * @hidden\n     */\n    // eslint-disable-next-line\n    Grid.prototype.renderTemplates = function (callBack) {\n        var isReactChild = this.parentDetails && this.parentDetails.parentInstObj && this.parentDetails.parentInstObj.isReact;\n        if (isReactChild && this['portals']) {\n            this.parentDetails.parentInstObj['portals'] = this.parentDetails.parentInstObj['portals']\n                .concat(this['portals']);\n            this.parentDetails.parentInstObj.renderTemplates(callBack);\n            this['portals'] = undefined;\n        }\n        else {\n            var portals = 'portals';\n            this.notify('reactTemplateRender', this[\"\" + portals]);\n            this.renderReactTemplates(callBack);\n        }\n    };\n    /**\n     * Apply the changes to the Grid without refreshing the rows.\n     *\n     * @param  {BatchChanges} changes - Defines changes to be updated.\n     * @returns {void}\n     */\n    Grid.prototype.batchUpdate = function (changes) {\n        this.processRowChanges(changes);\n    };\n    /**\n     * Apply the changes to the Grid in one batch after 50ms without refreshing the rows.\n     *\n     * @param  {BatchChanges} changes - Defines changes to be updated.\n     * @returns {void}\n     */\n    Grid.prototype.batchAsyncUpdate = function (changes) {\n        this.processBulkRowChanges(changes);\n    };\n    Grid.prototype.processBulkRowChanges = function (changes) {\n        var _this_1 = this;\n        if (!this.dataToBeUpdated) {\n            this.dataToBeUpdated = Object.assign({ addedRecords: [], changedRecords: [], deletedRecords: [] }, changes);\n            setTimeout(function () {\n                _this_1.processRowChanges(_this_1.dataToBeUpdated);\n                _this_1.dataToBeUpdated = null;\n            }, this.asyncTimeOut);\n        }\n        else {\n            var loopstring = [literals.addedRecords, literals.changedRecords, literals.deletedRecords];\n            var keyField = this.getPrimaryKeyFieldNames()[0];\n            for (var i = 0; i < loopstring.length; i++) {\n                if (changes[loopstring[parseInt(i.toString(), 10)]]) {\n                    compareChanges(this, changes, loopstring[parseInt(i.toString(), 10)], keyField);\n                }\n            }\n        }\n    };\n    Grid.prototype.processRowChanges = function (changes) {\n        var _this_1 = this;\n        var keyField = this.getPrimaryKeyFieldNames()[0];\n        changes = Object.assign({ addedRecords: [], changedRecords: [], deletedRecords: [] }, changes);\n        var promise = this.getDataModule().saveChanges(changes, keyField, {}, this.getDataModule().generateQuery().requiresCount());\n        if (this.getDataModule().isRemote()) {\n            promise.then(function () {\n                _this_1.setNewData();\n            });\n        }\n        else {\n            this.setNewData();\n        }\n    };\n    Grid.prototype.setNewData = function () {\n        var _this_1 = this;\n        var oldValues = JSON.parse(JSON.stringify(this.getCurrentViewRecords()));\n        var getData = this.getDataModule().getData({}, this.getDataModule().generateQuery().requiresCount());\n        getData.then(function (e) {\n            _this_1.bulkRefresh(e.result, oldValues, e.count);\n        });\n    };\n    Grid.prototype.deleteRowElement = function (row) {\n        var tr = this.getRowElementByUID(row.uid);\n        remove(tr);\n    };\n    Grid.prototype.bulkRefresh = function (result, oldValues, count) {\n        var _this_1 = this;\n        var rowObj = this.getRowsObject();\n        var keyField = this.getPrimaryKeyFieldNames()[0];\n        var _loop_5 = function (i) {\n            if (!result.filter(function (e) { return e[\"\" + keyField] === rowObj[parseInt(i.toString(), 10)].data[\"\" + keyField]; }).length) {\n                this_5.deleteRowElement(rowObj[parseInt(i.toString(), 10)]);\n                rowObj.splice(i, 1);\n                i--;\n            }\n            out_i_1 = i;\n        };\n        var this_5 = this, out_i_1;\n        for (var i = 0; i < rowObj.length; i++) {\n            _loop_5(i);\n            i = out_i_1;\n        }\n        var _loop_6 = function (i) {\n            var isRowExist;\n            oldValues.filter(function (e) {\n                if (e[\"\" + keyField] === result[parseInt(i.toString(), 10)][\"\" + keyField]) {\n                    if (e !== result[parseInt(i.toString(), 10)]) {\n                        _this_1.setRowData(result[parseInt(i.toString(), 10)][\"\" + keyField], result[parseInt(i.toString(), 10)]);\n                    }\n                    isRowExist = true;\n                }\n            });\n            if (!isRowExist) {\n                this_6.renderRowElement(result[parseInt(i.toString(), 10)], i);\n            }\n        };\n        var this_6 = this;\n        for (var i = 0; i < result.length; i++) {\n            _loop_6(i);\n        }\n        this.currentViewData = result;\n        var rows = [].slice.call(this.getContentTable().getElementsByClassName(literals.row));\n        resetRowIndex(this, this.getRowsObject(), rows);\n        setRowElements(this);\n        if (this.allowPaging) {\n            this.notify(events.inBoundModelChanged, { module: 'pager', properties: { totalRecordsCount: count } });\n        }\n    };\n    Grid.prototype.renderRowElement = function (data, index) {\n        var row = new RowRenderer(this.serviceLocator, null, this);\n        var model = new RowModelGenerator(this);\n        var modelData = model.generateRows([data]);\n        var tr = row.render(modelData[0], this.getColumns());\n        this.addRowObject(modelData[0], index);\n        var tbody = this.getContentTable().querySelector(literals.tbody);\n        if (tbody.querySelector('.e-emptyrow')) {\n            var emptyRow = tbody.querySelector('.e-emptyrow');\n            emptyRow.parentNode.removeChild(emptyRow);\n            if (this.frozenRows && this.element.querySelector('.e-frozenrow-empty')) {\n                this.element.querySelector('.e-frozenrow-empty').classList.remove('e-frozenrow-empty');\n            }\n        }\n        if (this.frozenRows && index < this.frozenRows) {\n            tbody = this.getHeaderContent().querySelector(literals.tbody);\n        }\n        else {\n            tbody = this.getContent().querySelector(literals.tbody);\n        }\n        tbody = this.getContent().querySelector(literals.tbody);\n        tbody.appendChild(tr);\n    };\n    Grid.prototype.addRowObject = function (row, index) {\n        this.getRowsObject().splice(index, 1, row);\n    };\n    /**\n     * @hidden\n     * @returns {void}\n     */\n    Grid.prototype.updateVisibleExpandCollapseRows = function () {\n        var rows = this.getRowsObject();\n        for (var i = 0, len = rows.length; i < len; i++) {\n            if ((rows[parseInt(i.toString(), 10)].isDataRow || rows[parseInt(i.toString(), 10)].isAggregateRow)\n                && this.getRowElementByUID(rows[parseInt(i.toString(), 10)].uid).style.display === 'none') {\n                rows[parseInt(i.toString(), 10)].visible = false;\n            }\n            else {\n                rows[parseInt(i.toString(), 10)].visible = true;\n            }\n        }\n    };\n    /**\n     * Method to sanitize any suspected untrusted strings and scripts before rendering them.\n     *\n     * @param {string} value - Specifies the html value to sanitize\n     * @returns {string} Returns the sanitized html string\n     * @hidden\n     */\n    Grid.prototype.sanitize = function (value) {\n        if (this.enableHtmlSanitizer) {\n            return SanitizeHtmlHelper.sanitize(value);\n        }\n        return value;\n    };\n    /**\n     * @param {string | number} height - specifies the height\n     * @returns {number | string} - specifies the height number\n     * @hidden\n     */\n    Grid.prototype.getHeight = function (height) {\n        if (!Number.isInteger(height) && height.indexOf('%') !== -1) {\n            height = parseInt(height, 10) / 100 * this.element.clientHeight;\n        }\n        else if (!Number.isInteger(height) && this.height !== 'auto') {\n            height = parseInt(height, 10);\n        }\n        else {\n            height = this.height;\n        }\n        return height;\n    };\n    /**\n     * @hidden\n     * @returns {Element} - returns frozen right content\n\n     */\n    Grid.prototype.getFrozenRightContent = function () {\n        return this.contentModule.getPanel();\n    };\n    /**\n     * @hidden\n     * @returns {Element} - returns frozen right header\n\n     */\n    Grid.prototype.getFrozenRightHeader = function () {\n        return this.headerModule.getPanel();\n    };\n    /**\n     * @hidden\n     * @returns {Element} - returns movable header tbody\n\n     */\n    Grid.prototype.getMovableHeaderTbody = function () {\n        return this.getHeaderContent().querySelector(literals.tbody);\n    };\n    /**\n     * @hidden\n     * @returns {Element} - returns movable content tbody\n\n     */\n    Grid.prototype.getMovableContentTbody = function () {\n        return this.getContent().querySelector(literals.tbody);\n    };\n    /**\n     * @hidden\n     * @returns {Element} - returns frozen header tbody\n\n     */\n    Grid.prototype.getFrozenHeaderTbody = function () {\n        return this.getHeaderContent().querySelector(literals.tbody);\n    };\n    /**\n     * @hidden\n     * @returns {Element} - returns frozen left content tbody\n\n     */\n    Grid.prototype.getFrozenLeftContentTbody = function () {\n        return this.getContent().querySelector(literals.tbody);\n    };\n    /**\n     * @hidden\n     * @returns {Element} - returns frozen right header tbody\n\n     */\n    Grid.prototype.getFrozenRightHeaderTbody = function () {\n        return this.getHeaderContent().querySelector(literals.tbody);\n    };\n    /**\n     * @returns {Element} returns frozen right content tbody\n\n     * @hidden\n     */\n    Grid.prototype.getFrozenRightContentTbody = function () {\n        return this.getContent().querySelector(literals.tbody);\n    };\n    /**\n     * @param {boolean} isCustom - Defines custom filter dialog open\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.showResponsiveCustomFilter = function (isCustom) {\n        if (this.filterModule) {\n            this.filterModule.showCustomFilter(isCustom || this.rowRenderingMode === 'Vertical');\n        }\n    };\n    /**\n     * @param {boolean} isCustom - Defines custom sort dialog open\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.showResponsiveCustomSort = function (isCustom) {\n        if (this.sortModule) {\n            this.sortModule.showCustomSort(isCustom || this.rowRenderingMode === 'Vertical');\n        }\n    };\n    /**\n     * @param {boolean} isCustom - Defines custom column chooser dialog open\n     * @returns {void}\n     * @hidden\n     */\n    Grid.prototype.showResponsiveCustomColumnChooser = function (isCustom) {\n        if (this.columnChooserModule) {\n            this.columnChooserModule.showCustomColumnChooser(isCustom || this.rowRenderingMode === 'Vertical');\n        }\n    };\n    /**\n     * To manually show the vertical row mode filter dialog\n     *\n     * @returns {void}\n     */\n    Grid.prototype.showAdaptiveFilterDialog = function () {\n        if (this.enableAdaptiveUI) {\n            this.showResponsiveCustomFilter(true);\n        }\n    };\n    /**\n     * To manually show the vertical row sort filter dialog\n     *\n     * @returns {void}\n     */\n    Grid.prototype.showAdaptiveSortDialog = function () {\n        if (this.enableAdaptiveUI) {\n            this.showResponsiveCustomSort(true);\n        }\n    };\n    /**\n     * @param {boolean} isColVirtualization - Defines column virtualization\n     * @returns {Column[]} returns array of column models\n     * @hidden\n     */\n    Grid.prototype.getCurrentVisibleColumns = function (isColVirtualization) {\n        var cols = [];\n        var gridCols = isColVirtualization ? this.getColumns() : this.columnModel;\n        for (var _i = 0, gridCols_1 = gridCols; _i < gridCols_1.length; _i++) {\n            var col = gridCols_1[_i];\n            if (col.visible) {\n                cols.push(col);\n            }\n        }\n        return cols;\n    };\n    Grid.prototype.enableInfiniteAggrgate = function () {\n        if (this.enableInfiniteScrolling && this.groupSettings.columns.length && !this.groupSettings.disablePageWiseAggregates\n            && !this.groupSettings.enableLazyLoading) {\n            this.setProperties({ groupSettings: { disablePageWiseAggregates: true } }, true);\n        }\n    };\n    var Grid_1;\n    __decorate([\n        Property([])\n    ], Grid.prototype, \"currentViewData\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"parentDetails\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"showHider\", void 0);\n    __decorate([\n        Property([])\n    ], Grid.prototype, \"columns\", void 0);\n    __decorate([\n        Property(true)\n    ], Grid.prototype, \"enableAltRow\", void 0);\n    __decorate([\n        Property(true)\n    ], Grid.prototype, \"enableHover\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"enableAutoFill\", void 0);\n    __decorate([\n        Property(true)\n    ], Grid.prototype, \"allowKeyboard\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"enableStickyHeader\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"enableHtmlSanitizer\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"allowTextWrap\", void 0);\n    __decorate([\n        Complex({}, TextWrapSettings)\n    ], Grid.prototype, \"textWrapSettings\", void 0);\n    __decorate([\n        Complex({}, ResizeSettings)\n    ], Grid.prototype, \"resizeSettings\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"allowPaging\", void 0);\n    __decorate([\n        Complex({}, PageSettings)\n    ], Grid.prototype, \"pageSettings\", void 0);\n    __decorate([\n        Complex({}, LoadingIndicator)\n    ], Grid.prototype, \"loadingIndicator\", void 0);\n    __decorate([\n        Property(true)\n    ], Grid.prototype, \"enableVirtualMaskRow\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"enableVirtualization\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"enableColumnVirtualization\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"enableInfiniteScrolling\", void 0);\n    __decorate([\n        Complex({}, SearchSettings)\n    ], Grid.prototype, \"searchSettings\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"allowSorting\", void 0);\n    __decorate([\n        Property('Ellipsis')\n    ], Grid.prototype, \"clipMode\", void 0);\n    __decorate([\n        Property(true)\n    ], Grid.prototype, \"allowMultiSorting\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"allowExcelExport\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"allowPdfExport\", void 0);\n    __decorate([\n        Complex({}, SortSettings)\n    ], Grid.prototype, \"sortSettings\", void 0);\n    __decorate([\n        Complex({}, InfiniteScrollSettings)\n    ], Grid.prototype, \"infiniteScrollSettings\", void 0);\n    __decorate([\n        Property(true)\n    ], Grid.prototype, \"allowSelection\", void 0);\n    __decorate([\n        Property(-1)\n    ], Grid.prototype, \"selectedRowIndex\", void 0);\n    __decorate([\n        Complex({}, SelectionSettings)\n    ], Grid.prototype, \"selectionSettings\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"allowFiltering\", void 0);\n    __decorate([\n        Property('Horizontal')\n    ], Grid.prototype, \"rowRenderingMode\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"enableAdaptiveUI\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"allowReordering\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"allowResizing\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"allowRowDragAndDrop\", void 0);\n    __decorate([\n        Complex({}, RowDropSettings)\n    ], Grid.prototype, \"rowDropSettings\", void 0);\n    __decorate([\n        Complex({}, FilterSettings)\n    ], Grid.prototype, \"filterSettings\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"allowGrouping\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"enableImmutableMode\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"showColumnMenu\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"autoFit\", void 0);\n    __decorate([\n        Complex({}, GroupSettings)\n    ], Grid.prototype, \"groupSettings\", void 0);\n    __decorate([\n        Complex({}, EditSettings)\n    ], Grid.prototype, \"editSettings\", void 0);\n    __decorate([\n        Collection([], AggregateRow)\n    ], Grid.prototype, \"aggregates\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"showColumnChooser\", void 0);\n    __decorate([\n        Complex({}, ColumnChooserSettings)\n    ], Grid.prototype, \"columnChooserSettings\", void 0);\n    __decorate([\n        Property(false)\n    ], Grid.prototype, \"enableHeaderFocus\", void 0);\n    __decorate([\n        Property('auto')\n    ], Grid.prototype, \"height\", void 0);\n    __decorate([\n        Property('auto')\n    ], Grid.prototype, \"width\", void 0);\n    __decorate([\n        Property('Default')\n    ], Grid.prototype, \"gridLines\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"rowTemplate\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"emptyRecordTemplate\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"detailTemplate\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"childGrid\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"queryString\", void 0);\n    __decorate([\n        Property('AllPages')\n    ], Grid.prototype, \"printMode\", void 0);\n    __decorate([\n        Property('Expanded')\n    ], Grid.prototype, \"hierarchyPrintMode\", void 0);\n    __decorate([\n        Property([])\n    ], Grid.prototype, \"dataSource\", void 0);\n    __decorate([\n        Property(null)\n    ], Grid.prototype, \"rowHeight\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"query\", void 0);\n    __decorate([\n        Property('USD')\n    ], Grid.prototype, \"currencyCode\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"exportGrids\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"toolbar\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"contextMenuItems\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"columnMenuItems\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"toolbarTemplate\", void 0);\n    __decorate([\n        Property()\n    ], Grid.prototype, \"pagerTemplate\", void 0);\n    __decorate([\n        Property(0)\n    ], Grid.prototype, \"frozenRows\", void 0);\n    __decorate([\n        Property(0)\n    ], Grid.prototype, \"frozenColumns\", void 0);\n    __decorate([\n        Property('')\n    ], Grid.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property('All')\n    ], Grid.prototype, \"columnQueryMode\", void 0);\n    __decorate([\n        Property({})\n    ], Grid.prototype, \"currentAction\", void 0);\n    __decorate([\n        Property('')\n    ], Grid.prototype, \"ej2StatePersistenceVersion\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"destroyed\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"load\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"rowDataBound\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"queryCellInfo\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"headerCellInfo\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"actionBegin\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"actionComplete\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"actionFailure\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"dataBound\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"recordDoubleClick\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"recordClick\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"rowSelecting\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"rowSelected\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"rowDeselecting\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"rowDeselected\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"cellSelecting\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"cellSelected\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"cellDeselecting\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"cellDeselected\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"columnSelecting\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"columnSelected\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"columnDeselecting\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"columnDeselected\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"columnDragStart\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"columnDrag\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"columnDrop\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"printComplete\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"beforePrint\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"pdfQueryCellInfo\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"pdfHeaderQueryCellInfo\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"pdfAggregateQueryCellInfo\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"excelAggregateQueryCellInfo\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"exportDetailDataBound\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"exportDetailTemplate\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"excelQueryCellInfo\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"excelHeaderQueryCellInfo\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"beforeExcelExport\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"excelExportComplete\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"beforePdfExport\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"pdfExportComplete\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"rowDragStartHelper\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"detailDataBound\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"rowDragStart\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"rowDrag\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"rowDrop\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"toolbarClick\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"beforeOpenColumnChooser\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"beforeOpenAdaptiveDialog\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"batchAdd\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"batchDelete\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"batchCancel\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"beforeBatchAdd\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"beforeBatchDelete\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"beforeBatchSave\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"beginEdit\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"commandClick\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"cellEdit\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"cellSave\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"cellSaved\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"resizeStart\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"resizing\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"resizeStop\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"keyPressed\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"beforeDataBound\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"contextMenuOpen\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"contextMenuClick\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"columnMenuOpen\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"columnMenuClick\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"checkBoxChange\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"beforeCopy\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"beforePaste\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"beforeAutoFill\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"columnDataStateChange\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"dataStateChange\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"dataSourceChanged\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"exportGroupCaption\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"lazyLoadGroupExpand\", void 0);\n    __decorate([\n        Event()\n    ], Grid.prototype, \"lazyLoadGroupCollapse\", void 0);\n    Grid = Grid_1 = __decorate([\n        NotifyPropertyChanges\n    ], Grid);\n    return Grid;\n}(Component));\nexport { Grid };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, NotifyPropertyChanges, Property, setValue } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, isNullOrUndefined, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { addClass, detach, getUniqueID, isRippleEnabled, removeClass, rippleEffect, closest } from '@syncfusion/ej2-base';\nimport { wrapperInitialize, rippleMouseHandler, setHiddenInput } from './../common/common';\nvar CHECK = 'e-check';\nvar DISABLED = 'e-checkbox-disabled';\nvar FRAME = 'e-frame';\nvar INDETERMINATE = 'e-stop';\nvar LABEL = 'e-label';\nvar RIPPLE = 'e-ripple-container';\nvar RIPPLECHECK = 'e-ripple-check';\nvar RIPPLEINDETERMINATE = 'e-ripple-stop';\nvar RTL = 'e-rtl';\nvar WRAPPER = 'e-checkbox-wrapper';\nvar containerAttr = ['title', 'class', 'style', 'disabled', 'readonly', 'name', 'value', 'id'];\n/**\n * The CheckBox is a graphical user interface element that allows you to select one or more options from the choices.\n * It contains checked, unchecked, and indeterminate states.\n * ```html\n * <input type=\"checkbox\" id=\"checkbox\"/>\n * <script>\n * var checkboxObj = new CheckBox({ label: \"Default\" });\n * checkboxObj.appendTo(\"#checkbox\");\n * </script>\n * ```\n */\nvar CheckBox = /** @class */ (function (_super) {\n    __extends(CheckBox, _super);\n    /**\n     * Constructor for creating the widget\n     *\n     * @private\n     * @param {CheckBoxModel} options - Specifies checkbox model\n     * @param {string | HTMLInputElement} element - Specifies target element\n     */\n    function CheckBox(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.isFocused = false;\n        _this.isMouseClick = false;\n        _this.clickTriggered = false;\n        _this.validCheck = true;\n        return _this;\n    }\n    CheckBox.prototype.changeState = function (state, isInitialize) {\n        var ariaState;\n        var rippleSpan;\n        var frameSpan = this.getWrapper().getElementsByClassName(FRAME)[0];\n        if (isRippleEnabled) {\n            rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n        }\n        if (state === 'check') {\n            if (frameSpan) {\n                frameSpan.classList.remove(INDETERMINATE);\n                frameSpan.classList.add(CHECK);\n            }\n            if (rippleSpan) {\n                rippleSpan.classList.remove(RIPPLEINDETERMINATE);\n                rippleSpan.classList.add(RIPPLECHECK);\n            }\n            ariaState = 'true';\n            this.element.checked = true;\n            if ((this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) && this.validCheck && !isInitialize) {\n                this.element.checked = false;\n                this.validCheck = false;\n            }\n            else if (this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) {\n                this.validCheck = true;\n            }\n        }\n        else if (state === 'uncheck') {\n            if (frameSpan) {\n                removeClass([frameSpan], [CHECK, INDETERMINATE]);\n            }\n            if (rippleSpan) {\n                removeClass([rippleSpan], [RIPPLECHECK, RIPPLEINDETERMINATE]);\n            }\n            ariaState = 'false';\n            this.element.checked = false;\n            if ((this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) && this.validCheck && !isInitialize) {\n                this.element.checked = true;\n                this.validCheck = false;\n            }\n            else if (this.element.required || closest(this.element, 'form') && closest(this.element, 'form').classList.contains('e-formvalidator')) {\n                this.validCheck = true;\n            }\n        }\n        else {\n            if (frameSpan) {\n                frameSpan.classList.remove(CHECK);\n                frameSpan.classList.add(INDETERMINATE);\n            }\n            if (rippleSpan) {\n                rippleSpan.classList.remove(RIPPLECHECK);\n                rippleSpan.classList.add(RIPPLEINDETERMINATE);\n            }\n            ariaState = 'mixed';\n            this.element.indeterminate = true;\n            this.indeterminate = true;\n        }\n    };\n    CheckBox.prototype.clickHandler = function (event) {\n        if (event.target.tagName === 'INPUT' && this.clickTriggered) {\n            if (this.isVue) {\n                this.changeState(this.checked ? 'check' : 'uncheck');\n            }\n            this.clickTriggered = false;\n            return;\n        }\n        if (event.target.tagName === 'SPAN' || event.target.tagName === 'LABEL') {\n            this.clickTriggered = true;\n        }\n        if (this.isMouseClick) {\n            this.focusOutHandler();\n            this.isMouseClick = false;\n        }\n        if (this.indeterminate) {\n            this.changeState(this.checked ? 'check' : 'uncheck');\n            this.indeterminate = false;\n            this.element.indeterminate = false;\n        }\n        else if (this.checked) {\n            this.changeState('uncheck');\n            this.checked = false;\n        }\n        else {\n            this.changeState('check');\n            this.checked = true;\n        }\n        var changeEventArgs = { checked: this.updateVueArrayModel(false), event: event };\n        this.trigger('change', changeEventArgs);\n        event.stopPropagation();\n    };\n    /**\n     * Destroys the widget.\n     *\n     * @returns {void}\n     */\n    CheckBox.prototype.destroy = function () {\n        var _this = this;\n        var wrapper = this.getWrapper();\n        _super.prototype.destroy.call(this);\n        if (this.wrapper) {\n            wrapper = this.wrapper;\n            if (!this.disabled) {\n                this.unWireEvents();\n            }\n            if (this.tagName === 'INPUT') {\n                if (this.getWrapper() && wrapper.parentNode) {\n                    wrapper.parentNode.insertBefore(this.element, wrapper);\n                }\n                detach(wrapper);\n                this.element.checked = false;\n                if (this.indeterminate) {\n                    this.element.indeterminate = false;\n                }\n                ['name', 'value', 'disabled'].forEach(function (key) {\n                    _this.element.removeAttribute(key);\n                });\n            }\n            else {\n                ['class'].forEach(function (key) {\n                    wrapper.removeAttribute(key);\n                });\n                wrapper.innerHTML = '';\n                this.element = wrapper;\n                if (this.refreshing) {\n                    ['e-control', 'e-checkbox', 'e-lib'].forEach(function (key) {\n                        _this.element.classList.add(key);\n                    });\n                    setValue('ej2_instances', [this], this.element);\n                }\n            }\n        }\n    };\n    CheckBox.prototype.focusHandler = function () {\n        this.isFocused = true;\n    };\n    CheckBox.prototype.focusOutHandler = function () {\n        var wrapper = this.getWrapper();\n        if (wrapper) {\n            wrapper.classList.remove('e-focus');\n        }\n        this.isFocused = false;\n    };\n    /**\n     * Gets the module name.\n     *\n     * @private\n     * @returns {string} - Module Name\n     */\n    CheckBox.prototype.getModuleName = function () {\n        return 'checkbox';\n    };\n    /**\n     * Gets the properties to be maintained in the persistence state.\n     *\n     * @private\n     * @returns {string} - Persist Data\n     */\n    CheckBox.prototype.getPersistData = function () {\n        return this.addOnPersist(['checked', 'indeterminate']);\n    };\n    CheckBox.prototype.getWrapper = function () {\n        if (this.element && this.element.parentElement) {\n            return this.element.parentElement.parentElement;\n        }\n        else {\n            return null;\n        }\n    };\n    CheckBox.prototype.getLabel = function () {\n        if (this.element) {\n            return this.element.parentElement;\n        }\n        else {\n            return null;\n        }\n    };\n    CheckBox.prototype.initialize = function () {\n        if (isNullOrUndefined(this.initialCheckedValue)) {\n            this.initialCheckedValue = this.checked;\n        }\n        if (this.name) {\n            this.element.setAttribute('name', this.name);\n        }\n        if (this.value) {\n            this.element.setAttribute('value', this.value);\n            if (this.isVue && typeof this.value === 'boolean' && this.value === true) {\n                this.setProperties({ 'checked': true }, true);\n            }\n        }\n        if (this.checked) {\n            this.changeState('check', true);\n        }\n        if (this.indeterminate) {\n            this.changeState();\n        }\n        if (this.disabled) {\n            this.setDisabled();\n        }\n    };\n    CheckBox.prototype.initWrapper = function () {\n        var wrapper = this.element.parentElement;\n        if (!wrapper.classList.contains(WRAPPER)) {\n            wrapper = this.createElement('div', {\n                className: WRAPPER\n            });\n            this.element.parentNode.insertBefore(wrapper, this.element);\n        }\n        var label = this.createElement('label', { attrs: { for: this.element.id } });\n        var frameSpan = this.createElement('span', { className: 'e-icons ' + FRAME });\n        wrapper.classList.add('e-wrapper');\n        if (this.enableRtl) {\n            wrapper.classList.add(RTL);\n        }\n        if (this.cssClass) {\n            addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n        }\n        wrapper.appendChild(label);\n        label.appendChild(this.element);\n        setHiddenInput(this, label);\n        label.appendChild(frameSpan);\n        if (isRippleEnabled) {\n            var rippleSpan = this.createElement('span', { className: RIPPLE });\n            if (this.labelPosition === 'Before') {\n                label.appendChild(rippleSpan);\n            }\n            else {\n                label.insertBefore(rippleSpan, frameSpan);\n            }\n            rippleEffect(rippleSpan, { duration: 400, isCenterRipple: true });\n        }\n        if (this.label) {\n            this.setText(this.label);\n        }\n    };\n    CheckBox.prototype.keyUpHandler = function () {\n        if (this.isFocused) {\n            this.getWrapper().classList.add('e-focus');\n        }\n    };\n    CheckBox.prototype.labelMouseDownHandler = function (e) {\n        this.isMouseClick = true;\n        var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n        rippleMouseHandler(e, rippleSpan);\n    };\n    CheckBox.prototype.labelMouseLeaveHandler = function (e) {\n        var rippleSpan = this.getLabel().getElementsByClassName(RIPPLE)[0];\n        if (rippleSpan) {\n            var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n            for (var i = rippleElem.length - 1; i > 0; i--) {\n                rippleSpan.removeChild(rippleSpan.childNodes[i]);\n            }\n            rippleMouseHandler(e, rippleSpan);\n        }\n    };\n    CheckBox.prototype.labelMouseUpHandler = function (e) {\n        this.isMouseClick = true;\n        var rippleSpan = this.getWrapper().getElementsByClassName(RIPPLE)[0];\n        if (rippleSpan) {\n            var rippleElem = rippleSpan.querySelectorAll('.e-ripple-element');\n            for (var i = 0; i < rippleElem.length - 1; i++) {\n                rippleSpan.removeChild(rippleSpan.childNodes[i]);\n            }\n            rippleMouseHandler(e, rippleSpan);\n        }\n    };\n    /**\n     * Called internally if any of the property value changes.\n     *\n     * @private\n     * @param {CheckBoxModel} newProp - Specifies new Properties\n     * @param {CheckBoxModel} oldProp - Specifies old Properties\n     *\n     * @returns {void}\n     */\n    CheckBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n        var wrapper = this.getWrapper();\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'checked':\n                    this.indeterminate = false;\n                    this.element.indeterminate = false;\n                    this.changeState(newProp.checked ? 'check' : 'uncheck');\n                    break;\n                case 'indeterminate':\n                    if (newProp.indeterminate) {\n                        this.changeState();\n                    }\n                    else {\n                        this.element.indeterminate = false;\n                        this.changeState(this.checked ? 'check' : 'uncheck');\n                    }\n                    break;\n                case 'disabled':\n                    if (newProp.disabled) {\n                        this.setDisabled();\n                        this.wrapper = this.getWrapper();\n                        this.unWireEvents();\n                    }\n                    else {\n                        this.element.disabled = false;\n                        wrapper.classList.remove(DISABLED);\n                        wrapper.setAttribute('aria-disabled', 'false');\n                        this.wireEvents();\n                    }\n                    break;\n                case 'cssClass':\n                    if (oldProp.cssClass) {\n                        removeClass([wrapper], oldProp.cssClass.split(' '));\n                    }\n                    if (newProp.cssClass) {\n                        addClass([wrapper], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n                    }\n                    break;\n                case 'enableRtl':\n                    if (newProp.enableRtl) {\n                        wrapper.classList.add(RTL);\n                    }\n                    else {\n                        wrapper.classList.remove(RTL);\n                    }\n                    break;\n                case 'label':\n                    this.setText(newProp.label);\n                    break;\n                case 'labelPosition': {\n                    var label = wrapper.getElementsByClassName(LABEL)[0];\n                    var labelWrap = wrapper.getElementsByTagName('label')[0];\n                    detach(label);\n                    if (newProp.labelPosition === 'After') {\n                        labelWrap.appendChild(label);\n                    }\n                    else {\n                        labelWrap.insertBefore(label, wrapper.getElementsByClassName(FRAME)[0]);\n                    }\n                    break;\n                }\n                case 'name':\n                    this.element.setAttribute('name', newProp.name);\n                    break;\n                case 'value':\n                    if (this.isVue && typeof newProp.value === 'object') {\n                        break;\n                    }\n                    this.element.setAttribute('value', newProp.value);\n                    break;\n                case 'htmlAttributes':\n                    this.updateHtmlAttributeToWrapper();\n                    break;\n            }\n        }\n    };\n    /**\n     * Initialize Angular, React and Unique ID support.\n     *\n     * @private\n     * @returns {void}\n     */\n    CheckBox.prototype.preRender = function () {\n        var element = this.element;\n        this.tagName = this.element.tagName;\n        element = wrapperInitialize(this.createElement, 'EJS-CHECKBOX', 'checkbox', element, WRAPPER, 'checkbox');\n        this.element = element;\n        if (this.element.getAttribute('type') !== 'checkbox') {\n            this.element.setAttribute('type', 'checkbox');\n        }\n        if (!this.element.id) {\n            this.element.id = getUniqueID('e-' + this.getModuleName());\n        }\n    };\n    /**\n     * Initialize the control rendering.\n     *\n     * @private\n     * @returns {void}\n     */\n    CheckBox.prototype.render = function () {\n        this.initWrapper();\n        this.initialize();\n        if (!this.disabled) {\n            this.wireEvents();\n        }\n        this.updateHtmlAttributeToWrapper();\n        this.updateVueArrayModel(true);\n        this.renderComplete();\n        this.wrapper = this.getWrapper();\n    };\n    CheckBox.prototype.setDisabled = function () {\n        var wrapper = this.getWrapper();\n        this.element.disabled = true;\n        wrapper.classList.add(DISABLED);\n        wrapper.setAttribute('aria-disabled', 'true');\n    };\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    CheckBox.prototype.setText = function (text) {\n        var wrapper = this.getWrapper();\n        if (!wrapper) {\n            return;\n        }\n        var label = wrapper.getElementsByClassName(LABEL)[0];\n        if (label) {\n            label.textContent = text;\n        }\n        else {\n            text = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(text) : text;\n            label = this.createElement('span', { className: LABEL, innerHTML: text });\n            var labelWrap = wrapper.getElementsByTagName('label')[0];\n            if (this.labelPosition === 'Before') {\n                labelWrap.insertBefore(label, wrapper.getElementsByClassName(FRAME)[0]);\n            }\n            else {\n                labelWrap.appendChild(label);\n            }\n        }\n    };\n    CheckBox.prototype.changeHandler = function (e) {\n        e.stopPropagation();\n    };\n    CheckBox.prototype.formResetHandler = function () {\n        this.checked = this.initialCheckedValue;\n        this.element.checked = this.initialCheckedValue;\n    };\n    CheckBox.prototype.unWireEvents = function () {\n        var wrapper = this.wrapper;\n        EventHandler.remove(wrapper, 'click', this.clickHandler);\n        EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n        EventHandler.remove(this.element, 'focus', this.focusHandler);\n        EventHandler.remove(this.element, 'focusout', this.focusOutHandler);\n        var label = wrapper.getElementsByTagName('label')[0];\n        EventHandler.remove(label, 'mousedown', this.labelMouseDownHandler);\n        EventHandler.remove(label, 'mouseup', this.labelMouseUpHandler);\n        EventHandler.remove(label, 'mouseleave', this.labelMouseLeaveHandler);\n        var formElem = closest(this.element, 'form');\n        if (formElem) {\n            EventHandler.remove(formElem, 'reset', this.formResetHandler);\n        }\n        if (this.tagName === 'EJS-CHECKBOX') {\n            EventHandler.remove(this.element, 'change', this.changeHandler);\n        }\n    };\n    CheckBox.prototype.wireEvents = function () {\n        var wrapper = this.getWrapper();\n        EventHandler.add(wrapper, 'click', this.clickHandler, this);\n        EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n        EventHandler.add(this.element, 'focus', this.focusHandler, this);\n        EventHandler.add(this.element, 'focusout', this.focusOutHandler, this);\n        var label = wrapper.getElementsByTagName('label')[0];\n        EventHandler.add(label, 'mousedown', this.labelMouseDownHandler, this);\n        EventHandler.add(label, 'mouseup', this.labelMouseUpHandler, this);\n        EventHandler.add(label, 'mouseleave', this.labelMouseLeaveHandler, this);\n        var formElem = closest(this.element, 'form');\n        if (formElem) {\n            EventHandler.add(formElem, 'reset', this.formResetHandler, this);\n        }\n        if (this.tagName === 'EJS-CHECKBOX') {\n            EventHandler.add(this.element, 'change', this.changeHandler, this);\n        }\n    };\n    CheckBox.prototype.updateVueArrayModel = function (init) {\n        if (this.isVue && typeof this.value === 'object') {\n            var value = this.element.value;\n            if (value && this.value) {\n                if (init) {\n                    for (var i = 0; i < this.value.length; i++) {\n                        if (value === this.value[i]) {\n                            this.changeState('check');\n                            this.setProperties({ 'checked': true }, true);\n                        }\n                    }\n                }\n                else {\n                    var index = this.value.indexOf(value);\n                    if (this.checked) {\n                        if (index < 0) {\n                            this.value.push(value);\n                        }\n                    }\n                    else {\n                        if (index > -1) {\n                            this.value.splice(index, 1);\n                        }\n                    }\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    return this.value;\n                }\n            }\n        }\n        return this.validCheck ? this.element.checked : !this.element.checked;\n    };\n    CheckBox.prototype.updateHtmlAttributeToWrapper = function () {\n        if (!isNullOrUndefined(this.htmlAttributes)) {\n            for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n                var key = _a[_i];\n                var wrapper = this.getWrapper();\n                if (containerAttr.indexOf(key) > -1) {\n                    if (key === 'class') {\n                        addClass([wrapper], this.htmlAttributes[\"\" + key].split(' '));\n                    }\n                    else if (key === 'title') {\n                        wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                    }\n                    else if (key === 'style') {\n                        var frameSpan = this.getWrapper().getElementsByClassName(FRAME)[0];\n                        frameSpan.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                    }\n                    else if (key === 'disabled') {\n                        if (this.htmlAttributes[\"\" + key] === 'true') {\n                            this.setDisabled();\n                        }\n                        this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                    }\n                    else {\n                        this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                    }\n                }\n                else {\n                    wrapper.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                }\n            }\n        }\n    };\n    /**\n     * Click the CheckBox element\n     * its native method\n     *\n     * @public\n     * @returns {void}\n     */\n    CheckBox.prototype.click = function () {\n        this.element.click();\n    };\n    /**\n     * Sets the focus to CheckBox\n     * its native method\n     *\n     * @public\n     * @returns {void}\n     */\n    CheckBox.prototype.focusIn = function () {\n        this.element.focus();\n    };\n    __decorate([\n        Event()\n    ], CheckBox.prototype, \"change\", void 0);\n    __decorate([\n        Event()\n    ], CheckBox.prototype, \"created\", void 0);\n    __decorate([\n        Property(false)\n    ], CheckBox.prototype, \"checked\", void 0);\n    __decorate([\n        Property('')\n    ], CheckBox.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(false)\n    ], CheckBox.prototype, \"disabled\", void 0);\n    __decorate([\n        Property(false)\n    ], CheckBox.prototype, \"indeterminate\", void 0);\n    __decorate([\n        Property('')\n    ], CheckBox.prototype, \"label\", void 0);\n    __decorate([\n        Property('After')\n    ], CheckBox.prototype, \"labelPosition\", void 0);\n    __decorate([\n        Property('')\n    ], CheckBox.prototype, \"name\", void 0);\n    __decorate([\n        Property('')\n    ], CheckBox.prototype, \"value\", void 0);\n    __decorate([\n        Property(false)\n    ], CheckBox.prototype, \"enableHtmlSanitizer\", void 0);\n    __decorate([\n        Property({})\n    ], CheckBox.prototype, \"htmlAttributes\", void 0);\n    CheckBox = __decorate([\n        NotifyPropertyChanges\n    ], CheckBox);\n    return CheckBox;\n}(Component));\nexport { CheckBox };\n","//! moment.js locale configuration\n//! locale : French [fr]\n//! author : John Fischer : https://github.com/jfroffice\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsStrictRegex =\n            /^(janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsShortStrictRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?)/i,\n        monthsRegex =\n            /(janv\\.?|févr\\.?|mars|avr\\.?|mai|juin|juil\\.?|août|sept\\.?|oct\\.?|nov\\.?|déc\\.?|janvier|février|mars|avril|mai|juin|juillet|août|septembre|octobre|novembre|décembre)/i,\n        monthsParse = [\n            /^janv/i,\n            /^févr/i,\n            /^mars/i,\n            /^avr/i,\n            /^mai/i,\n            /^juin/i,\n            /^juil/i,\n            /^août/i,\n            /^sept/i,\n            /^oct/i,\n            /^nov/i,\n            /^déc/i,\n        ];\n\n    var fr = moment.defineLocale('fr', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex: monthsStrictRegex,\n        monthsShortStrictRegex: monthsShortStrictRegex,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            w: 'une semaine',\n            ww: '%d semaines',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // TODO: Return 'e' when day of month > 1. Move this case inside\n                // block for masculine words below.\n                // See https://github.com/moment/moment/issues/3375\n                case 'D':\n                    return number + (number === 1 ? 'er' : '');\n\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Arabic (Algeria) [ar-dz]\n//! author : Amine Roukh: https://github.com/Amine27\n//! author : Abdel Said: https://github.com/abdelsaid\n//! author : Ahmed Elkhatib\n//! author : forabi https://github.com/forabi\n//! author : Noureddine LOUAHEDJ : https://github.com/noureddinem\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var pluralForm = function (n) {\n            return n === 0\n                ? 0\n                : n === 1\n                ? 1\n                : n === 2\n                ? 2\n                : n % 100 >= 3 && n % 100 <= 10\n                ? 3\n                : n % 100 >= 11\n                ? 4\n                : 5;\n        },\n        plurals = {\n            s: [\n                'أقل من ثانية',\n                'ثانية واحدة',\n                ['ثانيتان', 'ثانيتين'],\n                '%d ثوان',\n                '%d ثانية',\n                '%d ثانية',\n            ],\n            m: [\n                'أقل من دقيقة',\n                'دقيقة واحدة',\n                ['دقيقتان', 'دقيقتين'],\n                '%d دقائق',\n                '%d دقيقة',\n                '%d دقيقة',\n            ],\n            h: [\n                'أقل من ساعة',\n                'ساعة واحدة',\n                ['ساعتان', 'ساعتين'],\n                '%d ساعات',\n                '%d ساعة',\n                '%d ساعة',\n            ],\n            d: [\n                'أقل من يوم',\n                'يوم واحد',\n                ['يومان', 'يومين'],\n                '%d أيام',\n                '%d يومًا',\n                '%d يوم',\n            ],\n            M: [\n                'أقل من شهر',\n                'شهر واحد',\n                ['شهران', 'شهرين'],\n                '%d أشهر',\n                '%d شهرا',\n                '%d شهر',\n            ],\n            y: [\n                'أقل من عام',\n                'عام واحد',\n                ['عامان', 'عامين'],\n                '%d أعوام',\n                '%d عامًا',\n                '%d عام',\n            ],\n        },\n        pluralize = function (u) {\n            return function (number, withoutSuffix, string, isFuture) {\n                var f = pluralForm(number),\n                    str = plurals[u][pluralForm(number)];\n                if (f === 2) {\n                    str = str[withoutSuffix ? 0 : 1];\n                }\n                return str.replace(/%d/i, number);\n            };\n        },\n        months = [\n            'جانفي',\n            'فيفري',\n            'مارس',\n            'أفريل',\n            'ماي',\n            'جوان',\n            'جويلية',\n            'أوت',\n            'سبتمبر',\n            'أكتوبر',\n            'نوفمبر',\n            'ديسمبر',\n        ];\n\n    var arDz = moment.defineLocale('ar-dz', {\n        months: months,\n        monthsShort: months,\n        weekdays: 'الأحد_الإثنين_الثلاثاء_الأربعاء_الخميس_الجمعة_السبت'.split('_'),\n        weekdaysShort: 'أحد_إثنين_ثلاثاء_أربعاء_خميس_جمعة_سبت'.split('_'),\n        weekdaysMin: 'ح_ن_ث_ر_خ_ج_س'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'D/\\u200FM/\\u200FYYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ص|م/,\n        isPM: function (input) {\n            return 'م' === input;\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ص';\n            } else {\n                return 'م';\n            }\n        },\n        calendar: {\n            sameDay: '[اليوم عند الساعة] LT',\n            nextDay: '[غدًا عند الساعة] LT',\n            nextWeek: 'dddd [عند الساعة] LT',\n            lastDay: '[أمس عند الساعة] LT',\n            lastWeek: 'dddd [عند الساعة] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'بعد %s',\n            past: 'منذ %s',\n            s: pluralize('s'),\n            ss: pluralize('s'),\n            m: pluralize('m'),\n            mm: pluralize('m'),\n            h: pluralize('h'),\n            hh: pluralize('h'),\n            d: pluralize('d'),\n            dd: pluralize('d'),\n            M: pluralize('M'),\n            MM: pluralize('M'),\n            y: pluralize('y'),\n            yy: pluralize('y'),\n        },\n        postformat: function (string) {\n            return string.replace(/,/g, '،');\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return arDz;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, EventHandler, Property, Event, Browser, L10n, getUniqueID } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { attributes, addClass, removeClass, detach, closest } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, getValue, formatUnit, setValue, merge } from '@syncfusion/ej2-base';\nimport { Internationalization, getNumericObject } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar ROOT = 'e-control-wrapper e-numeric';\nvar SPINICON = 'e-input-group-icon';\nvar SPINUP = 'e-spin-up';\nvar SPINDOWN = 'e-spin-down';\nvar ERROR = 'e-error';\nvar INCREMENT = 'increment';\nvar DECREMENT = 'decrement';\nvar INTREGEXP = new RegExp('^(-)?(\\\\d*)$');\nvar DECIMALSEPARATOR = '.';\nvar COMPONENT = 'e-numerictextbox';\nvar CONTROL = 'e-control';\nvar NUMERIC_FOCUS = 'e-input-focus';\nvar HIDDENELEMENT = 'e-numeric-hidden';\nvar wrapperAttributes = ['title', 'style', 'class'];\nvar selectionTimeOut = 0;\n/**\n * Represents the NumericTextBox component that allows the user to enter only numeric values.\n * ```html\n * <input type='text' id=\"numeric\"/>\n * ```\n * ```typescript\n * <script>\n *   var numericObj = new NumericTextBox({ value: 10 });\n *   numericObj.appendTo(\"#numeric\");\n * </script>\n * ```\n */\nvar NumericTextBox = /** @class */ (function (_super) {\n    __extends(NumericTextBox, _super);\n    /**\n     *\n     * @param {NumericTextBoxModel} options - Specifies the NumericTextBox model.\n     * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n     * @private\n     */\n    function NumericTextBox(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.isVue = false;\n        _this.preventChange = false;\n        _this.isAngular = false;\n        _this.isDynamicChange = false;\n        _this.numericOptions = options;\n        return _this;\n    }\n    NumericTextBox.prototype.preRender = function () {\n        this.isPrevFocused = false;\n        this.decimalSeparator = '.';\n        // eslint-disable-next-line no-useless-escape\n        this.intRegExp = new RegExp('/^(-)?(\\d*)$/');\n        this.isCalled = false;\n        var ejInstance = getValue('ej2_instances', this.element);\n        this.cloneElement = this.element.cloneNode(true);\n        removeClass([this.cloneElement], [CONTROL, COMPONENT, 'e-lib']);\n        this.angularTagName = null;\n        this.formEle = closest(this.element, 'form');\n        if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n            this.angularTagName = this.element.tagName;\n            var input = this.createElement('input');\n            var index = 0;\n            for (index; index < this.element.attributes.length; index++) {\n                var attributeName = this.element.attributes[index].nodeName;\n                if (attributeName !== 'id' && attributeName !== 'class') {\n                    input.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n                    input.innerHTML = this.element.innerHTML;\n                }\n                else if (attributeName === 'class') {\n                    input.setAttribute(attributeName, this.element.className.split(' ').filter(function (item) { return item.indexOf('ng-') !== 0; }).join(' '));\n                }\n            }\n            if (this.element.hasAttribute('name')) {\n                this.element.removeAttribute('name');\n            }\n            this.element.classList.remove('e-control', 'e-numerictextbox');\n            this.element.appendChild(input);\n            this.element = input;\n            setValue('ej2_instances', ejInstance, this.element);\n        }\n        attributes(this.element, { 'role': 'spinbutton', 'tabindex': '0', 'autocomplete': 'off' });\n        var localeText = {\n            incrementTitle: 'Increment value', decrementTitle: 'Decrement value', placeholder: this.placeholder\n        };\n        this.l10n = new L10n('numerictextbox', localeText, this.locale);\n        if (this.l10n.getConstant('placeholder') !== '') {\n            this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n        }\n        if (!this.element.hasAttribute('id')) {\n            this.element.setAttribute('id', getUniqueID('numerictextbox'));\n        }\n        this.isValidState = true;\n        this.inputStyle = null;\n        this.inputName = null;\n        this.cultureInfo = {};\n        this.initCultureInfo();\n        this.initCultureFunc();\n        this.prevValue = this.value;\n        this.updateHTMLAttrToElement();\n        this.checkAttributes(false);\n        if (this.formEle) {\n            this.inputEleValue = this.value;\n        }\n        this.validateMinMax();\n        this.validateStep();\n        if (this.placeholder === null) {\n            this.updatePlaceholder();\n        }\n    };\n    /**\n     * To Initialize the control rendering\n     *\n     * @returns {void}\n     * @private\n     */\n    NumericTextBox.prototype.render = function () {\n        if (this.element.tagName.toLowerCase() === 'input') {\n            this.createWrapper();\n            if (this.showSpinButton) {\n                this.spinBtnCreation();\n            }\n            this.setElementWidth(this.width);\n            if (!this.container.classList.contains('e-input-group')) {\n                this.container.classList.add('e-input-group');\n            }\n            this.changeValue(this.value === null || isNaN(this.value) ?\n                null : this.strictMode ? this.trimValue(this.value) : this.value);\n            this.wireEvents();\n            if (this.value !== null && !isNaN(this.value)) {\n                if (this.decimals) {\n                    this.setProperties({ value: this.roundNumber(this.value, this.decimals) }, true);\n                }\n            }\n            if (this.element.getAttribute('value') || this.value) {\n                this.element.setAttribute('value', this.element.value);\n                this.hiddenInput.setAttribute('value', this.hiddenInput.value);\n            }\n            this.elementPrevValue = this.element.value;\n            if (this.element.hasAttribute('data-val')) {\n                this.element.setAttribute('data-val', 'false');\n            }\n            if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n                this.enabled = false;\n            }\n            this.renderComplete();\n        }\n    };\n    NumericTextBox.prototype.checkAttributes = function (isDynamic) {\n        var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n            ['value', 'min', 'max', 'step', 'disabled', 'readonly', 'style', 'name', 'placeholder'];\n        for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n            var prop = attributes_1[_i];\n            if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n                switch (prop) {\n                    case 'disabled':\n                        if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['enabled'] === undefined)) || isDynamic) {\n                            var enabled = this.element.getAttribute(prop) === 'disabled' || this.element.getAttribute(prop) === ''\n                                || this.element.getAttribute(prop) === 'true' ? false : true;\n                            this.setProperties({ enabled: enabled }, !isDynamic);\n                        }\n                        break;\n                    case 'readonly':\n                        if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['readonly'] === undefined)) || isDynamic) {\n                            var readonly = this.element.getAttribute(prop) === 'readonly' || this.element.getAttribute(prop) === ''\n                                || this.element.getAttribute(prop) === 'true' ? true : false;\n                            this.setProperties({ readonly: readonly }, !isDynamic);\n                        }\n                        break;\n                    case 'placeholder':\n                        if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['placeholder'] === undefined)) || isDynamic) {\n                            this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n                        }\n                        break;\n                    case 'value':\n                        if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['value'] === undefined)) || isDynamic) {\n                            var setNumber = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n                            this.setProperties(setValue(prop, setNumber, {}), !isDynamic);\n                        }\n                        break;\n                    case 'min':\n                        if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['min'] === undefined)) || isDynamic) {\n                            var minValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n                            if (minValue !== null && !isNaN(minValue)) {\n                                this.setProperties(setValue(prop, minValue, {}), !isDynamic);\n                            }\n                        }\n                        break;\n                    case 'max':\n                        if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['max'] === undefined)) || isDynamic) {\n                            var maxValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n                            if (maxValue !== null && !isNaN(maxValue)) {\n                                this.setProperties(setValue(prop, maxValue, {}), !isDynamic);\n                            }\n                        }\n                        break;\n                    case 'step':\n                        if ((isNullOrUndefined(this.numericOptions) || (this.numericOptions['step'] === undefined)) || isDynamic) {\n                            var stepValue = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n                            if (stepValue !== null && !isNaN(stepValue)) {\n                                this.setProperties(setValue(prop, stepValue, {}), !isDynamic);\n                            }\n                        }\n                        break;\n                    case 'style':\n                        this.inputStyle = this.element.getAttribute(prop);\n                        break;\n                    case 'name':\n                        this.inputName = this.element.getAttribute(prop);\n                        break;\n                    default:\n                        {\n                            var value = this.instance.getNumberParser({ format: 'n' })(this.element.getAttribute(prop));\n                            if ((value !== null && !isNaN(value)) || (prop === 'value')) {\n                                this.setProperties(setValue(prop, value, {}), true);\n                            }\n                        }\n                        break;\n                }\n            }\n        }\n    };\n    NumericTextBox.prototype.updatePlaceholder = function () {\n        this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n    };\n    NumericTextBox.prototype.initCultureFunc = function () {\n        this.instance = new Internationalization(this.locale);\n    };\n    NumericTextBox.prototype.initCultureInfo = function () {\n        this.cultureInfo.format = this.format;\n        if (getValue('currency', this) !== null) {\n            setValue('currency', this.currency, this.cultureInfo);\n            this.setProperties({ currencyCode: this.currency }, true);\n        }\n    };\n    /* Wrapper creation */\n    NumericTextBox.prototype.createWrapper = function () {\n        var updatedCssClassValue = this.cssClass;\n        if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n            updatedCssClassValue = this.getNumericValidClassList(this.cssClass);\n        }\n        var inputObj = Input.createInput({\n            element: this.element,\n            floatLabelType: this.floatLabelType,\n            properties: {\n                readonly: this.readonly,\n                placeholder: this.placeholder,\n                cssClass: updatedCssClassValue,\n                enableRtl: this.enableRtl,\n                showClearButton: this.showClearButton,\n                enabled: this.enabled\n            }\n        }, this.createElement);\n        this.inputWrapper = inputObj;\n        this.container = inputObj.container;\n        this.container.setAttribute('class', ROOT + ' ' + this.container.getAttribute('class'));\n        this.updateHTMLAttrToWrapper();\n        if (this.readonly) {\n            attributes(this.element, { 'aria-readonly': 'true' });\n        }\n        this.hiddenInput = (this.createElement('input', { attrs: { type: 'text',\n                'validateHidden': 'true', 'aria-label': 'hidden', 'class': HIDDENELEMENT } }));\n        this.inputName = this.inputName !== null ? this.inputName : this.element.id;\n        this.element.removeAttribute('name');\n        if (this.isAngular && this.angularTagName === 'EJS-NUMERICTEXTBOX' && this.cloneElement.id.length > 0) {\n            attributes(this.hiddenInput, { 'name': this.cloneElement.id });\n        }\n        else {\n            attributes(this.hiddenInput, { 'name': this.inputName });\n        }\n        this.container.insertBefore(this.hiddenInput, this.container.childNodes[1]);\n        this.updateDataAttribute(false);\n        if (this.inputStyle !== null) {\n            attributes(this.container, { 'style': this.inputStyle });\n        }\n    };\n    NumericTextBox.prototype.updateDataAttribute = function (isDynamic) {\n        var attr = {};\n        if (!isDynamic) {\n            for (var a = 0; a < this.element.attributes.length; a++) {\n                attr[this.element.attributes[a].name] = this.element.getAttribute(this.element.attributes[a].name);\n            }\n        }\n        else {\n            attr = this.htmlAttributes;\n        }\n        for (var _i = 0, _a = Object.keys(attr); _i < _a.length; _i++) {\n            var key = _a[_i];\n            if (key.indexOf('data') === 0) {\n                this.hiddenInput.setAttribute(key, attr[\"\" + key]);\n            }\n        }\n    };\n    NumericTextBox.prototype.updateHTMLAttrToElement = function () {\n        if (!isNullOrUndefined(this.htmlAttributes)) {\n            for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n                var pro = _a[_i];\n                if (wrapperAttributes.indexOf(pro) < 0) {\n                    this.element.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n                }\n            }\n        }\n    };\n    NumericTextBox.prototype.updateCssClass = function (newClass, oldClass) {\n        Input.setCssClass(this.getNumericValidClassList(newClass), [this.container], this.getNumericValidClassList(oldClass));\n    };\n    NumericTextBox.prototype.getNumericValidClassList = function (numericClassName) {\n        var result = numericClassName;\n        if (!isNullOrUndefined(numericClassName) && numericClassName !== '') {\n            result = (numericClassName.replace(/\\s+/g, ' ')).trim();\n        }\n        return result;\n    };\n    NumericTextBox.prototype.updateHTMLAttrToWrapper = function () {\n        if (!isNullOrUndefined(this.htmlAttributes)) {\n            for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n                var pro = _a[_i];\n                if (wrapperAttributes.indexOf(pro) > -1) {\n                    if (pro === 'class') {\n                        var updatedClassValue = this.getNumericValidClassList(this.htmlAttributes[\"\" + pro]);\n                        if (updatedClassValue !== '') {\n                            addClass([this.container], updatedClassValue.split(' '));\n                        }\n                    }\n                    else if (pro === 'style') {\n                        var numericStyle = this.container.getAttribute(pro);\n                        numericStyle = !isNullOrUndefined(numericStyle) ? (numericStyle + this.htmlAttributes[\"\" + pro]) :\n                            this.htmlAttributes[\"\" + pro];\n                        this.container.setAttribute(pro, numericStyle);\n                    }\n                    else {\n                        this.container.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n                    }\n                }\n            }\n        }\n    };\n    NumericTextBox.prototype.setElementWidth = function (width) {\n        if (!isNullOrUndefined(width)) {\n            if (typeof width === 'number') {\n                this.container.style.width = formatUnit(width);\n            }\n            else if (typeof width === 'string') {\n                this.container.style.width = (width.match(/px|%|em/)) ? (width) : (formatUnit(width));\n            }\n        }\n    };\n    /* Spinner creation */\n    NumericTextBox.prototype.spinBtnCreation = function () {\n        this.spinDown = Input.appendSpan(SPINICON + ' ' + SPINDOWN, this.container, this.createElement);\n        attributes(this.spinDown, {\n            'title': this.l10n.getConstant('decrementTitle')\n        });\n        this.spinUp = Input.appendSpan(SPINICON + ' ' + SPINUP, this.container, this.createElement);\n        attributes(this.spinUp, {\n            'title': this.l10n.getConstant('incrementTitle')\n        });\n        this.wireSpinBtnEvents();\n    };\n    NumericTextBox.prototype.validateMinMax = function () {\n        if (!(typeof (this.min) === 'number' && !isNaN(this.min))) {\n            this.setProperties({ min: -(Number.MAX_VALUE) }, true);\n        }\n        if (!(typeof (this.max) === 'number' && !isNaN(this.max))) {\n            this.setProperties({ max: Number.MAX_VALUE }, true);\n        }\n        if (this.decimals !== null) {\n            if (this.min !== -(Number.MAX_VALUE)) {\n                this.setProperties({ min: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.min)) }, true);\n            }\n            if (this.max !== (Number.MAX_VALUE)) {\n                this.setProperties({ max: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.max)) }, true);\n            }\n        }\n        this.setProperties({ min: this.min > this.max ? this.max : this.min }, true);\n        if (this.min !== -(Number.MAX_VALUE)) {\n            attributes(this.element, { 'aria-valuemin': this.min.toString() });\n        }\n        if (this.max !== (Number.MAX_VALUE)) {\n            attributes(this.element, { 'aria-valuemax': this.max.toString() });\n        }\n    };\n    NumericTextBox.prototype.formattedValue = function (decimals, value) {\n        return this.instance.getNumberFormat({\n            maximumFractionDigits: decimals,\n            minimumFractionDigits: decimals, useGrouping: false\n        })(value);\n    };\n    NumericTextBox.prototype.validateStep = function () {\n        if (this.decimals !== null) {\n            this.setProperties({ step: this.instance.getNumberParser({ format: 'n' })(this.formattedValue(this.decimals, this.step)) }, true);\n        }\n    };\n    NumericTextBox.prototype.action = function (operation, event) {\n        this.isInteract = true;\n        var value = this.isFocused ? this.instance.getNumberParser({ format: 'n' })(this.element.value) : this.value;\n        this.changeValue(this.performAction(value, this.step, operation));\n        this.raiseChangeEvent(event);\n    };\n    NumericTextBox.prototype.checkErrorClass = function () {\n        if (this.isValidState) {\n            removeClass([this.container], ERROR);\n        }\n        else {\n            addClass([this.container], ERROR);\n        }\n        attributes(this.element, { 'aria-invalid': this.isValidState ? 'false' : 'true' });\n    };\n    NumericTextBox.prototype.bindClearEvent = function () {\n        if (this.showClearButton) {\n            EventHandler.add(this.inputWrapper.clearButton, 'mousedown touchstart', this.resetHandler, this);\n        }\n    };\n    NumericTextBox.prototype.resetHandler = function (e) {\n        e.preventDefault();\n        if (!(this.inputWrapper.clearButton.classList.contains('e-clear-icon-hide')) || this.inputWrapper.container.classList.contains('e-static-clear')) {\n            this.clear(e);\n        }\n        this.isInteract = true;\n        this.raiseChangeEvent(e);\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    NumericTextBox.prototype.clear = function (event) {\n        this.setProperties({ value: null }, true);\n        this.setElementValue('');\n        this.hiddenInput.value = '';\n        var formElement = closest(this.element, 'form');\n        if (formElement) {\n            var element = this.element.nextElementSibling;\n            var keyupEvent = document.createEvent('KeyboardEvent');\n            keyupEvent.initEvent('keyup', false, true);\n            element.dispatchEvent(keyupEvent);\n        }\n    };\n    NumericTextBox.prototype.resetFormHandler = function () {\n        if (this.element.tagName === 'EJS-NUMERICTEXTBOX') {\n            this.updateValue(null);\n        }\n        else {\n            this.updateValue(this.inputEleValue);\n        }\n    };\n    NumericTextBox.prototype.setSpinButton = function () {\n        if (!isNullOrUndefined(this.spinDown)) {\n            attributes(this.spinDown, {\n                'title': this.l10n.getConstant('decrementTitle'),\n                'aria-label': this.l10n.getConstant('decrementTitle')\n            });\n        }\n        if (!isNullOrUndefined(this.spinUp)) {\n            attributes(this.spinUp, {\n                'title': this.l10n.getConstant('incrementTitle'),\n                'aria-label': this.l10n.getConstant('incrementTitle')\n            });\n        }\n    };\n    NumericTextBox.prototype.wireEvents = function () {\n        EventHandler.add(this.element, 'focus', this.focusHandler, this);\n        EventHandler.add(this.element, 'blur', this.focusOutHandler, this);\n        EventHandler.add(this.element, 'keydown', this.keyDownHandler, this);\n        EventHandler.add(this.element, 'keyup', this.keyUpHandler, this);\n        EventHandler.add(this.element, 'input', this.inputHandler, this);\n        EventHandler.add(this.element, 'keypress', this.keyPressHandler, this);\n        EventHandler.add(this.element, 'change', this.changeHandler, this);\n        EventHandler.add(this.element, 'paste', this.pasteHandler, this);\n        if (this.enabled) {\n            this.bindClearEvent();\n            if (this.formEle) {\n                EventHandler.add(this.formEle, 'reset', this.resetFormHandler, this);\n            }\n        }\n    };\n    NumericTextBox.prototype.wireSpinBtnEvents = function () {\n        /* bind spin button events */\n        EventHandler.add(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n        EventHandler.add(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner, this);\n        EventHandler.add(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n        EventHandler.add(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner, this);\n        EventHandler.add(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n        EventHandler.add(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner, this);\n    };\n    NumericTextBox.prototype.unwireEvents = function () {\n        EventHandler.remove(this.element, 'focus', this.focusHandler);\n        EventHandler.remove(this.element, 'blur', this.focusOutHandler);\n        EventHandler.remove(this.element, 'keyup', this.keyUpHandler);\n        EventHandler.remove(this.element, 'input', this.inputHandler);\n        EventHandler.remove(this.element, 'keydown', this.keyDownHandler);\n        EventHandler.remove(this.element, 'keypress', this.keyPressHandler);\n        EventHandler.remove(this.element, 'change', this.changeHandler);\n        EventHandler.remove(this.element, 'paste', this.pasteHandler);\n        if (this.formEle) {\n            EventHandler.remove(this.formEle, 'reset', this.resetFormHandler);\n        }\n    };\n    NumericTextBox.prototype.unwireSpinBtnEvents = function () {\n        /* unbind spin button events */\n        EventHandler.remove(this.spinUp, Browser.touchStartEvent, this.mouseDownOnSpinner);\n        EventHandler.remove(this.spinDown, Browser.touchStartEvent, this.mouseDownOnSpinner);\n        EventHandler.remove(this.spinUp, Browser.touchEndEvent, this.mouseUpOnSpinner);\n        EventHandler.remove(this.spinDown, Browser.touchEndEvent, this.mouseUpOnSpinner);\n        EventHandler.remove(this.spinUp, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n        EventHandler.remove(this.spinDown, Browser.touchMoveEvent, this.touchMoveOnSpinner);\n    };\n    NumericTextBox.prototype.changeHandler = function (event) {\n        event.stopPropagation();\n        if (!this.element.value.length) {\n            this.setProperties({ value: null }, true);\n        }\n        var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n        this.updateValue(parsedInput, event);\n    };\n    NumericTextBox.prototype.raiseChangeEvent = function (event) {\n        this.inputValue = (isNullOrUndefined(this.inputValue) || isNaN(this.inputValue)) ? null : this.inputValue;\n        if (this.prevValue !== this.value || this.prevValue !== this.inputValue) {\n            var eventArgs = {};\n            this.changeEventArgs = { value: this.value, previousValue: this.prevValue, isInteracted: this.isInteract,\n                isInteraction: this.isInteract, event: event };\n            if (event) {\n                this.changeEventArgs.event = event;\n            }\n            if (this.changeEventArgs.event === undefined) {\n                this.changeEventArgs.isInteracted = false;\n                this.changeEventArgs.isInteraction = false;\n            }\n            merge(eventArgs, this.changeEventArgs);\n            this.prevValue = this.value;\n            this.isInteract = false;\n            this.elementPrevValue = this.element.value;\n            this.preventChange = false;\n            this.trigger('change', eventArgs);\n        }\n    };\n    NumericTextBox.prototype.pasteHandler = function () {\n        var _this = this;\n        if (!this.enabled || this.readonly) {\n            return;\n        }\n        var beforeUpdate = this.element.value;\n        setTimeout(function () {\n            if (!_this.numericRegex().test(_this.element.value)) {\n                _this.setElementValue(beforeUpdate);\n            }\n        });\n    };\n    NumericTextBox.prototype.preventHandler = function () {\n        var _this = this;\n        var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n        setTimeout(function () {\n            if (_this.element.selectionStart > 0) {\n                var currentPos = _this.element.selectionStart;\n                var prevPos = _this.element.selectionStart - 1;\n                var start = 0;\n                var valArray = _this.element.value.split('');\n                var numericObject = getNumericObject(_this.locale);\n                var decimalSeparator = getValue('decimal', numericObject);\n                var ignoreKeyCode = decimalSeparator.charCodeAt(0);\n                if (_this.element.value[prevPos] === ' ' && _this.element.selectionStart > 0 && !iOS) {\n                    if (isNullOrUndefined(_this.prevVal)) {\n                        _this.element.value = _this.element.value.trim();\n                    }\n                    else if (prevPos !== 0) {\n                        _this.element.value = _this.prevVal;\n                    }\n                    else if (prevPos === 0) {\n                        _this.element.value = _this.element.value.trim();\n                    }\n                    _this.element.setSelectionRange(prevPos, prevPos);\n                }\n                else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) &&\n                    _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== 45) {\n                    if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 1]) !==\n                        valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 1]) &&\n                        _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === ignoreKeyCode) ||\n                        _this.element.value[_this.element.selectionStart - 1].charCodeAt(0) !== ignoreKeyCode) {\n                        _this.element.value = _this.element.value.substring(0, prevPos) +\n                            _this.element.value.substring(currentPos, _this.element.value.length);\n                        _this.element.setSelectionRange(prevPos, prevPos);\n                        if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1])) && _this.element.selectionStart > 0\n                            && _this.element.value.length) {\n                            _this.preventHandler();\n                        }\n                    }\n                }\n                else if (isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 2])) && _this.element.selectionStart > 1 &&\n                    _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== 45) {\n                    if ((valArray.indexOf(_this.element.value[_this.element.selectionStart - 2]) !==\n                        valArray.lastIndexOf(_this.element.value[_this.element.selectionStart - 2]) &&\n                        _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) === ignoreKeyCode) ||\n                        _this.element.value[_this.element.selectionStart - 2].charCodeAt(0) !== ignoreKeyCode) {\n                        _this.element.setSelectionRange(prevPos, prevPos);\n                        _this.nextEle = _this.element.value[_this.element.selectionStart];\n                        _this.cursorPosChanged = true;\n                        _this.preventHandler();\n                    }\n                }\n                if (_this.cursorPosChanged === true && _this.element.value[_this.element.selectionStart] === _this.nextEle &&\n                    isNaN(parseFloat(_this.element.value[_this.element.selectionStart - 1]))) {\n                    _this.element.setSelectionRange(_this.element.selectionStart + 1, _this.element.selectionStart + 1);\n                    _this.cursorPosChanged = false;\n                    _this.nextEle = null;\n                }\n                if (_this.element.value.trim() === '') {\n                    _this.element.setSelectionRange(start, start);\n                }\n                if (_this.element.selectionStart > 0) {\n                    if ((_this.element.value[_this.element.selectionStart - 1].charCodeAt(0) === 45) && _this.element.selectionStart > 1) {\n                        if (isNullOrUndefined(_this.prevVal)) {\n                            // eslint-disable-next-line no-self-assign\n                            _this.element.value = _this.element.value;\n                        }\n                        else {\n                            _this.element.value = _this.prevVal;\n                        }\n                        _this.element.setSelectionRange(_this.element.selectionStart, _this.element.selectionStart);\n                    }\n                    if (_this.element.value[_this.element.selectionStart - 1] === decimalSeparator && _this.decimals === 0 && _this.validateDecimalOnType) {\n                        _this.element.value = _this.element.value.substring(0, prevPos) +\n                            _this.element.value.substring(currentPos, _this.element.value.length);\n                    }\n                }\n                _this.prevVal = _this.element.value;\n            }\n        });\n    };\n    NumericTextBox.prototype.keyUpHandler = function () {\n        if (!this.enabled || this.readonly) {\n            return;\n        }\n        var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n        if (!iOS && Browser.isDevice) {\n            this.preventHandler();\n        }\n        var parseValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n        parseValue = parseValue === null || isNaN(parseValue) ? null : parseValue;\n        this.hiddenInput.value = parseValue || parseValue === 0 ? parseValue.toString() : null;\n        var formElement = closest(this.element, 'form');\n        if (formElement) {\n            var element = this.element.nextElementSibling;\n            var keyupEvent = document.createEvent('KeyboardEvent');\n            keyupEvent.initEvent('keyup', false, true);\n            element.dispatchEvent(keyupEvent);\n        }\n    };\n    NumericTextBox.prototype.inputHandler = function (event) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n        var numerictextboxObj = this;\n        if (!this.enabled || this.readonly) {\n            return;\n        }\n        var iOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform);\n        var fireFox = navigator.userAgent.toLowerCase().indexOf('firefox') > -1;\n        if ((fireFox || iOS) && Browser.isDevice) {\n            this.preventHandler();\n        }\n        /* istanbul ignore next */\n        if (this.isAngular\n            && this.element.value !== getValue('decimal', getNumericObject(this.locale))\n            && this.element.value !== getValue('minusSign', getNumericObject(this.locale))) {\n            var parsedValue = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n            parsedValue = isNaN(parsedValue) ? null : parsedValue;\n            numerictextboxObj.localChange({ value: parsedValue });\n            this.preventChange = true;\n        }\n        if (this.isVue) {\n            var current = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n            var previous = this.instance.getNumberParser({ format: 'n' })(this.elementPrevValue);\n            //EJ2-54963-if type \".\" or \".0\" or \"-.0\" it converts to \"0\" automatically when binding v-model\n            var nonZeroRegex = new RegExp('[^0-9]+$');\n            if (nonZeroRegex.test(this.element.value) || ((this.elementPrevValue.indexOf('.') !== -1 || this.elementPrevValue.indexOf('-') !== -1) && this.element.value[this.element.value.length - 1] === '0')) {\n                current = this.value;\n            }\n            var eventArgs = {\n                event: event,\n                value: (current === null || isNaN(current) ? null : current),\n                previousValue: (previous === null || isNaN(previous) ? null : previous)\n            };\n            this.preventChange = true;\n            this.elementPrevValue = this.element.value;\n            this.trigger('input', eventArgs);\n        }\n    };\n    NumericTextBox.prototype.keyDownHandler = function (event) {\n        if (!this.readonly) {\n            switch (event.keyCode) {\n                case 38:\n                    event.preventDefault();\n                    this.action(INCREMENT, event);\n                    break;\n                case 40:\n                    event.preventDefault();\n                    this.action(DECREMENT, event);\n                    break;\n                default: break;\n            }\n        }\n    };\n    NumericTextBox.prototype.performAction = function (value, step, operation) {\n        if (value === null || isNaN(value)) {\n            value = 0;\n        }\n        var updatedValue = operation === INCREMENT ? value + step : value - step;\n        updatedValue = this.correctRounding(value, step, updatedValue);\n        return this.strictMode ? this.trimValue(updatedValue) : updatedValue;\n    };\n    NumericTextBox.prototype.correctRounding = function (value, step, result) {\n        var floatExp = new RegExp('[,.](.*)');\n        var floatValue = floatExp.test(value.toString());\n        var floatStep = floatExp.test(step.toString());\n        if (floatValue || floatStep) {\n            var valueCount = floatValue ? floatExp.exec(value.toString())[0].length : 0;\n            var stepCount = floatStep ? floatExp.exec(step.toString())[0].length : 0;\n            var max = Math.max(valueCount, stepCount);\n            return value = this.roundValue(result, max);\n        }\n        return result;\n    };\n    NumericTextBox.prototype.roundValue = function (result, precision) {\n        precision = precision || 0;\n        var divide = Math.pow(10, precision);\n        return result *= divide, result = Math.round(result) / divide;\n    };\n    NumericTextBox.prototype.updateValue = function (value, event) {\n        if (event) {\n            this.isInteract = true;\n        }\n        if (value !== null && !isNaN(value)) {\n            if (this.decimals) {\n                value = this.roundNumber(value, this.decimals);\n            }\n        }\n        this.inputValue = value;\n        this.changeValue(value === null || isNaN(value) ? null : this.strictMode ? this.trimValue(value) : value);\n        /* istanbul ignore next */\n        if (!this.isDynamicChange) {\n            this.raiseChangeEvent(event);\n        }\n    };\n    NumericTextBox.prototype.updateCurrency = function (prop, propVal) {\n        setValue(prop, propVal, this.cultureInfo);\n        this.updateValue(this.value);\n    };\n    NumericTextBox.prototype.changeValue = function (value) {\n        if (!(value || value === 0)) {\n            value = null;\n            this.setProperties({ value: value }, true);\n        }\n        else {\n            var numberOfDecimals = this.getNumberOfDecimals(value);\n            this.setProperties({ value: this.roundNumber(value, numberOfDecimals) }, true);\n        }\n        this.modifyText();\n        if (!this.strictMode) {\n            this.validateState();\n        }\n    };\n    NumericTextBox.prototype.modifyText = function () {\n        if (this.value || this.value === 0) {\n            var value = this.formatNumber();\n            var elementValue = this.isFocused ? value : this.instance.getNumberFormat(this.cultureInfo)(this.value);\n            this.setElementValue(elementValue);\n            attributes(this.element, { 'aria-valuenow': value });\n            this.hiddenInput.value = this.value.toString();\n            if (this.value !== null && this.serverDecimalSeparator) {\n                this.hiddenInput.value = this.hiddenInput.value.replace('.', this.serverDecimalSeparator);\n            }\n        }\n        else {\n            this.setElementValue('');\n            this.element.removeAttribute('aria-valuenow');\n            this.hiddenInput.value = null;\n        }\n    };\n    NumericTextBox.prototype.setElementValue = function (val, element) {\n        Input.setValue(val, (element ? element : this.element), this.floatLabelType, this.showClearButton);\n    };\n    NumericTextBox.prototype.validateState = function () {\n        this.isValidState = true;\n        if (this.value || this.value === 0) {\n            this.isValidState = !(this.value > this.max || this.value < this.min);\n        }\n        this.checkErrorClass();\n    };\n    NumericTextBox.prototype.getNumberOfDecimals = function (value) {\n        var numberOfDecimals;\n        // eslint-disable-next-line no-useless-escape\n        var EXPREGEXP = new RegExp('[eE][\\-+]?([0-9]+)');\n        var valueString = value.toString();\n        if (EXPREGEXP.test(valueString)) {\n            var result = EXPREGEXP.exec(valueString);\n            if (!isNullOrUndefined(result)) {\n                valueString = value.toFixed(Math.min(parseInt(result[1], 10), 20));\n            }\n        }\n        var decimalPart = valueString.split('.')[1];\n        numberOfDecimals = !decimalPart || !decimalPart.length ? 0 : decimalPart.length;\n        if (this.decimals !== null) {\n            numberOfDecimals = numberOfDecimals < this.decimals ? numberOfDecimals : this.decimals;\n        }\n        return numberOfDecimals;\n    };\n    NumericTextBox.prototype.formatNumber = function () {\n        var numberOfDecimals = this.getNumberOfDecimals(this.value);\n        return this.instance.getNumberFormat({\n            maximumFractionDigits: numberOfDecimals,\n            minimumFractionDigits: numberOfDecimals, useGrouping: false\n        })(this.value);\n    };\n    NumericTextBox.prototype.trimValue = function (value) {\n        if (value > this.max) {\n            return this.max;\n        }\n        if (value < this.min) {\n            return this.min;\n        }\n        return value;\n    };\n    NumericTextBox.prototype.roundNumber = function (value, precision) {\n        var result = value;\n        var decimals = precision || 0;\n        var result1 = result.toString().split('e');\n        result = Math.round(Number(result1[0] + 'e' + (result1[1] ? (Number(result1[1]) + decimals) : decimals)));\n        var result2 = result.toString().split('e');\n        result = Number(result2[0] + 'e' + (result2[1] ? (Number(result2[1]) - decimals) : -decimals));\n        return Number(result.toFixed(decimals));\n    };\n    NumericTextBox.prototype.cancelEvent = function (event) {\n        event.preventDefault();\n        return false;\n    };\n    NumericTextBox.prototype.keyPressHandler = function (event) {\n        if (!this.enabled || this.readonly) {\n            return true;\n        }\n        if (!Browser.isDevice && Browser.info.version === '11.0' && event.keyCode === 13) {\n            var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n            this.updateValue(parsedInput, event);\n            return true;\n        }\n        if (event.which === 0 || event.metaKey || event.ctrlKey || event.keyCode === 8 || event.keyCode === 13) {\n            return true;\n        }\n        var currentChar = String.fromCharCode(event.which);\n        var decimalSeparator = getValue('decimal', getNumericObject(this.locale));\n        var isAlterNumPadDecimalChar = event.code === 'NumpadDecimal' && currentChar !== decimalSeparator;\n        //EJ2-59813-replace the culture decimal separator value with numberpad decimal separator value when culture decimal separator and numberpad decimal separator are different\n        if (isAlterNumPadDecimalChar) {\n            currentChar = decimalSeparator;\n        }\n        var text = this.element.value;\n        text = text.substring(0, this.element.selectionStart) + currentChar + text.substring(this.element.selectionEnd);\n        if (!this.numericRegex().test(text)) {\n            event.preventDefault();\n            event.stopPropagation();\n            return false;\n        }\n        else {\n            //EJ2-59813-update the numberpad decimal separator and update the cursor position\n            if (isAlterNumPadDecimalChar) {\n                var start = this.element.selectionStart + 1;\n                this.element.value = text;\n                this.element.setSelectionRange(start, start);\n                event.preventDefault();\n                event.stopPropagation();\n            }\n            return true;\n        }\n    };\n    NumericTextBox.prototype.numericRegex = function () {\n        var numericObject = getNumericObject(this.locale);\n        var decimalSeparator = getValue('decimal', numericObject);\n        var fractionRule = '*';\n        if (decimalSeparator === DECIMALSEPARATOR) {\n            decimalSeparator = '\\\\' + decimalSeparator;\n        }\n        if (this.decimals === 0 && this.validateDecimalOnType) {\n            return INTREGEXP;\n        }\n        if (this.decimals && this.validateDecimalOnType) {\n            fractionRule = '{0,' + this.decimals + '}';\n        }\n        /* eslint-disable-next-line security/detect-non-literal-regexp */\n        return new RegExp('^(-)?(((\\\\d+(' + decimalSeparator + '\\\\d' + fractionRule +\n            ')?)|(' + decimalSeparator + '\\\\d' + fractionRule + ')))?$');\n    };\n    NumericTextBox.prototype.mouseWheel = function (event) {\n        event.preventDefault();\n        var delta;\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        var rawEvent = event;\n        if (rawEvent.wheelDelta) {\n            delta = rawEvent.wheelDelta / 120;\n        }\n        else if (rawEvent.detail) {\n            delta = -rawEvent.detail / 3;\n        }\n        if (delta > 0) {\n            this.action(INCREMENT, event);\n        }\n        else if (delta < 0) {\n            this.action(DECREMENT, event);\n        }\n        this.cancelEvent(event);\n    };\n    NumericTextBox.prototype.focusHandler = function (event) {\n        var _this = this;\n        clearTimeout(selectionTimeOut);\n        this.focusEventArgs = { event: event, value: this.value, container: this.container };\n        this.trigger('focus', this.focusEventArgs);\n        if (!this.enabled || this.readonly) {\n            return;\n        }\n        this.isFocused = true;\n        removeClass([this.container], ERROR);\n        this.prevValue = this.value;\n        if ((this.value || this.value === 0)) {\n            var formatValue_1 = this.formatNumber();\n            this.setElementValue(formatValue_1);\n            if (!this.isPrevFocused) {\n                if (!Browser.isDevice && Browser.info.version === '11.0') {\n                    this.element.setSelectionRange(0, formatValue_1.length);\n                }\n                else {\n                    var delay = (Browser.isDevice && Browser.isIos) ? 600 : 0;\n                    selectionTimeOut = setTimeout(function () {\n                        _this.element.setSelectionRange(0, formatValue_1.length);\n                    }, delay);\n                }\n            }\n        }\n        if (!Browser.isDevice) {\n            EventHandler.add(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel, this);\n        }\n    };\n    NumericTextBox.prototype.focusOutHandler = function (event) {\n        var _this = this;\n        this.blurEventArgs = { event: event, value: this.value, container: this.container };\n        this.trigger('blur', this.blurEventArgs);\n        if (!this.enabled || this.readonly) {\n            return;\n        }\n        if (this.isPrevFocused) {\n            event.preventDefault();\n            if (Browser.isDevice) {\n                var value_1 = this.element.value;\n                this.element.focus();\n                this.isPrevFocused = false;\n                var ele_1 = this.element;\n                setTimeout(function () {\n                    _this.setElementValue(value_1, ele_1);\n                }, 200);\n            }\n        }\n        else {\n            this.isFocused = false;\n            if (!this.element.value.length) {\n                this.setProperties({ value: null }, true);\n            }\n            var parsedInput = this.instance.getNumberParser({ format: 'n' })(this.element.value);\n            this.updateValue(parsedInput);\n            if (!Browser.isDevice) {\n                EventHandler.remove(this.element, 'mousewheel DOMMouseScroll', this.mouseWheel);\n            }\n        }\n        var formElement = closest(this.element, 'form');\n        if (formElement) {\n            var element = this.element.nextElementSibling;\n            var focusEvent = document.createEvent('FocusEvent');\n            focusEvent.initEvent('focusout', false, true);\n            element.dispatchEvent(focusEvent);\n        }\n    };\n    NumericTextBox.prototype.mouseDownOnSpinner = function (event) {\n        var _this = this;\n        if (this.isFocused) {\n            this.isPrevFocused = true;\n            event.preventDefault();\n        }\n        if (!this.getElementData(event)) {\n            return;\n        }\n        // eslint-disable-next-line @typescript-eslint/no-unused-vars\n        var result = this.getElementData(event);\n        var target = event.currentTarget;\n        var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n        EventHandler.add(target, 'mouseleave', this.mouseUpClick, this);\n        this.timeOut = setInterval(function () {\n            _this.isCalled = true;\n            _this.action(action, event);\n        }, 150);\n        EventHandler.add(document, 'mouseup', this.mouseUpClick, this);\n    };\n    NumericTextBox.prototype.touchMoveOnSpinner = function (event) {\n        var target;\n        if (event.type === 'touchmove') {\n            var touchEvent = event.touches;\n            target = touchEvent.length && document.elementFromPoint(touchEvent[0].pageX, touchEvent[0].pageY);\n        }\n        else {\n            target = document.elementFromPoint(event.clientX, event.clientY);\n        }\n        if (!(target.classList.contains(SPINICON))) {\n            clearInterval(this.timeOut);\n        }\n    };\n    NumericTextBox.prototype.mouseUpOnSpinner = function (event) {\n        this.prevValue = this.value;\n        if (this.isPrevFocused) {\n            this.element.focus();\n            if (!Browser.isDevice) {\n                this.isPrevFocused = false;\n            }\n        }\n        if (!Browser.isDevice) {\n            event.preventDefault();\n        }\n        if (!this.getElementData(event)) {\n            return;\n        }\n        var target = event.currentTarget;\n        var action = (target.classList.contains(SPINUP)) ? INCREMENT : DECREMENT;\n        EventHandler.remove(target, 'mouseleave', this.mouseUpClick);\n        if (!this.isCalled) {\n            this.action(action, event);\n        }\n        this.isCalled = false;\n        EventHandler.remove(document, 'mouseup', this.mouseUpClick);\n        var formElement = closest(this.element, 'form');\n        if (formElement) {\n            var element = this.element.nextElementSibling;\n            var keyupEvent = document.createEvent('KeyboardEvent');\n            keyupEvent.initEvent('keyup', false, true);\n            element.dispatchEvent(keyupEvent);\n        }\n    };\n    NumericTextBox.prototype.getElementData = function (event) {\n        if ((event.which && event.which === 3) || (event.button && event.button === 2)\n            || !this.enabled || this.readonly) {\n            return false;\n        }\n        clearInterval(this.timeOut);\n        return true;\n    };\n    NumericTextBox.prototype.floatLabelTypeUpdate = function () {\n        Input.removeFloating(this.inputWrapper);\n        var hiddenInput = this.hiddenInput;\n        this.hiddenInput.remove();\n        Input.addFloating(this.element, this.floatLabelType, this.placeholder, this.createElement);\n        this.container.insertBefore(hiddenInput, this.container.childNodes[1]);\n    };\n    NumericTextBox.prototype.mouseUpClick = function (event) {\n        event.stopPropagation();\n        clearInterval(this.timeOut);\n        this.isCalled = false;\n        if (this.spinUp) {\n            EventHandler.remove(this.spinUp, 'mouseleave', this.mouseUpClick);\n        }\n        if (this.spinDown) {\n            EventHandler.remove(this.spinDown, 'mouseleave', this.mouseUpClick);\n        }\n    };\n    /**\n     * Increments the NumericTextBox value with the specified step value.\n     *\n     * @param {number} step - Specifies the value used to increment the NumericTextBox value.\n     * if its not given then numeric value will be incremented based on the step property value.\n     * @returns {void}\n     */\n    NumericTextBox.prototype.increment = function (step) {\n        if (step === void 0) { step = this.step; }\n        this.isInteract = false;\n        this.changeValue(this.performAction(this.value, step, INCREMENT));\n        this.raiseChangeEvent();\n    };\n    /**\n     * Decrements the NumericTextBox value with specified step value.\n     *\n     * @param {number} step - Specifies the value used to decrement the NumericTextBox value.\n     * if its not given then numeric value will be decremented based on the step property value.\n     * @returns {void}\n     */\n    NumericTextBox.prototype.decrement = function (step) {\n        if (step === void 0) { step = this.step; }\n        this.isInteract = false;\n        this.changeValue(this.performAction(this.value, step, DECREMENT));\n        this.raiseChangeEvent();\n    };\n    /**\n     * Removes the component from the DOM and detaches all its related event handlers.\n     * Also it maintains the initial input element from the DOM.\n     *\n     * @method destroy\n     * @returns {void}\n     */\n    NumericTextBox.prototype.destroy = function () {\n        this.unwireEvents();\n        detach(this.hiddenInput);\n        if (this.showSpinButton) {\n            this.unwireSpinBtnEvents();\n            detach(this.spinUp);\n            detach(this.spinDown);\n        }\n        var attrArray = ['aria-labelledby', 'role', 'autocomplete', 'aria-readonly',\n            'aria-disabled', 'autocapitalize', 'spellcheck', 'aria-autocomplete', 'tabindex',\n            'aria-valuemin', 'aria-valuemax', 'aria-valuenow', 'aria-invalid'];\n        for (var i = 0; i < attrArray.length; i++) {\n            this.element.removeAttribute(attrArray[i]);\n        }\n        this.element.classList.remove('e-input');\n        this.container.insertAdjacentElement('afterend', this.element);\n        detach(this.container);\n        this.spinUp = null;\n        this.spinDown = null;\n        this.container = null;\n        this.hiddenInput = null;\n        this.changeEventArgs = null;\n        this.blurEventArgs = null;\n        this.focusEventArgs = null;\n        this.inputWrapper = null;\n        Input.destroy();\n        _super.prototype.destroy.call(this);\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n    /**\n     * Returns the value of NumericTextBox with the format applied to the NumericTextBox.\n     *\n     */\n    NumericTextBox.prototype.getText = function () {\n        return this.element.value;\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n    /**\n     * Sets the focus to widget for interaction.\n     *\n     * @returns {void}\n     */\n    NumericTextBox.prototype.focusIn = function () {\n        if (document.activeElement !== this.element && this.enabled) {\n            this.element.focus();\n            addClass([this.container], [NUMERIC_FOCUS]);\n        }\n    };\n    /**\n     * Remove the focus from widget, if the widget is in focus state.\n     *\n     * @returns {void}\n     */\n    NumericTextBox.prototype.focusOut = function () {\n        if (document.activeElement === this.element && this.enabled) {\n            this.element.blur();\n            removeClass([this.container], [NUMERIC_FOCUS]);\n        }\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Gets the properties to be maintained in the persisted state.\n     *\n     * @returns {string}\n     */\n    NumericTextBox.prototype.getPersistData = function () {\n        var keyEntity = ['value'];\n        return this.addOnPersist(keyEntity);\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Calls internally if any of the property value is changed.\n     *\n     * @param {NumericTextBoxModel} newProp - Returns the dynamic property value of the component.\n     * @param {NumericTextBoxModel} oldProp - Returns the previous property value of the component.\n     * @returns {void}\n     * @private\n     */\n    NumericTextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'width':\n                    this.setElementWidth(newProp.width);\n                    Input.calculateWidth(this.element, this.container);\n                    break;\n                case 'cssClass':\n                    this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n                    break;\n                case 'enabled':\n                    Input.setEnabled(newProp.enabled, this.element);\n                    this.bindClearEvent();\n                    break;\n                case 'enableRtl':\n                    Input.setEnableRtl(newProp.enableRtl, [this.container]);\n                    break;\n                case 'readonly':\n                    Input.setReadonly(newProp.readonly, this.element);\n                    if (this.readonly) {\n                        attributes(this.element, { 'aria-readonly': 'true' });\n                    }\n                    else {\n                        this.element.removeAttribute('aria-readonly');\n                    }\n                    break;\n                case 'htmlAttributes':\n                    this.updateHTMLAttrToElement();\n                    this.updateHTMLAttrToWrapper();\n                    this.updateDataAttribute(true);\n                    this.checkAttributes(true);\n                    Input.validateInputType(this.container, this.element);\n                    break;\n                case 'placeholder':\n                    Input.setPlaceholder(newProp.placeholder, this.element);\n                    Input.calculateWidth(this.element, this.container);\n                    break;\n                case 'step':\n                    this.step = newProp.step;\n                    this.validateStep();\n                    break;\n                case 'showSpinButton':\n                    this.updateSpinButton(newProp);\n                    break;\n                case 'showClearButton':\n                    this.updateClearButton(newProp);\n                    break;\n                case 'floatLabelType':\n                    this.floatLabelType = newProp.floatLabelType;\n                    this.floatLabelTypeUpdate();\n                    break;\n                case 'value':\n                    this.isDynamicChange = (this.isAngular || this.isVue) && this.preventChange;\n                    this.updateValue(newProp.value);\n                    if (this.isDynamicChange) {\n                        this.preventChange = false;\n                        this.isDynamicChange = false;\n                    }\n                    break;\n                case 'min':\n                case 'max':\n                    setValue(prop, getValue(prop, newProp), this);\n                    this.validateMinMax();\n                    this.updateValue(this.value);\n                    break;\n                case 'strictMode':\n                    this.strictMode = newProp.strictMode;\n                    this.updateValue(this.value);\n                    this.validateState();\n                    break;\n                case 'locale':\n                    this.initCultureFunc();\n                    this.l10n.setLocale(this.locale);\n                    this.setSpinButton();\n                    this.updatePlaceholder();\n                    Input.setPlaceholder(this.placeholder, this.element);\n                    this.updateValue(this.value);\n                    break;\n                case 'currency':\n                    {\n                        var propVal = getValue(prop, newProp);\n                        this.setProperties({ currencyCode: propVal }, true);\n                        this.updateCurrency(prop, propVal);\n                    }\n                    break;\n                case 'currencyCode':\n                    {\n                        var propValue = getValue(prop, newProp);\n                        this.setProperties({ currency: propValue }, true);\n                        this.updateCurrency('currency', propValue);\n                    }\n                    break;\n                case 'format':\n                    setValue(prop, getValue(prop, newProp), this);\n                    this.initCultureInfo();\n                    this.updateValue(this.value);\n                    break;\n                case 'decimals':\n                    this.decimals = newProp.decimals;\n                    this.updateValue(this.value);\n            }\n        }\n    };\n    NumericTextBox.prototype.updateClearButton = function (newProp) {\n        Input.setClearButton(newProp.showClearButton, this.element, this.inputWrapper, undefined, this.createElement);\n        this.bindClearEvent();\n    };\n    NumericTextBox.prototype.updateSpinButton = function (newProp) {\n        if (newProp.showSpinButton) {\n            this.spinBtnCreation();\n        }\n        else {\n            detach(this.spinUp);\n            detach(this.spinDown);\n        }\n    };\n    /**\n     * Gets the component name\n     *\n     * @returns {string} Returns the component name.\n     * @private\n     */\n    NumericTextBox.prototype.getModuleName = function () {\n        return 'numerictextbox';\n    };\n    __decorate([\n        Property('')\n    ], NumericTextBox.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(null)\n    ], NumericTextBox.prototype, \"value\", void 0);\n    __decorate([\n        Property(-(Number.MAX_VALUE))\n    ], NumericTextBox.prototype, \"min\", void 0);\n    __decorate([\n        Property(Number.MAX_VALUE)\n    ], NumericTextBox.prototype, \"max\", void 0);\n    __decorate([\n        Property(1)\n    ], NumericTextBox.prototype, \"step\", void 0);\n    __decorate([\n        Property(null)\n    ], NumericTextBox.prototype, \"width\", void 0);\n    __decorate([\n        Property(null)\n    ], NumericTextBox.prototype, \"placeholder\", void 0);\n    __decorate([\n        Property({})\n    ], NumericTextBox.prototype, \"htmlAttributes\", void 0);\n    __decorate([\n        Property(true)\n    ], NumericTextBox.prototype, \"showSpinButton\", void 0);\n    __decorate([\n        Property(false)\n    ], NumericTextBox.prototype, \"readonly\", void 0);\n    __decorate([\n        Property(true)\n    ], NumericTextBox.prototype, \"enabled\", void 0);\n    __decorate([\n        Property(false)\n    ], NumericTextBox.prototype, \"showClearButton\", void 0);\n    __decorate([\n        Property(false)\n    ], NumericTextBox.prototype, \"enablePersistence\", void 0);\n    __decorate([\n        Property('n2')\n    ], NumericTextBox.prototype, \"format\", void 0);\n    __decorate([\n        Property(null)\n    ], NumericTextBox.prototype, \"decimals\", void 0);\n    __decorate([\n        Property(null)\n    ], NumericTextBox.prototype, \"currency\", void 0);\n    __decorate([\n        Property(null)\n    ], NumericTextBox.prototype, \"currencyCode\", void 0);\n    __decorate([\n        Property(true)\n    ], NumericTextBox.prototype, \"strictMode\", void 0);\n    __decorate([\n        Property(false)\n    ], NumericTextBox.prototype, \"validateDecimalOnType\", void 0);\n    __decorate([\n        Property('Never')\n    ], NumericTextBox.prototype, \"floatLabelType\", void 0);\n    __decorate([\n        Event()\n    ], NumericTextBox.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], NumericTextBox.prototype, \"destroyed\", void 0);\n    __decorate([\n        Event()\n    ], NumericTextBox.prototype, \"change\", void 0);\n    __decorate([\n        Event()\n    ], NumericTextBox.prototype, \"focus\", void 0);\n    __decorate([\n        Event()\n    ], NumericTextBox.prototype, \"blur\", void 0);\n    NumericTextBox = __decorate([\n        NotifyPropertyChanges\n    ], NumericTextBox);\n    return NumericTextBox;\n}(Component));\nexport { NumericTextBox };\n","/* tslint:disable-next-line:max-line-length */\nimport { EventHandler, isNullOrUndefined, extend, classList, addClass, removeClass, Browser, getValue, setValue, createElement } from '@syncfusion/ej2-base';\nimport { parentsUntil, getUid, appendChildren, getDatePredicate, getObject, extendObjWithFn, eventPromise, setChecked, clearReactVueTemplates, padZero, Global } from '../base/util';\nimport { remove, debounce, Internationalization, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate } from '@syncfusion/ej2-data';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport * as events from '../base/constant';\nimport { ValueFormatter } from '../services/value-formatter';\nimport { getForeignData } from '../base/util';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { Input } from '@syncfusion/ej2-inputs';\nimport { createSpinner, hideSpinner, showSpinner } from '@syncfusion/ej2-popups';\nimport { getFilterMenuPostion, toogleCheckbox, createCboxWithWrap, removeAddCboxClasses, getColumnByForeignKeyValue } from '../base/util';\n/**\n * @hidden\n * `CheckBoxFilterBase` module is used to handle filtering action.\n */\nvar CheckBoxFilterBase = /** @class */ (function () {\n    /**\n     * Constructor for checkbox filtering module\n     *\n     * @param {IXLFilter} parent - specifies the IXLFilter\n     * @hidden\n     */\n    function CheckBoxFilterBase(parent) {\n        this.isExecuteLocal = false;\n        this.existingPredicate = {};\n        this.foreignKeyQuery = new Query();\n        /** @hidden */\n        this.filterState = true;\n        this.values = {};\n        this.renderEmpty = false;\n        this.isCheckboxFilterTemplate = false;\n        this.infiniteRenderMod = false;\n        // for infinite scroll ui\n        this.infiniteInitialLoad = false;\n        this.infiniteSearchValChange = false;\n        this.infinitePermenantLocalData = [];\n        this.infiniteQueryExecutionPending = false;\n        this.infiniteSkipCnt = 0;\n        this.infiniteScrollAppendDiff = 0;\n        this.prevInfiniteScrollDirection = '';\n        this.infiniteLoadedElem = [];\n        this.infiniteDataCount = 0;\n        this.infiniteLocalSelectAll = true;\n        this.localInfiniteSelectAllClicked = false;\n        this.localInfiniteSelectionInteracted = false;\n        this.infiniteManualSelectMaintainPred = [];\n        this.parent = parent;\n        this.id = this.parent.element.id;\n        this.valueFormatter = new ValueFormatter(this.parent.locale);\n        this.cBoxTrue = createCheckBox(this.parent.createElement, false, { checked: true, label: ' ' });\n        this.cBoxFalse = createCheckBox(this.parent.createElement, false, { checked: false, label: ' ' });\n        this.cBoxTrue.insertBefore(this.parent.createElement('input', {\n            className: 'e-chk-hidden', attrs: { type: 'checkbox' }\n        }), this.cBoxTrue.firstChild);\n        this.cBoxFalse.insertBefore(this.parent.createElement('input', {\n            className: 'e-chk-hidden', attrs: { 'type': 'checkbox' }\n        }), this.cBoxFalse.firstChild);\n        this.cBoxFalse.querySelector('.e-frame').classList.add('e-uncheck');\n        if (this.parent.enableRtl) {\n            addClass([this.cBoxTrue, this.cBoxFalse], ['e-rtl']);\n        }\n        if (this.parent.cssClass) {\n            if (this.parent.cssClass.indexOf(' ') !== -1) {\n                addClass([this.cBoxTrue, this.cBoxFalse], this.parent.cssClass.split(' '));\n            }\n            else {\n                addClass([this.cBoxTrue, this.cBoxFalse], [this.parent.cssClass]);\n            }\n        }\n    }\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    CheckBoxFilterBase.prototype.destroy = function () {\n        this.closeDialog();\n    };\n    CheckBoxFilterBase.prototype.wireEvents = function () {\n        EventHandler.add(this.dlg, 'click', this.clickHandler, this);\n        EventHandler.add(this.dlg, 'keyup', this.keyupHandler, this);\n        this.searchHandler = debounce(this.searchBoxKeyUp, 200);\n        var elem = this.dialogObj.element.querySelector('.e-searchinput');\n        if (elem) {\n            EventHandler.add(elem, 'keyup', this.searchHandler, this);\n            EventHandler.add(elem, 'input', this.searchHandler, this);\n        }\n    };\n    CheckBoxFilterBase.prototype.unWireEvents = function () {\n        EventHandler.remove(this.dlg, 'click', this.clickHandler);\n        EventHandler.remove(this.dlg, 'keyup', this.keyupHandler);\n        var elem = this.dialogObj.element.querySelector('.e-searchinput');\n        if (elem) {\n            EventHandler.remove(elem, 'keyup', this.searchHandler);\n            EventHandler.remove(elem, 'input', this.searchHandler);\n        }\n    };\n    CheckBoxFilterBase.prototype.foreignKeyFilter = function (args, fColl, mPredicate) {\n        var _this = this;\n        var fPredicate = {};\n        var filterCollection = [];\n        var query = this.foreignKeyQuery.clone();\n        this.options.column.dataSource.\n            executeQuery(query.where(mPredicate)).then(function (e) {\n            _this.options.column.columnData = e.result;\n            _this.parent.notify(events.generateQuery, { predicate: fPredicate, column: _this.options.column });\n            args.ejpredicate = fPredicate.predicate.predicates;\n            var fpred = fPredicate.predicate.predicates;\n            for (var i = 0; i < fpred.length; i++) {\n                filterCollection.push({\n                    field: fpred[parseInt(i.toString(), 10)].field,\n                    predicate: 'or',\n                    matchCase: fpred[parseInt(i.toString(), 10)].ignoreCase,\n                    ignoreAccent: fpred[parseInt(i.toString(), 10)].ignoreAccent,\n                    operator: fpred[parseInt(i.toString(), 10)].operator,\n                    value: fpred[parseInt(i.toString(), 10)].value,\n                    type: _this.options.type\n                });\n            }\n            args.filterCollection = filterCollection.length ? filterCollection :\n                fColl.filter(function (col) { return col.field = _this.options.field; });\n            _this.options.handler(args);\n        });\n    };\n    CheckBoxFilterBase.prototype.foreignFilter = function (args, value) {\n        var operator = this.options.isRemote ?\n            (this.options.column.type === 'string' ? 'contains' : 'equal') : (this.options.column.type ? 'contains' : 'equal');\n        var initalPredicate = new Predicate(this.options.column.foreignKeyValue, operator, value, true, this.options.ignoreAccent);\n        this.foreignKeyFilter(args, [args.filterCollection], initalPredicate);\n    };\n    CheckBoxFilterBase.prototype.searchBoxClick = function (e) {\n        var target = e.target;\n        if (target.classList.contains('e-searchclear')) {\n            this.sInput.value = target.classList.contains('e-chkcancel-icon') ? '' : this.sInput.value;\n            if (this.isCheckboxFilterTemplate) {\n                this.parent.notify('refreshCheckbox', { event: e });\n            }\n            else {\n                this.refreshCheckboxes();\n            }\n            this.updateSearchIcon();\n            this.sInput.focus();\n        }\n    };\n    CheckBoxFilterBase.prototype.searchBoxKeyUp = function (e) {\n        if (isNullOrUndefined(e) || (e.key !== 'ArrowUp' && e.key !== 'ArrowDown' && e.key !== 'Tab' && !(e.key === 'Tab' && e.shiftKey))) {\n            if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === 'Shimmer') {\n                this.parent.showMaskRow(undefined, this.dialogObj.element);\n            }\n            if (this.isCheckboxFilterTemplate) {\n                this.parent.notify('refreshCheckbox', { event: e });\n            }\n            else {\n                this.refreshCheckboxes();\n            }\n            this.updateSearchIcon();\n        }\n    };\n    CheckBoxFilterBase.prototype.updateSearchIcon = function () {\n        if (this.sInput.value.length) {\n            classList(this.sIcon, ['e-chkcancel-icon'], ['e-search-icon']);\n            if (!isNullOrUndefined(document.body.querySelector('.e-chkcancel-icon'))) {\n                document.body.querySelector('.e-chkcancel-icon').setAttribute('title', this.localeObj.getConstant('Clear'));\n            }\n        }\n        else {\n            classList(this.sIcon, ['e-search-icon'], ['e-chkcancel-icon']);\n            if (!isNullOrUndefined(document.body.querySelector('.e-searchclear.e-search-icon'))) {\n                document.body.querySelector('.e-searchclear.e-search-icon').setAttribute('title', this.localeObj.getConstant('Search'));\n            }\n        }\n    };\n    /**\n     * Gets the localized label by locale keyword.\n     *\n     * @param {string} key - Defines localization key\n     * @returns {string} - returns localization label\n     */\n    CheckBoxFilterBase.prototype.getLocalizedLabel = function (key) {\n        return this.localeObj.getConstant(key);\n    };\n    CheckBoxFilterBase.prototype.updateDataSource = function () {\n        var dataSource = this.options.dataSource;\n        var str = 'object';\n        if (!(dataSource instanceof DataManager)) {\n            for (var i = 0; i < dataSource.length; i++) {\n                // eslint-disable-next-line valid-typeof\n                if (typeof dataSource !== str) {\n                    var obj = {};\n                    obj[this.options.field] = dataSource[parseInt(i.toString(), 10)];\n                    dataSource[parseInt(i.toString(), 10)] = obj;\n                }\n            }\n        }\n    };\n    CheckBoxFilterBase.prototype.updateModel = function (options) {\n        this.options = options;\n        this.existingPredicate = options.actualPredicate || {};\n        this.options.dataSource = options.dataSource;\n        this.options.dataManager = options.dataManager ? options.dataManager : options.dataSource;\n        this.updateDataSource();\n        this.options.type = options.type;\n        this.options.format = options.format || '';\n        this.options.ignoreAccent = options.ignoreAccent || false;\n        this.options.filteredColumns = options.filteredColumns || this.parent.filterSettings.columns;\n        this.options.query = options.query || new Query();\n        this.options.allowCaseSensitive = options.allowCaseSensitive || false;\n        this.options.uid = options.column.uid;\n        this.options.disableHtmlEncode = options.column.disableHtmlEncode || false;\n        this.values = {};\n        this.localeObj = options.localeObj;\n        this.isFiltered = options.filteredColumns.length;\n        this.infiniteRenderMod = this.parent.filterSettings && this.parent.filterSettings.enableInfiniteScrolling ? true : false;\n        this.infiniteUnloadParentExistPred = this.infiniteRenderMod && this.existingPredicate[this.options.column.field] ? this.existingPredicate[this.options.column.field].slice() : [];\n    };\n    CheckBoxFilterBase.prototype.getAndSetChkElem = function (options) {\n        this.dlg = this.parent.createElement('div', {\n            id: this.id + this.options.type + '_excelDlg',\n            attrs: { uid: this.options.column.uid },\n            className: 'e-checkboxfilter e-filter-popup'\n        });\n        this.sBox = this.parent.createElement('div', { className: 'e-searchcontainer' });\n        if (!options.hideSearchbox) {\n            this.sInput = this.parent.createElement('input', {\n                id: this.id + '_SearchBox',\n                className: 'e-searchinput'\n            });\n            this.sIcon = this.parent.createElement('span', {\n                className: 'e-searchclear e-search-icon e-icons e-input-group-icon', attrs: {\n                    type: 'text', title: this.getLocalizedLabel('Search')\n                }\n            });\n            this.searchBox = this.parent.createElement('span', { className: 'e-searchbox e-fields' });\n            this.searchBox.appendChild(this.sInput);\n            this.sBox.appendChild(this.searchBox);\n            var inputargs = {\n                element: this.sInput, floatLabelType: 'Never', properties: {\n                    placeholder: this.getLocalizedLabel('Search'),\n                    cssClass: this.parent.cssClass\n                }\n            };\n            Input.createInput(inputargs, this.parent.createElement);\n            this.searchBox.querySelector('.e-input-group').appendChild(this.sIcon);\n        }\n        this.spinner = this.parent.createElement('div', { className: 'e-spinner' }); //for spinner\n        this.cBox = this.parent.createElement('div', {\n            id: this.id + this.options.type + '_CheckBoxList',\n            className: 'e-checkboxlist e-fields'\n        });\n        this.spinner.appendChild(this.cBox);\n        this.sBox.appendChild(this.spinner);\n        return this.sBox;\n    };\n    CheckBoxFilterBase.prototype.showDialog = function (options) {\n        var args = {\n            requestType: events.filterBeforeOpen,\n            columnName: this.options.field, columnType: this.options.type, cancel: false\n        };\n        var filterModel = 'filterModel';\n        args[\"\" + filterModel] = this;\n        this.parent.notify(events.cBoxFltrBegin, args);\n        if (args.cancel) {\n            options.cancel = args.cancel;\n            return;\n        }\n        this.dialogObj = new Dialog({\n            visible: false, content: this.sBox,\n            close: this.closeDialog.bind(this),\n            enableRtl: this.parent.enableRtl,\n            width: (!isNullOrUndefined(parentsUntil(options.target, 'e-bigger')))\n                || this.parent.element.classList.contains('e-device') ? 260 : 255,\n            target: this.parent.element, animationSettings: { effect: 'None' },\n            buttons: [{\n                    click: this.btnClick.bind(this),\n                    buttonModel: {\n                        content: this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton'),\n                        cssClass: this.parent.cssClass ? 'e-primary' + ' ' + this.parent.cssClass : 'e-primary',\n                        isPrimary: true\n                    }\n                },\n                {\n                    click: this.btnClick.bind(this),\n                    buttonModel: { cssClass: this.parent.cssClass ? 'e-flat' + ' ' + this.parent.cssClass : 'e-flat',\n                        content: this.getLocalizedLabel(this.isExcel ? 'CancelButton' : 'ClearButton') }\n                }],\n            created: this.dialogCreated.bind(this),\n            open: this.dialogOpen.bind(this),\n            cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n        });\n        var isStringTemplate = 'isStringTemplate';\n        this.dialogObj[\"\" + isStringTemplate] = true;\n        this.renderResponsiveFilter(options);\n        var dialogLabel = this.parent.filterSettings && this.parent.filterSettings.type === 'CheckBox' ?\n            this.getLocalizedLabel('CheckBoxFilterDialogARIA') : this.getLocalizedLabel('ExcelFilterDialogARIA');\n        this.dlg.setAttribute('aria-label', dialogLabel);\n        if (options.isResponsiveFilter) {\n            var responsiveCnt = document.querySelector('.e-responsive-dialog > .e-dlg-content > .e-mainfilterdiv');\n            responsiveCnt.appendChild(this.dlg);\n        }\n        else {\n            this.parent.element.appendChild(this.dlg);\n        }\n        this.dialogObj.appendTo(this.dlg);\n        this.dialogObj.element.style.maxHeight = options.isResponsiveFilter ? 'none' : this.options.height + 'px';\n        this.dialogObj.show();\n        var content = this.dialogObj.element.querySelector('.e-dlg-content');\n        content.appendChild(this.sBox);\n        this.wireEvents();\n        if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === 'Shimmer'\n            && !this.infiniteRenderMod) {\n            this.parent.showMaskRow(undefined, this.dialogObj.element);\n        }\n        else if (this.infiniteRenderMod && this.parent.filterSettings && this.parent.filterSettings.loadingIndicator === 'Shimmer') {\n            this.showMask();\n        }\n        else {\n            if (this.infiniteRenderMod) {\n                this.cBox.style.marginTop = this.getListHeight(this.cBox) + 'px';\n            }\n            createSpinner({ target: this.spinner, cssClass: this.parent.cssClass ? this.parent.cssClass : null }, this.parent.createElement);\n            showSpinner(this.spinner);\n        }\n        this.getAllData();\n    };\n    CheckBoxFilterBase.prototype.renderResponsiveFilter = function (options) {\n        if (options.isResponsiveFilter) {\n            this.dialogObj.buttons = [{}];\n            this.dialogObj.position = { X: '', Y: '' };\n            this.dialogObj.target = document.querySelector('.e-resfilter > .e-dlg-content > .e-mainfilterdiv');\n            this.dialogObj.width = '100%';\n        }\n    };\n    CheckBoxFilterBase.prototype.dialogCreated = function (e) {\n        if (this.options.isResponsiveFilter) {\n            this.dialogObj.element.style.left = '0px';\n        }\n        else {\n            if (!Browser.isDevice) {\n                getFilterMenuPostion(this.options.target, this.dialogObj);\n            }\n            else {\n                this.dialogObj.position = { X: 'center', Y: 'center' };\n            }\n        }\n        if (this.options.column.showColumnMenu) {\n            this.parent.notify(events.filterDialogCreated, e);\n        }\n    };\n    CheckBoxFilterBase.prototype.openDialog = function (options) {\n        this.updateModel(options);\n        this.getAndSetChkElem(options);\n        this.showDialog(options);\n    };\n    CheckBoxFilterBase.prototype.closeDialog = function () {\n        if (this.infiniteRenderMod && this.infinitePermenantLocalData.length && !this.options.isRemote) {\n            this.options.dataSource.dataSource.json = this.infinitePermenantLocalData;\n        }\n        if (this.dialogObj && !this.dialogObj.isDestroyed) {\n            this.isBlanks = false;\n            var filterTemplateCol = this.options.columns.filter(function (col) { return col.getFilterItemTemplate(); });\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            var registeredTemplate = this.parent.registeredTemplate;\n            if (filterTemplateCol.length && !isNullOrUndefined(registeredTemplate) && registeredTemplate.filterItemTemplate) {\n                this.parent.destroyTemplate(['filterItemTemplate']);\n            }\n            if ((this.parent.isReact || this.parent.isVue) && this.parent.destroyTemplate !== undefined) {\n                clearReactVueTemplates(this.parent, ['filterItemTemplate']);\n            }\n            this.parent.notify(events.filterMenuClose, { field: this.options.field });\n            this.dialogObj.destroy();\n            this.unWireEvents();\n            remove(this.dlg);\n            this.dlg = null;\n            this.parent.notify(events.filterDialogClose, {});\n        }\n    };\n    /**\n     * @param {Column} col - Defines column details\n     * @returns {void}\n     * @hidden\n     */\n    CheckBoxFilterBase.prototype.clearFilter = function (col) {\n        // eslint-disable-next-line max-len\n        var args = { instance: this, handler: this.clearFilter, cancel: false };\n        this.parent.notify(events.fltrPrevent, args);\n        if (args.cancel) {\n            return;\n        }\n        this.options.handler({ action: 'clear-filter', field: col ? col.field : this.options.field });\n    };\n    CheckBoxFilterBase.prototype.btnClick = function (e) {\n        if (this.filterState) {\n            if ((e.target.tagName.toLowerCase() === 'input' && e.target.classList.contains('e-searchinput')) ||\n                e.keyCode === 13) {\n                if (!this.isCheckboxFilterTemplate) {\n                    this.fltrBtnHandler();\n                }\n            }\n            else {\n                var text = e.target.firstChild.textContent.toLowerCase();\n                if (this.getLocalizedLabel(this.isExcel ? 'OKButton' : 'FilterButton').toLowerCase() === text) {\n                    if (!this.isCheckboxFilterTemplate) {\n                        this.fltrBtnHandler();\n                    }\n                }\n                else if (this.getLocalizedLabel('ClearButton').toLowerCase() === text) {\n                    this.clearFilter();\n                }\n            }\n            this.closeDialog();\n        }\n        else if (e.target && e.target.firstChild &&\n            e.target.firstChild.textContent.toLowerCase() === this.getLocalizedLabel('CancelButton').toLowerCase()) {\n            this.closeDialog();\n        }\n        else if (!(e.target.tagName.toLowerCase() === 'input')) {\n            this.clearFilter();\n            this.closeDialog();\n        }\n        if (this.options.column.showColumnMenu) {\n            this.parent.notify(events.afterFilterColumnMenuClose, {});\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    CheckBoxFilterBase.prototype.fltrBtnHandler = function () {\n        var _this = this;\n        if (this.infiniteRenderMod) {\n            this.cBox.innerHTML = '';\n            appendChildren(this.cBox, this.infiniteLoadedElem.slice());\n        }\n        var checked = [].slice.call(this.cBox.querySelectorAll('.e-check:not(.e-selectall):not(.e-add-current)'));\n        var check = checked;\n        var optr = 'equal';\n        var ddlValue = this.dialogObj.element.querySelector('.e-dropdownlist');\n        if (ddlValue) {\n            this.options.operator = optr = ddlValue.ej2_instances[0].value;\n        }\n        this.isMenuNotEqual = this.options.operator === 'notequal';\n        var searchInput;\n        if (!this.options.hideSearchbox) {\n            searchInput = this.searchBox.querySelector('.e-searchinput');\n        }\n        var caseSen = this.options.allowCaseSensitive;\n        var defaults = {\n            field: this.options.field, predicate: this.isMenuNotEqual ? 'and' : 'or', uid: this.options.uid,\n            operator: optr, type: this.options.type, matchCase: caseSen, ignoreAccent: this.options.ignoreAccent\n        };\n        var isNotEqual = this.itemsCnt !== checked.length && this.itemsCnt - checked.length < checked.length;\n        if (isNotEqual && searchInput && searchInput.value === '') {\n            optr = this.isMenuNotEqual ? 'equal' : 'notequal';\n            checked = [].slice.call(this.cBox.querySelectorAll('.e-uncheck:not(.e-selectall)'));\n            defaults.predicate = this.isMenuNotEqual ? 'or' : 'and';\n            defaults.operator = optr;\n        }\n        var value;\n        var val;\n        var length;\n        var fObj;\n        var coll = [];\n        if ((checked.length !== this.itemsCnt || (searchInput && searchInput.value && searchInput.value !== ''))\n            || this.infiniteRenderMod) {\n            if (!this.infiniteRenderMod) {\n                for (var i = 0; i < checked.length; i++) {\n                    value = this.values[parentsUntil(checked[parseInt(i.toString(), 10)], 'e-ftrchk').getAttribute('uid')];\n                    fObj = extend({}, { value: value }, defaults);\n                    if (value && !value.toString().length) {\n                        fObj.operator = isNotEqual ? 'notequal' : 'equal';\n                    }\n                    if (value === '' || isNullOrUndefined(value)) {\n                        coll = coll.concat(CheckBoxFilterBase.generateNullValuePredicates(defaults));\n                    }\n                    else {\n                        coll.push(fObj);\n                    }\n                    this.notifyFilterPrevEvent(fObj);\n                }\n            }\n            else if (this.infiniteRenderMod) {\n                this.infiniteFltrBtnHandler(coll);\n            }\n            if ((this.options.type === 'date' || this.options.type === 'datetime') && check.length) {\n                length = check.length - 1;\n                val = this.values[parentsUntil(check[parseInt(length.toString(), 10)], 'e-ftrchk').getAttribute('uid')];\n                if (isNullOrUndefined(val) && isNotEqual) {\n                    coll.push({\n                        field: defaults.field, matchCase: defaults.matchCase, operator: 'equal',\n                        predicate: 'and', value: null\n                    });\n                }\n            }\n            var addCurrSelection = this.infiniteRenderMod ? this.sBox.querySelector('.e-add-current') :\n                this.cBox.querySelector('.e-add-current');\n            if (addCurrSelection && addCurrSelection.classList.contains('e-check')) {\n                var existingPredicate_1 = this.existingPredicate[this.options.field];\n                if (existingPredicate_1) {\n                    var _loop_1 = function (j) {\n                        if (!coll.some(function (data) {\n                            return data\n                                .value === existingPredicate_1[parseInt(j.toString(), 10)].value;\n                        })) {\n                            coll.push(existingPredicate_1[parseInt(j.toString(), 10)]);\n                        }\n                    };\n                    for (var j = 0; j < existingPredicate_1.length; j++) {\n                        _loop_1(j);\n                    }\n                }\n                else {\n                    return;\n                }\n            }\n            if (!this.infiniteRenderMod) {\n                this.initiateFilter(coll);\n            }\n            else if (coll.length) {\n                this.initiateFilter(coll);\n            }\n            else if (this.sBox.querySelector('.e-selectall').classList.contains('e-check') && !coll.length) {\n                var isClearFilter = this.options.filteredColumns.some(function (value) {\n                    return _this.options.field === value.field;\n                });\n                if (isClearFilter) {\n                    this.clearFilter();\n                }\n            }\n        }\n        else {\n            var isClearFilter = this.options.filteredColumns.some(function (value) {\n                return _this.options.field === value.field;\n            });\n            if (isClearFilter) {\n                this.clearFilter();\n            }\n        }\n    };\n    CheckBoxFilterBase.prototype.infiniteFltrBtnHandler = function (coll) {\n        var value;\n        if (this.infiniteManualSelectMaintainPred.length) {\n            for (var i = 0; i < this.infiniteManualSelectMaintainPred.length; i++) {\n                var pred = this.infiniteManualSelectMaintainPred[i];\n                value = pred.value + '';\n                if (value === '' || isNullOrUndefined(value)) {\n                    var dummyDefaults = { predicate: pred.predicate, field: pred.field, type: pred.type, uid: pred.uid, operator: pred.operator,\n                        matchCase: pred.matchCase, ignoreAccent: pred.ignoreAccent };\n                    coll.push.apply(coll, CheckBoxFilterBase.generateNullValuePredicates(dummyDefaults));\n                }\n                else {\n                    coll.push(this.infiniteManualSelectMaintainPred[i]);\n                }\n                this.notifyFilterPrevEvent(this.infiniteManualSelectMaintainPred[i]);\n            }\n        }\n        if (!this.localInfiniteSelectAllClicked && this.sInput.value === '' && !(!this.options.parentCurrentViewDataCount && coll.length)) {\n            for (var i = 0; i < this.infiniteUnloadParentExistPred.length; i++) {\n                coll.unshift(this.infiniteUnloadParentExistPred[i]);\n                this.notifyFilterPrevEvent(this.existingPredicate[this.options.field][i]);\n            }\n        }\n        if (this.sInput.value !== '' && (!this.localInfiniteSelectAllClicked || this.infiniteLocalSelectAll)) {\n            this.infiniteSearchPred['predicate'] = 'or';\n            coll.unshift(this.infiniteSearchPred);\n            this.notifyFilterPrevEvent(this.infiniteSearchPred);\n        }\n    };\n    CheckBoxFilterBase.prototype.notifyFilterPrevEvent = function (predicate) {\n        var args = {\n            instance: this, handler: this.fltrBtnHandler, arg1: predicate.field, arg2: predicate.predicate, arg3: predicate.operator,\n            arg4: predicate.matchCase, arg5: predicate.ignoreAccent, arg6: predicate.value, cancel: false\n        };\n        this.parent.notify(events.fltrPrevent, args);\n        if (args.cancel) {\n            return;\n        }\n    };\n    // eslint-disable-next-line\n    /** @hidden */\n    CheckBoxFilterBase.generateNullValuePredicates = function (defaults) {\n        var coll = [];\n        if (defaults.type === 'string') {\n            coll.push({\n                field: defaults.field, ignoreAccent: defaults.ignoreAccent, matchCase: defaults.matchCase,\n                operator: defaults.operator, predicate: defaults.predicate, value: ''\n            });\n        }\n        coll.push({\n            field: defaults.field,\n            matchCase: defaults.matchCase, operator: defaults.operator, predicate: defaults.predicate, value: null\n        });\n        coll.push({\n            field: defaults.field, matchCase: defaults.matchCase, operator: defaults.operator,\n            predicate: defaults.predicate, value: undefined\n        });\n        return coll;\n    };\n    // eslint-disable-next-line\n    /** @hidden */\n    CheckBoxFilterBase.prototype.initiateFilter = function (fColl) {\n        var firstVal = fColl[0];\n        var predicate;\n        if (!isNullOrUndefined(firstVal)) {\n            predicate = firstVal.ejpredicate ? firstVal.ejpredicate :\n                new Predicate(firstVal.field, firstVal.operator, firstVal.value, !firstVal.matchCase, firstVal.ignoreAccent);\n            for (var j = 1; j < fColl.length; j++) {\n                predicate = fColl[parseInt(j.toString(), 10)].ejpredicate !== undefined ?\n                    predicate[fColl[parseInt(j.toString(), 10)].predicate](fColl[parseInt(j.toString(), 10)].ejpredicate) :\n                    predicate[fColl[parseInt(j.toString(), 10)].predicate](fColl[parseInt(j.toString(), 10)].field, fColl[parseInt(j.toString(), 10)].operator, fColl[parseInt(j.toString(), 10)].value, !fColl[parseInt(j.toString(), 10)].matchCase, fColl[parseInt(j.toString(), 10)].ignoreAccent);\n            }\n            var args = {\n                action: 'filtering', filterCollection: fColl, field: this.options.field,\n                ejpredicate: Predicate.or(predicate)\n            };\n            this.options.handler(args);\n        }\n    };\n    CheckBoxFilterBase.prototype.isForeignColumn = function (col) {\n        return col.isForeignColumn ? col.isForeignColumn() : false;\n    };\n    CheckBoxFilterBase.prototype.refreshCheckboxes = function () {\n        var _this = this;\n        var val = this.sInput.value;\n        var column = this.options.column;\n        var query = this.isForeignColumn(column) ? this.foreignKeyQuery.clone() : this.options.query.clone();\n        var foreignQuery = this.options.query.clone();\n        var pred = query.queries.filter(function (e) { return e && e.fn === 'onWhere'; })[0];\n        query.queries = [];\n        foreignQuery.queries = [];\n        var parsed = (this.options.type !== 'string' && parseFloat(val)) ? parseFloat(val) : val;\n        var operator = this.options.isRemote ?\n            (this.options.type === 'string' ? 'contains' : 'equal') : (this.options.type ? 'contains' : 'equal');\n        var matchCase = true;\n        var ignoreAccent = this.options.ignoreAccent;\n        var field = this.isForeignColumn(column) ? column.foreignKeyValue : column.field;\n        parsed = (parsed === '' || parsed === undefined) ? undefined : parsed;\n        var coll = [];\n        var defaults = {\n            field: field, predicate: 'or', uid: this.options.uid,\n            operator: 'equal', type: this.options.type, matchCase: matchCase, ignoreAccent: ignoreAccent\n        };\n        var predicte;\n        var moduleName = this.options.dataManager.adaptor.getModuleName;\n        if (this.options.type === 'boolean') {\n            if (parsed !== undefined &&\n                this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n                parsed = 'true';\n            }\n            else if (parsed !== undefined &&\n                this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(parsed.toLowerCase()) !== -1) {\n                parsed = 'false';\n            }\n            if (parsed !== undefined &&\n                this.getLocalizedLabel('FilterTrue').toLowerCase().indexOf(parsed.toLowerCase()) !== -1 && moduleName) {\n                // eslint-disable-next-line no-constant-condition\n                parsed = (moduleName() === 'ODataAdaptor' || 'ODataV4Adaptor') ? true : 'true';\n            }\n            else if (parsed !== undefined &&\n                this.getLocalizedLabel('FilterFalse').toLowerCase().indexOf(parsed.toLowerCase()) !== -1 && moduleName) {\n                // eslint-disable-next-line no-constant-condition\n                parsed = (moduleName() === 'ODataAdaptor' || 'ODataV4Adaptor') ? false : 'false';\n            }\n            operator = 'equal';\n        }\n        if ((this.options.type === 'date' || this.options.type === 'datetime' || this.options.type === 'dateonly') && this.options.format) {\n            var intl = new Internationalization();\n            var format = typeof (this.options.format) === 'string' ? this.options.format :\n                this.options.format.format;\n            if (format) {\n                parsed = intl.parseDate(val, { format: format }) || new Date(val);\n            }\n            else {\n                parsed = new Date(val);\n            }\n            if (this.options.type === 'dateonly') {\n                parsed = parsed.getFullYear() + '-' + padZero(parsed.getMonth() + 1) + '-' + padZero(parsed.getDate());\n            }\n        }\n        this.infiniteSearchValChange = true;\n        this.infiniteLoadedElem = [];\n        this.infiniteLocalSelectAll = true;\n        this.localInfiniteSelectAllClicked = false;\n        this.localInfiniteSelectionInteracted = false;\n        this.infiniteSkipCnt = 0;\n        this.infiniteDataCount = 0;\n        this.infiniteManualSelectMaintainPred = [];\n        if (this.sInput.value === '') {\n            this.infiniteUnloadParentExistPred = this.infiniteRenderMod && this.existingPredicate[this.options.column.field] ? this.existingPredicate[this.options.column.field].slice() : [];\n            this.options.parentTotalDataCount = this.options.parentTotalDataCount;\n        }\n        else {\n            this.infiniteUnloadParentExistPred = [];\n        }\n        this.addDistinct(query);\n        var args = {\n            requestType: events.filterSearchBegin,\n            filterModel: this, columnName: field, column: column,\n            operator: operator, matchCase: matchCase, ignoreAccent: ignoreAccent, filterChoiceCount: null,\n            query: query, value: parsed\n        };\n        if (this.infiniteRenderMod && this.parent.filterSettings.itemsCount) {\n            args.filterChoiceCount = this.parent.filterSettings.itemsCount;\n        }\n        this.parent.trigger(events.actionBegin, args, function (filterargs) {\n            // eslint-disable-next-line no-self-assign\n            filterargs.operator = filterargs.operator;\n            predicte = new Predicate(field, filterargs.operator, args.value, filterargs.matchCase, filterargs.ignoreAccent);\n            if (_this.options.type === 'date' || _this.options.type === 'datetime' || _this.options.type === 'dateonly') {\n                operator = 'equal';\n                var filterObj = {\n                    field: field, operator: operator, value: parsed, matchCase: matchCase,\n                    ignoreAccent: ignoreAccent\n                };\n                if (!isNullOrUndefined(parsed)) {\n                    predicte = getDatePredicate(filterObj, _this.options.type);\n                }\n            }\n            if (val && typeof val === 'string' && _this.isBlanks &&\n                _this.getLocalizedLabel('Blanks').toLowerCase().indexOf(val.toLowerCase()) >= 0) {\n                coll = coll.concat(CheckBoxFilterBase.generateNullValuePredicates(defaults));\n                var emptyValPredicte = CheckBoxFilterBase.generatePredicate(coll);\n                emptyValPredicte.predicates.push(predicte);\n                predicte = emptyValPredicte;\n                query.where(emptyValPredicte);\n            }\n            else if (val.length) {\n                predicte = !isNullOrUndefined(pred) ? predicte.and(pred.e) : predicte;\n                query.where(predicte);\n            }\n            else if (!isNullOrUndefined(pred)) {\n                predicte = pred.e;\n                query.where(pred.e);\n            }\n            _this.infiniteSearchPred = predicte;\n            filterargs.filterChoiceCount = !isNullOrUndefined(filterargs.filterChoiceCount) ? filterargs.filterChoiceCount : 1000;\n            if (_this.infiniteRenderMod && _this.parent.filterSettings.itemsCount !== filterargs.filterChoiceCount) {\n                _this.parent.filterSettings.itemsCount = args.filterChoiceCount;\n            }\n            var fPredicate = {};\n            showSpinner(_this.spinner);\n            _this.renderEmpty = false;\n            if (_this.isForeignColumn(column) && val.length) {\n                var colData = ('result' in column.dataSource) ? new DataManager(column.dataSource.result) :\n                    column.dataSource;\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                colData.executeQuery(query).then(function (e) {\n                    var columnData = _this.options.column.columnData;\n                    _this.options.column.columnData = e.result;\n                    _this.parent.notify(events.generateQuery, { predicate: fPredicate, column: column });\n                    if (fPredicate.predicate.predicates.length) {\n                        foreignQuery.where(fPredicate.predicate);\n                    }\n                    else {\n                        _this.renderEmpty = true;\n                    }\n                    _this.options.column.columnData = columnData;\n                    if (_this.infiniteRenderMod) {\n                        _this.infiniteInitialLoad = isNullOrUndefined(_this.fullData) ? true : false;\n                        _this.makeInfiniteScrollRequest(foreignQuery);\n                        foreignQuery.requiresCount();\n                    }\n                    else {\n                        foreignQuery.take(filterargs.filterChoiceCount);\n                    }\n                    _this.search(filterargs, foreignQuery);\n                });\n            }\n            else {\n                if (_this.infiniteRenderMod && _this.parent.filterSettings.itemsCount) {\n                    _this.infiniteInitialLoad = isNullOrUndefined(_this.fullData) ? true : false;\n                    _this.makeInfiniteScrollRequest(query);\n                    query.requiresCount();\n                }\n                else {\n                    query.take(filterargs.filterChoiceCount);\n                }\n                _this.search(filterargs, query);\n            }\n        });\n    };\n    CheckBoxFilterBase.prototype.search = function (args, query) {\n        if (this.parent.dataSource && 'result' in this.parent.dataSource) {\n            this.filterEvent(args, query);\n        }\n        else {\n            this.processSearch(query);\n        }\n    };\n    CheckBoxFilterBase.prototype.getPredicateFromCols = function (columns, isExecuteLocal) {\n        var predicates = CheckBoxFilterBase.getPredicate(columns, isExecuteLocal);\n        var predicateList = [];\n        var fPredicate = {};\n        var isGrid = this.parent.getForeignKeyColumns !== undefined;\n        var foreignColumn = isGrid ? this.parent.getForeignKeyColumns() : [];\n        for (var _i = 0, _a = Object.keys(predicates); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            var col = void 0;\n            if (isGrid && !this.parent.getColumnByField(prop)) {\n                col = getColumnByForeignKeyValue(prop, foreignColumn);\n            }\n            if (col) {\n                this.parent.notify(events.generateQuery, { predicate: fPredicate, column: col });\n                if (fPredicate.predicate.predicates.length) {\n                    predicateList.push(Predicate.or(fPredicate.predicate.predicates));\n                }\n            }\n            else {\n                predicateList.push(predicates[\"\" + prop]);\n            }\n        }\n        return predicateList.length && Predicate.and(predicateList);\n    };\n    CheckBoxFilterBase.prototype.getQuery = function () {\n        return this.parent.getQuery ? this.parent.getQuery().clone() : new Query();\n    };\n    CheckBoxFilterBase.prototype.getAllData = function () {\n        var _this = this;\n        this.customQuery = false;\n        var query = this.getQuery();\n        query.requiresCount(); //consider take query\n        this.addDistinct(query);\n        var args = {\n            requestType: events.filterChoiceRequest, query: query, filterChoiceCount: null\n        };\n        var filterModel = 'filterModel';\n        args[\"\" + filterModel] = this;\n        if (this.infiniteRenderMod && this.parent.filterSettings.itemsCount) {\n            args.filterChoiceCount = this.parent.filterSettings.itemsCount;\n        }\n        this.parent.trigger(events.actionBegin, args, function (args) {\n            args.filterChoiceCount = !isNullOrUndefined(args.filterChoiceCount) ? args.filterChoiceCount : 1000;\n            if (_this.infiniteRenderMod && _this.parent.filterSettings.itemsCount !== args.filterChoiceCount) {\n                _this.parent.filterSettings.itemsCount = args.filterChoiceCount;\n            }\n            if (!_this.infiniteRenderMod) {\n                query.take(args.filterChoiceCount);\n            }\n            if (!args.query.distincts.length || _this.infiniteRenderMod) {\n                _this.customQuery = true;\n                _this.queryGenerate(query);\n            }\n            if (_this.infiniteRenderMod) {\n                _this.infiniteInitialLoad = isNullOrUndefined(_this.fullData) ? true : false;\n                _this.makeInfiniteScrollRequest(query);\n            }\n            if (_this.parent.dataSource && 'result' in _this.parent.dataSource) {\n                _this.filterEvent(args, query);\n            }\n            else {\n                _this.processDataOperation(query, true);\n            }\n        });\n    };\n    CheckBoxFilterBase.prototype.addDistinct = function (query) {\n        var _this = this;\n        var _a;\n        var filteredColumn = DataUtil.distinct(this.options.filteredColumns, 'field');\n        if (filteredColumn.indexOf(this.options.column.field) <= -1) {\n            filteredColumn = filteredColumn.concat(this.options.column.field);\n        }\n        if (!this.infiniteRenderMod) {\n            query.distinct(filteredColumn);\n        }\n        if (this.infiniteRenderMod && !this.options.isRemote && this.sInput.value === '') {\n            this.options.dataSource = this.options.dataSource instanceof DataManager ?\n                this.options.dataSource : new DataManager(this.options.dataSource);\n            this.infinitePermenantLocalData = this.options.dataSource.dataSource.json.slice();\n            this.options.dataSource.dataSource.json = DataUtil.distinct((_a = this.options.parentFilteredLocalRecords).concat.apply(_a, this.infinitePermenantLocalData), this.options.column.field, true);\n            if (this.isForeignColumn(this.options.column)) {\n                this.options.column.dataSource = this.options.column.dataSource instanceof DataManager ?\n                    this.options.column.dataSource : new DataManager(this.options.column.dataSource);\n                this.options.dataSource.dataSource.json = this.options.dataSource.dataSource.json.map(function (item, i) {\n                    return Object.assign({}, item, _this.options.column.dataSource.dataSource.json[i]);\n                });\n            }\n        }\n        else if (this.infiniteRenderMod && this.options.isRemote) {\n            query.select(this.options.column.field);\n            query.sortBy(this.options.column.field, 'ascending');\n            var moduleName = this.options.dataManager.adaptor.getModuleName;\n            if (moduleName && moduleName() && (moduleName() === 'ODataV4Adaptor' || moduleName() === 'WebApiAdaptor'\n                || moduleName() === 'CustomDataAdaptor' || moduleName() === 'GraphQLAdaptor' || moduleName() === 'ODataAdaptor')) {\n                query.distinct(filteredColumn);\n            }\n        }\n        return query;\n    };\n    CheckBoxFilterBase.prototype.filterEvent = function (args, query) {\n        var _this = this;\n        var defObj = eventPromise(args, query);\n        this.parent.trigger(events.dataStateChange, defObj.state);\n        var def = defObj.deffered;\n        def.promise.then(function (e) {\n            _this.dataSuccess(e);\n        });\n    };\n    CheckBoxFilterBase.prototype.infiniteScrollMouseKeyDownHandler = function () {\n        EventHandler.remove(this.cBox, 'scroll', this.infiniteScrollHandler);\n    };\n    CheckBoxFilterBase.prototype.infiniteScrollMouseKeyUpHandler = function (e) {\n        var _this = this;\n        EventHandler.add(this.cBox, 'scroll', this.infiniteScrollHandler, this);\n        var target = this.cBox;\n        if (target.children.length > 1 && (target.scrollTop >= target.scrollHeight - target.offsetHeight || target.scrollTop <= 0)) {\n            this.infiniteScrollHandler();\n        }\n        Global.timer = setTimeout(function () { _this.clickHandler(e); Global.timer = null; }, 0);\n    };\n    CheckBoxFilterBase.prototype.getListHeight = function (element) {\n        var listDiv = createElement('div', { className: 'e-ftrchk', styles: 'visibility: hidden' });\n        listDiv.innerHTML = '<div class=\"e-checkbox-wrapper\"><span class=\"e-label e-checkboxfiltertext\">A</div></span>';\n        element.appendChild(listDiv);\n        var rect = listDiv.getBoundingClientRect();\n        element.removeChild(listDiv);\n        var listHeight = Math.round(rect.height);\n        return listHeight;\n    };\n    CheckBoxFilterBase.prototype.getShimmerTemplate = function () {\n        return '<span class=\"e-mask e-skeleton e-skeleton-text e-shimmer-wave\"></span>';\n    };\n    CheckBoxFilterBase.prototype.showMask = function () {\n        var maskRowCount = 5;\n        var maskItemHeight;\n        var maskList = this.parent.createElement('div', { id: this.id + this.options.type + '_CheckBoxMaskList',\n            className: 'e-checkboxlist e-fields e-infinite-list e-masklist', styles: 'z-index: 10;' });\n        var wrapperElem = this.cBox;\n        this.removeMask();\n        if (wrapperElem) {\n            var computedStyle = getComputedStyle(wrapperElem);\n            var height = wrapperElem.children.length ? parseInt(computedStyle.height) :\n                Math.floor(parseInt(computedStyle.height.split('px')[0])) - 5;\n            var backgroundColor = this.isExcel && !wrapperElem.children.length && !this.dlg.classList.contains('e-excelfilter') ?\n                '' : getComputedStyle(this.dlg.querySelector('.e-dlg-content')).backgroundColor;\n            maskList.style.cssText = 'width: ' + computedStyle.width + '; min-height: ' + computedStyle.minHeight + '; height: ' +\n                height + 'px; margin: ' + computedStyle.margin + '; border-style: ' + computedStyle.borderStyle + '; border-width: '\n                + computedStyle.borderWidth + '; border-color: ' + computedStyle.borderColor + '; position: absolute; background-color: ' +\n                backgroundColor + ';';\n            var liHeight = this.getListHeight(wrapperElem);\n            maskRowCount = Math.floor(height / liHeight);\n            maskRowCount = wrapperElem.children.length > maskRowCount ? wrapperElem.children.length : maskRowCount;\n            maskItemHeight = liHeight + 'px';\n        }\n        var maskTemplate = '<div class=\"e-ftrchk e-mask-ftrchk\" style=\"width: 100%; height:' + maskItemHeight + ';\">'\n            + '<div class=\"e-checkbox-wrapper\" style=\"width: 100%;\"><input class=\"e-chk-hidden\">'\n            + this.getShimmerTemplate() + this.getShimmerTemplate() + '</div></div>';\n        maskList.innerHTML = '';\n        if (!wrapperElem.children.length) {\n            this.spinner.insertAdjacentHTML('beforebegin', maskTemplate);\n            var maskSpan = [].slice.call(this.spinner.parentElement\n                .querySelectorAll('.e-mask:not(.e-mask-checkbox-filter-intent):not(.e-mask-checkbox-filter-span-intent)'));\n            maskSpan[0].classList.add('e-mask-checkbox-filter-intent');\n            maskSpan[1].classList.add('e-mask-checkbox-filter-span-intent');\n        }\n        this.spinner.insertBefore(maskList, this.cBox);\n        for (var i = 0; maskRowCount && i < maskRowCount; i++) {\n            maskList.innerHTML += maskTemplate;\n            var maskSpan = [].slice.call(maskList\n                .querySelectorAll('.e-mask:not(.e-mask-checkbox-filter-intent):not(.e-mask-checkbox-filter-span-intent)'));\n            maskSpan[0].classList.add('e-mask-checkbox-filter-intent');\n            maskSpan[1].classList.add('e-mask-checkbox-filter-span-intent');\n        }\n        if (this.cBox) {\n            maskList.scrollTop = this.cBox.scrollTop;\n        }\n    };\n    CheckBoxFilterBase.prototype.removeMask = function () {\n        var maskLists = this.dialogObj.element.querySelectorAll('.e-mask-ftrchk');\n        if (maskLists.length) {\n            for (var i = 0; i < maskLists.length; i++) {\n                remove(maskLists[i]);\n            }\n        }\n        var maskParent = this.dialogObj.element.querySelector('.e-checkboxlist.e-masklist');\n        if (maskParent) {\n            remove(this.dialogObj.element.querySelector('.e-checkboxlist.e-masklist'));\n        }\n    };\n    CheckBoxFilterBase.prototype.infiniteScrollHandler = function () {\n        var target = this.cBox;\n        if (target.scrollTop >= target.scrollHeight - target.offsetHeight && !this.infiniteQueryExecutionPending\n            && this.infiniteLoadedElem.length <= (this.infiniteSkipCnt + this.parent.filterSettings.itemsCount)\n            && this.cBox.children.length === this.parent.filterSettings.itemsCount * 3\n            && (!this.infiniteDataCount || this.infiniteDataCount > (this.infiniteSkipCnt + this.parent.filterSettings.itemsCount))) {\n            this.makeInfiniteScrollRequest();\n            this.prevInfiniteScrollDirection = 'down';\n        }\n        else if (target.scrollTop >= target.scrollHeight - target.offsetHeight && !this.infiniteQueryExecutionPending\n            && this.infiniteLoadedElem.length > (this.infiniteSkipCnt + this.parent.filterSettings.itemsCount)\n            && this.cBox.children.length === this.parent.filterSettings.itemsCount * 3) {\n            this.infiniteRemoveElements(([].slice.call(this.cBox.children)).splice(0, this.parent.filterSettings.itemsCount));\n            this.infiniteSkipCnt += this.prevInfiniteScrollDirection === 'down' ? this.parent.filterSettings.itemsCount :\n                (this.parent.filterSettings.itemsCount * 3);\n            appendChildren(this.cBox, this.infiniteLoadedElem.slice(this.infiniteSkipCnt, this.parent.filterSettings.itemsCount + this.infiniteSkipCnt));\n            this.prevInfiniteScrollDirection = 'down';\n        }\n        else if (target.scrollTop === 0 && !this.infiniteInitialLoad && !this.infiniteSearchValChange && this.infiniteSkipCnt\n            && this.infiniteLoadedElem.length && this.infiniteLoadedElem.length > this.parent.filterSettings.itemsCount * 3\n            && this.cBox.children.length === this.parent.filterSettings.itemsCount * 3) {\n            this.infiniteRemoveElements(([].slice.call(this.cBox.children)).splice((this.parent.filterSettings.itemsCount * 2), this.parent.filterSettings.itemsCount));\n            this.infiniteSkipCnt -= this.prevInfiniteScrollDirection === 'up' ? this.parent.filterSettings.itemsCount :\n                (this.parent.filterSettings.itemsCount * 3);\n            this.infiniteAppendElements([].slice.call(this.infiniteLoadedElem.slice(this.infiniteSkipCnt, this.infiniteSkipCnt + this.parent.filterSettings.itemsCount)));\n            this.cBox.scrollTop = this.infiniteScrollAppendDiff;\n            this.prevInfiniteScrollDirection = 'up';\n        }\n        else if (target.scrollTop === 0 && !this.infiniteInitialLoad && !this.infiniteSearchValChange && this.infiniteSkipCnt\n            && this.infiniteLoadedElem.length && this.cBox.children.length < this.parent.filterSettings.itemsCount * 3) {\n            this.infiniteRemoveElements(([].slice.call(this.cBox.children)).splice((this.parent.filterSettings.itemsCount * 2), this.infiniteDataCount % this.parent.filterSettings.itemsCount));\n            this.infiniteSkipCnt = (Math.floor(this.infiniteDataCount / this.parent.filterSettings.itemsCount) - 3) *\n                this.parent.filterSettings.itemsCount;\n            this.infiniteAppendElements([].slice.call(this.infiniteLoadedElem.slice(this.infiniteSkipCnt, this.infiniteSkipCnt + this.parent.filterSettings.itemsCount)));\n            this.cBox.scrollTop = this.infiniteScrollAppendDiff;\n            this.prevInfiniteScrollDirection = 'up';\n        }\n    };\n    CheckBoxFilterBase.prototype.infiniteRemoveElements = function (removeElem) {\n        for (var i = 0; i < removeElem.length; i++) {\n            remove(removeElem[i]);\n        }\n    };\n    CheckBoxFilterBase.prototype.infiniteAppendElements = function (appendElem) {\n        for (var i = 0; i < appendElem.length; i++) {\n            this.cBox.insertBefore(appendElem[i], this.cBox.children[i]);\n        }\n    };\n    CheckBoxFilterBase.prototype.makeInfiniteScrollRequest = function (query) {\n        var _this = this;\n        if (!this.infiniteInitialLoad && this.parent.filterSettings && this.parent.filterSettings.loadingIndicator === 'Shimmer') {\n            setTimeout(function () {\n                if (_this.infiniteQueryExecutionPending) {\n                    _this.showMask();\n                }\n            }, 500);\n        }\n        else if (!this.infiniteInitialLoad) {\n            createSpinner({ target: this.spinner, cssClass: this.parent.cssClass ? this.parent.cssClass : null }, this.parent.createElement);\n            showSpinner(this.spinner);\n        }\n        var fName = 'fn';\n        if (this.infiniteQuery && this.infiniteQuery.queries && this.infiniteQuery.queries.length) {\n            for (var i = 0; i < this.infiniteQuery.queries.length; i++) {\n                if (this.infiniteQuery.queries[i][\"\" + fName] === 'onTake'\n                    || this.infiniteQuery.queries[i][\"\" + fName] === 'onSkip') {\n                    this.infiniteQuery.queries.splice(i, 1);\n                    i--;\n                }\n            }\n        }\n        var existQuery = query ? true : false;\n        query = query ? query : this.infiniteQuery;\n        if (this.infiniteInitialLoad || this.infiniteSearchValChange) {\n            this.infiniteSkipCnt = 0;\n        }\n        else {\n            this.infiniteSkipCnt += this.parent.filterSettings.itemsCount;\n        }\n        query.skip(this.infiniteSkipCnt);\n        if (this.infiniteInitialLoad || this.infiniteSearchValChange) {\n            query.take(this.parent.filterSettings.itemsCount * 3);\n            this.infiniteSkipCnt += this.parent.filterSettings.itemsCount * 2;\n        }\n        else {\n            query.take(this.parent.filterSettings.itemsCount);\n        }\n        if (!existQuery) {\n            this.processDataOperation(query);\n            this.infiniteQueryExecutionPending = true;\n        }\n    };\n    CheckBoxFilterBase.prototype.processDataOperation = function (query, isInitial) {\n        var _this = this;\n        this.options.dataSource = this.options.dataSource instanceof DataManager ?\n            this.options.dataSource : new DataManager(this.options.dataSource);\n        var allPromise = [];\n        var runArray = [];\n        if (this.isForeignColumn(this.options.column) && isInitial) {\n            var colData = ('result' in this.options.column.dataSource) ?\n                new DataManager(this.options.column.dataSource.result) :\n                this.options.column.dataSource;\n            this.foreignKeyQuery.params = query.params;\n            allPromise.push(colData.executeQuery(this.foreignKeyQuery));\n            runArray.push(function (data) { return _this.foreignKeyData = data; });\n        }\n        if (this.infiniteRenderMod) {\n            this.infiniteQuery = query.clone();\n            if (this.infiniteInitialLoad) {\n                this.cBox.classList.add('e-checkbox-infinitescroll');\n                EventHandler.add(this.cBox, 'scroll', this.infiniteScrollHandler, this);\n                EventHandler.add(this.cBox, 'mouseup', this.infiniteScrollMouseKeyUpHandler, this);\n                EventHandler.add(this.cBox, 'mousedown', this.infiniteScrollMouseKeyDownHandler, this);\n            }\n            else if (this.infiniteSearchValChange) {\n                this.cBox.innerHTML = '';\n            }\n        }\n        if (this.infiniteRenderMod && this.infiniteInitialLoad && !this.options.isRemote) {\n            var field = this.isForeignColumn(this.options.column) ? this.options.foreignKeyValue :\n                this.options.column.field;\n            this.options.dataSource.executeQuery(new Query().sortBy(field, DataUtil.fnAscending)).then(function (e) {\n                _this.options.dataSource.dataSource.json = e.result;\n                _this.executeQueryOperations(query, allPromise, runArray);\n            });\n        }\n        else {\n            this.executeQueryOperations(query, allPromise, runArray);\n        }\n    };\n    CheckBoxFilterBase.prototype.executeQueryOperations = function (query, allPromise, runArray) {\n        var _this = this;\n        allPromise.push(this.options.dataSource.executeQuery(query));\n        runArray.push(this.dataSuccess.bind(this));\n        var i = 0;\n        Promise.all(allPromise).then(function (e) {\n            _this.infiniteQueryExecutionPending = _this.infiniteRenderMod ? false : _this.infiniteQueryExecutionPending;\n            for (var j = 0; j < e.length; j++) {\n                _this.infiniteDataCount = _this.infiniteRenderMod && !_this.infiniteDataCount ? e[j].count : _this.infiniteDataCount;\n                runArray[i++](e[parseInt(j.toString(), 10)].result);\n            }\n        }).catch(function () {\n            if (_this.infiniteRenderMod && _this.parent.filterSettings && _this.parent.filterSettings.loadingIndicator === 'Shimmer') {\n                _this.parent.showMaskRow(undefined, _this.dialogObj.element);\n            }\n        });\n    };\n    CheckBoxFilterBase.prototype.dataSuccess = function (e) {\n        if (!this.infiniteInitialLoad && this.infiniteDataCount && ((this.infiniteSkipCnt >= this.infiniteDataCount\n            && !this.infiniteSearchValChange) || (e.length === 0))) {\n            return;\n        }\n        this.fullData = e;\n        var args1 = { dataSource: this.fullData, executeQuery: true, field: this.options.field };\n        this.parent.notify(events.beforeCheckboxRenderer, args1);\n        if (args1.executeQuery) {\n            var query = new Query();\n            if (!this.customQuery) {\n                this.isExecuteLocal = true;\n                this.queryGenerate(query);\n                this.isExecuteLocal = false;\n            }\n            // query.select(this.options.field);\n            var result = new DataManager(args1.dataSource).executeLocal(query);\n            var col = this.options.column;\n            this.filteredData = CheckBoxFilterBase.getDistinct(result, this.options.field, col, this.foreignKeyData, this).records || [];\n        }\n        var data = args1.executeQuery ? this.filteredData : args1.dataSource;\n        this.processDataSource(null, true, data, args1);\n        if (this.sInput && ((this.infiniteRenderMod && this.infiniteInitialLoad) || !this.infiniteRenderMod)) {\n            this.sInput.focus();\n        }\n        if (this.infiniteInitialLoad || this.infiniteSearchValChange) {\n            this.infiniteInitialLoad = false;\n            this.infiniteSearchValChange = false;\n        }\n        var args = {\n            requestType: events.filterAfterOpen,\n            columnName: this.options.field, columnType: this.options.type\n        };\n        var filterModel = 'filterModel';\n        args[\"\" + filterModel] = this;\n        this.parent.notify(events.cBoxFltrComplete, args);\n        if (this.isCheckboxFilterTemplate) {\n            hideSpinner(this.spinner);\n        }\n    };\n    CheckBoxFilterBase.prototype.queryGenerate = function (query) {\n        if (this.parent.searchSettings && this.parent.searchSettings.key.length) {\n            var sSettings = this.parent.searchSettings;\n            var fields = sSettings.fields.length ? sSettings.fields : this.options.columns.map(function (f) { return f.field; });\n            query.search(sSettings.key, fields, sSettings.operator, sSettings.ignoreCase, sSettings.ignoreAccent);\n        }\n        if ((this.options.filteredColumns.length)) {\n            var cols = [];\n            for (var i = 0; i < this.options.filteredColumns.length; i++) {\n                var filterColumn = this.options.filteredColumns[parseInt(i.toString(), 10)];\n                if (this.options.uid) {\n                    filterColumn.uid = filterColumn.uid || this.parent.getColumnByField(filterColumn.field).uid;\n                    if (filterColumn.uid !== this.options.uid) {\n                        cols.push(this.options.filteredColumns[parseInt(i.toString(), 10)]);\n                    }\n                }\n                else {\n                    if (filterColumn.field !== this.options.field) {\n                        cols.push(this.options.filteredColumns[parseInt(i.toString(), 10)]);\n                    }\n                }\n            }\n            var predicate = this.getPredicateFromCols(cols, this.isExecuteLocal);\n            if (predicate) {\n                query.where(predicate);\n            }\n        }\n    };\n    CheckBoxFilterBase.prototype.processDataSource = function (query, isInitial, dataSource, args) {\n        showSpinner(this.spinner);\n        // query = query ? query : this.options.query.clone();\n        // query.requiresCount();\n        // let result: Object = new DataManager(dataSource as JSON[]).executeLocal(query);\n        // let res: { result: Object[] } = result as { result: Object[] };\n        this.isExecuteLocal = true;\n        this.updateResult();\n        this.isExecuteLocal = false;\n        var args1 = { dataSource: this.fullData, isCheckboxFilterTemplate: false, column: this.options.column,\n            element: this.cBox, type: this.options.type, format: this.options.type, btnObj: this.options.isResponsiveFilter ? null :\n                this.dialogObj.btnObj[0], searchBox: this.searchBox };\n        this.parent.notify(events.beforeCheckboxfilterRenderer, args1);\n        this.isCheckboxFilterTemplate = args1.isCheckboxFilterTemplate;\n        if (!this.isCheckboxFilterTemplate) {\n            this.createFilterItems(dataSource, isInitial, args);\n        }\n        else if (this.infiniteRenderMod && this.parent.filterSettings && this.parent.filterSettings.loadingIndicator === 'Shimmer') {\n            this.removeMask();\n        }\n    };\n    CheckBoxFilterBase.prototype.processSearch = function (query) {\n        this.processDataOperation(query);\n    };\n    CheckBoxFilterBase.prototype.updateResult = function () {\n        this.result = {};\n        var predicate = this.infiniteRenderMod && this.existingPredicate[this.options.field] ?\n            this.getPredicateFromCols(this.existingPredicate[this.options.field], this.isExecuteLocal) :\n            this.getPredicateFromCols(this.options.filteredColumns, this.isExecuteLocal);\n        var query = new Query();\n        if (predicate) {\n            query.where(predicate);\n        }\n        this.parent.notify(events.beforeCheckboxRendererQuery, { query: query });\n        var result = new DataManager(this.fullData).executeLocal(query);\n        for (var _i = 0, result_1 = result; _i < result_1.length; _i++) {\n            var res = result_1[_i];\n            this.result[getObject(this.options.field, res)] = true;\n        }\n    };\n    CheckBoxFilterBase.prototype.clickHandler = function (e) {\n        var _a;\n        if (!isNullOrUndefined(Global.timer)) {\n            clearTimeout(Global.timer);\n        }\n        var target = e.target;\n        if (!isNullOrUndefined(this.parent.loadingIndicator) && this.parent.loadingIndicator.indicatorType === 'Shimmer'\n            && parentsUntil(target, 'e-mask-ftrchk')) {\n            return;\n        }\n        var elem = parentsUntil(target, 'e-checkbox-wrapper');\n        if (parentsUntil(target, 'e-searchbox')) {\n            this.searchBoxClick(e);\n        }\n        if (elem && !this.isCheckboxFilterTemplate) {\n            var selectAll = elem.querySelector('.e-selectall');\n            if (selectAll) {\n                this.updateAllCBoxes(!selectAll.classList.contains('e-check'));\n            }\n            else {\n                toogleCheckbox(elem.parentElement);\n                if (this.infiniteRenderMod && !elem.parentElement.querySelector('.e-add-current')) {\n                    this.localInfiniteSelectionInteracted = true;\n                    var caseSen = this.options.allowCaseSensitive;\n                    var span = elem.parentElement.querySelector('.e-frame');\n                    var input = span.previousSibling;\n                    var optr = input.checked ? 'equal' : 'notequal';\n                    var pred = input.checked ? 'or' : 'and';\n                    var defaults = { field: this.options.field, predicate: pred, uid: this.options.uid,\n                        operator: optr, type: this.options.type, matchCase: caseSen, ignoreAccent: this.options.ignoreAccent\n                    };\n                    var value = this.values[parentsUntil(input, 'e-ftrchk').getAttribute('uid')];\n                    this.updateInfiniteManualSelectPred(defaults, value);\n                    if (this.infiniteRenderMod && !this.options.isRemote && this.options.parentTotalDataCount\n                        && this.infiniteUnloadParentExistPred.length) {\n                        var predicate = this.getPredicateFromCols((_a = this.options.filteredColumns).concat.apply(_a, this.infiniteManualSelectMaintainPred), true);\n                        var query = new Query();\n                        if (predicate) {\n                            query.where(predicate);\n                        }\n                        var result = new DataManager(this.infinitePermenantLocalData).executeLocal(query);\n                        if (this.options.parentTotalDataCount !== result.length) {\n                            this.options.parentTotalDataCount = result.length;\n                        }\n                        if (!this.options.parentTotalDataCount && this.infiniteUnloadParentExistPred.length) {\n                            this.infiniteUnloadParentExistPred = [];\n                        }\n                    }\n                    if (this.infiniteUnloadParentExistPred.length && (this.options.parentTotalDataCount === this.infiniteDataCount\n                        || !this.options.parentTotalDataCount)) {\n                        this.infiniteUnloadParentExistPred = [];\n                    }\n                }\n            }\n            this.updateIndeterminatenBtn();\n            elem.querySelector('.e-chk-hidden').focus();\n        }\n        this.setFocus(parentsUntil(elem, 'e-ftrchk'));\n    };\n    CheckBoxFilterBase.prototype.updateInfiniteManualSelectPred = function (defaults, value) {\n        for (var i = 0; i < this.infiniteManualSelectMaintainPred.length; i++) {\n            var predmdl = this.infiniteManualSelectMaintainPred[i];\n            if (predmdl.value + '' === value + '' && (predmdl.operator === 'equal' || predmdl.operator === 'notequal')) {\n                this.infiniteManualSelectMaintainPred.splice(i, 1);\n                break;\n            }\n        }\n        if ((defaults.predicate === 'or' && (!this.localInfiniteSelectAllClicked || !this.infiniteLocalSelectAll))\n            || (defaults.predicate === 'and' && (!this.localInfiniteSelectAllClicked || this.infiniteLocalSelectAll))) {\n            this.infiniteManualSelectMaintainPred.push(extend({}, { value: value }, defaults));\n            if (defaults.predicate === 'or') {\n                this.options.parentTotalDataCount++;\n            }\n            else {\n                this.options.parentTotalDataCount--;\n            }\n        }\n    };\n    /**\n     * Method to set the next target element on keyboard navigation using arrow keys.\n     *\n     */\n    CheckBoxFilterBase.prototype.focusNextOrPrev = function (e, focusableElements) {\n        var nextIndex = (e.key === 'ArrowUp') ? focusableElements.indexOf(document.activeElement) - 1\n            : focusableElements.indexOf(document.activeElement) + 1;\n        var nextElement = focusableElements[((nextIndex + focusableElements.length) % focusableElements.length)];\n        // Set focus on the next / previous element\n        if (nextElement) {\n            nextElement.focus();\n            var target = nextElement.classList.contains('e-chk-hidden') ? parentsUntil(nextElement, 'e-ftrchk') : nextElement;\n            this.setFocus(target);\n        }\n    };\n    CheckBoxFilterBase.prototype.keyupHandler = function (e) {\n        if ((e.key === 'Tab' && e.shiftKey) || e.key === 'Tab' || ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && !e.altKey)) {\n            this.setFocus(parentsUntil(e.target, 'e-ftrchk'));\n        }\n        if ((e.key === 'ArrowUp' || e.key === 'ArrowDown') && !e.altKey && this.parent.filterSettings.type === 'CheckBox') {\n            e.preventDefault();\n            var focusableElements = Array.from(this.dlg.querySelectorAll('input, button, [tabindex]:not([tabindex=\"-1\"])'));\n            this.focusNextOrPrev(e, focusableElements);\n        }\n    };\n    CheckBoxFilterBase.prototype.setFocus = function (elem) {\n        var prevElem = this.dlg.querySelector('.e-chkfocus');\n        if (prevElem) {\n            prevElem.classList.remove('e-chkfocus');\n        }\n        if (elem && elem !== prevElem) {\n            elem.classList.add('e-chkfocus');\n        }\n    };\n    CheckBoxFilterBase.prototype.updateAllCBoxes = function (checked) {\n        if (this.infiniteRenderMod) {\n            this.localInfiniteSelectAllClicked = true;\n            this.infiniteLocalSelectAll = checked;\n            this.infiniteUnloadParentExistPred = [];\n            this.infiniteManualSelectMaintainPred = [];\n        }\n        var cBoxes = this.infiniteRenderMod ?\n            this.infiniteLoadedElem.map(function (arr) {\n                return arr.querySelector('.e-frame');\n            }) : [].slice.call(this.cBox.querySelectorAll('.e-frame:not(.e-add-current)'));\n        for (var _i = 0, cBoxes_1 = cBoxes; _i < cBoxes_1.length; _i++) {\n            var cBox = cBoxes_1[_i];\n            removeAddCboxClasses(cBox, checked);\n            setChecked(cBox.previousSibling, checked);\n        }\n    };\n    CheckBoxFilterBase.prototype.dialogOpen = function () {\n        if (this.parent.element.classList.contains('e-device')) {\n            this.dialogObj.element.querySelector('.e-input-group').classList.remove('e-input-focus');\n            if (!this.options.isResponsiveFilter) {\n                this.dialogObj.element.querySelector('.e-btn').focus();\n            }\n        }\n    };\n    CheckBoxFilterBase.prototype.createCheckbox = function (value, checked, data) {\n        var elem = checked ? this.cBoxTrue.cloneNode(true) :\n            this.cBoxFalse.cloneNode(true);\n        setChecked(elem.querySelector('input'), checked);\n        var label = elem.querySelector('.e-label');\n        var dummyData = extendObjWithFn({}, data, { column: this.options.column, parent: this.parent });\n        var innerText = this.options.disableHtmlEncode ? 'textContent' : 'innerHTML';\n        label[\"\" + innerText] = !isNullOrUndefined(value) && value.toString().length ?\n            this.parent.enableHtmlSanitizer ? SanitizeHtmlHelper.sanitize(value) : value : this.getLocalizedLabel('Blanks');\n        var checkboxUid = getUid('cbox');\n        label.setAttribute('id', checkboxUid + 'cboxLabel');\n        elem.querySelector('input').setAttribute('aria-labelledby', label.id);\n        if (label.innerHTML === this.getLocalizedLabel('Blanks')) {\n            this.isBlanks = true;\n        }\n        if (typeof value === 'boolean') {\n            label.innerHTML = value === true ? this.getLocalizedLabel('FilterTrue') : this.getLocalizedLabel('FilterFalse');\n        }\n        addClass([label], ['e-checkboxfiltertext']);\n        if (this.options.template && data[this.options.column.field] !== this.getLocalizedLabel('SelectAll')\n            && data[this.options.column.field] !== this.getLocalizedLabel('AddCurrentSelection')) {\n            label.innerHTML = '';\n            var isReactCompiler = this.parent.isReact && this.options.column.filter\n                && typeof (this.options.column.filter.itemTemplate) !== 'string';\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                this.parent.parentDetails.parentInstObj.isReact;\n            if (isReactCompiler || isReactChild) {\n                this.options.template(dummyData, this.parent, 'filterItemTemplate', null, null, null, label);\n                this.parent.renderTemplates();\n            }\n            else {\n                appendChildren(label, this.options.template(dummyData, this.parent, 'filterItemTemplate'));\n            }\n        }\n        return elem;\n    };\n    CheckBoxFilterBase.prototype.updateIndeterminatenBtn = function () {\n        var cnt = this.infiniteRenderMod ? this.infiniteLoadedElem.length : this.cBox.children.length - 1;\n        var className = [];\n        var disabled = false;\n        var elem = this.infiniteRenderMod ? this.sBox.querySelector('.e-selectall') : this.cBox.querySelector('.e-selectall');\n        var selected = this.infiniteRenderMod ? this.infiniteLoadedElem.filter(function (arr) { return arr.querySelector('.e-check'); }).length :\n            this.cBox.querySelectorAll('.e-check:not(.e-selectall):not(.e-add-current)').length;\n        if (this.cBox.querySelector('.e-add-current')) {\n            cnt -= 1;\n        }\n        var btn;\n        if (!this.options.isResponsiveFilter) {\n            btn = this.dialogObj.btnObj[0];\n            btn.disabled = false;\n        }\n        var input = elem.previousSibling;\n        setChecked(input, false);\n        input.indeterminate = false;\n        if (this.infiniteRenderMod && this.sInput.value === '' && !this.options.parentCurrentViewDataCount && !this.localInfiniteSelectionInteracted\n            && (!this.localInfiniteSelectAllClicked || (!this.infiniteLocalSelectAll && !selected)) && (cnt !== selected || cnt === selected)) {\n            selected = 0;\n        }\n        else if (this.infiniteRenderMod && this.infiniteLoadedElem.length < this.infiniteDataCount\n            && this.infiniteUnloadParentExistPred.length && (!selected || cnt === selected) && this.infiniteLocalSelectAll) {\n            if (!selected) {\n                selected += this.infiniteUnloadParentExistPred.length;\n            }\n            else {\n                cnt += this.infiniteUnloadParentExistPred.length;\n            }\n        }\n        if (cnt === selected) {\n            if (this.infiniteRenderMod) {\n                this.infiniteLocalSelectAll = true;\n                this.localInfiniteSelectAllClicked = true;\n                this.infiniteManualSelectMaintainPred = [];\n            }\n            className = ['e-check'];\n            setChecked(input, true);\n        }\n        else if (selected) {\n            className = ['e-stop'];\n            input.indeterminate = true;\n        }\n        else {\n            if (this.infiniteRenderMod) {\n                this.infiniteLocalSelectAll = false;\n                this.localInfiniteSelectAllClicked = true;\n                this.infiniteManualSelectMaintainPred = [];\n            }\n            className = ['e-uncheck'];\n            disabled = true;\n            if (btn) {\n                btn.disabled = true;\n            }\n        }\n        if (btn) {\n            this.filterState = !btn.disabled;\n            btn.dataBind();\n        }\n        removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n        addClass([elem], className);\n        this.parent.notify(events.refreshCustomFilterOkBtn, { disabled: disabled });\n    };\n    CheckBoxFilterBase.prototype.createFilterItems = function (data, isInitial, args1) {\n        var _a, _b, _c;\n        var cBoxes = this.parent.createElement('div');\n        var btn;\n        var disabled = false;\n        if (!this.options.isResponsiveFilter) {\n            btn = this.dialogObj.btnObj[0];\n        }\n        var nullCounter = -1;\n        var key = 'ejValue';\n        if (!args1.executeQuery) {\n            key = args1.field;\n        }\n        for (var i = 0; i < data.length; i++) {\n            var val = getValue(key, data[parseInt(i.toString(), 10)]);\n            if (val === '' || isNullOrUndefined(val)) {\n                nullCounter = nullCounter + 1;\n            }\n        }\n        if (!this.infiniteRenderMod) {\n            this.itemsCnt = nullCounter !== -1 ? data.length - nullCounter : data.length;\n        }\n        if (this.infiniteRenderMod && this.parent.filterSettings && this.parent.filterSettings.loadingIndicator === 'Shimmer') {\n            this.removeMask();\n        }\n        if (data.length && !this.renderEmpty) {\n            var selectAllValue = this.getLocalizedLabel('SelectAll');\n            var innerDiv = this.cBox.querySelector('.e-checkfltrnmdiv');\n            if (innerDiv) {\n                innerDiv.classList.remove('e-checkfltrnmdiv');\n            }\n            var checkBox = this.createCheckbox(selectAllValue, false, (_a = {}, _a[this.options.field] = selectAllValue, _a));\n            if (this.parent.cssClass) {\n                if (this.parent.cssClass.indexOf(' ') !== -1) {\n                    addClass([checkBox], this.parent.cssClass.split(' '));\n                }\n                else {\n                    addClass([checkBox], [this.parent.cssClass]);\n                }\n            }\n            if (this.infiniteInitialLoad || !this.infiniteRenderMod) {\n                var selectAll = createCboxWithWrap(getUid('cbox'), checkBox, 'e-ftrchk');\n                selectAll.querySelector('.e-frame').classList.add('e-selectall');\n                if (this.infiniteRenderMod) {\n                    this.sBox.insertBefore(selectAll, this.spinner);\n                }\n                else {\n                    cBoxes.appendChild(selectAll);\n                }\n            }\n            else if (this.sBox.querySelector('.e-ftrchk .e-selectall')) {\n                this.sBox.querySelector('.e-ftrchk .e-selectall').previousSibling.disabled = false;\n                this.sBox.querySelector('.e-ftrchk .e-selectall').parentElement.classList.remove('e-checkbox-disabled');\n            }\n            var predicate = new Predicate('field', 'equal', this.options.field);\n            if (this.options.foreignKeyValue) {\n                predicate = predicate.or('field', 'equal', this.options.foreignKeyValue);\n            }\n            var isColFiltered = new DataManager(this.options.filteredColumns).executeLocal(new Query().where(predicate)).length;\n            if (this.sInput.value) {\n                var predicateCheckBox = this.createCheckbox(this.getLocalizedLabel('AddCurrentSelection'), false, (_b = {},\n                    _b[this.options.field] = this.getLocalizedLabel('AddCurrentSelection'),\n                    _b));\n                if (this.parent.cssClass) {\n                    if (this.parent.cssClass.indexOf(' ') !== -1) {\n                        addClass([predicateCheckBox], this.parent.cssClass.split(' '));\n                    }\n                    else {\n                        addClass([predicateCheckBox], [this.parent.cssClass]);\n                    }\n                }\n                if ((this.infiniteRenderMod && (!isNullOrUndefined(this.sBox.children[2])\n                    && this.sBox.children[2].innerText !== 'Add current selection to filter')) || !this.infiniteRenderMod) {\n                    var predicateElement = createCboxWithWrap(getUid('cbox'), predicateCheckBox, 'e-ftrchk');\n                    predicateElement.querySelector('.e-frame').classList.add('e-add-current');\n                    if (this.infiniteRenderMod) {\n                        this.sBox.insertBefore(predicateElement, this.spinner);\n                        var checkBoxListElem = this.spinner.querySelector('.e-checkboxlist');\n                        var reduceHeight = Math.ceil(predicateElement.getBoundingClientRect().height);\n                        checkBoxListElem.style.height = (parseInt(getComputedStyle(checkBoxListElem).height.split('px')[0]) - reduceHeight)\n                            + 'px';\n                        checkBoxListElem.style.minHeight = checkBoxListElem.style.height;\n                    }\n                    else {\n                        cBoxes.appendChild(predicateElement);\n                    }\n                }\n                else if (this.sBox.querySelector('.e-ftrchk .e-add-current')) {\n                    this.sBox.querySelector('.e-ftrchk .e-add-current').previousSibling.disabled = false;\n                    this.sBox.querySelector('.e-ftrchk .e-add-current').parentElement.classList.remove('e-checkbox-disabled');\n                }\n            }\n            else if (this.infiniteRenderMod && !isNullOrUndefined(this.sBox.children[2])\n                && this.sBox.children[2].innerText === 'Add current selection to filter') {\n                var checkBoxListElem = this.spinner.querySelector('.e-checkboxlist');\n                var increaseHeight = Math.ceil(this.sBox.children[2].getBoundingClientRect().height);\n                checkBoxListElem.style.height = (parseInt(getComputedStyle(checkBoxListElem).height.split('px')[0]) + increaseHeight)\n                    + 'px';\n                checkBoxListElem.style.minHeight = checkBoxListElem.style.height;\n                remove(this.sBox.children[2]);\n            }\n            var isRndere = void 0;\n            for (var i = 0; i < data.length; i++) {\n                var uid = getUid('cbox');\n                this.values[\"\" + uid] = getValue(key, data[parseInt(i.toString(), 10)]);\n                var value = getValue(this.options.field, data[parseInt(i.toString(), 10)]);\n                if (this.options.formatFn) {\n                    value = this.valueFormatter.toView(value, this.options.formatFn);\n                }\n                var args_1 = { value: value, column: this.options.column, data: data[parseInt(i.toString(), 10)] };\n                this.parent.notify(events.filterCboxValue, args_1);\n                value = args_1.value;\n                if ((value === '' || isNullOrUndefined(value))) {\n                    if (isRndere) {\n                        continue;\n                    }\n                    isRndere = true;\n                }\n                if (this.infiniteRenderMod) {\n                    this.updateInfiniteUnLoadedCheckboxExistPred(value, this.infiniteUnloadParentExistPred);\n                }\n                var checkbox = this.localInfiniteSelectAllClicked ?\n                    this.createCheckbox(value, this.infiniteLocalSelectAll, getValue('dataObj', data[i])) :\n                    this.createCheckbox(value, this.getCheckedState(isColFiltered, this.values[\"\" + uid]), getValue('dataObj', data[i]));\n                cBoxes.appendChild(createCboxWithWrap(uid, checkbox, 'e-ftrchk'));\n                if (this.infiniteRenderMod) {\n                    cBoxes.lastChild.style.height = this.getListHeight(this.cBox) + 'px';\n                }\n            }\n            var scrollTop = this.cBox.scrollTop;\n            if (!this.infiniteRenderMod || this.infiniteSearchValChange) {\n                this.cBox.innerHTML = '';\n            }\n            else if (this.infiniteRenderMod && this.cBox.children.length) {\n                this.infiniteRemoveElements(([].slice.call(this.cBox.children)).splice(0, this.parent.filterSettings.itemsCount));\n            }\n            if (this.infiniteRenderMod) {\n                (_c = this.infiniteLoadedElem).push.apply(_c, [].slice.call(cBoxes.children));\n                this.itemsCnt = nullCounter !== -1 ? this.infiniteLoadedElem.length - nullCounter : this.infiniteLoadedElem.length;\n            }\n            if (this.infiniteUnloadParentExistPred.length && (this.infiniteLoadedElem.length >= this.infiniteDataCount\n                || !this.options.parentCurrentViewDataCount || (this.options.parentTotalDataCount === this.infiniteDataCount\n                && this.options.parentCurrentViewDataCount))) {\n                this.infiniteUnloadParentExistPred = [];\n            }\n            appendChildren(this.cBox, [].slice.call(cBoxes.children));\n            if (this.infiniteRenderMod && !this.infiniteScrollAppendDiff) {\n                this.infiniteScrollAppendDiff = Math.round(scrollTop - this.cBox.scrollTop);\n            }\n            this.updateIndeterminatenBtn();\n            if (!this.infiniteRenderMod) {\n                if (btn) {\n                    btn.disabled = false;\n                }\n                disabled = false;\n            }\n            else {\n                if (btn.disabled) {\n                    disabled = true;\n                }\n                else {\n                    disabled = false;\n                }\n            }\n        }\n        else {\n            cBoxes.appendChild(this.parent.createElement('span', { innerHTML: this.getLocalizedLabel('NoResult') }));\n            this.cBox.innerHTML = '';\n            if (this.infiniteRenderMod) {\n                var selectAll = this.sBox.querySelector('.e-ftrchk .e-selectall');\n                if (selectAll) {\n                    var selectAllParent = selectAll.parentElement.parentElement;\n                    if (selectAll.classList.contains('e-check')) {\n                        toogleCheckbox(selectAllParent);\n                    }\n                    else if (selectAll.classList.contains('e-stop')) {\n                        toogleCheckbox(selectAllParent);\n                        selectAll.classList.remove('e-stop');\n                        toogleCheckbox(selectAllParent);\n                    }\n                    selectAll.previousSibling.disabled = true;\n                    selectAll.parentElement.classList.add('e-checkbox-disabled');\n                }\n                var addCurrSelection = this.sBox.querySelector('.e-ftrchk .e-add-current');\n                if (addCurrSelection) {\n                    var addCurrSelectionParent = addCurrSelection.parentElement.parentElement;\n                    if (addCurrSelection.classList.contains('e-check')) {\n                        toogleCheckbox(addCurrSelectionParent);\n                    }\n                    addCurrSelection.previousSibling.disabled = true;\n                    addCurrSelection.parentElement.classList.add('e-checkbox-disabled');\n                }\n            }\n            this.cBox.appendChild(this.parent.createElement('div', { className: 'e-checkfltrnmdiv' }));\n            appendChildren(this.cBox.children[0], [].slice.call(cBoxes.children));\n            if (btn) {\n                btn.disabled = true;\n            }\n            disabled = true;\n            this.filterState = !disabled;\n        }\n        if (btn && data.length) {\n            this.filterState = !btn.disabled;\n            btn.dataBind();\n        }\n        var args = { requestType: events.filterChoiceRequest, dataSource: this.renderEmpty ? [] : data };\n        var filterModel = 'filterModel';\n        args[\"\" + filterModel] = this;\n        this.parent.notify(events.cBoxFltrComplete, args);\n        this.parent.notify(events.refreshCustomFilterOkBtn, { disabled: disabled });\n        if (this.infiniteRenderMod && this.infiniteInitialLoad) {\n            this.cBox.style.marginTop = '0px';\n        }\n        hideSpinner(this.spinner);\n    };\n    CheckBoxFilterBase.prototype.updateInfiniteUnLoadedCheckboxExistPred = function (value, updatePredArr) {\n        for (var j = 0; j < updatePredArr.length; j++) {\n            var pred = updatePredArr[j];\n            if (value === pred.value && (pred.operator === 'equal' || pred.operator === 'notequal')) {\n                this.infiniteManualSelectMaintainPred.push(updatePredArr[j]);\n                updatePredArr.splice(j, 1);\n                j--;\n            }\n        }\n    };\n    CheckBoxFilterBase.prototype.getCheckedState = function (isColFiltered, value) {\n        if (!this.isFiltered || !isColFiltered) {\n            return true;\n        }\n        else {\n            var checkState = this.sInput.value ? true : this.result[\"\" + value];\n            if (this.infiniteRenderMod) {\n                return checkState;\n            }\n            else {\n                return this.options.operator === 'notequal' ? !checkState : checkState;\n            }\n        }\n    };\n    CheckBoxFilterBase.getDistinct = function (json, field, column, foreignKeyData, checkboxFilter) {\n        var len = json.length;\n        var result = [];\n        var value;\n        var ejValue = 'ejValue';\n        var lookup = {};\n        var isForeignKey = column && column.isForeignColumn ? column.isForeignColumn() : false;\n        while (len--) {\n            value = json[parseInt(len.toString(), 10)];\n            if (column && column.type === 'dateonly' && typeof value[\"\" + field] === 'string' && value[\"\" + field]) {\n                var arr = value[\"\" + field].split(/[^0-9.]/);\n                value[\"\" + field] = new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10));\n            }\n            value = getObject(field, value); //local remote diff, check with mdu\n            var currentFilterValue = (typeof value === 'string') && !(isNullOrUndefined(checkboxFilter)) &&\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                !(isNullOrUndefined(checkboxFilter.parent)) && !(isNullOrUndefined(checkboxFilter.parent.filterSettings)) &&\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                !(isNullOrUndefined(checkboxFilter.parent.filterSettings.enableCaseSensitivity)) ? value.toLowerCase() : value;\n            if (!(currentFilterValue in lookup)) {\n                var obj = {};\n                obj[\"\" + ejValue] = value;\n                lookup[\"\" + currentFilterValue] = true;\n                if (isForeignKey) {\n                    var foreignDataObj = getForeignData(column, {}, value, foreignKeyData)[0];\n                    setValue(events.foreignKeyData, foreignDataObj, json[parseInt(len.toString(), 10)]);\n                    value = getValue(column.foreignKeyValue, foreignDataObj);\n                }\n                setValue(field, isNullOrUndefined(value) ? null : value, obj);\n                setValue('dataObj', json[parseInt(len.toString(), 10)], obj);\n                result.push(obj);\n            }\n        }\n        return DataUtil.group(DataUtil.sort(result, field, DataUtil.fnAscending), 'ejValue');\n    };\n    CheckBoxFilterBase.getPredicate = function (columns, isExecuteLocal) {\n        var cols = DataUtil.distinct(columns, 'field', true) || [];\n        var collection = [];\n        var pred = {};\n        for (var i = 0; i < cols.length; i++) {\n            collection = new DataManager(columns).executeLocal(new Query().where('field', 'equal', cols[parseInt(i.toString(), 10)].field));\n            if (collection.length !== 0) {\n                pred[cols[parseInt(i.toString(), 10)].field] = CheckBoxFilterBase.generatePredicate(collection, isExecuteLocal);\n            }\n        }\n        return pred;\n    };\n    CheckBoxFilterBase.generatePredicate = function (cols, isExecuteLocal) {\n        var len = cols ? cols.length : 0;\n        var predicate;\n        var operate = 'or';\n        var first = CheckBoxFilterBase.updateDateFilter(cols[0]);\n        first.ignoreAccent = !isNullOrUndefined(first.ignoreAccent) ? first.ignoreAccent : false;\n        if (first.type === 'date' || first.type === 'datetime' || first.type === 'dateonly') {\n            predicate = getDatePredicate(first, first.type, isExecuteLocal);\n        }\n        else {\n            predicate = first.ejpredicate ? first.ejpredicate :\n                new Predicate(first.field, first.operator, first.value, !CheckBoxFilterBase.getCaseValue(first), first.ignoreAccent);\n        }\n        for (var p = 1; p < len; p++) {\n            cols[parseInt(p.toString(), 10)] = CheckBoxFilterBase.updateDateFilter(cols[parseInt(p.toString(), 10)]);\n            if (len > 2 && p > 1 && ((cols[p].predicate === 'or' && cols[p - 1].predicate === 'or')\n                || (cols[p].predicate === 'and' && cols[p - 1].predicate === 'and'))) {\n                if (cols[p].type === 'date' || cols[p].type === 'datetime' || cols[p].type === 'dateonly') {\n                    predicate.predicates.push(getDatePredicate(cols[parseInt(p.toString(), 10)], cols[p].type, isExecuteLocal));\n                }\n                else {\n                    predicate.predicates.push(new Predicate(cols[p].field, cols[parseInt(p.toString(), 10)].operator, cols[parseInt(p.toString(), 10)].value, !CheckBoxFilterBase.getCaseValue(cols[parseInt(p.toString(), 10)]), cols[parseInt(p.toString(), 10)].ignoreAccent));\n                }\n            }\n            else {\n                if (cols[p].type === 'date' || cols[p].type === 'datetime' || cols[p].type === 'dateonly') {\n                    if (cols[parseInt(p.toString(), 10)].predicate === 'and' && cols[parseInt(p.toString(), 10)].operator === 'equal') {\n                        predicate = predicate[\"\" + operate](getDatePredicate(cols[parseInt(p.toString(), 10)], cols[parseInt(p.toString(), 10)].type, isExecuteLocal), cols[parseInt(p.toString(), 10)].type, cols[parseInt(p.toString(), 10)].ignoreAccent);\n                    }\n                    else {\n                        predicate = predicate[(cols[parseInt(p.toString(), 10)].predicate)](getDatePredicate(cols[parseInt(p.toString(), 10)], cols[parseInt(p.toString(), 10)].type, isExecuteLocal), cols[parseInt(p.toString(), 10)].type, cols[parseInt(p.toString(), 10)].ignoreAccent);\n                    }\n                }\n                else {\n                    predicate = cols[parseInt(p.toString(), 10)].ejpredicate ?\n                        predicate[cols[parseInt(p.toString(), 10)]\n                            .predicate](cols[parseInt(p.toString(), 10)].ejpredicate) :\n                        predicate[(cols[parseInt(p.toString(), 10)].predicate)](cols[parseInt(p.toString(), 10)].field, cols[parseInt(p.toString(), 10)].operator, cols[parseInt(p.toString(), 10)].value, !CheckBoxFilterBase.getCaseValue(cols[parseInt(p.toString(), 10)]), cols[parseInt(p.toString(), 10)].ignoreAccent);\n                }\n            }\n        }\n        return predicate || null;\n    };\n    CheckBoxFilterBase.getCaseValue = function (filter) {\n        if (isNullOrUndefined(filter.matchCase)) {\n            if (filter.type === 'string' || isNullOrUndefined(filter.type) && typeof (filter.value) === 'string') {\n                return false;\n            }\n            else {\n                return true;\n            }\n        }\n        else {\n            return filter.matchCase;\n        }\n    };\n    CheckBoxFilterBase.updateDateFilter = function (filter) {\n        if ((filter.type === 'date' || filter.type === 'datetime' || filter.type === 'dateonly' || filter.value instanceof Date)) {\n            filter.type = filter.type || 'date';\n        }\n        return filter;\n    };\n    return CheckBoxFilterBase;\n}());\nexport { CheckBoxFilterBase };\n","//! moment.js locale configuration\n//! locale : Bambara [bm]\n//! author : Estelle Comment : https://github.com/estellecomment\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var bm = moment.defineLocale('bm', {\n        months: 'Zanwuyekalo_Fewuruyekalo_Marisikalo_Awirilikalo_Mɛkalo_Zuwɛnkalo_Zuluyekalo_Utikalo_Sɛtanburukalo_ɔkutɔburukalo_Nowanburukalo_Desanburukalo'.split(\n            '_'\n        ),\n        monthsShort: 'Zan_Few_Mar_Awi_Mɛ_Zuw_Zul_Uti_Sɛt_ɔku_Now_Des'.split('_'),\n        weekdays: 'Kari_Ntɛnɛn_Tarata_Araba_Alamisa_Juma_Sibiri'.split('_'),\n        weekdaysShort: 'Kar_Ntɛ_Tar_Ara_Ala_Jum_Sib'.split('_'),\n        weekdaysMin: 'Ka_Nt_Ta_Ar_Al_Ju_Si'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'MMMM [tile] D [san] YYYY',\n            LLL: 'MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n            LLLL: 'dddd MMMM [tile] D [san] YYYY [lɛrɛ] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Bi lɛrɛ] LT',\n            nextDay: '[Sini lɛrɛ] LT',\n            nextWeek: 'dddd [don lɛrɛ] LT',\n            lastDay: '[Kunu lɛrɛ] LT',\n            lastWeek: 'dddd [tɛmɛnen lɛrɛ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s kɔnɔ',\n            past: 'a bɛ %s bɔ',\n            s: 'sanga dama dama',\n            ss: 'sekondi %d',\n            m: 'miniti kelen',\n            mm: 'miniti %d',\n            h: 'lɛrɛ kelen',\n            hh: 'lɛrɛ %d',\n            d: 'tile kelen',\n            dd: 'tile %d',\n            M: 'kalo kelen',\n            MM: 'kalo %d',\n            y: 'san kelen',\n            yy: 'san %d',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return bm;\n\n})));\n","import { remove, addClass } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { doesImplementInterface, setStyleAndAttributes, appendChildren, extendObjWithFn, addStickyColumnPosition } from '../base/util';\nimport { createCheckBox } from '@syncfusion/ej2-buttons';\nimport { foreignKeyData } from '../base/constant';\nimport { CellType } from '../base/enum';\nimport * as literals from '../base/string-literals';\n/**\n * CellRenderer class which responsible for building cell content.\n *\n * @hidden\n */\nvar CellRenderer = /** @class */ (function () {\n    function CellRenderer(parent, locator) {\n        this.localizer = locator.getService('localization');\n        this.formatter = locator.getService('valueFormatter');\n        this.parent = parent;\n        this.element = this.parent.createElement('TD', { className: literals.rowCell, attrs: { role: 'gridcell', tabindex: '-1' } });\n        this.rowChkBox = this.parent.createElement('input', { className: 'e-checkselect', attrs: { 'type': 'checkbox', 'aria-label': this.localizer.getConstant('SelectRow') } });\n    }\n    /**\n     * Function to return the wrapper for the TD content\n     *\n     * @returns {string | Element} returns the string\n     */\n    CellRenderer.prototype.getGui = function () {\n        return '';\n    };\n    /**\n     * Function to format the cell value.\n     *\n     * @param  {Column} column - specifies the column\n     * @param  {Object} value - specifies the value\n     * @param  {Object} data - specifies the data\n     * @returns {string} returns the format\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    CellRenderer.prototype.format = function (column, value, data) {\n        if (!isNullOrUndefined(column.format)) {\n            if (column.type === 'number' && isNaN(parseInt(value, 10))) {\n                value = null;\n            }\n            if (column.type === 'dateonly' && typeof value === 'string' && value) {\n                var arr = value.split(/[^0-9.]/);\n                value = new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10));\n            }\n            value = this.formatter.toView(value, column.getFormatter());\n        }\n        return isNullOrUndefined(value) ? '' : value.toString();\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    CellRenderer.prototype.evaluate = function (node, cell, data, attributes, fData, isEdit) {\n        var _a;\n        var result;\n        if (cell.column.template) {\n            var isReactCompiler = this.parent.isReact && typeof (cell.column.template) !== 'string' && cell.column.template.prototype && !(cell.column.template.prototype).CSPTemplate;\n            var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n                this.parent.parentDetails.parentInstObj.isReact;\n            var literals_1 = ['index'];\n            var dummyData = extendObjWithFn({}, data, (_a = {}, _a[foreignKeyData] = fData, _a.column = cell.column, _a));\n            var templateID = this.parent.element.id + cell.column.uid;\n            var str = 'isStringTemplate';\n            if (isReactCompiler || isReactChild) {\n                var copied = { 'index': attributes[literals_1[0]] };\n                cell.column.getColumnTemplate()(extend(copied, dummyData), this.parent, 'columnTemplate', templateID, this.parent[\"\" + str], null, node);\n            }\n            else {\n                result = cell.column.getColumnTemplate()(extend({ 'index': attributes[literals_1[0]] }, dummyData), this.parent, 'template', templateID, this.parent[\"\" + str], undefined, undefined, this.parent['root']);\n            }\n            if (!isReactCompiler && !isReactChild) {\n                appendChildren(node, result);\n            }\n            this.parent.notify('template-result', { template: result });\n            result = null;\n            node.setAttribute('aria-label', node.innerText + this.localizer.getConstant('TemplateCell') +\n                this.localizer.getConstant('ColumnHeader') + cell.column.headerText);\n            return false;\n        }\n        return true;\n    };\n    /**\n     * Function to invoke the custom formatter available in the column object.\n     *\n     * @param  {Column} column - specifies the column\n     * @param  {Object} value - specifies the value\n     * @param  {Object} data - specifies the data\n     * @returns {Object} returns the object\n     */\n    CellRenderer.prototype.invokeFormatter = function (column, value, data) {\n        if (!isNullOrUndefined(column.formatter)) {\n            if (doesImplementInterface(column.formatter, 'getValue')) {\n                var formatter = column.formatter;\n                value = new formatter().getValue(column, data);\n            }\n            else if (typeof column.formatter === 'function') {\n                value = column.formatter(column, data);\n            }\n            else {\n                value = column.formatter.getValue(column, data);\n            }\n        }\n        return value;\n    };\n    /**\n     * Function to render the cell content based on Column object.\n     *\n     * @param {Cell<Column>} cell - specifies the cell\n     * @param {Object} data - specifies the data\n     * @param {Object} attributes - specifies the attributes\n     * @param {boolean} isExpand - specifies the boolean for expand\n     * @param {boolean} isEdit - specifies the boolean for edit\n     * @returns {Element} returns the element\n     */\n    CellRenderer.prototype.render = function (cell, data, attributes, isExpand, isEdit) {\n        return this.refreshCell(cell, data, attributes, isEdit);\n    };\n    /**\n     * Function to refresh the cell content based on Column object.\n     *\n     * @param {Element} td - specifies the element\n     * @param {Cell<Column>} cell - specifies the cell\n     * @param {Object} data - specifies the data\n     * @param {Object} attributes - specifies the attribute\n     * @returns {void}\n     */\n    CellRenderer.prototype.refreshTD = function (td, cell, data, attributes) {\n        var isEdit = this.parent.editSettings.mode === 'Batch' && td.classList.contains('e-editedbatchcell');\n        if (this.parent.isReact) {\n            var cellIndex = td.cellIndex;\n            var parentRow = td.parentElement;\n            remove(td);\n            var newTD = this.refreshCell(cell, data, attributes, isEdit);\n            this.cloneAttributes(newTD, td);\n            if (parentRow.cells.length !== cellIndex - 1) {\n                parentRow.insertBefore(newTD, parentRow.cells[parseInt(cellIndex.toString(), 10)]);\n            }\n            else {\n                parentRow.appendChild(newTD);\n            }\n        }\n        else {\n            var node = this.refreshCell(cell, data, attributes, isEdit);\n            td.innerHTML = '';\n            var arialabelText = node.getAttribute('aria-label');\n            arialabelText ? td.setAttribute('aria-label', arialabelText) : null;\n            var elements = [].slice.call(node.childNodes);\n            for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n                var elem = elements_1[_i];\n                td.appendChild(elem);\n            }\n        }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    CellRenderer.prototype.cloneAttributes = function (target, source) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        var attrs = source.attributes;\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        var i = attrs.length;\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        var attr;\n        while (i--) {\n            attr = attrs[parseInt(i.toString(), 10)];\n            target.setAttribute(attr.name, attr.value);\n        }\n    };\n    CellRenderer.prototype.refreshCell = function (cell, data, attributes, isEdit) {\n        var _a;\n        var node = this.element.cloneNode();\n        var column = cell.column;\n        var fData;\n        if (cell.isForeignKey) {\n            fData = cell.foreignKeyData[0] || (_a = {}, _a[column.foreignKeyValue] = column.format ? null : '', _a);\n        }\n        //Prepare innerHtml\n        var innerHtml = this.getGui();\n        var value = cell.isForeignKey ? this.getValue(column.foreignKeyValue, fData, column) :\n            this.getValue(column.field, data, column);\n        if ((column.type === 'date' || column.type === 'datetime') && !isNullOrUndefined(value)) {\n            value = new Date(value);\n        }\n        if (column.type === 'dateonly' && !isNullOrUndefined(value) && typeof value === 'string') {\n            var arr = value.split(/[^0-9.]/);\n            value = new Date(parseInt(arr[0], 10), parseInt(arr[1], 10) - 1, parseInt(arr[2], 10));\n        }\n        value = this.format(column, value, data);\n        innerHtml = value.toString();\n        if (column.type === 'boolean' && !column.displayAsCheckBox) {\n            var localeStr = (value !== 'true' && value !== 'false') ? null : value === 'true' ? 'True' : 'False';\n            innerHtml = localeStr ? this.localizer.getConstant(localeStr) : innerHtml;\n        }\n        var fromFormatter = this.invokeFormatter(column, value, data);\n        innerHtml = !isNullOrUndefined(column.formatter) ? isNullOrUndefined(fromFormatter) ? '' : fromFormatter.toString() : innerHtml;\n        if (this.evaluate(node, cell, data, attributes, fData, isEdit) && column.type !== 'checkbox') {\n            this.appendHtml(node, this.parent.sanitize(innerHtml), column.getDomSetter ? column.getDomSetter() : 'innerHTML');\n        }\n        else if (column.type === 'checkbox') {\n            node.classList.add(literals.gridChkBox);\n            if (this.parent.selectionSettings.persistSelection) {\n                value = value === 'true';\n            }\n            else {\n                value = false;\n            }\n            var checkWrap = createCheckBox(this.parent.createElement, false, { checked: value, label: ' ' });\n            if (this.parent.cssClass) {\n                addClass([checkWrap], [this.parent.cssClass]);\n            }\n            this.rowChkBox.id = 'checkbox-' + cell.rowID;\n            checkWrap.insertBefore(this.rowChkBox.cloneNode(), checkWrap.firstChild);\n            node.appendChild(checkWrap);\n        }\n        if (this.parent.checkAllRows === 'Check' && this.parent.enableVirtualization) {\n            cell.isSelected = true;\n        }\n        this.setAttributes(node, cell, attributes);\n        if (column.type === 'boolean' && column.displayAsCheckBox) {\n            var checked = isNaN(parseInt(value.toString(), 10)) ? value === 'true' : parseInt(value.toString(), 10) > 0;\n            var checkWrap = createCheckBox(this.parent.createElement, false, { checked: checked, label: ' ' });\n            node.innerHTML = '';\n            node.classList.add('e-gridchkbox-cell');\n            checkWrap.classList.add('e-checkbox-disabled');\n            if (this.parent.cssClass) {\n                addClass([checkWrap], [this.parent.cssClass]);\n            }\n            node.appendChild(checkWrap);\n        }\n        if (node.classList.contains('e-summarycell') && !data.key) {\n            var uid = node.getAttribute('e-mappinguid');\n            column = this.parent.getColumnByUid(uid);\n            node.setAttribute('aria-label', innerHtml + this.localizer.getConstant('ColumnHeader') + cell.column.headerText);\n        }\n        if (this.parent.isFrozenGrid() && (!data || (data && !data.key))) {\n            addStickyColumnPosition(this.parent, column, node);\n        }\n        return node;\n    };\n    /**\n     * Function to specifies how the result content to be placed in the cell.\n     *\n     * @param {Element} node - specifies the node\n     * @param {string|Element} innerHtml - specifies the innerHTML\n     * @param {string} property - specifies the element\n     * @returns {Element} returns the element\n     */\n    CellRenderer.prototype.appendHtml = function (node, innerHtml, property) {\n        if (property === void 0) { property = 'innerHTML'; }\n        node[\"\" + property] = innerHtml;\n        return node;\n    };\n    /**\n     * @param {HTMLElement} node - specifies the node\n     * @param {cell<Column>} cell - specifies the cell\n     * @param {Object} attributes - specifies the attributes\n     * @returns {void}\n     * @hidden\n     */\n    CellRenderer.prototype.setAttributes = function (node, cell, attributes) {\n        var column = cell.column;\n        this.buildAttributeFromCell(node, cell, column.type === 'checkbox');\n        setStyleAndAttributes(node, attributes);\n        setStyleAndAttributes(node, cell.attributes);\n        if (column.customAttributes) {\n            setStyleAndAttributes(node, column.customAttributes);\n        }\n        if (this.parent.rowRenderingMode === 'Vertical') {\n            setStyleAndAttributes(node, { 'data-cell': column.headerText });\n        }\n        if (column.textAlign) {\n            node.style.textAlign = column.textAlign;\n        }\n        if (column.clipMode === 'Clip' || (!column.clipMode && this.parent.clipMode === 'Clip')) {\n            node.classList.add('e-gridclip');\n        }\n        else if (column.clipMode === 'EllipsisWithTooltip' || (!column.clipMode && this.parent.clipMode === 'EllipsisWithTooltip')\n            && !(this.parent.allowTextWrap && (this.parent.textWrapSettings.wrapMode === 'Content'\n                || this.parent.textWrapSettings.wrapMode === 'Both'))) {\n            if (column.type !== 'checkbox') {\n                node.classList.add('e-ellipsistooltip');\n            }\n        }\n    };\n    CellRenderer.prototype.buildAttributeFromCell = function (node, cell, isCheckBoxType) {\n        var attr = {};\n        var prop = { 'colindex': literals.dataColIndex };\n        var classes = [];\n        if (cell.colSpan) {\n            attr.colSpan = cell.colSpan;\n        }\n        if (cell.rowSpan) {\n            attr.rowSpan = cell.rowSpan;\n        }\n        if (cell.isTemplate) {\n            classes.push('e-templatecell');\n        }\n        if (cell.isSelected) {\n            classes.push.apply(classes, ['e-selectionbackground', 'e-active']);\n            if (isCheckBoxType) {\n                node.querySelector('.e-frame').classList.add('e-check');\n            }\n        }\n        if (cell.isColumnSelected) {\n            classes.push.apply(classes, ['e-columnselection']);\n        }\n        if (cell.cellType === CellType.Header) {\n            attr[prop.colindex] = cell.colIndex;\n            attr[literals.ariaColIndex] = cell.colIndex + 1;\n        }\n        else if (!isNullOrUndefined(cell.index)) {\n            attr[prop.colindex] = cell.index;\n            attr[literals.ariaColIndex] = cell.index + 1;\n        }\n        if (!cell.visible) {\n            classes.push('e-hide');\n        }\n        attr.class = classes;\n        setStyleAndAttributes(node, attr);\n    };\n    CellRenderer.prototype.getValue = function (field, data, column) {\n        return column.valueAccessor(field, data, column);\n    };\n    return CellRenderer;\n}());\nexport { CellRenderer };\n","import { isNullOrUndefined, addClass, extend } from '@syncfusion/ej2-base';\nimport { appendChildren, setStyleAndAttributes, addFixedColumnBorder, addStickyColumnPosition } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * Edit render module is used to render grid edit row.\n *\n * @hidden\n */\nvar InlineEditRender = /** @class */ (function () {\n    /**\n     * Constructor for render module\n     *\n     * @param {IGrid} parent - returns the IGrid\n     */\n    function InlineEditRender(parent) {\n        this.parent = parent;\n    }\n    InlineEditRender.prototype.addNew = function (elements, args) {\n        this.isEdit = false;\n        var tbody;\n        if (this.parent.frozenRows && this.parent.editSettings.newRowPosition === 'Top') {\n            tbody = this.parent.getHeaderTable().querySelector(literals.tbody);\n        }\n        else {\n            tbody = this.parent.getContentTable().querySelector(literals.tbody);\n        }\n        args.row = this.parent.createElement('tr', { className: 'e-row e-addedrow' });\n        if (this.parent.getContentTable().querySelector('.e-emptyrow')) {\n            var emptyRow = this.parent.getContentTable().querySelector('.e-emptyrow');\n            emptyRow.parentNode.removeChild(emptyRow);\n            if (this.parent.frozenRows && this.parent.element.querySelector('.e-frozenrow-empty')) {\n                this.parent.element.querySelector('.e-frozenrow-empty').classList.remove('e-frozenrow-empty');\n            }\n        }\n        if (this.parent.editSettings.newRowPosition === 'Top') {\n            tbody.insertBefore(args.row, tbody.firstChild);\n        }\n        else {\n            tbody.appendChild(args.row);\n        }\n        args.row.appendChild(this.getEditElement(elements, false, undefined, args, true));\n        this.parent.editModule.checkLastRow(args.row, args);\n    };\n    InlineEditRender.prototype.update = function (elements, args) {\n        this.isEdit = true;\n        var tdElement = [].slice.call(args.row.querySelectorAll('td.e-rowcell'));\n        args.row.innerHTML = '';\n        args.row.appendChild(this.getEditElement(elements, true, tdElement, args, true));\n        args.row.classList.add(literals.editedRow);\n        this.parent.editModule.checkLastRow(args.row, args);\n    };\n    // eslint-disable-next-line max-len\n    InlineEditRender.prototype.getEditElement = function (elements, isEdit, tdElement, args, isFrozen) {\n        var gObj = this.parent;\n        var gLen = 0;\n        var isDetail = !isNullOrUndefined(gObj.detailTemplate) || !isNullOrUndefined(gObj.childGrid) ? 1 : 0;\n        if (gObj.allowGrouping) {\n            gLen = gObj.groupSettings.columns.length;\n        }\n        var td = this.parent.createElement('td', {\n            className: 'e-editcell e-normaledit',\n            attrs: {\n                colspan: (gObj.getCurrentVisibleColumns(this.parent.enableColumnVirtualization).length +\n                    this.parent.getIndentCount()).toString()\n            }\n        });\n        var form = args.form =\n            this.parent.createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n        if (this.parent.editSettings.template) {\n            this.appendChildren(form, args.rowData, isFrozen);\n            td.appendChild(form);\n            return td;\n        }\n        var table = this.parent.createElement('table', { className: 'e-table e-inline-edit', attrs: { cellspacing: '0.25', role: 'grid' } });\n        table.appendChild(gObj.getContentTable().querySelector(literals.colGroup).cloneNode(true));\n        var tbody = this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n        var tr = this.parent.createElement('tr');\n        var i = 0;\n        if (isDetail) {\n            tr.insertBefore(this.parent.createElement('td', { className: 'e-detailrowcollapse' }), tr.firstChild);\n        }\n        if (gObj.isRowDragable()) {\n            tr.appendChild(this.parent.createElement('td', { className: 'e-dragindentcell' }));\n        }\n        while (i < gLen) {\n            tr.appendChild(this.parent.createElement('td', { className: 'e-indentcell' }));\n            i++;\n        }\n        var m = 0;\n        i = 0;\n        var inputValue;\n        var cols = args.isCustomFormValidation ? this.parent.columnModel : gObj.getColumns();\n        while ((isEdit && m < tdElement.length && i < cols.length) || i < cols.length) {\n            var span = isEdit ? tdElement[parseInt(m.toString(), 10)].getAttribute('colspan') : null;\n            var col = cols[parseInt(i.toString(), 10)];\n            inputValue = (elements[col.uid]).value;\n            var td_1 = this.parent.createElement('td', {\n                className: literals.rowCell, attrs: { style: 'text-align:' + (col.textAlign ? col.textAlign : ''), 'colspan': span ? span : '' }\n            });\n            if (col.visible) {\n                td_1.appendChild(elements[col.uid]);\n                if (this.parent.rowRenderingMode === 'Vertical') {\n                    setStyleAndAttributes(td_1, { 'data-cell': col.headerText });\n                    if (i === 0) {\n                        td_1.classList.add('e-responsive-editcell');\n                    }\n                }\n                if (col.editType === 'booleanedit') {\n                    td_1.classList.add('e-boolcell');\n                }\n                else if (col.commands || col.commandsTemplate) {\n                    addClass([td_1], 'e-unboundcell');\n                }\n            }\n            else {\n                td_1.classList.add('e-hide');\n            }\n            if (this.parent.isFrozenGrid()) {\n                addStickyColumnPosition(this.parent, col, td_1);\n                if (this.parent.enableColumnVirtualization) {\n                    if (col.freeze === 'Left' && !isNullOrUndefined(col.valueX)) {\n                        td_1.style.left = (col.valueX - this.parent.translateX) + 'px';\n                    }\n                    else if (col.freeze === 'Right' && !isNullOrUndefined(col.valueX)) {\n                        td_1.style.right = (col.valueX + this.parent.translateX) + 'px';\n                    }\n                    else if (col.freeze === 'Fixed') {\n                        td_1.style.left = (this.parent.leftrightColumnWidth('left') - this.parent.translateX) + 'px';\n                        td_1.style.right = (this.parent.leftrightColumnWidth('right') + this.parent.translateX) + 'px';\n                    }\n                }\n            }\n            td_1.setAttribute('aria-label', inputValue + this.parent.localeObj.getConstant('ColumnHeader') + col.headerText);\n            tr.appendChild(td_1);\n            i = span ? i + parseInt(span, 10) : i + 1;\n            m++;\n        }\n        addFixedColumnBorder(tr);\n        tbody.appendChild(tr);\n        table.appendChild(tbody);\n        form.appendChild(table);\n        td.appendChild(form);\n        return td;\n    };\n    InlineEditRender.prototype.removeEventListener = function () {\n        //To destroy the renderer\n    };\n    InlineEditRender.prototype.appendChildren = function (form, data, isFrozen) {\n        var _this = this;\n        var dummyData = extend({}, data, { isAdd: !this.isEdit, isFrozen: isFrozen }, true);\n        var editTemplateID = this.parent.element.id + 'editSettingsTemplate';\n        if (this.parent.isReact && typeof (this.parent.editSettings.template) !== 'string') {\n            this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate', editTemplateID, null, null, form);\n            this.parent.renderTemplates();\n        }\n        else {\n            appendChildren(form, this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate', editTemplateID));\n        }\n        // eslint-disable-next-line\n        var setRules = function () {\n            var cols = _this.parent.getColumns();\n            for (var i = 0; i < cols.length; i++) {\n                if (cols[parseInt(i.toString(), 10)].validationRules) {\n                    _this.parent.editModule.formObj.rules[cols[parseInt(i.toString(), 10)].field] =\n                        cols[parseInt(i.toString(), 10)].validationRules;\n                }\n            }\n        };\n    };\n    return InlineEditRender;\n}());\nexport { InlineEditRender };\n","import { classList } from '@syncfusion/ej2-base';\nimport * as literals from '../base/string-literals';\n/**\n * Edit render module is used to render grid edit row.\n *\n * @hidden\n */\nvar BatchEditRender = /** @class */ (function () {\n    /**\n     * Constructor for render module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     */\n    function BatchEditRender(parent) {\n        this.parent = parent;\n    }\n    BatchEditRender.prototype.update = function (elements, args) {\n        if (this.parent.isReact && args.columnObject && args.columnObject.template) {\n            var parentRow = args.cell.parentElement;\n            var newTd = args.cell.cloneNode(true);\n            parentRow.insertBefore(newTd, args.cell);\n            newTd.focus();\n            args.cell.remove();\n            args.cell = newTd;\n        }\n        args.cell.setAttribute('aria-label', args.cell.innerHTML + this.parent.localeObj.getConstant('ColumnHeader') + args.columnObject.field);\n        args.cell.innerHTML = '';\n        args.cell.appendChild(this.getEditElement(elements, args));\n        args.cell.classList.add('e-editedbatchcell');\n        classList(args.row, [literals.editedRow, 'e-batchrow'], []);\n    };\n    BatchEditRender.prototype.getEditElement = function (elements, args) {\n        var gObj = this.parent;\n        var form = this.parent\n            .createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n        form.appendChild(elements[args.columnObject.uid]);\n        if (args.columnObject.editType === 'booleanedit') {\n            args.cell.classList.add('e-boolcell');\n        }\n        if (!args.columnObject.editType) {\n            args.cell.classList.add('e-inputbox');\n        }\n        return form;\n    };\n    BatchEditRender.prototype.removeEventListener = function () {\n        //To destroy the renderer\n    };\n    return BatchEditRender;\n}());\nexport { BatchEditRender };\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { remove, extend, updateBlazorTemplate, initializeCSPTemplate } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { appendChildren, applyBiggerTheme, addBiggerDialog } from '../base/util';\nimport { ResponsiveDialogRenderer } from './responsive-dialog-renderer';\nimport { ResponsiveDialogAction } from '../base/enum';\nimport * as literals from '../base/string-literals';\n/**\n * Edit render module is used to render grid edit row.\n *\n * @hidden\n */\nvar DialogEditRender = /** @class */ (function () {\n    /**\n     * Constructor for render module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n     */\n    function DialogEditRender(parent, serviceLocator) {\n        this.parent = parent;\n        this.serviceLocator = serviceLocator;\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.on(events.dialogDestroy, this.destroy, this);\n        this.parent.on(events.destroy, this.destroy, this);\n    }\n    DialogEditRender.prototype.setLocaleObj = function () {\n        this.l10n = this.serviceLocator.getService('localization');\n    };\n    DialogEditRender.prototype.addNew = function (elements, args) {\n        this.isEdit = false;\n        this.createDialog(elements, args);\n    };\n    DialogEditRender.prototype.update = function (elements, args) {\n        this.isEdit = true;\n        this.createDialog(elements, args);\n    };\n    DialogEditRender.prototype.createDialogHeader = function (args) {\n        var _this = this;\n        var gObj = this.parent;\n        var header;\n        if (this.parent.enableAdaptiveUI) {\n            var responsiveDlgRenderer = new ResponsiveDialogRenderer(this.parent, this.serviceLocator);\n            responsiveDlgRenderer.action = this.isEdit ? ResponsiveDialogAction.isEdit : ResponsiveDialogAction.isAdd;\n            return responsiveDlgRenderer.renderResponsiveHeader(undefined, args);\n        }\n        else {\n            if (gObj.editSettings.headerTemplate) {\n                header = initializeCSPTemplate(function () {\n                    return _this.getDialogEditTemplateElement('HeaderTemplate', args).outerHTML;\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                });\n            }\n            else if (this.isEdit) {\n                header = this.l10n.getConstant('EditFormTitle') + args.primaryKeyValue[0];\n            }\n            else {\n                header = this.l10n.getConstant('AddFormTitle');\n            }\n        }\n        return header;\n    };\n    DialogEditRender.prototype.createDialog = function (elements, args) {\n        var _this = this;\n        var gObj = this.parent;\n        this.dialog = this.parent.createElement('div', { id: gObj.element.id + '_dialogEdit_wrapper', styles: 'width: auto' });\n        if (gObj.enableAdaptiveUI) {\n            this.dialog.classList.add('e-responsive-dialog');\n        }\n        gObj.element.appendChild(this.dialog);\n        this.setLocaleObj();\n        this.dialog.setAttribute('aria-label', this.l10n.getConstant('DialogEdit'));\n        // let position: PositionDataModel = this.parent.element.getBoundingClientRect().height < 400 ?\n        //     { X: 'center', Y: 'top' } : { X: 'center', Y: 'center' };\n        this.dialogObj = new Dialog(extend({\n            header: this.createDialogHeader(args), isModal: true, visible: true,\n            cssClass: this.parent.cssClass ? 'e-edit-dialog' + ' ' + this.parent.cssClass : 'e-edit-dialog',\n            content: this.getEditElement(elements, args),\n            showCloseIcon: true,\n            allowDragging: true,\n            // position: position,\n            close: this.dialogClose.bind(this),\n            created: this.dialogCreated.bind(this),\n            closeOnEscape: true, width: gObj.editSettings.template ? 'auto' : '330px',\n            target: args.target ? args.target : document.body, animationSettings: { effect: 'None' },\n            footerTemplate: gObj.editSettings.footerTemplate ? initializeCSPTemplate(function () {\n                return _this.getDialogEditTemplateElement('FooterTemplate', args).outerHTML;\n            }) : null,\n            buttons: [{\n                    click: this.btnClick.bind(this),\n                    buttonModel: { content: this.l10n.getConstant('SaveButton'),\n                        cssClass: this.parent.cssClass ? 'e-primary' + ' ' + this.parent.cssClass : 'e-primary',\n                        isPrimary: true }\n                },\n                { click: this.btnClick.bind(this),\n                    buttonModel: {\n                        cssClass: this.parent.cssClass ? 'e-flat' + ' ' + this.parent.cssClass : 'e-flat',\n                        content: this.l10n.getConstant('CancelButton')\n                    } }]\n        }, gObj.editSettings.dialog ? (gObj.editSettings.dialog.params || {}) : {}));\n        args.dialog = this.dialogObj;\n        var isStringTemplate = 'isStringTemplate';\n        this.dialogObj[\"\" + isStringTemplate] = true;\n        this.renderResponsiveDialog();\n        this.dialogObj.appendTo(this.dialog);\n        applyBiggerTheme(this.parent.element, this.dialogObj.element.parentElement);\n        if (gObj.enableAdaptiveUI) {\n            this.dialogObj.show(true);\n        }\n    };\n    DialogEditRender.prototype.dialogCreated = function () {\n        addBiggerDialog(this.parent);\n    };\n    DialogEditRender.prototype.renderResponsiveDialog = function () {\n        var _this = this;\n        if (this.parent.enableAdaptiveUI) {\n            if (this.parent.adaptiveDlgTarget) {\n                this.dialogObj.target = this.parent.adaptiveDlgTarget;\n            }\n            this.dialogObj.buttons = [{}];\n            this.dialogObj.showCloseIcon = true;\n            this.dialogObj.visible = false;\n            this.dialogObj.width = '100%';\n            this.dialogObj.open = function () {\n                _this.dialogObj.element.style.maxHeight = '100%';\n            };\n        }\n    };\n    DialogEditRender.prototype.btnClick = function (e) {\n        if (this.l10n.getConstant('CancelButton').toLowerCase() === e.target.innerText.trim().toLowerCase()) {\n            this.dialogClose();\n        }\n        else {\n            this.parent.endEdit();\n        }\n    };\n    DialogEditRender.prototype.dialogClose = function () {\n        this.parent.closeEdit();\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    DialogEditRender.prototype.destroy = function (args) {\n        var dialogEditTemplates = ['template', 'headerTemplate', 'footerTemplate'];\n        for (var i = 0; i < dialogEditTemplates.length; i++) {\n            if (this.parent.editSettings[dialogEditTemplates[parseInt(i.toString(), 10)]]) {\n                var templateName = dialogEditTemplates[parseInt(i.toString(), 10)].charAt(0).toUpperCase()\n                    + dialogEditTemplates[parseInt(i.toString(), 10)].slice(1);\n                var editTemplateID = this.parent.element.id + 'editSettings' + templateName;\n                updateBlazorTemplate(editTemplateID, templateName, this.parent.editSettings);\n            }\n        }\n        this.parent.notify(events.destroyForm, {});\n        this.parent.isEdit = false;\n        this.parent.notify(events.toolbarRefresh, {});\n        if (this.dialog && !this.dialogObj.isDestroyed) {\n            this.dialogObj.destroy();\n            remove(this.dialog);\n        }\n    };\n    DialogEditRender.prototype.getDialogEditTemplateElement = function (dialogTemp, args) {\n        var tempDiv = this.parent.createElement('div', { className: 'e-dialog' + dialogTemp });\n        var dummyData = extend({}, args.rowData, { isAdd: !this.isEdit }, true);\n        var templateID = this.parent.element.id + 'editSettings' + dialogTemp;\n        appendChildren(tempDiv, (dialogTemp === 'HeaderTemplate' ? this.parent.getEditHeaderTemplate() :\n            this.parent.getEditFooterTemplate())(dummyData, this.parent, 'editSettings' + dialogTemp, templateID));\n        updateBlazorTemplate(templateID, dialogTemp, this.parent.editSettings);\n        return tempDiv;\n    };\n    DialogEditRender.prototype.getEditElement = function (elements, args) {\n        var _this = this;\n        var gObj = this.parent;\n        var div = this.parent.createElement('div', { className: this.isEdit ? literals.editedRow : 'e-insertedrow' });\n        var form = args.form =\n            this.parent.createElement('form', { id: gObj.element.id + 'EditForm', className: 'e-gridform' });\n        if (this.parent.editSettings.template) {\n            var editTemplateID = this.parent.element.id + 'editSettingsTemplate';\n            var dummyData = extend({}, args.rowData, { isAdd: !this.isEdit }, true);\n            var isReactCompiler = this.parent.isReact && typeof (this.parent.editSettings.template) !== 'string';\n            var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n                this.parent.parentDetails.parentInstObj.isReact;\n            if (isReactCompiler || isReactChild) {\n                this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate', editTemplateID, null, null, form);\n                this.parent.renderTemplates();\n            }\n            else {\n                appendChildren(form, this.parent.getEditTemplate()(dummyData, this.parent, 'editSettingsTemplate', editTemplateID));\n            }\n            var setRules = function () {\n                var columns = _this.parent.getColumns();\n                for (var i = 0; i < columns.length; i++) {\n                    if (columns[parseInt(i.toString(), 10)].validationRules) {\n                        _this.parent.editModule.formObj.rules[columns[parseInt(i.toString(), 10)].field] =\n                            columns[parseInt(i.toString(), 10)].validationRules;\n                    }\n                }\n            };\n            updateBlazorTemplate(editTemplateID, 'Template', this.parent.editSettings, true, setRules);\n            div.appendChild(form);\n            return div;\n        }\n        var table = this.parent.createElement('table', { className: literals.table, attrs: { cellspacing: '6px', role: 'grid' } });\n        var tbody = this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n        var cols = gObj.getColumns();\n        for (var i = 0; i < cols.length; i++) {\n            if (this.parent.editModule.checkColumnIsGrouped(cols[parseInt(i.toString(), 10)]) || cols[parseInt(i.toString(), 10)].commands\n                || cols[parseInt(i.toString(), 10)].commandsTemplate || cols[parseInt(i.toString(), 10)].type === 'checkbox') {\n                continue;\n            }\n            var tr = this.parent.createElement('tr', { attrs: { role: 'row' } });\n            var dataCell = this.parent.createElement('td', {\n                className: literals.rowCell, attrs: {\n                    style: 'text-align:' + (this.parent.enableRtl ? 'right' : 'left') + ';width:190px'\n                }\n            });\n            elements[cols[parseInt(i.toString(), 10)].uid].classList.remove('e-input');\n            dataCell.appendChild(elements[cols[parseInt(i.toString(), 10)].uid]);\n            tr.appendChild(dataCell);\n            tbody.appendChild(tr);\n        }\n        table.appendChild(tbody);\n        form.appendChild(table);\n        div.appendChild(form);\n        return div;\n    };\n    DialogEditRender.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.off(events.dialogDestroy, this.destroy);\n        this.parent.off(events.destroy, this.destroy);\n    };\n    return DialogEditRender;\n}());\nexport { DialogEditRender };\n","import { isNullOrUndefined, closest, extend } from '@syncfusion/ej2-base';\nimport { InlineEditRender } from './inline-edit-renderer';\nimport { BatchEditRender } from './batch-edit-renderer';\nimport { DialogEditRender } from './dialog-edit-renderer';\nimport { attributes, classList, select } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { getComplexFieldID, getObject, appendChildren, parentsUntil, extendObjWithFn, padZero } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * Edit render module is used to render grid edit row.\n *\n * @hidden\n */\nvar EditRender = /** @class */ (function () {\n    /**\n     * Constructor for render module\n     *\n     * @param {IGrid} parent -specifies the IGrid\n     * @param {ServiceLocator} serviceLocator - specifies the serviceLocator\n     */\n    function EditRender(parent, serviceLocator) {\n        //Internal variables\n        this.editType = {\n            'Inline': InlineEditRender,\n            'Normal': InlineEditRender, 'Batch': BatchEditRender, 'Dialog': DialogEditRender\n        };\n        this.parent = parent;\n        this.serviceLocator = serviceLocator;\n        this.renderer = new this.editType[this.parent.editSettings.mode](parent, serviceLocator);\n        this.focus = serviceLocator.getService('focus');\n    }\n    EditRender.prototype.addNew = function (args) {\n        this.renderer.addNew(this.getEditElements(args), args);\n        this.convertWidget(args);\n    };\n    EditRender.prototype.update = function (args) {\n        this.renderer.update(this.getEditElements(args), args);\n        var isCustomFormValidation = args.isCustomFormValidation;\n        if (!isCustomFormValidation) {\n            this.parent.notify(events.beforeStartEdit, args);\n            this.convertWidget(args);\n        }\n    };\n    EditRender.prototype.convertWidget = function (args) {\n        var gObj = this.parent;\n        var isFocused;\n        var cell;\n        var value;\n        var form = gObj.editSettings.mode === 'Dialog' ?\n            select('#' + gObj.element.id + '_dialogEdit_wrapper .e-gridform', document) :\n            gObj.element.getElementsByClassName('e-gridform')[0];\n        var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n        for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n            var col = cols_1[_i];\n            if (this.parent.editSettings.template && !isNullOrUndefined(col.field)) {\n                var cellArgs = extend({}, args);\n                cellArgs.element = form.querySelector('[name=' + getComplexFieldID(col.field) + ']');\n                if (typeof col.edit.write === 'string') {\n                    getObject(col.edit.write, window)(cellArgs);\n                }\n                else {\n                    col.edit.write(cellArgs);\n                }\n                continue;\n            }\n            if (this.parent.editModule.checkColumnIsGrouped(col) || col.commands) {\n                continue;\n            }\n            // eslint-disable-next-line\n            value = (col.valueAccessor(col.field, args.rowData, col));\n            cell = form.querySelector('[e-mappinguid=' + col.uid + ']');\n            var temp = col.edit.write;\n            if (!isNullOrUndefined(cell)) {\n                if (typeof temp === 'string') {\n                    temp = getObject(temp, window);\n                    temp({\n                        rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n                        foreignKeyData: col.isForeignColumn() && getObject(col.field, args.foreignKeyData)\n                    });\n                }\n                else {\n                    col.edit.write({\n                        rowData: args.rowData, element: cell, column: col, requestType: args.requestType, row: args.row,\n                        foreignKeyData: col.isForeignColumn() && getObject(col.field, args.foreignKeyData)\n                    });\n                }\n                if (!isFocused && !cell.getAttribute('disabled') && !parentsUntil(cell, 'e-checkbox-disabled')) {\n                    this.focusElement(cell, args.type);\n                    isFocused = true;\n                }\n            }\n        }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    EditRender.prototype.focusElement = function (elem, type) {\n        var chkBox = this.parent.element.querySelector('.e-edit-checkselect');\n        if (!isNullOrUndefined(chkBox) && chkBox.nextElementSibling) {\n            chkBox.nextElementSibling.classList.add('e-focus');\n        }\n        if (this.parent.editSettings.mode === 'Batch') {\n            this.focus.onClick({ target: closest(elem, 'td') }, true);\n        }\n        else {\n            var isFocus = (this.parent.enableVirtualization || this.parent.enableColumnVirtualization) && this.parent.editSettings.mode === 'Normal' ? false : true;\n            if (isFocus || ((this.parent.enableVirtualization || this.parent.enableColumnVirtualization) && this.parent.editSettings.newRowPosition === 'Bottom'\n                && parentsUntil(elem, literals.addedRow))) {\n                elem.focus();\n            }\n            else {\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                elem.focus({ preventScroll: true });\n            }\n        }\n        if (elem.classList.contains('e-defaultcell')) {\n            elem.setSelectionRange(elem.value.length, elem.value.length);\n        }\n    };\n    EditRender.prototype.getEditElements = function (args) {\n        var gObj = this.parent;\n        var elements = {};\n        var cols = gObj.editSettings.mode !== 'Batch' ? gObj.getColumns() : [gObj.getColumnByField(args.columnName)];\n        if (args.isCustomFormValidation) {\n            cols = this.parent.columnModel;\n        }\n        if (this.parent.editSettings.template) {\n            return {};\n        }\n        for (var i = 0, len = cols.length; i < len; i++) {\n            var col = cols[parseInt(i.toString(), 10)];\n            if (col.commands || col.commandsTemplate) {\n                var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n                var model = new RowModelGenerator(this.parent);\n                var cellRenderer = cellRendererFact.getCellRenderer(CellType.CommandColumn);\n                var cells = model.generateRows(args.rowData)[0].cells;\n                var cell = cells.filter(function (cell) { return cell.rowID; });\n                var td = cellRenderer.render(cell[parseInt(i.toString(), 10)], args.rowData, { 'index': args.row ? args.row.getAttribute(literals.dataRowIndex) : 0 }, this.parent.enableVirtualization);\n                var div = td.firstElementChild;\n                div.setAttribute('textAlign', td.getAttribute('textAlign'));\n                elements[col.uid] = div;\n                continue;\n            }\n            if (col.type === 'dateonly' && args.rowData[col.field] instanceof Date) {\n                var cellValue = args.rowData[col.field];\n                args.rowData[col.field] = cellValue.getFullYear() + '-' + padZero(cellValue.getMonth() + 1) + '-' + padZero(cellValue.getDate());\n            }\n            var value = (col.valueAccessor(col.field, args.rowData, col));\n            var tArgs = { column: col, value: value, type: args.requestType, data: args.rowData };\n            var temp = col.edit.create;\n            var input = void 0;\n            if (col.editTemplate) {\n                input = this.parent.createElement('span', { attrs: { 'e-mappinguid': col.uid } });\n                var tempID = this.parent.element.id + col.uid + 'editTemplate';\n                var tempData = extendObjWithFn({}, args.rowData, { column: col });\n                var isReactCompiler = this.parent.isReact && typeof (col.editTemplate) !== 'string';\n                var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n                    this.parent.parentDetails.parentInstObj.isReact;\n                if (isReactCompiler || isReactChild) {\n                    col.getEditTemplate()(extend({ 'index': args.rowIndex }, tempData), this.parent, 'editTemplate', tempID, null, null, input);\n                    this.parent.renderTemplates();\n                }\n                else {\n                    var template = col.getEditTemplate()(extend({ 'index': args.rowIndex }, tempData), this.parent, 'editTemplate', tempID);\n                    appendChildren(input, template);\n                }\n            }\n            else {\n                if (typeof temp === 'string') {\n                    temp = getObject(temp, window);\n                    input = temp(tArgs);\n                }\n                else {\n                    input = col.edit.create(tArgs);\n                }\n                if (typeof input === 'string') {\n                    var div = this.parent.createElement('div');\n                    div.innerHTML = input;\n                    input = div.firstChild;\n                }\n                var isInput = input.tagName !== 'input' && input.querySelectorAll('input').length;\n                var complexFieldName = getComplexFieldID(col.field);\n                attributes(isInput ? input.querySelector('input') : input, {\n                    name: complexFieldName, 'e-mappinguid': col.uid,\n                    id: gObj.element.id + complexFieldName\n                });\n                classList(input, ['e-input', 'e-field'], []);\n                if (col.textAlign === 'Right') {\n                    input.classList.add('e-ralign');\n                }\n                if ((col.isPrimaryKey || col.isIdentity) && args.requestType === 'beginEdit' ||\n                    (col.isIdentity && args.requestType === 'add')) { // already disabled in cell plugins\n                    input.setAttribute('disabled', '');\n                }\n            }\n            elements[col.uid] = input;\n        }\n        return elements;\n    };\n    EditRender.prototype.destroy = function () {\n        this.renderer.removeEventListener();\n    };\n    return EditRender;\n}());\nexport { EditRender };\n","import { createEditElement } from '../base/util';\n/**\n * `DropDownEditCell` is used to handle dropdown cell type editing.\n *\n * @hidden\n */\nvar EditCellBase = /** @class */ (function () {\n    function EditCellBase(parent) {\n        this.parent = parent;\n    }\n    EditCellBase.prototype.create = function (args) {\n        return createEditElement(this.parent, args.column, 'e-field', { type: 'text' });\n    };\n    EditCellBase.prototype.read = function (element) {\n        return element.ej2_instances[0].value;\n    };\n    EditCellBase.prototype.destroy = function () {\n        if (this.obj && !this.obj.isDestroyed) {\n            if (this.removeEventHandler) {\n                this.removeEventHandler();\n            }\n            this.obj.destroy();\n        }\n    };\n    return EditCellBase;\n}());\nexport { EditCellBase };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { CheckBox } from '@syncfusion/ej2-buttons';\nimport { extend } from '@syncfusion/ej2-base';\nimport { isEditable, addRemoveActiveClasses, createEditElement, getObject } from '../base/util';\nimport * as literals from '../base/string-literals';\nimport { EditCellBase } from './edit-cell-base';\n/**\n * `BooleanEditCell` is used to handle boolean cell type editing.\n *\n * @hidden\n */\nvar BooleanEditCell = /** @class */ (function (_super) {\n    __extends(BooleanEditCell, _super);\n    function BooleanEditCell() {\n        var _this = _super !== null && _super.apply(this, arguments) || this;\n        _this.activeClasses = ['e-selectionbackground', 'e-active'];\n        return _this;\n    }\n    BooleanEditCell.prototype.create = function (args) {\n        var col = args.column;\n        var classNames = 'e-field e-boolcell';\n        if (col.type === 'checkbox') {\n            classNames = 'e-field e-boolcell e-edit-checkselect';\n        }\n        this.removeEventHandler = this.removeEventListener;\n        return createEditElement(this.parent, args.column, classNames, { type: 'checkbox', value: args.value });\n    };\n    BooleanEditCell.prototype.read = function (element) {\n        return element.checked;\n    };\n    BooleanEditCell.prototype.write = function (args) {\n        var selectChkBox;\n        var chkState;\n        if (!isNullOrUndefined(args.row)) {\n            selectChkBox = args.row.querySelector('.e-edit-checkselect');\n        }\n        if (getObject(args.column.field, args.rowData)) {\n            chkState = JSON.parse(getObject(args.column.field, args.rowData).toString().toLowerCase());\n        }\n        if (!isNullOrUndefined(selectChkBox) && args.column.type === 'checkbox') {\n            this.editType = this.parent.editSettings.mode;\n            this.editRow = args.row;\n            if (args.requestType !== 'add') {\n                var row = this.parent.getRowObjectFromUID(args.row.getAttribute('data-uid'));\n                chkState = row ? row.isSelected : false;\n            }\n            addRemoveActiveClasses.apply(void 0, [[].slice.call(args.row.getElementsByClassName(literals.rowCell)), chkState].concat(this.activeClasses));\n        }\n        this.obj = new CheckBox(extend({\n            label: this.parent.editSettings.mode !== 'Dialog' ? ' ' : args.column.headerText,\n            checked: chkState,\n            disabled: !isEditable(args.column, args.requestType, args.element), enableRtl: this.parent.enableRtl,\n            cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n        }, args.column.edit.params));\n        this.addEventListener();\n        this.obj.appendTo(args.element);\n    };\n    BooleanEditCell.prototype.addEventListener = function () {\n        this.cbChange = this.checkBoxChange.bind(this);\n        this.obj.addEventListener(literals.change, this.cbChange);\n    };\n    BooleanEditCell.prototype.removeEventListener = function () {\n        if (this.obj.isDestroyed) {\n            return;\n        }\n        this.obj.removeEventListener(literals.change, this.cbChange);\n    };\n    BooleanEditCell.prototype.checkBoxChange = function (args) {\n        if (this.editRow && this.editType !== 'Dialog') {\n            var add = false;\n            if (!args.checked) {\n                this.editRow.removeAttribute('aria-selected');\n            }\n            else {\n                add = true;\n                this.editRow.setAttribute('aria-selected', add.toString());\n            }\n            addRemoveActiveClasses.apply(void 0, [[].slice.call(this.editRow.getElementsByClassName(literals.rowCell)), add].concat(this.activeClasses));\n        }\n    };\n    return BooleanEditCell;\n}(EditCellBase));\nexport { BooleanEditCell };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { extend, isNullOrUndefined, select } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\nimport { Query, DataManager, DataUtil, Predicate } from '@syncfusion/ej2-data';\nimport { isEditable, getComplexFieldID, getObject } from '../base/util';\nimport { parentsUntil } from '../base/util';\nimport { EditCellBase } from './edit-cell-base';\nimport * as literals from '../base/string-literals';\nimport * as events from '../base/constant';\n/**\n * `DropDownEditCell` is used to handle dropdown cell type editing.\n *\n * @hidden\n */\nvar DropDownEditCell = /** @class */ (function (_super) {\n    __extends(DropDownEditCell, _super);\n    function DropDownEditCell(parent) {\n        var _this = \n        //constructor\n        _super.call(this) || this;\n        _this.parent = parent;\n        _this.flag = false;\n        _this.removeEventHandler = _this.removeEventListener;\n        return _this;\n    }\n    DropDownEditCell.prototype.write = function (args) {\n        var isInline = this.parent.editSettings.mode !== 'Dialog';\n        this.column = args.column;\n        var pred = new Predicate(args.column.field, 'notequal', null, true, false);\n        var params = {};\n        if (args.column.edit.params) {\n            var keys = Object.keys(args.column.edit.params);\n            for (var i = 0; i < keys.length; i++) {\n                params[keys[parseInt(i.toString(), 10)]] = keys[parseInt(i.toString(), 10)] === 'query' ?\n                    args.column.edit.params[keys[parseInt(i.toString(), 10)]].clone() :\n                    args.column.edit.params[keys[parseInt(i.toString(), 10)]];\n            }\n        }\n        this.obj = new DropDownList(extend({\n            dataSource: this.parent.dataSource instanceof DataManager ?\n                this.parent.dataSource : new DataManager(this.parent.dataSource),\n            query: new Query().where(pred).select(args.column.field), enabled: isEditable(args.column, args.requestType, args.element),\n            fields: { value: args.column.field },\n            value: getObject(args.column.field, args.rowData),\n            enableRtl: this.parent.enableRtl,\n            placeholder: isInline ? '' : args.column.headerText, popupHeight: '200px',\n            floatLabelType: isInline ? 'Never' : 'Always',\n            sortOrder: 'Ascending',\n            cssClass: this.parent.cssClass ? this.parent.cssClass : null,\n            close: this.dropDownClose.bind(this)\n        }, params));\n        if (this.parent.enableVirtualization) {\n            if (params.dataSource) {\n                this.obj.dataSource = params.dataSource;\n            }\n            else {\n                this.obj.dataSource = args.column.isForeignColumn() ? [args.foreignKeyData[0]] : [args.rowData];\n            }\n        }\n        this.addEventListener();\n        this.obj.query.params = this.parent.query.params;\n        this.obj.appendTo(args.element);\n        /* tslint:disable-next-line:no-any */\n        args.element.setAttribute('name', getComplexFieldID(args.column.field));\n    };\n    DropDownEditCell.prototype.dropDownClose = function (args) {\n        if (args.event && args.event.action === 'escape') {\n            this.parent.editModule.editCellDialogClose = true;\n        }\n    };\n    DropDownEditCell.prototype.addEventListener = function () {\n        this.ddCreated = this.dropdownCreated.bind(this);\n        this.ddOpen = this.dropDownOpen.bind(this);\n        this.ddBeforeOpen = this.dropdownBeforeOpen.bind(this);\n        this.ddComplete = this.ddActionComplete.bind(this);\n        this.obj.addEventListener(literals.create, this.ddCreated);\n        this.obj.addEventListener(literals['open'], this.ddOpen);\n        this.obj.addEventListener(literals.beforeOpen, this.ddBeforeOpen);\n        this.obj.addEventListener(events.actionComplete, this.ddComplete);\n    };\n    DropDownEditCell.prototype.removeEventListener = function () {\n        if (this.obj.isDestroyed) {\n            return;\n        }\n        this.obj.removeEventListener(literals.create, this.ddCreated);\n        this.obj.removeEventListener(literals['open'], this.ddOpen);\n        this.obj.removeEventListener(literals.beforeOpen, this.ddBeforeOpen);\n        this.obj.removeEventListener(events.actionComplete, this.ddComplete);\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    DropDownEditCell.prototype.dropdownCreated = function (e) {\n        this.flag = true;\n    };\n    DropDownEditCell.prototype.dropdownBeforeOpen = function () {\n        if (this.parent.enableVirtualization) {\n            if (this.column.edit.params && this.column.edit.params.dataSource) {\n                this.obj.dataSource = this.column.edit.params.dataSource;\n            }\n            else {\n                this.obj.dataSource = !this.column.isForeignColumn() ? (this.parent.dataSource instanceof DataManager ?\n                    this.parent.dataSource : new DataManager(this.parent.dataSource))\n                    : this.column.dataSource instanceof DataManager ?\n                        this.column.dataSource : new DataManager(this.column.dataSource);\n            }\n        }\n    };\n    DropDownEditCell.prototype.ddActionComplete = function (e) {\n        e.result = DataUtil.distinct(e.result, this.obj.fields.value, true);\n        if (this.flag && this.column.dataSource && !(this.column.edit.params &&\n            this.column.edit.params.ddEditedData)) {\n            if ('result' in this.column.dataSource) {\n                this.column.dataSource.result = e.result;\n            }\n            else if (this.column.dataSource instanceof DataManager) {\n                this.column.dataSource.dataSource.json = e.result;\n            }\n        }\n        this.flag = false;\n    };\n    DropDownEditCell.prototype.dropDownOpen = function (args) {\n        var dlgElement = parentsUntil(this.obj.element, 'e-dialog');\n        if (this.parent.editSettings.mode === 'Dialog' && !isNullOrUndefined(dlgElement)) {\n            var dlgObj = select('#' + dlgElement.id, document).ej2_instances[0];\n            args.popup.element.style.zIndex = (dlgObj.zIndex + 1).toString();\n        }\n    };\n    return DropDownEditCell;\n}(EditCellBase));\nexport { DropDownEditCell };\n","import { extend, Internationalization } from '@syncfusion/ej2-base';\nimport { NumericTextBox } from '@syncfusion/ej2-inputs';\nimport { isEditable, getComplexFieldID, getObject, createEditElement } from '../base/util';\n/**\n * `NumericEditCell` is used to handle numeric cell type editing.\n *\n * @hidden\n */\nvar NumericEditCell = /** @class */ (function () {\n    function NumericEditCell(parent) {\n        this.parent = parent;\n    }\n    NumericEditCell.prototype.keyEventHandler = function (args) {\n        if (args.keyCode === 13 || args.keyCode === 9) {\n            var evt = document.createEvent('HTMLEvents');\n            evt.initEvent('change', false, true);\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            this.dispatchEvent(evt);\n        }\n    };\n    NumericEditCell.prototype.create = function (args) {\n        this.instances = new Internationalization(this.parent.locale);\n        return createEditElement(this.parent, args.column, 'e-field', {});\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    NumericEditCell.prototype.read = function (element) {\n        return this.obj.value;\n    };\n    NumericEditCell.prototype.write = function (args) {\n        var col = args.column;\n        var isInline = this.parent.editSettings.mode !== 'Dialog';\n        this.obj = new NumericTextBox(extend({\n            value: parseFloat(getObject(args.column.field, args.rowData)),\n            enableRtl: this.parent.enableRtl,\n            placeholder: isInline ? '' : args.column.headerText,\n            enabled: isEditable(args.column, args.requestType, args.element),\n            floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n            locale: this.parent.locale,\n            cssClass: this.parent.cssClass ? this.parent.cssClass : null\n        }, col.edit.params));\n        args.element.setAttribute('name', getComplexFieldID(args.column.field));\n        this.obj.appendTo(args.element);\n        this.obj.element.addEventListener('keydown', this.keyEventHandler);\n    };\n    NumericEditCell.prototype.destroy = function () {\n        if (this.obj && !this.obj.isDestroyed) {\n            this.obj.element.removeEventListener('keydown', this.keyEventHandler);\n            this.obj.destroy();\n        }\n    };\n    return NumericEditCell;\n}());\nexport { NumericEditCell };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { isEditable, createEditElement } from '../base/util';\nimport { TextBox } from '@syncfusion/ej2-inputs';\nimport { EditCellBase } from './edit-cell-base';\n/**\n * `DefaultEditCell` is used to handle default cell type editing.\n *\n * @hidden\n */\nvar DefaultEditCell = /** @class */ (function (_super) {\n    __extends(DefaultEditCell, _super);\n    function DefaultEditCell() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    DefaultEditCell.prototype.create = function (args) {\n        var attr = {\n            type: 'text', value: !isNullOrUndefined(args.value) ? args.value : '', style: 'text-align:' + args.column.textAlign\n        };\n        return createEditElement(this.parent, args.column, 'e-field e-input e-defaultcell', attr);\n    };\n    DefaultEditCell.prototype.read = function (element) {\n        return element.value;\n    };\n    DefaultEditCell.prototype.write = function (args) {\n        var col = args.column;\n        var isInline = this.parent.editSettings.mode !== 'Dialog';\n        this.obj = new TextBox(extend({\n            element: args.element, floatLabelType: this.parent.editSettings.mode !== 'Dialog' ? 'Never' : 'Always',\n            enableRtl: this.parent.enableRtl, enabled: isEditable(args.column, args.requestType, args.element),\n            placeholder: isInline ? '' : args.column.headerText,\n            cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n        }, col.edit.params));\n        this.obj.appendTo(args.element);\n        if (this.parent.editSettings.mode === 'Batch') {\n            this.obj.element.addEventListener('keydown', this.keyEventHandler);\n        }\n    };\n    DefaultEditCell.prototype.keyEventHandler = function (args) {\n        if (args.key === 'Enter' || args.key === 'Tab') {\n            var evt = new Event('change', { bubbles: false, cancelable: true });\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            this.dispatchEvent(evt);\n        }\n    };\n    DefaultEditCell.prototype.destroy = function () {\n        if (this.obj && !this.obj.isDestroyed) {\n            this.obj.element.removeEventListener('keydown', this.keyEventHandler);\n            this.obj.destroy();\n        }\n    };\n    return DefaultEditCell;\n}(EditCellBase));\nexport { DefaultEditCell };\n","import { extend, select } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { parentsUntil, isGroupAdaptive, refreshForeignData, getObject } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { addRemoveEventListener, addFixedColumnBorder } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * `NormalEdit` module is used to handle normal('inline, dialog, external') editing actions.\n *\n * @hidden\n */\nvar NormalEdit = /** @class */ (function () {\n    function NormalEdit(parent, serviceLocator, renderer) {\n        this.args = {};\n        this.currentVirtualData = {};\n        this.parent = parent;\n        this.renderer = renderer;\n        this.serviceLocator = serviceLocator;\n        this.addEventListener();\n    }\n    NormalEdit.prototype.clickHandler = function (e) {\n        var target = e.target;\n        var gObj = this.parent;\n        if ((((parentsUntil(target, literals.gridContent) &&\n            parentsUntil(parentsUntil(target, literals.gridContent), 'e-grid').id === gObj.element.id)) || (gObj.frozenRows\n            && parentsUntil(target, literals.headerContent))) && !parentsUntil(target, 'e-unboundcelldiv')) {\n            this.rowIndex = parentsUntil(target, literals.rowCell)\n                ? parseInt(target.parentElement.getAttribute(literals.dataRowIndex), 10) : -1;\n            if (gObj.isEdit) {\n                gObj.editModule.endEdit();\n            }\n        }\n    };\n    NormalEdit.prototype.dblClickHandler = function (e) {\n        if (parentsUntil(e.target, literals.rowCell) && this.parent.editSettings.allowEditOnDblClick) {\n            this.parent.editModule.startEdit(parentsUntil(e.target, literals.row));\n        }\n    };\n    /**\n     * The function used to trigger editComplete\n     *\n     * @param {NotifyArgs} e - specifies the NotifyArgs\n     * @returns {void}\n     * @hidden\n     */\n    NormalEdit.prototype.editComplete = function (e) {\n        this.parent.isEdit = false;\n        var action = 'action';\n        switch (e.requestType) {\n            case 'save':\n                if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n                    || (!this.parent.isPersistSelection)) {\n                    if (e[\"\" + action] !== 'edit') {\n                        this.parent.selectRow(e['index']);\n                    }\n                }\n                this.parent.trigger(events.actionComplete, extend(e, {\n                    requestType: 'save',\n                    type: events.actionComplete\n                }));\n                break;\n            case 'delete':\n                this.parent.trigger(events.actionComplete, extend(e, {\n                    requestType: 'delete',\n                    type: events.actionComplete\n                }));\n                if (!this.parent.isCheckBoxSelection) {\n                    this.parent.selectRow(this.editRowIndex);\n                }\n                break;\n        }\n    };\n    NormalEdit.prototype.getEditArgs = function (editedData, rowObj, isScroll) {\n        var primaryKeys = this.parent.getPrimaryKeyFieldNames();\n        var primaryKeyValues = [];\n        for (var i = 0; i < primaryKeys.length; i++) {\n            primaryKeyValues.push(getObject(primaryKeys[parseInt(i.toString(), 10)], editedData));\n        }\n        var args = {\n            primaryKey: primaryKeys, primaryKeyValue: primaryKeyValues, requestType: 'beginEdit',\n            rowData: editedData, rowIndex: this.rowIndex, type: 'edit', cancel: false,\n            foreignKeyData: rowObj && rowObj.foreignKeyData, target: undefined, isScroll: isScroll\n        };\n        return args;\n    };\n    NormalEdit.prototype.startEdit = function (tr) {\n        var _this = this;\n        var gObj = this.parent;\n        this.rowIndex = this.editRowIndex = parseInt(tr.getAttribute(literals.dataRowIndex), 10);\n        if (gObj.enableVirtualization || gObj.enableColumnVirtualization || gObj.enableInfiniteScrolling) {\n            var selector = '.e-row[data-rowindex=\"' + this.rowIndex + '\"]';\n            var virtualRow = this.parent.element.querySelector(selector);\n            if (!virtualRow) {\n                return;\n            }\n        }\n        var e = { data: undefined, index: this.rowIndex, isScroll: false };\n        this.parent.notify(events.virtualScrollEditActionBegin, e);\n        if (isGroupAdaptive(gObj)) {\n            var rObj = gObj.getRowObjectFromUID(tr.getAttribute('data-uid'));\n            this.previousData = rObj.data;\n        }\n        else if (this.parent.enableVirtualization || this.parent.enableColumnVirtualization ||\n            (this.parent.enableInfiniteScrolling && !this.previousData)) {\n            this.previousData = e.data;\n        }\n        else if (!this.parent.enableVirtualization) {\n            this.previousData = extend({}, {}, gObj.getCurrentViewRecords()[this.rowIndex], true);\n        }\n        var editedData = extend({}, {}, e.data || this.previousData, true);\n        this.uid = tr.getAttribute('data-uid');\n        var rowObj = gObj.getRowObjectFromUID(this.uid);\n        var args = this.getEditArgs(editedData, rowObj, e.isScroll);\n        args.row = tr;\n        if (!args.isScroll) {\n            this.parent.notify(events.createVirtualValidationForm, { uid: this.uid, prevData: this.previousData, argsCreator: this.getEditArgs.bind(this), renderer: this.renderer });\n            gObj.trigger(events.beginEdit, args, function (begineditargs) {\n                begineditargs.type = 'actionBegin';\n                gObj.trigger(events.actionBegin, begineditargs, function (editargs) {\n                    if (!editargs.cancel) {\n                        _this.inlineEditHandler(editargs, tr);\n                    }\n                });\n            });\n        }\n        else {\n            this.inlineEditHandler(args, tr);\n        }\n    };\n    NormalEdit.prototype.inlineEditHandler = function (editargs, tr) {\n        var gObj = this.parent;\n        gObj.isEdit = true;\n        editargs.row = editargs.row ? editargs.row : tr;\n        if (gObj.editSettings.mode !== 'Dialog') {\n            gObj.clearSelection();\n        }\n        if (gObj.editSettings.mode === 'Dialog' && gObj.selectionModule) {\n            gObj.selectionModule.preventFocus = true;\n            editargs.row.classList.add('e-dlgeditrow');\n        }\n        this.renderer.update(editargs);\n        this.uid = tr.getAttribute('data-uid');\n        gObj.editModule.applyFormValidation();\n        editargs.type = 'actionComplete';\n        gObj.trigger(events.actionComplete, editargs);\n        if (gObj.editSettings.template) {\n            gObj.editModule.applyFormValidation(undefined, editargs.form.ej2_instances[0].rules);\n        }\n        this.args = editargs;\n        if (this.parent.allowTextWrap) {\n            this.parent.notify(events.freezeRender, { case: 'textwrap' });\n        }\n    };\n    NormalEdit.prototype.updateRow = function (index, data) {\n        var _this = this;\n        var gObj = this.parent;\n        this.editRowIndex = index;\n        var args = {\n            requestType: 'save', action: 'edit', type: events.actionBegin, data: data, cancel: false,\n            previousData: gObj.getCurrentViewRecords()[parseInt(index.toString(), 10)],\n            row: gObj.getRowByIndex(index)\n        };\n        gObj.showSpinner();\n        if (gObj.enableInfiniteScrolling) {\n            this.uid = args.row.getAttribute('data-uid');\n            var index_1 = parseInt(args.row.getAttribute('data-rowindex'), 10);\n            this.parent.notify(events.refreshInfiniteEditrowindex, { index: index_1 });\n        }\n        gObj.notify(events.updateData, args);\n        if (args.promise) {\n            args.promise.then(function () { return gObj.refresh(); }).catch(function (e) { return _this.edFail(e); });\n        }\n        else {\n            if (!gObj.enableInfiniteScrolling) {\n                gObj.refresh();\n            }\n        }\n    };\n    NormalEdit.prototype.editFormValidate = function () {\n        var gObj = this.parent;\n        var isValid = gObj.editModule.editFormValidate();\n        var validationArgs = {\n            prevData: this.previousData, isValid: true, editIdx: this.editRowIndex, addIdx: this.addedRowIndex\n        };\n        gObj.notify(events.validateVirtualForm, validationArgs);\n        return (isValid && validationArgs.isValid);\n    };\n    NormalEdit.prototype.endEdit = function () {\n        var _this = this;\n        var gObj = this.parent;\n        if (!this.parent.isEdit || !this.editFormValidate()) {\n            return;\n        }\n        var editedData = extend({}, {}, this.previousData, true);\n        var args = extend(this.args, {\n            requestType: 'save', type: events.actionBegin, data: editedData, cancel: false,\n            previousData: this.previousData, selectedRow: gObj.selectedRowIndex, foreignKeyData: {}\n        });\n        var isDlg = gObj.editSettings.mode === 'Dialog';\n        var dlgWrapper = select('#' + gObj.element.id + '_dialogEdit_wrapper', document);\n        var dlgForm = isDlg ? dlgWrapper.querySelector('.e-gridform') : gObj.element.getElementsByClassName('e-gridform')[0];\n        var data = {\n            virtualData: extend({}, {}, this.previousData, true), isAdd: false, isScroll: false, endEdit: true\n        };\n        this.parent.notify(events.getVirtualData, data);\n        if ((this.parent.enableVirtualization || this.parent.enableColumnVirtualization || this.parent.enableInfiniteScrolling)\n            && this.parent.editSettings.mode === 'Normal' && Object.keys(data.virtualData).length) {\n            if (this.parent.isEdit) {\n                this.currentVirtualData = editedData = args.data = data.virtualData;\n            }\n        }\n        else {\n            editedData = gObj.editModule.getCurrentEditedData(dlgForm, editedData);\n        }\n        var eleLength = [].slice.call(gObj.element.getElementsByClassName(literals.editedRow)).length;\n        if (!data.isAdd && Object.keys(this.currentVirtualData).length && !eleLength) {\n            eleLength = 1;\n        }\n        if (isDlg ? dlgWrapper.getElementsByClassName(literals.editedRow).length : eleLength) {\n            args.action = 'edit';\n            gObj.trigger(events.actionBegin, args, function (endEditArgs) {\n                if (endEditArgs.cancel) {\n                    return;\n                }\n                if (_this.parent.loadingIndicator.indicatorType === 'Spinner') {\n                    gObj.showSpinner();\n                }\n                if (_this.parent.loadingIndicator.indicatorType === 'Shimmer') {\n                    _this.parent.showMaskRow();\n                }\n                gObj.notify(events.updateData, endEditArgs);\n            });\n        }\n        else {\n            args.action = 'add';\n            args.selectedRow = 0;\n            args.index = this.addedRowIndex;\n            gObj.notify(events.virtualScrollEditSuccess, {});\n            gObj.notify(events.modelChanged, args);\n            this.addedRowIndex = null;\n            if (args.cancel) {\n                return;\n            }\n        }\n    };\n    NormalEdit.prototype.destroyElements = function () {\n        var gObj = this.parent;\n        gObj.editModule.destroyWidgets();\n        gObj.editModule.destroyForm();\n        this.parent.notify(events.dialogDestroy, {});\n    };\n    NormalEdit.prototype.editHandler = function (args) {\n        var _this = this;\n        if (args.promise) {\n            args.promise.then(function (e) { return _this.edSucc(e, args); }).catch(function (e) { return _this.edFail(e); });\n        }\n        else {\n            this.editSuccess(args.data, args);\n        }\n    };\n    NormalEdit.prototype.edSucc = function (e, args) {\n        this.editSuccess(e, args);\n    };\n    NormalEdit.prototype.edFail = function (e) {\n        this.editFailure(e);\n    };\n    NormalEdit.prototype.updateCurrentViewData = function (data) {\n        if (!this.parent.enableVirtualization && !this.parent.enableInfiniteScrolling) {\n            this.parent.getCurrentViewRecords()[this.editRowIndex] = data;\n        }\n    };\n    NormalEdit.prototype.requestSuccess = function (args) {\n        if (this.parent.editModule.formObj && !this.parent.editModule.formObj.isDestroyed) {\n            this.destroyElements();\n            this.stopEditStatus();\n            if (this.parent.editSettings.mode === 'Dialog' && args.action !== 'add' &&\n                this.parent.selectionModule) {\n                this.parent.element.querySelector('.e-dlgeditrow').classList.remove('e-dlgeditrow');\n            }\n        }\n    };\n    NormalEdit.prototype.editSuccess = function (e, args) {\n        if (!isNullOrUndefined(e) && !(e instanceof Array)) {\n            var rowData = 'rowData';\n            args.data = extend({}, extend({}, args[\"\" + rowData], args.data), e);\n        }\n        this.requestSuccess(args);\n        this.parent.trigger(events.beforeDataBound, args);\n        args.type = events.actionComplete;\n        this.parent.isEdit = false;\n        this.refreshRow(args.data);\n        this.parent.notify(events.virtualScrollEditSuccess, args);\n        this.parent.editModule.checkLastRow(args.row);\n        this.parent.editModule.isLastRow = false;\n        this.updateCurrentViewData(args.data);\n        this.blazorTemplate();\n        this.editRowIndex = null;\n        if (this.parent.allowGrouping && this.parent.groupSettings.columns.length\n            && this.parent.groupSettings.showGroupedColumn) {\n            var dragRow = args.row;\n            var rows = this.parent.getRowsObject();\n            var dragRowUid = dragRow.getAttribute('data-uid');\n            var dragRowObject_1 = this.parent.getRowObjectFromUID(dragRowUid);\n            var _loop_1 = function (i) {\n                // eslint-disable-next-line @typescript-eslint/no-this-alias\n                var thisRef = this_1;\n                rows = rows.filter(function (data) {\n                    var flag = data.isDataRow && data !== dragRowObject_1;\n                    if (flag) {\n                        var groupedColumn = thisRef.parent.groupSettings.columns[parseInt(i.toString(), 10)].split('.');\n                        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                        var comparer1 = data.data[groupedColumn[0]];\n                        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                        var comparer2 = args.data[groupedColumn[0]];\n                        for (var j = 1; j < groupedColumn.length; j++) {\n                            comparer1 = comparer1[groupedColumn[j]];\n                            comparer2 = comparer2[groupedColumn[j]];\n                        }\n                        return flag && comparer1 === comparer2;\n                    }\n                    else {\n                        return flag;\n                    }\n                });\n            };\n            var this_1 = this;\n            for (var i = 0; i < this.parent.groupSettings.columns.length; i++) {\n                _loop_1(i);\n            }\n            var dropRowObject = rows[0];\n            if (!isNullOrUndefined(dragRowObject_1) && !isNullOrUndefined(dropRowObject) &&\n                dragRowObject_1.parentUid !== dropRowObject.parentUid) {\n                this.parent['groupModule'].groupedRowReorder(dragRowObject_1, dropRowObject);\n            }\n            else if (this.parent.aggregates.length) {\n                this.parent.aggregateModule.refresh(args.data, this.parent.groupSettings.enableLazyLoading ? args.row : undefined);\n            }\n        }\n        else if (this.parent.aggregates.length) {\n            this.parent.aggregateModule.refresh(args.data, this.parent.groupSettings.enableLazyLoading ? args.row : undefined);\n        }\n        this.parent.trigger(events.actionComplete, args);\n        if (!(this.parent.isCheckBoxSelection || this.parent.selectionSettings.type === 'Multiple')\n            || (!this.parent.isPersistSelection) && !this.parent.selectionSettings.checkboxOnly) {\n            if (this.parent.editSettings.mode !== 'Dialog') {\n                this.parent.selectRow(this.rowIndex > -1 ? this.rowIndex : this.editRowIndex);\n            }\n        }\n        if (this.parent.aggregates.length && this.parent.groupSettings.enableLazyLoading && this.parent.groupSettings.columns.length\n            && (this.parent.groupModule.getGroupAggregateTemplates(true).length\n                || this.parent.groupModule.getGroupAggregateTemplates(false).length)) {\n            return;\n        }\n        this.parent.removeMaskRow();\n        this.parent.hideSpinner();\n    };\n    NormalEdit.prototype.closeForm = function () {\n        if (!this.cloneRow && this.parent.isEdit) {\n            this.stopEditStatus();\n        }\n        if (this.cloneRow) {\n            this.cloneRow.remove();\n            this.cloneRow = null;\n            this.originalRow.classList.remove('e-hiddenrow');\n        }\n        if (this.cloneFrozen) {\n            this.cloneFrozen.remove();\n            if (this.frozen) {\n                this.frozen.classList.remove('e-hiddenrow');\n            }\n        }\n    };\n    NormalEdit.prototype.blazorTemplate = function () {\n        var cols = this.parent.getColumns();\n        if (this.parent.editSettings.template && this.parent.editSettings.mode === 'Normal') {\n            updateBlazorTemplate(this.parent.element.id + 'editSettingsTemplate', 'Template', this.parent.editSettings);\n        }\n        for (var i = 0; i < cols.length; i++) {\n            var col = cols[parseInt(i.toString(), 10)];\n            if (col.template) {\n                updateBlazorTemplate(this.parent.element.id + col.uid, 'Template', col, false);\n            }\n            if (col.editTemplate) {\n                updateBlazorTemplate(this.parent.element.id + col.uid + 'editTemplate', 'EditTemplate', col);\n            }\n        }\n    };\n    NormalEdit.prototype.editFailure = function (e) {\n        this.parent.removeMaskRow();\n        this.parent.trigger(events.actionFailure, ({ error: e }));\n        this.parent.hideSpinner();\n        this.parent.log('actionfailure', { error: e });\n    };\n    NormalEdit.prototype.needRefresh = function () {\n        var refresh = true;\n        var editedRow = this.parent.element.querySelector('.e-gridform');\n        if ((this.parent.enableVirtualization || this.parent.infiniteScrollSettings.enableCache)\n            && this.parent.editSettings.mode === 'Normal' && !editedRow) {\n            refresh = false;\n        }\n        return refresh;\n    };\n    NormalEdit.prototype.refreshRow = function (data) {\n        var row = new RowRenderer(this.serviceLocator, null, this.parent);\n        var rowObj = this.parent.getRowObjectFromUID(this.uid);\n        if (rowObj) {\n            rowObj.changes = data;\n            this.parent.notify(events.refreshVirtualCache, { data: data });\n            refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n            if (this.needRefresh()) {\n                row.refresh(rowObj, this.parent.getColumns(), true);\n            }\n            var tr = [].slice.call(this.parent.element.querySelectorAll('[data-rowindex=\"' + rowObj.index + '\"]'));\n            for (var i = 0; i < tr.length; i++) {\n                addFixedColumnBorder(tr[parseInt(i.toString(), 10)]);\n                if (this.parent.enableColumnVirtualization &&\n                    tr[parseInt(i.toString(), 10)].querySelectorAll('.e-leftfreeze,.e-rightfreeze,.e-fixedfreeze').length) {\n                    var cols = this.parent.getColumns();\n                    var leftrightCells = [].slice.call(tr[parseInt(i.toString(), 10)].querySelectorAll('.e-leftfreeze,.e-rightfreeze.e-fixedfreeze'));\n                    for (var j = 0; j < leftrightCells.length; j++) {\n                        if (leftrightCells[parseInt(j.toString(), 10)].classList.contains('e-leftfreeze')) {\n                            leftrightCells[parseInt(j.toString(), 10)].style.left = (cols[parseInt(j.toString(), 10)].valueX - this.parent.translateX) + 'px';\n                        }\n                        else if (leftrightCells[parseInt(j.toString(), 10)].classList.contains('e-rightfreeze')) {\n                            var idx = parseInt(leftrightCells[parseInt(j.toString(), 10)].getAttribute('data-colindex'), 10);\n                            leftrightCells[parseInt(j.toString(), 10)].style.right = ((cols[parseInt(idx.toString(), 10)].valueX + this.parent.translateX)) + 'px';\n                        }\n                        else {\n                            leftrightCells[parseInt(j.toString(), 10)].style.left = (this.parent.leftrightColumnWidth('left') -\n                                this.parent.translateX) + 'px';\n                            leftrightCells[parseInt(j.toString(), 10)].style.right = (this.parent.leftrightColumnWidth('right') +\n                                this.parent.translateX) + 'px';\n                        }\n                    }\n                }\n            }\n        }\n    };\n    NormalEdit.prototype.closeEdit = function () {\n        var _this = this;\n        if (!this.parent.isEdit) {\n            return;\n        }\n        var gObj = this.parent;\n        var args = extend(this.args, {\n            requestType: 'cancel', type: events.actionBegin, cancel: false, data: this.previousData, selectedRow: gObj.selectedRowIndex\n        });\n        gObj.notify(events.virtualScrollEditCancel, args);\n        this.blazorTemplate();\n        gObj.trigger(events.actionBegin, args, function (closeEditArgs) {\n            if (closeEditArgs.cancel) {\n                return;\n            }\n            if (_this.parent.editSettings.mode === 'Dialog') {\n                _this.parent.notify(events.dialogDestroy, {});\n            }\n            gObj.isEdit = false;\n            _this.stopEditStatus();\n            closeEditArgs.type = events.actionComplete;\n            if (gObj.editSettings.mode !== 'Dialog') {\n                _this.refreshRow(closeEditArgs.data);\n            }\n            var isLazyLoad = gObj.groupSettings.enableLazyLoading && gObj.groupSettings.columns.length\n                && !gObj.getContentTable().querySelector('tr.e-emptyrow');\n            if (!gObj.getContentTable().querySelector('tr.e-emptyrow') &&\n                !gObj.getContentTable().querySelector('tr.e-row') && !isLazyLoad) {\n                gObj.renderModule.emptyRow();\n            }\n            if (gObj.editSettings.mode !== 'Dialog') {\n                gObj.selectRow(_this.rowIndex);\n            }\n            gObj.trigger(events.actionComplete, closeEditArgs);\n        });\n    };\n    NormalEdit.prototype.addRecord = function (data, index) {\n        var _this = this;\n        var gObj = this.parent;\n        this.addedRowIndex = index = !isNullOrUndefined(index) ? index : 0;\n        if (data) {\n            gObj.notify(events.modelChanged, {\n                requestType: 'save', type: events.actionBegin, data: data, selectedRow: 0, action: 'add', index: index\n            });\n            return;\n        }\n        if (gObj.isEdit) {\n            return;\n        }\n        this.previousData = {};\n        this.uid = '';\n        var cols = gObj.getColumns();\n        var rowData = { virtualData: {}, isScroll: false };\n        this.parent.notify(events.getVirtualData, rowData);\n        for (var i = 0; i < cols.length; i++) {\n            if (rowData.isScroll) {\n                continue;\n            }\n            if (cols[parseInt(i.toString(), 10)].field) {\n                if (cols[parseInt(i.toString(), 10)].type === 'string') {\n                    cols[parseInt(i.toString(), 10)].defaultValue = this.parent.sanitize(cols[parseInt(i.toString(), 10)].defaultValue);\n                }\n                DataUtil.setValue(cols[parseInt(i.toString(), 10)].field, cols[parseInt(i.toString(), 10)].defaultValue, this.previousData);\n            }\n        }\n        var args = {\n            cancel: false, foreignKeyData: {},\n            requestType: 'add', data: this.previousData, type: events.actionBegin, index: index,\n            rowData: this.previousData, target: undefined, isScroll: rowData.isScroll\n        };\n        if ((this.parent.enableVirtualization || this.parent.enableColumnVirtualization || this.parent.infiniteScrollSettings.enableCache)\n            && Object.keys(rowData.virtualData).length) {\n            args.data = args.rowData = rowData.virtualData;\n        }\n        if (!args.isScroll) {\n            this.parent.notify(events.createVirtualValidationForm, { uid: this.uid, prevData: this.previousData, argsCreator: this.getEditArgs.bind(this), renderer: this.renderer });\n            gObj.trigger(events.actionBegin, args, function (addArgs) {\n                if (addArgs.cancel) {\n                    return;\n                }\n                _this.inlineAddHandler(addArgs);\n            });\n        }\n        else {\n            this.inlineAddHandler(args);\n        }\n    };\n    NormalEdit.prototype.inlineAddHandler = function (addArgs) {\n        var gObj = this.parent;\n        gObj.isEdit = true;\n        if (gObj.editSettings.mode !== 'Dialog') {\n            gObj.clearSelection();\n        }\n        this.renderer.addNew(addArgs);\n        gObj.editModule.applyFormValidation();\n        addArgs.type = events.actionComplete;\n        addArgs.row = gObj.element.querySelector('.' + literals.addedRow);\n        gObj.trigger(events.actionComplete, addArgs);\n        if (gObj.editSettings.template) {\n            gObj.editModule.applyFormValidation(undefined, addArgs.form.ej2_instances[0].rules);\n        }\n        this.args = addArgs;\n    };\n    NormalEdit.prototype.deleteRecord = function (fieldname, data) {\n        this.editRowIndex = this.parent.selectedRowIndex;\n        if (data) {\n            data = (data instanceof Array) ? data : [data];\n            var gObj = this.parent;\n            var dataLen = Object.keys(data).length;\n            fieldname = fieldname || this.parent.getPrimaryKeyFieldNames()[0];\n            var _loop_2 = function (i) {\n                var _a;\n                var tmpRecord;\n                var contained = gObj.currentViewData.some(function (record) {\n                    tmpRecord = record;\n                    return data[parseInt(i.toString(), 10)] === getObject(fieldname, record) || data[parseInt(i.toString(), 10)] === record;\n                });\n                data[parseInt(i.toString(), 10)] = contained ? tmpRecord : data[parseInt(i.toString(), 10)][\"\" + fieldname] ?\n                    data[parseInt(i.toString(), 10)] : (_a = {}, _a[fieldname] = data[parseInt(i.toString(), 10)], _a);\n            };\n            for (var i = 0; i < dataLen; i++) {\n                _loop_2(i);\n            }\n        }\n        var args = {\n            requestType: 'delete', type: events.actionBegin, foreignKeyData: {},\n            data: data ? data : this.parent.getSelectedRecords(), tr: this.parent.getSelectedRows(), cancel: false\n        };\n        if (!isNullOrUndefined(this.parent.commandDelIndex)) {\n            args.data[0] =\n                this.parent.getRowObjectFromUID(this.parent.getRowByIndex(this.parent.commandDelIndex).getAttribute('data-uid')).data;\n        }\n        if ((this.parent.enableVirtualization || this.parent.enableColumnVirtualization) && args.data.length > 1) {\n            var uid = this.parent.getSelectedRows()[0].getAttribute('data-uid');\n            args.data = [this.parent.getRowObjectFromUID(uid).data];\n        }\n        this.parent.notify(events.modelChanged, args);\n    };\n    NormalEdit.prototype.stopEditStatus = function () {\n        var gObj = this.parent;\n        var addElements = [].slice.call(gObj.element.getElementsByClassName(literals.addedRow));\n        var editElements = [].slice.call(gObj.element.getElementsByClassName(literals.editedRow));\n        for (var i = 0; i < addElements.length; i++) {\n            remove(addElements[parseInt(i.toString(), 10)]);\n        }\n        for (var i = 0; i < editElements.length; i++) {\n            editElements[parseInt(i.toString(), 10)].classList.remove(literals.editedRow);\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    NormalEdit.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.evtHandlers = [{ event: events.crudAction, handler: this.editHandler },\n            { event: events.doubleTap, handler: this.dblClickHandler },\n            { event: events.click, handler: this.clickHandler },\n            { event: events.recordAdded, handler: this.requestSuccess },\n            { event: events.dblclick, handler: this.dblClickHandler },\n            { event: events.deleteComplete, handler: this.editComplete },\n            { event: events.saveComplete, handler: this.editComplete },\n            { event: events.rowModeChange, handler: this.closeEdit },\n            { event: events.closeInline, handler: this.closeForm }];\n        addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    NormalEdit.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        addRemoveEventListener(this.parent, this.evtHandlers, false);\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    NormalEdit.prototype.destroy = function () {\n        this.removeEventListener();\n        this.renderer.destroy();\n    };\n    return NormalEdit;\n}());\nexport { NormalEdit };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `InlineEdit` module is used to handle inline editing actions.\n *\n * @hidden\n */\nvar InlineEdit = /** @class */ (function (_super) {\n    __extends(InlineEdit, _super);\n    function InlineEdit(parent, serviceLocator, renderer) {\n        var _this = _super.call(this, parent, serviceLocator) || this;\n        _this.parent = parent;\n        _this.serviceLocator = serviceLocator;\n        _this.renderer = renderer;\n        return _this;\n    }\n    InlineEdit.prototype.closeEdit = function () {\n        _super.prototype.closeEdit.call(this);\n    };\n    InlineEdit.prototype.addRecord = function (data, index) {\n        _super.prototype.addRecord.call(this, data, index);\n    };\n    InlineEdit.prototype.endEdit = function () {\n        _super.prototype.endEdit.call(this);\n    };\n    InlineEdit.prototype.updateRow = function (index, data) {\n        _super.prototype.updateRow.call(this, index, data);\n    };\n    InlineEdit.prototype.deleteRecord = function (fieldname, data) {\n        _super.prototype.deleteRecord.call(this, fieldname, data);\n    };\n    InlineEdit.prototype.startEdit = function (tr) {\n        _super.prototype.startEdit.call(this, tr);\n    };\n    return InlineEdit;\n}(NormalEdit));\nexport { InlineEdit };\n","import { extend, addClass, removeClass, setValue, closest, select, EventHandler } from '@syncfusion/ej2-base';\nimport { remove, classList } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { parentsUntil, refreshForeignData, getObject, addRemoveEventListener, } from '../base/util';\nimport { getCellByColAndRowIndex, addFixedColumnBorder } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from '../renderer/row-renderer';\nimport { CellRenderer } from '../renderer/cell-renderer';\nimport { Row } from '../models/row';\nimport { Cell } from '../models/cell';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport * as literals from '../base/string-literals';\n/**\n * `BatchEdit` module is used to handle batch editing actions.\n *\n * @hidden\n */\nvar BatchEdit = /** @class */ (function () {\n    function BatchEdit(parent, serviceLocator, renderer) {\n        this.cellDetails = {};\n        this.originalCell = {};\n        this.cloneCell = {};\n        this.editNext = false;\n        this.preventSaveCell = false;\n        this.initialRender = true;\n        this.validationColObj = [];\n        /** @hidden */\n        this.addBatchRow = false;\n        this.prevEditedBatchCell = false;\n        this.parent = parent;\n        this.serviceLocator = serviceLocator;\n        this.renderer = renderer;\n        this.focus = serviceLocator.getService('focus');\n        this.addEventListener();\n    }\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    BatchEdit.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.evtHandlers = [{ event: events.click, handler: this.clickHandler },\n            { event: events.dblclick, handler: this.dblClickHandler },\n            { event: events.beforeCellFocused, handler: this.onBeforeCellFocused },\n            { event: events.cellFocused, handler: this.onCellFocused },\n            { event: events.doubleTap, handler: this.dblClickHandler },\n            { event: events.keyPressed, handler: this.keyDownHandler },\n            { event: events.editNextValCell, handler: this.editNextValCell },\n            { event: events.destroy, handler: this.destroy }];\n        addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n        EventHandler.add(this.parent.element, 'mousedown', this.mouseDownHandler, this);\n        this.dataBoundFunction = this.dataBound.bind(this);\n        this.batchCancelFunction = this.batchCancel.bind(this);\n        this.parent.addEventListener(events.dataBound, this.dataBoundFunction);\n        this.parent.addEventListener(events.batchCancel, this.batchCancelFunction);\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    BatchEdit.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        addRemoveEventListener(this.parent, this.evtHandlers, false);\n        EventHandler.remove(this.parent.element, 'mousedown', this.mouseDownHandler);\n        this.parent.removeEventListener(events.dataBound, this.dataBoundFunction);\n        this.parent.removeEventListener(events.batchCancel, this.batchCancelFunction);\n    };\n    BatchEdit.prototype.batchCancel = function () {\n        this.parent.focusModule.restoreFocus();\n    };\n    BatchEdit.prototype.dataBound = function () {\n        this.parent.notify(events.toolbarRefresh, {});\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    BatchEdit.prototype.destroy = function () {\n        this.removeEventListener();\n    };\n    BatchEdit.prototype.mouseDownHandler = function (e) {\n        if (!isNullOrUndefined(this.parent.element.querySelector('.e-gridform'))) {\n            this.mouseDownElement = e.target;\n        }\n        else {\n            this.mouseDownElement = undefined;\n        }\n    };\n    BatchEdit.prototype.clickHandler = function (e) {\n        if (!parentsUntil(e.target, this.parent.element.id + '_add', true)) {\n            if ((this.parent.isEdit && closest(this.form, 'td') !== closest(e.target, 'td'))\n                && isNullOrUndefined(this.mouseDownElement) || this.mouseDownElement === e.target) {\n                this.saveCell();\n                this.editNextValCell();\n            }\n            if (parentsUntil(e.target, literals.rowCell) && !this.parent.isEdit) {\n                this.setCellIdx(e.target);\n            }\n        }\n    };\n    BatchEdit.prototype.dblClickHandler = function (e) {\n        var target = parentsUntil(e.target, literals.rowCell);\n        var tr = parentsUntil(e.target, literals.row);\n        var rowIndex = tr && parseInt(tr.getAttribute(literals.dataRowIndex), 10);\n        var colIndex = target && parseInt(target.getAttribute(literals.dataColIndex), 10);\n        if (!isNullOrUndefined(target) && !isNullOrUndefined(rowIndex) && !isNaN(colIndex)\n            && !target.parentElement.classList.contains(literals.editedRow) &&\n            this.parent.getColumns()[parseInt(colIndex.toString(), 10)].allowEditing) {\n            this.editCell(rowIndex, this.parent.getColumns()[parseInt(colIndex.toString(), 10)].field, this.isAddRow(rowIndex));\n        }\n    };\n    BatchEdit.prototype.onBeforeCellFocused = function (e) {\n        if (this.parent.isEdit && this.validateFormObj() &&\n            (e.byClick || (['tab', 'shiftTab', 'enter', 'shiftEnter'].indexOf(e.keyArgs.action) > -1))) {\n            e.cancel = true;\n            if (e.byClick) {\n                e.clickArgs.preventDefault();\n            }\n            else {\n                e.keyArgs.preventDefault();\n            }\n        }\n    };\n    BatchEdit.prototype.onCellFocused = function (e) {\n        var clear = (!e.container.isContent || !e.container.isDataCell) && !(this.parent.frozenRows && e.container.isHeader);\n        if (this.parent.focusModule.active) {\n            this.prevEditedBatchCell = this.parent.focusModule.active.matrix.current.toString() === this.prevEditedBatchCellMatrix()\n                .toString();\n            this.crtRowIndex = [].slice.call(this.parent.focusModule.active.getTable().rows).indexOf(closest(e.element, 'tr'));\n        }\n        if (!e.byKey || clear) {\n            if ((this.parent.isEdit && clear)) {\n                this.saveCell();\n            }\n            return;\n        }\n        var _a = e.container.indexes, rowIndex = _a[0], cellIndex = _a[1];\n        var actualIndex = e.element.getAttribute('data-colindex') ? parseInt(e.element.getAttribute('data-colindex')) : cellIndex;\n        if (actualIndex !== cellIndex) {\n            cellIndex = actualIndex;\n        }\n        if (this.parent.frozenRows && e.container.isContent) {\n            rowIndex += ((this.parent.getContent().querySelector('.e-hiddenrow') ? 0 : this.parent.frozenRows) +\n                this.parent.getHeaderContent().querySelectorAll('.e-insertedrow').length);\n        }\n        var isEdit = this.parent.isEdit;\n        if (!this.parent.element.getElementsByClassName('e-popup-open').length) {\n            isEdit = isEdit && !this.validateFormObj();\n            switch (e.keyArgs.action) {\n                case 'tab':\n                case 'shiftTab':\n                    // eslint-disable-next-line no-case-declarations\n                    var indent = this.parent.isRowDragable() && this.parent.isDetail() ? 2 :\n                        this.parent.isRowDragable() || this.parent.isDetail() ? 1 : 0;\n                    // eslint-disable-next-line no-case-declarations\n                    var col = this.parent.getColumns()[cellIndex - indent];\n                    if (col && !this.parent.isEdit) {\n                        this.editCell(rowIndex, col.field);\n                    }\n                    if (isEdit || this.parent.isLastCellPrimaryKey) {\n                        this.editCellFromIndex(rowIndex, cellIndex);\n                    }\n                    break;\n                case 'enter':\n                case 'shiftEnter':\n                    e.keyArgs.preventDefault();\n                    // eslint-disable-next-line no-case-declarations\n                    var args = { cancel: false, keyArgs: e.keyArgs };\n                    this.parent.notify('beforeFocusCellEdit', args);\n                    if (!args.cancel && isEdit) {\n                        this.editCell(rowIndex, this.cellDetails.column.field);\n                    }\n                    break;\n                case 'f2':\n                    this.editCellFromIndex(rowIndex, cellIndex);\n                    this.focus.focus();\n                    break;\n            }\n        }\n    };\n    BatchEdit.prototype.isAddRow = function (index) {\n        return this.parent.getDataRows()[parseInt(index.toString(), 10)].classList.contains('e-insertedrow');\n    };\n    BatchEdit.prototype.editCellFromIndex = function (rowIdx, cellIdx) {\n        this.cellDetails.rowIndex = rowIdx;\n        this.cellDetails.cellIndex = cellIdx;\n        this.editCell(rowIdx, this.parent.getColumns()[parseInt(cellIdx.toString(), 10)].field, this.isAddRow(rowIdx));\n    };\n    BatchEdit.prototype.closeEdit = function () {\n        var gObj = this.parent;\n        var rows = this.parent.getRowsObject();\n        var argument = { cancel: false, batchChanges: this.getBatchChanges() };\n        gObj.notify(events.beforeBatchCancel, argument);\n        if (argument.cancel) {\n            return;\n        }\n        if (gObj.isEdit) {\n            this.saveCell(true);\n        }\n        this.isAdded = false;\n        gObj.clearSelection();\n        for (var i = 0; i < rows.length; i++) {\n            var isInsert = false;\n            var isDirty = rows[parseInt(i.toString(), 10)].isDirty;\n            isInsert = this.removeBatchElementChanges(rows[parseInt(i.toString(), 10)], isDirty);\n            if (isInsert) {\n                rows.splice(i, 1);\n            }\n            if (isInsert) {\n                i--;\n            }\n        }\n        if (!gObj.getContentTable().querySelector('tr.e-row')) {\n            gObj.renderModule.renderEmptyRow();\n        }\n        var args = {\n            requestType: 'batchCancel', rows: this.parent.getRowsObject()\n        };\n        gObj.notify(events.batchCancel, {\n            rows: this.parent.getRowsObject().length ? this.parent.getRowsObject() :\n                [new Row({ isDataRow: true, cells: [new Cell({ isDataCell: true, visible: true })] })]\n        });\n        gObj.selectRow(this.cellDetails.rowIndex);\n        this.refreshRowIdx();\n        gObj.notify(events.toolbarRefresh, {});\n        this.parent.notify(events.tooltipDestroy, {});\n        args = { requestType: 'batchCancel', rows: this.parent.getRowsObject() };\n        gObj.trigger(events.batchCancel, args);\n    };\n    BatchEdit.prototype.removeBatchElementChanges = function (row, isDirty) {\n        var gObj = this.parent;\n        var rowRenderer = new RowRenderer(this.serviceLocator, null, this.parent);\n        var isInstertedRemoved = false;\n        if (isDirty) {\n            row.isDirty = isDirty;\n            var tr = gObj.getRowElementByUID(row.uid);\n            if (tr) {\n                if (tr.classList.contains('e-insertedrow')) {\n                    remove(tr);\n                    isInstertedRemoved = true;\n                }\n                else {\n                    refreshForeignData(row, this.parent.getForeignKeyColumns(), row.data);\n                    delete row.changes;\n                    delete row.edit;\n                    row.isDirty = false;\n                    classList(tr, [], ['e-hiddenrow', 'e-updatedtd']);\n                    rowRenderer.refresh(row, gObj.getColumns(), false);\n                }\n                if (this.parent.aggregates.length > 0) {\n                    var type = 'type';\n                    var editType = [];\n                    editType[\"\" + type] = 'cancel';\n                    this.parent.notify(events.refreshFooterRenderer, editType);\n                    if (this.parent.groupSettings.columns.length > 0) {\n                        this.parent.notify(events.groupAggregates, editType);\n                    }\n                }\n            }\n        }\n        return isInstertedRemoved;\n    };\n    BatchEdit.prototype.deleteRecord = function (fieldname, data) {\n        this.saveCell();\n        if (this.validateFormObj()) {\n            this.saveCell(true);\n        }\n        this.isAdded = false;\n        this.bulkDelete(fieldname, data);\n        if (this.parent.aggregates.length > 0) {\n            this.parent.notify(events.refreshFooterRenderer, {});\n            if (this.parent.groupSettings.columns.length > 0) {\n                this.parent.notify(events.groupAggregates, {});\n            }\n        }\n    };\n    BatchEdit.prototype.addRecord = function (data) {\n        this.bulkAddRow(data);\n    };\n    BatchEdit.prototype.endEdit = function () {\n        if (this.parent.isEdit && this.validateFormObj()) {\n            return;\n        }\n        this.batchSave();\n    };\n    BatchEdit.prototype.validateFormObj = function () {\n        return this.parent.editModule.formObj && !this.parent.editModule.formObj.validate();\n    };\n    BatchEdit.prototype.batchSave = function () {\n        var gObj = this.parent;\n        var deletedRecords = 'deletedRecords';\n        if (gObj.isCheckBoxSelection) {\n            var checkAllBox = gObj.element.querySelector('.e-checkselectall').parentElement;\n            if (checkAllBox.classList.contains('e-checkbox-disabled') &&\n                gObj.pageSettings.totalRecordsCount > gObj.currentViewData.length) {\n                removeClass([checkAllBox], ['e-checkbox-disabled']);\n            }\n        }\n        this.saveCell();\n        if (gObj.isEdit || this.editNextValCell() || gObj.isEdit) {\n            return;\n        }\n        var changes = this.getBatchChanges();\n        if (this.parent.selectionSettings.type === 'Multiple' && changes[\"\" + deletedRecords].length &&\n            this.parent.selectionSettings.persistSelection) {\n            changes[\"\" + deletedRecords] = this.removeSelectedData;\n            this.removeSelectedData = [];\n        }\n        var original = {\n            changedRecords: this.parent.getRowsObject()\n                .filter(function (row) { return row.isDirty && ['add', 'delete'].indexOf(row.edit) === -1; })\n                .map(function (row) { return row.data; })\n        };\n        var args = { batchChanges: changes, cancel: false };\n        gObj.trigger(events.beforeBatchSave, args, function (beforeBatchSaveArgs) {\n            if (beforeBatchSaveArgs.cancel) {\n                return;\n            }\n            gObj.showSpinner();\n            gObj.notify(events.bulkSave, { changes: changes, original: original });\n        });\n    };\n    BatchEdit.prototype.getBatchChanges = function () {\n        var changes = {\n            addedRecords: [],\n            deletedRecords: [],\n            changedRecords: []\n        };\n        var rows = this.parent.getRowsObject();\n        for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n            var row = rows_1[_i];\n            if (row.isDirty) {\n                switch (row.edit) {\n                    case 'add':\n                        changes.addedRecords.push(row.changes);\n                        break;\n                    case 'delete':\n                        changes.deletedRecords.push(row.data);\n                        break;\n                    default:\n                        changes.changedRecords.push(row.changes);\n                }\n            }\n        }\n        return changes;\n    };\n    /**\n     * @param {string} uid - specifes the uid\n     * @returns {void}\n     * @hidden\n     */\n    BatchEdit.prototype.removeRowObjectFromUID = function (uid) {\n        var rows = this.parent.getRowsObject();\n        var i = 0;\n        for (var len = rows.length; i < len; i++) {\n            if (rows[parseInt(i.toString(), 10)].uid === uid) {\n                break;\n            }\n        }\n        rows.splice(i, 1);\n    };\n    /**\n     * @param {Row<Column>} row - specifies the row object\n     * @param {freezeTable} newTableName - specifies the table name\n     * @returns {void}\n     * @hidden\n     */\n    BatchEdit.prototype.addRowObject = function (row) {\n        var gObj = this.parent;\n        var isTop = gObj.editSettings.newRowPosition === 'Top';\n        var rowClone = row.clone();\n        if (isTop) {\n            gObj.getRowsObject().unshift(rowClone);\n        }\n        else {\n            gObj.getRowsObject().push(rowClone);\n        }\n    };\n    // tslint:disable-next-line:max-func-body-length\n    BatchEdit.prototype.bulkDelete = function (fieldname, data) {\n        var _this = this;\n        this.removeSelectedData = [];\n        var gObj = this.parent;\n        var index = gObj.selectedRowIndex;\n        var selectedRows = gObj.getSelectedRows();\n        var args = {\n            primaryKey: this.parent.getPrimaryKeyFieldNames(),\n            rowIndex: index,\n            rowData: data ? data : gObj.getSelectedRecords()[0],\n            cancel: false\n        };\n        if (data) {\n            args.row = gObj.editModule.deleteRowUid ? gObj.getRowElementByUID(gObj.editModule.deleteRowUid)\n                : gObj.getRows()[gObj.getCurrentViewRecords().indexOf(data)];\n        }\n        else {\n            args.row = selectedRows[0];\n        }\n        if (!args.row) {\n            return;\n        }\n        // tslint:disable-next-line:max-func-body-length\n        gObj.trigger(events.beforeBatchDelete, args, function (beforeBatchDeleteArgs) {\n            if (beforeBatchDeleteArgs.cancel) {\n                return;\n            }\n            _this.removeSelectedData = gObj.getSelectedRecords();\n            gObj.clearSelection();\n            beforeBatchDeleteArgs.row = beforeBatchDeleteArgs.row ?\n                beforeBatchDeleteArgs.row : data ? gObj.getRows()[parseInt(index.toString(), 10)] : selectedRows[0];\n            if (selectedRows.length === 1 || data) {\n                var uid = beforeBatchDeleteArgs.row.getAttribute('data-uid');\n                uid = data && _this.parent.editModule.deleteRowUid ? uid = _this.parent.editModule.deleteRowUid : uid;\n                if (beforeBatchDeleteArgs.row.classList.contains('e-insertedrow')) {\n                    _this.removeRowObjectFromUID(uid);\n                    remove(beforeBatchDeleteArgs.row);\n                }\n                else {\n                    var rowObj = gObj.getRowObjectFromUID(uid);\n                    rowObj.isDirty = true;\n                    rowObj.edit = 'delete';\n                    classList(beforeBatchDeleteArgs.row, ['e-hiddenrow', 'e-updatedtd'], []);\n                    if (gObj.frozenRows && index < gObj.frozenRows && gObj.getDataRows().length >= gObj.frozenRows) {\n                        gObj.getHeaderTable().querySelector(literals.tbody).appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n                    }\n                }\n                delete beforeBatchDeleteArgs.row;\n            }\n            else {\n                if (data) {\n                    index = parseInt(beforeBatchDeleteArgs.row.getAttribute(literals.dataRowIndex), 10);\n                }\n                for (var i = 0; i < selectedRows.length; i++) {\n                    var uniqueid = selectedRows[parseInt(i.toString(), 10)].getAttribute('data-uid');\n                    if (selectedRows[parseInt(i.toString(), 10)].classList.contains('e-insertedrow')) {\n                        _this.removeRowObjectFromUID(uniqueid);\n                        remove(selectedRows[parseInt(i.toString(), 10)]);\n                    }\n                    else {\n                        classList(selectedRows[parseInt(i.toString(), 10)], ['e-hiddenrow', 'e-updatedtd'], []);\n                        var selectedRow = gObj.getRowObjectFromUID(uniqueid);\n                        selectedRow.isDirty = true;\n                        selectedRow.edit = 'delete';\n                        delete selectedRows[parseInt(i.toString(), 10)];\n                        if (gObj.frozenRows && index < gObj.frozenRows && gObj.getDataRows().length >= gObj.frozenRows) {\n                            gObj.getHeaderTable().querySelector(literals.tbody).appendChild(gObj.getRowByIndex(gObj.frozenRows - 1));\n                        }\n                    }\n                }\n            }\n            _this.refreshRowIdx();\n            if (data) {\n                gObj.editModule.deleteRowUid = undefined;\n            }\n            if (!gObj.isCheckBoxSelection) {\n                gObj.selectRow(index);\n            }\n            gObj.trigger(events.batchDelete, beforeBatchDeleteArgs);\n            gObj.notify(events.batchDelete, { rows: _this.parent.getRowsObject() });\n            gObj.notify(events.toolbarRefresh, {});\n        });\n    };\n    BatchEdit.prototype.refreshRowIdx = function () {\n        var gObj = this.parent;\n        var rows = gObj.getAllDataRows(true);\n        var dataObjects = gObj.getRowsObject().filter(function (row) { return !row.isDetailRow; });\n        for (var i = 0, j = 0, len = rows.length; i < len; i++) {\n            if (rows[parseInt(i.toString(), 10)].classList.contains(literals.row) && !rows[parseInt(i.toString(), 10)].classList.contains('e-hiddenrow')) {\n                rows[parseInt(i.toString(), 10)].setAttribute(literals.dataRowIndex, j.toString());\n                rows[parseInt(i.toString(), 10)].setAttribute(literals.ariaRowIndex, (j + 1).toString());\n                dataObjects[parseInt(i.toString(), 10)].index = j;\n                j++;\n            }\n            else {\n                rows[parseInt(i.toString(), 10)].removeAttribute(literals.dataRowIndex);\n                rows[parseInt(i.toString(), 10)].removeAttribute(literals.ariaRowIndex);\n                dataObjects[parseInt(i.toString(), 10)].index = -1;\n            }\n        }\n    };\n    BatchEdit.prototype.bulkAddRow = function (data) {\n        var _this = this;\n        var gObj = this.parent;\n        if (!gObj.editSettings.allowAdding) {\n            if (gObj.isEdit) {\n                this.saveCell();\n            }\n            return;\n        }\n        if (gObj.isEdit) {\n            this.saveCell();\n            this.parent.notify(events.editNextValCell, {});\n        }\n        if (this.initialRender) {\n            var visibleColumns = gObj.getVisibleColumns();\n            for (var i = 0; i < visibleColumns.length; i++) {\n                if (visibleColumns[parseInt(i.toString(), 10)].validationRules &&\n                    visibleColumns[parseInt(i.toString(), 10)].validationRules['required']) {\n                    var obj = { field: (visibleColumns[parseInt(i.toString(), 10)]['field']).slice(), cellIdx: i };\n                    this.validationColObj.push(obj);\n                }\n            }\n            this.initialRender = false;\n        }\n        this.parent.element.classList.add('e-editing');\n        var defaultData = data ? data : this.getDefaultData();\n        var args = {\n            defaultData: defaultData,\n            primaryKey: gObj.getPrimaryKeyFieldNames(),\n            cancel: false\n        };\n        gObj.trigger(events.beforeBatchAdd, args, function (beforeBatchAddArgs) {\n            if (beforeBatchAddArgs.cancel) {\n                return;\n            }\n            _this.isAdded = true;\n            gObj.clearSelection();\n            var row = new RowRenderer(_this.serviceLocator, null, _this.parent);\n            var model = new RowModelGenerator(_this.parent);\n            var modelData = model.generateRows([beforeBatchAddArgs.defaultData]);\n            var tr = row.render(modelData[0], gObj.getColumns());\n            addFixedColumnBorder(tr);\n            var col;\n            var index;\n            for (var i = 0; i < _this.parent.groupSettings.columns.length; i++) {\n                tr.insertBefore(_this.parent.createElement('td', { className: 'e-indentcell' }), tr.firstChild);\n                modelData[0].cells.unshift(new Cell({ cellType: CellType.Indent }));\n            }\n            var tbody = gObj.getContentTable().querySelector(literals.tbody);\n            tr.classList.add('e-insertedrow');\n            if (tbody.querySelector('.e-emptyrow')) {\n                var emptyRow = tbody.querySelector('.e-emptyrow');\n                emptyRow.parentNode.removeChild(emptyRow);\n                if (gObj.frozenRows && gObj.element.querySelector('.e-frozenrow-empty')) {\n                    gObj.element.querySelector('.e-frozenrow-empty').classList.remove('e-frozenrow-empty');\n                }\n            }\n            if (gObj.frozenRows && gObj.editSettings.newRowPosition === 'Top') {\n                tbody = gObj.getHeaderTable().querySelector(literals.tbody);\n            }\n            else {\n                tbody = gObj.getContentTable().querySelector(literals.tbody);\n            }\n            if (_this.parent.editSettings.newRowPosition === 'Top') {\n                tbody.insertBefore(tr, tbody.firstChild);\n            }\n            else {\n                tbody.appendChild(tr);\n            }\n            addClass([].slice.call(tr.getElementsByClassName(literals.rowCell)), ['e-updatedtd']);\n            modelData[0].isDirty = true;\n            modelData[0].changes = extend({}, {}, modelData[0].data, true);\n            modelData[0].edit = 'add';\n            _this.addRowObject(modelData[0]);\n            _this.refreshRowIdx();\n            _this.focus.forgetPrevious();\n            gObj.notify(events.batchAdd, { rows: _this.parent.getRowsObject() });\n            var changes = _this.getBatchChanges();\n            var btmIdx = _this.getBottomIndex();\n            if (_this.parent.editSettings.newRowPosition === 'Top') {\n                gObj.selectRow(0);\n            }\n            else {\n                gObj.selectRow(btmIdx);\n            }\n            if (!data) {\n                index = _this.findNextEditableCell(0, true);\n                col = gObj.getColumns()[parseInt(index.toString(), 10)];\n                if (_this.parent.editSettings.newRowPosition === 'Top') {\n                    _this.editCell(0, col.field, true);\n                }\n                else {\n                    _this.editCell(btmIdx, col.field, true);\n                }\n            }\n            if (_this.parent.aggregates.length > 0 && (data || changes[literals.addedRecords].length)) {\n                _this.parent.notify(events.refreshFooterRenderer, {});\n            }\n            var args1 = {\n                defaultData: beforeBatchAddArgs.defaultData, row: tr,\n                columnObject: col, columnIndex: index, primaryKey: beforeBatchAddArgs.primaryKey,\n                cell: !isNullOrUndefined(index) ? tr.cells[parseInt(index.toString(), 10)] : undefined\n            };\n            gObj.trigger(events.batchAdd, args1);\n        });\n    };\n    BatchEdit.prototype.findNextEditableCell = function (columnIndex, isAdd, isValOnly) {\n        var cols = this.parent.getColumns();\n        var endIndex = cols.length;\n        var validation;\n        for (var i = columnIndex; i < endIndex; i++) {\n            validation = isValOnly ? isNullOrUndefined(cols[parseInt(i.toString(), 10)].validationRules) : false;\n            // if (!isAdd && this.checkNPCell(cols[parseInt(i.toString(), 10)])) {\n            //     return i;\n            // } else \n            if (isAdd && (!cols[parseInt(i.toString(), 10)].template || cols[parseInt(i.toString(), 10)].field)\n                && cols[parseInt(i.toString(), 10)].allowEditing && cols[parseInt(i.toString(), 10)].visible &&\n                !(cols[parseInt(i.toString(), 10)].isIdentity && cols[parseInt(i.toString(), 10)].isPrimaryKey) && !validation) {\n                return i;\n            }\n        }\n        return -1;\n    };\n    BatchEdit.prototype.getDefaultData = function () {\n        var gObj = this.parent;\n        var data = {};\n        var dValues = { 'number': 0, 'string': null, 'boolean': false, 'date': null, 'datetime': null };\n        for (var _i = 0, _a = (gObj.columnModel); _i < _a.length; _i++) {\n            var col = _a[_i];\n            if (col.field) {\n                setValue(col.field, Object.keys(col).indexOf('defaultValue') >= 0 ? col.defaultValue : dValues[col.type], data);\n            }\n        }\n        return data;\n    };\n    BatchEdit.prototype.setCellIdx = function (target) {\n        var gLen = 0;\n        if (this.parent.allowGrouping) {\n            gLen = this.parent.groupSettings.columns.length;\n        }\n        this.cellDetails.cellIndex = target.cellIndex - gLen;\n        this.cellDetails.rowIndex = parseInt(target.getAttribute('index'), 10);\n    };\n    BatchEdit.prototype.editCell = function (index, field, isAdd) {\n        var gObj = this.parent;\n        var col = gObj.getColumnByField(field);\n        this.index = index;\n        this.field = field;\n        this.isAdd = isAdd;\n        var checkEdit = gObj.isEdit && !(this.cellDetails.column.field === field\n            && (this.cellDetails.rowIndex === index && this.parent.getDataRows().length - 1 !== index && this.prevEditedBatchCell));\n        if (gObj.editSettings.allowEditing) {\n            if (!checkEdit && (col.allowEditing || (!col.allowEditing && gObj.focusModule.active\n                && gObj.focusModule.active.getTable().rows[this.crtRowIndex]\n                && gObj.focusModule.active.getTable().rows[this.crtRowIndex].classList.contains('e-insertedrow')))) {\n                this.editCellExtend(index, field, isAdd);\n            }\n            else if (checkEdit) {\n                this.editNext = true;\n                this.saveCell();\n            }\n        }\n    };\n    BatchEdit.prototype.editCellExtend = function (index, field, isAdd) {\n        var _this = this;\n        var gObj = this.parent;\n        var col = gObj.getColumnByField(field);\n        var keys = gObj.getPrimaryKeyFieldNames();\n        if (gObj.isEdit) {\n            return;\n        }\n        var rowData = extend({}, {}, this.getDataByIndex(index), true);\n        var row = gObj.getDataRows()[parseInt(index.toString(), 10)];\n        rowData = extend({}, {}, this.getDataByIndex(index), true);\n        if ((keys[0] === col.field && !row.classList.contains('e-insertedrow')) || col.columns ||\n            (col.isPrimaryKey && col.isIdentity) || col.commands) {\n            this.parent.isLastCellPrimaryKey = true;\n            return;\n        }\n        this.parent.isLastCellPrimaryKey = false;\n        this.parent.element.classList.add('e-editing');\n        var rowObj = gObj.getRowObjectFromUID(row.getAttribute('data-uid'));\n        var cells = [].slice.apply(row.cells);\n        var args = {\n            columnName: col.field, isForeignKey: !isNullOrUndefined(col.foreignKeyValue),\n            primaryKey: keys, rowData: rowData,\n            validationRules: extend({}, col.validationRules ? col.validationRules : {}),\n            value: getObject(col.field, rowData),\n            type: !isAdd ? 'edit' : 'add', cancel: false,\n            foreignKeyData: rowObj && rowObj.foreignKeyData\n        };\n        args.cell = cells[this.getColIndex(cells, this.getCellIdx(col.uid))];\n        args.row = row;\n        args.columnObject = col;\n        if (!args.cell) {\n            return;\n        }\n        gObj.trigger(events.cellEdit, args, function (cellEditArgs) {\n            if (cellEditArgs.cancel) {\n                return;\n            }\n            cellEditArgs.cell = cellEditArgs.cell ? cellEditArgs.cell : cells[_this.getColIndex(cells, _this.getCellIdx(col.uid))];\n            cellEditArgs.row = cellEditArgs.row ? cellEditArgs.row : row;\n            cellEditArgs.columnObject = cellEditArgs.columnObject ? cellEditArgs.columnObject : col;\n            // cellEditArgs.columnObject.index = isNullOrUndefined(cellEditArgs.columnObject.index) ? 0 : cellEditArgs.columnObject.index;\n            _this.cellDetails = {\n                rowData: rowData, column: col, value: cellEditArgs.value, isForeignKey: cellEditArgs.isForeignKey, rowIndex: index,\n                cellIndex: parseInt(cellEditArgs.cell.getAttribute(literals.dataColIndex), 10),\n                foreignKeyData: cellEditArgs.foreignKeyData\n            };\n            if (cellEditArgs.cell.classList.contains('e-updatedtd')) {\n                _this.isColored = true;\n                cellEditArgs.cell.classList.remove('e-updatedtd');\n            }\n            gObj.isEdit = true;\n            gObj.clearSelection();\n            if (!gObj.isCheckBoxSelection || !gObj.isPersistSelection) {\n                gObj.selectRow(_this.cellDetails.rowIndex, true);\n            }\n            _this.renderer.update(cellEditArgs);\n            _this.parent.notify(events.batchEditFormRendered, cellEditArgs);\n            _this.form = select('#' + gObj.element.id + 'EditForm', gObj.element);\n            gObj.editModule.applyFormValidation([col]);\n            _this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n        });\n    };\n    BatchEdit.prototype.updateCell = function (rowIndex, field, value) {\n        var gObj = this.parent;\n        var col = gObj.getColumnByField(field);\n        var index = gObj.getColumnIndexByField(field);\n        if (col && !col.isPrimaryKey && col.allowEditing) {\n            var td_1 = getCellByColAndRowIndex(this.parent, col, rowIndex, index);\n            var rowObj_1 = gObj.getRowObjectFromUID(td_1.parentElement.getAttribute('data-uid'));\n            if (gObj.isEdit ||\n                (!rowObj_1.changes && ((!(value instanceof Date) && rowObj_1.data[\"\" + field] !== value) ||\n                    ((value instanceof Date) && new Date(rowObj_1.data[\"\" + field]).toString() !== new Date(value).toString()))) ||\n                (rowObj_1.changes && ((!(value instanceof Date) && rowObj_1.changes[\"\" + field] !== value) ||\n                    ((value instanceof Date) && new Date(rowObj_1.changes[\"\" + field]).toString() !== new Date(value).toString())))) {\n                this.refreshTD(td_1, col, rowObj_1, value);\n                var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n                    this.parent.parentDetails.parentInstObj.isReact;\n                if (((this.parent.isReact && this.parent.requireTemplateRef) || (isReactChild &&\n                    this.parent.parentDetails.parentInstObj.requireTemplateRef)) && col.template) {\n                    var thisRef_1 = this;\n                    var newReactTd_1 = this.newReactTd;\n                    thisRef_1.parent.renderTemplates(function () {\n                        thisRef_1.parent.trigger(events.queryCellInfo, {\n                            cell: newReactTd_1 || td_1, column: col, data: rowObj_1.changes\n                        });\n                    });\n                }\n                else if ((this.parent.isReact || isReactChild) && col.template) {\n                    this.parent.renderTemplates();\n                    this.parent.trigger(events.queryCellInfo, {\n                        cell: this.newReactTd || td_1, column: col, data: rowObj_1.changes\n                    });\n                }\n                else {\n                    this.parent.trigger(events.queryCellInfo, {\n                        cell: this.newReactTd || td_1, column: col, data: rowObj_1.changes\n                    });\n                }\n            }\n        }\n    };\n    BatchEdit.prototype.setChanges = function (rowObj, field, value) {\n        if (!rowObj.changes) {\n            rowObj.changes = extend({}, {}, rowObj.data, true);\n        }\n        if (!isNullOrUndefined(field)) {\n            if (typeof value === 'string') {\n                value = this.parent.sanitize(value);\n            }\n            DataUtil.setValue(field, value, rowObj.changes);\n        }\n        if (rowObj.data[\"\" + field] !== value) {\n            var type = this.parent.getColumnByField(field).type;\n            if ((type === 'date' || type === 'datetime')) {\n                if (new Date(rowObj.data[\"\" + field]).toString() !== new Date(value).toString()) {\n                    rowObj.isDirty = true;\n                }\n            }\n            else {\n                rowObj.isDirty = true;\n            }\n        }\n    };\n    BatchEdit.prototype.updateRow = function (index, data) {\n        var keys = Object.keys(data);\n        for (var _i = 0, keys_1 = keys; _i < keys_1.length; _i++) {\n            var col = keys_1[_i];\n            this.updateCell(index, col, data[\"\" + col]);\n        }\n    };\n    BatchEdit.prototype.getCellIdx = function (uid) {\n        var cIdx = this.parent.getColumnIndexByUid(uid) + this.parent.groupSettings.columns.length;\n        if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n            cIdx++;\n        }\n        if (this.parent.isRowDragable()) {\n            cIdx++;\n        }\n        return cIdx;\n    };\n    BatchEdit.prototype.refreshTD = function (td, column, rowObj, value) {\n        var cell = new CellRenderer(this.parent, this.serviceLocator);\n        value = column.type === 'number' && !isNullOrUndefined(value) ? parseFloat(value) : value;\n        if (rowObj) {\n            this.setChanges(rowObj, column.field, value);\n            refreshForeignData(rowObj, this.parent.getForeignKeyColumns(), rowObj.changes);\n        }\n        var rowcell = rowObj ? rowObj.cells : undefined;\n        var parentElement;\n        var cellIndex;\n        if (this.parent.isReact) {\n            parentElement = td.parentElement;\n            cellIndex = td.cellIndex;\n        }\n        var index = 0;\n        if (rowObj) {\n            cell.refreshTD(td, rowcell[this.getCellIdx(column.uid) - index], rowObj.changes, { 'index': this.getCellIdx(column.uid) });\n        }\n        if (this.parent.isReact) {\n            this.newReactTd = parentElement.cells[parseInt(cellIndex.toString(), 10)];\n            parentElement.cells[parseInt(cellIndex.toString(), 10)].classList.add('e-updatedtd');\n        }\n        else {\n            td.classList.add('e-updatedtd');\n        }\n        td.classList.add('e-updatedtd');\n        this.parent.notify(events.toolbarRefresh, {});\n    };\n    BatchEdit.prototype.getColIndex = function (cells, index) {\n        var cIdx = 0;\n        if (this.parent.allowGrouping && this.parent.groupSettings.columns) {\n            cIdx = this.parent.groupSettings.columns.length;\n        }\n        if (!isNullOrUndefined(this.parent.detailTemplate) || !isNullOrUndefined(this.parent.childGrid)) {\n            cIdx++;\n        }\n        if (this.parent.isRowDragable()) {\n            cIdx++;\n        }\n        for (var m = 0; m < cells.length; m++) {\n            var colIndex = parseInt(cells[parseInt(m.toString(), 10)].getAttribute(literals.dataColIndex), 10);\n            if (colIndex === index - cIdx) {\n                return m;\n            }\n        }\n        return -1;\n    };\n    BatchEdit.prototype.editNextValCell = function () {\n        var gObj = this.parent;\n        var insertedRows = gObj.element.querySelectorAll('.e-insertedrow');\n        var isSingleInsert = insertedRows.length === 1 ? true : false;\n        if (isSingleInsert && this.isAdded && !gObj.isEdit) {\n            var btmIdx = this.getBottomIndex();\n            for (var i = this.cellDetails.cellIndex; i < gObj.getColumns().length; i++) {\n                if (gObj.isEdit) {\n                    return;\n                }\n                var index = this.findNextEditableCell(this.cellDetails.cellIndex + 1, true, true);\n                var col = gObj.getColumns()[parseInt(index.toString(), 10)];\n                if (col) {\n                    if (this.parent.editSettings.newRowPosition === 'Bottom') {\n                        this.editCell(btmIdx, col.field, true);\n                    }\n                    else {\n                        var args = { index: 0, column: col };\n                        this.parent.notify(events.nextCellIndex, args);\n                        this.editCell(args.index, col.field, true);\n                    }\n                    this.saveCell();\n                }\n            }\n            if (!gObj.isEdit) {\n                this.isAdded = false;\n            }\n        }\n        else if (!isSingleInsert && this.isAdded && !gObj.isEdit) {\n            var editRowIdx = 0;\n            if (gObj.editSettings.newRowPosition === 'Bottom') {\n                var changes = this.getBatchChanges();\n                editRowIdx = gObj.getCurrentViewRecords().length - changes[literals.deletedRecords].length;\n            }\n            for (var i = 0; i < insertedRows.length; i++) {\n                if (!gObj.isEdit) {\n                    for (var j = 0; j < this.validationColObj.length; j++) {\n                        if (gObj.isEdit) {\n                            break;\n                        }\n                        else if (insertedRows[parseInt(i.toString(), 10)].querySelectorAll('td:not(.e-hide)')[this.validationColObj[parseInt(j.toString(), 10)].cellIdx].innerHTML === '') {\n                            this.editCell(parseInt(insertedRows[parseInt(i.toString(), 10)].getAttribute('data-rowindex'), 10), this.validationColObj[parseInt(j.toString(), 10)].field);\n                            if (this.validateFormObj()) {\n                                this.saveCell();\n                            }\n                        }\n                    }\n                }\n                else {\n                    break;\n                }\n            }\n            if (!gObj.isEdit) {\n                this.isAdded = false;\n            }\n        }\n    };\n    BatchEdit.prototype.escapeCellEdit = function () {\n        var args = this.generateCellArgs();\n        args.value = args.previousValue;\n        if (args.value || !this.cellDetails.column.validationRules) {\n            this.successCallBack(args, args.cell.parentElement, args.column, true)(args);\n        }\n    };\n    BatchEdit.prototype.generateCellArgs = function () {\n        var gObj = this.parent;\n        this.parent.element.classList.remove('e-editing');\n        var column = this.cellDetails.column;\n        var obj = {};\n        obj[column.field] = getObject(column.field, this.cellDetails.rowData);\n        var editedData = gObj.editModule.getCurrentEditedData(this.form, obj);\n        var cloneEditedData = extend({}, editedData);\n        editedData = extend({}, editedData, this.cellDetails.rowData);\n        var value = getObject(column.field, cloneEditedData);\n        if (!isNullOrUndefined(column.field) && !isUndefined(value)) {\n            setValue(column.field, value, editedData);\n        }\n        var args = {\n            columnName: column.field,\n            value: getObject(column.field, editedData),\n            rowData: this.cellDetails.rowData,\n            column: column,\n            previousValue: this.cellDetails.value,\n            isForeignKey: this.cellDetails.isForeignKey,\n            cancel: false\n        };\n        args.cell = this.form.parentElement;\n        args.columnObject = column;\n        return args;\n    };\n    BatchEdit.prototype.saveCell = function (isForceSave) {\n        if (this.preventSaveCell || !this.form) {\n            return;\n        }\n        var gObj = this.parent;\n        if (!isForceSave && (!gObj.isEdit || this.validateFormObj())) {\n            return;\n        }\n        this.preventSaveCell = true;\n        var args = this.generateCellArgs();\n        var tr = args.cell.parentElement;\n        var col = args.column;\n        args.cell.removeAttribute('aria-label');\n        if (!isForceSave) {\n            gObj.trigger(events.cellSave, args, this.successCallBack(args, tr, col));\n            gObj.notify(events.batchForm, { formObj: this.form });\n        }\n        else {\n            this.successCallBack(args, tr, col)(args);\n        }\n    };\n    BatchEdit.prototype.successCallBack = function (cellSaveArgs, tr, column, isEscapeCellEdit) {\n        var _this = this;\n        return function (cellSaveArgs) {\n            var gObj = _this.parent;\n            cellSaveArgs.cell = cellSaveArgs.cell ? cellSaveArgs.cell : _this.form.parentElement;\n            cellSaveArgs.columnObject = cellSaveArgs.columnObject ? cellSaveArgs.columnObject : column;\n            // cellSaveArgs.columnObject.index = isNullOrUndefined(cellSaveArgs.columnObject.index) ? 0 : cellSaveArgs.columnObject.index;\n            if (cellSaveArgs.cancel) {\n                _this.preventSaveCell = false;\n                if (_this.editNext) {\n                    _this.editNext = false;\n                    if (_this.cellDetails.rowIndex === _this.index && _this.cellDetails.column.field === _this.field) {\n                        return;\n                    }\n                    _this.editCellExtend(_this.index, _this.field, _this.isAdd);\n                }\n                return;\n            }\n            gObj.editModule.destroyWidgets([column]);\n            gObj.isEdit = false;\n            gObj.editModule.destroyForm();\n            _this.parent.notify(events.tooltipDestroy, {});\n            var rowObj = gObj.getRowObjectFromUID(tr.getAttribute('data-uid'));\n            _this.refreshTD(cellSaveArgs.cell, column, rowObj, cellSaveArgs.value);\n            if (_this.parent.isReact) {\n                cellSaveArgs.cell = _this.newReactTd;\n            }\n            removeClass([tr], [literals.editedRow, 'e-batchrow']);\n            removeClass([cellSaveArgs.cell], ['e-editedbatchcell', 'e-boolcell']);\n            if (!isNullOrUndefined(cellSaveArgs.value) && cellSaveArgs.value.toString() ===\n                (!isNullOrUndefined(_this.cellDetails.value) ? _this.cellDetails.value : '').toString() && !_this.isColored\n                || (isNullOrUndefined(cellSaveArgs.value) && isNullOrUndefined(rowObj.data[column.field]) &&\n                    isNullOrUndefined(_this.cellDetails.value) && !cellSaveArgs.cell.parentElement.classList.contains('e-insertedrow'))) {\n                cellSaveArgs.cell.classList.remove('e-updatedtd');\n            }\n            if (isNullOrUndefined(isEscapeCellEdit)) {\n                var isReactCompiler = gObj.isReact && column.template && typeof (column.template) !== 'string';\n                var isReactChild = gObj.parentDetails && gObj.parentDetails.parentInstObj\n                    && gObj.parentDetails.parentInstObj.isReact;\n                if (isReactCompiler || isReactChild) {\n                    if (gObj.requireTemplateRef) {\n                        gObj.renderTemplates(function () {\n                            gObj.trigger(events.cellSaved, cellSaveArgs);\n                        });\n                    }\n                    else {\n                        gObj.renderTemplates();\n                        gObj.trigger(events.cellSaved, cellSaveArgs);\n                    }\n                }\n                else {\n                    gObj.trigger(events.cellSaved, cellSaveArgs);\n                }\n            }\n            gObj.notify(events.toolbarRefresh, {});\n            _this.isColored = false;\n            if (_this.parent.aggregates.length > 0) {\n                if (!(_this.parent.isReact || _this.parent.isVue)) {\n                    _this.parent.notify(events.refreshFooterRenderer, {});\n                }\n                if (_this.parent.groupSettings.columns.length > 0 && !_this.isAddRow(_this.cellDetails.rowIndex)) {\n                    _this.parent.notify(events.groupAggregates, {});\n                }\n                if (_this.parent.isReact || _this.parent.isVue) {\n                    _this.parent.notify(events.refreshFooterRenderer, {});\n                }\n            }\n            _this.preventSaveCell = false;\n            if (_this.editNext) {\n                _this.editNext = false;\n                if (_this.cellDetails.rowIndex === _this.index && _this.cellDetails.column.field === _this.field && _this.prevEditedBatchCell) {\n                    return;\n                }\n                var col = gObj.getColumnByField(_this.field);\n                if (col && (col.allowEditing || (!col.allowEditing && gObj.focusModule.active\n                    && gObj.focusModule.active.getTable().rows[_this.crtRowIndex]\n                    && gObj.focusModule.active.getTable().rows[_this.crtRowIndex].classList.contains('e-insertedrow')))) {\n                    _this.editCellExtend(_this.index, _this.field, _this.isAdd);\n                }\n            }\n            if (isEscapeCellEdit) {\n                gObj.notify(events.restoreFocus, {});\n            }\n        };\n    };\n    BatchEdit.prototype.prevEditedBatchCellMatrix = function () {\n        var editedBatchCellMatrix = [];\n        var gObj = this.parent;\n        var editedBatchCell = gObj.focusModule.active.getTable().querySelector('.e-editedbatchcell');\n        if (editedBatchCell) {\n            var tr = editedBatchCell.parentElement;\n            var rowIndex = [].slice.call(this.parent.focusModule.active.getTable().rows).indexOf(tr);\n            var cellIndex = [].slice.call(tr.cells).indexOf(editedBatchCell);\n            editedBatchCellMatrix = [rowIndex, cellIndex];\n        }\n        return editedBatchCellMatrix;\n    };\n    BatchEdit.prototype.getDataByIndex = function (index) {\n        var row = this.parent.getRowObjectFromUID(this.parent.getDataRows()[parseInt(index.toString(), 10)].getAttribute('data-uid'));\n        return row.changes ? row.changes : row.data;\n    };\n    BatchEdit.prototype.keyDownHandler = function (e) {\n        if (this.addBatchRow || ((e.action === 'tab' || e.action === 'shiftTab') && this.parent.isEdit)) {\n            var gObj = this.parent;\n            var btmIdx = this.getBottomIndex();\n            var rowcell = parentsUntil(e.target, literals.rowCell);\n            if (this.addBatchRow || (rowcell && !this.parent.isReact)) {\n                var cell = void 0;\n                if (rowcell) {\n                    cell = rowcell.querySelector('.e-field');\n                }\n                if (this.addBatchRow || cell) {\n                    var visibleColumns = this.parent.getVisibleColumns();\n                    var columnIndex = e.action === 'tab' ? visibleColumns.length - 1 : 0;\n                    if (this.addBatchRow\n                        || visibleColumns[parseInt(columnIndex.toString(), 10)].field === cell.getAttribute('id').slice(this.parent.element.id.length)) {\n                        if (this.cellDetails.rowIndex === btmIdx && e.action === 'tab') {\n                            if (gObj.editSettings.newRowPosition === 'Top') {\n                                gObj.editSettings.newRowPosition = 'Bottom';\n                                this.addRecord();\n                                gObj.editSettings.newRowPosition = 'Top';\n                            }\n                            else {\n                                this.addRecord();\n                            }\n                            this.addBatchRow = false;\n                        }\n                        else {\n                            this.saveCell();\n                        }\n                    }\n                }\n            }\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    BatchEdit.prototype.addCancelWhilePaging = function () {\n        if (this.validateFormObj()) {\n            this.parent.notify(events.destroyForm, {});\n            this.parent.isEdit = false;\n            this.editNext = false;\n            this.mouseDownElement = undefined;\n            this.isColored = false;\n        }\n    };\n    BatchEdit.prototype.getBottomIndex = function () {\n        var changes = this.getBatchChanges();\n        return this.parent.getCurrentViewRecords().length + changes[literals.addedRecords].length -\n            changes[literals.deletedRecords].length - 1;\n    };\n    return BatchEdit;\n}());\nexport { BatchEdit };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { NormalEdit } from './normal-edit';\n/**\n * `DialogEdit` module is used to handle dialog editing actions.\n *\n * @hidden\n */\nvar DialogEdit = /** @class */ (function (_super) {\n    __extends(DialogEdit, _super);\n    function DialogEdit(parent, serviceLocator, renderer) {\n        var _this = \n        //constructor\n        _super.call(this, parent, serviceLocator) || this;\n        _this.parent = parent;\n        _this.serviceLocator = serviceLocator;\n        _this.renderer = renderer;\n        return _this;\n    }\n    DialogEdit.prototype.closeEdit = function () {\n        //closeEdit\n        _super.prototype.closeEdit.call(this);\n    };\n    DialogEdit.prototype.addRecord = function (data, index) {\n        //addRecord\n        _super.prototype.addRecord.call(this, data, index);\n    };\n    DialogEdit.prototype.endEdit = function () {\n        //endEdit\n        _super.prototype.endEdit.call(this);\n    };\n    DialogEdit.prototype.updateRow = function (index, data) {\n        _super.prototype.updateRow.call(this, index, data);\n    };\n    DialogEdit.prototype.deleteRecord = function (fieldname, data) {\n        //deleteRecord\n        _super.prototype.deleteRecord.call(this, fieldname, data);\n    };\n    DialogEdit.prototype.startEdit = function (tr) {\n        _super.prototype.startEdit.call(this, tr);\n    };\n    return DialogEdit;\n}(NormalEdit));\nexport { DialogEdit };\n","import { L10n, getValue, getDefaultDateObject, cldrData } from '@syncfusion/ej2-base';\nvar ARROWLEFT = 'ArrowLeft';\nvar ARROWRIGHT = 'ArrowRight';\nvar ARROWUP = 'ArrowUp';\nvar ARROWDOWN = 'ArrowDown';\nvar TAB = 'Tab';\nvar SHIFTTAB = 'shiftTab';\nvar END = 'End';\nvar HOME = 'Home';\nvar MaskedDateTime = /** @class */ (function () {\n    function MaskedDateTime(parent) {\n        this.mask = '';\n        this.defaultConstant = {\n            day: 'day',\n            month: 'month',\n            year: 'year',\n            hour: 'hour',\n            minute: 'minute',\n            second: 'second',\n            dayOfTheWeek: 'day of the week'\n        };\n        this.hiddenMask = '';\n        this.validCharacters = 'dMyhmHfasz';\n        this.isDayPart = false;\n        this.isMonthPart = false;\n        this.isYearPart = false;\n        this.isHourPart = false;\n        this.isMinutePart = false;\n        this.isSecondsPart = false;\n        this.isMilliSecondsPart = false;\n        this.monthCharacter = '';\n        this.periodCharacter = '';\n        this.isHiddenMask = false;\n        this.isComplete = false;\n        this.isNavigate = false;\n        this.navigated = false;\n        this.isBlur = false;\n        this.formatRegex = /EEEEE|EEEE|EEE|EE|E|dddd|ddd|dd|d|MMMM|MMM|MM|M|yyyy|yy|y|HH|H|hh|h|mm|m|fff|ff|f|aa|a|ss|s|zzzz|zzz|zz|z|'[^']*'|'[^']*'/g;\n        this.isDeletion = false;\n        this.isShortYear = false;\n        this.isDeleteKey = false;\n        this.isDateZero = false;\n        this.isMonthZero = false;\n        this.isYearZero = false;\n        this.isLeadingZero = false;\n        this.dayTypeCount = 0;\n        this.monthTypeCount = 0;\n        this.hourTypeCount = 0;\n        this.minuteTypeCount = 0;\n        this.secondTypeCount = 0;\n        this.parent = parent;\n        this.dateformat = this.getCulturedFormat();\n        this.maskDateValue = this.parent.value != null ? new Date(+this.parent.value) : new Date();\n        this.maskDateValue.setMonth(0);\n        this.maskDateValue.setHours(0);\n        this.maskDateValue.setMinutes(0);\n        this.maskDateValue.setSeconds(0);\n        this.previousDate = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n        this.removeEventListener();\n        this.addEventListener();\n    }\n    MaskedDateTime.prototype.getModuleName = function () {\n        return 'MaskedDateTime';\n    };\n    MaskedDateTime.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.on('createMask', this.createMask, this);\n        this.parent.on('setMaskSelection', this.validCharacterCheck, this);\n        this.parent.on('inputHandler', this.maskInputHandler, this);\n        this.parent.on('keyDownHandler', this.maskKeydownHandler, this);\n        this.parent.on('clearHandler', this.clearHandler, this);\n    };\n    MaskedDateTime.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.off('createMask', this.createMask);\n        this.parent.off('setMaskSelection', this.validCharacterCheck);\n        this.parent.off('inputHandler', this.maskInputHandler);\n        this.parent.off('keyDownHandler', this.maskKeydownHandler);\n        this.parent.off('clearHandler', this.clearHandler);\n    };\n    MaskedDateTime.prototype.createMask = function (mask) {\n        this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = false;\n        this.dateformat = this.getCulturedFormat();\n        if (this.parent.maskPlaceholder.day) {\n            this.defaultConstant['day'] = this.parent.maskPlaceholder.day;\n        }\n        if (this.parent.maskPlaceholder.month) {\n            this.defaultConstant['month'] = this.parent.maskPlaceholder.month;\n        }\n        if (this.parent.maskPlaceholder.year) {\n            this.defaultConstant['year'] = this.parent.maskPlaceholder.year;\n        }\n        if (this.parent.maskPlaceholder.hour) {\n            this.defaultConstant['hour'] = this.parent.maskPlaceholder.hour;\n        }\n        if (this.parent.maskPlaceholder.minute) {\n            this.defaultConstant['minute'] = this.parent.maskPlaceholder.minute;\n        }\n        if (this.parent.maskPlaceholder.second) {\n            this.defaultConstant['second'] = this.parent.maskPlaceholder.second;\n        }\n        if (this.parent.maskPlaceholder.dayOfTheWeek) {\n            this.defaultConstant['dayOfTheWeek'] = this.parent.maskPlaceholder.dayOfTheWeek.toString();\n        }\n        this.getCUltureMaskFormat();\n        var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n        this.isHiddenMask = true;\n        this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n        this.isHiddenMask = false;\n        this.previousHiddenMask = this.hiddenMask;\n        this.mask = this.previousValue = inputValue;\n        this.parent.maskedDateValue = this.mask;\n        if (this.parent.value) {\n            this.navigated = true;\n            this.isBlur = mask.isBlur;\n            this.setDynamicValue();\n        }\n    };\n    MaskedDateTime.prototype.getCUltureMaskFormat = function () {\n        this.l10n = new L10n(this.parent.moduleName, this.defaultConstant, this.parent.locale);\n        this.objectString = Object.keys(this.defaultConstant);\n        for (var i = 0; i < this.objectString.length; i++) {\n            this.defaultConstant[this.objectString[i].toString()] =\n                this.l10n.getConstant(this.objectString[i].toString());\n        }\n    };\n    MaskedDateTime.prototype.validCharacterCheck = function () {\n        var start = this.parent.inputElement.selectionStart;\n        if (this.parent.moduleName !== 'timepicker') {\n            if (start === this.hiddenMask.length && this.mask === this.parent.inputElement.value) {\n                start = 0;\n            }\n        }\n        for (var i = start, j = start - 1; i < this.hiddenMask.length || j >= 0; i++, j--) {\n            if (i < this.hiddenMask.length && this.validCharacters.indexOf(this.hiddenMask[i]) !== -1) {\n                this.setSelection(this.hiddenMask[i]);\n                return;\n            }\n            if (j >= 0 && this.validCharacters.indexOf(this.hiddenMask[j]) !== -1) {\n                this.setSelection(this.hiddenMask[j]);\n                return;\n            }\n        }\n    };\n    MaskedDateTime.prototype.setDynamicValue = function () {\n        this.maskDateValue = new Date(+this.parent.value);\n        this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = true;\n        this.updateValue();\n        if (!this.isBlur) {\n            this.validCharacterCheck();\n        }\n    };\n    MaskedDateTime.prototype.setSelection = function (validChar) {\n        var start = -1;\n        var end = 0;\n        for (var i = 0; i < this.hiddenMask.length; i++) {\n            if (this.hiddenMask[i] === validChar) {\n                end = i + 1;\n                if (start === -1) {\n                    start = i;\n                }\n            }\n        }\n        if (start < 0) {\n            start = 0;\n        }\n        this.parent.inputElement.setSelectionRange(start, end);\n    };\n    MaskedDateTime.prototype.maskKeydownHandler = function (args) {\n        this.dayTypeCount = this.monthTypeCount = this.hourTypeCount = this.minuteTypeCount = this.secondTypeCount = 0;\n        if (args.e.key === 'Delete') {\n            this.isDeleteKey = true;\n            return;\n        }\n        if ((!args.e.altKey && !args.e.ctrlKey) && (args.e.key === ARROWLEFT || args.e.key === ARROWRIGHT\n            || args.e.key === SHIFTTAB || args.e.key === TAB || args.e.action === SHIFTTAB ||\n            args.e.key === END || args.e.key === HOME)) {\n            var start = this.parent.inputElement.selectionStart;\n            var end = this.parent.inputElement.selectionEnd;\n            var length_1 = this.parent.inputElement.value.length;\n            if ((start === 0 && end === length_1) && (args.e.key === TAB || args.e.action === SHIFTTAB)) {\n                var index = args.e.action === SHIFTTAB ? end : 0;\n                this.parent.inputElement.selectionStart = this.parent.inputElement.selectionEnd = index;\n            }\n            if (args.e.key === END || args.e.key === HOME) {\n                var range = args.e.key === END ? length_1 : 0;\n                this.parent.inputElement.selectionStart = this.parent.inputElement.selectionEnd = range;\n            }\n            this.navigateSelection(args.e.key === ARROWLEFT || args.e.action === SHIFTTAB || args.e.key === END ? true : false);\n        }\n        if ((!args.e.altKey && !args.e.ctrlKey) && (args.e.key === ARROWUP || args.e.key === ARROWDOWN)) {\n            var start = this.parent.inputElement.selectionStart;\n            var formatText = '';\n            if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n                formatText = this.hiddenMask[start];\n            }\n            this.dateAlteration(args.e.key === ARROWDOWN ? true : false);\n            var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n            this.isHiddenMask = true;\n            this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n            this.isHiddenMask = false;\n            this.previousHiddenMask = this.hiddenMask;\n            this.previousValue = inputValue;\n            this.parent.inputElement.value = inputValue;\n            for (var i = 0; i < this.hiddenMask.length; i++) {\n                if (formatText === this.hiddenMask[i]) {\n                    start = i;\n                    break;\n                }\n            }\n            this.parent.inputElement.selectionStart = start;\n            this.validCharacterCheck();\n        }\n    };\n    MaskedDateTime.prototype.isPersist = function () {\n        var isPersist = this.parent.isFocused || this.navigated;\n        return isPersist;\n    };\n    MaskedDateTime.prototype.differenceCheck = function () {\n        var start = this.parent.inputElement.selectionStart;\n        var inputValue = this.parent.inputElement.value;\n        var previousVal = this.previousValue.substring(0, start + this.previousValue.length - inputValue.length);\n        var newVal = inputValue.substring(0, start);\n        var newDateValue = new Date(+this.maskDateValue);\n        var maxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n        if (previousVal.indexOf(newVal) === 0 && (newVal.length === 0 ||\n            this.previousHiddenMask[newVal.length - 1] !== this.previousHiddenMask[newVal.length])) {\n            for (var i = newVal.length; i < previousVal.length; i++) {\n                if (this.previousHiddenMask[i] !== '' && this.validCharacters.indexOf(this.previousHiddenMask[i]) >= 0) {\n                    this.isDeletion = this.handleDeletion(this.previousHiddenMask[i], false);\n                }\n            }\n            if (this.isDeletion) {\n                return;\n            }\n        }\n        switch (this.previousHiddenMask[start - 1]) {\n            case 'd':\n                {\n                    var date = (this.isDayPart && newDateValue.getDate().toString().length < 2 &&\n                        !this.isPersist() ? newDateValue.getDate() * 10 : 0) + parseInt(newVal[start - 1], 10);\n                    this.isDateZero = (newVal[start - 1] === '0');\n                    this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n                    this.navigated = this.navigated ? false : this.navigated;\n                    if (isNaN(date)) {\n                        return;\n                    }\n                    for (var i = 0; date > maxDate; i++) {\n                        date = parseInt(date.toString().slice(1), 10);\n                    }\n                    if (date >= 1) {\n                        newDateValue.setDate(date);\n                        this.isNavigate = date.toString().length === 2;\n                        this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n                        if (newDateValue.getMonth() !== this.maskDateValue.getMonth()) {\n                            return;\n                        }\n                        this.isDayPart = true;\n                        this.dayTypeCount = this.dayTypeCount + 1;\n                    }\n                    else {\n                        this.isDayPart = false;\n                        this.dayTypeCount = this.isDateZero ? this.dayTypeCount + 1 : this.dayTypeCount;\n                    }\n                    break;\n                }\n            case 'M':\n                {\n                    var month = void 0;\n                    if (newDateValue.getMonth().toString().length < 2 && !this.isPersist()) {\n                        month = (this.isMonthPart ? (newDateValue.getMonth() + 1) * 10 : 0) + parseInt(newVal[start - 1], 10);\n                    }\n                    else {\n                        month = parseInt(newVal[start - 1], 10);\n                    }\n                    this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n                    this.navigated = this.navigated ? false : this.navigated;\n                    this.isMonthZero = (newVal[start - 1] === '0');\n                    if (!isNaN(month)) {\n                        while (month > 12) {\n                            month = parseInt(month.toString().slice(1), 10);\n                        }\n                        if (month >= 1) {\n                            newDateValue.setMonth(month - 1);\n                            if (month >= 10 || month == 1) {\n                                if (this.isLeadingZero && month == 1) {\n                                    this.isNavigate = month.toString().length === 1;\n                                    this.isLeadingZero = false;\n                                }\n                                else {\n                                    this.isNavigate = month.toString().length === 2;\n                                }\n                            }\n                            else {\n                                this.isNavigate = month.toString().length === 1;\n                            }\n                            if (newDateValue.getMonth() !== month - 1) {\n                                newDateValue.setDate(1);\n                                newDateValue.setMonth(month - 1);\n                            }\n                            if (this.isDayPart) {\n                                var previousMaxDate = new Date(this.previousDate.getFullYear(), this.previousDate.getMonth() + 1, 0).getDate();\n                                var currentMaxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n                                if (this.previousDate.getDate() === previousMaxDate && currentMaxDate <= previousMaxDate) {\n                                    newDateValue.setDate(currentMaxDate);\n                                }\n                            }\n                            this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n                            this.isMonthPart = true;\n                            this.monthTypeCount = this.monthTypeCount + 1;\n                        }\n                        else {\n                            newDateValue.setMonth(0);\n                            this.isLeadingZero = true;\n                            this.isMonthPart = false;\n                            this.monthTypeCount = this.isMonthZero ? this.monthTypeCount + 1 : this.monthTypeCount;\n                        }\n                    }\n                    else {\n                        var monthString = (this.getCulturedValue('months[stand-alone].wide'));\n                        var monthValue = Object.keys(monthString);\n                        this.monthCharacter += newVal[start - 1].toLowerCase();\n                        while (this.monthCharacter.length > 0) {\n                            var i = 1;\n                            for (var _i = 0, monthValue_1 = monthValue; _i < monthValue_1.length; _i++) {\n                                var months = monthValue_1[_i];\n                                if (monthString[i].toLowerCase().indexOf(this.monthCharacter) === 0) {\n                                    newDateValue.setMonth(i - 1);\n                                    this.isMonthPart = true;\n                                    this.maskDateValue = newDateValue;\n                                    return;\n                                }\n                                i++;\n                            }\n                            this.monthCharacter = this.monthCharacter.substring(1, this.monthCharacter.length);\n                        }\n                    }\n                    break;\n                }\n            case 'y':\n                {\n                    var year = (this.isYearPart && (newDateValue.getFullYear().toString().length < 4\n                        && !this.isShortYear) ? newDateValue.getFullYear() * 10 : 0) + parseInt(newVal[start - 1], 10);\n                    var yearValue = (this.dateformat.match(/y/g) || []).length;\n                    this.isShortYear = false;\n                    this.isYearZero = (newVal[start - 1] === '0');\n                    if (isNaN(year)) {\n                        return;\n                    }\n                    while (year > 9999) {\n                        year = parseInt(year.toString().slice(1), 10);\n                    }\n                    if (year < 1) {\n                        this.isYearPart = false;\n                    }\n                    else {\n                        newDateValue.setFullYear(year);\n                        if (year.toString().length === yearValue) {\n                            this.isNavigate = true;\n                        }\n                        this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n                        this.isYearPart = true;\n                    }\n                    break;\n                }\n            case 'h':\n                this.hour = (this.isHourPart && (newDateValue.getHours() % 12 || 12).toString().length < 2\n                    && !this.isPersist() ? (newDateValue.getHours() % 12 || 12) * 10 : 0) + parseInt(newVal[start - 1], 10);\n                this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n                this.navigated = this.navigated ? false : this.navigated;\n                if (isNaN(this.hour)) {\n                    return;\n                }\n                while (this.hour > 12) {\n                    this.hour = parseInt(this.hour.toString().slice(1), 10);\n                }\n                newDateValue.setHours(Math.floor(newDateValue.getHours() / 12) * 12 + (this.hour % 12));\n                this.isNavigate = this.hour.toString().length === 2;\n                this.isHourPart = true;\n                this.hourTypeCount = this.hourTypeCount + 1;\n                break;\n            case 'H':\n                this.hour = (this.isHourPart && newDateValue.getHours().toString().length < 2 &&\n                    !this.isPersist() ? newDateValue.getHours() * 10 : 0) + parseInt(newVal[start - 1], 10);\n                this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n                this.navigated = this.navigated ? false : this.navigated;\n                if (isNaN(this.hour)) {\n                    return;\n                }\n                for (var i = 0; this.hour > 23; i++) {\n                    this.hour = parseInt(this.hour.toString().slice(1), 10);\n                }\n                newDateValue.setHours(this.hour);\n                this.isNavigate = this.hour.toString().length === 2;\n                this.isHourPart = true;\n                this.hourTypeCount = this.hourTypeCount + 1;\n                break;\n            case 'm':\n                {\n                    var minutes = (this.isMinutePart && newDateValue.getMinutes().toString().length < 2\n                        && !this.isPersist() ? newDateValue.getMinutes() * 10 : 0) + parseInt(newVal[start - 1], 10);\n                    this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n                    this.navigated = this.navigated ? false : this.navigated;\n                    if (isNaN(minutes)) {\n                        return;\n                    }\n                    for (var i = 0; minutes > 59; i++) {\n                        minutes = parseInt(minutes.toString().slice(1), 10);\n                    }\n                    newDateValue.setMinutes(minutes);\n                    this.isNavigate = minutes.toString().length === 2;\n                    this.isMinutePart = true;\n                    this.minuteTypeCount = this.minuteTypeCount + 1;\n                    break;\n                }\n            case 's':\n                {\n                    var seconds = (this.isSecondsPart && newDateValue.getSeconds().toString().length < 2 &&\n                        !this.isPersist() ? newDateValue.getSeconds() * 10 : 0) + parseInt(newVal[start - 1], 10);\n                    this.parent.isFocused = this.parent.isFocused ? false : this.parent.isFocused;\n                    this.navigated = this.navigated ? false : this.navigated;\n                    if (isNaN(seconds)) {\n                        return;\n                    }\n                    for (var i = 0; seconds > 59; i++) {\n                        seconds = parseInt(seconds.toString().slice(1), 10);\n                    }\n                    newDateValue.setSeconds(seconds);\n                    this.isNavigate = seconds.toString().length === 2;\n                    this.isSecondsPart = true;\n                    this.secondTypeCount = this.secondTypeCount + 1;\n                    break;\n                }\n            case 'a':\n                {\n                    this.periodCharacter += newVal[start - 1].toLowerCase();\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    var periodString = (this.getCulturedValue('dayPeriods.format.wide'));\n                    var periodkeys = Object.keys(periodString);\n                    for (var i = 0; this.periodCharacter.length > 0; i++) {\n                        if ((periodString[periodkeys[0]].toLowerCase().indexOf(this.periodCharacter) === 0\n                            && newDateValue.getHours() >= 12) || (periodString[periodkeys[1]].toLowerCase().\n                            indexOf(this.periodCharacter) === 0 && newDateValue.getHours() < 12)) {\n                            newDateValue.setHours((newDateValue.getHours() + 12) % 24);\n                            this.maskDateValue = newDateValue;\n                        }\n                        this.periodCharacter = this.periodCharacter.substring(1, this.periodCharacter.length);\n                    }\n                    break;\n                }\n            default:\n                break;\n        }\n        this.maskDateValue = newDateValue;\n    };\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    MaskedDateTime.prototype.formatCheck = function () {\n        // eslint-disable-next-line @typescript-eslint/no-this-alias\n        var proxy = this;\n        function formatValueSpecifier(formattext) {\n            var result;\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            var daysAbbreviated = proxy.getCulturedValue('days[stand-alone].abbreviated');\n            var dayKeyAbbreviated = Object.keys(daysAbbreviated);\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            var daysWide = (proxy.getCulturedValue('days[stand-alone].wide'));\n            var dayKeyWide = Object.keys(daysWide);\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            var daysNarrow = (proxy.getCulturedValue('days[stand-alone].narrow'));\n            var dayKeyNarrow = Object.keys(daysNarrow);\n            var monthAbbreviated = (proxy.getCulturedValue('months[stand-alone].abbreviated'));\n            var monthWide = (proxy.getCulturedValue('months[stand-alone].wide'));\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            var periodString = (proxy.getCulturedValue('dayPeriods.format.wide'));\n            var periodkeys = Object.keys(periodString);\n            var milliseconds;\n            var dateOptions;\n            switch (formattext) {\n                case 'ddd':\n                case 'dddd':\n                case 'd':\n                    result = proxy.isDayPart ? proxy.maskDateValue.getDate().toString() : proxy.defaultConstant['day'].toString();\n                    result = proxy.zeroCheck(proxy.isDateZero, proxy.isDayPart, result);\n                    if (proxy.dayTypeCount === 2) {\n                        proxy.isNavigate = true;\n                        proxy.dayTypeCount = 0;\n                    }\n                    break;\n                case 'dd':\n                    result = proxy.isDayPart ? proxy.roundOff(proxy.maskDateValue.getDate(), 2) : proxy.defaultConstant['day'].toString();\n                    result = proxy.zeroCheck(proxy.isDateZero, proxy.isDayPart, result);\n                    if (proxy.dayTypeCount === 2) {\n                        proxy.isNavigate = true;\n                        proxy.dayTypeCount = 0;\n                    }\n                    break;\n                case 'E':\n                case 'EE':\n                case 'EEE':\n                    result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysAbbreviated[dayKeyAbbreviated[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n                    break;\n                case 'EEEE':\n                    result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysWide[dayKeyWide[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n                    break;\n                case 'EEEEE':\n                    result = proxy.isDayPart && proxy.isMonthPart && proxy.isYearPart ? daysNarrow[dayKeyNarrow[proxy.maskDateValue.getDay()]].toString() : proxy.defaultConstant['dayOfTheWeek'].toString();\n                    break;\n                case 'M':\n                    result = proxy.isMonthPart ? (proxy.maskDateValue.getMonth() + 1).toString() : proxy.defaultConstant['month'].toString();\n                    result = proxy.zeroCheck(proxy.isMonthZero, proxy.isMonthPart, result);\n                    if (proxy.monthTypeCount === 2) {\n                        proxy.isNavigate = true;\n                        proxy.monthTypeCount = 0;\n                    }\n                    break;\n                case 'MM':\n                    result = proxy.isMonthPart ? proxy.roundOff(proxy.maskDateValue.getMonth() + 1, 2) : proxy.defaultConstant['month'].toString();\n                    result = proxy.zeroCheck(proxy.isMonthZero, proxy.isMonthPart, result);\n                    if (proxy.monthTypeCount === 2) {\n                        proxy.isNavigate = true;\n                        proxy.monthTypeCount = 0;\n                    }\n                    break;\n                case 'MMM':\n                    result = proxy.isMonthPart ? monthAbbreviated[proxy.maskDateValue.getMonth() + 1] : proxy.defaultConstant['month'].toString();\n                    break;\n                case 'MMMM':\n                    result = proxy.isMonthPart ? monthWide[proxy.maskDateValue.getMonth() + 1] : proxy.defaultConstant['month'].toString();\n                    break;\n                case 'yy':\n                    result = proxy.isYearPart ? proxy.roundOff(proxy.maskDateValue.getFullYear() % 100, 2) : proxy.defaultConstant['year'].toString();\n                    result = proxy.zeroCheck(proxy.isYearZero, proxy.isYearPart, result);\n                    break;\n                case 'y':\n                case 'yyyy':\n                    result = proxy.isYearPart ? proxy.roundOff(proxy.maskDateValue.getFullYear(), 4) : proxy.defaultConstant['year'].toString();\n                    result = proxy.zeroCheck(proxy.isYearZero, proxy.isYearPart, result);\n                    break;\n                case 'h':\n                    result = proxy.isHourPart ? (proxy.maskDateValue.getHours() % 12 || 12).toString() : proxy.defaultConstant['hour'].toString();\n                    if (proxy.hourTypeCount === 2) {\n                        proxy.isNavigate = true;\n                        proxy.hourTypeCount = 0;\n                    }\n                    break;\n                case 'hh':\n                    result = proxy.isHourPart ? proxy.roundOff(proxy.maskDateValue.getHours() % 12 || 12, 2) : proxy.defaultConstant['hour'].toString();\n                    if (proxy.hourTypeCount === 2) {\n                        proxy.isNavigate = true;\n                        proxy.hourTypeCount = 0;\n                    }\n                    break;\n                case 'H':\n                    result = proxy.isHourPart ? proxy.maskDateValue.getHours().toString() : proxy.defaultConstant['hour'].toString();\n                    if (proxy.hourTypeCount === 2) {\n                        proxy.isNavigate = true;\n                        proxy.hourTypeCount = 0;\n                    }\n                    break;\n                case 'HH':\n                    result = proxy.isHourPart ? proxy.roundOff(proxy.maskDateValue.getHours(), 2) : proxy.defaultConstant['hour'].toString();\n                    if (proxy.hourTypeCount === 2) {\n                        proxy.isNavigate = true;\n                        proxy.hourTypeCount = 0;\n                    }\n                    break;\n                case 'm':\n                    result = proxy.isMinutePart ? proxy.maskDateValue.getMinutes().toString() : proxy.defaultConstant['minute'].toString();\n                    if (proxy.minuteTypeCount === 2) {\n                        proxy.isNavigate = true;\n                        proxy.minuteTypeCount = 0;\n                    }\n                    break;\n                case 'mm':\n                    result = proxy.isMinutePart ? proxy.roundOff(proxy.maskDateValue.getMinutes(), 2) : proxy.defaultConstant['minute'].toString();\n                    if (proxy.minuteTypeCount === 2) {\n                        proxy.isNavigate = true;\n                        proxy.minuteTypeCount = 0;\n                    }\n                    break;\n                case 's':\n                    result = proxy.isSecondsPart ? proxy.maskDateValue.getSeconds().toString() : proxy.defaultConstant['second'].toString();\n                    if (proxy.secondTypeCount === 2) {\n                        proxy.isNavigate = true;\n                        proxy.secondTypeCount = 0;\n                    }\n                    break;\n                case 'ss':\n                    result = proxy.isSecondsPart ? proxy.roundOff(proxy.maskDateValue.getSeconds(), 2) : proxy.defaultConstant['second'].toString();\n                    if (proxy.secondTypeCount === 2) {\n                        proxy.isNavigate = true;\n                        proxy.secondTypeCount = 0;\n                    }\n                    break;\n                case 'f':\n                    result = Math.floor(proxy.maskDateValue.getMilliseconds() / 100).toString();\n                    break;\n                case 'ff':\n                    milliseconds = proxy.maskDateValue.getMilliseconds();\n                    if (proxy.maskDateValue.getMilliseconds() > 99) {\n                        milliseconds = Math.floor(proxy.maskDateValue.getMilliseconds() / 10);\n                    }\n                    result = proxy.roundOff(milliseconds, 2);\n                    break;\n                case 'fff':\n                    result = proxy.roundOff(proxy.maskDateValue.getMilliseconds(), 3);\n                    break;\n                case 'a':\n                case 'aa':\n                    result = proxy.maskDateValue.getHours() < 12 ? periodString[periodkeys[0]] : periodString[periodkeys[1]];\n                    break;\n                case 'z':\n                case 'zz':\n                case 'zzz':\n                case 'zzzz':\n                    dateOptions = {\n                        format: formattext,\n                        type: 'dateTime', skeleton: 'yMd', calendar: proxy.parent.calendarMode\n                    };\n                    result = proxy.parent.globalize.formatDate(proxy.maskDateValue, dateOptions);\n                    break;\n            }\n            result = result !== undefined ? result : formattext.slice(1, formattext.length - 1);\n            if (proxy.isHiddenMask) {\n                var hiddenChar = '';\n                for (var i = 0; i < result.length; i++) {\n                    hiddenChar += formattext[0];\n                }\n                return hiddenChar;\n            }\n            else {\n                return result;\n            }\n        }\n        return formatValueSpecifier;\n    };\n    MaskedDateTime.prototype.maskInputHandler = function () {\n        var start = this.parent.inputElement.selectionStart;\n        var formatText = '';\n        if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n            formatText = this.hiddenMask[start];\n        }\n        this.differenceCheck();\n        var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n        this.isHiddenMask = true;\n        this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n        this.isDateZero = this.isMonthZero = this.isYearZero = false;\n        this.isHiddenMask = false;\n        this.previousHiddenMask = this.hiddenMask;\n        this.previousValue = inputValue;\n        this.parent.inputElement.value = inputValue;\n        this.parent.inputElement.value = inputValue;\n        for (var i = 0; i < this.hiddenMask.length; i++) {\n            if (formatText === this.hiddenMask[i]) {\n                start = i;\n                break;\n            }\n        }\n        this.parent.inputElement.selectionStart = start;\n        this.validCharacterCheck();\n        if ((this.isNavigate || this.isDeletion) && !this.isDeleteKey) {\n            var isbackward = this.isNavigate ? false : true;\n            this.isNavigate = this.isDeletion = false;\n            this.navigateSelection(isbackward);\n        }\n        if (this.isDeleteKey) {\n            this.isDeletion = false;\n        }\n        this.isDeleteKey = false;\n    };\n    MaskedDateTime.prototype.navigateSelection = function (isbackward) {\n        var start = this.parent.inputElement.selectionStart;\n        var end = this.parent.inputElement.selectionEnd;\n        var formatIndex = isbackward ? start - 1 : end;\n        this.navigated = true;\n        while (formatIndex < this.hiddenMask.length && formatIndex >= 0) {\n            if (this.validCharacters.indexOf(this.hiddenMask[formatIndex]) >= 0) {\n                this.setSelection(this.hiddenMask[formatIndex]);\n                break;\n            }\n            formatIndex = formatIndex + (isbackward ? -1 : 1);\n        }\n    };\n    MaskedDateTime.prototype.roundOff = function (val, count) {\n        var valueText = val.toString();\n        var length = count - valueText.length;\n        var result = '';\n        for (var i = 0; i < length; i++) {\n            result += '0';\n        }\n        return result + valueText;\n    };\n    MaskedDateTime.prototype.zeroCheck = function (isZero, isDayPart, resultValue) {\n        var result = resultValue;\n        if (isZero && !isDayPart) {\n            result = '0';\n        }\n        return result;\n    };\n    MaskedDateTime.prototype.handleDeletion = function (format, isSegment) {\n        switch (format) {\n            case 'd':\n                this.isDayPart = isSegment;\n                break;\n            case 'M':\n                this.isMonthPart = isSegment;\n                if (!isSegment) {\n                    this.maskDateValue.setMonth(0);\n                    this.monthCharacter = '';\n                }\n                break;\n            case 'y':\n                this.isYearPart = isSegment;\n                break;\n            case 'H':\n            case 'h':\n                this.isHourPart = isSegment;\n                if (!isSegment) {\n                    this.periodCharacter = '';\n                }\n                break;\n            case 'm':\n                this.isMinutePart = isSegment;\n                break;\n            case 's':\n                this.isSecondsPart = isSegment;\n                break;\n            default:\n                return false;\n        }\n        return true;\n    };\n    MaskedDateTime.prototype.dateAlteration = function (isDecrement) {\n        var start = this.parent.inputElement.selectionStart;\n        var formatText = '';\n        if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n            formatText = this.hiddenMask[start];\n        }\n        else {\n            return;\n        }\n        var newDateValue = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n        this.previousDate = new Date(this.maskDateValue.getFullYear(), this.maskDateValue.getMonth(), this.maskDateValue.getDate(), this.maskDateValue.getHours(), this.maskDateValue.getMinutes(), this.maskDateValue.getSeconds());\n        var incrementValue = isDecrement ? -1 : 1;\n        switch (formatText) {\n            case 'd':\n                newDateValue.setDate(newDateValue.getDate() + incrementValue);\n                break;\n            case 'M':\n                {\n                    var newMonth = newDateValue.getMonth() + incrementValue;\n                    newDateValue.setDate(1);\n                    newDateValue.setMonth(newMonth);\n                    if (this.isDayPart) {\n                        var previousMaxDate = new Date(this.previousDate.getFullYear(), this.previousDate.getMonth() + 1, 0).getDate();\n                        var currentMaxDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth() + 1, 0).getDate();\n                        if (this.previousDate.getDate() === previousMaxDate && currentMaxDate <= previousMaxDate) {\n                            newDateValue.setDate(currentMaxDate);\n                        }\n                        else {\n                            newDateValue.setDate(this.previousDate.getDate());\n                        }\n                    }\n                    else {\n                        newDateValue.setDate(this.previousDate.getDate());\n                    }\n                    this.previousDate = new Date(newDateValue.getFullYear(), newDateValue.getMonth(), newDateValue.getDate());\n                    break;\n                }\n            case 'y':\n                newDateValue.setFullYear(newDateValue.getFullYear() + incrementValue);\n                break;\n            case 'H':\n            case 'h':\n                newDateValue.setHours(newDateValue.getHours() + incrementValue);\n                break;\n            case 'm':\n                newDateValue.setMinutes(newDateValue.getMinutes() + incrementValue);\n                break;\n            case 's':\n                newDateValue.setSeconds(newDateValue.getSeconds() + incrementValue);\n                break;\n            case 'a':\n                newDateValue.setHours((newDateValue.getHours() + 12) % 24);\n                break;\n            default:\n                break;\n        }\n        this.maskDateValue = newDateValue.getFullYear() > 0 ? newDateValue : this.maskDateValue;\n        if (this.validCharacters.indexOf(this.hiddenMask[start]) !== -1) {\n            this.handleDeletion(this.hiddenMask[start], true);\n        }\n    };\n    MaskedDateTime.prototype.getCulturedValue = function (format) {\n        var locale = this.parent.locale;\n        var result;\n        if (locale === 'en' || locale === 'en-US') {\n            result = getValue(format, getDefaultDateObject());\n        }\n        else {\n            result = getValue('main.' + '' + locale + ('.dates.calendars.gregorian.' + format), cldrData);\n        }\n        return result;\n    };\n    MaskedDateTime.prototype.getCulturedFormat = function () {\n        var formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n        if (this.parent.moduleName === 'datepicker') {\n            formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n            if (this.parent.format && this.parent.formatString) {\n                formatString = this.parent.formatString;\n            }\n        }\n        if (this.parent.moduleName === 'datetimepicker') {\n            formatString = (this.getCulturedValue('dateTimeFormats[availableFormats].yMd')).toString();\n            if (this.parent.dateTimeFormat) {\n                formatString = this.parent.dateTimeFormat;\n            }\n        }\n        if (this.parent.moduleName === 'timepicker') {\n            formatString = this.parent.cldrTimeFormat();\n        }\n        return formatString;\n    };\n    MaskedDateTime.prototype.clearHandler = function () {\n        this.isDayPart = this.isMonthPart = this.isYearPart = this.isHourPart = this.isMinutePart = this.isSecondsPart = false;\n        this.updateValue();\n    };\n    MaskedDateTime.prototype.updateValue = function () {\n        this.monthCharacter = this.periodCharacter = '';\n        var inputValue = this.dateformat.replace(this.formatRegex, this.formatCheck());\n        this.isHiddenMask = true;\n        this.hiddenMask = this.dateformat.replace(this.formatRegex, this.formatCheck());\n        this.isHiddenMask = false;\n        this.previousHiddenMask = this.hiddenMask;\n        this.previousValue = inputValue;\n        this.parent.updateInputValue(inputValue);\n    };\n    MaskedDateTime.prototype.destroy = function () {\n        this.removeEventListener();\n    };\n    return MaskedDateTime;\n}());\nexport { MaskedDateTime };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { extend } from '@syncfusion/ej2-base';\nimport { DatePicker, DateTimePicker, MaskedDateTime } from '@syncfusion/ej2-calendars';\nimport { isEditable, getObject, getCustomDateFormat } from '../base/util';\nimport { EditCellBase } from './edit-cell-base';\nDatePicker.Inject(MaskedDateTime);\n/**\n * `DatePickerEditCell` is used to handle datepicker cell type editing.\n *\n * @hidden\n */\nvar DatePickerEditCell = /** @class */ (function (_super) {\n    __extends(DatePickerEditCell, _super);\n    function DatePickerEditCell() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    DatePickerEditCell.prototype.write = function (args) {\n        this.edit = this.parent.editModule;\n        if (args.column.editType === 'datepickeredit') {\n            this.obj = new DatePicker(extend(dateanddatetimerender(args, this.parent.editSettings.mode, this.parent.enableRtl, this.parent.cssClass, this), args.column.edit.params));\n        }\n        else if (args.column.editType === 'datetimepickeredit') {\n            this.obj = new DateTimePicker(extend(dateanddatetimerender(args, this.parent.editSettings.mode, this.parent.enableRtl, this.parent.cssClass, this), args.column.edit.params));\n        }\n        this.obj.appendTo(args.element);\n    };\n    return DatePickerEditCell;\n}(EditCellBase));\nexport { DatePickerEditCell };\n// eslint-disable-next-line\nfunction dateanddatetimerender(args, mode, rtl, css, datePickerEditCell) {\n    var isInline = mode !== 'Dialog';\n    var format = getCustomDateFormat(args.column.format, args.column.type);\n    var value = getObject(args.column.field, args.rowData);\n    value = value ? new Date(value) : null;\n    return {\n        floatLabelType: isInline ? 'Never' : 'Always',\n        value: value,\n        format: format,\n        placeholder: isInline ?\n            '' : args.column.headerText, enableRtl: rtl,\n        enabled: isEditable(args.column, args.requestType, args.element),\n        cssClass: css ? css : null,\n        close: datePickerClose.bind(datePickerEditCell)\n    };\n}\n// eslint-disable-next-line\nfunction datePickerClose(args) {\n    if (args.event && args.event.action === 'escape') {\n        this.edit.editCellDialogClose = true;\n    }\n}\n","/**\n * `TemplateEditCell` is used to handle template cell.\n *\n * @hidden\n */\nvar TemplateEditCell = /** @class */ (function () {\n    function TemplateEditCell(parent) {\n        this.parent = parent;\n    }\n    TemplateEditCell.prototype.read = function (element, value) {\n        return value;\n    };\n    TemplateEditCell.prototype.write = function () {\n        //\n    };\n    TemplateEditCell.prototype.destroy = function () {\n        //\n    };\n    return TemplateEditCell;\n}());\nexport { TemplateEditCell };\n","import { closest, addClass, select } from '@syncfusion/ej2-base';\nimport { extend, getValue } from '@syncfusion/ej2-base';\nimport { remove } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport * as events from '../base/constant';\nimport { EditRender } from '../renderer/edit-renderer';\nimport { BooleanEditCell } from '../renderer/boolean-edit-cell';\nimport { DropDownEditCell } from '../renderer/dropdown-edit-cell';\nimport { NumericEditCell } from '../renderer/numeric-edit-cell';\nimport { DefaultEditCell } from '../renderer/default-edit-cell';\nimport { InlineEdit } from './inline-edit';\nimport { BatchEdit } from './batch-edit';\nimport { DialogEdit } from './dialog-edit';\nimport { Dialog } from '@syncfusion/ej2-popups';\nimport { parentsUntil, getComplexFieldID, getParsedFieldID, setComplexFieldID, getScrollBarWidth, setValidationRuels } from '../base/util';\nimport { FormValidator } from '@syncfusion/ej2-inputs';\nimport { DatePickerEditCell } from '../renderer/datepicker-edit-cell';\nimport { calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { TemplateEditCell } from '../renderer/template-edit-cell';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { addRemoveEventListener, padZero } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * The `Edit` module is used to handle editing actions.\n */\nvar Edit = /** @class */ (function () {\n    /**\n     * Constructor for the Grid editing module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {ServiceLocator} serviceLocator - specifies the servicelocator\n     * @hidden\n     */\n    function Edit(parent, serviceLocator) {\n        this.editType = { 'Inline': InlineEdit, 'Normal': InlineEdit, 'Batch': BatchEdit, 'Dialog': DialogEdit };\n        this.fieldname = '';\n        this.data = {};\n        /* @hidden */\n        this.editCellDialogClose = false;\n        this.parent = parent;\n        this.serviceLocator = serviceLocator;\n        this.l10n = this.serviceLocator.getService('localization');\n        this.addEventListener();\n        this.updateEditObj();\n        this.createAlertDlg();\n        this.createConfirmDlg();\n    }\n    Edit.prototype.updateColTypeObj = function () {\n        var cols = this.parent.columnModel;\n        for (var i = 0; i < cols.length; i++) {\n            if (this.parent.editSettings.template || cols[parseInt(i.toString(), 10)].editTemplate) {\n                var templteCell = 'templateedit';\n                cols[parseInt(i.toString(), 10)].edit = extend(new Edit.editCellType[\"\" + templteCell](this.parent), cols[parseInt(i.toString(), 10)].edit || {});\n            }\n            else {\n                cols[parseInt(i.toString(), 10)].edit = extend(new Edit.editCellType[cols[parseInt(i.toString(), 10)].editType\n                    && Edit.editCellType[cols[parseInt(i.toString(), 10)].editType] ?\n                    cols[parseInt(i.toString(), 10)].editType : 'defaultedit'](this.parent, this.serviceLocator), cols[parseInt(i.toString(), 10)].edit || {});\n            }\n        }\n        this.parent.log('primary_column_missing');\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    Edit.prototype.getModuleName = function () {\n        return 'edit';\n    };\n    /**\n     * @param {NotifyArgs} e - specifies the notifyargs\n     * @returns {void}\n     * @hidden\n     */\n    Edit.prototype.onPropertyChanged = function (e) {\n        if (e.module !== this.getModuleName()) {\n            return;\n        }\n        var gObj = this.parent;\n        for (var _i = 0, _a = Object.keys(e.properties); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'allowAdding':\n                case 'allowDeleting':\n                case 'allowEditing':\n                    if (gObj.editSettings.allowAdding || gObj.editSettings.allowEditing || gObj.editSettings.allowDeleting) {\n                        this.initialEnd();\n                    }\n                    break;\n                case 'mode':\n                    this.updateEditObj();\n                    gObj.isEdit = false;\n                    gObj.refresh();\n                    break;\n            }\n        }\n    };\n    Edit.prototype.updateEditObj = function () {\n        if (this.editModule) {\n            this.editModule.destroy();\n        }\n        this.renderer = new EditRender(this.parent, this.serviceLocator);\n        this.editModule = new this.editType[this.parent.editSettings.mode](this.parent, this.serviceLocator, this.renderer);\n    };\n    Edit.prototype.initialEnd = function () {\n        this.updateColTypeObj();\n    };\n    /**\n     * Edits any bound record in the Grid by TR element.\n     *\n     * @param {HTMLTableRowElement} tr - Defines the table row to be edited.\n     * @returns {void}\n     */\n    Edit.prototype.startEdit = function (tr) {\n        var gObj = this.parent;\n        if (!gObj.editSettings.allowEditing || gObj.isEdit || gObj.editSettings.mode === 'Batch') {\n            return;\n        }\n        this.parent.element.classList.add('e-editing');\n        if (!gObj.getSelectedRows().length || isNullOrUndefined(this.parent.getRowByIndex(parseInt(this.parent.getSelectedRows()[0].getAttribute('data-rowindex'), 10)))) {\n            if (!tr) {\n                this.showDialog('EditOperationAlert', this.alertDObj);\n                return;\n            }\n        }\n        else if (!tr) {\n            tr = gObj.getSelectedRows()[0];\n        }\n        if (this.parent.enableVirtualization && this.parent.editSettings.mode === 'Normal') {\n            var idx = parseInt(tr.getAttribute('data-rowindex'), 10);\n            tr = this.parent.getRowByIndex(idx);\n        }\n        var lastTr = gObj.getContent().querySelector('tr:last-child');\n        var hdrTbody = gObj.getHeaderContent().querySelector('tbody');\n        if (gObj.frozenRows && isNullOrUndefined(lastTr) && hdrTbody && hdrTbody.querySelector('tr:last-child')) {\n            this.isLastRow = tr.rowIndex === parseInt(gObj.getHeaderContent().querySelector('tbody').querySelector('tr:last-child').getAttribute('data-rowindex'), 10);\n        }\n        else if (lastTr) {\n            this.isLastRow = tr.rowIndex === lastTr.rowIndex;\n        }\n        if (tr.style.display === 'none') {\n            return;\n        }\n        this.editModule.startEdit(tr);\n        this.refreshToolbar();\n        gObj.element.querySelector('.e-gridpopup').style.display = 'none';\n        this.parent.notify('start-edit', {});\n    };\n    /**\n     * @param {Element} tr - specifies the tr element\n     * @param {object} args - specifies the object\n     * @param {Element} args.row -specfifes the row\n     * @param {string} args.requestType - specifies the request type\n     * @returns {void}\n     * @hidden\n     */\n    Edit.prototype.checkLastRow = function (tr, args) {\n        var checkLastRow = this.isLastRow;\n        if (this.parent.height !== 'auto' && this.parent.editSettings.newRowPosition === 'Bottom' && args && args.requestType === 'add' &&\n            this.parent.getContent().firstElementChild.offsetHeight > this.parent.getContentTable().scrollHeight) {\n            addClass([].slice.call(tr.getElementsByClassName(literals.rowCell)), 'e-lastrowadded');\n        }\n        else if (checkLastRow && tr && tr.classList) {\n            addClass([].slice.call(tr.getElementsByClassName(literals.rowCell)), 'e-lastrowcell');\n        }\n    };\n    /**\n     * Cancels edited state.\n     *\n     * @returns {void}\n     */\n    Edit.prototype.closeEdit = function () {\n        if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog\n            && this.parent.element.getElementsByClassName('e-updatedtd').length) {\n            this.showDialog('CancelEdit', this.dialogObj);\n            return;\n        }\n        this.parent.element.classList.remove('e-editing');\n        this.editModule.closeEdit();\n        this.refreshToolbar();\n        this.parent.notify(events.closeEdit, {});\n    };\n    Edit.prototype.refreshToolbar = function () {\n        this.parent.notify(events.toolbarRefresh, {});\n    };\n    /**\n     * To adds a new row at the top with the given data. When data is not passed, it will add empty rows.\n     * > `editSettings.allowEditing` should be true.\n     *\n     * @param {Object} data - Defines the new add record data.\n     * @param {number} index - Defines the row index to be added\n     * @returns {void}\n     */\n    Edit.prototype.addRecord = function (data, index) {\n        if (!this.parent.editSettings.allowAdding) {\n            return;\n        }\n        var args = { startEdit: true };\n        if (!data) {\n            this.parent.notify(events.virtualScrollAddActionBegin, args);\n        }\n        if (args.startEdit) {\n            this.parent.element.classList.add('e-editing');\n            this.editModule.addRecord(data, index);\n            this.refreshToolbar();\n            this.parent.notify('start-add', {});\n        }\n    };\n    /**\n     * Deletes a record with the given options. If fieldname and data are not given, the Grid will delete the selected record.\n     * > `editSettings.allowDeleting` should be true.\n     *\n     * @param {string} fieldname - Defines the primary key field name of the column.\n     * @param {Object} data - Defines the JSON data record to be deleted.\n     * @returns {void}\n     */\n    Edit.prototype.deleteRecord = function (fieldname, data) {\n        var gObj = this.parent;\n        if (!gObj.editSettings.allowDeleting) {\n            return;\n        }\n        if (!data) {\n            if (!gObj.getSelectedRecords().length && isNullOrUndefined(gObj.commandDelIndex)) {\n                this.showDialog('DeleteOperationAlert', this.alertDObj);\n                return;\n            }\n        }\n        if (gObj.editSettings.showDeleteConfirmDialog) {\n            this.fieldname = fieldname;\n            this.data = data;\n            this.showDialog('ConfirmDelete', this.dialogObj);\n            return;\n        }\n        this.editModule.deleteRecord(fieldname, data);\n    };\n    /**\n     * Deletes a visible row by TR element.\n     *\n     * @param {HTMLTableRowElement} tr - Defines the table row element.\n     * @returns {void}\n     */\n    Edit.prototype.deleteRow = function (tr) {\n        this.deleteRowUid = tr.getAttribute('data-uid');\n        var rowObj = this.parent.getRowObjectFromUID(this.deleteRowUid);\n        if (!isNullOrUndefined(rowObj)) {\n            this.deleteRecord(null, rowObj.data);\n        }\n    };\n    /**\n     * If Grid is in editable state, you can save a record by invoking endEdit.\n     *\n     * @returns {void}\n     */\n    Edit.prototype.endEdit = function () {\n        if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.showConfirmDialog &&\n            (isNullOrUndefined(this.formObj) || this.formObj.validate())) {\n            this.parent.editModule.saveCell();\n            this.parent.notify(events.editNextValCell, {});\n            if (isNullOrUndefined(this.formObj) || this.formObj.validate()) {\n                this.showDialog('BatchSaveConfirm', this.dialogObj);\n                return;\n            }\n        }\n        this.endEditing();\n    };\n    /**\n     * To update the specified cell by given value without changing into edited state.\n     *\n     * @param {number} rowIndex Defines the row index.\n     * @param {string} field Defines the column field.\n     * @param {string | number | boolean | Date} value - Defines the value to be changed.\n     * @returns {void}\n     */\n    Edit.prototype.updateCell = function (rowIndex, field, value) {\n        this.editModule.updateCell(rowIndex, field, value);\n    };\n    /**\n     * To update the specified row by given values without changing into edited state.\n     *\n     * @param {number} index Defines the row index.\n     * @param {Object} data Defines the data object to be updated.\n     * @returns {void}\n     */\n    Edit.prototype.updateRow = function (index, data) {\n        this.editModule.updateRow(index, data);\n    };\n    /**\n     * Resets added, edited, and deleted records in the batch mode.\n     *\n     * @returns {void}\n     */\n    Edit.prototype.batchCancel = function () {\n        this.closeEdit();\n    };\n    /**\n     * Bulk saves added, edited, and deleted records in the batch mode.\n     *\n     * @returns {void}\n     */\n    Edit.prototype.batchSave = function () {\n        this.endEdit();\n    };\n    /**\n     * Changes a particular cell into edited state based on the row index and field name provided in the `batch` mode.\n     *\n     * @param {number} index - Defines row index to edit a particular cell.\n     * @param {string} field - Defines the field name of the column to perform batch edit.\n     * @returns {void}\n     */\n    Edit.prototype.editCell = function (index, field) {\n        this.editModule.editCell(index, field);\n    };\n    /**\n     * Checks the status of validation at the time of editing. If validation is passed, it returns true.\n     *\n     * @returns {boolean} returns whether the form is validated\n     */\n    Edit.prototype.editFormValidate = function () {\n        var form1 = this.formObj ? this.formObj.validate() : true;\n        var form2 = this.mFormObj ? this.mFormObj.validate() : true;\n        var form3 = this.frFormObj ? this.frFormObj.validate() : true;\n        return form1 && form2 && form3;\n    };\n    /**\n     * Gets the added, edited,and deleted data before bulk save to the DataSource in batch mode.\n     *\n     * @returns {Object} returns the Object\n     */\n    Edit.prototype.getBatchChanges = function () {\n        return this.editModule.getBatchChanges ? this.editModule.getBatchChanges() : {};\n    };\n    /**\n     * Gets the current value of the edited component.\n     *\n     * @returns {Object} returns the Object\n     */\n    Edit.prototype.getCurrentEditCellData = function () {\n        var obj = this.getCurrentEditedData(this.formObj.element, {});\n        return obj[Object.keys(obj)[0]];\n    };\n    /**\n     * Saves the cell that is currently edited. It does not save the value to the DataSource.\n     *\n     * @returns {void}\n     */\n    Edit.prototype.saveCell = function () {\n        this.editModule.saveCell();\n    };\n    Edit.prototype.endEditing = function () {\n        this.parent.element.classList.remove('e-editing');\n        this.editModule.endEdit();\n        this.refreshToolbar();\n    };\n    Edit.prototype.showDialog = function (content, obj) {\n        obj.content = '<div>' + this.l10n.getConstant(content) + '</div>';\n        obj.dataBind();\n        obj.show();\n    };\n    Edit.prototype.getValueFromType = function (col, value) {\n        var val = value;\n        switch (col.type) {\n            case 'number':\n                val = !isNaN(parseFloat(value)) ? parseFloat(value) : null;\n                break;\n            case 'boolean':\n                if (col.editType !== 'booleanedit') {\n                    val = value === this.l10n.getConstant('True') || value === true ? true : false;\n                }\n                break;\n            case 'date':\n            case 'datetime':\n                if (col.editType !== 'datepickeredit' && col.editType !== 'datetimepickeredit'\n                    && value && value.length) {\n                    val = new Date(value);\n                }\n                else if (value === '') {\n                    val = null;\n                }\n                break;\n            case 'dateonly':\n                val = value && (value = new Date(value)) ?\n                    value.getFullYear() + '-' + padZero(value.getMonth() + 1) + '-' + padZero(value.getDate()) : null;\n                break;\n        }\n        return val;\n    };\n    Edit.prototype.destroyToolTip = function () {\n        var elements = [].slice.call(this.parent.element.getElementsByClassName('e-griderror'));\n        for (var _i = 0, elements_1 = elements; _i < elements_1.length; _i++) {\n            var elem = elements_1[_i];\n            remove(elem);\n        }\n        this.parent.getContent().firstElementChild.style.position = 'relative';\n        if (this.parent.isFrozenGrid()) {\n            if (this.parent.element.querySelector('.e-gridheader')) {\n                this.parent.element.querySelector('.e-gridheader').style.position = '';\n            }\n            this.parent.element.querySelector('.e-gridcontent').style.position = '';\n        }\n    };\n    Edit.prototype.createConfirmDlg = function () {\n        this.dialogObj = this.dlgWidget([\n            {\n                click: this.dlgOk.bind(this),\n                buttonModel: { content: this.l10n.getConstant('OKButton'),\n                    cssClass: this.parent.cssClass ? 'e-primary' + ' ' + this.parent.cssClass : 'e-primary',\n                    isPrimary: true }\n            },\n            {\n                click: this.dlgCancel.bind(this),\n                buttonModel: { cssClass: this.parent.cssClass ? 'e-flat' + ' ' + this.parent.cssClass : 'e-flat',\n                    content: this.l10n.getConstant('CancelButton') }\n            }\n        ], 'EditConfirm');\n    };\n    Edit.prototype.createAlertDlg = function () {\n        this.alertDObj = this.dlgWidget([\n            {\n                click: this.alertClick.bind(this),\n                buttonModel: { content: this.l10n.getConstant('OKButton'),\n                    cssClass: this.parent.cssClass ? 'e-flat' + ' ' + this.parent.cssClass : 'e-flat',\n                    isPrimary: true }\n            }\n        ], 'EditAlert');\n    };\n    Edit.prototype.alertClick = function () {\n        this.alertDObj.hide();\n    };\n    Edit.prototype.dlgWidget = function (btnOptions, name) {\n        var div = this.parent.createElement('div', { id: this.parent.element.id + name });\n        this.parent.element.appendChild(div);\n        var options = {\n            showCloseIcon: false,\n            isModal: true,\n            visible: false,\n            closeOnEscape: true,\n            target: this.parent.element,\n            width: '320px',\n            animationSettings: { effect: 'None' },\n            cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n        };\n        options.buttons = btnOptions;\n        var obj = new Dialog(options);\n        var isStringTemplate = 'isStringTemplate';\n        obj[\"\" + isStringTemplate] = true;\n        obj.appendTo(div);\n        return obj;\n    };\n    Edit.prototype.dlgCancel = function () {\n        if (this.parent.pagerModule) {\n            this.parent.pagerModule.isForceCancel = false;\n        }\n        this.parent.focusModule.clearIndicator();\n        this.parent.focusModule.restoreFocus();\n        this.dialogObj.hide();\n        this.parent.notify('cancelcnfrmDlg', {});\n    };\n    Edit.prototype.dlgOk = function () {\n        switch (this.dialogObj.element.querySelector('.e-dlg-content').firstElementChild.innerText) {\n            case this.l10n.getConstant('ConfirmDelete'):\n                this.editModule.deleteRecord(this.fieldname, this.data);\n                break;\n            case this.l10n.getConstant('CancelEdit'):\n                this.editModule.closeEdit();\n                break;\n            case this.l10n.getConstant('BatchSaveConfirm'):\n                this.endEditing();\n                break;\n            case this.l10n.getConstant('BatchSaveLostChanges'):\n                if (this.parent.editSettings.mode === 'Batch') {\n                    this.editModule.addCancelWhilePaging();\n                }\n                if (this.parent.pagerModule) {\n                    this.parent.pagerModule.isForceCancel = false;\n                }\n                this.executeAction();\n                break;\n        }\n        this.dlgCancel();\n    };\n    Edit.prototype.destroyEditComponents = function () {\n        if (this.parent.isEdit) {\n            this.destroyWidgets();\n            this.destroyForm();\n        }\n        this.destroy();\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Edit.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.eventDetails = [{ event: events.inBoundModelChanged, handler: this.onPropertyChanged },\n            { event: events.initialEnd, handler: this.initialEnd },\n            { event: events.keyPressed, handler: this.keyPressHandler },\n            { event: events.autoCol, handler: this.updateColTypeObj },\n            { event: events.tooltipDestroy, handler: this.destroyToolTip },\n            { event: events.preventBatch, handler: this.preventBatch },\n            { event: events.destroyForm, handler: this.destroyForm },\n            { event: events.destroy, handler: this.destroyEditComponents }];\n        addRemoveEventListener(this.parent, this.eventDetails, true, this);\n        this.actionBeginFunction = this.onActionBegin.bind(this);\n        this.actionCompleteFunction = this.actionComplete.bind(this);\n        this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n        this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Edit.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        addRemoveEventListener(this.parent, this.eventDetails, false);\n        this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n        this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n    };\n    Edit.prototype.actionComplete = function (e) {\n        var actions = ['add', 'beginEdit', 'save', 'delete', 'cancel', 'filterAfterOpen', 'filterchoicerequest'];\n        if (actions.indexOf(e.requestType) < 0) {\n            this.parent.isEdit = false;\n        }\n        if (e.requestType === 'batchsave') {\n            this.parent.focusModule.restoreFocus();\n        }\n        this.refreshToolbar();\n    };\n    /**\n     * @param {Element} form - specifies the element\n     * @param {Object} editedData - specifies the edited data\n     * @returns {Object} returns the object\n     * @hidden\n     */\n    Edit.prototype.getCurrentEditedData = function (form, editedData) {\n        var gObj = this.parent;\n        if (gObj.editSettings.template) {\n            var elements = [].slice.call(form.elements);\n            for (var k = 0; k < elements.length; k++) {\n                if (((elements[parseInt(k.toString(), 10)].hasAttribute('name') && (elements[parseInt(k.toString(), 10)].className !== 'e-multi-hidden')) ||\n                    elements[parseInt(k.toString(), 10)].classList.contains('e-multiselect')) && !(elements[parseInt(k.toString(), 10)].type === 'hidden' &&\n                    (parentsUntil(elements[parseInt(k.toString(), 10)], 'e-switch-wrapper') || parentsUntil(elements[parseInt(k.toString(), 10)], 'e-checkbox-wrapper')))) {\n                    var field = (elements[parseInt(k.toString(), 10)].hasAttribute('name')) ? setComplexFieldID(elements[parseInt(k.toString(), 10)].getAttribute('name')) :\n                        setComplexFieldID(elements[parseInt(k.toString(), 10)].getAttribute('id'));\n                    var column = gObj.getColumnByField(field) || { field: field, type: elements[parseInt(k.toString(), 10)].getAttribute('type') };\n                    var value = void 0;\n                    if (column.type === 'checkbox' || column.type === 'boolean') {\n                        value = elements[parseInt(k.toString(), 10)].checked;\n                    }\n                    else if (elements[parseInt(k.toString(), 10)].value) {\n                        value = elements[parseInt(k.toString(), 10)].value;\n                        if (elements[parseInt(k.toString(), 10)].ej2_instances &&\n                            elements[parseInt(k.toString(), 10)].ej2_instances.length &&\n                            !isNullOrUndefined(elements[parseInt(k.toString(), 10)].ej2_instances[0].value)) {\n                            elements[parseInt(k.toString(), 10)].blur();\n                            value = elements[parseInt(k.toString(), 10)]\n                                .ej2_instances[0].value;\n                        }\n                    }\n                    else if (elements[parseInt(k.toString(), 10)].ej2_instances) {\n                        value = elements[parseInt(k.toString(), 10)]\n                            .ej2_instances[0].value;\n                    }\n                    if (column.edit && typeof column.edit.read === 'string') {\n                        value = getValue(column.edit.read, window)(elements[parseInt(k.toString(), 10)], value);\n                    }\n                    else if (column.edit && column.edit.read) {\n                        value = column.edit.read(elements[parseInt(k.toString(), 10)], value);\n                    }\n                    value = gObj.editModule.getValueFromType(column, value);\n                    if (elements[parseInt(k.toString(), 10)].type === 'radio') {\n                        if (elements[parseInt(k.toString(), 10)].checked) {\n                            DataUtil.setValue(column.field, value, editedData);\n                        }\n                    }\n                    else {\n                        if (typeof value === 'string') {\n                            this.parent.sanitize(value);\n                        }\n                        DataUtil.setValue(column.field, value, editedData);\n                    }\n                }\n            }\n            return editedData;\n        }\n        var col = gObj.columnModel.filter(function (col) { return col.editTemplate; });\n        for (var j = 0; j < col.length; j++) {\n            if (form[getComplexFieldID(col[parseInt(j.toString(), 10)].field)]) {\n                var inputElements = [].slice.call(form[getComplexFieldID(col[parseInt(j.toString(), 10)].field)]);\n                inputElements = inputElements.length ? inputElements : [form[getComplexFieldID(col[parseInt(j.toString(), 10)].field)]];\n                var temp = inputElements.filter(function (e) {\n                    return !isNullOrUndefined((e.ej2_instances));\n                });\n                if (temp.length === 0) {\n                    temp = inputElements.filter(function (e) { return e.hasAttribute('name'); });\n                }\n                for (var k = 0; k < temp.length; k++) {\n                    var value = this.getValue(col[parseInt(j.toString(), 10)], temp[parseInt(k.toString(), 10)], editedData);\n                    if (col[parseInt(j.toString(), 10)].type === 'string') {\n                        value = this.parent.sanitize(value);\n                    }\n                    DataUtil.setValue(col[parseInt(j.toString(), 10)].field, value, editedData);\n                }\n            }\n        }\n        var inputs = [].slice.call(form.getElementsByClassName('e-field'));\n        for (var i = 0, len = inputs.length; i < len; i++) {\n            var col_1 = gObj.getColumnByUid(inputs[parseInt(i.toString(), 10)].getAttribute('e-mappinguid'));\n            if (col_1 && col_1.field) {\n                var value = this.getValue(col_1, inputs[parseInt(i.toString(), 10)], editedData);\n                if (col_1.type === 'string') {\n                    value = this.parent.sanitize(value);\n                }\n                DataUtil.setValue(col_1.field, value, editedData);\n            }\n        }\n        return editedData;\n    };\n    Edit.prototype.getValue = function (col, input, editedData) {\n        var value = input.ej2_instances ?\n            input.ej2_instances[0].value : input.value;\n        var gObj = this.parent;\n        var temp = col.edit.read;\n        if (col.type === 'checkbox' || col.type === 'boolean') {\n            value = input.checked;\n        }\n        if (typeof temp === 'string') {\n            temp = getValue(temp, window);\n            value = gObj.editModule.getValueFromType(col, (temp)(input, value));\n        }\n        else {\n            value = gObj.editModule.getValueFromType(col, col.edit.read(input, value));\n        }\n        if (isNullOrUndefined(editedData[col.field]) && value === '') {\n            value = editedData[col.field];\n        }\n        return value;\n    };\n    /**\n     * @param {NotifyArgs} e - specifies the NotifyArgs\n     * @returns {void}\n     * @hidden\n     */\n    Edit.prototype.onActionBegin = function (e) {\n        if (e.requestType === 'columnstate' && this.parent.isEdit\n            && this.parent.editSettings.mode !== 'Batch') {\n            this.closeEdit();\n        }\n        else {\n            var editRow = this.parent.element.querySelector('.' + literals.editedRow);\n            var addRow = this.parent.element.querySelector('.' + literals.addedRow);\n            if (editRow && this.parent.frozenRows && e.requestType === 'virtualscroll'\n                && parseInt(parentsUntil(editRow, literals.row).getAttribute(literals.dataRowIndex), 10) < this.parent.frozenRows) {\n                return;\n            }\n            var restrictedRequestTypes = ['filterAfterOpen', 'filterBeforeOpen', 'filterchoicerequest', 'filterSearchBegin', 'save', 'infiniteScroll', 'virtualscroll'];\n            var isRestrict = restrictedRequestTypes.indexOf(e.requestType) === -1;\n            var isDestroyVirtualForm = this.parent.enableVirtualization && this.formObj\n                && !this.formObj.isDestroyed && (editRow || addRow || e.requestType === 'cancel') && isRestrict;\n            if ((!this.parent.enableVirtualization && this.parent.editSettings.mode !== 'Batch' && this.formObj && !this.formObj.isDestroyed\n                && isRestrict && !e.cancel) || isDestroyVirtualForm) {\n                this.destroyWidgets();\n                this.destroyForm();\n            }\n        }\n    };\n    /**\n     * @param {Column[]} cols - specfies the column\n     * @returns {void}\n     * @hidden\n     */\n    Edit.prototype.destroyWidgets = function (cols) {\n        var gObj = this.parent;\n        if (gObj.editSettings.template) {\n            this.parent.destroyTemplate(['editSettingsTemplate']);\n            if (this.parent.isReact) {\n                this.parent.renderTemplates();\n            }\n        }\n        cols = cols ? cols : this.parent.getCurrentVisibleColumns(this.parent.enableColumnVirtualization);\n        if (cols.some(function (column) { return !isNullOrUndefined(column.editTemplate); })) {\n            this.parent.destroyTemplate(['editTemplate']);\n            if (this.parent.isReact) {\n                this.parent.renderTemplates();\n            }\n        }\n        for (var _i = 0, cols_1 = cols; _i < cols_1.length; _i++) {\n            var col = cols_1[_i];\n            var temp = col.edit.destroy;\n            if (col.edit.destroy) {\n                if (typeof temp === 'string') {\n                    temp = getValue(temp, window);\n                    temp();\n                }\n                else {\n                    col.edit.destroy();\n                }\n            }\n        }\n        var elements = [].slice.call(this.formObj.element.elements);\n        for (var i = 0; i < elements.length; i++) {\n            if (elements[parseInt(i.toString(), 10)].hasAttribute('name')) {\n                if (elements[parseInt(i.toString(), 10)].ej2_instances &&\n                    elements[parseInt(i.toString(), 10)].ej2_instances.length &&\n                    !elements[parseInt(i.toString(), 10)].ej2_instances[0].isDestroyed) {\n                    elements[parseInt(i.toString(), 10)].ej2_instances[0].destroy();\n                }\n            }\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Edit.prototype.destroyForm = function () {\n        this.destroyToolTip();\n        var formObjects = [this.formObj, this.mFormObj, this.frFormObj, this.virtualFormObj];\n        for (var i = 0; i < formObjects.length; i++) {\n            if (formObjects[parseInt(i.toString(), 10)] && formObjects[parseInt(i.toString(), 10)].element\n                && !formObjects[parseInt(i.toString(), 10)].isDestroyed) {\n                formObjects[parseInt(i.toString(), 10)].destroy();\n            }\n        }\n        this.destroyToolTip();\n    };\n    /**\n     * To destroy the editing.\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Edit.prototype.destroy = function () {\n        var gridElement = this.parent.element;\n        if (!gridElement) {\n            return;\n        }\n        var hasGridChild = gridElement.querySelector('.' + literals.gridHeader) &&\n            gridElement.querySelector('.' + literals.gridContent) ? true : false;\n        if (hasGridChild) {\n            this.destroyForm();\n        }\n        this.removeEventListener();\n        var elem = this.dialogObj.element;\n        if (elem.childElementCount > 0) {\n            this.dialogObj.destroy();\n            remove(elem);\n        }\n        elem = this.alertDObj.element;\n        if (elem.childElementCount > 0) {\n            this.alertDObj.destroy();\n            remove(elem);\n        }\n        if (!hasGridChild) {\n            return;\n        }\n        if (this.editModule) {\n            this.editModule.destroy();\n        }\n    };\n    Edit.prototype.keyPressHandler = function (e) {\n        var isMacLike = /(Mac)/i.test(navigator.platform);\n        if (isMacLike && e.metaKey && e.action === 'ctrlEnter') {\n            e.action = 'insert';\n        }\n        switch (e.action) {\n            case 'insert':\n                this.addRecord();\n                break;\n            case 'delete':\n                if ((e.target.tagName !== 'INPUT' || e.target.classList.contains('e-checkselect'))\n                    && !document.querySelector('.e-popup-open.e-edit-dialog')) {\n                    this.deleteRecord();\n                }\n                break;\n            case 'f2':\n                this.startEdit();\n                break;\n            case 'enter':\n                if (!parentsUntil(e.target, 'e-unboundcelldiv') && this.parent.editSettings.mode !== 'Batch' &&\n                    (parentsUntil(e.target, literals.gridContent) || (this.parent.frozenRows\n                        && parentsUntil(e.target, literals.headerContent)))\n                    && !document.getElementsByClassName('e-popup-open').length) {\n                    e.preventDefault();\n                    this.endEdit();\n                }\n                break;\n            case 'escape':\n                if (this.parent.isEdit && !this.editCellDialogClose) {\n                    if (this.parent.editSettings.mode === 'Batch') {\n                        this.editModule.escapeCellEdit();\n                    }\n                    else {\n                        this.curretRowFocus(e);\n                    }\n                }\n                if (this.editCellDialogClose) {\n                    this.editCellDialogClose = false;\n                }\n                break;\n            case 'tab':\n            case 'shiftTab':\n                this.curretRowFocus(e);\n                break;\n        }\n    };\n    Edit.prototype.curretRowFocus = function (e) {\n        if (this.parent.isEdit && this.parent.editSettings.mode !== 'Batch') {\n            var editedRow = parentsUntil(e.target, 'e-editedrow') || parentsUntil(e.target, 'e-addedrow');\n            if (editedRow) {\n                var focusableEditCells = [].slice.call(editedRow.querySelectorAll('.e-input:not(.e-disabled)'));\n                var commandColCell = [].slice.call(editedRow.querySelectorAll('.e-unboundcell'));\n                if (commandColCell) {\n                    for (var i = 0; i < commandColCell.length; i++) {\n                        focusableEditCells = focusableEditCells.concat([].slice\n                            .call(commandColCell[parseInt(i.toString(), 10)].querySelectorAll('.e-btn:not(.e-hide)')));\n                    }\n                }\n                var rowCell = parentsUntil(e.target, 'e-rowcell');\n                if ((rowCell === parentsUntil(focusableEditCells[focusableEditCells.length - 1], 'e-rowcell')\n                    && e.action === 'tab' && !rowCell.classList.contains('e-unboundcell'))\n                    || (rowCell === parentsUntil(focusableEditCells[0], 'e-rowcell') && e.action === 'shiftTab')\n                    || e.action === 'escape') {\n                    var uid = editedRow.getAttribute('data-uid');\n                    var rows = this.parent.getRows();\n                    var rowIndex = rows.map(function (m) { return m.getAttribute('data-uid'); }).indexOf(uid);\n                    if (this.parent.frozenRows && parentsUntil(editedRow, 'e-content')) {\n                        rowIndex = rowIndex - this.parent.frozenRows;\n                    }\n                    if (editedRow.classList.contains('e-addedrow')) {\n                        rowIndex = 0;\n                    }\n                    if (e.action === 'escape') {\n                        this.closeEdit();\n                    }\n                    else {\n                        this.endEdit();\n                    }\n                    if (this.parent.focusModule.active) {\n                        this.parent.focusModule.active.matrix.current = [rowIndex, 0];\n                    }\n                }\n            }\n        }\n    };\n    Edit.prototype.preventBatch = function (args) {\n        this.preventObj = args;\n        this.showDialog('BatchSaveLostChanges', this.dialogObj);\n    };\n    Edit.prototype.executeAction = function () {\n        this.preventObj.handler.call(this.preventObj.instance, this.preventObj.arg1, this.preventObj.arg2, this.preventObj.arg3, this.preventObj.arg4, this.preventObj.arg5, this.preventObj.arg6, this.preventObj.arg7, this.preventObj.arg8);\n    };\n    /**\n     * @param {Column[]} cols - specifies the column\n     * @param {Object} newRule - specifies the new rule object\n     * @returns {void}\n     * @hidden\n     */\n    Edit.prototype.applyFormValidation = function (cols, newRule) {\n        var gObj = this.parent;\n        var idx = 0;\n        var form = this.parent.editSettings.mode !== 'Dialog' ?\n            gObj.element.getElementsByClassName('e-gridform')[parseInt(idx.toString(), 10)] :\n            select('#' + gObj.element.id + '_dialogEdit_wrapper .e-gridform', document);\n        var index = 1;\n        var rules = {};\n        var mRules = {};\n        var frRules = {};\n        cols = cols ? cols : gObj.getColumns();\n        for (var i = 0; i < cols.length; i++) {\n            if (!cols[parseInt(i.toString(), 10)].visible && (gObj.editSettings.mode !== 'Dialog' || (gObj.groupSettings.columns.indexOf(cols[parseInt(i.toString(), 10)].field) === -1\n                && gObj.editSettings.mode === 'Dialog'))) {\n                continue;\n            }\n            if (cols[parseInt(i.toString(), 10)].validationRules && isNullOrUndefined(newRule)) {\n                setValidationRuels(cols[parseInt(i.toString(), 10)], index, rules, mRules, frRules, cols.length);\n            }\n        }\n        rules = extend(rules, mRules, frRules);\n        this.parent.editModule.formObj = this.createFormObj(form, newRule ? newRule : rules);\n    };\n    /**\n     * @param {HTMLFormElement} form - Defined Form element\n     * @param {Object} rules - Defines form rules\n     * @returns {FormValidator} Returns formvalidator instance\n     * @hidden\n     */\n    Edit.prototype.createFormObj = function (form, rules) {\n        var _this = this;\n        return new FormValidator(form, {\n            rules: rules,\n            locale: this.parent.locale,\n            validationComplete: function (args) {\n                _this.validationComplete(args);\n            },\n            customPlacement: function (inputElement, error) {\n                var uid = inputElement.getAttribute('e-mappinguid');\n                var args = {\n                    column: _this.parent.getColumnByUid(uid),\n                    error: error,\n                    inputElement: inputElement,\n                    value: inputElement.value\n                };\n                if (!(event && event['relatedTarget'] && event['relatedTarget'].classList.contains('e-cancelbutton'))) {\n                    _this.valErrorPlacement(inputElement, error);\n                }\n                _this.parent.notify(events.valCustomPlacement, args);\n            }\n        });\n    };\n    Edit.prototype.valErrorPlacement = function (inputElement, error) {\n        if (this.parent.isEdit) {\n            var id = error.getAttribute('for');\n            var elem = this.getElemTable(inputElement).querySelector('#' + getParsedFieldID(id) + '_Error');\n            if (!elem) {\n                this.createTooltip(inputElement, error, id, '');\n            }\n            else {\n                elem.querySelector('.e-tip-content').innerHTML = error.outerHTML;\n            }\n        }\n    };\n    Edit.prototype.getElemTable = function (inputElement) {\n        var isFHdr;\n        var gObj = this.parent;\n        var table;\n        if (gObj.editSettings.mode !== 'Dialog') {\n            isFHdr = (gObj.frozenRows && gObj.frozenRows\n                > (parseInt(closest(inputElement, '.' + literals.row).getAttribute(literals.dataRowIndex), 10) || 0));\n            var field = inputElement.name;\n            table = this.parent.isFrozenGrid() ? gObj.element : isFHdr ? gObj.getHeaderTable() : gObj.getContentTable();\n        }\n        else {\n            table = select('#' + gObj.element.id + '_dialogEdit_wrapper', document);\n        }\n        return table;\n    };\n    Edit.prototype.resetElemPosition = function (elem, args) {\n        var td = parentsUntil(args.element, literals.rowCell);\n        if (td) {\n            var tdRight = td.getBoundingClientRect().right;\n            var elemRight = elem.getBoundingClientRect().right;\n            if (elemRight > tdRight) {\n                var offSet = elemRight - tdRight;\n                elem.style.left = (elem.offsetLeft - offSet) + 'px';\n            }\n        }\n    };\n    Edit.prototype.validationComplete = function (args) {\n        if (this.parent.isEdit) {\n            var elem = this.getElemTable(args.element).querySelector('#' + getParsedFieldID(args.inputName) + '_Error');\n            if (elem) {\n                if (args.status === 'failure') {\n                    elem.style.display = '';\n                    this.resetElemPosition(elem, args);\n                }\n                else {\n                    elem.style.display = 'none';\n                }\n            }\n        }\n    };\n    Edit.prototype.createTooltip = function (element, error, name, display) {\n        var formObj = this.formObj.element;\n        var customForm = parentsUntil(element, 'e-virtual-validation');\n        if (customForm) {\n            formObj = this.virtualFormObj.element;\n        }\n        var gcontent = this.parent.getContent().firstElementChild;\n        var isScroll = gcontent.scrollHeight > gcontent.clientHeight || gcontent.scrollWidth > gcontent.clientWidth;\n        var isInline = this.parent.editSettings.mode !== 'Dialog';\n        var td = closest(element, '.' + literals.rowCell);\n        var row = closest(element, '.' + literals.row);\n        var isFHdr;\n        var isFHdrLastRow = false;\n        var validationForBottomRowPos;\n        var isBatchModeLastRow = false;\n        var viewPortRowCount = Math.round(this.parent.getContent().clientHeight / this.parent.getRowHeight()) - 1;\n        var rows = [].slice.call(this.parent.getContent().getElementsByClassName(literals.row));\n        if (this.parent.editSettings.mode === 'Batch') {\n            rows = [].slice.call(this.parent.getContent().querySelectorAll('.e-row:not(.e-hiddenrow)'));\n            if (viewPortRowCount >= 1 && rows.length >= viewPortRowCount\n                && rows[rows.length - 1].getAttribute(literals.dataRowIndex) === row.getAttribute(literals.dataRowIndex)) {\n                isBatchModeLastRow = true;\n            }\n        }\n        if (isInline) {\n            if (this.parent.frozenRows) {\n                var fHearderRows = [].slice.call(this.parent.getHeaderTable().querySelector(literals.tbody).querySelectorAll('.e-row:not(.e-hiddenrow)'));\n                isFHdr = fHearderRows.length > (parseInt(row.getAttribute(literals.dataRowIndex), 10) || 0);\n                isFHdrLastRow = isFHdr && parseInt(row.getAttribute(literals.dataRowIndex), 10) === fHearderRows.length - 1;\n                var insertRow = [].slice.call(this.parent.getHeaderTable().querySelector(literals.tbody).querySelectorAll('.e-row:not(.e-hiddenrow)'));\n                if (insertRow.length === 1 && (insertRow[0].classList.contains('e-addedrow') || insertRow[0].classList.contains('e-insertedrow'))) {\n                    isFHdrLastRow = true;\n                }\n            }\n            if (isFHdrLastRow || (viewPortRowCount >= 1 && rows.length >= viewPortRowCount\n                && ((this.parent.editSettings.newRowPosition === 'Bottom' && (this.editModule.args\n                    && this.editModule.args.requestType === 'add')) || (td.classList.contains('e-lastrowcell')\n                    && !row.classList.contains(literals.addedRow)))) || isBatchModeLastRow) {\n                validationForBottomRowPos = true;\n            }\n        }\n        var table = isInline ?\n            (isFHdr ? this.parent.getHeaderTable() : this.parent.getContentTable()) :\n            select('#' + this.parent.element.id + '_dialogEdit_wrapper .e-dlg-content', document);\n        var client = table.getBoundingClientRect();\n        var left = isInline ?\n            this.parent.element.getBoundingClientRect().left : client.left;\n        var input = closest(element, 'td');\n        var inputClient = input ? input.getBoundingClientRect() : element.parentElement.getBoundingClientRect();\n        var div = this.parent.createElement('div', {\n            className: 'e-tooltip-wrap e-lib e-control e-popup e-griderror',\n            id: name + '_Error',\n            styles: 'display:' + display + ';top:' +\n                ((isFHdr ? inputClient.top + inputClient.height : inputClient.bottom - client.top) + table.scrollTop + 9) + 'px;left:' +\n                (inputClient.left - left + table.scrollLeft + inputClient.width / 2) + 'px;' +\n                'max-width:' + inputClient.width + 'px;text-align:center;'\n        });\n        if (this.parent.cssClass) {\n            div.classList.add(this.parent.cssClass);\n        }\n        if (isInline && client.left < left) {\n            div.style.left = parseInt(div.style.left, 10) - client.left + left + 'px';\n        }\n        var content = this.parent.createElement('div', { className: 'e-tip-content' });\n        content.appendChild(error);\n        var arrow;\n        if (validationForBottomRowPos) {\n            arrow = this.parent.createElement('div', { className: 'e-arrow-tip e-tip-bottom' });\n            arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-outer e-tip-bottom' }));\n            arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-inner e-tip-bottom' }));\n        }\n        else {\n            arrow = this.parent.createElement('div', { className: 'e-arrow-tip e-tip-top' });\n            arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-outer e-tip-top' }));\n            arrow.appendChild(this.parent.createElement('div', { className: 'e-arrow-tip-inner e-tip-top' }));\n        }\n        div.appendChild(content);\n        div.appendChild(arrow);\n        if (!customForm && (this.parent.frozenRows) && this.parent.editSettings.mode !== 'Dialog') {\n            var getEditCell = this.parent.editSettings.mode === 'Normal' ?\n                closest(element, '.e-editcell') : closest(element, '.' + literals.table);\n            getEditCell.style.position = 'relative';\n            div.style.position = 'absolute';\n            if (this.parent.editSettings.mode === 'Batch' ||\n                (closest(element, '.' + literals.frozenContent) || closest(element, '.' + literals.frozenHeader))\n                || (this.parent.frozenRows)) {\n                if (this.parent.isFrozenGrid()) {\n                    if (td.classList.contains('e-unfreeze')) {\n                        addClass([div], 'e-unfreeze');\n                        formObj.appendChild(div);\n                    }\n                    else {\n                        var elem = closest(td, '.e-gridheader') ? this.parent.element.querySelector('.e-gridheader') :\n                            rows.length === 1 ? this.parent.element.querySelector('.e-gridcontent').querySelector('.e-content') :\n                                this.parent.element.querySelector('.e-gridcontent');\n                        elem.appendChild(div);\n                        elem.style.position = 'relative';\n                    }\n                }\n                else {\n                    formObj.appendChild(div);\n                }\n            }\n            else {\n                this.mFormObj.element.appendChild(div);\n            }\n        }\n        else {\n            if (customForm) {\n                this.virtualFormObj.element.appendChild(div);\n            }\n            else {\n                if (this.parent.isFrozenGrid()) {\n                    if (td.classList.contains('e-unfreeze')) {\n                        addClass([div], 'e-unfreeze');\n                        this.formObj.element.appendChild(div);\n                    }\n                    else {\n                        var elem = closest(td, '.e-gridheader') ? this.parent.element.querySelector('.e-gridheader') :\n                            rows.length === 1 ? this.parent.element.querySelector('.e-gridcontent').querySelector('.e-content') :\n                                this.parent.element.querySelector('.e-gridcontent');\n                        elem.appendChild(div);\n                        elem.style.position = 'relative';\n                    }\n                }\n                else {\n                    this.formObj.element.appendChild(div);\n                }\n            }\n        }\n        if (!isNullOrUndefined(td)) {\n            if (td.classList.contains('e-fixedfreeze')) {\n                div.classList.add('e-fixederror');\n            }\n            else if (td.classList.contains('e-leftfreeze') || td.classList.contains('e-rightfreeze')) {\n                div.classList.add('e-freezeerror');\n            }\n        }\n        if (!validationForBottomRowPos && isInline && gcontent.getBoundingClientRect().bottom < inputClient.bottom + inputClient.height) {\n            var contentDiv = this.parent.getContent().querySelector('.e-content');\n            if (this.parent.currentViewData.length === 0 && contentDiv.scrollTop === 0) {\n                contentDiv.scrollTop = div.offsetHeight + arrow.scrollHeight;\n            }\n            else {\n                gcontent.scrollTop = gcontent.scrollTop + div.offsetHeight + arrow.scrollHeight;\n            }\n        }\n        var lineHeight = parseInt(document.defaultView.getComputedStyle(div, null).getPropertyValue('font-size'), 10);\n        if (div.getBoundingClientRect().width < inputClient.width &&\n            div.querySelector('label').getBoundingClientRect().height / (lineHeight * 1.2) >= 2) {\n            div.style.width = div.style.maxWidth;\n        }\n        if (this.parent.frozenRows && this.parent.editSettings.mode !== 'Dialog') {\n            div.style.left = input.offsetLeft + (input.offsetWidth / 2 - div.offsetWidth / 2) + 'px';\n        }\n        else {\n            div.style.left = (parseInt(div.style.left, 10) - div.offsetWidth / 2) + 'px';\n        }\n        if (isInline && !isScroll && !this.parent.allowPaging || this.parent.frozenRows) {\n            // gcontent.style.position = 'static';\n            var pos = calculateRelativeBasedPosition(input, div);\n            div.style.top = pos.top + inputClient.height + 9 + 'px';\n        }\n        if (validationForBottomRowPos) {\n            if (isScroll && this.parent.height !== 'auto' && !this.parent.frozenRows\n                && !this.parent.enableVirtualization && !(div.classList.contains('e-freezeerror') && div.classList.contains('e-fixederror'))) {\n                var scrollWidth = gcontent.scrollWidth > gcontent.offsetWidth ? getScrollBarWidth() : 0;\n                var gHeight = this.parent.height.toString().indexOf('%') === -1 ?\n                    parseInt(this.parent.height, 10) : gcontent.offsetHeight;\n                div.style.bottom = (gHeight - gcontent.querySelector('table').offsetHeight\n                    - scrollWidth) + inputClient.height + 9 + 'px';\n            }\n            else {\n                div.style.bottom = inputClient.height + 9 + 'px';\n            }\n            if (rows.length < viewPortRowCount && this.parent.editSettings.newRowPosition === 'Bottom' && (this.editModule.args\n                && this.editModule.args.requestType === 'add')) {\n                var rowsCount = this.parent.frozenRows ? this.parent.frozenRows + (rows.length - 1) : rows.length - 1;\n                var rowsHeight = rowsCount * this.parent.getRowHeight();\n                var position = this.parent.getContent().clientHeight - rowsHeight;\n                div.style.bottom = position + 9 + 'px';\n            }\n            div.style.top = null;\n        }\n    };\n    /**\n     * @param {Column} col - specfies the column\n     * @returns {boolean} returns the whether column is grouped\n     * @hidden\n     */\n    Edit.prototype.checkColumnIsGrouped = function (col) {\n        return !col.visible && !(this.parent.groupSettings.columns.indexOf(col.field) > -1);\n    };\n    /**\n     * @param {object} editors -specfies the editors\n     * @returns {void}\n     * @hidden\n     */\n    Edit.AddEditors = function (editors) {\n        Edit.editCellType = extend(Edit.editCellType, editors);\n    };\n    Edit.editCellType = {\n        'dropdownedit': DropDownEditCell, 'numericedit': NumericEditCell,\n        'datepickeredit': DatePickerEditCell, 'datetimepickeredit': DatePickerEditCell,\n        'booleanedit': BooleanEditCell, 'defaultedit': DefaultEditCell,\n        'templateedit': TemplateEditCell\n    };\n    return Edit;\n}());\nexport { Edit };\n","//! moment.js locale configuration\n//! locale : Konkani Devanagari script [gom-deva]\n//! author : The Discoverer : https://github.com/WikiDiscoverer\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['थोडया सॅकंडांनी', 'थोडे सॅकंड'],\n            ss: [number + ' सॅकंडांनी', number + ' सॅकंड'],\n            m: ['एका मिणटान', 'एक मिनूट'],\n            mm: [number + ' मिणटांनी', number + ' मिणटां'],\n            h: ['एका वरान', 'एक वर'],\n            hh: [number + ' वरांनी', number + ' वरां'],\n            d: ['एका दिसान', 'एक दीस'],\n            dd: [number + ' दिसांनी', number + ' दीस'],\n            M: ['एका म्हयन्यान', 'एक म्हयनो'],\n            MM: [number + ' म्हयन्यानी', number + ' म्हयने'],\n            y: ['एका वर्सान', 'एक वर्स'],\n            yy: [number + ' वर्सांनी', number + ' वर्सां'],\n        };\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var gomDeva = moment.defineLocale('gom-deva', {\n        months: {\n            standalone:\n                'जानेवारी_फेब्रुवारी_मार्च_एप्रील_मे_जून_जुलय_ऑगस्ट_सप्टेंबर_ऑक्टोबर_नोव्हेंबर_डिसेंबर'.split(\n                    '_'\n                ),\n            format: 'जानेवारीच्या_फेब्रुवारीच्या_मार्चाच्या_एप्रीलाच्या_मेयाच्या_जूनाच्या_जुलयाच्या_ऑगस्टाच्या_सप्टेंबराच्या_ऑक्टोबराच्या_नोव्हेंबराच्या_डिसेंबराच्या'.split(\n                '_'\n            ),\n            isFormat: /MMMM(\\s)+D[oD]?/,\n        },\n        monthsShort:\n            'जाने._फेब्रु._मार्च_एप्री._मे_जून_जुल._ऑग._सप्टें._ऑक्टो._नोव्हें._डिसें.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'आयतार_सोमार_मंगळार_बुधवार_बिरेस्तार_सुक्रार_शेनवार'.split('_'),\n        weekdaysShort: 'आयत._सोम._मंगळ._बुध._ब्रेस्त._सुक्र._शेन.'.split('_'),\n        weekdaysMin: 'आ_सो_मं_बु_ब्रे_सु_शे'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'A h:mm [वाजतां]',\n            LTS: 'A h:mm:ss [वाजतां]',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY A h:mm [वाजतां]',\n            LLLL: 'dddd, MMMM Do, YYYY, A h:mm [वाजतां]',\n            llll: 'ddd, D MMM YYYY, A h:mm [वाजतां]',\n        },\n        calendar: {\n            sameDay: '[आयज] LT',\n            nextDay: '[फाल्यां] LT',\n            nextWeek: '[फुडलो] dddd[,] LT',\n            lastDay: '[काल] LT',\n            lastWeek: '[फाटलो] dddd[,] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s',\n            past: '%s आदीं',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(वेर)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // the ordinal 'वेर' only applies to day of the month\n                case 'D':\n                    return number + 'वेर';\n                default:\n                case 'M':\n                case 'Q':\n                case 'DDD':\n                case 'd':\n                case 'w':\n                case 'W':\n                    return number;\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week\n            doy: 3, // The week that contains Jan 4th is the first week of the year (7 + 0 - 4)\n        },\n        meridiemParse: /राती|सकाळीं|दनपारां|सांजे/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'राती') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सकाळीं') {\n                return hour;\n            } else if (meridiem === 'दनपारां') {\n                return hour > 12 ? hour : hour + 12;\n            } else if (meridiem === 'सांजे') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'राती';\n            } else if (hour < 12) {\n                return 'सकाळीं';\n            } else if (hour < 16) {\n                return 'दनपारां';\n            } else if (hour < 20) {\n                return 'सांजे';\n            } else {\n                return 'राती';\n            }\n        },\n    });\n\n    return gomDeva;\n\n})));\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TriggerHitAlert.vue?vue&type=style&index=0&id=43b7490b&prod&lang=css\"","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('CRow',[_c('CCol',{attrs:{\"col\":\"\"}},[_c('div',{staticClass:\"col-lg-12 control-section\",staticStyle:{\"padding\":\"10px\",\"position\":\"relative\"}},[_c('div',{attrs:{\"id\":\"account-info\"}}),_c('div',{staticStyle:{\"width\":\"100%\"}},[_c('ejs-grid',{ref:\"grid\",attrs:{\"id\":\"triggerHitAlertGridId\",\"dataSource\":_vm.data,\"allowFiltering\":true,\"commandClick\":_vm.commandClick,\"allowPaging\":true,\"allowTextWrap\":true,\"textWrapSettings\":_vm.wrapSettings,\"allowResizing\":true,\"query\":_vm.gridQuery,\"toolbarClick\":_vm.toolbarClick,\"allowExcelExport\":true,\"excelExportComplete\":_vm.excelExportComplete,\"allowReordering\":true,\"allowSorting\":true,\"editSettings\":_vm.editSettings,\"toolbar\":_vm.toolbar,\"pageSettings\":_vm.pageSettings,\"actionComplete\":_vm.actionComplete,\"actionBegin\":_vm.actionBegin,\"actionFailure\":_vm.actionFailure,\"filterSettings\":_vm.filterOptions,\"queryCellInfo\":_vm.customiseCell,\"width\":\"100%\",\"height\":\"100%\"}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"triggerAlertId\",\"headerText\":\"Id\",\"width\":\"120\",\"isPrimaryKey\":true,\"visible\":false}}),_c('e-column',{attrs:{\"field\":\"triggerDate\",\"headerText\":\"Alert Date\",\"textAlign\":\"Right\",\"format\":_vm.dateFormatOptions,\"type\":\"date\",\"width\":\"150\"}}),_c('e-column',{attrs:{\"field\":\"alertType\",\"headerText\":\"Alert\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"clientName\",\"headerText\":\"Client\",\"allowEditing\":false,\"width\":\"210\"}}),_c('e-column',{attrs:{\"field\":\"stateName\",\"headerText\":\"Country\",\"allowEditing\":false,\"width\":\"150\"}}),_c('e-column',{attrs:{\"field\":\"companyName\",\"headerText\":\"Company\",\"allowEditing\":false,\"width\":\"210\"}}),_c('e-column',{attrs:{\"field\":\"utilityTypeName\",\"headerText\":\"Commodity\",\"allowEditing\":false,\"visible\":false,\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"contractName\",\"headerText\":\"Contract\",\"allowEditing\":false,\"width\":\"300\"}}),_c('e-column',{attrs:{\"field\":\"productName\",\"headerText\":\"Product\",\"allowEditing\":false,\"width\":\"150\"}}),_c('e-column',{attrs:{\"field\":\"pricingAreaName\",\"headerText\":\"Price Area\",\"textAlign\":\"Left\",\"width\":\"150\",\"type\":\"string\"}}),_c('e-column',{attrs:{\"field\":\"tradeablePeriodName\",\"headerText\":\"Period\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"triggerTypeName\",\"headerText\":\"Trigger Type\",\"visible\":true,\"width\":\"150\",\"textAlign\":\"Right\"}}),_c('e-column',{attrs:{\"field\":\"triggerPrice\",\"headerText\":\"Trigger Price\",\"textAlign\":\"Right\",\"validationRules\":_vm.percentageRules,\"type\":\"number\",\"format\":\"n3\",\"editType\":\"numericedit\",\"edit\":_vm.numericParams,\"width\":\"210\"}}),_c('e-column',{attrs:{\"field\":\"tradeablePeriodId\",\"headerText\":\"Watched Period\",\"textAlign\":\"Right\",\"visible\":false,\"validationRules\":_vm.requiredRules,\"editType\":\"dropdownedit\",\"edit\":_vm.tradebalePeriodParams,\"foreignKeyField\":\"id\",\"foreignKeyValue\":\"name\",\"dataSource\":_vm.tradebalePeriods,\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"marketPrice\",\"headerText\":\"Market Price\",\"textAlign\":\"Right\",\"allowEditing\":false,\"validationRules\":_vm.percentageRules,\"type\":\"number\",\"format\":\"n3\",\"editType\":\"numericedit\",\"edit\":_vm.numericParams,\"width\":\"150\"}}),_c('e-column',{attrs:{\"field\":\"delta\",\"headerText\":\"Delta to Trigger\",\"textAlign\":\"Right\",\"allowEditing\":false,\"validationRules\":_vm.percentageRules,\"type\":\"number\",\"format\":\"n3\",\"editType\":\"numericedit\",\"edit\":_vm.numericParams,\"width\":\"180\"}}),_c('e-column',{attrs:{\"field\":\"alertStatus\",\"headerText\":\"Status\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"unit\",\"headerText\":\"Unit\",\"visible\":false,\"width\":\"60\"}}),_c('e-column',{attrs:{\"field\":\"tolerance\",\"headerText\":\"Tolerance\",\"visible\":false,\"textAlign\":\"Right\",\"validationRules\":_vm.percentageRules,\"type\":\"number\",\"format\":\"n1\",\"editType\":\"numericedit\",\"edit\":_vm.percentageParams,\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"referenceTypeId\",\"headerText\":\"Reference Type\",\"textAlign\":\"Right\",\"visible\":false,\"validationRules\":_vm.requiredRules,\"editType\":\"dropdownedit\",\"edit\":_vm.referenceTypeParams,\"foreignKeyField\":\"id\",\"foreignKeyValue\":\"name\",\"dataSource\":_vm.referenceTypes,\"width\":\"30\"}}),_c('e-column',{attrs:{\"field\":\"referenceTypeName\",\"headerText\":\"Reference Type\",\"visible\":false,\"width\":\"230\"}}),_c('e-column',{attrs:{\"headerText\":\"Watched Window\",\"columns\":_vm.dateColumns,\"textAlign\":\"Center\"}}),_c('e-column',{attrs:{\"field\":\"applyUntilEnd\",\"headerText\":\"Apply until Default Deadline\",\"displayAsCheckBox\":\"true\",\"visible\":false,\"edit\":_vm.checkboxParams,\"editType\":\"booleanedit\",\"type\":\"boolean\",\"width\":\"150\"}}),_c('e-column',{attrs:{\"field\":\"notifyOnSystem\",\"headerText\":\"Notify On System\",\"defaultValue\":\"true\",\"displayAsCheckBox\":\"true\",\"visible\":false,\"allowEditing\":false,\"editType\":\"booleanedit\",\"type\":\"boolean\",\"width\":\"150\"}}),_c('e-column',{attrs:{\"field\":\"notifyEmailAddresses\",\"headerText\":\"Notify Email Addresses\",\"multiline\":\"true\",\"edit\":_vm.multilineParams,\"visible\":false,\"width\":\"150\"}}),_c('e-column',{attrs:{\"headerText\":\"Actions\",\"width\":\"230\",\"textAlign\":\"left\",\"commands\":_vm.commands}})],1)],1)],1),_c('ejs-dialog',{ref:\"alertDialog\",attrs:{\"allowDragging\":_vm.draggable,\"header\":_vm.header,\"buttons\":_vm.alertDlgButtons,\"cssClass\":\"greyBackground\",\"id\":\"alertDialog\",\"visible\":false,\"animationSettings\":_vm.animationSettings,\"showCloseIcon\":_vm.showCloseIcon,\"open\":_vm.dialogOpen,\"close\":_vm.dialogClose,\"width\":_vm.alertWidth,\"position\":_vm.position}},[_c('h5',{staticClass:\"ml-5\",attrs:{\"id\":\"graphHeader\"}},[_vm._v(\" \"+_vm._s(_vm.alertType)+\" \")]),_c('br'),_c('h6',{staticClass:\"ml-5\",attrs:{\"id\":\"graphHeaderSub\"}},[_vm._v(\" \"+_vm._s(_vm.type)+\" Trigger\")]),_c('br'),_c('label',{staticClass:\"mr-5 float-right\"},[_vm._v(\"Alert issued on : \"+_vm._s(_vm.triggerDate))]),_c('br'),_c('br'),_c('label',{staticClass:\"ml-5\"},[_vm._v(_vm._s(_vm.alertText))]),_c('br'),_c('br'),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"column ml-3\"},[_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Client\")]),_vm._v(\": \"+_vm._s(_vm.client))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Country\")]),_vm._v(\": \"+_vm._s(_vm.country))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Price Area\")]),_vm._v(\": \"+_vm._s(_vm.pricingAreaName))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Utility\")]),_vm._v(\": \"+_vm._s(_vm.utility))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Product\")]),_vm._v(\": \"+_vm._s(_vm.product))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Company\")]),_vm._v(\": \"+_vm._s(_vm.company))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Contract Name\")]),_vm._v(\": \"+_vm._s(_vm.contractName))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Contract ID\")]),_vm._v(\": \"+_vm._s(_vm.contractId))]),_c('br'),_c('br')]),_c('div',{staticClass:\"column ml-5\"},[_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Watch Period\")]),_vm._v(\": \"+_vm._s(_vm.watchPeriod))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Trigger Type\")]),_vm._v(\": \"+_vm._s(_vm.type))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Trigger Price\")]),_vm._v(\": \"+_vm._s(_vm.triggerPrice)+\" \"+_vm._s(_vm.contractUnits))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Market Price\")]),_vm._v(\": \"+_vm._s(_vm.marketPrice)+\" \"+_vm._s(_vm.contractUnits))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Delta to Trigger\")]),_vm._v(\": \"+_vm._s(_vm.delta)+\" \"+_vm._s(_vm.contractUnits))]),_c('br'),_c('br')])]),_c('ejs-chart',{attrs:{\"id\":\"hitChartContainer\",\"title\":_vm.title,\"zoomSettings\":_vm.zoom,\"primaryXAxis\":_vm.primaryXAxis,\"primaryYAxis\":_vm.primaryYAxis,\"tooltip\":_vm.tooltip,\"textRender\":_vm.textRender,\"width\":\"700px\",\"height\":\"350px\"}},[_c('e-series-collection',[_c('e-series',{attrs:{\"xName\":\"x\",\"yName\":\"y\",\"name\":\"Market Price\",\"type\":\"MultiColoredLine\",\"pointColorMapping\":\"color\",\"marker\":_vm.marker}})],1)],1)],1)],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <CRow>\r\n        <CCol col>\r\n            <div class=\"col-lg-12 control-section\" style=\"padding:10px;position:relative;\">\r\n                <div id='account-info'>\r\n                </div>\r\n                <div style=\"width:100%;\">\r\n                    <ejs-grid ref='grid' id=\"triggerHitAlertGridId\" :dataSource=\"data\" :allowFiltering='true' :commandClick='commandClick' :allowPaging=\"true\" \r\n                              :allowTextWrap='true' :textWrapSettings='wrapSettings' :allowResizing='true' :query='gridQuery'\r\n                              :toolbarClick='toolbarClick' :allowExcelExport='true' :excelExportComplete='excelExportComplete'\r\n                              :allowReordering='true' :allowSorting='true' :editSettings='editSettings' :toolbar='toolbar'\r\n                              :pageSettings='pageSettings' :actionComplete='actionComplete' :actionBegin=\"actionBegin\"\r\n                              :actionFailure=\"actionFailure\" :filterSettings='filterOptions' :queryCellInfo='customiseCell' width=\"100%\" height=\"100%\">\r\n                        <e-columns>\r\n                            <e-column field='triggerAlertId' headerText='Id' width=120 :isPrimaryKey='true' :visible='false'></e-column>\r\n                            <e-column field='triggerDate' headerText='Alert Date' textAlign='Right' :format='dateFormatOptions' type='date' width=150></e-column>\r\n                            <!--<e-column field='triggerStartDate' headerText='Start Date' textAlign='Right' :format='dateFormatOptions' type='date' width=150></e-column>\r\n                            <e-column field='triggerEndDate' headerText='End Date' textAlign='Right' :format='dateFormatOptions' type='date' width=150></e-column>-->\r\n                            <e-column field='alertType' headerText='Alert' width=120></e-column>\r\n                            <e-column field='clientName' headerText='Client' :allowEditing=\"false\" width=210></e-column>\r\n                            <e-column field='stateName' headerText='Country' :allowEditing=\"false\" width=150></e-column>\r\n                            <e-column field='companyName' headerText='Company' :allowEditing=\"false\" width=210></e-column>\r\n                            <e-column field='utilityTypeName' headerText='Commodity' :allowEditing=\"false\" :visible='false' width=120></e-column>\r\n                            <e-column field='contractName' headerText='Contract' :allowEditing=\"false\" width=300></e-column>\r\n                            <e-column field='productName' headerText='Product' :allowEditing=\"false\" width=150></e-column>\r\n                             <e-column field='pricingAreaName' headerText='Price Area' textAlign='Left' width=150 type=\"string\"></e-column>\r\n                            <e-column field='tradeablePeriodName' headerText='Period' width=120></e-column>\r\n                            <!--<e-column field='triggerTypeId' headerText='Trigger Type' textAlign='Right' :validationRules=\"requiredRules\" editType='dropdownedit' :edit='triggerTypeParams' foreignKeyField=\"id\" foreignKeyValue='name' :dataSource='triggerTypes' width=150></e-column>-->\r\n                            <e-column field='triggerTypeName' headerText='Trigger Type' :visible='true' width=150 textAlign=\"Right\"></e-column>\r\n                            <e-column field='triggerPrice' headerText='Trigger Price' textAlign='Right' :validationRules=\"percentageRules\" type=\"number\" format=\"n3\" editType='numericedit' :edit='numericParams' width=210></e-column>\r\n\r\n                            <e-column field='tradeablePeriodId' headerText='Watched Period' textAlign='Right' :visible='false' :validationRules=\"requiredRules\" editType='dropdownedit' :edit='tradebalePeriodParams' foreignKeyField=\"id\" foreignKeyValue='name' :dataSource='tradebalePeriods' width=120></e-column>\r\n                            <e-column field='marketPrice' headerText='Market Price' textAlign='Right' :allowEditing=\"false\" :validationRules=\"percentageRules\" type=\"number\" format=\"n3\" editType='numericedit' :edit='numericParams' width=150></e-column>\r\n                            <e-column field='delta' headerText='Delta to Trigger' textAlign='Right' :allowEditing=\"false\" :validationRules=\"percentageRules\" type=\"number\" format=\"n3\" editType='numericedit' :edit='numericParams' width=180></e-column>\r\n                            <e-column field='alertStatus' headerText='Status' width=120></e-column>\r\n\r\n                            <e-column field='unit' headerText='Unit' :visible='false' width=60></e-column>\r\n                            <e-column field='tolerance' headerText='Tolerance' :visible='false' textAlign='Right' :validationRules=\"percentageRules\" type=\"number\" format=\"n1\" editType='numericedit' :edit='percentageParams' width=120></e-column>\r\n\r\n                            <e-column field='referenceTypeId' headerText='Reference Type' textAlign='Right' :visible='false' :validationRules=\"requiredRules\" editType='dropdownedit' :edit='referenceTypeParams' foreignKeyField=\"id\" foreignKeyValue='name' :dataSource='referenceTypes' width=30></e-column>\r\n                            <e-column field='referenceTypeName' headerText='Reference Type' :visible='false' width=230></e-column>\r\n\r\n                            <e-column headerText='Watched Window' :columns='dateColumns' textAlign=\"Center\"></e-column>\r\n\r\n\r\n\r\n\r\n                            <e-column field='applyUntilEnd' headerText='Apply until Default Deadline' displayAsCheckBox='true' :visible='false' :edit='checkboxParams' editType='booleanedit' type='boolean' width=150></e-column>\r\n                            <e-column field='notifyOnSystem' headerText='Notify On System' defaultValue='true' displayAsCheckBox='true' :visible='false' :allowEditing=\"false\" editType='booleanedit' type='boolean' width=150></e-column>\r\n                            <e-column field='notifyEmailAddresses' headerText='Notify Email Addresses' multiline=\"true\" :edit=\"multilineParams\" :visible='false' width=150></e-column>\r\n\r\n                            <e-column headerText='Actions' width=230 textAlign='left' :commands='commands'></e-column>\r\n                        </e-columns>\r\n                    </ejs-grid>\r\n                </div>            \r\n                <ejs-dialog :allowDragging=\"draggable\" :header=\"header\" :buttons='alertDlgButtons' cssClass=\"greyBackground\" id=\"alertDialog\" ref=\"alertDialog\" v-bind:visible=\"false\" :animationSettings='animationSettings' :showCloseIcon='showCloseIcon' :open=\"dialogOpen\" :close=\"dialogClose\" :width='alertWidth' :position=\"position\">\r\n                    <h5 class=\"ml-5\" id=\"graphHeader\">  {{alertType}} </h5><br />\r\n                    <h6 class=\"ml-5\" id=\"graphHeaderSub\">  {{type}} Trigger</h6><br />\r\n                    <label class=\"mr-5 float-right\">Alert issued on : {{triggerDate}}</label><br />\r\n                    <br />\r\n                    <label class=\"ml-5\">{{alertText}}</label><br />\r\n                    <br />\r\n                    <div class=\"row\">\r\n                        <div class=\"column ml-3\">\r\n                            <label class=\"ml-5\"><b>Client</b>: {{client}}</label><br />\r\n                            <label class=\"ml-5\"><b>Country</b>: {{country}}</label><br />\r\n                            <label class=\"ml-5\"><b>Price Area</b>: {{pricingAreaName}}</label><br />\r\n                            <label class=\"ml-5\"><b>Utility</b>: {{utility}}</label><br />\r\n                            <label class=\"ml-5\"><b>Product</b>: {{product}}</label><br />\r\n                            <label class=\"ml-5\"><b>Company</b>: {{company}}</label><br />\r\n                            <label class=\"ml-5\"><b>Contract Name</b>: {{contractName}}</label><br />\r\n                            <label class=\"ml-5\"><b>Contract ID</b>: {{contractId}}</label><br />\r\n                            <br />\r\n                        </div>\r\n                        <div class=\"column ml-5\">\r\n                            <label class=\"ml-5\"><b>Watch Period</b>: {{watchPeriod}}</label><br />\r\n                            <label class=\"ml-5\"><b>Trigger Type</b>: {{type}}</label><br />\r\n                            <label class=\"ml-5\"><b>Trigger Price</b>: {{triggerPrice}} {{contractUnits}}</label><br />\r\n                            <label class=\"ml-5\"><b>Market Price</b>: {{marketPrice}} {{contractUnits}}</label><br />\r\n                            <label class=\"ml-5\"><b>Delta to Trigger</b>: {{delta}} {{contractUnits}}</label><br />\r\n                            <br />\r\n                        </div>\r\n                    </div>\r\n                    <!--<h1 class=\"expiredTriggerHeader\">  </h1>-->\r\n                    <ejs-chart id=\"hitChartContainer\" :title='title' :zoomSettings='zoom' :primaryXAxis='primaryXAxis' :primaryYAxis='primaryYAxis' :tooltip='tooltip' :textRender='textRender' width=\"700px\" height=\"350px\">\r\n                        <!--<e-chart-primaryyaxis labelFormat=\"n3\"></e-chart-primaryyaxis>-->\r\n                        <e-series-collection>\r\n                            <e-series xName='x' yName='y' name='Market Price' type='MultiColoredLine' pointColorMapping='color' :marker='marker'> </e-series>\r\n                        </e-series-collection>\r\n                    </ejs-chart>\r\n                </ejs-dialog>\r\n            </div>\r\n        </CCol>\r\n    </CRow>\r\n</template>\r\n\r\n<script>\r\n    import Vue from \"vue\";\r\n    import { GridPlugin, Edit, Page, Toolbar, Sort, Filter, Reorder, Resize, ExcelExport, ForeignKey, CommandColumn } from \"@syncfusion/ej2-vue-grids\";\r\n    import { DropDownList } from \"@syncfusion/ej2-dropdowns\";\r\n    import { UploaderPlugin } from '@syncfusion/ej2-vue-inputs';\r\n    import { DialogUtility } from '@syncfusion/ej2-popups';\r\n    import SyncHelper from '../../common/syncfusion';\r\n    import { Query } from '@syncfusion/ej2-data';\r\n    import gridOptions from '../../common/gridOptions'\r\n    import dates from '../../common/dates'\r\n    import urls from '../../common/urls';\r\n    import apis from '../../common/network'\r\n    import { DatePickerPlugin, DatePicker } from '@syncfusion/ej2-vue-calendars';\r\n    import { CheckBoxPlugin, CheckBox } from \"@syncfusion/ej2-vue-buttons\";\r\n    import { ChartPlugin, ColumnSeries, StripLine, LineSeries, DataLabel, Category, DateTime, Tooltip, ChartAnnotation, Zoom, MultiColoredLineSeries } from \"@syncfusion/ej2-vue-charts\";\r\n    import { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\r\n    import { DialogPlugin } from '@syncfusion/ej2-vue-popups';\r\n    import { ButtonPlugin } from '@syncfusion/ej2-vue-buttons';\r\n    import { enableRipple } from '@syncfusion/ej2-base';\r\n    import { TextBox } from \"@syncfusion/ej2-inputs\";\r\n    import store from '../../store';\r\n    import moment from 'moment';\r\n\r\n    Vue.use(ChartPlugin);\r\n    Vue.use(UploaderPlugin);\r\n    Vue.use(DialogUtility);\r\n    Vue.use(GridPlugin);\r\n\r\n    Vue.use(ButtonPlugin);\r\n    Vue.use(DialogPlugin);\r\n    enableRipple(true);\r\n\r\n\r\n    let tradebalePeriodObj, tradebalePeriodElem, triggerTypeObj, triggerTypeElem, referenceTypeObj, referenceTypeElem, datePickerObj, elem, startDatePickerObj, startDateElem, checkboxElem, checkBoxObj;\r\n    let  multilineElem, multilineObj;\r\n    export default {\r\n        props: ['reportContractId', 'clientId', 'reportTradingGroupId'],\r\n        mounted() {\r\n            createSpinner({\r\n                target: document.getElementById('mainSpinner'),\r\n                width: '50',\r\n                type: 'Material',\r\n                label: 'Loading data...',\r\n                cssClass: 'loading'\r\n            });\r\n        },\r\n        data() {\r\n            return {\r\n                // needed because of form being loaded from tab,in such cases this isnt available and store is loaded from import\r\n                store: store,\r\n                // needed for vieweing dialog,initally not there then appears\r\n                showCloseIcon: false,\r\n                position: { X: 'center', Y: 'center' },\r\n                animationSettings: { effect: 'Zoom' },\r\n                alertDlgButtons: [{\r\n                    click: this.alertDlgBtnClick,\r\n                    buttonModel: { content: 'Dismiss', isPrimary: true }\r\n                }],\r\n                alertWidth:\"750px\",\r\n                ShowBtn: true,\r\n                draggable: true,\r\n                header: \" \",\r\n                zoom:\r\n                {\r\n                    enableMouseWheelZooming: false,\r\n                    enablePinchZooming: false,\r\n                    enableSelectionZooming: true\r\n                },\r\n                statusAlertcontractId: parseInt(this.reportContractId),// when form is loaded from contracts reporting ui, when not it will be undefined \r\n                statusAlertTradingGroupId: parseInt(this.reportTradingGroupId),// when form is loaded from contracts reporting ui, when not it will be undefined\r\n                gridQuery: new Query().addParams(\"triggerAlert\", \"Hit\").addParams(\"contractId\", this.reportContractId).addParams(\"clientId\", this.clientId).addParams(\"tradingGroupId\", this.reportTradingGroupId),\r\n                // this is done due to header column\r\n                dateColumns: [\r\n                    {\r\n                        field: 'triggerStartDate',\r\n                        headerText: 'Start Date',\r\n                        width: 75,\r\n                        textAlign: 'Right',\r\n                        minWidth: 10,\r\n                        format: { type: 'date', format: 'dd/MM/yyyy' },\r\n                        type: 'date',\r\n                        visible: false,\r\n                        validationRules: { required: true },\r\n                        edit: {\r\n                            create: function () {\r\n                                startDateElem = document.createElement('input');\r\n                                return startDateElem;\r\n                                debugger;\r\n                            },\r\n                            read: () => {\r\n                                return startDatePickerObj.value;\r\n                            },\r\n                            destroy: () => {\r\n                                startDatePickerObj.destroy();\r\n                            },\r\n                            // start date cant be before today,as trigger can start at least from today,cant set it up to start from yesterday as the job wont do data retroactivly\r\n                            // max will be later set in the code to the last day of the period prior to the one chosen,as trading can be done until a period starts,and having trigger when you cant trade doesnt make sense\r\n                            write: (args) => {\r\n                                startDatePickerObj = new DatePicker({\r\n                                    value: new Date(args.rowData[args.column.field]),\r\n                                    floatLabelType: 'Always',\r\n                                    format: 'dd/MM/yyyy',\r\n                                    //sets the min.\r\n                                    min: dates.addDays(new Date(), 1),\r\n                                    placeholder: 'Start Date',\r\n                                    firstDayOfWeek: 1,\r\n                                });\r\n                                startDatePickerObj.appendTo(startDateElem);\r\n                            }\r\n                        }\r\n                    },\r\n                    {\r\n                        field: 'triggerEndDate',\r\n                        headerText: 'End Date',\r\n                        width: 75,\r\n                        textAlign: 'Right',\r\n                        minWidth: 10,\r\n                        format: { type: 'date', format: 'dd/MM/yyyy' },\r\n                        type: 'date',\r\n                        visible: false,\r\n                        validationRules: { required: true, minlength: [(args) => { return this.dateValidation(args) }, 'End Date must be greater than Start Date.'] },\r\n                        edit: {\r\n                            create: function () {\r\n                                elem = document.createElement('input');\r\n                                return elem;\r\n                            },\r\n                            read: () => {\r\n                                return datePickerObj.value;\r\n                            },\r\n                            destroy: () => {\r\n                                datePickerObj.destroy();\r\n                            },\r\n                            // end date cant be before tomorow,as trigger can start at least from today,cant set it up to start from yesterday as the job wont do data retroactivly,and it must last for at least a day\r\n                            // max will be later set in the code to the last day of the period prior to the one chosen,as trading can be done until a period starts,and having trigger when you cant trade doesnt make sense\r\n                            write: (args) => {\r\n                                datePickerObj = new DatePicker({\r\n                                    value: new Date(args.rowData[args.column.field]),\r\n                                    floatLabelType: 'Always',\r\n                                    format: 'dd/MM/yyyy',\r\n                                    //sets the min after the startdate.\r\n                                    min: dates.addDays(new Date(), 1),\r\n                                    placeholder: 'End Date',\r\n                                    firstDayOfWeek: 1,\r\n                                });\r\n                                datePickerObj.appendTo(elem);\r\n                            }\r\n                        }\r\n                    }\r\n                ],\r\n                referenceTypes: SyncHelper.getDataManager('Utils/referenceTypes'),\r\n                triggerTypes: SyncHelper.getDataManager('Utils/triggerTypes'),\r\n                contractUnits: \"\",\r\n                units: \"\",\r\n                alertType: \"\",\r\n                triggerDate: \"\",\r\n                client: \"\",\r\n                country: \"\",\r\n                utility: \"\",\r\n                company: \"\",\r\n                contractName: \"\",\r\n                contractId: \"\",\r\n                watchPeriod: \"\",\r\n                triggerPrice: \"\",\r\n                marketPrice: \"\",\r\n                delta: \"\",\r\n                alertText: \"\",\r\n                type: \"\",\r\n                product: \"\",\r\n                pricingAreaName: \"\",\r\n                wrapSettings: { wrapMode: 'Header' },\r\n                commands: [{ buttonOption: { cssClass: 'e-primary view', content: 'View' } },\r\n                    { buttonOption: { cssClass: 'secondary mark', content: 'Mark as Seen' } }],\r\n                tradebalePeriods: SyncHelper.getDataManager('Utils/contractTradeablePeriods'),\r\n                dateFormatOptions: { type: 'date', format: 'dd/MM/yyyy' },\r\n                data: SyncHelper.getDataManager(\"TriggerAlert\"),\r\n                tradebalePeriodParams: {\r\n                    create: () => {\r\n                        tradebalePeriodElem = document.createElement('input');\r\n                        return tradebalePeriodElem;\r\n                    },\r\n                    read: () => {\r\n                        return tradebalePeriodObj.value;\r\n                    },\r\n                    destroy: () => {\r\n                        tradebalePeriodObj.destroy();\r\n                    },\r\n                    write: (args) => {\r\n                        tradebalePeriodObj = new DropDownList({\r\n                            query: new Query().addParams(\"contractId\", args.rowData.contractId),\r\n                            dataSource: this.tradebalePeriods,\r\n                            fields: { text: args.column.foreignKeyValue, value: args.column.foreignKeyField },\r\n                            value: ((args.foreignKeyData && args.foreignKeyData[0]) ? args.foreignKeyData[0][args.column.foreignKeyField] : null),\r\n                            placeholder: 'Tradeable Period',\r\n                            floatLabelType: 'Always',\r\n                            allowFiltering: true,\r\n                            showClearButton: true,\r\n                            change: (args) => {\r\n                                if (args.value != null) {\r\n                                    apis.protectedApi(`${urls.apiBaseUrl}ContractTrigger/PeriodDeadline/${args.value}`).then(it => {\r\n\r\n                                        if (checkBoxObj.checked) {\r\n\r\n                                            datePickerObj.value = it.data.lastDay;\r\n                                        }\r\n                                        startDatePickerObj.max = it.data.lastDay;\r\n                                        datePickerObj.max = it.data.lastDay;\r\n                                    }).catch(\r\n                                        response => {\r\n                                            var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                                            gridOptions.errorAlert(\"Error: \" + message);\r\n                                        }\r\n                                    );\r\n                                }\r\n                            }\r\n                        });\r\n                        tradebalePeriodObj.appendTo(tradebalePeriodElem);\r\n                    }\r\n                },\r\n                referenceTypeParams: {\r\n                    create: () => {\r\n                        referenceTypeElem = document.createElement('input');\r\n                        return referenceTypeElem;\r\n                    },\r\n                    read: () => {\r\n                        return referenceTypeObj.value;\r\n                    },\r\n                    destroy: () => {\r\n                        referenceTypeObj.destroy();\r\n                    },\r\n                    write: (args) => {\r\n                        referenceTypeObj = new DropDownList({\r\n                            dataSource: this.referenceTypes,\r\n                            fields: { text: args.column.foreignKeyValue, value: args.column.foreignKeyField },\r\n                            value: ((args.foreignKeyData && args.foreignKeyData[0]) ? args.foreignKeyData[0][args.column.foreignKeyField] : null),\r\n                            placeholder: 'Reference Type',\r\n                            floatLabelType: 'Always',\r\n                            allowFiltering: true,\r\n                            showClearButton: true,\r\n                        });\r\n                        referenceTypeObj.appendTo(referenceTypeElem);\r\n                    }\r\n                },\r\n                triggerTypeParams: {\r\n                    create: () => {\r\n                        triggerTypeElem = document.createElement('input');\r\n                        return triggerTypeElem;\r\n                    },\r\n                    read: () => {\r\n                        return triggerTypeObj.value;\r\n                    },\r\n                    destroy: () => {\r\n                        triggerTypeObj.destroy();\r\n                    },\r\n                    write: (args) => {\r\n                        triggerTypeObj = new DropDownList({\r\n                            cssClass: ((args.foreignKeyData && args.foreignKeyData[0]) ? args.foreignKeyData[0][args.column.foreignKeyValue] == 'Lower' ? 'greenBox' : 'redBox' : null),\r\n                            dataSource: this.triggerTypes,\r\n                            fields: { text: args.column.foreignKeyValue, value: args.column.foreignKeyField },\r\n                            value: ((args.foreignKeyData && args.foreignKeyData[0]) ? args.foreignKeyData[0][args.column.foreignKeyField] : null),\r\n                            placeholder: 'Trigger Type',\r\n                            floatLabelType: 'Always',\r\n                            allowFiltering: true,\r\n                            showClearButton: true,\r\n                            change: (args) => {\r\n                                if (args.itemData.name == 'Lower') {\r\n                                    args.element.parentElement.classList.remove('redBox');\r\n                                    args.element.parentElement.classList.add('greenBox');\r\n                                } else {\r\n                                    args.element.parentElement.classList.remove('greenBox');\r\n                                    args.element.parentElement.classList.add('redBox');\r\n                                }\r\n                            }\r\n                        });\r\n                        triggerTypeObj.appendTo(triggerTypeElem);\r\n\r\n                    }\r\n                },\r\n                checkboxParams: {\r\n                    create: function () {\r\n                        checkboxElem = document.createElement('input');\r\n                        return checkboxElem;\r\n                    },\r\n                    read: () => {\r\n                        return checkBoxObj.checked;\r\n                    },\r\n                    destroy: () => {\r\n                        checkBoxObj.destroy();\r\n                    },\r\n                    write: (args) => {\r\n                        checkBoxObj = new CheckBox({\r\n                            cssClass: 'e-primary',\r\n                            checked: args.rowData[args.column.field],\r\n                            disabled: false,\r\n                            //value: args.rowData[args.column.field],\r\n                            label: \"Apply until End Date\",\r\n                            change: (args) => {\r\n                                if (args.checked && tradebalePeriodObj.value != undefined) {\r\n                                    apis.protectedApi(`${urls.apiBaseUrl}ContractTrigger/PeriodDeadline/${tradebalePeriodObj.value}`).then(it => {\r\n                                        datePickerObj.value = it.data.lastDay;\r\n                                    }\r\n                                    ).catch(\r\n                                        response => {\r\n                                            var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                                            gridOptions.errorAlert(\"Error: \" + message);\r\n                                        }\r\n                                    );\r\n                                }\r\n                                if (args.checked == true) {\r\n                                    datePickerObj.enabled = false;\r\n                                } else {\r\n                                    datePickerObj.enabled = true;\r\n                                }\r\n                            }\r\n                        });\r\n                        checkBoxObj.appendTo(checkboxElem);\r\n                    }\r\n                },\r\n                multilineParams: {\r\n                    create: function () {\r\n                        multilineElem = document.createElement(\"textarea\");\r\n                        return multilineElem;\r\n                    },\r\n                    read: () => {\r\n                        return multilineObj.value;\r\n                    },\r\n                    destroy: () => {\r\n                        multilineObj.destroy();\r\n                    },\r\n                    write: args => {\r\n                        multilineObj = new TextBox({\r\n                            value: args.rowData[\"notifyEmailAddresses\"],\r\n                            floatLabelType: \"Always\",\r\n                            placeholder: 'Notify Email Addresses',\r\n                            multiline: true,\r\n\r\n                        });\r\n                        multilineObj.appendTo(multilineElem);\r\n                    }\r\n                },\r\n                //pageSettings: gridOptions.pageSettings,\r\n                pageSettings: { pageSizes: [10, 20, 50, 100], pageSize: 10, pageCount: 4 },\r\n                editSettings: {\r\n                    showConfirmDialog: true,\r\n                    showDeleteConfirmDialog: true,\r\n                    allowEditing: false,\r\n                    allowAdding: false,\r\n                    allowDeleting: store.state.permissions[\"Permissions.Triggers.Delete\"],\r\n                    mode: 'Dialog'\r\n                },\r\n                numericParams: {\r\n                    params: {\r\n                        validateDecimalOnType: true,\r\n                        decimals: 4,\r\n                        format: \"n4\"\r\n                    }\r\n                },\r\n                percentageParams: {\r\n                    params: {\r\n                        validateDecimalOnType: true,\r\n                        decimals: 1,\r\n                        format: \"n1\"\r\n                    }\r\n                },\r\n                toolbar: ['Delete', 'ExcelExport'],\r\n                requiredRules: { required: true },\r\n                percentageRules: { required: true, number: true },\r\n                nameRules: { required: true, maxLength: 50 },\r\n                editparams: { params: { popupHeight: '300px' } },\r\n                filterOptions: gridOptions.filterSettings,\r\n\r\n                seriesData: this.marketPricesPerDay,\r\n                primaryXAxis: {\r\n                    valueType: 'DateTime', intervalType: 'Days',\r\n                    title: 'Date',\r\n                    titleStyle: {\r\n                        size: '16px', color: '#4d4d4d',\r\n                        fontFamily: 'Arial Narrow', fontWeight: 'bold'\r\n                    }\r\n\r\n                },\r\n                primaryYAxis:\r\n                {\r\n                    title: 'Price',\r\n                    titleStyle: {\r\n                        size: '16px', color: '#4d4d4d',\r\n                        fontFamily: 'Arial Narrow', fontWeight: 'bold'\r\n                    }\r\n    \r\n                },\r\n                tooltip: { enable: true },\r\n                //titleStyle: {\r\n                //    fontFamily: \"Arial\",\r\n                //    fontStyle: 'italic',\r\n                //    fontWeight: 'regular',\r\n                //    color: \"#4d4d4d\",\r\n                //    size: '23px'\r\n                //},\r\n                //title: this.title,\r\n                title: {\r\n                    text: this.title,\r\n                    textStyle: {\r\n                        color: '#4d4d4d', \r\n                        fontWeight: 'bold',\r\n                        fontFamily: 'Arial Narrow',\r\n                        fontSize: 20     \r\n                    }\r\n                },\r\n                marker: {\r\n                    dataLabel: {\r\n                        visible: true\r\n                    }\r\n                },\r\n\r\n            };\r\n        },\r\n        methods: {\r\n            alertDlgBtnClick: function () {\r\n                this.$refs.alertDialog.hide();\r\n            },\r\n            dialogClose: function () {\r\n                this.ShowBtn = true;\r\n            },\r\n            dialogOpen: function () {\r\n                this.ShowBtn = false;\r\n            },\r\n            dateValidation: function (args) {\r\n                return startDatePickerObj.value <= datePickerObj.value;\r\n            },\r\n            textRender: function (args) {\r\n                //if (this.type != \"Lower\" && args.point.y >= this.lowerPrice) {\r\n                //    args.text = args.text + ' Trigger Hit';\r\n                //    args.color = 'yellow';\r\n                //}\r\n                //else if (this.type == \"Lower\" && args.point.y <= this.higherPrice) {\r\n                //    args.text = args.text + ' Trigger Hit';\r\n                //    args.color = 'yellow';\r\n                //}\r\n                //else { args.text = \"\"; }\r\n                args.text = \"\";\r\n            },\r\n            commandClick: function (args) {\r\n                var triggerAlertId = args.rowData.triggerAlertId;\r\n                if (args.target.classList.contains(\"view\")) { \r\n                    this.loadGraph(args.rowData);\r\n                }\r\n                else if (args.target.classList.contains(\"mark\")) {\r\n                    this.changeAlertStatus(triggerAlertId, this.$refs.grid);\r\n                }\r\n            },\r\n            changeAlertStatus: function (args, grid) {\r\n                apis.protectedApi.put(`${urls.apiBaseUrl}TriggerAlert/UpdateStatus/`, { triggerAlertId: args }).then(it => {\r\n                    grid.refresh();\r\n                }).catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    }\r\n                );\r\n            },\r\n            loadGraph: function (args) {\r\n                apis.protectedApi(`${urls.apiBaseUrl}ContractTrigger/TriggerGraphData/${args.triggerId}`).then(it => {\r\n                    this.higherPrice = it.data.higherPrice;\r\n                    this.lowerPrice = it.data.lowerPrice;\r\n                    this.marketPricesPerDay = it.data.marketPricesPerDay;\r\n                    this.title = it.data.title;\r\n                    this.type = it.data.type;\r\n                    var typetext = this.type == \"Lower\" ? \"target\" : \"cap\";\r\n                    this.alertText = args.alertType == \"Hit\" ? (\"Your \" + this.type + \" Trigger has been hit.\"):\r\n                        (\"The Watch Zone for your \" + this.type + \" Trigger has been entered. Prices are aproaching your \" + this.type +\" Trigger \" + typetext +\" price.\");\r\n                    var chart = this.$refs.alertDialog.$children[0].ej2Instances;\r\n                    chart.primaryYAxis =\r\n                    {\r\n                        title: 'Price' + \" \" + it.data.unit,\r\n                        labelFormat: 'n3'\r\n                    };\r\n                    chart.primaryYAxis.stripLines =\r\n                        [//striplines are for the green/red part lines on the grid, we have one that is the span,and the upper and lower one that deffer depending on type\r\n                        {\r\n                                start: this.lowerPrice, end: this.higherPrice, text: this.type, color: this.type == \"Lower\" ? \"#1a9470\" : '#f25c54', visible: true, zIndex: 'Behind', opacity: 0.5 },\r\n\r\n                        { start: this.type == \"Lower\" ? this.higherPrice : this.lowerPrice, size: 1, text: this.type == \"Lower\" ? \"\" + this.higherPrice : \"\" + this.lowerPrice, textStyle: { size: 15, color: this.type == \"Lower\" ? '#1a9470' : \"#f25c54\" }, verticalAlignment: this.type == \"Lower\" ? \"End\" : \"Start\", horizontalAlignment: \"Start\", sizeType: 'Pixel', dashArray: \"10,5\", color: this.type == \"Lower\" ? \"#1a9470\" : '#f25c54' },\r\n                        { start: this.type == \"Lower\" ? this.lowerPrice : this.higherPrice, size: 1, text: this.type == \"Lower\" ? \"\" + this.lowerPrice : \"\" + this.higherPrice, textStyle: { size: 15, color: this.type == \"Lower\" ? \"#1a9470\" : '#f25c54' }, verticalAlignment: this.type == \"Lower\" ? \"Start\" : \"End\", horizontalAlignment: \"Start\", sizeType: 'Pixel', color: this.type == \"Lower\" ? \"#1a9470\" : '#f25c54' },\r\n\r\n                        ];\r\n                    chart.series[0].dataSource = this.marketPricesPerDay;\r\n                    chart.refresh();\r\n                    if (this.type == \"Lower\") {\r\n                        document.getElementById('graphHeader').classList.add('LowerTriggerHeader');\r\n                        document.getElementById('graphHeader').classList.remove('UpperTriggerHeader');\r\n\r\n                        document.getElementById('graphHeaderSub').classList.add('LowerTriggerHeader');\r\n                        document.getElementById('graphHeaderSub').classList.remove('UpperTriggerHeader');\r\n                    }\r\n                    else {\r\n                        document.getElementById('graphHeader').classList.add('UpperTriggerHeader');\r\n                        document.getElementById('graphHeader').classList.remove('LowerTriggerHeader');\r\n\r\n                        document.getElementById('graphHeaderSub').classList.add('UpperTriggerHeader');\r\n                        document.getElementById('graphHeaderSub').classList.remove('LowerTriggerHeader');\r\n                    }\r\n                    //aditional data on dialog above graph\r\n                    if (args.alertType == \"Watch Zone\") {\r\n                        this.alertType = args.alertType +\" \"+\"Entered\";\r\n                    } else {\r\n                        this.alertType = args.alertType;\r\n                    }              \r\n                    this.contractUnits = args.unit;\r\n                    this.triggerDate = moment(String(args.triggerDate)).format('DD/MM/YYYY');\r\n                    this.client = args.clientName;\r\n                    this.country = args.stateName;\r\n                    this.utility = args.utilityTypeName;\r\n                    this.company = args.companyName;\r\n                    this.contractName = args.contractName;\r\n                    this.contractId = args.contractId;\r\n                    this.pricingAreaName = args.pricingAreaName;\r\n                    this.watchPeriod = args.tradeablePeriodName;\r\n                    this.triggerPrice = args.triggerPrice.toFixed(3);\r\n                    this.marketPrice = args.marketPrice.toFixed(3);\r\n                    this.delta = args.delta.toFixed(3);\r\n                    this.product = args.productName;\r\n                    this.$refs.alertDialog.show();\r\n                }\r\n                ).catch(response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    });\r\n            },\r\n            toolbarClick(args) {\r\n                if (args.item.id.includes('excelexport')) {\r\n                    // hide and show dropdown columns and show text columns as they always have value but dropdowns if not on the page will not have values\r\n                    this.$refs.grid.getColumns()[12].visible = false;\r\n\r\n                    this.$refs.grid.getColumns()[13].visible = true;\r\n                }\r\n                gridOptions.excelExport(args, \"Contract Triggers.xlsx\", this.$refs);\r\n            },\r\n            excelExportComplete(args) {\r\n                this.$refs.grid.hideSpinner();\r\n                // hide and show dropdown columns and show text columns as they always have value but dropdowns if not on the page will not have values,and return to the state before export\r\n                this.$refs.grid.getColumns()[12].visible = true;\r\n\r\n                this.$refs.grid.getColumns()[13].visible = false;\r\n            },\r\n\r\n            actionBegin(args) {\r\n                gridOptions.actionBegin(args);\r\n                if (args.requestType == 'save') {\r\n                    //args.dialog.dialogOpen = false;\r\n                    showSpinner(document.getElementById('mainSpinner'));\r\n                }\r\n                if (args.requestType == 'refresh') {\r\n\r\n                    hideSpinner(document.getElementById('mainSpinner'));\r\n                }\r\n\r\n                if ((args.requestType === 'beginEdit' || args.requestType === 'add')) {\r\n                    for (var i = 0; i < this.$refs.grid.getColumns().length; i++) {\r\n                        if (this.$refs.grid.getColumns()[i].headerText == \"Apply until Default Deadline\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerActions\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerStatus\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"applyUntilEnd\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"notifyOnSystem\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"notifyEmailAddresses\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"statusDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"tradeablePeriodName\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"tradeablePeriodId\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"referenceTypeId\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerStartDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerEndDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"tolerance\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"alertType\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"alertStatus\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"marketPrice\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"delta\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"utilityTypeName\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } \r\n                    }\r\n                }\r\n            },\r\n            actionComplete(args) {\r\n\r\n                gridOptions.actionComplete(args, this.$refs);\r\n\r\n\r\n                if (args.requestType == \"refresh\") {\r\n                    if (this.reportContractId != undefined) {\r\n                        apis.protectedApi(`${urls.apiBaseUrl}TriggerAlert/GroupCounts?contractId=${this.reportContractId}`).then(it => {\r\n                            this.deadline = it.data.deadline;\r\n                            this.status = it.data.status;\r\n                            this.hit = it.data.hit;\r\n                            this.AlertsCount = this.hit + this.deadline + this.status;\r\n                            //this is for counter in header, count unseen alerts\r\n                            if (document.getElementsByClassName('activeTriggerHeader').length > 0) {\r\n                                document.getElementsByClassName('activeTriggerHeader')[0].innerHTML = \"<u>HIT TRIGGERS\" + \" \" + this.hit + \"</u>\";\r\n                                document.querySelectorAll('[role=\"presentation\"]')[6].innerHTML = \"Alerts\" + \"(\" + this.AlertsCount + \")\";\r\n                            }\r\n                        });\r\n\r\n                    }\r\n                    if (this.clientId != undefined) {\r\n                        apis.protectedApi(`${urls.apiBaseUrl}TriggerAlert/GroupCounts?clientId=${this.clientId}`).then(it => {\r\n                            this.deadline = it.data.deadline;\r\n                            this.status = it.data.status;\r\n                            this.hit = it.data.hit;\r\n                            this.AlertsCount = this.hit + this.deadline + this.status;\r\n                            console.log(this.AlertsCount);\r\n                            //this is for counter in header, count unseen alerts\r\n                            if (document.getElementsByClassName('activeTriggerHeader').length > 0) {\r\n                                document.getElementsByClassName('activeTriggerHeader')[0].innerHTML = \"<u>HIT TRIGGERS\" + \" \" + this.hit + \"</u>\";\r\n                                document.querySelectorAll('[role=\"presentation\"]')[5].innerHTML = \"Alerts\" + \"(\" + this.AlertsCount + \")\";\r\n                            }\r\n                        });\r\n\r\n                    }\r\n                    if (this.reportTradingGroupId != undefined) {\r\n                        apis.protectedApi(`${urls.apiBaseUrl}TriggerAlert/GroupCountsATG?tradingGroupId=${this.reportTradingGroupId}`).then(it => {\r\n                            this.deadline = it.data.deadline;\r\n                            this.status = it.data.status;\r\n                            this.hit = it.data.hit;\r\n                            this.AlertsCount = this.hit + this.deadline + this.status;\r\n                            //this is for counter in header, count unseen alerts\r\n                            if (document.getElementsByClassName('activeTriggerHeader').length > 0) {\r\n                                document.getElementsByClassName('activeTriggerHeader')[0].innerHTML = \"<u>HIT TRIGGERS\" + \" \" + this.hit + \"</u>\";\r\n                                document.querySelectorAll('[role=\"presentation\"]')[6].innerHTML = \"Alerts\" + \"(\" + this.AlertsCount + \")\";\r\n                            }\r\n                        });\r\n                    }\r\n                    \r\n                }\r\n\r\n                if ((args.requestType === 'beginEdit' || args.requestType === 'add')) {\r\n                    var applyEnd = args.rowData.applyUntilEnd;\r\n                    if (applyEnd == true) {\r\n\r\n                        datePickerObj.enabled = false;\r\n                    }\r\n\r\n                    args.dialog.height = \"80%\";\r\n                    args.dialog.width = \"50%\";\r\n                    let rows = args.form.querySelectorAll(\"tr\");\r\n                    for (var i = 0; i < rows.length; i = i + 2) {\r\n                        if (rows.length > i + 1) {\r\n                            rows[i].appendChild(\r\n                                args.form.querySelectorAll(\"tr\")[i + 1].cells[0]\r\n                            );\r\n                        }\r\n                    }\r\n\r\n                    for (var i = 0; i < this.$refs.grid.getColumns().length; i++) {\r\n                        if (this.$refs.grid.getColumns()[i].headerText == \"Apply until Default Deadline\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerActions\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerStatus\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"applyUntilEnd\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"notifyOnSystem\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"notifyEmailAddresses\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"statusDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"tradeablePeriodName\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"tradeablePeriodId\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                            tradebalePeriodObj.value = args.rowData.tradeablePeriodId;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"utilityTypeName\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"referenceTypeId\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerStartDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerEndDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"tolerance\") {\r\n                            this.$refs.grid.getColumns()[i].visible = false;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"triggerDate\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"alertType\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"alertStatus\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"marketPrice\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;\r\n                        } else if (this.$refs.grid.getColumns()[i].field == \"delta\") {\r\n                            this.$refs.grid.getColumns()[i].visible = true;}\r\n                    }\r\n                    if (args.requestType != 'add') {\r\n                        //  this.contractUnits = args.rowData.unit;\r\n                        this.units = args.rowData.unit;\r\n                        args.form[13].value = args.form[13].value + \"%\";\r\n                        args.form[11].value = args.form[11].value + \" [\" + this.units + \"]\";\r\n                    }\r\n\r\n                    args.form[13].addEventListener(\"focusout\", e => {\r\n                        if (e.target.classList.contains(\"e-numerictextbox\")) {\r\n                            e.target.value = e.target.value + \"%\";\r\n                        }\r\n                    });\r\n\r\n\r\n                    args.form[11].addEventListener(\"focusout\", e => {\r\n                        if (e.target.classList.contains(\"e-numerictextbox\")) {\r\n                            e.target.value = e.target.value + \" [\" + this.units + \"]\";\r\n                        }\r\n                    });\r\n                }\r\n            },\r\n            actionFailure(args) {\r\n                gridOptions.actionFailure(args);\r\n                hideSpinner(document.getElementById('mainSpinner'));\r\n            },\r\n            customiseCell: function (args) { // when setting up the grid this is rendering each column on its own\r\n                if (args.column.field === 'triggerTypeName') {\r\n                    if (args.data['triggerTypeName'] == 'Lower') {\r\n                        args.cell.classList.add('greenBox');\r\n                    } else {\r\n                        args.cell.classList.add('redBox');\r\n                    }\r\n                } if (args.column.field === 'delta') {\r\n                    if (args.data['triggerTypeName'] == 'Upper') {\r\n                        if (args.data['delta'] < 0) {\r\n                            args.cell.classList.add('greenBoxDelta');\r\n                        } else if(args.data['delta'] > 0){\r\n                            args.cell.classList.add('redBoxDelta');\r\n                        }\r\n                    } else {\r\n                        if (args.data['delta'] < 0) {\r\n                            args.cell.classList.add('greenBoxDelta');\r\n                        } else if (args.data['delta'] > 0){\r\n                            args.cell.classList.add('redBoxDelta');\r\n                        }\r\n                    }\r\n                }\r\n                if (args.column.field === 'triggerPrice' || args.column.field === 'marketPrice' || args.column.field === 'delta') {\r\n                    args.cell.textContent = args.cell.textContent + \" [\" + args.data['unit']  + \"]\";//args.cell.headerText + \" \" + this.contractUnits;\r\n                }\r\n                if (args.column.field === 'tolerance') {\r\n                    args.cell.textContent = args.cell.textContent + \"%\";\r\n                }\r\n                if (args.column.headerText === \"Actions\") {\r\n                    if (args.data['alertStatus'] == 'Seen') {\r\n                        args.cell.querySelector(\"button[title='Mark as Seen']\").textContent = 'Mark as Unseen';\r\n                        args.cell.querySelector(\"button[title='Mark as Seen']\").title = 'Mark as Unseen';\r\n                    }\r\n                }\r\n            },\r\n            fetchUnit(id) {\r\n                apis.protectedApi(`${urls.apiBaseUrl}Contract/AditionalTriggerData/${id}`).then(it => {\r\n                    this.units = it.data.units;\r\n                    this.riskManager = it.data.riskManager;\r\n                }).catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    }\r\n                );\r\n\r\n            }\r\n\r\n        },\r\n        provide: {\r\n            grid: [Page, Edit, Toolbar, Sort, Filter, Reorder, Resize, ExcelExport, ForeignKey, CommandColumn],\r\n            chart: [ColumnSeries, StripLine, LineSeries, Category, DataLabel, DateTime, Tooltip, ChartAnnotation, Zoom, MultiColoredLineSeries]\r\n        }\r\n    };\r\n\r\n</script>\r\n<style>\r\n/*    .e-dialog {\r\n        max-height: 900px !important;\r\n        top: 0px !important;\r\n    }*/\r\n    /*@import \"../node_modules/@syncfusion/ej2-vue-grids/styles/material.css\";*/\r\n    .greenBox {\r\n        background-color: #7FB7BE !important;\r\n    }\r\n\r\n    .redBox {\r\n        background-color: #f78764 !important;\r\n    }\r\n    .greenBoxDelta {\r\n        background-color: #1a9470 !important;\r\n    }\r\n\r\n    .redBoxDelta {\r\n        background-color: #f25c54 !important;\r\n    }\r\n\r\n    e-notFunctional {\r\n        background-color: grey;\r\n    }\r\n\r\n    .UpperTriggerHeader {\r\n        text-transform: uppercase;\r\n        color: #f78764;\r\n    }\r\n    .greyBackground{\r\n        background-color: lightgrey;\r\n    }\r\n    .LowerTriggerHeader {\r\n        text-transform: uppercase;\r\n        color: #7FB7BE;\r\n    }\r\n    #hitChartContainer {\r\n        height: 350px;\r\n    }\r\n    #alertDialog .e-dlg-content {\r\n        color: #4d4d4d !important;\r\n        font-family: 'Arial', Arial, sans-serif !important;\r\n        font-size: 14px;\r\n    }\r\n\r\n    #hitChartContainer_Series_0 {\r\n        stroke: #001c55 !important;\r\n    }\r\n    text[id=\"hitChartContainer_ChartTitle\"] {\r\n        fill: #4d4d4d !important;\r\n        font-family: 'Arial', Arial, sans-serif !important;\r\n        font-size: 16px;\r\n    }\r\n    #hitChartContainer_tooltip_Trackball_0 {\r\n        fill: #001C55 !important;\r\n    }\r\n    #triggerHitAlertGridId .e-content {\r\n        min-height: 0px!important;\r\n    }\r\n    #alertDialog {\r\n        max-height: 100% !important;\r\n        position: fixed !important;\r\n        top: 0% !important;\r\n        height: 100vh !important;\r\n        z-index: 10000 !important;\r\n    }\r\n  \r\n\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TriggerHitAlert.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TriggerHitAlert.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./TriggerHitAlert.vue?vue&type=template&id=43b7490b\"\nimport script from \"./TriggerHitAlert.vue?vue&type=script&lang=js\"\nexport * from \"./TriggerHitAlert.vue?vue&type=script&lang=js\"\nimport style0 from \"./TriggerHitAlert.vue?vue&type=style&index=0&id=43b7490b&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","//! moment.js locale configuration\n//! locale : Ukrainian [uk]\n//! author : zemlanin : https://github.com/zemlanin\n//! Author : Menelion Elensúle : https://github.com/Oire\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function plural(word, num) {\n        var forms = word.split('_');\n        return num % 10 === 1 && num % 100 !== 11\n            ? forms[0]\n            : num % 10 >= 2 && num % 10 <= 4 && (num % 100 < 10 || num % 100 >= 20)\n            ? forms[1]\n            : forms[2];\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        var format = {\n            ss: withoutSuffix ? 'секунда_секунди_секунд' : 'секунду_секунди_секунд',\n            mm: withoutSuffix ? 'хвилина_хвилини_хвилин' : 'хвилину_хвилини_хвилин',\n            hh: withoutSuffix ? 'година_години_годин' : 'годину_години_годин',\n            dd: 'день_дні_днів',\n            MM: 'місяць_місяці_місяців',\n            yy: 'рік_роки_років',\n        };\n        if (key === 'm') {\n            return withoutSuffix ? 'хвилина' : 'хвилину';\n        } else if (key === 'h') {\n            return withoutSuffix ? 'година' : 'годину';\n        } else {\n            return number + ' ' + plural(format[key], +number);\n        }\n    }\n    function weekdaysCaseReplace(m, format) {\n        var weekdays = {\n                nominative:\n                    'неділя_понеділок_вівторок_середа_четвер_п’ятниця_субота'.split(\n                        '_'\n                    ),\n                accusative:\n                    'неділю_понеділок_вівторок_середу_четвер_п’ятницю_суботу'.split(\n                        '_'\n                    ),\n                genitive:\n                    'неділі_понеділка_вівторка_середи_четверга_п’ятниці_суботи'.split(\n                        '_'\n                    ),\n            },\n            nounCase;\n\n        if (m === true) {\n            return weekdays['nominative']\n                .slice(1, 7)\n                .concat(weekdays['nominative'].slice(0, 1));\n        }\n        if (!m) {\n            return weekdays['nominative'];\n        }\n\n        nounCase = /(\\[[ВвУу]\\]) ?dddd/.test(format)\n            ? 'accusative'\n            : /\\[?(?:минулої|наступної)? ?\\] ?dddd/.test(format)\n            ? 'genitive'\n            : 'nominative';\n        return weekdays[nounCase][m.day()];\n    }\n    function processHoursFunction(str) {\n        return function () {\n            return str + 'о' + (this.hours() === 11 ? 'б' : '') + '] LT';\n        };\n    }\n\n    var uk = moment.defineLocale('uk', {\n        months: {\n            format: 'січня_лютого_березня_квітня_травня_червня_липня_серпня_вересня_жовтня_листопада_грудня'.split(\n                '_'\n            ),\n            standalone:\n                'січень_лютий_березень_квітень_травень_червень_липень_серпень_вересень_жовтень_листопад_грудень'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'січ_лют_бер_квіт_трав_черв_лип_серп_вер_жовт_лист_груд'.split(\n            '_'\n        ),\n        weekdays: weekdaysCaseReplace,\n        weekdaysShort: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        weekdaysMin: 'нд_пн_вт_ср_чт_пт_сб'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY р.',\n            LLL: 'D MMMM YYYY р., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY р., HH:mm',\n        },\n        calendar: {\n            sameDay: processHoursFunction('[Сьогодні '),\n            nextDay: processHoursFunction('[Завтра '),\n            lastDay: processHoursFunction('[Вчора '),\n            nextWeek: processHoursFunction('[У] dddd ['),\n            lastWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                    case 3:\n                    case 5:\n                    case 6:\n                        return processHoursFunction('[Минулої] dddd [').call(this);\n                    case 1:\n                    case 2:\n                    case 4:\n                        return processHoursFunction('[Минулого] dddd [').call(this);\n                }\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'за %s',\n            past: '%s тому',\n            s: 'декілька секунд',\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithPlural,\n            mm: relativeTimeWithPlural,\n            h: 'годину',\n            hh: relativeTimeWithPlural,\n            d: 'день',\n            dd: relativeTimeWithPlural,\n            M: 'місяць',\n            MM: relativeTimeWithPlural,\n            y: 'рік',\n            yy: relativeTimeWithPlural,\n        },\n        // M. E.: those two are virtually unused but a user might want to implement them for his/her website for some reason\n        meridiemParse: /ночі|ранку|дня|вечора/,\n        isPM: function (input) {\n            return /^(дня|вечора)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ночі';\n            } else if (hour < 12) {\n                return 'ранку';\n            } else if (hour < 17) {\n                return 'дня';\n            } else {\n                return 'вечора';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}-(й|го)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'M':\n                case 'd':\n                case 'DDD':\n                case 'w':\n                case 'W':\n                    return number + '-й';\n                case 'D':\n                    return number + '-го';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return uk;\n\n})));\n","import { Dialog } from '@syncfusion/ej2-popups';\nimport { EventHandler, isNullOrUndefined, remove, Browser } from '@syncfusion/ej2-base';\nimport { parentsUntil, addBiggerDialog, addRemoveEventListener } from '../base/util';\nimport * as events from '../base/constant';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { ResponsiveDialogAction } from '../base/enum';\n/**\n *\n * The `ResponsiveDialogRenderer` module is used to render the responsive dialogs.\n */\nvar ResponsiveDialogRenderer = /** @class */ (function () {\n    function ResponsiveDialogRenderer(parent, serviceLocator) {\n        this.sortedCols = [];\n        this.sortPredicate = [];\n        /** @hidden */\n        this.isCustomDialog = false;\n        this.parent = parent;\n        this.serviceLocator = serviceLocator;\n        this.addEventListener();\n    }\n    ResponsiveDialogRenderer.prototype.addEventListener = function () {\n        this.evtHandlers = [{ event: events.filterDialogClose, handler: this.closeCustomDialog },\n            { event: events.refreshCustomFilterOkBtn, handler: this.refreshCustomFilterOkBtn },\n            { event: events.renderResponsiveCmenu, handler: this.renderResponsiveContextMenu },\n            { event: events.filterCmenuSelect, handler: this.renderCustomFilterDiv },\n            { event: events.customFilterClose, handler: this.customExFilterClose },\n            { event: events.refreshCustomFilterClearBtn, handler: this.refreshCustomFilterClearBtn }];\n        addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n        this.onActionCompleteFn = this.editComplate.bind(this);\n        this.parent.addEventListener(events.actionComplete, this.onActionCompleteFn);\n    };\n    ResponsiveDialogRenderer.prototype.customExFilterClose = function () {\n        this.isCustomDlgRender = false;\n    };\n    ResponsiveDialogRenderer.prototype.renderCustomFilterDiv = function () {\n        var header = this.customResponsiveDlg.element.querySelector('.e-dlg-header-content');\n        var title = header.querySelector('.e-dlg-custom-header');\n        var closeBtn = header.querySelector('.e-dlg-closeicon-btn');\n        this.isCustomDlgRender = true;\n        this.parent.filterModule.filterModule.closeDialog();\n        this.saveBtn.element.style.display = '';\n        this.refreshCustomFilterOkBtn({ disabled: false });\n        this.backBtn.element.style.display = 'none';\n        closeBtn.style.display = '';\n        title.innerHTML = this.parent.localeObj.getConstant('CustomFilter');\n        var content = this.customResponsiveDlg.element.querySelector('.e-dlg-content');\n        this.customExcelFilterParent = this.parent.createElement('div', { className: 'e-xl-customfilterdiv e-default-filter' });\n        content.appendChild(this.customExcelFilterParent);\n    };\n    ResponsiveDialogRenderer.prototype.renderResponsiveContextMenu = function (args) {\n        if (this.action === ResponsiveDialogAction.isFilter) {\n            var content = this.customResponsiveDlg.element.querySelector('.e-dlg-content');\n            var header = this.customResponsiveDlg.element.querySelector('.e-dlg-header-content');\n            var closeBtn = header.querySelector('.e-dlg-closeicon-btn');\n            var text = header.querySelector('.e-dlg-custom-header');\n            if (args.isOpen) {\n                content.firstChild.style.display = 'none';\n                content.appendChild(args.target);\n                closeBtn.style.display = 'none';\n                this.saveBtn.element.style.display = 'none';\n                this.filterClearBtn.element.style.display = 'none';\n                text.innerHTML = args.header;\n                var backBtn = this.parent.createElement('button');\n                var span = this.parent.createElement('span', { className: 'e-btn-icon e-resfilterback e-icons' });\n                backBtn.appendChild(span);\n                this.backBtn = new Button({\n                    cssClass: this.parent.cssClass ? 'e-res-back-btn' + ' ' + this.parent.cssClass : 'e-res-back-btn'\n                });\n                this.backBtn.appendTo(backBtn);\n                text.parentElement.insertBefore(backBtn, text);\n            }\n            else if (this.backBtn && !this.isCustomDlgRender) {\n                content.firstChild.style.display = '';\n                remove(this.backBtn.element);\n                closeBtn.style.display = '';\n                this.saveBtn.element.style.display = '';\n                if (this.isFiltered) {\n                    this.filterClearBtn.element.style.display = '';\n                }\n                text.innerHTML = this.getHeaderTitle({ action: ResponsiveDialogAction.isFilter }, args.col);\n            }\n        }\n    };\n    ResponsiveDialogRenderer.prototype.refreshCustomFilterClearBtn = function (args) {\n        if (this.filterClearBtn) {\n            this.isFiltered = args.isFiltered;\n            this.filterClearBtn.element.style.display = args.isFiltered ? '' : 'none';\n        }\n    };\n    ResponsiveDialogRenderer.prototype.refreshCustomFilterOkBtn = function (args) {\n        if (this.saveBtn) {\n            this.saveBtn.disabled = args.disabled;\n        }\n        if (this.parent.columnChooserModule && this.parent.columnChooserModule.responsiveDialogRenderer.saveBtn) {\n            this.parent.columnChooserModule.responsiveDialogRenderer.saveBtn.disabled = args.disabled;\n        }\n    };\n    ResponsiveDialogRenderer.prototype.columnMenuResponsiveContent = function (str, locale, disabled) {\n        var cDiv = this.parent.createElement('div', { className: 'e-responsivecoldiv e-responsive' + str.toLowerCase() + 'div' + (disabled ? ' e-disabled' : '') });\n        var span = this.parent.createElement('span', { className: 'e-icons e-res' + str.toLowerCase() + '-icon e-btn-icon' });\n        var icon = this.parent.createElement('span', { innerHTML: locale, className: 'e-rescolumn-menu e-res-header-text' });\n        cDiv.appendChild(span);\n        cDiv.appendChild(icon);\n        this.customColumnDiv.appendChild(cDiv);\n    };\n    ResponsiveDialogRenderer.prototype.renderResponsiveContent = function (col, column) {\n        var _this = this;\n        var gObj = this.parent;\n        var isColumnChooser = this.action === ResponsiveDialogAction.isColumnChooser;\n        if (col || isColumnChooser) {\n            this.filterParent = this.parent.createElement('div', { className: (isColumnChooser ? 'e-maincolumnchooserdiv ' : '') + 'e-mainfilterdiv e-default-filter',\n                id: (isColumnChooser ? 'columchooser' : col.uid) + '-main-filter' });\n            return this.filterParent;\n        }\n        else {\n            this.customColumnDiv = gObj.createElement('div', { className: 'columndiv columnmenudiv', styles: 'width: 100%' });\n            if (this.parent.showColumnMenu && this.parent.rowRenderingMode === 'Horizontal' && this.action === ResponsiveDialogAction.isColMenu) {\n                this.columnMenuResponsiveContent('AutoFitAll', gObj.localeObj.getConstant('AutoFitAll'));\n                this.columnMenuResponsiveContent('AutoFit', gObj.localeObj.getConstant('AutoFit'));\n                if (column.allowGrouping && gObj.allowGrouping) {\n                    this.columnMenuResponsiveContent('Group', gObj.localeObj.getConstant('Group'), gObj.groupSettings.columns.indexOf(column.field) >= 0);\n                    this.columnMenuResponsiveContent('UnGroup', gObj.localeObj.getConstant('Ungroup'), gObj.groupSettings.columns.indexOf(column.field) < 0);\n                }\n                if (column.allowSorting && gObj.allowSorting) {\n                    var direction = 'None';\n                    var sortColumns = this.parent.sortSettings.columns;\n                    for (var i = 0; i < sortColumns.length; i++) {\n                        if (sortColumns[parseInt(i.toString(), 10)].field === column.field) {\n                            direction = sortColumns[parseInt(i.toString(), 10)].direction;\n                            break;\n                        }\n                    }\n                    this.columnMenuResponsiveContent('ascending', gObj.localeObj.getConstant('SortAscending'), direction === 'Ascending');\n                    this.columnMenuResponsiveContent('descending', gObj.localeObj.getConstant('SortDescending'), direction === 'Descending');\n                }\n                if (gObj.showColumnChooser) {\n                    this.columnMenuResponsiveContent('Column', gObj.localeObj.getConstant('Columnchooser'));\n                }\n                if (column.allowFiltering && gObj.allowFiltering) {\n                    this.columnMenuResponsiveContent('Filter', gObj.localeObj.getConstant('FilterMenu'));\n                }\n            }\n            else {\n                var cols = gObj.getColumns();\n                var sortBtnParent = gObj.createElement('div', { className: 'e-ressortbutton-parent' });\n                var filteredCols = [];\n                var isSort = this.action === ResponsiveDialogAction.isSort;\n                var isFilter = this.action === ResponsiveDialogAction.isFilter;\n                if (isFilter) {\n                    for (var i = 0; i < gObj.filterSettings.columns.length; i++) {\n                        filteredCols.push(gObj.filterSettings.columns[parseInt(i.toString(), 10)].field);\n                    }\n                }\n                for (var i = 0; i < cols.length; i++) {\n                    if (!cols[parseInt(i.toString(), 10)].visible || (!cols[parseInt(i.toString(), 10)].allowSorting && isSort)\n                        || (!cols[parseInt(i.toString(), 10)].allowFiltering && isFilter)) {\n                        continue;\n                    }\n                    var cDiv = gObj.createElement('div', { className: 'e-responsivecoldiv' });\n                    cDiv.setAttribute('data-e-mappingname', cols[parseInt(i.toString(), 10)].field);\n                    cDiv.setAttribute('data-e-mappinguid', cols[parseInt(i.toString(), 10)].uid);\n                    var span = gObj.createElement('span', { innerHTML: cols[parseInt(i.toString(), 10)].headerText, className: 'e-res-header-text' });\n                    cDiv.appendChild(span);\n                    this.customColumnDiv.appendChild(cDiv);\n                    if (isSort) {\n                        var fields = this.getSortedFieldsAndDirections('field');\n                        var index = fields.indexOf(cols[parseInt(i.toString(), 10)].field);\n                        var button = gObj.createElement('button', { id: gObj.element.id + cols[parseInt(i.toString(), 10)].field + 'sortbutton' });\n                        var clone = sortBtnParent.cloneNode();\n                        clone.appendChild(button);\n                        cDiv.appendChild(clone);\n                        var btnObj = new Button({\n                            cssClass: this.parent.cssClass ? 'e-ressortbutton' + ' ' + this.parent.cssClass : 'e-ressortbutton'\n                        });\n                        btnObj.appendTo(button);\n                        var buttonInnerText = void 0;\n                        if ((!isNullOrUndefined(this.parent.sortSettings.columns[parseInt(index.toString(), 10)]))) {\n                            buttonInnerText = (this.parent.sortSettings.columns[parseInt(index.toString(), 10)].direction === 'Ascending') ?\n                                this.parent.localeObj.getConstant('AscendingText') : this.parent.localeObj.getConstant('DescendingText');\n                        }\n                        button.innerHTML = index > -1 ? buttonInnerText : this.parent.localeObj.getConstant('NoneText');\n                        button.onclick = function (e) {\n                            _this.sortButtonClickHandler(e.target);\n                        };\n                    }\n                    if (isFilter && filteredCols.indexOf(cols[parseInt(i.toString(), 10)].field) > -1) {\n                        var divIcon = gObj.createElement('div', { className: 'e-icons e-res-icon e-filtersetdiv' });\n                        var iconSpan = gObj.createElement('span', { className: 'e-icons e-res-icon e-filterset' });\n                        iconSpan.setAttribute('colType', cols[parseInt(i.toString(), 10)].type);\n                        divIcon.appendChild(iconSpan);\n                        cDiv.appendChild(divIcon);\n                    }\n                }\n            }\n            EventHandler.add(this.customColumnDiv, Browser.isDevice ? 'touchend' : 'click', this.customFilterColumnClickHandler, this);\n            return this.customColumnDiv;\n        }\n    };\n    ResponsiveDialogRenderer.prototype.getSortedFieldsAndDirections = function (name) {\n        var fields = [];\n        for (var i = 0; i < this.parent.sortSettings.columns.length; i++) {\n            fields.push(this.parent.sortSettings.columns[parseInt(i.toString(), 10)][\"\" + name]);\n        }\n        return fields;\n    };\n    ResponsiveDialogRenderer.prototype.sortButtonClickHandler = function (target) {\n        if (target) {\n            var columndiv = parentsUntil(target, 'e-responsivecoldiv');\n            var field = columndiv.getAttribute('data-e-mappingname');\n            if (!this.parent.allowMultiSorting) {\n                this.sortPredicate = [];\n                this.sortedCols = [];\n                this.isSortApplied = false;\n                this.resetSortButtons(target);\n            }\n            var txt = target.textContent;\n            var directionTxt = txt === this.parent.localeObj.getConstant('NoneText') ? this.parent.localeObj.getConstant('AscendingText')\n                : txt === this.parent.localeObj.getConstant('AscendingText') ? this.parent.localeObj.getConstant('DescendingText')\n                    : this.parent.localeObj.getConstant('NoneText');\n            var direction = directionTxt === this.parent.localeObj.getConstant('AscendingText') ? 'Ascending'\n                : directionTxt === this.parent.localeObj.getConstant('DescendingText') ? 'Descending' : 'None';\n            target.innerHTML = directionTxt;\n            this.setSortedCols(field, direction);\n        }\n    };\n    ResponsiveDialogRenderer.prototype.resetSortButtons = function (target) {\n        var buttons = [].slice.call(this.customColumnDiv.getElementsByClassName('e-ressortbutton'));\n        for (var i = 0; i < buttons.length; i++) {\n            if (buttons[parseInt(i.toString(), 10)] !== target) {\n                buttons[parseInt(i.toString(), 10)].innerHTML = 'None';\n            }\n        }\n    };\n    ResponsiveDialogRenderer.prototype.setSortedCols = function (field, direction) {\n        var fields = this.getCurrentSortedFields();\n        var index = fields.indexOf(field);\n        if (this.parent.allowMultiSorting && index > -1) {\n            this.sortedCols.splice(index, 1);\n            this.sortPredicate.splice(index, 1);\n        }\n        this.isSortApplied = true;\n        if (direction !== 'None') {\n            this.sortedCols.push(field);\n            this.sortPredicate.push({ field: field, direction: direction });\n        }\n    };\n    ResponsiveDialogRenderer.prototype.getCurrentSortedFields = function () {\n        var fields = [];\n        for (var i = 0; i < this.sortedCols.length; i++) {\n            fields.push(this.sortedCols[parseInt(i.toString(), 10)]);\n        }\n        return fields;\n    };\n    ResponsiveDialogRenderer.prototype.customFilterColumnClickHandler = function (e) {\n        var gObj = this.parent;\n        var target = e.target;\n        if (parentsUntil(target, 'columnmenudiv') && this.action === ResponsiveDialogAction.isColMenu && !parentsUntil(target, 'e-disabled')) {\n            var column = this.menuCol ? this.menuCol : this.filteredCol;\n            if (parentsUntil(target, 'e-responsiveautofitalldiv')) {\n                gObj.autoFitColumns([]);\n                this.closeCustomFilter();\n            }\n            else if (parentsUntil(target, 'e-responsiveautofitdiv')) {\n                gObj.autoFitColumns(column.field);\n                this.closeCustomFilter();\n            }\n            else if (parentsUntil(target, 'e-responsivegroupdiv')) {\n                gObj.groupColumn(column.field);\n                this.closeCustomFilter();\n            }\n            else if (parentsUntil(target, 'e-responsiveungroupdiv')) {\n                gObj.ungroupColumn(column.field);\n                this.closeCustomFilter();\n            }\n            else if (parentsUntil(target, 'e-responsiveascendingdiv')) {\n                gObj.sortColumn(column.field, 'Ascending');\n                this.closeCustomFilter();\n            }\n            else if (parentsUntil(target, 'e-responsivedescendingdiv')) {\n                gObj.sortColumn(column.field, 'Descending');\n                this.closeCustomFilter();\n            }\n            else if (parentsUntil(target, 'e-responsivecolumndiv')) {\n                gObj.notify(events.renderResponsiveChangeAction, { action: 5 });\n                gObj.showResponsiveCustomColumnChooser();\n            }\n            else if (parentsUntil(target, 'e-responsivefilterdiv')) {\n                gObj.notify(events.renderResponsiveChangeAction, { action: 3 });\n                this.isRowResponsive = true;\n                this.isCustomDialog = false;\n                if (gObj.filterModule) {\n                    gObj.filterModule.responsiveDialogRenderer.showResponsiveDialog(column);\n                }\n            }\n            e.preventDefault();\n        }\n        if (this.action !== ResponsiveDialogAction.isFilter) {\n            return;\n        }\n        if (gObj.filterSettings.type !== 'FilterBar') {\n            if (target.classList.contains('e-responsivecoldiv') || target.parentElement.classList.contains('e-responsivecoldiv')) {\n                var field = target.getAttribute('data-e-mappingname');\n                if (!field) {\n                    field = target.parentElement.getAttribute('data-e-mappingname');\n                }\n                if (field) {\n                    var col = gObj.getColumnByField(field);\n                    this.isRowResponsive = true;\n                    this.showResponsiveDialog(col);\n                }\n            }\n            else if (target.classList.contains('e-filterset') || target.parentElement.classList.contains('e-filtersetdiv')) {\n                var colDiv = parentsUntil(target, 'e-responsivecoldiv');\n                if (colDiv) {\n                    var field = colDiv.getAttribute('data-e-mappingname');\n                    var col = gObj.getColumnByField(field);\n                    if (col.filter.type === 'Menu' || (!col.filter.type && gObj.filterSettings.type === 'Menu')) {\n                        this.isDialogClose = true;\n                    }\n                    this.parent.filterModule.filterModule.clearCustomFilter(col);\n                    this.removeCustomDlgFilterEle(target);\n                }\n            }\n        }\n    };\n    /**\n     * Function to show the responsive dialog\n     *\n     * @param {Column} col - specifies the filter column\n     * @param {Column} column - specifies the menu column\n     * @returns {void}\n     */\n    ResponsiveDialogRenderer.prototype.showResponsiveDialog = function (col, column) {\n        if ((this.isCustomDialog && this.action === ResponsiveDialogAction.isFilter && !this.isRowResponsive) ||\n            (column && this.action === ResponsiveDialogAction.isColMenu)) {\n            this.menuCol = column;\n            this.renderCustomFilterDialog(null, column);\n        }\n        else {\n            this.filteredCol = col;\n            this.renderResponsiveDialog(col);\n            if (this.parent.enableAdaptiveUI && col) {\n                this.parent.filterModule.setFilterModel(col);\n                this.parent.filterModule.filterModule.openDialog(this.parent.filterModule.createOptions(col, undefined));\n            }\n            if (this.action === ResponsiveDialogAction.isColumnChooser) {\n                this.parent.notify(events.renderResponsiveColumnChooserDiv, { action: 'open' });\n            }\n            if (this.action === ResponsiveDialogAction.isSort) {\n                var args = {\n                    cancel: false, dialogObj: this.customResponsiveDlg, requestType: 'beforeOpenAptiveSortDialog'\n                };\n                this.parent.trigger(events.beforeOpenAdaptiveDialog, args);\n                if (args.cancel) {\n                    return;\n                }\n            }\n            this.customResponsiveDlg.show(true);\n            this.customResponsiveDlg.element.style.maxHeight = '100%';\n            this.setTopToChildDialog(this.customResponsiveDlg.element);\n        }\n    };\n    ResponsiveDialogRenderer.prototype.setTopToChildDialog = function (dialogEle) {\n        var child = dialogEle.querySelector('.e-dialog');\n        if (child) {\n            var top_1 = dialogEle.querySelector('.e-dlg-header-content').getBoundingClientRect().height;\n            child.style.top = top_1 + 'px';\n        }\n    };\n    ResponsiveDialogRenderer.prototype.renderCustomFilterDialog = function (col, column) {\n        var gObj = this.parent;\n        var isColMenu = this.action === ResponsiveDialogAction.isColMenu;\n        if (this.action === ResponsiveDialogAction.isFilter && gObj.filterSettings.type === 'FilterBar') {\n            return;\n        }\n        var colMenu = isColMenu ? 'e-customcolumnmenudiv ' : '';\n        var outerDiv = this.parent.createElement('div', {\n            id: gObj.element.id + (isColMenu ? 'customcolumnmenu' : 'customfilter'),\n            className: this.parent.cssClass ? colMenu +\n                'e-customfilterdiv e-responsive-dialog ' + this.parent.cssClass : colMenu + 'e-customfilterdiv e-responsive-dialog'\n        });\n        this.parent.element.appendChild(outerDiv);\n        this.customFilterDlg = this.getDialogOptions(col, true, null, column);\n        var args = {\n            cancel: false, dialogObj: this.customFilterDlg, requestType: 'beforeOpenAptiveFilterDialog'\n        };\n        this.parent.trigger(events.beforeOpenAdaptiveDialog, args);\n        if (args.cancel) {\n            return;\n        }\n        this.customFilterDlg.appendTo(outerDiv);\n        this.customFilterDlg.show(true);\n        this.customFilterDlg.element.style.maxHeight = '100%';\n    };\n    ResponsiveDialogRenderer.prototype.getDialogOptions = function (col, isCustomFilter, id, column) {\n        var options = new Dialog({\n            isModal: true,\n            showCloseIcon: true,\n            closeOnEscape: false,\n            locale: this.parent.locale,\n            target: this.parent.adaptiveDlgTarget ? this.parent.adaptiveDlgTarget : document.body,\n            visible: false,\n            enableRtl: this.parent.enableRtl,\n            content: this.renderResponsiveContent(col, column),\n            open: this.dialogOpen.bind(this),\n            created: this.dialogCreated.bind(this),\n            close: this.beforeDialogClose.bind(this),\n            width: '100%',\n            height: '100%',\n            animationSettings: { effect: 'None' },\n            cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n        });\n        var isStringTemplate = 'isStringTemplate';\n        options[\"\" + isStringTemplate] = true;\n        if (isCustomFilter) {\n            options.header = this.renderResponsiveHeader(col, undefined, true);\n            var colMenu = this.action === ResponsiveDialogAction.isColMenu ? 'e-customcolumnmenu ' : '';\n            options.cssClass = colMenu + 'e-customfilter';\n        }\n        else {\n            options.header = this.renderResponsiveHeader(col);\n            options.cssClass = this.parent.rowRenderingMode === 'Vertical' && this.action === ResponsiveDialogAction.isFilter\n                ? 'e-res' + id + ' e-row-responsive-filter' : 'e-res' + id;\n        }\n        return options;\n    };\n    ResponsiveDialogRenderer.prototype.renderResponsiveDialog = function (col) {\n        var gObj = this.parent;\n        if (this.action === ResponsiveDialogAction.isFilter && gObj.filterSettings.type === 'FilterBar') {\n            return;\n        }\n        var id = this.action === ResponsiveDialogAction.isFilter ? 'filter' : 'sort';\n        id = this.action === ResponsiveDialogAction.isColumnChooser ? 'columnchooser' : id;\n        var outerDiv = this.parent.createElement('div', {\n            id: gObj.element.id + 'responsive' + id,\n            className: this.parent.cssClass ?\n                'e-res' + id + 'div e-responsive-dialog ' + this.parent.cssClass : 'e-res' + id + 'div e-responsive-dialog'\n        });\n        this.parent.element.appendChild(outerDiv);\n        this.customResponsiveDlg = this.getDialogOptions(col, false, id);\n        this.customResponsiveDlg.appendTo(outerDiv);\n    };\n    ResponsiveDialogRenderer.prototype.dialogCreated = function () {\n        addBiggerDialog(this.parent);\n    };\n    ResponsiveDialogRenderer.prototype.dialogOpen = function () {\n        if (this.action === ResponsiveDialogAction.isSort && this.parent.allowMultiSorting) {\n            for (var i = 0; i < this.parent.sortSettings.columns.length; i++) {\n                this.sortedCols.push(this.parent.sortSettings.columns[parseInt(i.toString(), 10)].field);\n                var sortField = this.parent.sortSettings.columns[parseInt(i.toString(), 10)].field;\n                var sortDirection = this.parent.sortSettings.columns[parseInt(i.toString(), 10)].direction;\n                this.sortPredicate.push({ field: sortField, direction: sortDirection });\n            }\n        }\n    };\n    ResponsiveDialogRenderer.prototype.beforeDialogClose = function (args) {\n        this.isDialogClose = args.element && !args.element.querySelector('.e-xl-customfilterdiv')\n            && args.element.classList.contains('e-resfilterdiv');\n        if (this.action === ResponsiveDialogAction.isFilter) {\n            if (args.element.classList.contains('e-resfilterdiv')) {\n                this.parent.filterModule.filterModule.closeResponsiveDialog(this.isCustomDlgRender);\n            }\n            else if (args.element.classList.contains('e-customfilterdiv')) {\n                this.closeCustomFilter();\n            }\n            if (this.parent.rowRenderingMode === 'Horizontal' && this.parent.showColumnMenu) {\n                this.parent.notify(events.renderResponsiveChangeAction, { action: 4 });\n                var custom = document.querySelector('.e-resfilter');\n                if (custom) {\n                    remove(custom);\n                }\n            }\n        }\n        else if (this.action === ResponsiveDialogAction.isSort) {\n            this.closeCustomDialog();\n        }\n        else if (this.action === ResponsiveDialogAction.isColMenu) {\n            this.closeCustomFilter();\n            var custom = document.querySelector('.e-rescolummenu');\n            if (custom) {\n                remove(custom);\n            }\n        }\n        else if (this.action === ResponsiveDialogAction.isColumnChooser) {\n            this.parent.notify(events.renderResponsiveColumnChooserDiv, { action: 'clear' });\n            var custom = document.querySelector('.e-rescolumnchooser');\n            if (custom) {\n                remove(custom);\n            }\n            if (this.parent.rowRenderingMode === 'Horizontal' && this.parent.showColumnMenu) {\n                this.parent.notify(events.renderResponsiveChangeAction, { action: 4 });\n            }\n            this.isCustomDialog = false;\n            this.isDialogClose = false;\n        }\n        this.parent.off(events.enterKeyHandler, this.keyHandler);\n    };\n    ResponsiveDialogRenderer.prototype.sortColumn = function () {\n        if (!this.isSortApplied) {\n            this.closeCustomDialog();\n            return;\n        }\n        if (this.sortPredicate.length) {\n            this.parent.setProperties({ sortSettings: { columns: [] } }, true);\n        }\n        for (var i = 0; i < this.sortPredicate.length; i++) {\n            this.parent.sortColumn(this.sortPredicate[parseInt(i.toString(), 10)].field, this.sortPredicate[parseInt(i.toString(), 10)].direction, this.parent.allowMultiSorting);\n        }\n        if (!this.sortPredicate.length) {\n            this.parent.clearSorting();\n        }\n        this.closeCustomDialog();\n    };\n    ResponsiveDialogRenderer.prototype.getHeaderTitle = function (args, col) {\n        var gObj = this.parent;\n        var title;\n        if (this.action === ResponsiveDialogAction.isEdit) {\n            title = gObj.localeObj.getConstant('EditFormTitle') + args.primaryKeyValue[0];\n        }\n        else if (this.action === ResponsiveDialogAction.isAdd) {\n            title = gObj.localeObj.getConstant('AddFormTitle');\n        }\n        else if (this.action === ResponsiveDialogAction.isFilter) {\n            title = col ? col.headerText || col.field : gObj.localeObj.getConstant('FilterButton');\n        }\n        else if (this.action === ResponsiveDialogAction.isSort) {\n            title = gObj.localeObj.getConstant('Sort');\n        }\n        else if (this.action === ResponsiveDialogAction.isColMenu) {\n            title = gObj.localeObj.getConstant('ColumnMenu');\n        }\n        else if (this.action === ResponsiveDialogAction.isColumnChooser) {\n            title = gObj.localeObj.getConstant('ChooseColumns');\n        }\n        return title;\n    };\n    ResponsiveDialogRenderer.prototype.getDialogName = function (action) {\n        var name;\n        if (action === ResponsiveDialogAction.isAdd || action === ResponsiveDialogAction.isEdit) {\n            name = 'dialogEdit_wrapper_title';\n        }\n        else if (action === ResponsiveDialogAction.isFilter) {\n            name = 'responsive_filter_dialog_wrapper';\n        }\n        else if (action === ResponsiveDialogAction.isColumnChooser) {\n            name = 'responsive_column_chooser_dialog_wrapper';\n        }\n        return name;\n    };\n    ResponsiveDialogRenderer.prototype.getButtonText = function (action) {\n        var text;\n        if (action === ResponsiveDialogAction.isAdd || action === ResponsiveDialogAction.isEdit) {\n            text = 'Save';\n        }\n        else if (action === ResponsiveDialogAction.isFilter || this.action === ResponsiveDialogAction.isSort ||\n            action === ResponsiveDialogAction.isColumnChooser || this.action === ResponsiveDialogAction.isColumnChooser) {\n            text = 'OKButton';\n        }\n        return text;\n    };\n    /**\n     * Function to render the responsive header\n     *\n     * @param {Column} col - specifies the column\n     * @param {ResponsiveDialogArgs} args - specifies the responsive dialog arguments\n     * @param {boolean} isCustomFilter - specifies whether it is custom filter or not\n     * @returns {HTMLElement | string} returns the html element or string\n     */\n    ResponsiveDialogRenderer.prototype.renderResponsiveHeader = function (col, args, isCustomFilter) {\n        var _this = this;\n        var gObj = this.parent;\n        gObj.on(events.enterKeyHandler, this.keyHandler, this);\n        var id = gObj.element.id + this.getDialogName(this.action);\n        var header = gObj.createElement('div', { className: 'e-res-custom-element' });\n        var titleDiv = gObj.createElement('div', { className: 'e-dlg-custom-header', id: id });\n        titleDiv.innerHTML = this.getHeaderTitle(args, col);\n        header.appendChild(titleDiv);\n        var saveBtn = gObj.createElement('button');\n        if (!isCustomFilter) {\n            this.saveBtn = new Button({\n                cssClass: this.parent.cssClass ?\n                    'e-primary e-flat e-res-apply-btn' + ' ' + this.parent.cssClass : 'e-primary e-flat e-res-apply-btn'\n            });\n            saveBtn.innerHTML = gObj.localeObj.getConstant(this.getButtonText(this.action));\n            this.saveBtn.appendTo(saveBtn);\n            // eslint-disable-next-line @typescript-eslint/no-unused-vars\n            saveBtn.onclick = function (e) {\n                _this.dialogHdrBtnClickHandler();\n            };\n        }\n        var isSort = this.action === ResponsiveDialogAction.isSort;\n        var isFilter = this.action === ResponsiveDialogAction.isFilter;\n        if (isFilter || isSort) {\n            var id_1 = isSort ? 'sort' : 'filter';\n            var clearBtn = gObj.createElement('button');\n            this.filterClearBtn = new Button({\n                cssClass: this.parent.cssClass ? 'e-primary e-flat e-res-' + id_1 + '-clear-btn' + ' ' + this.parent.cssClass\n                    : 'e-primary e-flat e-res-' + id_1 + '-clear-btn'\n            });\n            if (isFilter) {\n                var span = gObj.createElement('span', { className: 'e-btn-icon e-icon-filter-clear e-icons' });\n                clearBtn.appendChild(span);\n            }\n            else {\n                clearBtn.innerHTML = gObj.localeObj.getConstant('Clear');\n            }\n            header.appendChild(clearBtn);\n            this.filterClearBtn.appendTo(clearBtn);\n            clearBtn.onclick = function (e) {\n                if ((parentsUntil(e.target, 'e-customfilter'))) {\n                    _this.parent.filterModule.clearFiltering();\n                    _this.removeCustomDlgFilterEle();\n                }\n                else {\n                    if (isFilter) {\n                        _this.filterClear();\n                    }\n                    else {\n                        _this.resetSortButtons();\n                        _this.sortedCols = [];\n                        _this.sortPredicate = [];\n                        _this.isSortApplied = true;\n                    }\n                }\n            };\n            header.appendChild(clearBtn);\n        }\n        if (!isCustomFilter) {\n            header.appendChild(saveBtn);\n        }\n        return header;\n    };\n    ResponsiveDialogRenderer.prototype.filterClear = function () {\n        this.parent.filterModule.filterModule.clearCustomFilter(this.filteredCol);\n        this.parent.filterModule.filterModule.closeResponsiveDialog();\n    };\n    ResponsiveDialogRenderer.prototype.removeCustomFilterElement = function () {\n        var elem = document.getElementById(this.parent.element.id + 'customcolumnmenu');\n        if (elem) {\n            remove(elem);\n            var custom = document.querySelector('.e-customfilter');\n            if (custom) {\n                remove(custom);\n            }\n        }\n        var custommenu = document.querySelector('.e-rescolumnchooser');\n        if (custommenu) {\n            remove(custommenu);\n        }\n    };\n    ResponsiveDialogRenderer.prototype.dialogHdrBtnClickHandler = function () {\n        if (this.action === ResponsiveDialogAction.isEdit || this.action === ResponsiveDialogAction.isAdd) {\n            this.parent.endEdit();\n        }\n        else if (this.action === ResponsiveDialogAction.isFilter) {\n            this.parent.filterModule.filterModule.applyCustomFilter({ col: this.filteredCol, isCustomFilter: this.isCustomDlgRender });\n            this.removeCustomFilterElement();\n        }\n        else if (this.action === ResponsiveDialogAction.isSort) {\n            this.sortColumn();\n            this.removeCustomFilterElement();\n        }\n        else if (this.action === ResponsiveDialogAction.isColumnChooser) {\n            this.parent.notify(events.renderResponsiveColumnChooserDiv, { action: 'confirm' });\n            this.removeCustomFilterElement();\n            this.isCustomDialog = false;\n            this.isDialogClose = false;\n        }\n    };\n    ResponsiveDialogRenderer.prototype.closeCustomDialog = function () {\n        if (this.isCustomDlgRender) {\n            var mainfilterdiv = this.customResponsiveDlg.element.querySelector('.e-mainfilterdiv');\n            remove(mainfilterdiv);\n            return;\n        }\n        this.isRowResponsive = false;\n        this.isCustomDlgRender = false;\n        this.destroyCustomFilterDialog();\n    };\n    ResponsiveDialogRenderer.prototype.destroyCustomFilterDialog = function () {\n        if (!this.customResponsiveDlg) {\n            return;\n        }\n        var elem = document.getElementById(this.customResponsiveDlg.element.id);\n        if (this.customResponsiveDlg && !this.customResponsiveDlg.isDestroyed && elem) {\n            this.customResponsiveDlg.destroy();\n            remove(elem);\n        }\n        this.closeCustomFilter();\n        if (this.action === ResponsiveDialogAction.isSort) {\n            this.sortPredicate = [];\n            this.sortedCols = [];\n            this.isSortApplied = false;\n        }\n    };\n    ResponsiveDialogRenderer.prototype.closeCustomFilter = function () {\n        if (!this.isDialogClose && this.customFilterDlg) {\n            var customEle = document.getElementById(this.customFilterDlg.element.id);\n            if (this.customFilterDlg && !this.customFilterDlg.isDestroyed && customEle) {\n                this.customFilterDlg.destroy();\n                remove(customEle);\n            }\n        }\n        this.isCustomDialog = false;\n        this.isDialogClose = false;\n    };\n    ResponsiveDialogRenderer.prototype.removeCustomDlgFilterEle = function (target) {\n        if (target) {\n            if (target.parentElement.classList.contains('e-filtersetdiv')) {\n                remove(target.parentElement);\n            }\n            else {\n                remove(target);\n            }\n        }\n        else {\n            var child = this.customColumnDiv.children;\n            for (var i = 0; i < child.length; i++) {\n                target = child[parseInt(i.toString(), 10)].querySelector('.e-filtersetdiv');\n                if (target) {\n                    remove(target);\n                    i--;\n                }\n            }\n        }\n    };\n    ResponsiveDialogRenderer.prototype.keyHandler = function (e) {\n        if (e.keyCode === 13 && ((this.action === ResponsiveDialogAction.isFilter\n            && e.target.classList.contains('e-searchinput'))\n            || (this.action === ResponsiveDialogAction.isEdit || this.action === ResponsiveDialogAction.isAdd))) {\n            this.dialogHdrBtnClickHandler();\n        }\n    };\n    ResponsiveDialogRenderer.prototype.editComplate = function (args) {\n        if (args.requestType === 'save' || args.requestType === 'cancel') {\n            this.parent.off(events.enterKeyHandler, this.keyHandler);\n        }\n    };\n    ResponsiveDialogRenderer.prototype.removeEventListener = function () {\n        if (this.customColumnDiv) {\n            EventHandler.remove(this.customColumnDiv, Browser.isDevice ? 'touchend' : 'click', this.customFilterColumnClickHandler);\n        }\n        addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n        this.parent.removeEventListener(events.actionComplete, this.onActionCompleteFn);\n    };\n    return ResponsiveDialogRenderer;\n}());\nexport { ResponsiveDialogRenderer };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable @typescript-eslint/no-unused-vars */\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { ChartLocation } from '../../common/utils/helper';\nimport { stopTimer, removeElement } from '../../common/utils/helper';\nimport { ChartData } from '../../chart/utils/get-data';\nimport { Tooltip as SVGTooltip } from '@syncfusion/ej2-svg-base';\n/**\n * Tooltip Module used to render the tooltip for series.\n */\nvar BaseTooltip = /** @class */ (function (_super) {\n    __extends(BaseTooltip, _super);\n    /**\n     * Constructor for tooltip module.\n     *\n     * @private\n     */\n    function BaseTooltip(chart) {\n        var _this = _super.call(this, chart) || this;\n        _this.element = _this.chart.element;\n        _this.textStyle = chart.tooltip.textStyle;\n        _this.control = chart;\n        _this.template = chart.tooltip.template;\n        return _this;\n    }\n    BaseTooltip.prototype.getElement = function (id) {\n        return document.getElementById(id);\n    };\n    /**\n     * Renders the tooltip.\n     *\n     * @returns {void}\n     * @private\n     */\n    BaseTooltip.prototype.getTooltipElement = function (isTooltip) {\n        this.inverted = this.chart.requireInvertedAxis;\n        this.header = (this.control.tooltip.header === null) ?\n            ((this.control.tooltip.shared) ? '${point.x}' : '${series.name}')\n            : (this.control.tooltip.header);\n        this.formattedText = [];\n        var tooltipDiv = document.getElementById(this.chart.element.id + '_tooltip');\n        var isStockChart = this.chart.element.id.indexOf('stockChart') > -1;\n        if (!isTooltip && !tooltipDiv || isStockChart) {\n            return this.createElement();\n        }\n        return null;\n    };\n    BaseTooltip.prototype.createElement = function () {\n        var tooltipDiv = document.createElement('div');\n        tooltipDiv.id = this.element.id + '_tooltip';\n        tooltipDiv.className = 'ejSVGTooltip';\n        tooltipDiv.style.pointerEvents = 'none';\n        tooltipDiv.style.position = 'absolute';\n        tooltipDiv.style.zIndex = '1';\n        return tooltipDiv;\n    };\n    BaseTooltip.prototype.pushData = function (data, isFirst, tooltipDiv, isChart, enable3D) {\n        if (data.series.enableTooltip) {\n            if (enable3D) {\n                this.currentPoints.push(data);\n            }\n            else if (isChart) {\n                this.currentPoints.push(data);\n            }\n            else {\n                this.currentPoints.push(data);\n            }\n            this.stopAnimation();\n            if (tooltipDiv && !document.getElementById(tooltipDiv.id)) {\n                if (!this.chart.stockChart) {\n                    document.getElementById(this.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n                }\n                else {\n                    document.getElementById(this.chart.stockChart.element.id + '_Secondary_Element').appendChild(tooltipDiv);\n                }\n            }\n            return true;\n        }\n        return false;\n    };\n    BaseTooltip.prototype.removeHighlight = function () {\n        var item;\n        var series;\n        for (var i = 0, len = this.previousPoints.length; i < len; i++) {\n            item = this.previousPoints[i];\n            if (item.series.isRectSeries) {\n                if (item.series.visible) {\n                    this.highlightPoint(item.series, item.point.index, false);\n                }\n                continue;\n            }\n            series = item.series;\n        }\n    };\n    BaseTooltip.prototype.highlightPoint = function (series, pointIndex, highlight) {\n        var element = this.getElement(this.element.id + '_Series_' + series.index + '_Point_' + pointIndex);\n        var selectionModule = this.control.accumulationSelectionModule;\n        var isSelectedElement = selectionModule && selectionModule.selectedDataIndexes.length > 0 ? true : false;\n        if (element) {\n            if ((!isSelectedElement || isSelectedElement && element.getAttribute('class')\n                && element.getAttribute('class').indexOf('_ej2_chart_selection_series_') === -1)) {\n                if (this.chart.highlightColor !== '' && !isNullOrUndefined(this.chart.highlightColor)) {\n                    element.setAttribute('fill', (highlight && this.chart.highlightColor !== 'transparent' ? this.chart.highlightColor : series.pointColorMapping !== '' ? (series.points[0]).color : series.points[pointIndex].color || series.interior));\n                }\n                else {\n                    element.setAttribute('opacity', (highlight && this.chart.highlightColor !== 'transparent' ? series.opacity / 2 : series.opacity).toString());\n                }\n            }\n            else {\n                element.setAttribute('opacity', series.opacity.toString());\n            }\n        }\n    };\n    BaseTooltip.prototype.highlightPoints = function () {\n        for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n            var item = _a[_i];\n            if (item.series.isRectSeries && item.series.category === 'Series') {\n                this.highlightPoint(item.series, item.point.index, true);\n            }\n        }\n    };\n    // tslint:disable-next-line:max-func-body-length\n    BaseTooltip.prototype.createTooltip = function (chart, isFirst, location, clipLocation, point, shapes, offset, bounds, crosshairEnabled, extraPoints, templatePoint, customTemplate) {\n        if (crosshairEnabled === void 0) { crosshairEnabled = false; }\n        if (extraPoints === void 0) { extraPoints = null; }\n        if (templatePoint === void 0) { templatePoint = null; }\n        var series = this.currentPoints[0].series;\n        var module = chart.tooltipModule || chart.tooltip3DModule ||\n            chart.accumulationTooltipModule;\n        if (!module || location === null) { // For the tooltip enable is false.\n            removeElement(this.chart.element.id + '_tooltip');\n            return;\n        }\n        if (isFirst) {\n            this.svgTooltip = new SVGTooltip({\n                opacity: chart.tooltip.opacity ? chart.tooltip.opacity : ((this.chart.theme === 'Material3' || this.chart.theme === 'Material3Dark') ? 1 : 0.75),\n                header: this.headerText,\n                content: this.text,\n                fill: chart.tooltip.fill,\n                border: chart.tooltip.border,\n                enableAnimation: chart.tooltip.enableAnimation,\n                location: location,\n                shared: this.control.tooltip.shared,\n                crosshair: crosshairEnabled,\n                shapes: shapes,\n                clipBounds: this.chart.chartAreaType === 'PolarRadar' ? new ChartLocation(0, 0) : clipLocation,\n                areaBounds: bounds,\n                palette: this.findPalette(),\n                template: customTemplate || this.template,\n                data: templatePoint,\n                theme: chart.theme,\n                offset: offset,\n                textStyle: chart.tooltip.textStyle,\n                isNegative: (series.isRectSeries && series.type !== 'Waterfall' && point && point.y < 0),\n                inverted: this.chart.requireInvertedAxis && series.isRectSeries,\n                arrowPadding: this.text.length > 1 || this.chart.stockChart || (this.chart.tooltip.location.x !== null || this.chart.tooltip.location.y !== null) ? 0 : 7,\n                availableSize: chart.availableSize,\n                duration: this.chart.tooltip.duration,\n                isCanvas: this.chart.enableCanvas,\n                isFixed: (this.chart.tooltip.location.x !== null || this.chart.tooltip.location.y !== null),\n                isTextWrap: chart.tooltip.enableTextWrap && chart.getModuleName() === 'chart',\n                blazorTemplate: { name: 'Template', parent: this.chart.tooltip },\n                controlInstance: this.chart,\n                enableRTL: chart.enableRtl,\n                controlName: 'Chart',\n                allowHighlight: chart.getModuleName() === 'chart' && !series.marker.allowHighlight,\n                tooltipRender: function () {\n                    module.removeHighlight();\n                    module.highlightPoints();\n                    module.updatePreviousPoint(extraPoints);\n                },\n                animationComplete: function (args) {\n                    if (args.tooltip.fadeOuted) {\n                        module.fadeOut(module.previousPoints);\n                    }\n                }\n            });\n            this.svgTooltip.appendTo(this.getElement(this.element.id + '_tooltip'));\n        }\n        else {\n            if (this.svgTooltip) {\n                this.svgTooltip.location = location;\n                this.svgTooltip.content = this.text;\n                this.svgTooltip.header = this.headerText;\n                this.svgTooltip.offset = offset;\n                this.svgTooltip.palette = this.findPalette();\n                this.svgTooltip.shapes = shapes;\n                this.svgTooltip.data = templatePoint;\n                this.svgTooltip.template = this.template;\n                this.svgTooltip.controlName = 'Chart';\n                this.svgTooltip.crosshair = crosshairEnabled;\n                this.svgTooltip.textStyle = chart.tooltip.textStyle;\n                this.svgTooltip.isNegative = (series.isRectSeries && series.type !== 'Waterfall' && point && point.y < 0);\n                this.svgTooltip.clipBounds = this.chart.chartAreaType === 'PolarRadar' ? new ChartLocation(0, 0) : clipLocation;\n                this.svgTooltip.arrowPadding = this.text.length > 1 || this.chart.stockChart || (this.chart.tooltip.location.x !== null || this.chart.tooltip.location.y !== null) ? 0 : 7;\n                this.svgTooltip.allowHighlight = chart.getModuleName() === 'chart' && !series.marker.allowHighlight;\n                this.svgTooltip.dataBind();\n            }\n        }\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        if (this.chart.isReact) {\n            this.chart.renderReactTemplates();\n        }\n    };\n    BaseTooltip.prototype.findPalette = function () {\n        var colors = [];\n        for (var _i = 0, _a = this.currentPoints; _i < _a.length; _i++) {\n            var data = _a[_i];\n            colors.push(this.findColor(data, data.series));\n        }\n        return colors;\n    };\n    BaseTooltip.prototype.findColor = function (data, series) {\n        if (series.isRectSeries && (series.type === 'Candle' || series.type === 'Hilo' || series.type === 'HiloOpenClose')) {\n            return data.point.color;\n        }\n        else {\n            return (data.point.color && data.point.color !== '#ffffff' ? data.point.color\n                : data.point.interior) ||\n                series.marker.fill || series.interior;\n        }\n    };\n    BaseTooltip.prototype.updatePreviousPoint = function (extraPoints) {\n        if (extraPoints) {\n            this.currentPoints = this.currentPoints.concat(extraPoints);\n        }\n        this.previousPoints = extend([], this.currentPoints, null, true);\n    };\n    BaseTooltip.prototype.fadeOut = function (data) {\n        var svgElement = this.chart.enableCanvas ? this.getElement(this.element.id + '_tooltip_group') :\n            this.getElement(this.element.id + '_tooltip_svg');\n        var isTooltip = (svgElement && parseInt(svgElement.getAttribute('opacity'), 10) > 0);\n        if (!isTooltip) {\n            this.valueX = null;\n            this.valueY = null;\n            this.currentPoints = [];\n            this.removeHighlight();\n            this.removeHighlightedMarker(data, true);\n            this.svgTooltip = null;\n            this.control.trigger('animationComplete', {});\n        }\n    };\n    /*\n    * @hidden\n    */\n    BaseTooltip.prototype.removeHighlightedMarker = function (data, fadeOut) {\n        if (this.chart.markerRender) {\n            for (var _i = 0, data_1 = data; _i < data_1.length; _i++) {\n                var item = data_1[_i];\n                removeElement(this.element.id + '_Series_' + item.series.index +\n                    '_Point_' + item.point.index + '_Trackball');\n                this.chart.markerRender.removeHighlightedMarker(item.series, item.point, fadeOut);\n            }\n        }\n        this.previousPoints = [];\n    };\n    // public triggerEvent(point: PointData | AccPointData, isFirst: boolean, textCollection: string, firstText: boolean = true): boolean {\n    //     let argsData: ITooltipRenderEventArgs = {\n    //         cancel: false, name: tooltipRender, text: textCollection,\n    //         point: point.point, series: point.series, textStyle: this.textStyle\n    //     };\n    //     this.chart.trigger(tooltipRender, argsData);\n    //     if (!argsData.cancel) {\n    //         if (point.series.type === 'BoxAndWhisker') {\n    //             this.removeText();\n    //             isFirst = true;\n    //         }\n    //         this.formattedText = this.formattedText.concat(argsData.text);\n    //         this.text = this.formattedText;\n    //     }\n    //     return !argsData.cancel;\n    // }\n    BaseTooltip.prototype.removeText = function () {\n        this.textElements = [];\n        var element = this.getElement(this.element.id + '_tooltip_group');\n        if (element && element.childNodes.length > 0) {\n            while (element.lastChild && element.childNodes.length !== 1) {\n                element.removeChild(element.lastChild);\n            }\n        }\n    };\n    BaseTooltip.prototype.stopAnimation = function () {\n        stopTimer(this.toolTipInterval);\n    };\n    /**\n     * Removes the tooltip on mouse leave.\n     *\n     * @returns {void}\n     * @private\n     */\n    BaseTooltip.prototype.removeTooltip = function (duration) {\n        var _this = this;\n        var tooltipElement = this.getElement(this.element.id + '_tooltip');\n        var tooltipTemplate = tooltipElement ? this.getElement(tooltipElement.id + 'parent_template') : null;\n        var isTemplateRendered = tooltipTemplate && tooltipTemplate.innerText !== '<div></div>';\n        this.stopAnimation();\n        if (tooltipElement && this.previousPoints.length > 0) {\n            this.toolTipInterval = +setTimeout(function () {\n                if (_this.svgTooltip) {\n                    _this.svgTooltip.fadeOut();\n                }\n            }, duration);\n        }\n    };\n    return BaseTooltip;\n}(ChartData));\nexport { BaseTooltip };\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { EventHandler } from '@syncfusion/ej2-base';\nimport { attributes, createElement, classList, append } from '@syncfusion/ej2-base';\n/**\n * `NumericContainer` module handles rendering and refreshing numeric container.\n */\nvar NumericContainer = /** @class */ (function () {\n    /**\n     * Constructor for numericContainer module\n     *\n     * @param {Pager} pagerModule - specifies the pagerModule\n     * @hidden\n     */\n    function NumericContainer(pagerModule) {\n        this.pagerModule = pagerModule;\n    }\n    /**\n     * The function is used to render numericContainer\n     *\n     * @returns {void}\n     * @hidden\n     */\n    NumericContainer.prototype.render = function () {\n        this.pagerElement = this.pagerModule.element;\n        this.renderNumericContainer();\n        this.refreshNumericLinks();\n        this.wireEvents();\n    };\n    /**\n     * Refreshes the numeric container of Pager.\n     *\n     * @returns {void}\n     */\n    NumericContainer.prototype.refresh = function () {\n        this.pagerModule.updateTotalPages();\n        if (this.links.length) {\n            this.updateLinksHtml();\n        }\n        this.refreshAriaAttrLabel();\n        this.updateStyles();\n    };\n    /**\n     * The function is used to refresh refreshNumericLinks\n     *\n     * @returns {void}\n     * @hidden\n     */\n    NumericContainer.prototype.refreshNumericLinks = function () {\n        var link;\n        var pagerObj = this.pagerModule;\n        var div = pagerObj.element.querySelector('.e-numericcontainer');\n        var frag = document.createDocumentFragment();\n        div.innerHTML = '';\n        for (var i = 1; i <= pagerObj.pageCount; i++) {\n            link = createElement('a', {\n                className: 'e-link e-numericitem e-spacing e-pager-default',\n                attrs: { tabindex: '-1', 'aria-label': pagerObj.getLocalizedLabel('Page') + i + pagerObj.getLocalizedLabel('Of') +\n                        pagerObj.totalPages + pagerObj.getLocalizedLabel('Pages'), href: '#' }\n            });\n            if (pagerObj.currentPage === i) {\n                classList(link, ['e-currentitem', 'e-active'], ['e-pager-default']);\n                link.setAttribute('aria-current', 'page');\n            }\n            frag.appendChild(link);\n        }\n        div.appendChild(frag);\n        this.links = [].slice.call(div.childNodes);\n    };\n    /**\n     * Binding events to the element while component creation\n     *\n     * @returns {void}\n     * @hidden\n     */\n    NumericContainer.prototype.wireEvents = function () {\n        EventHandler.add(this.pagerElement, 'click', this.clickHandler, this);\n        EventHandler.add(this.pagerElement, 'auxclick', this.auxiliaryClickHandler, this);\n    };\n    /**\n     * Unbinding events from the element while component destroy\n     *\n     * @returns {void}\n     * @hidden\n     */\n    NumericContainer.prototype.unwireEvents = function () {\n        EventHandler.remove(this.pagerModule.element, 'click', this.clickHandler);\n        EventHandler.remove(this.pagerModule.element, 'auxclick', this.auxiliaryClickHandler);\n    };\n    /**\n     * To destroy the PagerMessage\n     *\n     * @function destroy\n     * @returns {void}\n     * @hidden\n     */\n    NumericContainer.prototype.destroy = function () {\n        this.unwireEvents();\n    };\n    NumericContainer.prototype.refreshAriaAttrLabel = function () {\n        var pagerObj = this.pagerModule;\n        var numericContainer = pagerObj.element.querySelector('.e-numericcontainer');\n        var links = numericContainer.querySelectorAll('a');\n        for (var i = 0; i < links.length; i++) {\n            if (links[parseInt(i.toString(), 10)].hasAttribute('aria-label') && links[parseInt(i.toString(), 10)].hasAttribute('index')) {\n                links[parseInt(i.toString(), 10)].setAttribute('aria-label', pagerObj.getLocalizedLabel('Page') + links[parseInt(i.toString(), 10)].getAttribute('index')\n                    + pagerObj.getLocalizedLabel('Of') + pagerObj.totalPages + pagerObj.getLocalizedLabel('Pages'));\n            }\n        }\n    };\n    NumericContainer.prototype.renderNumericContainer = function () {\n        this.element = createElement('div', {\n            className: 'e-pagercontainer', attrs: { 'role': 'navigation' }\n        });\n        this.renderFirstNPrev(this.element);\n        this.renderPrevPagerSet(this.element);\n        this.element.appendChild(createElement('div', { className: 'e-numericcontainer' }));\n        this.renderNextPagerSet(this.element);\n        this.renderNextNLast(this.element);\n        this.pagerModule.element.appendChild(this.element);\n    };\n    NumericContainer.prototype.renderFirstNPrev = function (pagerContainer) {\n        this.first = createElement('div', {\n            className: 'e-first e-icons e-icon-first',\n            attrs: {\n                title: this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n                tabindex: '-1', role: 'button'\n            }\n        });\n        this.prev = createElement('div', {\n            className: 'e-prev e-icons e-icon-prev',\n            attrs: {\n                title: this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n                tabindex: '-1', role: 'button'\n            }\n        });\n        append([this.first, this.prev], pagerContainer);\n    };\n    NumericContainer.prototype.renderPrevPagerSet = function (pagerContainer) {\n        var prevPager = createElement('div');\n        this.PP = createElement('a', {\n            className: 'e-link e-pp e-spacing', innerHTML: '...',\n            attrs: {\n                title: this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n                'aria-label': this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n                tabindex: '-1',\n                href: '#'\n            }\n        });\n        prevPager.appendChild(this.PP);\n        pagerContainer.appendChild(prevPager);\n    };\n    NumericContainer.prototype.renderNextPagerSet = function (pagerContainer) {\n        var nextPager = createElement('div');\n        this.NP = createElement('a', {\n            className: 'e-link e-np e-spacing',\n            innerHTML: '...', attrs: {\n                title: this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n                'aria-label': this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n                tabindex: '-1',\n                href: '#'\n            }\n        });\n        nextPager.appendChild(this.NP);\n        pagerContainer.appendChild(nextPager);\n    };\n    NumericContainer.prototype.renderNextNLast = function (pagerContainer) {\n        this.next = createElement('div', {\n            className: 'e-next e-icons e-icon-next',\n            attrs: {\n                title: this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n                tabindex: '-1', role: 'button'\n            }\n        });\n        this.last = createElement('div', {\n            className: 'e-last e-icons e-icon-last',\n            attrs: {\n                title: this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n                tabindex: '-1', role: 'button'\n            }\n        });\n        append([this.next, this.last], pagerContainer);\n    };\n    NumericContainer.prototype.clickHandler = function (e) {\n        var pagerObj = this.pagerModule;\n        this.target = e.target;\n        if (this.target.classList.contains('e-numericitem')) {\n            e.preventDefault();\n        }\n        pagerObj.previousPageNo = pagerObj.currentPage;\n        if (!this.target.classList.contains('e-disable') && !isNullOrUndefined(this.target.getAttribute('index'))) {\n            pagerObj.currentPage = parseInt(this.target.getAttribute('index'), 10);\n            pagerObj.dataBind();\n        }\n        return false;\n    };\n    NumericContainer.prototype.auxiliaryClickHandler = function (e) {\n        this.target = e.target;\n        if (this.target.classList.contains('e-numericitem') && (e.button === 1)) {\n            e.preventDefault();\n        }\n    };\n    NumericContainer.prototype.updateLinksHtml = function () {\n        var pagerObj = this.pagerModule;\n        var currentPageSet;\n        var isLastSet;\n        var pageNo;\n        var numItems = this.pagerElement.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n        pagerObj.currentPage = pagerObj.totalPages === 1 ? 1 : pagerObj.currentPage;\n        if (pagerObj.currentPage > pagerObj.totalPages && pagerObj.totalPages) {\n            pagerObj.currentPage = pagerObj.totalPages;\n        }\n        currentPageSet = parseInt((pagerObj.currentPage / pagerObj.pageCount).toString(), 10);\n        if (pagerObj.currentPage % pagerObj.pageCount === 0 && currentPageSet > 0) {\n            currentPageSet = currentPageSet - 1;\n        }\n        for (var i = 0; i < pagerObj.pageCount; i++) {\n            if (pagerObj.isPagerResized) {\n                var focusedItem = this.pagerElement.querySelector('.e-focus');\n                var focusedorTarget = this.target ? this.target : focusedItem ? focusedItem : null;\n                var prevFocused = false;\n                var nextFocused = false;\n                var firstFocused = false;\n                var lastFocused = false;\n                var numItemFocused = false;\n                var npFocused = false;\n                var ppFocused = false;\n                if (focusedorTarget) {\n                    var classList_1 = focusedorTarget.classList;\n                    if (classList_1.contains('e-icons')) {\n                        switch (true) {\n                            case classList_1.contains('e-prev'):\n                                prevFocused = true;\n                                break;\n                            case classList_1.contains('e-next'):\n                                nextFocused = true;\n                                break;\n                            case classList_1.contains('e-first'):\n                                firstFocused = true;\n                                break;\n                            case classList_1.contains('e-last'):\n                                lastFocused = true;\n                                break;\n                        }\n                    }\n                    else if (classList_1.contains('e-numericitem')) {\n                        switch (true) {\n                            case classList_1.contains('e-np'):\n                                npFocused = true;\n                                break;\n                            case classList_1.contains('e-pp'):\n                                ppFocused = true;\n                                break;\n                            default:\n                                numItemFocused = classList_1.contains('e-numericitem');\n                                break;\n                        }\n                    }\n                }\n                isLastSet = lastFocused || (this.pagerModule.keyAction === 'End');\n                numItems = this.pagerElement.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n                var isPageAvailable = Array.from(numItems).some(function (item) { return parseInt(item.getAttribute('index'), 10) === pagerObj.currentPage; });\n                //Setting pageNo to render based on key action or click action.\n                if (firstFocused || this.pagerModule.keyAction === 'Home') {\n                    pageNo = 1 + i;\n                }\n                else if (lastFocused || this.pagerModule.keyAction === 'End') {\n                    pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n                }\n                else if (nextFocused || this.pagerModule.keyAction === 'ArrowRight' || prevFocused || this.pagerModule.keyAction === 'ArrowLeft') {\n                    if (isPageAvailable) {\n                        pageNo = parseInt(numItems[0].getAttribute('index'), 10) + i;\n                    }\n                    else if (prevFocused || this.pagerModule.keyAction === 'ArrowLeft') {\n                        pageNo = parseInt(this.PP.getAttribute('index'), 10) + i;\n                    }\n                    else {\n                        pageNo = pagerObj.currentPage + i;\n                    }\n                }\n                else if (npFocused || ppFocused) {\n                    pageNo = pagerObj.currentPage + i;\n                }\n                else if (numItemFocused) {\n                    pageNo = (parseInt(numItems[0].getAttribute('index'), 10) + i);\n                }\n                else {\n                    pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n                }\n            }\n            else {\n                pageNo = (currentPageSet * pagerObj.pageCount) + 1 + i;\n            }\n            if (pageNo <= pagerObj.totalPages) {\n                this.links[parseInt(i.toString(), 10)].classList.remove('e-hide');\n                this.links[parseInt(i.toString(), 10)].style.display = '';\n                this.links[parseInt(i.toString(), 10)].setAttribute('index', pageNo.toString());\n                this.links[parseInt(i.toString(), 10)].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n                if (pagerObj.currentPage !== pageNo) {\n                    this.links[parseInt(i.toString(), 10)].classList.add('e-pager-default');\n                }\n                else {\n                    this.links[parseInt(i.toString(), 10)].classList.remove('e-pager-default');\n                }\n            }\n            else {\n                this.links[parseInt(i.toString(), 10)].innerHTML = !pagerObj.customText ? pageNo.toString() : pagerObj.customText + pageNo;\n                this.links[parseInt(i.toString(), 10)].style.display = 'none';\n            }\n            classList(this.links[parseInt(i.toString(), 10)], [], ['e-currentitem', 'e-active']);\n            this.links[parseInt(i.toString(), 10)].removeAttribute('aria-current');\n        }\n        attributes(this.first, {\n            'index': '1',\n            'title': this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n        });\n        attributes(this.pagerElement.querySelector('.e-mfirst'), {\n            'index': '1',\n            'title': this.pagerModule.getLocalizedLabel('firstPageTooltip'),\n        });\n        attributes(this.last, {\n            'index': pagerObj.totalPages.toString(),\n            'title': this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n        });\n        attributes(this.pagerElement.querySelector('.e-mlast'), {\n            'index': pagerObj.totalPages.toString(),\n            'title': this.pagerModule.getLocalizedLabel('lastPageTooltip'),\n        });\n        attributes(this.prev, {\n            'index': (pagerObj.currentPage - 1).toString(),\n            'title': this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n        });\n        attributes(this.pagerElement.querySelector('.e-mprev'), {\n            'index': (pagerObj.currentPage - 1).toString(),\n            'title': this.pagerModule.getLocalizedLabel('previousPageTooltip'),\n        });\n        attributes(this.next, {\n            'index': (pagerObj.currentPage + 1).toString(),\n            'title': this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n        });\n        attributes(this.pagerElement.querySelector('.e-mnext'), {\n            'index': (pagerObj.currentPage + 1).toString(),\n            'title': this.pagerModule.getLocalizedLabel('nextPageTooltip'),\n        });\n        var ppIndex = (this.pagerModule.isPagerResized && numItems.length)\n            ? isLastSet\n                ? parseInt(numItems[0].getAttribute('index'), 10) - pagerObj.avgNumItems\n                : parseInt(numItems[0].getAttribute('index'), 10) - numItems.length\n            : parseInt(this.links[0].getAttribute('index'), 10) - pagerObj.pageCount;\n        attributes(this.PP, {\n            'index': ((ppIndex < 1) ? '1' : ppIndex.toString()),\n            'title': this.pagerModule.getLocalizedLabel('previousPagerTooltip'),\n            'aria-label': this.pagerModule.getLocalizedLabel('previousPagerTooltip')\n        });\n        var NPIndex = (this.pagerModule.isPagerResized && numItems.length)\n            ? parseInt(numItems[numItems.length - 1].getAttribute('index'), 10)\n            : parseInt(this.links[this.links.length - 1].getAttribute('index'), 10);\n        attributes(this.NP, {\n            'index': (NPIndex + 1).toString(),\n            'title': this.pagerModule.getLocalizedLabel('nextPagerTooltip'),\n            'aria-label': this.pagerModule.getLocalizedLabel('nextPagerTooltip')\n        });\n        this.target = undefined;\n    };\n    NumericContainer.prototype.updateStyles = function () {\n        var _this = this;\n        this.updateFirstNPrevStyles();\n        this.updatePrevPagerSetStyles();\n        this.updateNextPagerSetStyles();\n        this.updateNextNLastStyles();\n        if (this.links.length) {\n            var currentPageIndex = this.links.findIndex(function (link) { return link.getAttribute('index') === _this.pagerModule.currentPage.toString(); });\n            var currentPage = (this.pagerModule.isPagerResized && currentPageIndex !== -1) ? currentPageIndex\n                : ((this.pagerModule.currentPage - 1) % this.pagerModule.pageCount);\n            classList(this.links[parseInt(currentPage.toString(), 10)], ['e-currentitem', 'e-active'], []);\n            this.links[parseInt(currentPage.toString(), 10)].setAttribute('aria-current', 'page');\n        }\n    };\n    NumericContainer.prototype.updateFirstNPrevStyles = function () {\n        var firstPage = ['e-firstpage', 'e-pager-default'];\n        var firstPageDisabled = ['e-firstpagedisabled', 'e-disable'];\n        var prevPage = ['e-prevpage', 'e-pager-default'];\n        var prevPageDisabled = ['e-prevpagedisabled', 'e-disable'];\n        if (this.pagerModule.totalPages > 0 && this.pagerModule.currentPage > 1) {\n            classList(this.prev, prevPage, prevPageDisabled);\n            classList(this.first, firstPage, firstPageDisabled);\n            classList(this.pagerElement.querySelector('.e-mfirst'), firstPage, firstPageDisabled);\n            classList(this.pagerElement.querySelector('.e-mprev'), prevPage, prevPageDisabled);\n        }\n        else {\n            classList(this.prev, prevPageDisabled, prevPage);\n            classList(this.first, firstPageDisabled, firstPage);\n            classList(this.pagerElement.querySelector('.e-mprev'), prevPageDisabled, prevPage);\n            classList(this.pagerElement.querySelector('.e-mfirst'), firstPageDisabled, firstPage);\n        }\n    };\n    NumericContainer.prototype.updatePrevPagerSetStyles = function () {\n        if (this.pagerModule.currentPage > this.pagerModule.pageCount || (this.pagerModule.isPagerResized\n            && this.links.findIndex(function (link) { return parseInt(link.getAttribute('index'), 10) === 1; }))) {\n            classList(this.PP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n        }\n        else {\n            classList(this.PP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n        }\n    };\n    NumericContainer.prototype.updateNextPagerSetStyles = function () {\n        var pagerObj = this.pagerModule;\n        var firstPage = this.links[0].innerHTML.replace(pagerObj.customText, '');\n        var numItems = this.pagerElement.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n        if (!firstPage.length || !this.links.length || (parseInt(firstPage, 10) + pagerObj.pageCount > pagerObj.totalPages)\n            || (pagerObj.isPagerResized && Array.from(numItems).some(function (item) { return parseInt(item.getAttribute('index'), 10) === pagerObj.totalPages; }))) {\n            classList(this.NP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n        }\n        else {\n            classList(this.NP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n        }\n    };\n    NumericContainer.prototype.updateNextNLastStyles = function () {\n        var lastPage = ['e-lastpage', 'e-pager-default'];\n        var lastPageDisabled = ['e-lastpagedisabled', 'e-disable'];\n        var nextPage = ['e-nextpage', 'e-pager-default'];\n        var nextPageDisabled = ['e-nextpagedisabled', 'e-disable'];\n        var pagerObj = this.pagerModule;\n        if (pagerObj.currentPage === pagerObj.totalPages || pagerObj.totalRecordsCount === 0) {\n            classList(this.last, lastPageDisabled, lastPage);\n            classList(this.next, nextPageDisabled, nextPage);\n            classList(this.pagerElement.querySelector('.e-mlast'), lastPageDisabled, lastPage);\n            classList(this.pagerElement.querySelector('.e-mnext'), nextPageDisabled, nextPage);\n        }\n        else {\n            classList(this.last, lastPage, lastPageDisabled);\n            classList(this.next, nextPage, nextPageDisabled);\n            classList(this.pagerElement.querySelector('.e-mlast'), lastPage, lastPageDisabled);\n            classList(this.pagerElement.querySelector('.e-mnext'), nextPage, nextPageDisabled);\n        }\n    };\n    return NumericContainer;\n}());\nexport { NumericContainer };\n","import { createElement, append } from '@syncfusion/ej2-base';\n/**\n * `PagerMessage` module is used to display pager information.\n */\nvar PagerMessage = /** @class */ (function () {\n    /**\n     * Constructor for externalMessage module\n     *\n     * @param {Pager} pagerModule - specifies the pager Module\n     * @hidden\n     */\n    function PagerMessage(pagerModule) {\n        this.pagerModule = pagerModule;\n    }\n    /**\n     * The function is used to render pager message\n     *\n     * @returns {void}\n     * @hidden\n     */\n    PagerMessage.prototype.render = function () {\n        var div = createElement('div', { className: 'e-parentmsgbar' });\n        this.pageNoMsgElem = createElement('span', { className: 'e-pagenomsg', styles: 'textalign:right' });\n        this.pageCountMsgElem = createElement('span', { className: 'e-pagecountmsg', styles: 'textalign:right' });\n        append([this.pageNoMsgElem, this.pageCountMsgElem], div);\n        this.pagerModule.element.appendChild(div);\n        this.refresh();\n    };\n    /**\n     * Refreshes the pager information.\n    *\n     * @returns {void}\n     */\n    PagerMessage.prototype.refresh = function () {\n        var pagerObj = this.pagerModule;\n        this.pageNoMsgElem.textContent = this.format(pagerObj.getLocalizedLabel('currentPageInfo'), [pagerObj.totalRecordsCount === 0 ? 0 :\n                pagerObj.currentPage, pagerObj.totalPages || 0, pagerObj.totalRecordsCount || 0]) + ' ';\n        this.pageCountMsgElem.textContent = this.format(pagerObj.getLocalizedLabel(pagerObj.totalRecordsCount <= 1 ? 'totalItemInfo' : 'totalItemsInfo'), [pagerObj.totalRecordsCount || 0, pagerObj.totalRecordsCount ? (pagerObj.pageSize * (pagerObj.currentPage - 1)) + 1 : 0,\n            pagerObj.pageSize * pagerObj.currentPage > pagerObj.totalRecordsCount ? pagerObj.totalRecordsCount :\n                pagerObj.pageSize * pagerObj.currentPage]);\n        this.pageNoMsgElem.parentElement.classList.remove('e-hide');\n    };\n    /**\n     * Hides the Pager information.\n     *\n     * @returns {void}\n     */\n    PagerMessage.prototype.hideMessage = function () {\n        if (this.pageNoMsgElem) {\n            this.pageNoMsgElem.style.display = 'none';\n        }\n        if (this.pageCountMsgElem) {\n            this.pageCountMsgElem.style.display = 'none';\n        }\n    };\n    /**\n     * Shows the Pager information.\n     *\n     * @returns {void}\n     */\n    PagerMessage.prototype.showMessage = function () {\n        if (!this.pageNoMsgElem) {\n            this.render();\n        }\n        this.pageNoMsgElem.style.display = '';\n        this.pageCountMsgElem.style.display = '';\n    };\n    /**\n     * To destroy the PagerMessage\n     *\n     * @function destroy\n     * @returns {void}\n     * @hidden\n     */\n    PagerMessage.prototype.destroy = function () {\n        //destroy\n    };\n    /**\n     * To format the PagerMessage\n     *\n     * @function format\n     * @returns {string}\n     * @hidden\n     */\n    PagerMessage.prototype.format = function (str, args) {\n        var regx;\n        for (var i = 0; i < args.length; i++) {\n            // eslint-disable-next-line security/detect-non-literal-regexp\n            regx = new RegExp('\\\\{' + (i) + '\\\\}', 'gm');\n            str = str.replace(regx, args[parseInt(i.toString(), 10)].toString());\n        }\n        return str;\n    };\n    return PagerMessage;\n}());\nexport { PagerMessage };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, L10n, Browser, addClass, removeClass, classList } from '@syncfusion/ej2-base';\nimport { createElement, compile as templateCompiler, EventHandler, extend } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Property, Event, NotifyPropertyChanges } from '@syncfusion/ej2-base';\nimport { NumericContainer } from './numeric-container';\nimport { PagerMessage } from './pager-message';\nimport { appendChildren, parentsUntil } from '../grid/base/util';\nimport * as events from '../grid/base/constant';\n/**\n * Represents the `Pager` component.\n * ```html\n * <div id=\"pager\"/>\n * ```\n * ```typescript\n * <script>\n *   var pagerObj = new Pager({ totalRecordsCount: 50, pageSize:10 });\n *   pagerObj.appendTo(\"#pager\");\n * </script>\n * ```\n */\nvar Pager = /** @class */ (function (_super) {\n    __extends(Pager, _super);\n    /**\n     * Constructor for creating the component.\n     *\n     * @param {PagerModel} options - specifies the options\n     * @param {string} element - specifies the element\n     * @param {string} parent - specifies the pager parent\n     * @hidden\n     */\n    function Pager(options, element, parent) {\n        var _this = _super.call(this, options, element) || this;\n        /** @hidden */\n        _this.hasParent = false;\n        _this.checkAll = true;\n        _this.pageRefresh = 'pager-refresh';\n        _this.firstPagerFocus = false;\n        /** @hidden */\n        _this.isCancel = false;\n        _this.parent = parent;\n        return _this;\n    }\n    /**\n     * To provide the array of modules needed for component rendering\n     *\n     * @returns {ModuleDeclaration[]} returns the modules declaration\n     * @hidden\n     */\n    Pager.prototype.requiredModules = function () {\n        var modules = [];\n        if (this.enableExternalMessage) {\n            modules.push({\n                member: 'externalMessage',\n                args: [this]\n            });\n        }\n        if (this.checkpagesizes()) {\n            modules.push({\n                member: 'pagerdropdown',\n                args: [this]\n            });\n        }\n        return modules;\n    };\n    /**\n     * Initialize the event handler\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Pager.prototype.preRender = function () {\n        //preRender\n        this.defaultConstants = {\n            currentPageInfo: '{0} of {1} pages',\n            totalItemsInfo: '({0} items)',\n            totalItemInfo: '({0} item)',\n            firstPageTooltip: 'Go to first page',\n            lastPageTooltip: 'Go to last page',\n            nextPageTooltip: 'Go to next page',\n            previousPageTooltip: 'Go to previous page',\n            nextPagerTooltip: 'Go to next pager items',\n            previousPagerTooltip: 'Go to previous pager items',\n            pagerDropDown: 'Items per page',\n            pagerAllDropDown: 'Items',\n            CurrentPageInfo: '{0} of {1} pages',\n            TotalItemsInfo: '({0} items)',\n            FirstPageTooltip: 'Go to first page',\n            LastPageTooltip: 'Go to last page',\n            NextPageTooltip: 'Go to next page',\n            PreviousPageTooltip: 'Go to previous page',\n            NextPagerTooltip: 'Go to next pager items',\n            PreviousPagerTooltip: 'Go to previous pager items',\n            PagerDropDown: 'Items per page',\n            PagerAllDropDown: 'Items',\n            All: 'All',\n            Container: 'Pager Container',\n            Information: 'Pager Information',\n            ExternalMsg: 'Pager external message',\n            Page: 'Page ',\n            Of: ' of ',\n            Pages: ' Pages'\n        };\n        this.containerModule = new NumericContainer(this);\n        this.pagerMessageModule = new PagerMessage(this);\n    };\n    /**\n     * To Initialize the component rendering\n     *\n     * @returns {void}\n     */\n    Pager.prototype.render = function () {\n        this.element.setAttribute('data-role', 'pager');\n        this.element.setAttribute('tabindex', '-1');\n        this.initLocalization();\n        if (this.cssClass) {\n            if (this.cssClass.indexOf(' ') !== -1) {\n                addClass([this.element], this.cssClass.split(' '));\n            }\n            else {\n                addClass([this.element], [this.cssClass]);\n            }\n        }\n        if (!this.hasParent) {\n            this.element.setAttribute('tabindex', '0');\n        }\n        if (this.template) {\n            if (this.isReactTemplate()) {\n                this.on(this.pageRefresh, this.pagerTemplate, this);\n                this.notify(this.pageRefresh, {});\n            }\n            else {\n                this.pagerTemplate();\n            }\n        }\n        else {\n            this.updateRTL();\n            this.totalRecordsCount = this.totalRecordsCount || 0;\n            this.renderFirstPrevDivForDevice();\n            this.containerModule.render();\n            if (this.enablePagerMessage) {\n                this.pagerMessageModule.render();\n            }\n            this.renderNextLastDivForDevice();\n            if (this.checkpagesizes() && this.pagerdropdownModule) {\n                this.pagerdropdownModule.render();\n            }\n            this.addAriaLabel();\n            if (this.enableExternalMessage && this.externalMessageModule) {\n                this.externalMessageModule.render();\n            }\n            this.refresh();\n            this.trigger('created', { 'currentPage': this.currentPage, 'totalRecordsCount': this.totalRecordsCount });\n        }\n        this.wireEvents();\n        this.addListener();\n    };\n    /**\n     * Get the properties to be maintained in the persisted state.\n     *\n     * @returns {string} returns the persist data\n     * @hidden\n     */\n    Pager.prototype.getPersistData = function () {\n        var keyEntity = ['currentPage', 'pageSize'];\n        return this.addOnPersist(keyEntity);\n    };\n    /**\n     * To destroy the Pager component.\n     *\n     * @method destroy\n     * @returns {void}\n     */\n    Pager.prototype.destroy = function () {\n        if (this.isDestroyed) {\n            return;\n        }\n        if (this.isReactTemplate()) {\n            this.off(this.pageRefresh, this.pagerTemplate);\n            if (!this.hasParent) {\n                this.destroyTemplate(['template']);\n            }\n        }\n        this.removeListener();\n        this.unwireEvents();\n        _super.prototype.destroy.call(this);\n        this.containerModule.destroy();\n        this.pagerMessageModule.destroy();\n        if (!this.isReactTemplate()) {\n            this.element.innerHTML = '';\n        }\n    };\n    /**\n     * Destroys the given template reference.\n     *\n     * @param {string[]} propertyNames - Defines the collection of template name.\n     * @param {any} index - Defines the index\n     */\n    // eslint-disable-next-line\n    Pager.prototype.destroyTemplate = function (propertyNames, index) {\n        this.clearTemplate(propertyNames, index);\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    Pager.prototype.getModuleName = function () {\n        return 'pager';\n    };\n    /**\n     * Called internally if any of the property value changed.\n     *\n     * @param {PagerModel} newProp - specifies the new property\n     * @param {PagerModel} oldProp - specifies the old propety\n     * @returns {void}\n     * @hidden\n     */\n    Pager.prototype.onPropertyChanged = function (newProp, oldProp) {\n        if (this.isDestroyed) {\n            return;\n        }\n        if ((newProp.pageSize === this.getLocalizedLabel('All')) && oldProp.pageSize === this.totalRecordsCount) {\n            this.pageSize = this.totalRecordsCount;\n            return;\n        }\n        if (newProp.pageCount !== oldProp.pageCount) {\n            this.containerModule.refreshNumericLinks();\n            this.containerModule.refresh();\n        }\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'currentPage':\n                    if (this.checkGoToPage(newProp.currentPage, oldProp.currentPage)) {\n                        this.currentPageChanged(newProp, oldProp);\n                    }\n                    break;\n                case 'pageSize':\n                case 'totalRecordsCount':\n                case 'customText':\n                    if (this.checkpagesizes() && this.pagerdropdownModule) {\n                        if (oldProp.pageSize !== newProp.pageSize) {\n                            this.currentPage = 1;\n                        }\n                        this.pagerdropdownModule.setDropDownValue('value', this.pageSize);\n                    }\n                    if (newProp.pageSize !== oldProp.pageSize) {\n                        this.pageSize = newProp.pageSize;\n                        this.currentPageChanged(newProp, oldProp);\n                        if (this.isCancel && this.hasParent) {\n                            this.parent\n                                .setProperties({ pageSettings: { pageSize: oldProp.pageSize } }, true);\n                        }\n                    }\n                    else {\n                        this.refresh();\n                    }\n                    break;\n                case 'pageSizes':\n                    if (this.checkpagesizes() && this.pagerdropdownModule) {\n                        this.pagerdropdownModule.destroy();\n                        this.pagerdropdownModule.render();\n                    }\n                    this.refresh();\n                    break;\n                case 'template':\n                    this.templateFn = this.compile(this.template);\n                    this.refresh();\n                    break;\n                case 'locale':\n                    this.initLocalization();\n                    this.refresh();\n                    break;\n                case 'enableExternalMessage':\n                    if (this.enableExternalMessage && this.externalMessageModule) {\n                        this.externalMessageModule.render();\n                    }\n                    break;\n                case 'externalMessage':\n                    if (this.externalMessageModule) {\n                        this.externalMessageModule.refresh();\n                    }\n                    break;\n                case 'enableRtl':\n                    this.updateRTL();\n                    break;\n                case 'enablePagerMessage':\n                    if (this.enablePagerMessage) {\n                        this.pagerMessageModule.showMessage();\n                    }\n                    else {\n                        this.pagerMessageModule.hideMessage();\n                    }\n                    break;\n            }\n        }\n        this.resizePager();\n    };\n    Pager.prototype.wireEvents = function () {\n        if (!this.hasParent) {\n            EventHandler.add(this.element, 'keydown', this.keyPressHandler, this);\n            EventHandler.add(document.body, 'keydown', this.keyDownHandler, this);\n        }\n        EventHandler.add(this.element, 'focusin', this.onFocusIn, this);\n        EventHandler.add(this.element, 'focusout', this.onFocusOut, this);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        EventHandler.add(window, 'resize', this.resizePager, this);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        EventHandler.add(window, 'load', this.resizePager, this);\n    };\n    Pager.prototype.unwireEvents = function () {\n        if (!this.hasParent) {\n            EventHandler.remove(this.element, 'keydown', this.keyPressHandler);\n            EventHandler.remove(document.body, 'keydown', this.keyDownHandler);\n        }\n        EventHandler.remove(this.element, 'focusin', this.onFocusIn);\n        EventHandler.remove(this.element, 'focusout', this.onFocusOut);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        EventHandler.remove(window, 'resize', this.resizePager);\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        EventHandler.remove(window, 'load', this.resizePager);\n    };\n    Pager.prototype.onFocusIn = function (e) {\n        var focusedTabIndexElement = this.getFocusedTabindexElement();\n        if (isNullOrUndefined(focusedTabIndexElement)) {\n            var target = e.target;\n            var dropDownPage = this.getDropDownPage();\n            if (!this.hasParent) {\n                this.element.tabIndex = -1;\n            }\n            if (target === this.element && !this.hasParent) {\n                var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n                this.addFocus(focusablePagerElements[0], true);\n                return;\n            }\n            if (target === this.element) {\n                this.element.tabIndex = 0;\n                return;\n            }\n            if (target !== dropDownPage && !target.classList.contains('e-disable')) {\n                this.addFocus(target, true);\n            }\n        }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    Pager.prototype.onFocusOut = function (e) {\n        var focusedElement = this.getFocusedElement();\n        var dropDownPage = this.getDropDownPage();\n        if (!isNullOrUndefined(focusedElement)) {\n            this.removeFocus(focusedElement, true);\n        }\n        if (this.pageSizes && dropDownPage && dropDownPage.classList.contains('e-input-focus')) {\n            this.removeFocus(dropDownPage, true);\n        }\n        this.setTabIndexForFocusLastElement();\n        if (!this.hasParent) {\n            this.element.tabIndex = 0;\n        }\n        if (this.hasParent) {\n            this.element.tabIndex = -1;\n        }\n    };\n    Pager.prototype.keyDownHandler = function (e) {\n        if (e.altKey) {\n            if (e.keyCode === 74) {\n                var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n                if (focusablePagerElements.length > 0) {\n                    focusablePagerElements[0].focus();\n                }\n            }\n        }\n    };\n    Pager.prototype.keyPressHandler = function (e) {\n        var presskey = extend(e, { cancel: false });\n        this.notify(events.keyPressed, presskey);\n        if (presskey.cancel === true) {\n            e.stopImmediatePropagation();\n        }\n    };\n    Pager.prototype.addListener = function () {\n        if (this.isDestroyed) {\n            return;\n        }\n        if (!this.hasParent) {\n            this.on(events.keyPressed, this.onKeyPress, this);\n        }\n    };\n    Pager.prototype.removeListener = function () {\n        if (this.isDestroyed) {\n            return;\n        }\n        if (!this.hasParent) {\n            this.off(events.keyPressed, this.onKeyPress);\n        }\n    };\n    Pager.prototype.onKeyPress = function (e) {\n        if (!this.hasParent) {\n            if (this.checkPagerHasFocus()) {\n                this.changePagerFocus(e);\n            }\n            else {\n                e.preventDefault();\n                this.setPagerFocus();\n            }\n        }\n    };\n    /**\n     * @returns {boolean} - Return the true value if pager has focus\n     * @hidden */\n    Pager.prototype.checkPagerHasFocus = function () {\n        return this.getFocusedTabindexElement() ? true : false;\n    };\n    /**\n     * @returns {void}\n     * @hidden */\n    Pager.prototype.setPagerContainerFocus = function () {\n        this.element.focus();\n    };\n    /**\n     * @returns {void}\n     * @hidden */\n    Pager.prototype.setPagerFocus = function () {\n        var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n        if (focusablePagerElements.length > 0) {\n            focusablePagerElements[0].focus();\n        }\n    };\n    Pager.prototype.setPagerFocusForActiveElement = function () {\n        var currentActivePage = this.getActiveElement();\n        if (currentActivePage) {\n            currentActivePage.focus();\n        }\n    };\n    Pager.prototype.setTabIndexForFocusLastElement = function () {\n        var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n        var dropDownPage = this.getDropDownPage();\n        if (this.pageSizes && dropDownPage && !isNullOrUndefined(dropDownPage.offsetParent)) {\n            dropDownPage.tabIndex = 0;\n        }\n        else if (focusablePagerElements.length > 0) {\n            focusablePagerElements[focusablePagerElements.length - 1].tabIndex = 0;\n        }\n    };\n    /**\n     * @param {KeyboardEventArgs} e - Keyboard Event Args\n     * @returns {void}\n     * @hidden */\n    Pager.prototype.changePagerFocus = function (e) {\n        this.keyAction = e.key;\n        if (e.shiftKey && e.keyCode === 9) {\n            this.changeFocusByShiftTab(e);\n        }\n        else if (e.keyCode === 9) {\n            this.changeFocusByTab(e);\n        }\n        else if (e.keyCode === 13 || e.keyCode === 32) {\n            this.navigateToPageByEnterOrSpace(e);\n        }\n        else if (e.keyCode === 37 || e.keyCode === 39 || e.keyCode === 35 || e.keyCode === 36) {\n            this.navigateToPageByKey(e);\n        }\n        this.keyAction = '';\n    };\n    Pager.prototype.getFocusedTabindexElement = function () {\n        var focusedTabIndexElement;\n        var tabindexElements = this.element.querySelectorAll('[tabindex]:not([tabindex=\"-1\"])');\n        for (var i = 0; i < tabindexElements.length; i++) {\n            var element = tabindexElements[parseInt(i.toString(), 10)];\n            if (element && (element.classList.contains('e-focused') || element.classList.contains('e-input-focus'))) {\n                focusedTabIndexElement = element;\n                break;\n            }\n        }\n        return focusedTabIndexElement;\n    };\n    Pager.prototype.changeFocusByTab = function (e) {\n        var currentItemPagerFocus = this.getFocusedTabindexElement();\n        var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n        var dropDownPage = this.getDropDownPage();\n        if (focusablePagerElements.length > 0) {\n            if (this.pageSizes && dropDownPage && currentItemPagerFocus === focusablePagerElements[focusablePagerElements.length - 1]) {\n                dropDownPage.tabIndex = 0;\n            }\n            else {\n                for (var i = 0; i < focusablePagerElements.length; i++) {\n                    if (currentItemPagerFocus === focusablePagerElements[parseInt(i.toString(), 10)]) {\n                        var incrementNumber = i + 1;\n                        if (incrementNumber < focusablePagerElements.length) {\n                            e.preventDefault();\n                            focusablePagerElements[parseInt(incrementNumber.toString(), 10)].focus();\n                        }\n                        break;\n                    }\n                }\n            }\n        }\n    };\n    Pager.prototype.changeFocusByShiftTab = function (e) {\n        var currentItemPagerFocus = this.getFocusedTabindexElement();\n        var focusablePagerElements = this.getFocusablePagerElements(this.element, []);\n        var dropDownPage = this.getDropDownPage();\n        if (this.pageSizes && dropDownPage && dropDownPage.classList.contains('e-input-focus')) {\n            dropDownPage.tabIndex = -1;\n            this.addFocus(focusablePagerElements[focusablePagerElements.length - 1], true);\n        }\n        else if (focusablePagerElements.length > 0) {\n            for (var i = 0; i < focusablePagerElements.length; i++) {\n                if (currentItemPagerFocus === focusablePagerElements[parseInt(i.toString(), 10)]) {\n                    var decrementNumber = i - 1;\n                    if (decrementNumber >= 0) {\n                        e.preventDefault();\n                        focusablePagerElements[parseInt(decrementNumber.toString(), 10)].focus();\n                    }\n                    else if (this.hasParent) {\n                        var rows = this.parent.getRows();\n                        var lastRow = rows[rows.length - 1];\n                        var lastCell = lastRow.lastChild;\n                        e.preventDefault();\n                        lastCell.focus();\n                        this.firstPagerFocus = true;\n                    }\n                    break;\n                }\n            }\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden */\n    Pager.prototype.checkFirstPagerFocus = function () {\n        if (this.firstPagerFocus) {\n            this.firstPagerFocus = false;\n            return true;\n        }\n        return false;\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    Pager.prototype.navigateToPageByEnterOrSpace = function (e) {\n        var currentItemPagerFocus = this.getFocusedElement();\n        if (currentItemPagerFocus) {\n            this.goToPage(parseInt(currentItemPagerFocus.getAttribute('index'), 10));\n            var currentActivePage = this.getActiveElement();\n            var selectedClass = this.getClass(currentItemPagerFocus);\n            var classElement = this.getElementByClass(selectedClass);\n            if ((selectedClass === 'e-first' || selectedClass === 'e-prev' || selectedClass === 'e-next'\n                || selectedClass === 'e-last' || selectedClass === 'e-pp' || selectedClass === 'e-np')\n                && classElement && !classElement.classList.contains('e-disable')) {\n                classElement.focus();\n            }\n            else if (this.checkFocusInAdaptiveMode(currentItemPagerFocus)) {\n                this.changeFocusInAdaptiveMode(currentItemPagerFocus);\n            }\n            else {\n                if (currentActivePage) {\n                    currentActivePage.focus();\n                }\n            }\n        }\n    };\n    Pager.prototype.navigateToPageByKey = function (e) {\n        var actionClass = e.keyCode === 37 ? '.e-prev' : e.keyCode === 39 ? '.e-next'\n            : e.keyCode === 35 ? '.e-last' : e.keyCode === 36 ? '.e-first' : '';\n        var pagingItem = this.element.querySelector(actionClass);\n        var currentItemPagerFocus = this.getFocusedElement();\n        if (!isNullOrUndefined(pagingItem) && pagingItem.hasAttribute('index')\n            && !isNaN(parseInt(pagingItem.getAttribute('index'), 10))) {\n            this.goToPage(parseInt(pagingItem.getAttribute('index'), 10));\n            var currentActivePage = this.getActiveElement();\n            if (this.checkFocusInAdaptiveMode(currentItemPagerFocus)) {\n                this.changeFocusInAdaptiveMode(currentItemPagerFocus);\n            }\n            else {\n                if (currentActivePage) {\n                    currentActivePage.focus();\n                }\n            }\n        }\n    };\n    Pager.prototype.checkFocusInAdaptiveMode = function (element) {\n        var selectedClass = this.getClass(element);\n        return selectedClass === 'e-mfirst' || selectedClass === 'e-mprev' || selectedClass === 'e-mnext'\n            || selectedClass === 'e-mlast' ? true : false;\n    };\n    Pager.prototype.changeFocusInAdaptiveMode = function (element) {\n        var selectedClass = this.getClass(element);\n        var classElement = this.getElementByClass(selectedClass);\n        if (classElement && classElement.classList.contains('e-disable')) {\n            if (selectedClass === 'e-mnext' || selectedClass === 'e-mlast') {\n                var mPrev = this.element.querySelector('.e-mprev');\n                mPrev.focus();\n            }\n            else {\n                this.setPagerFocus();\n            }\n        }\n    };\n    Pager.prototype.removeTabindexLastElements = function () {\n        var tabIndexElements = this.element.querySelectorAll('[tabindex]:not([tabindex=\"-1\"])');\n        if (tabIndexElements.length > 1) {\n            for (var i = 1; i < tabIndexElements.length; i++) {\n                var element = tabIndexElements[parseInt(i.toString(), 10)];\n                if (element) {\n                    element.tabIndex = -1;\n                }\n            }\n        }\n    };\n    Pager.prototype.getActiveElement = function () {\n        return this.element.querySelector('.e-active');\n    };\n    /**\n     * @returns {Element} - Returns DropDown Page\n     * @hidden */\n    Pager.prototype.getDropDownPage = function () {\n        var dropDownPageHolder = this.element.querySelector('.e-pagerdropdown');\n        var dropDownPage;\n        if (dropDownPageHolder) {\n            dropDownPage = dropDownPageHolder.children[0];\n        }\n        return dropDownPage;\n    };\n    Pager.prototype.getFocusedElement = function () {\n        return this.element.querySelector('.e-focused');\n    };\n    Pager.prototype.getClass = function (element) {\n        var currentClass;\n        var classList = ['e-mfirst', 'e-mprev', 'e-first', 'e-prev', 'e-pp',\n            'e-np', 'e-next', 'e-last', 'e-mnext', 'e-mlast'];\n        for (var i = 0; i < classList.length; i++) {\n            if (element && element.classList.contains(classList[parseInt(i.toString(), 10)])) {\n                currentClass = classList[parseInt(i.toString(), 10)];\n                return currentClass;\n            }\n        }\n        return currentClass;\n    };\n    Pager.prototype.getElementByClass = function (className) {\n        return this.element.querySelector('.' + className);\n    };\n    /**\n     * @param {Element} element - Pager element\n     * @param {Element[]} previousElements - Iterating pager element\n     * @returns {Element[]} - Returns focusable pager element\n     * @hidden */\n    Pager.prototype.getFocusablePagerElements = function (element, previousElements) {\n        var target = element;\n        var targetChildrens = target.children;\n        var pagerElements = previousElements;\n        for (var i = 0; i < targetChildrens.length; i++) {\n            var element_1 = targetChildrens[parseInt(i.toString(), 10)];\n            if (element_1.children.length > 0 && !element_1.classList.contains('e-pagesizes')) {\n                pagerElements = this.getFocusablePagerElements(element_1, pagerElements);\n            }\n            else {\n                var tabindexElement = targetChildrens[parseInt(i.toString(), 10)];\n                if (tabindexElement.hasAttribute('tabindex') && !element_1.classList.contains('e-disable')\n                    && element_1.style.display !== 'none'\n                    && !isNullOrUndefined(element_1.offsetParent)) {\n                    pagerElements.push(tabindexElement);\n                }\n            }\n        }\n        return pagerElements;\n    };\n    Pager.prototype.addFocus = function (element, addFocusClass) {\n        if (addFocusClass) {\n            addClass([element], ['e-focused', 'e-focus']);\n        }\n        element.tabIndex = 0;\n    };\n    Pager.prototype.removeFocus = function (element, removeFocusClass) {\n        if (removeFocusClass) {\n            removeClass([element], ['e-focused', 'e-focus']);\n        }\n        element.tabIndex = -1;\n    };\n    /**\n     * Gets the localized label by locale keyword.\n     *\n     * @param  {string} key - specifies the key\n     * @returns {string} returns the localized label\n     */\n    Pager.prototype.getLocalizedLabel = function (key) {\n        return this.localeObj.getConstant(key);\n    };\n    /**\n     * Navigate to target page by given number.\n     *\n     * @param  {number} pageNo - Defines page number.\n     * @returns {void}\n     */\n    Pager.prototype.goToPage = function (pageNo) {\n        if (this.checkGoToPage(pageNo)) {\n            this.currentPage = pageNo;\n            this.dataBind();\n        }\n    };\n    /**\n     * @param {number} pageSize - specifies the pagesize\n     * @returns {void}\n     * @hidden\n     */\n    Pager.prototype.setPageSize = function (pageSize) {\n        this.pageSize = pageSize;\n        this.dataBind();\n    };\n    Pager.prototype.checkpagesizes = function () {\n        if (this.pageSizes === true || this.pageSizes.length) {\n            return true;\n        }\n        return false;\n    };\n    Pager.prototype.checkGoToPage = function (newPageNo, oldPageNo) {\n        if (newPageNo !== this.currentPage) {\n            this.previousPageNo = this.currentPage;\n        }\n        if (!isNullOrUndefined(oldPageNo)) {\n            this.previousPageNo = oldPageNo;\n        }\n        if (this.previousPageNo !== newPageNo && (newPageNo >= 1 && newPageNo <= this.totalPages)) {\n            return true;\n        }\n        return false;\n    };\n    Pager.prototype.currentPageChanged = function (newProp, oldProp) {\n        if (this.enableQueryString) {\n            this.updateQueryString(this.currentPage);\n        }\n        if (newProp.currentPage !== oldProp.currentPage || newProp.pageSize !== oldProp.pageSize) {\n            var args = {\n                currentPage: this.currentPage,\n                newProp: newProp, oldProp: oldProp, cancel: false\n            };\n            this.trigger('click', args);\n            if (!args.cancel) {\n                this.isCancel = false;\n                this.refresh();\n            }\n            else {\n                this.isCancel = true;\n                if (oldProp && oldProp.pageSize) {\n                    this.setProperties({ pageSize: oldProp.pageSize }, true);\n                    if (this.pagerdropdownModule) {\n                        this.pagerdropdownModule.setDropDownValue('value', oldProp.pageSize);\n                        this.pagerdropdownModule['dropDownListObject'].text = oldProp.pageSize + '';\n                    }\n                }\n            }\n        }\n    };\n    Pager.prototype.pagerTemplate = function () {\n        if (this.isReactTemplate() && this.hasParent) {\n            return;\n        }\n        var result;\n        this.element.classList.add('e-pagertemplate');\n        this.compile(this.template);\n        var data = {\n            currentPage: this.currentPage, pageSize: this.pageSize, pageCount: this.pageCount,\n            totalRecordsCount: this.totalRecordsCount, totalPages: this.totalPages\n        };\n        var tempId = this.element.parentElement.id + '_template';\n        if (this.isReactTemplate() && !this.isVue) {\n            this.getPagerTemplate()(data, this, 'template', tempId, null, null, this.element);\n            this.renderReactTemplates();\n        }\n        else {\n            result = this.isVue ? this.getPagerTemplate()(data, this, 'template') : this.getPagerTemplate()(data);\n            appendChildren(this.element, result);\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Pager.prototype.updateTotalPages = function () {\n        this.totalPages = this.isAllPage ? 1 : (this.totalRecordsCount % this.pageSize === 0) ? (this.totalRecordsCount / this.pageSize) :\n            (parseInt((this.totalRecordsCount / this.pageSize).toString(), 10) + 1);\n    };\n    /**\n     * @returns {Function} returns the function\n     * @hidden\n     */\n    Pager.prototype.getPagerTemplate = function () {\n        return this.templateFn;\n    };\n    /**\n     * @param {string | Function} template - specifies the template\n     * @returns {Function} returns the function\n     * @hidden\n     */\n    Pager.prototype.compile = function (template) {\n        if (template) {\n            try {\n                if (typeof template === 'function') {\n                    this.templateFn = templateCompiler(template);\n                }\n                else {\n                    if (document.querySelectorAll(template).length) {\n                        this.templateFn = templateCompiler(document.querySelector(template).innerHTML.trim());\n                    }\n                }\n            }\n            catch (e) {\n                this.templateFn = templateCompiler(template);\n            }\n        }\n        return undefined;\n    };\n    /**\n     * Refreshes page count, pager information and external message.\n     *\n     * @returns {void}\n     */\n    Pager.prototype.refresh = function () {\n        if (this.template) {\n            if (this.isReactTemplate()) {\n                this.updateTotalPages();\n                this.notify(this.pageRefresh, {});\n            }\n            else {\n                this.element.innerHTML = '';\n                this.updateTotalPages();\n                this.pagerTemplate();\n            }\n        }\n        else {\n            this.updateRTL();\n            var focusedTabIndexElement = this.getFocusedTabindexElement();\n            this.containerModule.refresh();\n            this.removeTabindexLastElements();\n            if (focusedTabIndexElement && focusedTabIndexElement.classList.contains('e-disable')) {\n                if (this.checkFocusInAdaptiveMode(focusedTabIndexElement)) {\n                    this.changeFocusInAdaptiveMode(focusedTabIndexElement);\n                }\n                else {\n                    this.setPagerFocusForActiveElement();\n                }\n            }\n            if (this.enablePagerMessage) {\n                this.pagerMessageModule.refresh();\n            }\n            if (this.pagerdropdownModule) {\n                this.pagerdropdownModule.refresh();\n            }\n            if (this.enableExternalMessage && this.externalMessageModule) {\n                this.externalMessageModule.refresh();\n            }\n            this.setTabIndexForFocusLastElement();\n            this.resizePager();\n        }\n    };\n    Pager.prototype.updateRTL = function () {\n        if (this.enableRtl) {\n            this.element.classList.add('e-rtl');\n        }\n        else {\n            this.element.classList.remove('e-rtl');\n        }\n    };\n    Pager.prototype.initLocalization = function () {\n        this.localeObj = new L10n(this.getModuleName(), this.defaultConstants, this.locale);\n    };\n    Pager.prototype.updateQueryString = function (value) {\n        var updatedUrl = this.getUpdatedURL(window.location.href, 'page', value.toString());\n        window.history.pushState({ path: updatedUrl }, '', updatedUrl);\n    };\n    Pager.prototype.getUpdatedURL = function (uri, key, value) {\n        // eslint-disable-next-line security/detect-non-literal-regexp\n        var regx = new RegExp('([?|&])' + key + '=.*?(&|#|$)', 'i');\n        if (uri.match(regx)) {\n            return uri.replace(regx, '$1' + key + '=' + value + '$2');\n        }\n        else {\n            var hash = '';\n            if (uri.indexOf('#') !== -1) {\n                hash = uri.replace(/.*#/, '#');\n                uri = uri.replace(/#.*/, '');\n            }\n            return uri + (uri.indexOf('?') !== -1 ? '&' : '?') + key + '=' + value + hash;\n        }\n    };\n    Pager.prototype.renderFirstPrevDivForDevice = function () {\n        this.element.appendChild(createElement('div', {\n            className: 'e-mfirst e-icons e-icon-first',\n            attrs: { title: this.getLocalizedLabel('firstPageTooltip'), tabindex: '-1' }\n        }));\n        this.element.appendChild(createElement('div', {\n            className: 'e-mprev e-icons e-icon-prev',\n            attrs: { title: this.getLocalizedLabel('previousPageTooltip'), tabindex: '-1' }\n        }));\n    };\n    Pager.prototype.renderNextLastDivForDevice = function () {\n        this.element.appendChild(createElement('div', {\n            className: 'e-mnext e-icons e-icon-next',\n            attrs: { title: this.getLocalizedLabel('nextPageTooltip'), tabindex: '-1' }\n        }));\n        this.element.appendChild(createElement('div', {\n            className: 'e-mlast e-icons e-icon-last',\n            attrs: { title: this.getLocalizedLabel('lastPageTooltip'), tabindex: '-1' }\n        }));\n    };\n    Pager.prototype.addAriaLabel = function () {\n        var classList = ['.e-mfirst', '.e-mprev', '.e-mnext', '.e-mlast'];\n        if (!Browser.isDevice) {\n            for (var i = 0; i < classList.length; i++) {\n                var element = this.element.querySelector(classList[parseInt(i.toString(), 10)]);\n                element.setAttribute('aria-label', element.getAttribute('title'));\n            }\n        }\n    };\n    Pager.prototype.isReactTemplate = function () {\n        return (this.isReact || this.isVue) && this.template && typeof (this.template) !== 'string';\n    };\n    /**\n     * Loop through all the inner elements of pager to calculate the required width for pager child elements.\n     *\n     * @returns {number} returns the actual width occupied by pager elements.\n     */\n    Pager.prototype.calculateActualWidth = function () {\n        var pagerElements = this.element.querySelectorAll(\n        /* tslint:disable-next-line:max-line-length */\n        '.e-mfirst, .e-mprev, .e-icon-first, .e-icon-prev, .e-pp:not(.e-disable), .e-numericitem:not(.e-hide), .e-numericitem.e-active.e-hide, .e-np:not(.e-disable), .e-icon-next, .e-icon-last, .e-parentmsgbar, .e-mnext, .e-mlast, .e-pagerdropdown, .e-pagerconstant');\n        var actualWidth = 0;\n        for (var i = 0; i < pagerElements.length; i++) {\n            if (getComputedStyle(pagerElements[parseInt(i.toString(), 10)]).display !== 'none') {\n                actualWidth += pagerElements[parseInt(i.toString(), 10)].offsetWidth\n                    + parseFloat(getComputedStyle(pagerElements[parseInt(i.toString(), 10)]).marginLeft)\n                    + parseFloat(getComputedStyle(pagerElements[parseInt(i.toString(), 10)]).marginRight);\n            }\n        }\n        var pagerContainer = this.element.querySelector('.e-pagercontainer');\n        actualWidth += parseFloat(getComputedStyle(pagerContainer).marginLeft)\n            + parseFloat(getComputedStyle(pagerContainer).marginRight);\n        return actualWidth;\n    };\n    /**\n     * Resize pager component by hiding pager component's numeric items based on total width available for pager.\n     *\n     * @returns {void}\n     */\n    Pager.prototype.resizePager = function () {\n        var _this = this;\n        var isStyleApplied = this.element.classList.contains('e-pager') ? getComputedStyle(this.element).getPropertyValue('border-style').includes('solid') : null;\n        if (!(this.template) && isStyleApplied) {\n            var pagerContainer = this.element.querySelector('.e-pagercontainer');\n            var actualWidth = this.calculateActualWidth();\n            var pagerWidth = this.element.clientWidth\n                - parseFloat(getComputedStyle(this.element).paddingLeft)\n                - parseFloat(getComputedStyle(this.element).paddingRight)\n                - parseFloat(getComputedStyle(this.element).marginLeft)\n                - parseFloat(getComputedStyle(this.element).marginRight);\n            var numItems = pagerContainer.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n            var hiddenNumItems = pagerContainer.querySelectorAll('.e-numericitem.e-hide:not([style*=\"display: none\"])');\n            var hideFrom = numItems.length;\n            var showFrom = 1;\n            var bufferWidth = (!isNullOrUndefined(parentsUntil(this.element, 'e-bigger'))) ? 10 : 5;\n            var NP = pagerContainer.querySelector('.e-np');\n            var PP = pagerContainer.querySelector('.e-pp');\n            var detailItems = this.element.querySelectorAll('.e-parentmsgbar:not(.e-hide):not([style*=\"display: none\"]), .e-pagesizes:not(.e-hide):not([style*=\"display: none\"])');\n            var totDetailWidth_1 = 0;\n            if (detailItems.length) {\n                detailItems.forEach(function (item) {\n                    totDetailWidth_1 += item.offsetWidth;\n                });\n                this.averageDetailWidth = totDetailWidth_1 / detailItems.length;\n            }\n            var totalWidth = 0;\n            /**\n             * Loop to calculate average width of numeric item.\n             */\n            for (var i = 0; i < numItems.length; i++) {\n                totalWidth += numItems[parseInt(i.toString(), 10)].offsetWidth\n                    + parseFloat(getComputedStyle(numItems[parseInt(i.toString(), 10)]).marginLeft)\n                    + parseFloat(getComputedStyle(numItems[parseInt(i.toString(), 10)]).marginRight);\n            }\n            var numericItemWidth = totalWidth / numItems.length;\n            /**\n             * Condition to hide numeric items when calculated actual width exceeds available pager space.\n             */\n            if (pagerWidth > 0 && (actualWidth >= (pagerWidth - (numericItemWidth ? numericItemWidth : 0)))) {\n                this.isPagerResized = true;\n                if (this.currentPage !== this.totalPages) {\n                    classList(NP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n                }\n                actualWidth = this.calculateActualWidth();\n                var diff = Math.abs((actualWidth) - pagerWidth);\n                // To calculate number of numeric items need to be hidden.\n                var numToHide = Math.ceil(diff / (numericItemWidth));\n                numToHide = (numToHide === 0) ? 1 : (numToHide > numItems.length) ? (numItems.length - 1) : numToHide;\n                for (var i = 1; i <= numToHide; i++) {\n                    var hideIndex = hideFrom - parseInt(i.toString(), 10);\n                    numItems = pagerContainer.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n                    if (this.currentPage !== 1 && ((parseInt(numItems[Math.abs(hideIndex)].getAttribute('index'), 10) === this.currentPage)\n                        || parseInt(numItems[numItems.length - 1].getAttribute('index'), 10) === this.currentPage)) {\n                        hideIndex = 0;\n                        classList(PP, ['e-numericitem', 'e-pager-default'], ['e-nextprevitemdisabled', 'e-disable']);\n                    }\n                    if (numItems[Math.abs(hideIndex)] && !(numItems[Math.abs(hideIndex)].classList.contains('e-currentitem'))) {\n                        numItems[Math.abs(hideIndex)].classList.add('e-hide');\n                    }\n                }\n                numItems = pagerContainer.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n                // To hide Pager message elements when no more numeric items available to hide.\n                if (numItems.length <= 1 && detailItems.length && window.innerWidth >= 768) {\n                    var pagerDetailItemsWidth = this.calculateActualWidth();\n                    if ((pagerDetailItemsWidth) > (pagerWidth - bufferWidth)) {\n                        var detailtoHide = Math.floor((pagerWidth - (pagerDetailItemsWidth - totDetailWidth_1))\n                            / this.averageDetailWidth);\n                        detailtoHide = detailItems.length - detailtoHide;\n                        for (var i = 0; i < (detailtoHide > detailItems.length ? detailItems.length : detailtoHide); i++) {\n                            detailItems[parseInt(i.toString(), 10)].classList.add('e-hide');\n                        }\n                    }\n                }\n            }\n            /**\n             * Condition to show numeric items when space availble in pager at dom.\n             */\n            else if (actualWidth < (pagerWidth) && hiddenNumItems.length) {\n                var diff = Math.abs(pagerWidth - (actualWidth));\n                var hiddenDetailItems = this.element.querySelectorAll('.e-parentmsgbar.e-hide, .e-pagesizes.e-hide');\n                // To show Pager message elements.\n                if (hiddenDetailItems.length && (diff > (this.averageDetailWidth + (this.averageDetailWidth / 4)))) {\n                    hiddenDetailItems[(hiddenDetailItems.length - 1)].classList.remove('e-hide');\n                }\n                if ((diff > (numericItemWidth * 2) && !hiddenDetailItems.length && window.innerWidth >= 768)) {\n                    // To calculate number of numeric items need to be shown.\n                    var numToShow = Math.floor((diff) / (numericItemWidth + bufferWidth));\n                    numToShow = (numToShow > hiddenNumItems.length) ? hiddenNumItems.length : (numToShow - 1);\n                    //Seggregating hidden num items as less index and greater index values than current page value.\n                    var lesserIndexItems = Array.from(hiddenNumItems).filter(function (item) { return parseInt(item.getAttribute('index'), 10) < _this.currentPage; }).sort(function (a, b) { return parseInt(b.getAttribute('index'), 10) - parseInt(a.getAttribute('index'), 10); });\n                    var greaterIndexItems = Array.from(hiddenNumItems).filter(function (item) { return parseInt(item.getAttribute('index'), 10) > _this.currentPage; });\n                    var showItems = (lesserIndexItems.length && lesserIndexItems)\n                        || (greaterIndexItems.length && greaterIndexItems);\n                    for (var i = 1; i <= numToShow; i++) {\n                        var showItem = showItems && showItems[Math.abs(showFrom - i)];\n                        if (showItem) {\n                            showItem.classList.remove('e-hide');\n                            if (showItem === showItems[showItems.length - 1]) {\n                                showItems = null;\n                            }\n                        }\n                    }\n                }\n            }\n            numItems = pagerContainer.querySelectorAll('.e-numericitem:not(.e-hide):not([style*=\"display: none\"]):not(.e-np):not(.e-pp)');\n            if (numItems.length) {\n                if (parseInt(numItems[numItems.length - 1].getAttribute('index'), 10) === this.totalPages) {\n                    classList(NP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n                }\n                if (parseInt(numItems[0].getAttribute('index'), 10) === 1) {\n                    classList(PP, ['e-nextprevitemdisabled', 'e-disable'], ['e-numericitem', 'e-pager-default']);\n                }\n                var isLastSet = Array.from(numItems).some(function (item) { return parseInt(item.getAttribute('index'), 10) === _this.totalPages; });\n                var ppIndex = (parseInt(numItems[0].getAttribute('index'), 10) - (isLastSet ? this.avgNumItems : numItems.length));\n                PP.setAttribute('index', (ppIndex < 1) ? '1' : ppIndex.toString());\n                NP.setAttribute('index', (parseInt(numItems[numItems.length - 1].getAttribute('index'), 10) + 1).toString());\n                this.avgNumItems = isLastSet ? this.avgNumItems : numItems.length;\n            }\n            /**\n             * Condition to add adaptive class name and set pagermessage content with \"/\" when media query css has been applied.\n             */\n            if (((this.element.offsetWidth < 769) && window.getComputedStyle(this.element.querySelector('.e-mfirst')).getPropertyValue('display') !== 'none') && this.pageSizes) {\n                this.element.querySelector('.e-pagesizes').classList.remove('e-hide');\n                this.element.querySelector('.e-parentmsgbar').classList.remove('e-hide');\n                this.element.classList.add('e-adaptive');\n                this.element.querySelector('.e-pagenomsg').innerHTML = this.element.offsetWidth < 481 ? (this.currentPage + ' / ' + this.totalPages) : this.pagerMessageModule.format(this.getLocalizedLabel('currentPageInfo'), [this.totalRecordsCount === 0 ? 0 :\n                        this.currentPage, this.totalPages || 0, this.totalRecordsCount || 0]) + ' ';\n            }\n            else {\n                this.element.classList.remove('e-adaptive');\n                this.element.querySelector('.e-pagenomsg').innerHTML = this.pagerMessageModule.format(this.getLocalizedLabel('currentPageInfo'), [this.totalRecordsCount === 0 ? 0 :\n                        this.currentPage, this.totalPages || 0, this.totalRecordsCount || 0]) + ' ';\n            }\n        }\n    };\n    __decorate([\n        Property(false)\n    ], Pager.prototype, \"enableQueryString\", void 0);\n    __decorate([\n        Property(false)\n    ], Pager.prototype, \"enableExternalMessage\", void 0);\n    __decorate([\n        Property(true)\n    ], Pager.prototype, \"enablePagerMessage\", void 0);\n    __decorate([\n        Property(12)\n    ], Pager.prototype, \"pageSize\", void 0);\n    __decorate([\n        Property(10)\n    ], Pager.prototype, \"pageCount\", void 0);\n    __decorate([\n        Property(1)\n    ], Pager.prototype, \"currentPage\", void 0);\n    __decorate([\n        Property()\n    ], Pager.prototype, \"totalRecordsCount\", void 0);\n    __decorate([\n        Property()\n    ], Pager.prototype, \"externalMessage\", void 0);\n    __decorate([\n        Property(false)\n    ], Pager.prototype, \"pageSizes\", void 0);\n    __decorate([\n        Property()\n    ], Pager.prototype, \"template\", void 0);\n    __decorate([\n        Property('')\n    ], Pager.prototype, \"customText\", void 0);\n    __decorate([\n        Event()\n    ], Pager.prototype, \"click\", void 0);\n    __decorate([\n        Property('')\n    ], Pager.prototype, \"cssClass\", void 0);\n    __decorate([\n        Event()\n    ], Pager.prototype, \"dropDownChanged\", void 0);\n    __decorate([\n        Event()\n    ], Pager.prototype, \"created\", void 0);\n    Pager = __decorate([\n        NotifyPropertyChanges\n    ], Pager);\n    return Pager;\n}(Component));\nexport { Pager };\n","import { createElement, remove } from '@syncfusion/ej2-base';\nimport { DropDownList } from '@syncfusion/ej2-dropdowns';\n/**\n * `PagerDropDown` module handles selected pageSize from DropDownList.\n */\nvar PagerDropDown = /** @class */ (function () {\n    /**\n     * Constructor for pager module\n     *\n     * @param {Pager} pagerModule - specifies the pagermodule\n     * @hidden\n     */\n    function PagerDropDown(pagerModule) {\n        this.pagerModule = pagerModule;\n    }\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     * @hidden\n     */\n    PagerDropDown.prototype.getModuleName = function () {\n        return 'pagerdropdown';\n    };\n    /**\n     * The function is used to render pager dropdown\n     *\n     * @returns {void}\n     * @hidden\n     */\n    PagerDropDown.prototype.render = function () {\n        var pagerObj = this.pagerModule;\n        this.pagerDropDownDiv = createElement('div', { className: 'e-pagesizes' });\n        var dropDownDiv = createElement('div', { className: 'e-pagerdropdown' });\n        var defaultTextDiv = createElement('div', { className: 'e-pagerconstant' });\n        var input = createElement('input', { attrs: { type: 'text', tabindex: '-1' } });\n        this.pagerCons = createElement('span', {\n            className: 'e-constant', innerHTML: this.pagerModule.getLocalizedLabel('pagerDropDown')\n        });\n        dropDownDiv.appendChild(input);\n        defaultTextDiv.appendChild(this.pagerCons);\n        this.pagerDropDownDiv.appendChild(dropDownDiv);\n        this.pagerDropDownDiv.appendChild(defaultTextDiv);\n        this.pagerModule.element.appendChild(this.pagerDropDownDiv);\n        var pageSizesModule = this.pagerModule.pageSizes;\n        var pageSizesArray = (pageSizesModule.length ? this.convertValue(pageSizesModule) :\n            [this.pagerModule.getLocalizedLabel('All'), '5', '10', '12', '20']);\n        var defaultValue = this.pagerModule.pageSize;\n        this.dropDownListObject = new DropDownList({\n            dataSource: pageSizesArray,\n            value: defaultValue.toString(),\n            change: this.onChange.bind(this),\n            placeholder: this.pagerModule.getLocalizedLabel('pagerDropDown'),\n            cssClass: this.pagerModule.cssClass ? 'e-alldrop' + ' ' + this.pagerModule.cssClass : 'e-alldrop'\n        });\n        this.dropDownListObject.appendTo(input);\n        if (pageSizesModule.length) {\n            this.dropDownListObject.element.value = this.pagerModule.pageSize.toString();\n        }\n        pagerObj.pageSize = defaultValue;\n        pagerObj.dataBind();\n        pagerObj.trigger('dropDownChanged', { pageSize: defaultValue });\n        this.addEventListener();\n    };\n    /**\n     * For internal use only - Get the pagesize.\n     *\n     * @param {ChangeEventArgs} e - specifies the changeeventargs\n     * @returns {void}\n     * @private\n     * @hidden\n     */\n    PagerDropDown.prototype.onChange = function (e) {\n        if (this.dropDownListObject.value === this.pagerModule.getLocalizedLabel('All')) {\n            this.pagerModule.pageSize = this.pagerModule.totalRecordsCount;\n            this.pagerModule.isAllPage = true;\n            this.refresh();\n            e.value = this.pagerModule.pageSize;\n            if (document.getElementsByClassName('e-popup-open e-alldrop').length) {\n                document.getElementsByClassName('e-popup-open e-alldrop')[0].style.display = 'none';\n            }\n        }\n        else {\n            this.pagerModule.pageSize = parseInt(this.dropDownListObject.value, 10);\n            this.pagerModule.isAllPage = false;\n            if (this.pagerCons.innerHTML !== this.pagerModule.getLocalizedLabel('pagerDropDown')) {\n                this.refresh();\n            }\n        }\n        this.pagerModule.dataBind();\n        if (!this.pagerModule.isCancel) {\n            this.pagerModule.trigger('dropDownChanged', {\n                pageSize: this.pagerModule.isAllPage ||\n                    (this.pagerModule.isAllPage === undefined && this.dropDownListObject.value === this.pagerModule.getLocalizedLabel('All')) ?\n                    this.pagerModule.totalRecordsCount : parseInt(this.dropDownListObject.value, 10)\n            });\n        }\n    };\n    PagerDropDown.prototype.refresh = function () {\n        if (this.pagerCons) {\n            if (this.isPageSizeAll(this.pagerModule.pageSize)) {\n                this.pagerCons.innerHTML = this.pagerModule.getLocalizedLabel('pagerAllDropDown');\n                this.pagerCons.parentElement.classList.add('e-page-all');\n            }\n            else {\n                this.pagerCons.innerHTML = this.pagerModule.getLocalizedLabel('pagerDropDown');\n                this.pagerCons.parentElement.classList.remove('e-page-all');\n            }\n            this.pagerDropDownDiv.classList.remove('e-hide');\n        }\n    };\n    PagerDropDown.prototype.beforeValueChange = function (prop) {\n        if (typeof prop.newProp.value === 'number') {\n            var val = prop.newProp.value.toString();\n            prop.newProp.value = val;\n        }\n    };\n    PagerDropDown.prototype.convertValue = function (pageSizeValue) {\n        var item = pageSizeValue;\n        for (var i = 0; i < item.length; i++) {\n            item[parseInt(i.toString(), 10)] = parseInt(item[parseInt(i.toString(), 10)], 10) ?\n                item[parseInt(i.toString(), 10)].toString() : (this.pagerModule.getLocalizedLabel(item[parseInt(i.toString(), 10)]) !== '')\n                ? this.pagerModule.getLocalizedLabel(item[parseInt(i.toString(), 10)]) : item[parseInt(i.toString(), 10)];\n        }\n        return item;\n    };\n    PagerDropDown.prototype.isPageSizeAll = function (value) {\n        var pageSizeNum = typeof (value) === 'string' && value !== this.pagerModule.getLocalizedLabel('All') ?\n            parseInt(value, 10) : value;\n        if (pageSizeNum === this.pagerModule.totalRecordsCount || value === this.pagerModule.getLocalizedLabel('All')) {\n            return true;\n        }\n        else {\n            return false;\n        }\n    };\n    PagerDropDown.prototype.setDropDownValue = function (prop, value) {\n        if (this.dropDownListObject) {\n            var isbeforeAll = this.pagerModule.isAllPage;\n            this.pagerModule.isAllPage = this.isPageSizeAll(value);\n            this.pagerModule.checkAll = (isbeforeAll && this.pagerModule.isAllPage) ? true : false;\n            this.dropDownListObject[\"\" + prop] = this.pagerModule.isAllPage ? this.pagerModule.getLocalizedLabel('All') : value;\n        }\n    };\n    PagerDropDown.prototype.addEventListener = function () {\n        this.dropDownListObject.on('beforeValueChange', this.beforeValueChange, this);\n    };\n    PagerDropDown.prototype.removeEventListener = function () {\n        this.dropDownListObject.off('beforeValueChange', this.beforeValueChange);\n    };\n    /**\n     * To destroy the Pagerdropdown\n     *\n     * @param {string} args - specifies the arguments\n     * @param {string} args.requestType - specfies the request type\n     * @returns {void}\n     * @hidden\n     */\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    PagerDropDown.prototype.destroy = function (args) {\n        if (this.dropDownListObject && !this.dropDownListObject.isDestroyed) {\n            this.removeEventListener();\n            this.dropDownListObject.destroy();\n            remove(this.pagerDropDownDiv);\n        }\n    };\n    return PagerDropDown;\n}());\nexport { PagerDropDown };\n","import { createElement, remove, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `ExternalMessage` module is used to display user provided message.\n */\nvar ExternalMessage = /** @class */ (function () {\n    /**\n     * Constructor for externalMessage module\n     *\n     * @param {Pager} pagerModule - specifies the pagermodule\n     * @hidden\n     */\n    function ExternalMessage(pagerModule) {\n        this.pagerModule = pagerModule;\n    }\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    ExternalMessage.prototype.getModuleName = function () {\n        return 'externalMessage';\n    };\n    /**\n     * The function is used to render pager externalMessage\n     *\n     * @returns {void}\n     * @hidden\n     */\n    ExternalMessage.prototype.render = function () {\n        this.element = createElement('div', { className: 'e-pagerexternalmsg', attrs: { 'aria-label': this.pagerModule.getLocalizedLabel('ExternalMsg') } });\n        this.pagerModule.element.appendChild(this.element);\n        this.refresh();\n    };\n    /**\n     * Refreshes the external message of Pager.\n     *\n     * @returns {void}\n     */\n    ExternalMessage.prototype.refresh = function () {\n        if (this.pagerModule.externalMessage && this.pagerModule.externalMessage.toString().length) {\n            this.showMessage();\n            this.element.innerHTML = this.pagerModule.externalMessage;\n        }\n        else {\n            this.hideMessage();\n        }\n    };\n    /**\n     * Hides the external message of Pager.\n     *\n     * @returns {void}\n     */\n    ExternalMessage.prototype.hideMessage = function () {\n        if (!isNullOrUndefined(this.element)) {\n            this.element.style.display = 'none';\n        }\n    };\n    /**\n     * Shows the external message of the Pager.\n     *\n     * @returns {void}s\n     */\n    ExternalMessage.prototype.showMessage = function () {\n        this.element.style.display = '';\n    };\n    /**\n     * To destroy the PagerMessage\n     *\n     * @function destroy\n     * @returns {void}\n     * @hidden\n     */\n    ExternalMessage.prototype.destroy = function () {\n        if (this.element && this.element.parentElement) {\n            remove(this.element);\n        }\n    };\n    return ExternalMessage;\n}());\nexport { ExternalMessage };\n","import { extend } from '@syncfusion/ej2-base';\nimport { remove, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { Pager } from '../../pager/pager';\nimport { PagerDropDown } from '../../pager/pager-dropdown';\nimport { ExternalMessage } from '../../pager/external-message';\nimport { extend as gridExtend, getActualProperties, isActionPrevent, addRemoveEventListener, appendChildren } from '../base/util';\nimport * as events from '../base/constant';\nimport * as literals from '../base/string-literals';\n/**\n * The `Page` module is used to render pager and handle paging action.\n */\nvar Page = /** @class */ (function () {\n    /**\n     * Constructor for the Grid paging module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {PageSettingsModel} pageSettings - specifies the PageSettingsModel\n     * @hidden\n     */\n    function Page(parent, pageSettings) {\n        this.isInitialRender = true;\n        /** @hidden */\n        this.isCancel = false;\n        Pager.Inject(ExternalMessage, PagerDropDown);\n        this.parent = parent;\n        this.pageSettings = pageSettings;\n        this.addEventListener();\n    }\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    Page.prototype.getModuleName = function () {\n        return 'pager';\n    };\n    /**\n     * The function used to render pager from grid pageSettings\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Page.prototype.render = function () {\n        var gObj = this.parent;\n        this.pagerDestroy();\n        if (!isNullOrUndefined(this.parent.pagerTemplate)) {\n            this.pageSettings.template = this.parent.pagerTemplate;\n            this.parent.pageTemplateChange = true;\n        }\n        this.element = this.parent.createElement('div', { className: 'e-gridpager' });\n        var pagerObj = gridExtend({}, extend({}, getActualProperties(this.pageSettings)), {\n            click: this.clickHandler.bind(this),\n            dropDownChanged: this.onSelect.bind(this),\n            enableRtl: gObj.enableRtl, locale: gObj.locale,\n            created: this.addAriaAttr.bind(this)\n        }, ['parentObj', 'propName']);\n        pagerObj.cssClass = this.parent.cssClass ? this.parent.cssClass : '';\n        this.pagerObj = new Pager(pagerObj, undefined, this.parent);\n        this.pagerObj.hasParent = true;\n        this.pagerObj.on(events.pagerRefresh, this.renderReactPagerTemplate, this);\n        this.pagerObj.allowServerDataBinding = false;\n    };\n    Page.prototype.onSelect = function (e) {\n        this.pageSettings.pageSize = e.pageSize;\n        if (!this.isInitialLoad) {\n            this.pageSettings.currentPage = 1;\n        }\n    };\n    Page.prototype.addAriaAttr = function () {\n        if (!(this.pageSettings.template)) {\n            var numericContainerNew = this.parent.createElement('div', { className: 'e-numericcontainer' });\n            var pagerContainer = this.element.querySelector('.e-pagercontainer');\n            var frag = document.createDocumentFragment();\n            var numericContainer = this.element.querySelector('.e-numericcontainer');\n            var links = numericContainer.querySelectorAll('a');\n            for (var i = 0; i < links.length; i++) {\n                if (this.parent.getContentTable()) {\n                    links[parseInt(i.toString(), 10)].setAttribute('aria-owns', this.parent.getContentTable().id);\n                }\n                else {\n                    links[parseInt(i.toString(), 10)].setAttribute('aria-owns', this.parent.element.getAttribute('id') + '_content_table');\n                }\n                var numericContainerDiv = this.parent.createElement('div');\n                numericContainerDiv.appendChild(links[parseInt(i.toString(), 10)]);\n                frag.appendChild(numericContainerDiv);\n            }\n            numericContainerNew.appendChild(frag);\n            pagerContainer.replaceChild(numericContainerNew, numericContainer);\n            var classList = ['.e-mfirst', '.e-mprev', '.e-first', '.e-prev', '.e-next', '.e-last', '.e-mnext', '.e-mlast'];\n            for (var j = 0; j < classList.length; j++) {\n                var element = this.element.querySelector(classList[parseInt(j.toString(), 10)]);\n                if (this.parent.getContentTable()) {\n                    element.setAttribute('aria-owns', this.parent.getContentTable().id);\n                }\n            }\n        }\n    };\n    Page.prototype.dataReady = function (e) {\n        this.updateModel(e);\n    };\n    /**\n     * Refreshes the page count, pager information, and external message.\n     *\n     * @returns {void}\n     */\n    Page.prototype.refresh = function () {\n        this.pagerObj.refresh();\n    };\n    /**\n     * Navigates to the target page according to the given number.\n     *\n     * @param  {number} pageNo - Defines the page number to navigate.\n     * @returns {void}\n     */\n    Page.prototype.goToPage = function (pageNo) {\n        this.pagerObj.goToPage(pageNo);\n    };\n    /**\n     * @param {number} pageSize - specifies the page size\n     * @returns {void}\n     * @hidden\n     */\n    Page.prototype.setPageSize = function (pageSize) {\n        this.pagerObj.setPageSize(pageSize);\n    };\n    /**\n     * The function used to update pageSettings model\n     *\n     * @param {NotifyArgs} e - specfies the NotifyArgs\n     * @returns {void}\n     * @hidden\n     */\n    Page.prototype.updateModel = function (e) {\n        this.parent.pageSettings.totalRecordsCount = e.count;\n        if (this.pagerObj.isAllPage) {\n            this.parent.pageSettings.pageSize = this.parent.pageSettings.totalRecordsCount;\n        }\n        if ((e.action === 'add' && e.requestType === 'save') || (e.requestType === 'batchsave')) {\n            if (this.pagerObj.isAllPage && (e.count === this.pageSettings.pageSize)) {\n                this.pagerObj.setProperties({ pageSize: e.count }, true);\n            }\n        }\n        this.parent.dataBind();\n    };\n    /**\n     * The function used to trigger onActionComplete\n     *\n     * @param {NotifyArgs} e - specifies the NotifyArgs\n     * @returns {void}\n     * @hidden\n     */\n    Page.prototype.onActionComplete = function (e) {\n        this.parent.trigger(events.actionComplete, extend(e, {\n            currentPage: this.parent.pageSettings.currentPage, requestType: 'paging',\n            type: events.actionComplete\n        }));\n    };\n    /**\n     * @param {NotifyArgs} e - specifies the NotifyArgs\n     * @returns {void}\n     * @hidden\n     */\n    Page.prototype.onPropertyChanged = function (e) {\n        if (e.module !== this.getModuleName()) {\n            return;\n        }\n        var newProp = e.properties;\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            this.pagerObj[\"\" + prop] = newProp[\"\" + prop];\n        }\n        this.pagerObj.dataBind();\n    };\n    Page.prototype.clickHandler = function (e) {\n        var gObj = this.parent;\n        if (this.isForceCancel || isActionPrevent(gObj) && !gObj.prevPageMoving && !this.isCancel) {\n            if (!this.isForceCancel) {\n                if (!isNullOrUndefined(e.newProp) && !isNullOrUndefined(e.newProp.pageSize)) {\n                    gObj.notify(events.preventBatch, { instance: this, handler: this.setPageSize, arg1: e.newProp.pageSize });\n                    this.pagerObj.setProperties({ pageSize: e.oldProp.pageSize }, true);\n                    gObj.setProperties({ pageSettings: { pageSize: e.oldProp.pageSize } }, true);\n                    this.pagerObj.setProperties({\n                        currentPage: gObj.pageSettings.currentPage === this.pagerObj.currentPage ?\n                            this.pagerObj.previousPageNo : gObj.pageSettings.currentPage\n                    }, true);\n                }\n                else if (e.currentPage) {\n                    gObj.notify(events.preventBatch, { instance: this, handler: this.goToPage, arg1: e.currentPage });\n                    this.pagerObj.currentPage = gObj.pageSettings.currentPage === this.pagerObj.currentPage ?\n                        this.pagerObj.previousPageNo : gObj.pageSettings.currentPage;\n                }\n                this.isForceCancel = true;\n                this.pagerObj.dataBind();\n            }\n            else {\n                this.isForceCancel = false;\n            }\n            e.cancel = true;\n            return;\n        }\n        gObj.pageSettings.pageSize = this.pagerObj.pageSize;\n        gObj.prevPageMoving = false;\n        var prevPage = this.pageSettings.currentPage;\n        var args = {\n            cancel: false, requestType: 'paging', previousPage: prevPage,\n            currentPage: e.currentPage, pageSize: gObj.pageSettings.pageSize, type: events.actionBegin\n        };\n        if (!this.isCancel) {\n            this.pageSettings.currentPage = e.currentPage;\n            this.parent.notify(events.modelChanged, args);\n        }\n        if (args.cancel) {\n            e.cancel = true;\n            this.parent.setProperties({ pageSettings: { currentPage: prevPage } }, true);\n            this.pagerObj.setProperties({ currentPage: prevPage }, true);\n            this.isCancel = true;\n            return;\n        }\n        this.isCancel = false;\n        this.parent.requestTypeAction = 'paging';\n    };\n    Page.prototype.keyPressHandler = function (e) {\n        if (e.action in keyActions) {\n            e.preventDefault();\n            this.element.querySelector(keyActions[e.action]).click();\n        }\n    };\n    /**\n     * Defines the text of the external message.\n     *\n     * @param  {string} message - Defines the message to update.\n     * @returns {void}\n     */\n    Page.prototype.updateExternalMessage = function (message) {\n        if (!this.pagerObj.enableExternalMessage) {\n            this.pagerObj.enableExternalMessage = true;\n            this.pagerObj.dataBind();\n        }\n        this.pagerObj.externalMessage = message;\n        this.pagerObj.dataBind();\n    };\n    Page.prototype.appendToElement = function () {\n        this.isInitialLoad = true;\n        this.parent.element.appendChild(this.element);\n        this.parent.setGridPager(this.element);\n        this.pagerObj.isReact = this.parent.isReact;\n        this.pagerObj.isVue = this.parent.isVue;\n        this.pagerObj.appendTo(this.element);\n        this.isInitialLoad = false;\n    };\n    Page.prototype.enableAfterRender = function (e) {\n        if (e.module === this.getModuleName() && e.enable) {\n            this.render();\n            this.appendToElement();\n            if (this.isReactTemplate()) {\n                this.pagerObj.updateTotalPages();\n                this.created();\n            }\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Page.prototype.addEventListener = function () {\n        this.handlers = {\n            load: this.render,\n            end: this.appendToElement,\n            ready: this.dataReady,\n            complete: this.onActionComplete,\n            updateLayout: this.enableAfterRender,\n            inboundChange: this.onPropertyChanged,\n            keyPress: this.keyPressHandler,\n            created: this.created\n        };\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        if (this.parent.isReact || this.parent.isVue) {\n            this.parent.addEventListener(literals.create, this.handlers.created.bind(this));\n        }\n        this.evtHandlers = [{ event: events.initialLoad, handler: this.handlers.load },\n            { event: events.initialEnd, handler: this.handlers.end },\n            { event: events.dataReady, handler: this.handlers.ready },\n            { event: events.pageComplete, handler: this.handlers.complete },\n            { event: events.uiUpdate, handler: this.handlers.updateLayout },\n            { event: events.inBoundModelChanged, handler: this.handlers.inboundChange },\n            { event: events.keyPressed, handler: this.handlers.keyPress },\n            { event: events.destroy, handler: this.destroy }];\n        addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n    };\n    Page.prototype.created = function () {\n        if (this.isInitialRender && this.isReactTemplate()) {\n            this.isInitialRender = false;\n            this.renderReactPagerTemplate();\n        }\n    };\n    Page.prototype.isReactTemplate = function () {\n        return (this.parent.isReact || this.parent.isVue) && this.pagerObj.template && typeof (this.pagerObj.template) !== 'string';\n    };\n    Page.prototype.renderReactPagerTemplate = function () {\n        if (!this.isInitialRender && this.isReactTemplate()) {\n            var result = void 0;\n            this.parent.destroyTemplate(['pagerTemplate']);\n            this.element.classList.add('e-pagertemplate');\n            this.pagerObj.compile(this.pagerObj.template);\n            var page = this.parent.pageSettings;\n            var data = {\n                currentPage: page.currentPage, pageSize: page.pageSize, pageCount: page.pageCount,\n                totalRecordsCount: page.totalRecordsCount, totalPages: this.pagerObj.totalPages\n            };\n            var tempId = this.parent.id + '_pagertemplate';\n            if (this.parent.isReact) {\n                this.pagerObj.templateFn(data, this.parent, 'pagerTemplate', tempId, null, null, this.pagerObj.element);\n                this.parent.renderTemplates();\n            }\n            else {\n                result = this.pagerObj.templateFn(data, this.parent, 'pagerTemplate');\n                appendChildren(this.pagerObj.element, result);\n            }\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Page.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        if (this.parent.isReact || this.parent.isVue) {\n            this.parent.removeEventListener(literals.create, this.handlers.created);\n        }\n        this.parent.off(events.pagerRefresh, this.renderReactPagerTemplate);\n        addRemoveEventListener(this.parent, this.evtHandlers, false);\n    };\n    /**\n     * To destroy the pager\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Page.prototype.destroy = function () {\n        this.removeEventListener();\n        if (this.isReactTemplate()) {\n            this.parent.destroyTemplate(['pagerTemplate']);\n        }\n        this.pagerObj.destroy();\n    };\n    Page.prototype.pagerDestroy = function () {\n        if (this.pagerObj && !this.pagerObj.isDestroyed) {\n            this.pagerObj.destroy();\n            remove(this.element);\n        }\n    };\n    return Page;\n}());\nexport { Page };\n/**\n * @hidden\n */\nvar keyActions = {\n    pageUp: '.e-prev',\n    pageDown: '.e-next',\n    ctrlAltPageDown: '.e-last',\n    ctrlAltPageUp: '.e-first',\n    altPageUp: '.e-pp',\n    altPageDown: '.e-np'\n};\n","import { Browser, EventHandler, createElement } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, isUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { remove, closest, select } from '@syncfusion/ej2-base';\nimport { Query, DataManager } from '@syncfusion/ej2-data';\nimport { setCssInGridPopUp, getPosition, isGroupAdaptive, addRemoveActiveClasses, removeAddCboxClasses } from '../base/util';\nimport { getCellsByTableName, parentsUntil, getScrollBarWidth } from '../base/util';\nimport * as events from '../base/constant';\nimport { RenderType } from '../base/enum';\nimport { iterateExtend, setChecked, isComplexField, getObject } from '../base/util';\nimport { addRemoveEventListener } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * The `Selection` module is used to handle cell and row selection.\n */\nvar Selection = /** @class */ (function () {\n    /**\n     * Constructor for the Grid selection module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {SelectionSettings} selectionSettings - specifies the selectionsettings\n     * @param {ServiceLocator} locator - specifies the ServiceLocator\n     * @hidden\n     */\n    function Selection(parent, selectionSettings, locator) {\n        //Internal letiables\n        /**\n         * @hidden\n         */\n        this.selectedRowIndexes = [];\n        /**\n         * @hidden\n         */\n        this.selectedRowCellIndexes = [];\n        /**\n         * @hidden\n         */\n        this.selectedRecords = [];\n        /**\n         * @hidden\n         */\n        this.preventFocus = false;\n        /**\n         *  @hidden\n         */\n        this.selectedColumnsIndexes = [];\n        this.checkBoxState = false;\n        this.isMultiShiftRequest = false;\n        this.isMultiCtrlRequest = false;\n        this.isMultiCtrlRequestCell = false;\n        this.enableSelectMultiTouch = false;\n        this.clearRowCheck = false;\n        this.selectRowCheck = false;\n        this.selectedRowState = {};\n        this.unSelectedRowState = {};\n        this.totalRecordsCount = 0;\n        this.chkAllCollec = [];\n        this.isCheckedOnAdd = false;\n        this.persistSelectedData = [];\n        this.deSelectedData = [];\n        this.isHdrSelectAllClicked = false;\n        this.needColumnSelection = false;\n        this.isCancelDeSelect = false;\n        this.isPreventCellSelect = false;\n        this.disableUI = false;\n        this.isPersisted = false;\n        this.cmdKeyPressed = false;\n        this.cellselected = false;\n        this.isMultiSelection = false;\n        this.isAddRowsToSelection = false;\n        this.initialRowSelection = false;\n        this.isPrevRowSelection = false;\n        this.isKeyAction = false;\n        this.isRowDragSelected = false;\n        this.isPartialSelection = false;\n        this.rmtHdrChkbxClicked = false;\n        this.isCheckboxReset = false;\n        /**\n         * @hidden\n         */\n        this.autoFillRLselection = true;\n        this.bottom = '0 0 2px 0';\n        this.top = '2px 0 0 0';\n        /* eslint-disable */\n        this.right_bottom = '0 2px 2px 0';\n        this.bottom_left = '0 0 2px 2px';\n        this.top_right = '2px 2px 0 0';\n        this.top_left = '2px 0 0 2px';\n        this.top_bottom = '2px 0 2px 0';\n        this.top_right_bottom = '2px 2px 2px 0';\n        this.top_bottom_left = '2px 0 2px 2px';\n        this.top_right_left = '2px 2px 0 2px';\n        this.right_bottom_left = '0 2px 2px 2px';\n        this.all_border = '2px';\n        this.parent = parent;\n        this.selectionSettings = selectionSettings;\n        this.factory = locator.getService('rendererFactory');\n        this.focus = locator.getService('focus');\n        this.addEventListener();\n        this.wireEvents();\n    }\n    Selection.prototype.initializeSelection = function () {\n        this.parent.log('selection_key_missing');\n        this.render();\n    };\n    /**\n     * The function used to trigger onActionBegin\n     *\n     * @param {Object} args - specifies the args\n     * @param {string} type - specifies the type\n     * @returns {void}\n     * @hidden\n     */\n    Selection.prototype.onActionBegin = function (args, type) {\n        this.parent.trigger(type, this.fDataUpdate(args));\n    };\n    Selection.prototype.fDataUpdate = function (args) {\n        if (!this.isMultiSelection && (!isNullOrUndefined(args.cellIndex) || !isNullOrUndefined(args.rowIndex))) {\n            var rowObj = this.getRowObj(isNullOrUndefined(args.rowIndex) ? isNullOrUndefined(args.cellIndex) ?\n                this.currentIndex : args.cellIndex.rowIndex : args.rowIndex);\n            args.foreignKeyData = rowObj.foreignKeyData;\n        }\n        return args;\n    };\n    /**\n     * The function used to trigger onActionComplete\n     *\n     * @param {Object} args - specifies the args\n     * @param {string} type - specifies the type\n     * @returns {void}\n     * @hidden\n     */\n    Selection.prototype.onActionComplete = function (args, type) {\n        this.parent.trigger(type, this.fDataUpdate(args));\n        this.isMultiSelection = false;\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    Selection.prototype.getModuleName = function () {\n        return 'selection';\n    };\n    /**\n     * To destroy the selection\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Selection.prototype.destroy = function () {\n        var gridElement = this.parent.element;\n        if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n            return;\n        }\n        this.hidePopUp();\n        this.clearSelection();\n        this.removeEventListener();\n        this.unWireEvents();\n        EventHandler.remove(this.parent.getContent(), 'mousedown', this.mouseDownHandler);\n        EventHandler.remove(this.parent.getHeaderContent(), 'mousedown', this.mouseDownHandler);\n    };\n    Selection.prototype.isEditing = function () {\n        return (this.parent.editSettings.mode === 'Normal' || (this.parent.editSettings.mode === 'Batch' && this.parent.editModule &&\n            this.parent.editModule.formObj && !this.parent.editModule.formObj.validate())) &&\n            this.parent.isEdit && !this.parent.isPersistSelection;\n    };\n    Selection.prototype.getCurrentBatchRecordChanges = function () {\n        var gObj = this.parent;\n        if (gObj.editSettings.mode === 'Batch' && gObj.editModule) {\n            var currentRecords = iterateExtend(this.parent.getCurrentViewRecords());\n            currentRecords = gObj.editSettings.newRowPosition === 'Bottom' ?\n                currentRecords.concat(this.parent.editModule.getBatchChanges()[literals.addedRecords]) :\n                this.parent.editModule.getBatchChanges()[literals.addedRecords].concat(currentRecords);\n            var deletedRecords = this.parent.editModule.getBatchChanges()[literals.deletedRecords];\n            var primaryKey = this.parent.getPrimaryKeyFieldNames()[0];\n            for (var i = 0; i < (deletedRecords.length); i++) {\n                for (var j = 0; j < currentRecords.length; j++) {\n                    if (deletedRecords[parseInt(i.toString(), 10)][\"\" + primaryKey] === currentRecords[parseInt(j.toString(), 10)][\"\" + primaryKey]) {\n                        currentRecords.splice(j, 1);\n                        break;\n                    }\n                }\n            }\n            return currentRecords;\n        }\n        else if (this.parent.enableVirtualization && this.parent.groupSettings.columns.length && !this.parent.isPersistSelection) {\n            var selectedGroupedData = gObj.getCurrentViewRecords().filter(function (col) { return col['key'] === undefined; });\n            return selectedGroupedData;\n        }\n        else {\n            return gObj.getCurrentViewRecords();\n        }\n    };\n    /**\n     * Selects a row by the given index.\n     *\n     * @param  {number} index - Defines the row index.\n     * @param  {boolean} isToggle - If set to true, then it toggles the selection.\n     * @returns {void}\n     */\n    Selection.prototype.selectRow = function (index, isToggle) {\n        if (this.selectedRowIndexes.length && this.selectionSettings.enableSimpleMultiRowSelection) {\n            this.addRowsToSelection([index]);\n            return;\n        }\n        var gObj = this.parent;\n        var selectedRow = gObj.getRowByIndex(index);\n        var rowObj = selectedRow && gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid'));\n        if (this.isPartialSelection && rowObj && rowObj.isDataRow && !rowObj.isSelectable) {\n            return;\n        }\n        var selectData;\n        var isRemoved = false;\n        if (gObj.enableVirtualization && index > -1) {\n            var e = { selectedIndex: index, isAvailable: true };\n            this.parent.notify(events.selectVirtualRow, e);\n            if (selectedRow && (gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid')))) {\n                selectData = gObj.getRowObjectFromUID(selectedRow.getAttribute('data-uid')).data;\n            }\n            else {\n                if (e.isAvailable && !gObj.selectionSettings.persistSelection) {\n                    var prevSelectedData = this.parent.getSelectedRecords();\n                    if (prevSelectedData.length > 0) {\n                        this.clearRowSelection();\n                    }\n                }\n                return;\n            }\n        }\n        else {\n            selectData = this.getRowObj(index).data;\n        }\n        if (!this.isRowType() || !selectedRow || this.isEditing()) {\n            // if (this.isEditing()) {\n            //     gObj.selectedRowIndex = index;\n            // }\n            return;\n        }\n        var isRowSelected = selectedRow.hasAttribute('aria-selected');\n        this.activeTarget();\n        isToggle = !isToggle ? isToggle :\n            !this.selectedRowIndexes.length ? false :\n                (this.selectedRowIndexes.length === 1 ? (this.isKeyAction && this.parent.isCheckBoxSelection ?\n                    false : index === this.selectedRowIndexes[0]) : false);\n        this.isKeyAction = false;\n        var args;\n        var can = 'cancel';\n        if (!isToggle) {\n            args = {\n                data: selectData, rowIndex: index, isCtrlPressed: this.isMultiCtrlRequest,\n                isShiftPressed: this.isMultiShiftRequest, row: selectedRow,\n                previousRow: gObj.getRowByIndex(this.prevRowIndex),\n                previousRowIndex: this.prevRowIndex, target: this.actualTarget, cancel: false, isInteracted: this.isInteracted,\n                isHeaderCheckboxClicked: this.isHeaderCheckboxClicked\n            };\n            this.parent.trigger(events.rowSelecting, this.fDataUpdate(args), this.rowSelectingCallBack(args, isToggle, index, selectData, isRemoved, isRowSelected, can));\n        }\n        else {\n            this.rowSelectingCallBack(args, isToggle, index, selectData, isRemoved, isRowSelected, can)(args);\n        }\n    };\n    Selection.prototype.rowSelectingCallBack = function (args, isToggle, index, selectData, isRemoved, isRowSelected, can) {\n        var _this = this;\n        return function (args) {\n            if (!isNullOrUndefined(args) && args[\"\" + can] === true) {\n                _this.disableInteracted();\n                return;\n            }\n            _this.index = index;\n            _this.toggle = isToggle;\n            _this.data = selectData;\n            _this.removed = isRemoved;\n            if (isRowSelected && _this.selectionSettings.persistSelection && !(_this.selectionSettings.checkboxMode === 'ResetOnRowClick')) {\n                _this.clearSelectedRow(index);\n                _this.selectRowCallBack();\n            }\n            else if (!isRowSelected && _this.selectionSettings.persistSelection &&\n                _this.selectionSettings.checkboxMode !== 'ResetOnRowClick') {\n                _this.selectRowCallBack();\n            }\n            if (_this.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n                _this.isCheckboxReset = true;\n                _this.clearSelection();\n            }\n            if (!_this.selectionSettings.persistSelection || _this.selectionSettings.checkboxMode === 'ResetOnRowClick' ||\n                (!_this.parent.isCheckBoxSelection && _this.selectionSettings.persistSelection)) {\n                _this.selectRowCheck = true;\n                _this.clearRow();\n            }\n        };\n    };\n    Selection.prototype.selectRowCallBack = function () {\n        var gObj = this.parent;\n        var args;\n        var index = this.index;\n        var isToggle = this.toggle;\n        var selectData = this.data;\n        var isRemoved = this.removed;\n        var selectedRow = gObj.getRowByIndex(index);\n        if (!isToggle && !isRemoved) {\n            if (this.selectedRowIndexes.indexOf(index) <= -1) {\n                this.updateRowSelection(selectedRow, index);\n            }\n            this.selectRowIndex(index);\n        }\n        if (!isToggle) {\n            args = {\n                data: selectData, rowIndex: index,\n                row: selectedRow, previousRow: gObj.getRowByIndex(this.prevRowIndex),\n                previousRowIndex: this.prevRowIndex, target: this.actualTarget, isInteracted: this.isInteracted,\n                isHeaderCheckBoxClicked: this.isHeaderCheckboxClicked, rowIndexes: index\n            };\n            this.onActionComplete(args, events.rowSelected);\n        }\n        this.isInteracted = false;\n        this.updateRowProps(index);\n    };\n    /**\n     * Selects a range of rows from start and end row indexes.\n     *\n     * @param  {number} startIndex - Specifies the start row index.\n     * @param  {number} endIndex - Specifies the end row index.\n     * @returns {void}\n     */\n    Selection.prototype.selectRowsByRange = function (startIndex, endIndex) {\n        this.selectRows(this.getCollectionFromIndexes(startIndex, endIndex));\n        this.selectRowIndex(endIndex);\n    };\n    Selection.prototype.selectedDataUpdate = function (selectedData, foreignKeyData, selectedRows, rowIndexes, selectableRowIndex) {\n        for (var i = 0, len = rowIndexes.length; i < len; i++) {\n            var currentRow = this.parent.getDataRows()[rowIndexes[parseInt(i.toString(), 10)]];\n            if (this.parent.enableVirtualization) {\n                currentRow = this.parent.getRowByIndex(rowIndexes[parseInt(i.toString(), 10)]);\n            }\n            var rowObj = this.getRowObj(currentRow);\n            if (rowObj && rowObj.isDataRow && rowObj.isSelectable) {\n                selectedData.push(rowObj.data);\n                selectedRows.push(currentRow);\n                foreignKeyData.push(rowObj.foreignKeyData);\n            }\n            else {\n                if (this.isPartialSelection && selectableRowIndex) {\n                    selectableRowIndex.splice(selectableRowIndex.indexOf(rowIndexes[parseInt(i.toString(), 10)]), 1);\n                }\n            }\n        }\n    };\n    /**\n     * Selects a collection of rows by index.\n     *\n     * @param  {number[]} rowIndexes - Specifies an array of row indexes.\n     * @returns {void}\n     */\n    Selection.prototype.selectRows = function (rowIndexes) {\n        var _this = this;\n        var gObj = this.parent;\n        var selectableRowIndex = rowIndexes.slice();\n        var rowIndex = !this.isSingleSel() ? rowIndexes[0] : rowIndexes[rowIndexes.length - 1];\n        this.isMultiSelection = true;\n        var selectedRows = [];\n        var foreignKeyData = [];\n        var can = 'cancel';\n        var selectedData = [];\n        if (!this.isRowType() || this.isEditing()) {\n            return;\n        }\n        this.selectedDataUpdate(selectedData, foreignKeyData, selectedRows, rowIndexes, selectableRowIndex);\n        this.activeTarget();\n        var args = {\n            cancel: false,\n            rowIndexes: selectableRowIndex, row: selectedRows, rowIndex: rowIndex, target: this.actualTarget,\n            prevRow: gObj.getRows()[this.prevRowIndex], previousRowIndex: this.prevRowIndex,\n            isInteracted: this.isInteracted, isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n            data: selectedData, isHeaderCheckboxClicked: this.isHeaderCheckboxClicked, foreignKeyData: foreignKeyData\n        };\n        this.parent.trigger(events.rowSelecting, this.fDataUpdate(args), function (args) {\n            if (!isNullOrUndefined(args) && args[\"\" + can] === true) {\n                _this.disableInteracted();\n                return;\n            }\n            if (!(gObj.allowRowDragAndDrop && _this.isDragged && _this.selectionSettings.persistSelection)) {\n                _this.clearRow();\n            }\n            _this.selectRowIndex(selectableRowIndex.slice(-1)[0]);\n            var selectRowFn = function (index, preventFocus) {\n                _this.updateRowSelection(gObj.getRowByIndex(index), index, preventFocus);\n                _this.updateRowProps(rowIndex);\n            };\n            if (!_this.isSingleSel()) {\n                for (var _i = 0, selectableRowIndex_1 = selectableRowIndex; _i < selectableRowIndex_1.length; _i++) {\n                    var rowIdx = selectableRowIndex_1[_i];\n                    selectRowFn(rowIdx, gObj.enableVirtualization ? true : false);\n                }\n            }\n            else {\n                selectRowFn(rowIndex);\n            }\n            args = {\n                rowIndexes: selectableRowIndex, row: selectedRows, rowIndex: rowIndex, target: _this.actualTarget,\n                prevRow: gObj.getRows()[_this.prevRowIndex], previousRowIndex: _this.prevRowIndex,\n                data: _this.getSelectedRecords(), isInteracted: _this.isInteracted,\n                isHeaderCheckboxClicked: _this.isHeaderCheckboxClicked, foreignKeyData: foreignKeyData\n            };\n            if (_this.isRowSelected) {\n                _this.onActionComplete(args, events.rowSelected);\n            }\n            _this.isInteracted = false;\n        });\n    };\n    /**\n     * Select rows with existing row selection by passing row indexes.\n     *\n     * @param {number} rowIndexes - Specifies the row indexes.\n     * @returns {void}\n     * @hidden\n     */\n    Selection.prototype.addRowsToSelection = function (rowIndexes) {\n        var gObj = this.parent;\n        var can = 'cancel';\n        var target = this.target;\n        this.isMultiSelection = true;\n        var selectedRows = [];\n        var foreignKeyData = [];\n        var selectedData = [];\n        var indexes = gObj.getSelectedRowIndexes().concat(rowIndexes);\n        var selectedRow = !this.isSingleSel() ? gObj.getRowByIndex(rowIndexes[0]) :\n            gObj.getRowByIndex(rowIndexes[rowIndexes.length - 1]);\n        if ((!this.isRowType() || this.isEditing()) && !this.selectionSettings.checkboxOnly) {\n            return;\n        }\n        var args;\n        var checkboxColumn = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n        if (this.isMultiCtrlRequest && !checkboxColumn.length) {\n            this.selectedDataUpdate(selectedData, foreignKeyData, selectedRows, indexes);\n        }\n        for (var _i = 0, rowIndexes_1 = rowIndexes; _i < rowIndexes_1.length; _i++) {\n            var rowIndex = rowIndexes_1[_i];\n            var rowObj = this.getRowObj(rowIndex);\n            var isUnSelected = this.selectedRowIndexes.indexOf(rowIndex) > -1;\n            if (this.isPartialSelection && rowObj && rowObj.isDataRow && !rowObj.isSelectable) {\n                continue;\n            }\n            this.selectRowIndex(rowIndex);\n            if (isUnSelected && ((checkboxColumn.length ? true : this.selectionSettings.enableToggle) || this.isMultiCtrlRequest)) {\n                this.isAddRowsToSelection = true;\n                this.rowDeselect(events.rowDeselecting, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], target);\n                if (this.isCancelDeSelect) {\n                    return;\n                }\n                this.selectedRowIndexes.splice(this.selectedRowIndexes.indexOf(rowIndex), 1);\n                this.selectedRecords.splice(this.selectedRecords.indexOf(selectedRow), 1);\n                this.selectRowIndex(this.selectedRowIndexes.length ? this.selectedRowIndexes[this.selectedRowIndexes.length - 1] : -1);\n                selectedRow.removeAttribute('aria-selected');\n                this.addRemoveClassesForRow(selectedRow, false, null, 'e-selectionbackground', 'e-active');\n                this.rowDeselect(events.rowDeselected, [rowIndex], [rowObj.data], [selectedRow], [rowObj.foreignKeyData], target, undefined, undefined, undefined);\n                this.isInteracted = false;\n                this.isMultiSelection = false;\n                this.isAddRowsToSelection = false;\n                this.isHdrSelectAllClicked = false;\n            }\n            else {\n                this.activeTarget();\n                args = {\n                    cancel: false,\n                    data: selectedData.length ? selectedData : rowObj.data, rowIndex: rowIndex, row: selectedRows.length ? selectedRows :\n                        selectedRow, target: this.actualTarget, prevRow: gObj.getRows()[this.prevRowIndex],\n                    previousRowIndex: this.prevRowIndex, isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n                    foreignKeyData: foreignKeyData.length ? foreignKeyData : rowObj.foreignKeyData, isInteracted: this.isInteracted,\n                    isHeaderCheckboxClicked: this.isHeaderCheckboxClicked, rowIndexes: indexes\n                };\n                this.parent.trigger(events.rowSelecting, this.fDataUpdate(args));\n                if (!isNullOrUndefined(args) && args[\"\" + can] === true) {\n                    this.disableInteracted();\n                    return;\n                }\n                if (this.isSingleSel()) {\n                    this.clearRow();\n                }\n                this.updateRowSelection(selectedRow, rowIndex);\n            }\n            if (!isUnSelected) {\n                args = {\n                    data: selectedData.length ? selectedData : rowObj.data, rowIndex: rowIndex, row: selectedRows.length ? selectedRows :\n                        selectedRow, target: this.actualTarget, prevRow: gObj.getRows()[this.prevRowIndex],\n                    previousRowIndex: this.prevRowIndex, foreignKeyData: foreignKeyData.length ? foreignKeyData : rowObj.foreignKeyData,\n                    isInteracted: this.isInteracted, isHeaderCheckboxClicked: this.isHeaderCheckboxClicked, rowIndexes: indexes\n                };\n                this.onActionComplete(args, events.rowSelected);\n            }\n            this.isInteracted = false;\n            this.updateRowProps(rowIndex);\n            if (this.isSingleSel()) {\n                break;\n            }\n        }\n    };\n    Selection.prototype.getCollectionFromIndexes = function (startIndex, endIndex) {\n        var indexes = [];\n        // eslint-disable-next-line prefer-const\n        var _a = (startIndex <= endIndex) ?\n            { i: startIndex, max: endIndex } : { i: endIndex, max: startIndex }, i = _a.i, max = _a.max;\n        for (; i <= max; i++) {\n            indexes.push(i);\n        }\n        if (startIndex > endIndex) {\n            indexes.reverse();\n        }\n        return indexes;\n    };\n    Selection.prototype.clearRow = function () {\n        this.clearRowCheck = true;\n        this.clearRowSelection();\n    };\n    Selection.prototype.clearRowCallBack = function () {\n        if (this.isCancelDeSelect && this.parent.checkAllRows !== 'Check') {\n            return;\n        }\n        this.selectedRowIndexes = [];\n        this.selectedRecords = [];\n        this.selectRowIndex(-1);\n        if (this.isSingleSel() && this.parent.isPersistSelection) {\n            this.selectedRowState = {};\n        }\n    };\n    Selection.prototype.clearSelectedRow = function (index) {\n        if (this.toggle) {\n            var selectedEle = this.parent.getRowByIndex(index);\n            if (!this.disableUI) {\n                selectedEle.removeAttribute('aria-selected');\n                this.addRemoveClassesForRow(selectedEle, false, true, 'e-selectionbackground', 'e-active');\n            }\n            this.removed = true;\n            this.updatePersistCollection(selectedEle, false);\n            this.updateCheckBoxes(selectedEle);\n            this.selectedRowIndexes.splice(this.selectedRowIndexes.indexOf(index), 1);\n            this.selectedRecords.splice(this.selectedRecords.indexOf(this.parent.getRowByIndex(index)), 1);\n        }\n    };\n    Selection.prototype.updateRowProps = function (startIndex) {\n        this.prevRowIndex = startIndex;\n        this.isRowSelected = this.selectedRowIndexes.length && true;\n    };\n    Selection.prototype.getPkValue = function (pkField, data) {\n        return pkField ? isComplexField(pkField) ? getObject(pkField, data) : data[\"\" + pkField] : data[\"\" + pkField];\n    };\n    Selection.prototype.updatePersistCollection = function (selectedRow, chkState) {\n        var _this = this;\n        if ((this.parent.isPersistSelection || this.parent.selectionSettings.persistSelection &&\n            this.parent.getPrimaryKeyFieldNames().length > 0) && !isNullOrUndefined(selectedRow)) {\n            if (!this.parent.isPersistSelection) {\n                this.ensureCheckboxFieldSelection();\n            }\n            var rowObj = this.getRowObj(selectedRow);\n            var pKey_1 = rowObj.data ? this.getPkValue(this.primaryKey, rowObj.data) : null;\n            if (pKey_1 === null) {\n                return;\n            }\n            rowObj.isSelected = chkState;\n            if ((chkState && !this.isPartialSelection) || (this.isPartialSelection && rowObj.isSelectable && rowObj.isSelected)) {\n                this.selectedRowState[\"\" + pKey_1] = chkState;\n                delete (this.unSelectedRowState[\"\" + pKey_1]);\n                if (!this.persistSelectedData.some(function (data) { return _this.getPkValue(_this.primaryKey, data) === pKey_1; })) {\n                    this.persistSelectedData.push(rowObj.data);\n                }\n            }\n            else {\n                this.updatePersistDelete(pKey_1);\n            }\n        }\n    };\n    Selection.prototype.updatePersistDelete = function (pKey, isPartialSelection) {\n        var _this = this;\n        delete (this.selectedRowState[\"\" + pKey]);\n        if (this.rmtHdrChkbxClicked) {\n            this.unSelectedRowState[\"\" + pKey] = true;\n        }\n        var index;\n        var isPresent = this.persistSelectedData.some(function (data, i) {\n            index = i;\n            return _this.getPkValue(_this.primaryKey, data) === pKey;\n        });\n        if (isPresent) {\n            this.persistSelectedData.splice(index, 1);\n            if (isPartialSelection) {\n                this.parent.partialSelectedRecords.splice(index, 1);\n            }\n        }\n    };\n    Selection.prototype.updateCheckBoxes = function (row, chkState, rowIndex) {\n        if (!isNullOrUndefined(row)) {\n            var chkBox = row.querySelector('.e-checkselect');\n            if (!isNullOrUndefined(chkBox)) {\n                removeAddCboxClasses(chkBox.nextElementSibling, chkState);\n                setChecked(chkBox, chkState);\n                if (isNullOrUndefined(this.checkedTarget) || (!isNullOrUndefined(this.checkedTarget)\n                    && !this.checkedTarget.classList.contains('e-checkselectall'))) {\n                    this.setCheckAllState(rowIndex);\n                }\n            }\n        }\n    };\n    Selection.prototype.updateRowSelection = function (selectedRow, startIndex, preventFocus) {\n        if (!selectedRow) {\n            return;\n        }\n        if (this.selectedRowIndexes.indexOf(startIndex) === -1) {\n            this.selectedRowIndexes.push(startIndex);\n            this.selectedRecords.push(selectedRow);\n        }\n        selectedRow.setAttribute('aria-selected', 'true');\n        this.updatePersistCollection(selectedRow, true);\n        this.updateCheckBoxes(selectedRow, true);\n        this.addRemoveClassesForRow(selectedRow, true, null, 'e-selectionbackground', 'e-active');\n        if (!this.preventFocus) {\n            var target = this.focus.getPrevIndexes().cellIndex ?\n                selectedRow.cells[this.focus.getPrevIndexes().cellIndex] :\n                selectedRow.querySelector('.e-selectionbackground:not(.e-hide):not(.e-detailrowcollapse):not(.e-detailrowexpand)');\n            if (this.parent.contextMenuModule && this.mouseButton === 2) {\n                target = this.parent.contextMenuModule.cell;\n            }\n            if (!target || preventFocus) {\n                return;\n            }\n            this.focus.onClick({ target: target }, true);\n        }\n    };\n    /**\n     * Deselects the currently selected rows and cells.\n     *\n     * @returns {void}\n     */\n    Selection.prototype.clearSelection = function () {\n        this.checkSelectAllClicked = true;\n        if (this.selectionSettings.persistSelection && this.persistSelectedData.length) {\n            this.deSelectedData = iterateExtend(this.persistSelectedData);\n        }\n        if (!this.parent.isPersistSelection || (this.parent.isPersistSelection && !this.parent.isEdit) ||\n            (!isNullOrUndefined(this.checkedTarget) && this.checkedTarget.classList.contains('e-checkselectall'))) {\n            var span = this.parent.element.querySelector('.e-gridpopup').querySelector('span');\n            if (span.classList.contains('e-rowselect')) {\n                span.classList.remove('e-spanclicked');\n            }\n            if (this.parent.isPersistSelection) {\n                this.persistSelectedData = [];\n                this.selectedRowState = {};\n            }\n            this.clearRowSelection();\n            this.clearCellSelection();\n            this.clearColumnSelection();\n            this.prevRowIndex = undefined;\n            this.prevCIdxs = undefined;\n            this.prevECIdxs = undefined;\n            this.enableSelectMultiTouch = false;\n            this.isInteracted = false;\n            this.checkSelectAllClicked = false;\n            this.isHdrSelectAllClicked = false;\n        }\n    };\n    /**\n     * Deselects the currently selected rows.\n     *\n     * @returns {void}\n     */\n    Selection.prototype.clearRowSelection = function () {\n        var _this = this;\n        if (this.isRowSelected) {\n            var rows_1 = this.parent.getDataRows();\n            var data_1 = [];\n            var row_1 = [];\n            var rowIndex_1 = [];\n            var foreignKeyData_1 = [];\n            var target_1 = this.target;\n            for (var i = 0, len = this.selectedRowIndexes.length; i < len; i++) {\n                var currentRow = this.parent.editSettings.mode === 'Batch' ?\n                    this.parent.getRows()[this.selectedRowIndexes[parseInt(i.toString(), 10)]]\n                    : this.parent.getDataRows()[this.selectedRowIndexes[parseInt(i.toString(), 10)]];\n                var rowObj = this.getRowObj(currentRow);\n                if (rowObj) {\n                    data_1.push(rowObj.data);\n                    row_1.push(currentRow);\n                    rowIndex_1.push(this.selectedRowIndexes[parseInt(i.toString(), 10)]);\n                    foreignKeyData_1.push(rowObj.foreignKeyData);\n                }\n            }\n            if (this.selectionSettings.persistSelection && this.selectionSettings.checkboxMode !== 'ResetOnRowClick') {\n                this.isRowClicked = this.checkSelectAllClicked ? true : false;\n            }\n            this.rowDeselect(events.rowDeselecting, rowIndex_1, data_1, row_1, foreignKeyData_1, target_1, null, function () {\n                if (_this.isCancelDeSelect && (_this.isRowClicked || _this.checkSelectAllClicked || (_this.isInteracted &&\n                    !_this.parent.isPersistSelection))) {\n                    if (_this.parent.isPersistSelection) {\n                        if (_this.getCheckAllStatus(_this.parent.element.querySelector('.e-checkselectall')) === 'Intermediate') {\n                            for (var i = 0; i < _this.selectedRecords.length; i++) {\n                                _this.updatePersistCollection(_this.selectedRecords[parseInt(i.toString(), 10)], true);\n                            }\n                        }\n                        else {\n                            _this.parent.checkAllRows = 'Check';\n                            _this.updatePersistSelectedData(true);\n                        }\n                    }\n                    if (_this.clearRowCheck) {\n                        _this.clearRowCallBack();\n                        _this.clearRowCheck = false;\n                        if (_this.selectRowCheck) {\n                            _this.selectRowCallBack();\n                            _this.selectRowCheck = false;\n                        }\n                    }\n                    return;\n                }\n                var element = [].slice.call(rows_1.filter(function (record) { return record.hasAttribute('aria-selected'); }));\n                for (var j = 0; j < element.length; j++) {\n                    if (!_this.disableUI) {\n                        element[parseInt(j.toString(), 10)].removeAttribute('aria-selected');\n                        _this.addRemoveClassesForRow(element[parseInt(j.toString(), 10)], false, true, 'e-selectionbackground', 'e-active');\n                    }\n                    // tslint:disable-next-line:align\n                    if (!_this.isPrevRowSelection) {\n                        _this.updatePersistCollection(element[parseInt(j.toString(), 10)], false);\n                    }\n                    _this.updateCheckBoxes(element[parseInt(j.toString(), 10)]);\n                }\n                _this.selectedRowIndexes = [];\n                _this.selectedRecords = [];\n                _this.isRowSelected = false;\n                _this.selectRowIndex(-1);\n                _this.isPrevRowSelection = false;\n                _this.rowDeselect(events.rowDeselected, rowIndex_1, data_1, row_1, foreignKeyData_1, target_1, null, undefined, null);\n                if (_this.clearRowCheck) {\n                    _this.clearRowCallBack();\n                    _this.clearRowCheck = false;\n                    if (_this.selectRowCheck) {\n                        _this.selectRowCallBack();\n                        _this.selectRowCheck = false;\n                    }\n                }\n            }, null);\n        }\n        else {\n            if (this.clearRowCheck) {\n                this.clearRowCallBack();\n                this.clearRowCheck = false;\n                if (this.selectRowCheck) {\n                    this.selectRowCallBack();\n                    this.selectRowCheck = false;\n                }\n            }\n        }\n    };\n    Selection.prototype.rowDeselect = function (type, rowIndex, data, row, foreignKeyData, target, mRow, rowDeselectCallBack, frozenRightRow) {\n        var _this = this;\n        if ((this.selectionSettings.persistSelection && (this.isRowClicked || this.checkSelectAllClicked || (this.focus['activeKey'] &&\n            this.focus.currentInfo.element.classList.contains('e-gridchkbox') && this.focus['activeKey'] === 'space'))) ||\n            !this.selectionSettings.persistSelection) {\n            var cancl_1 = 'cancel';\n            var isSingleDeSel = rowIndex.length === 1 && this.deSelectedData.length === 1;\n            var rowDeselectObj = {\n                rowIndex: rowIndex[0], data: this.selectionSettings.persistSelection && (this.parent.checkAllRows === 'Uncheck' &&\n                    !isSingleDeSel) && this.selectionSettings.checkboxMode !== 'ResetOnRowClick' ? this.deSelectedData : data,\n                foreignKeyData: foreignKeyData, cancel: false, isInteracted: this.isInteracted,\n                isHeaderCheckboxClicked: this.isHeaderCheckboxClicked\n            };\n            if (type === 'rowDeselected') {\n                delete rowDeselectObj.cancel;\n            }\n            var rowInString = 'row';\n            var target_2 = 'target';\n            var rowidx = 'rowIndex';\n            var rowidxex = 'rowIndexes';\n            var dataTxt = 'data';\n            var foreignKey = 'foreignKeyData';\n            rowDeselectObj[\"\" + rowInString] = row;\n            rowDeselectObj[\"\" + target_2] = this.actualTarget;\n            var isHeaderCheckBxClick = this.actualTarget && !isNullOrUndefined(closest(this.actualTarget, 'thead'));\n            if (isHeaderCheckBxClick || rowIndex.length > 1) {\n                rowDeselectObj[\"\" + rowidx] = rowIndex[0];\n                rowDeselectObj[\"\" + rowidxex] = rowIndex;\n            }\n            else if (rowIndex.length === 1) {\n                rowDeselectObj[\"\" + dataTxt] = rowDeselectObj[\"\" + dataTxt][0];\n                rowDeselectObj[\"\" + rowInString] = rowDeselectObj[\"\" + rowInString][0];\n                rowDeselectObj[\"\" + foreignKey] = rowDeselectObj[\"\" + foreignKey][0];\n                if (this.isAddRowsToSelection) {\n                    rowDeselectObj[\"\" + rowidxex] = rowIndex;\n                }\n            }\n            this.parent.trigger(type, rowDeselectObj, function (args) {\n                _this.isCancelDeSelect = args[\"\" + cancl_1];\n                if (!_this.isCancelDeSelect || (!_this.isRowClicked && !_this.isInteracted && !_this.checkSelectAllClicked)) {\n                    _this.updatePersistCollection(row[0], false);\n                    _this.updateCheckBoxes(row[0], undefined, rowIndex[0]);\n                }\n                if (rowDeselectCallBack !== undefined) {\n                    rowDeselectCallBack();\n                }\n            });\n        }\n        else if (this.selectionSettings.persistSelection && !this.isInteracted) {\n            if (rowDeselectCallBack !== undefined) {\n                rowDeselectCallBack();\n            }\n        }\n    };\n    Selection.prototype.getRowObj = function (row) {\n        if (row === void 0) { row = this.currentIndex; }\n        if (isNullOrUndefined(row)) {\n            return {};\n        }\n        if (typeof row === 'number') {\n            row = this.parent.getRowByIndex(row);\n        }\n        if (row) {\n            return this.parent.getRowObjectFromUID(row.getAttribute('data-uid')) || {};\n        }\n        return {};\n    };\n    /**\n     * Selects a cell by the given index.\n     *\n     * @param  {IIndex} cellIndex - Defines the row and column indexes.\n     * @param  {boolean} isToggle - If set to true, then it toggles the selection.\n     * @returns {void}\n     */\n    Selection.prototype.selectCell = function (cellIndex, isToggle) {\n        if (!this.isCellType()) {\n            return;\n        }\n        var gObj = this.parent;\n        var args;\n        var selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n        this.currentIndex = cellIndex.rowIndex;\n        var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n        if (!this.isCellType() || !selectedCell || this.isEditing()) {\n            return;\n        }\n        var isCellSelected = selectedCell.classList.contains('e-cellselectionbackground');\n        isToggle = !isToggle ? isToggle : (!isUndefined(this.prevCIdxs) &&\n            cellIndex.rowIndex === this.prevCIdxs.rowIndex && cellIndex.cellIndex === this.prevCIdxs.cellIndex &&\n            isCellSelected);\n        if (!isToggle) {\n            args = {\n                data: selectedData, cellIndex: cellIndex,\n                isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n                previousRowCell: this.prevECIdxs ?\n                    this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined,\n                cancel: false\n            };\n            var currentCell = 'currentCell';\n            args[\"\" + currentCell] = selectedCell;\n            var previousRowCellIndex = 'previousRowCellIndex';\n            args[\"\" + previousRowCellIndex] = this.prevECIdxs;\n            this.parent.trigger(events.cellSelecting, this.fDataUpdate(args), this.successCallBack(args, isToggle, cellIndex, selectedCell, selectedData));\n            this.cellselected = true;\n        }\n        else {\n            this.successCallBack(args, isToggle, cellIndex, selectedCell, selectedData)(args);\n        }\n    };\n    Selection.prototype.successCallBack = function (cellSelectingArgs, isToggle, cellIndex, selectedCell, selectedData) {\n        var _this = this;\n        return function (cellSelectingArgs) {\n            var cncl = 'cancel';\n            var currentCell = 'currentCell';\n            if (!isNullOrUndefined(cellSelectingArgs) && cellSelectingArgs[\"\" + cncl] === true) {\n                return;\n            }\n            if (!isToggle) {\n                cellSelectingArgs[\"\" + currentCell] = cellSelectingArgs[\"\" + currentCell] ? cellSelectingArgs[\"\" + currentCell] : selectedCell;\n            }\n            _this.clearCell();\n            if (!isToggle) {\n                _this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n            }\n            if (!isToggle) {\n                var args = {\n                    data: selectedData, cellIndex: cellIndex, currentCell: selectedCell,\n                    selectedRowCellIndex: _this.selectedRowCellIndexes,\n                    previousRowCell: _this.prevECIdxs ?\n                        _this.getCellIndex(_this.prevECIdxs.rowIndex, _this.prevECIdxs.cellIndex) : undefined\n                };\n                var previousRowCellIndex = 'previousRowCellIndex';\n                args[\"\" + previousRowCellIndex] = _this.prevECIdxs;\n                _this.updateCellProps(cellIndex, cellIndex);\n                _this.onActionComplete(args, events.cellSelected);\n            }\n        };\n    };\n    Selection.prototype.getCellIndex = function (rIdx, cIdx) {\n        return this.parent.getCellFromIndex(rIdx, cIdx);\n    };\n    /**\n     * Selects a range of cells from start and end indexes.\n     *\n     * @param  {IIndex} startIndex - Specifies the row and column's start index.\n     * @param  {IIndex} endIndex - Specifies the row and column's end index.\n     * @returns {void}\n     */\n    Selection.prototype.selectCellsByRange = function (startIndex, endIndex) {\n        var _this = this;\n        if (!this.isCellType()) {\n            return;\n        }\n        var gObj = this.parent;\n        var selectedCell = gObj.getCellFromIndex(startIndex.rowIndex, startIndex.cellIndex);\n        var min;\n        var max;\n        var stIndex = startIndex;\n        var edIndex = endIndex = endIndex ? endIndex : startIndex;\n        var cellIndexes;\n        this.currentIndex = startIndex.rowIndex;\n        var cncl = 'cancel';\n        var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n        if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n            return;\n        }\n        var args = {\n            data: selectedData, cellIndex: startIndex, currentCell: selectedCell,\n            isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest,\n            previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n        };\n        var previousRowCellIndex = 'previousRowCellIndex';\n        args[\"\" + previousRowCellIndex] = this.prevECIdxs;\n        this.parent.trigger(events.cellSelecting, this.fDataUpdate(args), function (cellSelectingArgs) {\n            if (!isNullOrUndefined(cellSelectingArgs) && cellSelectingArgs[\"\" + cncl] === true) {\n                return;\n            }\n            _this.clearCell();\n            if (startIndex.rowIndex > endIndex.rowIndex) {\n                var temp = startIndex;\n                startIndex = endIndex;\n                endIndex = temp;\n            }\n            for (var i = startIndex.rowIndex; i <= endIndex.rowIndex; i++) {\n                if (_this.selectionSettings.cellSelectionMode.indexOf('Box') < 0) {\n                    min = i === startIndex.rowIndex ? (startIndex.cellIndex) : 0;\n                    max = i === endIndex.rowIndex ? (endIndex.cellIndex) : _this.getLastColIndex(i);\n                }\n                else {\n                    min = startIndex.cellIndex;\n                    max = endIndex.cellIndex;\n                }\n                cellIndexes = [];\n                for (var j = min < max ? min : max, len = min > max ? min : max; j <= len; j++) {\n                    selectedCell = gObj.getCellFromIndex(i, j);\n                    if (!selectedCell) {\n                        continue;\n                    }\n                    cellIndexes.push(j);\n                    _this.updateCellSelection(selectedCell);\n                    _this.addAttribute(selectedCell);\n                }\n                _this.selectedRowCellIndexes.push({ rowIndex: i, cellIndexes: cellIndexes });\n            }\n            var cellSelectedArgs = {\n                data: selectedData, cellIndex: edIndex, currentCell: gObj.getCellFromIndex(edIndex.rowIndex, edIndex.cellIndex),\n                selectedRowCellIndex: _this.selectedRowCellIndexes,\n                previousRowCell: _this.prevECIdxs ? _this.getCellIndex(_this.prevECIdxs.rowIndex, _this.prevECIdxs.cellIndex) : undefined\n            };\n            var previousRowCellIndex = 'previousRowCellIndex';\n            cellSelectedArgs[\"\" + previousRowCellIndex] = _this.prevECIdxs;\n            if (!_this.isDragged) {\n                _this.onActionComplete(cellSelectedArgs, events.cellSelected);\n                _this.cellselected = true;\n            }\n            _this.updateCellProps(stIndex, edIndex);\n        });\n    };\n    /**\n     * Selects a collection of cells by row and column indexes.\n     *\n     * @param  {ISelectedCell[]} rowCellIndexes - Specifies the row and column indexes.\n     * @returns {void}\n     */\n    Selection.prototype.selectCells = function (rowCellIndexes) {\n        if (!this.isCellType()) {\n            return;\n        }\n        var gObj = this.parent;\n        var selectedCell = gObj.getCellFromIndex(rowCellIndexes[0].rowIndex, rowCellIndexes[0].cellIndexes[0]);\n        this.currentIndex = rowCellIndexes[0].rowIndex;\n        var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n        if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n            return;\n        }\n        var cellSelectArgs = {\n            data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n            currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n            isShiftPressed: this.isMultiShiftRequest,\n            previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n        };\n        var previousRowCellIndex = 'previousRowCellIndex';\n        cellSelectArgs[\"\" + previousRowCellIndex] = this.prevECIdxs;\n        this.onActionBegin(cellSelectArgs, events.cellSelecting);\n        for (var i = 0, len = rowCellIndexes.length; i < len; i++) {\n            for (var j = 0, cellLen = rowCellIndexes[parseInt(i.toString(), 10)].cellIndexes.length; j < cellLen; j++) {\n                selectedCell = gObj.getCellFromIndex(rowCellIndexes[parseInt(i.toString(), 10)].rowIndex, rowCellIndexes[parseInt(i.toString(), 10)].cellIndexes[parseInt(j.toString(), 10)]);\n                if (!selectedCell) {\n                    continue;\n                }\n                this.updateCellSelection(selectedCell);\n                this.addAttribute(selectedCell);\n                this.addRowCellIndex({ rowIndex: rowCellIndexes[parseInt(i.toString(), 10)].rowIndex,\n                    cellIndex: rowCellIndexes[parseInt(i.toString(), 10)].cellIndexes[parseInt(j.toString(), 10)] });\n            }\n        }\n        this.updateCellProps({ rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] }, { rowIndex: rowCellIndexes[0].rowIndex, cellIndex: rowCellIndexes[0].cellIndexes[0] });\n        var cellSelectedArgs = {\n            data: selectedData, cellIndex: rowCellIndexes[0].cellIndexes[0],\n            currentCell: selectedCell, selectedRowCellIndex: this.selectedRowCellIndexes,\n            previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n        };\n        var prvRowCellIndex = 'previousRowCellIndex';\n        cellSelectedArgs[\"\" + prvRowCellIndex] = this.prevECIdxs;\n        this.onActionComplete(cellSelectedArgs, events.cellSelected);\n    };\n    /**\n     * Select cells with existing cell selection by passing row and column index.\n     *\n     * @param {IIndex} cellIndexes - Defines the collection of row and column index.\n     * @returns {void}\n     * @hidden\n     */\n    Selection.prototype.addCellsToSelection = function (cellIndexes) {\n        if (!this.isCellType()) {\n            return;\n        }\n        var gObj = this.parent;\n        var selectedCell;\n        var index;\n        this.currentIndex = cellIndexes[0].rowIndex;\n        var cncl = 'cancel';\n        var selectedData = this.getCurrentBatchRecordChanges()[this.currentIndex];\n        if (this.isSingleSel() || !this.isCellType() || this.isEditing()) {\n            return;\n        }\n        this.hideAutoFill();\n        var rowObj;\n        rowObj = gObj.getRowsObject()[cellIndexes[0].rowIndex];\n        if (gObj.groupSettings.columns.length > 0) {\n            rowObj = gObj.getRowObjectFromUID(this.target.parentElement.getAttribute('data-uid'));\n        }\n        var foreignKeyData = [];\n        for (var _i = 0, cellIndexes_1 = cellIndexes; _i < cellIndexes_1.length; _i++) {\n            var cellIndex = cellIndexes_1[_i];\n            for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n                if (this.selectedRowCellIndexes[parseInt(i.toString(), 10)].rowIndex === cellIndex.rowIndex) {\n                    index = i;\n                    break;\n                }\n            }\n            selectedCell = gObj.getCellFromIndex(cellIndex.rowIndex, this.getColIndex(cellIndex.rowIndex, cellIndex.cellIndex));\n            var idx = cellIndex.cellIndex;\n            if (gObj.groupSettings.columns.length > 0) {\n                foreignKeyData.push(rowObj.cells[idx + gObj.groupSettings.columns.length].foreignKeyData);\n            }\n            else {\n                foreignKeyData.push(rowObj.cells[parseInt(idx.toString(), 10)].foreignKeyData);\n            }\n            var args = {\n                cancel: false, data: selectedData, cellIndex: cellIndexes[0],\n                isShiftPressed: this.isMultiShiftRequest,\n                currentCell: selectedCell, isCtrlPressed: this.isMultiCtrlRequest,\n                previousRowCell: this.prevECIdxs ?\n                    gObj.getCellFromIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) : undefined\n            };\n            var prvRowCellIndex = 'previousRowCellIndex';\n            args[\"\" + prvRowCellIndex] = this.prevECIdxs;\n            var isUnSelected = index > -1;\n            if (isUnSelected) {\n                var selectedCellIdx = this.selectedRowCellIndexes[parseInt(index.toString(), 10)].cellIndexes;\n                if (selectedCellIdx.indexOf(cellIndex.cellIndex) > -1 || (this.selectionSettings.mode === 'Both' &&\n                    selectedCell.classList.contains('e-gridchkbox') && !selectedCell.getAttribute('aria-selected'))) {\n                    this.cellDeselect(events.cellDeselecting, [{ rowIndex: cellIndex.rowIndex, cellIndexes: [cellIndex.cellIndex] }], selectedData, [selectedCell], foreignKeyData);\n                    selectedCellIdx.splice(selectedCellIdx.indexOf(cellIndex.cellIndex), 1);\n                    if (selectedCellIdx.length === 0) {\n                        this.selectedRowCellIndexes.splice(index, 1);\n                    }\n                    selectedCell.classList.remove('e-cellselectionbackground');\n                    selectedCell.removeAttribute('aria-selected');\n                    this.cellDeselect(events.cellDeselected, [{ rowIndex: cellIndex.rowIndex, cellIndexes: [cellIndex.cellIndex] }], selectedData, [selectedCell], foreignKeyData);\n                }\n                else {\n                    isUnSelected = false;\n                    this.onActionBegin(args, events.cellSelecting);\n                    this.addRowCellIndex({ rowIndex: cellIndex.rowIndex, cellIndex: cellIndex.cellIndex });\n                    this.updateCellSelection(selectedCell);\n                    this.addAttribute(selectedCell);\n                }\n            }\n            else {\n                this.onActionBegin(args, events.cellSelecting);\n                if (!isNullOrUndefined(args) && args[\"\" + cncl] === true) {\n                    return;\n                }\n                this.updateCellSelection(selectedCell, cellIndex.rowIndex, cellIndex.cellIndex);\n            }\n            if (!isUnSelected) {\n                var cellSelectedArgs = {\n                    data: selectedData, cellIndex: cellIndexes[0], currentCell: selectedCell,\n                    previousRowCell: this.prevECIdxs ? this.getCellIndex(this.prevECIdxs.rowIndex, this.prevECIdxs.cellIndex) :\n                        undefined, selectedRowCellIndex: this.selectedRowCellIndexes\n                };\n                cellSelectedArgs[\"\" + prvRowCellIndex] = this.prevECIdxs;\n                this.onActionComplete(cellSelectedArgs, events.cellSelected);\n                this.cellselected = true;\n            }\n            this.updateCellProps(cellIndex, cellIndex);\n        }\n    };\n    Selection.prototype.getColIndex = function (rowIndex, index) {\n        var col = this.parent.getColumnByIndex(index);\n        var cells = getCellsByTableName(this.parent, col, rowIndex);\n        if (cells) {\n            for (var m = 0; m < cells.length; m++) {\n                var colIndex = parseInt(cells[parseInt(m.toString(), 10)].getAttribute(literals.dataColIndex), 10);\n                if (colIndex === index) {\n                    return m;\n                }\n            }\n        }\n        return -1;\n    };\n    Selection.prototype.getLastColIndex = function (rowIndex) {\n        var cells = this.parent.getDataRows()[parseInt(rowIndex.toString(), 10)].querySelectorAll('td.e-rowcell');\n        return parseInt(cells[cells.length - 1].getAttribute(literals.dataColIndex), 10);\n    };\n    Selection.prototype.clearCell = function () {\n        this.clearCellSelection();\n    };\n    Selection.prototype.cellDeselect = function (type, cellIndexes, data, cells, foreignKeyData) {\n        var cancl = 'cancel';\n        if (cells && cells.length > 0) {\n            for (var _i = 0, cells_1 = cells; _i < cells_1.length; _i++) {\n                var cell = cells_1[_i];\n                if (cell && cell.classList.contains(literals.gridChkBox)) {\n                    this.updateCheckBoxes(closest(cell, 'tr'));\n                }\n            }\n        }\n        var args = {\n            cells: cells, data: data, cellIndexes: cellIndexes, foreignKeyData: foreignKeyData, cancel: false\n        };\n        this.parent.trigger(type, args);\n        this.isPreventCellSelect = args[\"\" + cancl];\n    };\n    Selection.prototype.updateCellSelection = function (selectedCell, rowIndex, cellIndex) {\n        if (!isNullOrUndefined(rowIndex)) {\n            this.addRowCellIndex({ rowIndex: rowIndex, cellIndex: cellIndex });\n        }\n        selectedCell.classList.add('e-cellselectionbackground');\n        if (selectedCell.classList.contains(literals.gridChkBox)) {\n            this.updateCheckBoxes(closest(selectedCell, 'tr'), true);\n        }\n        this.addAttribute(selectedCell);\n    };\n    Selection.prototype.addAttribute = function (cell) {\n        this.target = cell;\n        if (!isNullOrUndefined(cell)) {\n            cell.setAttribute('aria-selected', 'true');\n            if (!this.preventFocus) {\n                this.focus.onClick({ target: cell }, true);\n            }\n        }\n    };\n    Selection.prototype.updateCellProps = function (startIndex, endIndex) {\n        this.prevCIdxs = startIndex;\n        this.prevECIdxs = endIndex;\n        this.isCellSelected = this.selectedRowCellIndexes.length && true;\n    };\n    Selection.prototype.addRowCellIndex = function (rowCellIndex) {\n        var isRowAvail;\n        var index;\n        for (var i = 0, len = this.selectedRowCellIndexes.length; i < len; i++) {\n            if (this.selectedRowCellIndexes[parseInt(i.toString(), 10)].rowIndex === rowCellIndex.rowIndex) {\n                isRowAvail = true;\n                index = i;\n                break;\n            }\n        }\n        if (isRowAvail) {\n            if (this.selectedRowCellIndexes[parseInt(index.toString(), 10)].cellIndexes.indexOf(rowCellIndex.cellIndex) < 0) {\n                this.selectedRowCellIndexes[parseInt(index.toString(), 10)].cellIndexes.push(rowCellIndex.cellIndex);\n            }\n        }\n        else {\n            this.selectedRowCellIndexes.push({ rowIndex: rowCellIndex.rowIndex, cellIndexes: [rowCellIndex.cellIndex] });\n        }\n    };\n    /**\n     * Deselects the currently selected cells.\n     *\n     * @returns {void}\n     */\n    Selection.prototype.clearCellSelection = function () {\n        if (this.isCellSelected) {\n            var gObj = this.parent;\n            var selectedCells = this.getSelectedCellsElement();\n            var rowCell = this.selectedRowCellIndexes;\n            var data = [];\n            var cells = [];\n            var foreignKeyData = [];\n            var currentViewData = this.getCurrentBatchRecordChanges();\n            this.hideAutoFill();\n            for (var i = 0, len = rowCell.length; i < len; i++) {\n                data.push(currentViewData[rowCell[parseInt(i.toString(), 10)].rowIndex]);\n                var rowObj = this.getRowObj(rowCell[parseInt(i.toString(), 10)].rowIndex);\n                for (var j = 0, cLen = rowCell[parseInt(i.toString(), 10)].cellIndexes.length; j < cLen; j++) {\n                    if (rowObj.cells) {\n                        foreignKeyData.push(rowObj.cells[rowCell[parseInt(i.toString(), 10)]\n                            .cellIndexes[parseInt(j.toString(), 10)]].foreignKeyData);\n                    }\n                    cells.push(gObj.getCellFromIndex(rowCell[parseInt(i.toString(), 10)].rowIndex, rowCell[parseInt(i.toString(), 10)].cellIndexes[parseInt(j.toString(), 10)]));\n                }\n            }\n            this.cellDeselect(events.cellDeselecting, rowCell, data, cells, foreignKeyData);\n            if (this.isPreventCellSelect === true) {\n                return;\n            }\n            for (var i = 0, len = selectedCells.length; i < len; i++) {\n                selectedCells[parseInt(i.toString(), 10)].classList.remove('e-cellselectionbackground');\n                selectedCells[parseInt(i.toString(), 10)].removeAttribute('aria-selected');\n            }\n            if (this.bdrElement) {\n                this.showHideBorders('none');\n            }\n            this.selectedRowCellIndexes = [];\n            this.isCellSelected = false;\n            if (!this.isDragged && this.cellselected) {\n                this.cellDeselect(events.cellDeselected, rowCell, data, cells, foreignKeyData);\n            }\n        }\n    };\n    Selection.prototype.getSelectedCellsElement = function () {\n        var gObj = this.parent;\n        var rows = gObj.getDataRows();\n        var cells = [];\n        for (var i = 0, len = rows.length; i < len; i++) {\n            cells = cells.concat([].slice.call(rows[parseInt(i.toString(), 10)].getElementsByClassName('e-cellselectionbackground')));\n        }\n        return cells;\n    };\n    Selection.prototype.mouseMoveHandler = function (e) {\n        e.preventDefault();\n        this.stopTimer();\n        var gBRect = this.parent.element.getBoundingClientRect();\n        var x1 = this.x;\n        var y1 = this.y;\n        var position = getPosition(e);\n        var x2 = position.x - gBRect.left;\n        var y2 = position.y - gBRect.top;\n        var tmp;\n        var target = closest(e.target, 'tr');\n        this.isDragged = true;\n        if (!this.isCellDrag) {\n            if (!target) {\n                target = closest(document.elementFromPoint(this.parent.element.offsetLeft + 2, e.clientY), 'tr');\n            }\n            if (x1 > x2) {\n                tmp = x2;\n                x2 = x1;\n                x1 = tmp;\n            }\n            if (y1 > y2) {\n                tmp = y2;\n                y2 = y1;\n                y1 = tmp;\n            }\n            this.element.style.left = x1 + 'px';\n            this.element.style.top = y1 + 'px';\n            this.element.style.width = x2 - x1 + 'px';\n            this.element.style.height = y2 - y1 + 'px';\n        }\n        if (target && !e.ctrlKey && !e.shiftKey) {\n            var rowIndex = parseInt(target.getAttribute(literals.dataRowIndex), 10);\n            if (!this.isCellDrag) {\n                this.hideAutoFill();\n                this.selectRowsByRange(this.startDIndex, rowIndex);\n                this.isRowDragSelected = true;\n            }\n            else {\n                var td = parentsUntil(e.target, literals.rowCell);\n                if (td) {\n                    this.startAFCell = this.startCell;\n                    this.endAFCell = parentsUntil(e.target, literals.rowCell);\n                    if (rowIndex > -1) {\n                        this.selectLikeExcel(e, rowIndex, parseInt(td.getAttribute(literals.dataColIndex), 10));\n                    }\n                }\n            }\n        }\n        if (!e.ctrlKey && !e.shiftKey && !this.parent.enableVirtualization && !this.parent.enableInfiniteScrolling &&\n            !this.parent.enableColumnVirtualization && !this.parent.groupSettings.columns.length && this.isCellDrag) {\n            this.updateScrollPosition(e, position, this.parent.getContent());\n        }\n    };\n    Selection.prototype.updateScrollPosition = function (e, position, scrollElem) {\n        var _this = this;\n        var cliRect = scrollElem.getBoundingClientRect();\n        if (cliRect.left >= position.x - 20) {\n            this.timer1 = window.setInterval(function () { _this.setScrollPosition(scrollElem.firstElementChild, 'left', e); }, 200);\n        }\n        else if (cliRect.left + scrollElem.clientWidth - 20 -\n            (this.parent.height !== 'auto' ? getScrollBarWidth() : 0) < position.x) {\n            this.timer1 = window.setInterval(function () { _this.setScrollPosition(scrollElem.firstElementChild, 'right', e); }, 200);\n        }\n        if (cliRect.top >= position.y - (this.parent.getRowHeight() * 0.5)) {\n            this.timer2 = window.setInterval(function () { _this.setScrollPosition(scrollElem.firstElementChild, 'up', e); }, 200);\n        }\n        else if (cliRect.top + scrollElem.clientHeight - (this.parent.getRowHeight() * 0.5) -\n            (scrollElem.firstElementChild.scrollWidth > scrollElem.firstElementChild.offsetWidth ?\n                getScrollBarWidth() : 0) <= position.y) {\n            this.timer2 = window.setInterval(function () { _this.setScrollPosition(scrollElem.firstElementChild, 'down', e); }, 200);\n        }\n    };\n    Selection.prototype.stopTimer = function () {\n        if (this.timer1) {\n            window.clearInterval(this.timer1);\n            this.timer1 = null;\n        }\n        if (this.timer2) {\n            window.clearInterval(this.timer2);\n            this.timer2 = null;\n        }\n        this.preventFocus = false;\n    };\n    Selection.prototype.setScrollPosition = function (scrollElem, direction, e) {\n        var rowIndex = -1;\n        var colIndex = -1;\n        if (this.endAFCell || this.prevECIdxs) {\n            rowIndex = this.endAFCell ? parseInt(this.endAFCell.getAttribute('index')) : this.prevECIdxs.rowIndex;\n            colIndex = this.endAFCell ? parseInt(this.endAFCell.getAttribute('data-colindex')) : this.prevECIdxs.cellIndex;\n        }\n        switch (direction) {\n            case 'up':\n                if (e && closest(e.target, '.e-headercontent'))\n                    return;\n                if (this.isAutoFillSel && this.selectedRowCellIndexes.length &&\n                    ((this.selectedRowCellIndexes.length === 1 && this.startAFCell !== this.startCell) ||\n                        (this.selectedRowCellIndexes.length > 1 && this.startAFCell.getBoundingClientRect().top > 0))) {\n                    rowIndex = parseInt(this.startAFCell.getAttribute('index'));\n                }\n                rowIndex -= 1;\n                if (this.parent.frozenRows)\n                    rowIndex += this.parent.frozenRows + 1;\n                rowIndex < 1 ? scrollElem.scrollTop = 0 : scrollElem.scrollTop -= this.parent.getRowByIndex(rowIndex).offsetHeight;\n                break;\n            case 'down':\n                if (rowIndex < this.parent.getRows().length - 1) {\n                    rowIndex += 1;\n                    scrollElem.scrollTop += this.parent.getRowByIndex(rowIndex).offsetHeight;\n                }\n                else {\n                    scrollElem.scrollTop = scrollElem.scrollHeight;\n                }\n                break;\n            case 'left':\n                if (colIndex > 0 && rowIndex > -1) {\n                    if (this.isAutoFillSel && this.selectedRowCellIndexes.length &&\n                        ((this.selectedRowCellIndexes[0].cellIndexes.length > 0 && this.startAFCell !== this.startCell) ||\n                            (this.selectedRowCellIndexes[0].cellIndexes.length > 1 && this.startAFCell.getBoundingClientRect().left > 0))) {\n                        colIndex = parseInt(this.startAFCell.getAttribute('data-colindex'));\n                    }\n                    var nextEle = this.findNextCell(scrollElem, direction, colIndex, rowIndex);\n                    colIndex = nextEle ? parseInt(nextEle.getAttribute('data-colindex')) : -1;\n                    colIndex < 1 ? scrollElem.scrollLeft = 0 : scrollElem.scrollLeft -= nextEle.offsetWidth;\n                }\n                break;\n            case 'right':\n                if (colIndex < this.parent.columns.length - 1) {\n                    var nextEle = this.findNextCell(scrollElem, direction, colIndex, rowIndex);\n                    colIndex = nextEle ? parseInt(nextEle.getAttribute('data-colindex')) : -1;\n                    colIndex < this.parent.columns.length - 1 ? scrollElem.scrollLeft += nextEle.offsetWidth : scrollElem.scrollLeft = scrollElem.scrollWidth;\n                }\n                break;\n        }\n        if (rowIndex > -1 && colIndex > -1) {\n            var e_1 = { target: this.parent.getCellFromIndex(rowIndex, colIndex) };\n            this.endAFCell = e_1.target;\n            this.preventFocus = true;\n            this.selectLikeExcel(e_1, rowIndex, colIndex);\n        }\n    };\n    Selection.prototype.findNextCell = function (scrollElem, direction, colInd, rowInd) {\n        var nextEle = this.parent.getCellFromIndex(rowInd, direction === 'left' ? colInd - 1 : colInd + 1);\n        if (nextEle && nextEle.classList.contains('e-hide')) {\n            var siblingEles = nextEle.closest('tr').querySelectorAll('.e-rowcell:not(.e-hide)');\n            var nextEleInd = Array.from(siblingEles).indexOf(nextEle.nextElementSibling);\n            if (nextEleInd > 0 && nextEleInd < siblingEles.length - 1) {\n                nextEle = siblingEles[nextEleInd + (direction === 'left' ? -1 : 1)];\n                return nextEle;\n            }\n            else {\n                scrollElem.scrollLeft = 0;\n                return null;\n            }\n        }\n        return nextEle;\n    };\n    Selection.prototype.selectLikeExcel = function (e, rowIndex, cellIndex) {\n        if (!this.isAutoFillSel) {\n            this.clearCellSelection();\n            this.selectCellsByRange({ rowIndex: this.startDIndex, cellIndex: this.startDCellIndex }, { rowIndex: rowIndex, cellIndex: cellIndex });\n            this.drawBorders();\n        }\n        else { //Autofill\n            this.showAFBorders();\n            this.selectLikeAutoFill(e);\n        }\n    };\n    Selection.prototype.setFrozenBorders = function (parentEle, border, bdrStr) {\n        var width = border.style.borderWidth.toString().split(' ');\n        var strCell = ['', 'e-leftfreeze', 'e-unfreeze', 'e-leftfreeze', 'e-unfreeze', 'e-rightfreeze', 'e-rightfreeze'];\n        var cells = [].slice.call(parentEle.querySelectorAll('.e-cellselectionbackground' + '.' + strCell[\"\" + bdrStr])).\n            filter(function (ele) { return ele.style.display === ''; });\n        var fixedCells = [].slice.call(parentEle.querySelectorAll('.e-cellselectionbackground.e-fixedfreeze')).\n            filter(function (ele) { return ele.style.display === ''; });\n        var isRtl = this.parent.enableRtl;\n        if (cells.length) {\n            var firstRowIdx = cells[0].getAttribute('index');\n            var firstColIdx = cells[0].getAttribute('data-colindex');\n            var lastRowIdx = cells[cells.length - 1].getAttribute('index');\n            var lastColIdx = cells[cells.length - 1].getAttribute('data-colindex');\n            for (var i = 0; i < cells.length; i++) {\n                if (cells[parseInt(i.toString(), 10)].getAttribute('index') === firstRowIdx && (width.length === 1 || (width.length === 3\n                    && parseInt(width[0], 10) === 2) || (width.length === 4 && parseInt(width[0], 10) === 2))) {\n                    cells[parseInt(i.toString(), 10)].classList.add('e-xlsel-top-border');\n                }\n                if (cells[parseInt(i.toString(), 10)].getAttribute('data-colindex') === firstColIdx && (width.length === 1 ||\n                    (width.length === 3 && parseInt(width[1], 10) === 2) || (width.length === 4 && (((!isRtl && parseInt(width[3], 10) === 2)) ||\n                    (isRtl && parseInt(width[1], 10) === 2))))) {\n                    cells[parseInt(i.toString(), 10)].classList.add(isRtl ? 'e-xlsel-right-border' : 'e-xlsel-left-border');\n                }\n                if (cells[parseInt(i.toString(), 10)].getAttribute('index') === lastRowIdx && (width.length === 1 ||\n                    (width.length === 3 && parseInt(width[2], 10) === 2) || (width.length === 4 && parseInt(width[2], 10) === 2))) {\n                    cells[parseInt(i.toString(), 10)].classList.add('e-xlsel-bottom-border');\n                }\n                if (cells[parseInt(i.toString(), 10)].getAttribute('data-colindex') === lastColIdx && (width.length === 1 ||\n                    (width.length === 3 && parseInt(width[1], 10) === 2) || (width.length === 4 && ((!isRtl && parseInt(width[1], 10) === 2)) ||\n                    (isRtl && parseInt(width[3], 10) === 2)))) {\n                    cells[parseInt(i.toString(), 10)].classList.add(isRtl ? 'e-xlsel-left-border' : 'e-xlsel-right-border');\n                }\n            }\n        }\n        if (fixedCells.length) {\n            var firstRowIdx = fixedCells[0].getAttribute('index');\n            var firstColIdx = fixedCells[0].getAttribute('data-colindex');\n            var lastRowIdx = fixedCells[fixedCells.length - 1].getAttribute('index');\n            var lastColIdx = fixedCells[fixedCells.length - 1].getAttribute('data-colindex');\n            for (var i = 0; i < fixedCells.length; i++) {\n                var idx = fixedCells[parseInt(i.toString(), 10)].getAttribute('index');\n                var colIdx = fixedCells[parseInt(i.toString(), 10)].getAttribute('data-colindex');\n                if (idx === firstRowIdx &&\n                    ((!this.parent.getHeaderContent().querySelector('.e-cellselectionbackground.e-fixedfreeze')\n                        && parentsUntil(parentEle, 'e-content')) || !parentsUntil(parentEle, 'e-content'))) {\n                    fixedCells[parseInt(i.toString(), 10)].classList.add('e-xlsel-top-border');\n                }\n                if (idx === lastRowIdx &&\n                    ((!this.parent.getContent().querySelector('.e-cellselectionbackground.e-fixedfreeze')\n                        && parentsUntil(parentEle, 'e-headercontent')) || !parentsUntil(parentEle, 'e-headercontent'))) {\n                    fixedCells[parseInt(i.toString(), 10)].classList.add('e-xlsel-bottom-border');\n                }\n                var preCell = fixedCells[parseInt(i.toString(), 10)].parentElement.children[parseInt(colIdx, 10) - 1];\n                if (colIdx === firstColIdx && (!preCell || (preCell && !preCell.classList.contains('e-cellselectionbackground')))) {\n                    fixedCells[parseInt(i.toString(), 10)].classList.add(isRtl ? 'e-xlsel-right-border' : 'e-xlsel-left-border');\n                }\n                var nextCell = fixedCells[parseInt(i.toString(), 10)].parentElement.children[parseInt(colIdx, 10) + 1];\n                if (colIdx === lastColIdx && (!nextCell || (nextCell && !nextCell.classList.contains('e-cellselectionbackground')))) {\n                    fixedCells[parseInt(i.toString(), 10)].classList.add(isRtl ? 'e-xlsel-left-border' : 'e-xlsel-right-border');\n                }\n            }\n        }\n    };\n    Selection.prototype.refreshFrozenBorders = function () {\n        if (this.bdrElement) {\n            this.setFrozenBorders(this.parent.getContentTable(), this.bdrElement, '1');\n            if (this.parent.isFrozenGrid() && this.parent.getFrozenMode() === literals.leftRight) {\n                this.setFrozenBorders(this.parent.getContentTable(), this.frcBdrElement, '5');\n            }\n            if (this.parent.frozenRows) {\n                this.setFrozenBorders(this.parent.getHeaderTable(), this.fhBdrElement, '3');\n                if (this.parent.isFrozenGrid() && this.parent.getFrozenMode() === literals.leftRight) {\n                    this.setFrozenBorders(this.parent.getHeaderTable(), this.frhBdrElement, '6');\n                }\n            }\n        }\n    };\n    Selection.prototype.drawBorders = function () {\n        if (this.selectionSettings.cellSelectionMode === 'BoxWithBorder' && this.selectedRowCellIndexes.length && !this.parent.isEdit) {\n            this.parent.element.classList.add('e-enabledboxbdr');\n            if (!this.bdrElement) {\n                this.createBorders();\n            }\n            this.positionBorders();\n            if (this.parent.isFrozenGrid()) {\n                this.showHideBorders('none', true);\n                this.refreshFrozenBorders();\n            }\n        }\n        else {\n            this.showHideBorders('none');\n        }\n    };\n    Selection.prototype.isLastCell = function (cell) {\n        var cells = [].slice.call(cell.parentElement.querySelectorAll('.e-rowcell:not(.e-hide)'));\n        return cells[cells.length - 1] === cell;\n    };\n    Selection.prototype.isLastRow = function (cell) {\n        var rows = [].slice.call(closest(cell, literals.tbody).querySelectorAll('.e-row:not(.e-hiddenrow)'));\n        return cell.parentElement === rows[rows.length - 1];\n    };\n    Selection.prototype.isFirstRow = function (cell) {\n        var rows = [].slice.call(closest(cell, literals.tbody).querySelectorAll('.e-row:not(.e-hiddenrow)'));\n        return cell.parentElement === rows[0];\n    };\n    Selection.prototype.isFirstCell = function (cell) {\n        var cells = [].slice.call(cell.parentElement.querySelectorAll('.e-rowcell:not(.e-hide)'));\n        return cells[0] === cell;\n    };\n    Selection.prototype.setBorders = function (parentEle, border, bdrStr) {\n        var cells = [].slice.call(parentEle.getElementsByClassName('e-cellselectionbackground')).\n            filter(function (ele) { return ele.style.display === ''; });\n        if (cells.length && this.parent.isFrozenGrid()) {\n            var strCell = ['', 'e-leftfreeze', 'e-unfreeze', 'e-leftfreeze', 'e-unfreeze', 'e-rightfreeze', 'e-rightfreeze'];\n            cells = [].slice.call(parentEle.querySelectorAll('.e-cellselectionbackground' + '.' + strCell[\"\" + bdrStr] + ':not(.e-hide)')).\n                filter(function (ele) { return ele.style.display === ''; });\n        }\n        if (cells.length) {\n            var isFrozen = this.parent.isFrozenGrid();\n            var start = cells[0];\n            var end = cells[cells.length - 1];\n            var stOff = start.getBoundingClientRect();\n            var endOff = end.getBoundingClientRect();\n            var parentOff = start.offsetParent.getBoundingClientRect();\n            if (start.offsetParent.classList.contains('e-content') || start.offsetParent.classList.contains('e-headercontent')) {\n                parentOff = start.offsetParent.querySelector('table').getBoundingClientRect();\n            }\n            var rowHeight = !isFrozen && this.isLastRow(end) && (bdrStr === '1' || bdrStr === '2' || bdrStr === '5') ? 2 : 0;\n            var topOffSet = 0;\n            var leftOffset = isFrozen && (bdrStr === '2' || bdrStr === '4') && this.isFirstCell(start) ? 1 : 0;\n            var rightOffset = ((this.parent.getFrozenMode() === 'Right' && (bdrStr === '1' || bdrStr === '3'))\n                || (this.parent.getFrozenMode() === literals.leftRight && (bdrStr === '5' || bdrStr === '6')))\n                && this.isFirstCell(start) ? 1 : 0;\n            if (this.parent.enableRtl) {\n                border.style.right = parentOff.right - stOff.right - leftOffset + 'px';\n                border.style.width = stOff.right - endOff.left + leftOffset + 1 + 'px';\n            }\n            else {\n                border.style.left = stOff.left - parentOff.left - leftOffset - rightOffset + 'px';\n                border.style.width = endOff.right - stOff.left + leftOffset - rightOffset + 1 + 'px';\n            }\n            border.style.top = stOff.top - parentOff.top - topOffSet + 'px';\n            border.style.height = endOff.top - stOff.top > 0 ?\n                (endOff.top - parentOff.top + endOff.height + (isFrozen ? 0 : 1)) - (stOff.top - parentOff.top) - rowHeight + topOffSet + 'px' :\n                endOff.height + topOffSet - rowHeight + (isFrozen ? 0 : 1) + 'px';\n            this.selectDirection += bdrStr;\n        }\n        else {\n            border.style.display = 'none';\n        }\n    };\n    Selection.prototype.positionBorders = function () {\n        this.updateStartEndCells();\n        if (!this.startCell || !this.bdrElement || !this.selectedRowCellIndexes.length) {\n            return;\n        }\n        this.selectDirection = '';\n        this.showHideBorders('');\n        this.setBorders(this.parent.getContentTable(), this.bdrElement, '1');\n        if (this.parent.isFrozenGrid()) {\n            this.setBorders(this.parent.getContentTable(), this.mcBdrElement, '2');\n            if (this.parent.getFrozenMode() === literals.leftRight) {\n                this.setBorders(this.parent.getContentTable(), this.frcBdrElement, '5');\n            }\n        }\n        if (this.parent.frozenRows) {\n            this.setBorders(this.parent.getHeaderTable(), this.fhBdrElement, '3');\n            if (this.parent.isFrozenGrid()) {\n                this.setBorders(this.parent.getHeaderTable(), this.mhBdrElement, '4');\n                if (this.parent.getFrozenMode() === literals.leftRight) {\n                    this.setBorders(this.parent.getHeaderTable(), this.frhBdrElement, '6');\n                }\n            }\n        }\n        this.applyBorders(this.selectDirection);\n    };\n    /* eslint-enable */\n    Selection.prototype.applyBothFrozenBorders = function (str) {\n        var rtl = this.parent.enableRtl;\n        switch (str.length) {\n            case 6:\n                {\n                    this.bdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n                    this.mcBdrElement.style.borderWidth = this.bottom;\n                    this.fhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n                    this.mhBdrElement.style.borderWidth = this.top;\n                    this.frcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n                    this.frhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n                }\n                break;\n            case 4:\n                {\n                    if (str.includes('1') && str.includes('2') && str.includes('3') && str.includes('4')) {\n                        this.fhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n                        this.mhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n                        this.bdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n                        this.mcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n                    }\n                    if (str.includes('2') && str.includes('4') && str.includes('5') && str.includes('6')) {\n                        this.mcBdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n                        this.mhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n                        this.frcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n                        this.frhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n                    }\n                }\n                break;\n            case 3:\n                {\n                    this.bdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n                    this.mcBdrElement.style.borderWidth = this.top_bottom;\n                    this.frcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n                    if (this.parent.frozenRows) {\n                        this.fhBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n                        this.mhBdrElement.style.borderWidth = this.top_bottom;\n                        this.frcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n                    }\n                }\n                break;\n            case 2:\n                {\n                    if (str.includes('1')) {\n                        this.mcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n                        if (this.parent.frozenRows) {\n                            this.fhBdrElement.style.borderWidth = this.top_right_left;\n                        }\n                    }\n                    if (str.includes('2')) {\n                        this.bdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n                        this.frcBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n                        if (this.parent.frozenRows) {\n                            this.mhBdrElement.style.borderWidth = this.top_right_left;\n                        }\n                    }\n                    if (str.includes('3')) {\n                        this.mhBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n                        this.bdrElement.style.borderWidth = this.right_bottom_left;\n                    }\n                    if (str.includes('4')) {\n                        this.fhBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n                        this.frhBdrElement.style.borderWidth = rtl ? this.top_bottom_left : this.top_right_bottom;\n                        this.mcBdrElement.style.borderWidth = this.right_bottom_left;\n                    }\n                    if (str.includes('5')) {\n                        this.mcBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n                        if (this.parent.frozenRows) {\n                            this.frhBdrElement.style.borderWidth = this.top_right_left;\n                        }\n                    }\n                    if (str.includes('6')) {\n                        this.mhBdrElement.style.borderWidth = rtl ? this.top_right_bottom : this.top_bottom_left;\n                        this.frcBdrElement.style.borderWidth = this.right_bottom_left;\n                    }\n                }\n                break;\n            default:\n                this.bdrElement.style.borderWidth = this.all_border;\n                this.mcBdrElement.style.borderWidth = this.all_border;\n                this.frcBdrElement.style.borderWidth = this.all_border;\n                if (this.parent.frozenRows) {\n                    this.fhBdrElement.style.borderWidth = this.all_border;\n                    this.mhBdrElement.style.borderWidth = this.all_border;\n                    this.frhBdrElement.style.borderWidth = this.all_border;\n                }\n                break;\n        }\n    };\n    Selection.prototype.applyBorders = function (str) {\n        var rtl = this.parent.enableRtl;\n        if (this.parent.getFrozenMode() === literals.leftRight) {\n            this.applyBothFrozenBorders(str);\n        }\n        else {\n            switch (str.length) {\n                case 4:\n                    {\n                        if (this.parent.getFrozenMode() === 'Right') {\n                            this.bdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n                            this.mcBdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n                            this.fhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n                            this.mhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n                        }\n                        else {\n                            this.bdrElement.style.borderWidth = rtl ? this.right_bottom : this.bottom_left;\n                            this.mcBdrElement.style.borderWidth = rtl ? this.bottom_left : this.right_bottom;\n                            this.fhBdrElement.style.borderWidth = rtl ? this.top_right : this.top_left;\n                            this.mhBdrElement.style.borderWidth = rtl ? this.top_left : this.top_right;\n                        }\n                    }\n                    break;\n                case 2:\n                    {\n                        if (this.parent.getFrozenMode() === 'Right') {\n                            this.bdrElement.style.borderWidth = str.includes('2') ? rtl ? this.top_bottom_left\n                                : this.top_right_bottom : this.right_bottom_left;\n                            this.mcBdrElement.style.borderWidth = str.includes('1') ? rtl ? this.top_right_bottom\n                                : this.top_bottom_left : this.right_bottom_left;\n                            if (this.parent.frozenRows) {\n                                this.fhBdrElement.style.borderWidth = str.includes('1') ? this.top_right_left\n                                    : rtl ? this.top_bottom_left : this.top_right_bottom;\n                                this.mhBdrElement.style.borderWidth = str.includes('2') ? this.top_right_left\n                                    : rtl ? this.top_right_bottom : this.top_bottom_left;\n                            }\n                        }\n                        else {\n                            this.bdrElement.style.borderWidth = str.includes('2') ? rtl ? this.top_right_bottom\n                                : this.top_bottom_left : this.right_bottom_left;\n                            if (this.parent.isFrozenGrid()) {\n                                this.mcBdrElement.style.borderWidth = str.includes('1') ? rtl ? this.top_bottom_left\n                                    : this.top_right_bottom : this.right_bottom_left;\n                            }\n                            if (this.parent.frozenRows) {\n                                this.fhBdrElement.style.borderWidth = str.includes('1') ? this.top_right_left\n                                    : rtl ? this.top_right_bottom : this.top_bottom_left;\n                                if (this.parent.isFrozenGrid()) {\n                                    this.mhBdrElement.style.borderWidth = str.includes('2') ? this.top_right_left\n                                        : rtl ? this.top_bottom_left : this.top_right_bottom;\n                                }\n                            }\n                        }\n                    }\n                    break;\n                default:\n                    this.bdrElement.style.borderWidth = this.all_border;\n                    if (this.parent.isFrozenGrid()) {\n                        this.mcBdrElement.style.borderWidth = this.all_border;\n                    }\n                    if (this.parent.frozenRows) {\n                        this.fhBdrElement.style.borderWidth = this.all_border;\n                        if (this.parent.isFrozenGrid()) {\n                            this.mhBdrElement.style.borderWidth = this.all_border;\n                        }\n                    }\n                    break;\n            }\n        }\n    };\n    Selection.prototype.createBorders = function () {\n        if (!this.bdrElement) {\n            this.bdrElement = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n                className: 'e-xlsel', id: this.parent.element.id + '_bdr',\n                styles: 'width: 2px; border-width: 0;'\n            }));\n            if (this.parent.isFrozenGrid()) {\n                this.mcBdrElement = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n                    className: 'e-xlsel', id: this.parent.element.id + '_mcbdr',\n                    styles: 'height: 2px; border-width: 0;'\n                }));\n                if (this.parent.getFrozenMode() === literals.leftRight) {\n                    this.frcBdrElement = this.parent.getContentTable().parentElement.appendChild(createElement('div', {\n                        className: 'e-xlsel', id: this.parent.element.id + '_frcbdr',\n                        styles: 'height: 2px; border-width: 0;'\n                    }));\n                }\n            }\n            if (this.parent.frozenRows) {\n                this.fhBdrElement = this.parent.getHeaderTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_fhbdr', styles: 'height: 2px;' }));\n            }\n            if (this.parent.frozenRows && this.parent.isFrozenGrid()) {\n                this.mhBdrElement = this.parent.getHeaderTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_mhbdr', styles: 'height: 2px;' }));\n                if (this.parent.getFrozenMode() === literals.leftRight) {\n                    this.frhBdrElement = this.parent.getHeaderTable().parentElement.appendChild(createElement('div', { className: 'e-xlsel', id: this.parent.element.id + '_frhbdr', styles: 'height: 2px;' }));\n                }\n            }\n        }\n    };\n    Selection.prototype.showHideBorders = function (display, freeze) {\n        if (this.bdrElement) {\n            this.bdrElement.style.display = display;\n            if (this.parent.isFrozenGrid()) {\n                var parentEle = this.parent.getContentTable();\n                removeClass(parentEle.querySelectorAll('.e-xlsel-top-border'), 'e-xlsel-top-border');\n                removeClass(parentEle.querySelectorAll('.e-xlsel-left-border'), 'e-xlsel-left-border');\n                removeClass(parentEle.querySelectorAll('.e-xlsel-right-border'), 'e-xlsel-right-border');\n                removeClass(parentEle.querySelectorAll('.e-xlsel-bottom-border'), 'e-xlsel-bottom-border');\n                if (!freeze) {\n                    this.mcBdrElement.style.display = display;\n                }\n                if (this.parent.getFrozenMode() === literals.leftRight) {\n                    this.frcBdrElement.style.display = display;\n                }\n            }\n            if (this.parent.frozenRows) {\n                var parentEle = this.parent.getHeaderTable();\n                removeClass(parentEle.querySelectorAll('.e-xlsel-top-border'), 'e-xlsel-top-border');\n                removeClass(parentEle.querySelectorAll('.e-xlsel-left-border'), 'e-xlsel-left-border');\n                removeClass(parentEle.querySelectorAll('.e-xlsel-right-border'), 'e-xlsel-right-border');\n                removeClass(parentEle.querySelectorAll('.e-xlsel-bottom-border'), 'e-xlsel-bottom-border');\n                this.fhBdrElement.style.display = display;\n            }\n            if (this.parent.frozenRows && this.parent.isFrozenGrid()) {\n                if (!freeze) {\n                    this.mhBdrElement.style.display = display;\n                }\n                if (this.parent.getFrozenMode() === literals.leftRight) {\n                    this.frhBdrElement.style.display = display;\n                }\n            }\n        }\n    };\n    Selection.prototype.drawAFBorders = function () {\n        if (!this.bdrAFBottom) {\n            this.createAFBorders();\n        }\n        this.positionAFBorders();\n    };\n    Selection.prototype.positionAFBorders = function () {\n        if (!this.startCell || !this.bdrAFLeft) {\n            return;\n        }\n        var stOff = this.startAFCell.getBoundingClientRect();\n        var endOff = this.endAFCell.getBoundingClientRect();\n        var top = endOff.top - stOff.top > 0 ? 1 : 0;\n        var firstCellTop = endOff.top - stOff.top >= 0 && (parentsUntil(this.startAFCell, literals.movableContent) ||\n            parentsUntil(this.startAFCell, 'e-frozencontent')) && this.isFirstRow(this.startAFCell) ? 1.5 : 0;\n        var firstCellLeft = (parentsUntil(this.startAFCell, literals.movableContent) ||\n            parentsUntil(this.startAFCell, literals.movableHeader)) && this.isFirstCell(this.startAFCell) ? 1 : 0;\n        var rowHeight = this.isLastRow(this.endAFCell) && (parentsUntil(this.endAFCell, literals.movableContent) ||\n            parentsUntil(this.endAFCell, 'e-frozencontent')) ? 2 : 0;\n        var parentOff = this.startAFCell.offsetParent.getBoundingClientRect();\n        var parentRect = this.parent.element.getBoundingClientRect();\n        var sTop = this.startAFCell.offsetParent.parentElement.scrollTop;\n        var sLeft = this.startAFCell.offsetParent.parentElement.scrollLeft;\n        var scrollTop = sTop - this.startAFCell.offsetTop;\n        var scrollLeft = sLeft - this.startAFCell.offsetLeft;\n        var totalHeight = this.parent.element.clientHeight - getScrollBarWidth();\n        if (this.parent.allowPaging) {\n            totalHeight -= this.parent.element.querySelector('.e-pager').offsetHeight;\n        }\n        if (this.parent.aggregates.length) {\n            totalHeight -= this.parent.getFooterContent().offsetHeight;\n        }\n        var totalWidth = this.parent.element.clientWidth - (this.parent.height !== 'auto' ? getScrollBarWidth() : 0);\n        scrollTop = scrollTop > 0 ? Math.floor(scrollTop) - 1 : 0;\n        scrollLeft = scrollLeft > 0 ? scrollLeft : 0;\n        var left = stOff.left - parentRect.left;\n        if (!this.parent.enableRtl) {\n            this.bdrAFLeft.style.left = left - firstCellLeft + scrollLeft - 1 + 'px';\n            this.bdrAFRight.style.left = endOff.left - parentRect.left - 2 + endOff.width + 'px';\n            this.bdrAFRight.style.width = totalWidth <= parseInt(this.bdrAFRight.style.left, 10) ? '0px' : '2px';\n            this.bdrAFTop.style.left = left + scrollLeft - 0.5 + 'px';\n            this.bdrAFTop.style.width = parseInt(this.bdrAFRight.style.left, 10) - parseInt(this.bdrAFLeft.style.left, 10)\n                - firstCellLeft + 1 + 'px';\n            if (totalWidth <= (parseInt(this.bdrAFTop.style.width, 10) + parseInt(this.bdrAFTop.style.left, 10))) {\n                var leftRemove = (parseInt(this.bdrAFTop.style.width, 10) + parseInt(this.bdrAFTop.style.left, 10)) - totalWidth;\n                this.bdrAFTop.style.width = parseInt(this.bdrAFTop.style.width, 10) - leftRemove + 'px';\n            }\n        }\n        else {\n            var scrolloffSet = (parentsUntil(this.startAFCell, literals.movableContent) ||\n                parentsUntil(this.startAFCell, literals.movableHeader)) ? stOff.right -\n                this.startAFCell.offsetParent.parentElement.getBoundingClientRect().width -\n                parentRect.left : 0;\n            this.bdrAFLeft.style.right = parentRect.right - endOff.right - 2 + endOff.width + 'px';\n            this.bdrAFLeft.style.width = totalWidth <= parseInt(this.bdrAFLeft.style.right, 10) ? '0px' : '2px';\n            this.bdrAFRight.style.right = parentRect.right - stOff.right - firstCellLeft + scrolloffSet - 1 + 'px';\n            this.bdrAFTop.style.left = endOff.left - parentRect.left - 0.5 + 'px';\n            this.bdrAFTop.style.width = parseInt(this.bdrAFLeft.style.right, 10) - parseInt(this.bdrAFRight.style.right, 10)\n                - firstCellLeft + 1 + 'px';\n            if (parseInt(this.bdrAFTop.style.left, 10) < 0) {\n                this.bdrAFTop.style.width = parseInt(this.bdrAFTop.style.width, 10) + parseInt(this.bdrAFTop.style.left, 10) + 'px';\n                this.bdrAFTop.style.left = '0px';\n            }\n        }\n        this.bdrAFLeft.style.top = stOff.top - parentRect.top - firstCellTop + scrollTop + 'px';\n        this.bdrAFLeft.style.height = endOff.top - stOff.top > 0 ?\n            (endOff.top - parentOff.top + endOff.height + 1) - (stOff.top - parentOff.top) + firstCellTop - rowHeight - scrollTop + 'px' :\n            endOff.height + firstCellTop - rowHeight - scrollTop + 'px';\n        this.bdrAFRight.style.top = this.bdrAFLeft.style.top;\n        this.bdrAFRight.style.height = parseInt(this.bdrAFLeft.style.height, 10) + 'px';\n        this.bdrAFTop.style.top = this.bdrAFRight.style.top;\n        this.bdrAFBottom.style.left = this.bdrAFTop.style.left;\n        this.bdrAFBottom.style.top = parseFloat(this.bdrAFLeft.style.top) + parseFloat(this.bdrAFLeft.style.height) - top - 1 + 'px';\n        this.bdrAFBottom.style.width = totalHeight <= parseFloat(this.bdrAFBottom.style.top) ? '0px' : this.bdrAFTop.style.width;\n        if (totalHeight <= (parseInt(this.bdrAFLeft.style.height, 10) + parseInt(this.bdrAFLeft.style.top, 10))) {\n            var topRemove = parseInt(this.bdrAFLeft.style.height, 10) + parseInt(this.bdrAFLeft.style.top, 10) - totalHeight;\n            this.bdrAFLeft.style.height = parseInt(this.bdrAFLeft.style.height, 10) - topRemove + 'px';\n            this.bdrAFRight.style.height = parseInt(this.bdrAFLeft.style.height, 10) + 'px';\n        }\n    };\n    Selection.prototype.createAFBorders = function () {\n        if (!this.bdrAFLeft) {\n            this.bdrAFLeft = this.parent.element.appendChild(createElement('div', { className: 'e-xlselaf', id: this.parent.element.id + '_bdrafleft', styles: 'width: 2px;' }));\n            this.bdrAFRight = this.parent.element.appendChild(createElement('div', { className: 'e-xlselaf', id: this.parent.element.id + '_bdrafright', styles: 'width: 2px;' }));\n            this.bdrAFBottom = this.parent.element.appendChild(createElement('div', { className: 'e-xlselaf', id: this.parent.element.id + '_bdrafbottom', styles: 'height: 2px;' }));\n            this.bdrAFTop = this.parent.element.appendChild(createElement('div', { className: 'e-xlselaf', id: this.parent.element.id + '_bdraftop', styles: 'height: 2px;' }));\n        }\n    };\n    Selection.prototype.showAFBorders = function () {\n        if (this.bdrAFLeft) {\n            this.bdrAFLeft.style.display = '';\n            this.bdrAFRight.style.display = '';\n            this.bdrAFBottom.style.display = '';\n            this.bdrAFTop.style.display = '';\n        }\n    };\n    Selection.prototype.hideAFBorders = function () {\n        if (this.bdrAFLeft) {\n            this.bdrAFLeft.style.display = 'none';\n            this.bdrAFRight.style.display = 'none';\n            this.bdrAFBottom.style.display = 'none';\n            this.bdrAFTop.style.display = 'none';\n        }\n    };\n    Selection.prototype.updateValue = function (rIdx, cIdx, cell) {\n        var args = this.createBeforeAutoFill(rIdx, cIdx, cell);\n        if (!args.cancel) {\n            var col = this.parent.getColumnByIndex(cIdx);\n            if (this.parent.editModule && cell) {\n                if (col.type === 'number') {\n                    this.parent.editModule.updateCell(rIdx, col.field, parseFloat(args.value));\n                }\n                else {\n                    this.parent.editModule.updateCell(rIdx, col.field, args.value);\n                }\n            }\n        }\n    };\n    Selection.prototype.createBeforeAutoFill = function (rowIndex, colIndex, cell) {\n        var col = this.parent.getColumnByIndex(colIndex);\n        var args = {\n            column: col,\n            value: cell.innerText\n        };\n        this.parent.trigger(events.beforeAutoFill, args);\n        return args;\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    Selection.prototype.getAutoFillCells = function (rowIndex, startCellIdx) {\n        var cls = '.e-cellselectionbackground';\n        var cells = [].slice.call(this.parent.getDataRows()[parseInt(rowIndex.toString(), 10)].querySelectorAll(cls));\n        return cells;\n    };\n    Selection.prototype.selectLikeAutoFill = function (e, isApply) {\n        var startrowIdx = parseInt(parentsUntil(this.startAFCell, literals.row).getAttribute(literals.dataRowIndex), 10);\n        var startCellIdx = parseInt(this.startAFCell.getAttribute(literals.dataColIndex), 10);\n        var endrowIdx = parseInt(parentsUntil(this.endAFCell, literals.row).getAttribute(literals.dataRowIndex), 10);\n        var endCellIdx = parseInt(this.endAFCell.getAttribute(literals.dataColIndex), 10);\n        var rowLen = this.selectedRowCellIndexes.length - 1;\n        var colLen = this.selectedRowCellIndexes[0].cellIndexes.length - 1;\n        switch (true) { //direction\n            case !isApply && this.endAFCell.classList.contains('e-cellselectionbackground') &&\n                !!parentsUntil(e.target, literals.rowCell):\n                this.startAFCell = this.parent.getCellFromIndex(startrowIdx, startCellIdx);\n                this.endAFCell = this.parent.getCellFromIndex(startrowIdx + rowLen, startCellIdx + colLen);\n                this.drawAFBorders();\n                break;\n            case this.autoFillRLselection && startCellIdx + colLen < endCellIdx && //right\n                endCellIdx - startCellIdx - colLen + 1 > endrowIdx - startrowIdx - rowLen // right bottom\n                && endCellIdx - startCellIdx - colLen + 1 > startrowIdx - endrowIdx: //right top\n                this.endAFCell = this.parent.getCellFromIndex(startrowIdx + rowLen, endCellIdx);\n                endrowIdx = parseInt(parentsUntil(this.endAFCell, literals.row).getAttribute(literals.dataRowIndex), 10);\n                endCellIdx = parseInt(this.endAFCell.getAttribute(literals.dataColIndex), 10);\n                if (!isApply) {\n                    this.drawAFBorders();\n                }\n                else {\n                    var cellIdx = parseInt(this.endCell.getAttribute(literals.dataColIndex), 10);\n                    for (var i = startrowIdx; i <= endrowIdx; i++) {\n                        var cells = this.getAutoFillCells(i, startCellIdx);\n                        var c = 0;\n                        for (var j = cellIdx + 1; j <= endCellIdx; j++) {\n                            if (c > colLen) {\n                                c = 0;\n                            }\n                            this.updateValue(i, j, cells[parseInt(c.toString(), 10)]);\n                            c++;\n                        }\n                    }\n                    this.selectCellsByRange({ rowIndex: startrowIdx, cellIndex: this.startCellIndex }, { rowIndex: endrowIdx, cellIndex: endCellIdx });\n                }\n                break;\n            case this.autoFillRLselection && startCellIdx > endCellIdx && // left\n                startCellIdx - endCellIdx + 1 > endrowIdx - startrowIdx - rowLen && //left top\n                startCellIdx - endCellIdx + 1 > startrowIdx - endrowIdx: // left bottom\n                this.startAFCell = this.parent.getCellFromIndex(startrowIdx, endCellIdx);\n                this.endAFCell = this.endCell;\n                if (!isApply) {\n                    this.drawAFBorders();\n                }\n                else {\n                    for (var i = startrowIdx; i <= startrowIdx + rowLen; i++) {\n                        var cells = this.getAutoFillCells(i, startCellIdx);\n                        cells.reverse();\n                        var c = 0;\n                        for (var j = this.startCellIndex - 1; j >= endCellIdx; j--) {\n                            if (c > colLen) {\n                                c = 0;\n                            }\n                            this.updateValue(i, j, cells[parseInt(c.toString(), 10)]);\n                            c++;\n                        }\n                    }\n                    this.selectCellsByRange({ rowIndex: startrowIdx, cellIndex: endCellIdx }, { rowIndex: startrowIdx + rowLen, cellIndex: this.startCellIndex + colLen });\n                }\n                break;\n            case startrowIdx > endrowIdx: //up\n                this.startAFCell = this.parent.getCellFromIndex(endrowIdx, startCellIdx);\n                this.endAFCell = this.endCell;\n                if (!isApply) {\n                    this.drawAFBorders();\n                }\n                else {\n                    var trIdx = parseInt(this.endCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n                    var r = trIdx;\n                    for (var i = startrowIdx - 1; i >= endrowIdx; i--) {\n                        if (r === this.startIndex - 1) {\n                            r = trIdx;\n                        }\n                        var cells = this.getAutoFillCells(r, startCellIdx);\n                        var c = 0;\n                        r--;\n                        for (var j = this.startCellIndex; j <= this.startCellIndex + colLen; j++) {\n                            this.updateValue(i, j, cells[parseInt(c.toString(), 10)]);\n                            c++;\n                        }\n                    }\n                    this.selectCellsByRange({ rowIndex: endrowIdx, cellIndex: startCellIdx + colLen }, { rowIndex: startrowIdx + rowLen, cellIndex: startCellIdx });\n                }\n                break;\n            default: //down\n                this.endAFCell = this.parent.getCellFromIndex(endrowIdx, startCellIdx + colLen);\n                if (!isApply) {\n                    this.drawAFBorders();\n                }\n                else {\n                    var trIdx = parseInt(this.endCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n                    var r = this.startIndex;\n                    for (var i = trIdx + 1; i <= endrowIdx; i++) {\n                        if (r === trIdx + 1) {\n                            r = this.startIndex;\n                        }\n                        var cells = this.getAutoFillCells(r, startCellIdx);\n                        r++;\n                        var c = 0;\n                        for (var m = this.startCellIndex; m <= this.startCellIndex + colLen; m++) {\n                            this.updateValue(i, m, cells[parseInt(c.toString(), 10)]);\n                            c++;\n                        }\n                    }\n                    this.selectCellsByRange({ rowIndex: trIdx - rowLen, cellIndex: startCellIdx }, { rowIndex: endrowIdx, cellIndex: startCellIdx + colLen });\n                }\n                break;\n        }\n    };\n    Selection.prototype.mouseUpHandler = function (e) {\n        this.stopTimer();\n        document.body.classList.remove('e-disableuserselect');\n        if (this.element && !isNullOrUndefined(this.element.parentElement)) {\n            remove(this.element);\n        }\n        if (this.isDragged && this.selectedRowCellIndexes.length === 1 && this.selectedRowCellIndexes[0].cellIndexes.length === 1) {\n            this.mUPTarget = parentsUntil(e.target, literals.rowCell);\n        }\n        else {\n            this.mUPTarget = null;\n        }\n        var closeRowCell = closest(e.target, '.e-rowcell');\n        if (this.isDragged && !this.isAutoFillSel && this.selectionSettings.mode === 'Cell' &&\n            closeRowCell && closeRowCell.classList.contains(literals.rowCell)) {\n            var rowIndex = parseInt(closeRowCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n            var cellIndex = parseInt(closeRowCell.getAttribute(literals.dataColIndex), 10);\n            this.isDragged = false;\n            this.clearCellSelection();\n            this.selectCellsByRange({ rowIndex: this.startDIndex, cellIndex: this.startDCellIndex }, { rowIndex: rowIndex, cellIndex: cellIndex });\n        }\n        this.isDragged = false;\n        this.updateAutoFillPosition();\n        if (this.isAutoFillSel) {\n            this.preventFocus = true;\n            var lastCell = parentsUntil(e.target, literals.rowCell);\n            this.endAFCell = lastCell ? lastCell : this.endCell === this.endAFCell ? this.startAFCell : this.endAFCell;\n            this.startAFCell = this.startCell;\n            this.updateStartCellsIndex();\n            this.selectLikeAutoFill(e, true);\n            this.updateAutoFillPosition();\n            this.hideAFBorders();\n            this.positionBorders();\n            if (this.parent.isFrozenGrid()) {\n                this.showHideBorders('none', true);\n                this.refreshFrozenBorders();\n            }\n            this.isAutoFillSel = false;\n            if (this.parent.aggregates.length > 0) {\n                this.parent.notify(events.refreshFooterRenderer, {});\n            }\n            this.preventFocus = false;\n        }\n        EventHandler.remove(this.parent.getContent(), 'mousemove', this.mouseMoveHandler);\n        if (this.parent.frozenRows) {\n            EventHandler.remove(this.parent.getHeaderContent(), 'mousemove', this.mouseMoveHandler);\n        }\n        EventHandler.remove(document, 'mouseup', this.mouseUpHandler);\n    };\n    Selection.prototype.hideAutoFill = function () {\n        if (this.autofill) {\n            this.autofill.style.display = 'none';\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Selection.prototype.updateAutoFillPosition = function () {\n        if (this.parent.enableAutoFill && !this.parent.isEdit &&\n            this.selectionSettings.cellSelectionMode.indexOf('Box') > -1 && !this.isRowType() && !this.isSingleSel()\n            && this.selectedRowCellIndexes.length) {\n            var index = parseInt(this.target.getAttribute(literals.dataColIndex), 10);\n            var rindex = parseInt(this.target.getAttribute('index'), 10);\n            var rowIndex = this.selectedRowCellIndexes[this.selectedRowCellIndexes.length - 1].rowIndex;\n            var cells = this.getAutoFillCells(rowIndex, index).filter(function (ele) { return ele.style.display === ''; });\n            var col = this.parent.getColumnByIndex(index);\n            var isFrozenCol = col.getFreezeTableName() === 'movable';\n            var isFrozenRow = rindex < this.parent.frozenRows;\n            var isFrozenRight = this.parent.getFrozenMode() === literals.leftRight\n                && col.getFreezeTableName() === literals.frozenRight;\n            if (!select('#' + this.parent.element.id + '_autofill', parentsUntil(this.target, literals.table))) {\n                if (select('#' + this.parent.element.id + '_autofill', this.parent.element)) {\n                    select('#' + this.parent.element.id + '_autofill', this.parent.element).remove();\n                }\n                this.autofill = createElement('div', { className: 'e-autofill', id: this.parent.element.id + '_autofill' });\n                this.autofill.style.display = 'none';\n                if (this.target.classList.contains('e-leftfreeze') || this.target.classList.contains('e-rightfreeze') ||\n                    this.target.classList.contains('e-fixedfreeze')) {\n                    this.autofill.classList.add('e-freeze-autofill');\n                }\n                if (!isFrozenRow) {\n                    if (!isFrozenCol) {\n                        this.parent.getContentTable().parentElement.appendChild(this.autofill);\n                    }\n                    else {\n                        this.parent.getContentTable().parentElement.appendChild(this.autofill);\n                    }\n                }\n                else {\n                    if (!isFrozenCol) {\n                        this.parent.getHeaderTable().parentElement.appendChild(this.autofill);\n                    }\n                    else {\n                        this.parent.getHeaderTable().parentElement.appendChild(this.autofill);\n                    }\n                }\n                if (isFrozenRight) {\n                    if (isFrozenRow) {\n                        this.parent.getHeaderTable().parentElement.appendChild(this.autofill);\n                    }\n                    else {\n                        this.parent.getContentTable().parentElement.appendChild(this.autofill);\n                    }\n                }\n            }\n            var cell = cells[cells.length - 1];\n            if (cell && cell.offsetParent) {\n                var clientRect = cell.getBoundingClientRect();\n                var parentOff = cell.offsetParent.getBoundingClientRect();\n                if (cell.offsetParent.classList.contains('e-content') || cell.offsetParent.classList.contains('e-headercontent')) {\n                    parentOff = cell.offsetParent.querySelector('table').getBoundingClientRect();\n                }\n                var colWidth = this.isLastCell(cell) ? 4 : 0;\n                var rowHeight = this.isLastRow(cell) ? 3 : 0;\n                if (!this.parent.enableRtl) {\n                    this.autofill.style.left = clientRect.left - parentOff.left + clientRect.width - 4 - colWidth + 'px';\n                }\n                else {\n                    this.autofill.style.right = parentOff.right - clientRect.right + clientRect.width - 4 - colWidth + 'px';\n                }\n                this.autofill.style.top = clientRect.top - parentOff.top + clientRect.height - 5 - rowHeight + 'px';\n            }\n            this.autofill.style.display = '';\n        }\n        else {\n            this.hideAutoFill();\n        }\n    };\n    Selection.prototype.mouseDownHandler = function (e) {\n        this.mouseButton = e.button;\n        var target = e.target;\n        var gObj = this.parent;\n        var isDrag;\n        var gridElement = parentsUntil(target, 'e-grid');\n        if (gridElement && gridElement.id !== gObj.element.id || parentsUntil(target, literals.headerContent) && !this.parent.frozenRows ||\n            parentsUntil(target, 'e-editedbatchcell') || parentsUntil(target, literals.editedRow)) {\n            return;\n        }\n        if (e.shiftKey || e.ctrlKey) {\n            e.preventDefault();\n        }\n        if (parentsUntil(target, literals.rowCell) && !e.shiftKey && !e.ctrlKey) {\n            if (gObj.selectionSettings.cellSelectionMode.indexOf('Box') > -1 && !this.isRowType() && !this.isSingleSel()) {\n                this.isCellDrag = true;\n                isDrag = true;\n            }\n            else if (gObj.allowRowDragAndDrop && !gObj.isEdit && !this.parent.selectionSettings.checkboxOnly) {\n                this.isRowDragSelected = false;\n                if (!this.isRowType() || this.isSingleSel() || closest(target, 'td').classList.contains('e-selectionbackground')) {\n                    this.isDragged = false;\n                    return;\n                }\n                isDrag = true;\n                this.element = this.parent.createElement('div', { className: 'e-griddragarea' });\n                gObj.getContent().appendChild(this.element);\n            }\n            if (isDrag) {\n                this.enableDrag(e, true);\n            }\n        }\n        this.updateStartEndCells();\n        if (target.classList.contains('e-autofill') || target.classList.contains('e-xlsel')) {\n            this.isCellDrag = true;\n            this.isAutoFillSel = true;\n            this.enableDrag(e);\n        }\n    };\n    Selection.prototype.updateStartEndCells = function () {\n        var cells = [].slice.call(this.parent.element.getElementsByClassName('e-cellselectionbackground'));\n        this.startCell = cells[0];\n        this.endCell = cells[cells.length - 1];\n        if (this.startCell) {\n            this.startIndex = parseInt(this.startCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n            this.startCellIndex = parseInt(parentsUntil(this.startCell, literals.rowCell).getAttribute(literals.dataColIndex), 10);\n        }\n    };\n    Selection.prototype.updateStartCellsIndex = function () {\n        if (this.startCell) {\n            this.startIndex = parseInt(this.startCell.parentElement.getAttribute(literals.dataRowIndex), 10);\n            this.startCellIndex = parseInt(parentsUntil(this.startCell, literals.rowCell).getAttribute(literals.dataColIndex), 10);\n        }\n    };\n    Selection.prototype.enableDrag = function (e, isUpdate) {\n        var gObj = this.parent;\n        if (isUpdate) {\n            var tr = closest(e.target, 'tr');\n            this.startDIndex = parseInt(tr.getAttribute(literals.dataRowIndex), 10);\n            this.startDCellIndex = parseInt(parentsUntil(e.target, literals.rowCell).getAttribute(literals.dataColIndex), 10);\n        }\n        document.body.classList.add('e-disableuserselect');\n        var gBRect = gObj.element.getBoundingClientRect();\n        var postion = getPosition(e);\n        this.x = postion.x - gBRect.left;\n        this.y = postion.y - gBRect.top;\n        EventHandler.add(gObj.getContent(), 'mousemove', this.mouseMoveHandler, this);\n        if (this.parent.frozenRows) {\n            EventHandler.add(gObj.getHeaderContent(), 'mousemove', this.mouseMoveHandler, this);\n        }\n        EventHandler.add(document, 'mouseup', this.mouseUpHandler, this);\n    };\n    Selection.prototype.clearSelAfterRefresh = function (e) {\n        var isInfiniteScroll = this.parent.enableInfiniteScrolling && e.requestType === 'infiniteScroll';\n        if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection && !isInfiniteScroll) {\n            this.clearSelection();\n        }\n        if ((e.requestType === 'virtualscroll' || isInfiniteScroll) && this.parent.isPersistSelection && this.isPartialSelection\n            && this.isHdrSelectAllClicked) {\n            var rowObj = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; });\n            var indexes = [];\n            this.selectedRowState = {};\n            this.persistSelectedData = [];\n            for (var i = 0; i < rowObj.length; i++) {\n                indexes.push(rowObj[parseInt(i.toString(), 10)].index);\n                var pkValue = this.getPkValue(this.primaryKey, rowObj[parseInt(i.toString(), 10)].data);\n                this.selectedRowState[\"\" + pkValue] = true;\n                this.persistSelectedData.push(rowObj[parseInt(i.toString(), 10)].data);\n            }\n            this.selectedRowIndexes = indexes;\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Selection.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.evtHandlers = [{ event: events.uiUpdate, handler: this.enableAfterRender },\n            { event: events.initialEnd, handler: this.initializeSelection },\n            { event: events.rowSelectionComplete, handler: this.onActionComplete },\n            { event: events.cellSelectionComplete, handler: this.onActionComplete },\n            { event: events.inBoundModelChanged, handler: this.onPropertyChanged },\n            { event: events.cellFocused, handler: this.onCellFocused },\n            { event: events.beforeFragAppend, handler: this.clearSelAfterRefresh },\n            { event: events.columnPositionChanged, handler: this.columnPositionChanged },\n            { event: events.contentReady, handler: this.initialEnd },\n            { event: events.rowsRemoved, handler: this.rowsRemoved },\n            { event: events.headerRefreshed, handler: this.refreshHeader },\n            { event: events.destroy, handler: this.destroy }];\n        addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n        this.actionBeginFunction = this.actionBegin.bind(this);\n        this.actionCompleteFunction = this.actionComplete.bind(this);\n        this.parent.addEventListener(events.actionBegin, this.actionBeginFunction);\n        this.parent.addEventListener(events.actionComplete, this.actionCompleteFunction);\n        this.addEventListener_checkbox();\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Selection.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        EventHandler.remove(document, 'mouseup', this.mouseUpHandler);\n        EventHandler.remove(this.parent.getContent(), 'mousedown', this.mouseDownHandler);\n        EventHandler.remove(this.parent.getHeaderContent(), 'mousedown', this.mouseDownHandler);\n        addRemoveEventListener(this.parent, this.evtHandlers, false);\n        this.parent.removeEventListener(events.actionBegin, this.actionBeginFunction);\n        this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunction);\n        this.removeEventListener_checkbox();\n    };\n    Selection.prototype.wireEvents = function () {\n        this.isMacOS = navigator.userAgent.indexOf('Mac OS') !== -1;\n        if (this.isMacOS) {\n            EventHandler.add(this.parent.element, 'keydown', this.keyDownHandler, this);\n            EventHandler.add(this.parent.element, 'keyup', this.keyUpHandler, this);\n        }\n        else {\n            if (!this.parent.allowKeyboard) {\n                EventHandler.add(this.parent.element, 'keydown', this.keyDownHandler, this);\n            }\n        }\n    };\n    Selection.prototype.unWireEvents = function () {\n        if (this.isMacOS) {\n            EventHandler.remove(this.parent.element, 'keydown', this.keyDownHandler);\n            EventHandler.remove(this.parent.element, 'keyup', this.keyUpHandler);\n        }\n        else {\n            if (!this.parent.allowKeyboard) {\n                EventHandler.remove(this.parent.element, 'keydown', this.keyDownHandler);\n            }\n        }\n    };\n    Selection.prototype.columnPositionChanged = function () {\n        if (!this.parent.isPersistSelection) {\n            this.clearSelection();\n        }\n    };\n    Selection.prototype.refreshHeader = function () {\n        this.setCheckAllState();\n    };\n    Selection.prototype.rowsRemoved = function (e) {\n        for (var i = 0; i < e.records.length; i++) {\n            var pkValue = this.getPkValue(this.primaryKey, e.records[parseInt(i.toString(), 10)]);\n            delete (this.selectedRowState[\"\" + pkValue]);\n            --this.totalRecordsCount;\n        }\n        this.setCheckAllState();\n    };\n    Selection.prototype.beforeFragAppend = function (e) {\n        if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection) {\n            this.clearSelection();\n        }\n    };\n    Selection.prototype.getCheckAllBox = function () {\n        return this.parent.getHeaderContent().querySelector('.e-checkselectall');\n    };\n    Selection.prototype.enableAfterRender = function (e) {\n        if (e.module === this.getModuleName() && e.enable) {\n            this.render();\n            this.initPerisistSelection();\n        }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    Selection.prototype.render = function (e) {\n        EventHandler.add(this.parent.getContent(), 'mousedown', this.mouseDownHandler, this);\n        EventHandler.add(this.parent.getHeaderContent(), 'mousedown', this.mouseDownHandler, this);\n    };\n    Selection.prototype.onPropertyChanged = function (e) {\n        if (e.module !== this.getModuleName()) {\n            return;\n        }\n        var gObj = this.parent;\n        if (!isNullOrUndefined(e.properties.type)) {\n            if (this.selectionSettings.type === 'Single') {\n                gObj.element.removeAttribute('aria-multiselectable');\n                if (this.selectedRowCellIndexes.length > 1) {\n                    this.clearCellSelection();\n                    this.prevCIdxs = undefined;\n                }\n                if (this.selectedRowIndexes.length > 1) {\n                    this.clearRowSelection();\n                    this.prevRowIndex = undefined;\n                }\n                if (this.selectedColumnsIndexes.length > 1) {\n                    this.clearColumnSelection();\n                    this.prevColIndex = undefined;\n                }\n                this.enableSelectMultiTouch = false;\n                this.hidePopUp();\n            }\n            else if (this.selectionSettings.type === 'Multiple') {\n                gObj.element.setAttribute('aria-multiselectable', 'true');\n            }\n        }\n        if (!isNullOrUndefined(e.properties.mode) ||\n            !isNullOrUndefined(e.properties.cellSelectionMode)) {\n            this.clearSelection();\n            this.prevRowIndex = undefined;\n            this.prevCIdxs = undefined;\n            this.prevColIndex = undefined;\n        }\n        this.isPersisted = true;\n        this.checkBoxSelectionChanged();\n        this.isPersisted = false;\n        if (!this.parent.isCheckBoxSelection) {\n            this.initPerisistSelection();\n        }\n        var checkboxColumn = this.parent.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n        if (checkboxColumn.length) {\n            gObj.isCheckBoxSelection = !(this.selectionSettings.checkboxMode === 'ResetOnRowClick');\n        }\n        this.drawBorders();\n    };\n    Selection.prototype.hidePopUp = function () {\n        if (this.parent.element.querySelector('.e-gridpopup').getElementsByClassName('e-rowselect').length) {\n            this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n        }\n    };\n    Selection.prototype.initialEnd = function () {\n        if (!this.selectedRowIndexes.length) {\n            this.parent.off(events.contentReady, this.initialEnd);\n            this.selectRow(this.parent.selectedRowIndex);\n        }\n    };\n    Selection.prototype.checkBoxSelectionChanged = function () {\n        var gobj = this.parent;\n        gobj.off(events.contentReady, this.checkBoxSelectionChanged);\n        var checkboxColumn = gobj.getColumns().filter(function (col) { return col.type === 'checkbox'; });\n        if (checkboxColumn.length > 0) {\n            gobj.isCheckBoxSelection = true;\n            this.chkField = checkboxColumn[0].field;\n            this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n            if (isNullOrUndefined(this.totalRecordsCount)) {\n                this.totalRecordsCount = this.getCurrentBatchRecordChanges().length;\n            }\n            if (this.isSingleSel()) {\n                gobj.selectionSettings.type = 'Multiple';\n                gobj.dataBind();\n            }\n            else {\n                this.initPerisistSelection();\n            }\n        }\n        if (!gobj.isCheckBoxSelection && !this.isPersisted) {\n            this.chkField = null;\n            this.initPerisistSelection();\n        }\n    };\n    Selection.prototype.initPerisistSelection = function () {\n        var gobj = this.parent;\n        if (this.parent.selectionSettings.persistSelection && this.parent.getPrimaryKeyFieldNames().length > 0) {\n            gobj.isPersistSelection = true;\n            this.ensureCheckboxFieldSelection();\n        }\n        else if (this.parent.getPrimaryKeyFieldNames().length > 0) {\n            gobj.isPersistSelection = false;\n            this.ensureCheckboxFieldSelection();\n        }\n        else {\n            gobj.isPersistSelection = false;\n            this.selectedRowState = {};\n        }\n    };\n    Selection.prototype.ensureCheckboxFieldSelection = function () {\n        var gobj = this.parent;\n        this.primaryKey = this.parent.getPrimaryKeyFieldNames()[0];\n        if (!gobj.enableVirtualization && this.chkField\n            && ((gobj.isPersistSelection && Object.keys(this.selectedRowState).length === 0) ||\n                !gobj.isPersistSelection)) {\n            var data = this.parent.getDataModule();\n            var query = new Query().where(this.chkField, 'equal', true);\n            if (!query.params) {\n                query.params = this.parent.query.params;\n            }\n            var dataManager = data.getData({}, query);\n            // eslint-disable-next-line @typescript-eslint/no-this-alias\n            var proxy_1 = this;\n            this.parent.showSpinner();\n            dataManager.then(function (e) {\n                proxy_1.dataSuccess(e.result);\n                proxy_1.refreshPersistSelection();\n                proxy_1.parent.hideSpinner();\n            });\n        }\n    };\n    Selection.prototype.dataSuccess = function (res) {\n        var data = (this.parent.getDataModule().isRemote() && !isNullOrUndefined(res['result'])) ? res['result'] : res;\n        for (var i = 0; i < data.length; i++) {\n            var pkValue = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n            if (isNullOrUndefined(this.selectedRowState[\"\" + pkValue]) && data[parseInt(i.toString(), 10)][this.chkField]) {\n                this.selectedRowState[\"\" + pkValue] = data[parseInt(i.toString(), 10)][this.chkField];\n            }\n        }\n        this.persistSelectedData = data;\n    };\n    Selection.prototype.setRowSelection = function (state) {\n        if (!(this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n            && this.parent.dataSource.result))) {\n            if (state) {\n                if (this.isPartialSelection && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n                    var rowObj = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; });\n                    for (var _i = 0, rowObj_1 = rowObj; _i < rowObj_1.length; _i++) {\n                        var row = rowObj_1[_i];\n                        this.selectedRowState[this.getPkValue(this.primaryKey, row.data)] = true;\n                    }\n                }\n                else {\n                    var selectedData = this.isPartialSelection ? this.parent.partialSelectedRecords : this.getData();\n                    if (this.parent.groupSettings.columns.length) {\n                        for (var _a = 0, _b = this.isPartialSelection ? selectedData : selectedData.records; _a < _b.length; _a++) {\n                            var data = _b[_a];\n                            this.selectedRowState[this.getPkValue(this.primaryKey, data)] = true;\n                        }\n                    }\n                    else {\n                        for (var _c = 0, selectedData_1 = selectedData; _c < selectedData_1.length; _c++) {\n                            var data = selectedData_1[_c];\n                            this.selectedRowState[this.getPkValue(this.primaryKey, data)] = true;\n                        }\n                    }\n                }\n            }\n            else {\n                this.selectedRowState = {};\n            }\n            // (this.getData()).forEach(function (data) {\n            //     this.selectedRowState[data[this.primaryKey]] = true;\n            // })\n        }\n        else {\n            if (state) {\n                var selectedStateKeys = Object.keys(this.selectedRowState);\n                var unSelectedRowStateKeys = Object.keys(this.unSelectedRowState);\n                if (!this.isCheckboxReset) {\n                    var rowData = (this.parent.groupSettings.columns.length && this.parent.isPersistSelection) ?\n                        this.parent.currentViewData['records'] : this.parent.currentViewData;\n                    for (var _d = 0, rowData_1 = rowData; _d < rowData_1.length; _d++) {\n                        var data = rowData_1[_d];\n                        if (!isNullOrUndefined(data[this.primaryKey])) {\n                            var key = data[this.primaryKey].toString();\n                            if (selectedStateKeys.indexOf(key) === -1 && unSelectedRowStateKeys.indexOf(key) === -1) {\n                                this.selectedRowState[data[this.primaryKey]] = true;\n                            }\n                        }\n                    }\n                }\n            }\n            else {\n                this.selectedRowState = {};\n                this.unSelectedRowState = {};\n                this.rmtHdrChkbxClicked = false;\n            }\n        }\n    };\n    Selection.prototype.getData = function () {\n        return this.parent.getDataModule().dataManager.executeLocal(this.parent.getDataModule().generateQuery(true));\n    };\n    Selection.prototype.getAvailableSelectedData = function () {\n        var filteredSearchedSelectedData = new DataManager(this.persistSelectedData).executeLocal(this.parent.getDataModule().generateQuery(true));\n        if (this.parent.groupSettings.columns.length && filteredSearchedSelectedData &&\n            filteredSearchedSelectedData.records) {\n            filteredSearchedSelectedData = filteredSearchedSelectedData.records.slice();\n        }\n        return filteredSearchedSelectedData;\n    };\n    Selection.prototype.refreshPersistSelection = function () {\n        var rows = this.parent.getRows();\n        this.totalRecordsCount = this.parent.getCurrentViewRecords().length;\n        if (this.parent.allowPaging) {\n            this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n        }\n        if (!isNullOrUndefined(rows) && rows.length > 0 && (this.parent.isPersistSelection || this.chkField)) {\n            var indexes = [];\n            for (var j = 0; j < rows.length; j++) {\n                var rowObj = this.getRowObj(rows[parseInt(j.toString(), 10)]);\n                var pKey = rowObj ? rowObj.data ? this.getPkValue(this.primaryKey, rowObj.data) : null : null;\n                if (pKey === null) {\n                    return;\n                }\n                if (this.isPartialSelection && !rowObj.isSelectable) {\n                    continue;\n                }\n                var checkState = void 0;\n                var chkBox = rows[parseInt(j.toString(), 10)].querySelector('.e-checkselect');\n                if (this.selectedRowState[\"\" + pKey] || (this.parent.checkAllRows === 'Check' && this.selectedRowState[\"\" + pKey] &&\n                    this.totalRecordsCount === Object.keys(this.selectedRowState).length && this.chkAllCollec.indexOf(pKey) < 0)\n                    || (this.parent.checkAllRows === 'Uncheck' && this.chkAllCollec.indexOf(pKey) > 0 && !this.parent.selectedRowIndex)\n                    || (this.parent.checkAllRows === 'Intermediate' && !isNullOrUndefined(this.chkField) && rowObj.data[this.chkField])) {\n                    indexes.push(parseInt(rows[parseInt(j.toString(), 10)].getAttribute(literals.dataRowIndex), 10));\n                    checkState = true;\n                }\n                else {\n                    checkState = false;\n                    if (this.checkedTarget !== chkBox && this.parent.isCheckBoxSelection && chkBox) {\n                        removeAddCboxClasses(chkBox.nextElementSibling, checkState);\n                    }\n                }\n                this.updatePersistCollection(rows[parseInt(j.toString(), 10)], checkState);\n            }\n            if (this.isSingleSel() && indexes.length > 0) {\n                this.selectRow(indexes[0], true);\n            }\n            else {\n                this.selectRows(indexes);\n            }\n        }\n        if ((this.parent.isCheckBoxSelection || this.parent.selectionSettings.checkboxMode === 'ResetOnRowClick') && this.getCurrentBatchRecordChanges().length > 0) {\n            this.setCheckAllState();\n        }\n    };\n    Selection.prototype.actionBegin = function (e) {\n        if (e.requestType === 'save' && this.parent.isPersistSelection) {\n            var editChkBox = this.parent.element.querySelector('.e-edit-checkselect');\n            if (!isNullOrUndefined(editChkBox)) {\n                var row = closest(editChkBox, '.' + literals.editedRow);\n                if (row) {\n                    if (this.parent.editSettings.mode === 'Dialog') {\n                        row = this.parent.element.querySelector('.e-dlgeditrow');\n                    }\n                    var rowObj = this.getRowObj(row);\n                    if (!rowObj) {\n                        return;\n                    }\n                    this.selectedRowState[this.getPkValue(this.primaryKey, rowObj.data)] = rowObj.isSelected = editChkBox.checked;\n                }\n                else {\n                    this.isCheckedOnAdd = editChkBox.checked;\n                }\n            }\n        }\n        if (this.parent.isPersistSelection && this.isPartialSelection) {\n            if (e.requestType === 'paging' && (this.parent.getDataModule().isRemote()\n                || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))) {\n                this.selectedRowIndexes = [];\n            }\n            if (e.requestType === 'filtering' || e.requestType === 'searching') {\n                this.parent.partialSelectedRecords = [];\n                this.parent.disableSelectedRecords = [];\n            }\n        }\n    };\n    Selection.prototype.actionComplete = function (e) {\n        if (e.requestType === 'save' && this.parent.isPersistSelection) {\n            if (e.action === 'add') {\n                if (this.isCheckedOnAdd) {\n                    var rowObj = this.parent.getRowObjectFromUID(this.parent.getRows()[e.selectedRow].getAttribute('data-uid'));\n                    this.selectedRowState[this.getPkValue(this.primaryKey, rowObj.data)] = rowObj.isSelected = this.isCheckedOnAdd;\n                }\n                this.isHdrSelectAllClicked = false;\n                this.setCheckAllState();\n            }\n            this.refreshPersistSelection();\n        }\n        if (e.requestType === 'delete' && this.parent.isPersistSelection) {\n            var records = e.data;\n            var data = records.slice();\n            for (var i = 0; i < data.length; i++) {\n                var pkValue = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n                if (!isNullOrUndefined(pkValue)) {\n                    this.updatePersistDelete(pkValue, this.isPartialSelection);\n                }\n            }\n            this.isHdrSelectAllClicked = false;\n            this.setCheckAllState();\n            this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n        }\n        if (e.requestType === 'paging') {\n            if (this.parent.isPersistSelection && this.isPartialSelection && this.isHdrSelectAllClicked) {\n                var rows = this.parent.getRowsObject();\n                var indexes = [];\n                for (var i = 0; i < rows.length; i++) {\n                    if (rows[parseInt(i.toString(), 10)].isSelectable) {\n                        indexes.push(rows[parseInt(i.toString(), 10)].index);\n                    }\n                }\n                if (indexes.length) {\n                    this.selectRows(indexes);\n                }\n            }\n            this.prevRowIndex = undefined;\n            this.prevCIdxs = undefined;\n            this.prevECIdxs = undefined;\n        }\n    };\n    Selection.prototype.onDataBound = function () {\n        if (!this.parent.enableVirtualization && this.parent.isPersistSelection) {\n            if (this.selectedRecords.length) {\n                this.isPrevRowSelection = true;\n            }\n        }\n        if ((this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n            && this.parent.dataSource.result)) && this.rmtHdrChkbxClicked) {\n            if (this.parent.checkAllRows === 'Intermediate') {\n                this.setRowSelection(true);\n            }\n            else if (this.parent.checkAllRows === 'Uncheck') {\n                this.setRowSelection(false);\n            }\n        }\n        if (this.parent.enableVirtualization) {\n            this.setCheckAllState();\n        }\n        if (this.parent.isPersistSelection) {\n            this.refreshPersistSelection();\n        }\n        this.initialRowSelection = this.isRowType() && this.parent.element.querySelectorAll('.e-selectionbackground') &&\n            this.parent.getSelectedRows().length ? true : false;\n        if (this.parent.isCheckBoxSelection && !this.initialRowSelection) {\n            var totalRecords = this.parent.getRowsObject();\n            var indexes = [];\n            for (var i = 0; i < totalRecords.length; i++) {\n                if (totalRecords[parseInt(i.toString(), 10)].isSelected) {\n                    indexes.push(i);\n                }\n            }\n            if (indexes.length) {\n                this.selectRows(indexes);\n            }\n            this.initialRowSelection = true;\n        }\n    };\n    Selection.prototype.updatePersistSelectedData = function (checkState) {\n        if (this.parent.isPersistSelection) {\n            var rows = this.parent.getRows();\n            for (var i = 0; i < rows.length; i++) {\n                this.updatePersistCollection(rows[parseInt(i.toString(), 10)], checkState);\n            }\n            if (this.parent.checkAllRows === 'Uncheck') {\n                this.setRowSelection(false);\n                this.persistSelectedData = (this.parent.getDataModule().isRemote()\n                    || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))\n                    ? this.persistSelectedData : [];\n            }\n            else if (this.parent.checkAllRows === 'Check') {\n                this.setRowSelection(true);\n                this.persistSelectedData = !(this.parent.getDataModule().isRemote()\n                    || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))\n                    && !this.isPartialSelection ?\n                    this.parent.groupSettings.columns.length ? this.getData().records.slice() :\n                        this.getData().slice() : this.persistSelectedData;\n            }\n        }\n    };\n    Selection.prototype.checkSelectAllAction = function (checkState) {\n        var cRenderer = this.getRenderer();\n        var editForm = this.parent.element.querySelector('.e-gridform');\n        this.checkedTarget = this.getCheckAllBox();\n        if (checkState && this.getCurrentBatchRecordChanges().length) {\n            this.parent.checkAllRows = 'Check';\n            this.updatePersistSelectedData(checkState);\n            this.selectRowsByRange(cRenderer.getVirtualRowIndex(0), cRenderer.getVirtualRowIndex(this.getCurrentBatchRecordChanges().length - 1));\n        }\n        else {\n            this.parent.checkAllRows = 'Uncheck';\n            this.updatePersistSelectedData(checkState);\n            this.clearSelection();\n        }\n        this.chkAllCollec = [];\n        if (!isNullOrUndefined(editForm)) {\n            var editChkBox = editForm.querySelector('.e-edit-checkselect');\n            if (!isNullOrUndefined(editChkBox)) {\n                removeAddCboxClasses(editChkBox.nextElementSibling, checkState);\n            }\n        }\n    };\n    Selection.prototype.checkSelectAll = function (checkBox) {\n        var _this = this;\n        var stateStr = this.getCheckAllStatus(checkBox);\n        var state = stateStr === 'Check';\n        this.isHeaderCheckboxClicked = true;\n        if ((this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n            && this.parent.dataSource.result)) && ((stateStr === 'Uncheck' || this.isCheckboxReset) ||\n            (stateStr === 'Intermediate' && this.parent.isPersistSelection))) {\n            this.rmtHdrChkbxClicked = true;\n        }\n        else {\n            this.rmtHdrChkbxClicked = false;\n        }\n        if (this.rmtHdrChkbxClicked && this.isCheckboxReset) {\n            this.unSelectedRowState = {};\n        }\n        this.isCheckboxReset = false;\n        if (stateStr === 'Intermediate') {\n            if (!this.chkField && !this.parent.isPersistSelection) {\n                state = this.getCurrentBatchRecordChanges().some(function (data) {\n                    return _this.getPkValue(_this.primaryKey, data) in _this.selectedRowState;\n                });\n            }\n            if ((this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n                && this.parent.dataSource.result)) && this.parent.isPersistSelection) {\n                for (var i = 0; i < this.getCurrentBatchRecordChanges().length; i++) {\n                    if (!isNullOrUndefined(this.getPkValue(this.primaryKey, this.getCurrentBatchRecordChanges()[\"\" + i]))) {\n                        if (Object.keys(this.selectedRowState).includes((this.getPkValue(this.primaryKey, this.getCurrentBatchRecordChanges()[\"\" + i])).toString())) {\n                            state = true;\n                        }\n                        else {\n                            state = false;\n                            break;\n                        }\n                    }\n                }\n            }\n        }\n        if (this.parent.isPersistSelection && this.parent.allowPaging) {\n            this.totalRecordsCount = this.parent.pageSettings.totalRecordsCount;\n        }\n        this.checkSelectAllAction(!state);\n        this.target = null;\n        if (this.getCurrentBatchRecordChanges().length > 0) {\n            this.setCheckAllState();\n            this.updateSelectedRowIndexes();\n        }\n        this.triggerChkChangeEvent(checkBox, !state);\n    };\n    Selection.prototype.getCheckAllStatus = function (ele) {\n        var classes = ele ? ele.nextElementSibling.classList :\n            this.getCheckAllBox().nextElementSibling.classList;\n        var status;\n        if (classes.contains('e-check')) {\n            status = 'Check';\n        }\n        else if (classes.contains('e-uncheck')) {\n            status = 'Uncheck';\n        }\n        else if (classes.contains('e-stop')) {\n            status = 'Intermediate';\n        }\n        else {\n            status = 'None';\n        }\n        return status;\n    };\n    Selection.prototype.checkSelect = function (checkBox) {\n        var target = closest(this.checkedTarget, '.' + literals.rowCell);\n        var gObj = this.parent;\n        this.isMultiCtrlRequest = true;\n        var rIndex = 0;\n        this.isHeaderCheckboxClicked = false;\n        if (isGroupAdaptive(gObj)) {\n            var uid = target.parentElement.getAttribute('data-uid');\n            if (this.parent.enableVirtualization && this.parent.groupSettings.columns.length) {\n                rIndex = parseInt(target.parentElement.getAttribute(literals.dataRowIndex), 10);\n            }\n            else {\n                rIndex = gObj.getRows().map(function (m) { return m.getAttribute('data-uid'); }).indexOf(uid);\n            }\n        }\n        else {\n            rIndex = parseInt(target.parentElement.getAttribute(literals.dataRowIndex), 10);\n        }\n        if (this.parent.isPersistSelection && this.parent.element.getElementsByClassName(literals.addedRow).length > 0 &&\n            this.parent.editSettings.newRowPosition === 'Top') {\n            ++rIndex;\n        }\n        this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute(literals.dataColIndex), 10));\n        this.moveIntoUncheckCollection(closest(target, '.' + literals.row));\n        this.setCheckAllState();\n        this.isMultiCtrlRequest = false;\n        this.triggerChkChangeEvent(checkBox, checkBox.nextElementSibling.classList.contains('e-check'));\n    };\n    Selection.prototype.moveIntoUncheckCollection = function (row) {\n        if (this.parent.checkAllRows === 'Check' || this.parent.checkAllRows === 'Uncheck') {\n            var rowObj = this.getRowObj(row);\n            var pKey = rowObj && rowObj.data ? this.getPkValue(this.primaryKey, rowObj.data) : null;\n            if (!pKey) {\n                return;\n            }\n            if (this.chkAllCollec.indexOf(pKey) < 0) {\n                this.chkAllCollec.push(pKey);\n            }\n            else {\n                this.chkAllCollec.splice(this.chkAllCollec.indexOf(pKey), 1);\n            }\n        }\n    };\n    Selection.prototype.triggerChkChangeEvent = function (checkBox, checkState) {\n        this.parent.trigger(events.checkBoxChange, {\n            checked: checkState, selectedRowIndexes: this.parent.getSelectedRowIndexes(),\n            target: checkBox\n        });\n        if (!this.parent.isEdit) {\n            this.checkedTarget = null;\n        }\n    };\n    Selection.prototype.updateSelectedRowIndexes = function () {\n        if (this.parent.isCheckBoxSelection && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) &&\n            this.isPartialSelection && !(this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n            && this.parent.dataSource.result))\n            && this.parent.selectionSettings.persistSelection) {\n            if (this.parent.checkAllRows !== 'Uncheck') {\n                var rowObj = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; });\n                for (var _i = 0, rowObj_2 = rowObj; _i < rowObj_2.length; _i++) {\n                    var row = rowObj_2[_i];\n                    this.selectedRowIndexes.push(row.index);\n                }\n            }\n        }\n        if (this.parent.isCheckBoxSelection && this.parent.enableVirtualization && !this.isPartialSelection &&\n            (this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n                && this.parent.dataSource.result))\n            && !this.parent.isPersistSelection && this.parent.checkAllRows === 'Check') {\n            var rowObj = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; });\n            if (rowObj.length !== this.selectedRowIndexes.length) {\n                for (var _a = 0, rowObj_3 = rowObj; _a < rowObj_3.length; _a++) {\n                    var row = rowObj_3[_a];\n                    if (this.selectedRowIndexes.indexOf(row.index) <= -1) {\n                        this.selectedRowIndexes.push(row.index);\n                    }\n                }\n            }\n        }\n    };\n    Selection.prototype.updateSelectedRowIndex = function (index) {\n        if (this.parent.isCheckBoxSelection && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)\n            && !(this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n                && this.parent.dataSource.result))\n            && !this.isPartialSelection) {\n            if (this.parent.checkAllRows === 'Check') {\n                this.selectedRowIndexes = [];\n                var dataLength = this.parent.groupSettings.columns.length ? this.getData()['records'].length :\n                    this.getData().length;\n                for (var data = 0; data < dataLength; data++) {\n                    this.selectedRowIndexes.push(data);\n                }\n            }\n            else if (this.parent.checkAllRows === 'Uncheck') {\n                this.selectedRowIndexes = [];\n            }\n            else {\n                var row = this.parent.getRowByIndex(index);\n                if (index && row && row.getAttribute('aria-selected') === 'false') {\n                    var selectedVal = this.selectedRowIndexes.indexOf(index);\n                    this.selectedRowIndexes.splice(selectedVal, 1);\n                }\n            }\n        }\n    };\n    Selection.prototype.isAllSelected = function (count) {\n        if (this.parent.getDataModule().isRemote()\n            || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result)) {\n            return this.getAvailableSelectedData().length === (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling\n                ? this.parent.totalDataRecordsCount : this.totalRecordsCount);\n        }\n        else {\n            if (this.isPartialSelection) {\n                if (this.parent.allowPaging && this.parent.pageSettings.pageSize < this.parent.pageSettings.totalRecordsCount) {\n                    var data = this.parent.partialSelectedRecords;\n                    for (var i = 0; i < data.length; i++) {\n                        var pKey = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n                        if (!this.selectedRowState[\"\" + pKey]) {\n                            return false;\n                        }\n                    }\n                    return true;\n                }\n                else {\n                    return this.isSelectAllRowCount(count);\n                }\n            }\n            else {\n                var data = (this.parent.groupSettings.columns.length) ? this.getData()['records'] : this.getData();\n                for (var i = 0; i < data.length; i++) {\n                    var pKey = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n                    if (!this.selectedRowState[\"\" + pKey]) {\n                        return false;\n                    }\n                }\n                return true;\n            }\n        }\n    };\n    Selection.prototype.someDataSelected = function () {\n        if ((this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n            && this.parent.dataSource.result))\n            && (this.parent.searchSettings.key.length || this.parent.filterSettings.columns.length)) {\n            var filteredSearchedSelectedData = this.getAvailableSelectedData();\n            for (var i = 0; i < filteredSearchedSelectedData.length; i++) {\n                var pKey = this.getPkValue(this.primaryKey, filteredSearchedSelectedData[parseInt(i.toString(), 10)]);\n                if (this.selectedRowState[\"\" + pKey]) {\n                    return false;\n                }\n            }\n        }\n        var data = this.isPartialSelection ? this.parent.partialSelectedRecords\n            : (this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n                && this.parent.dataSource.result)) ? [] : this.getData();\n        for (var i = 0; i < data.length; i++) {\n            var pKey = this.getPkValue(this.primaryKey, data[parseInt(i.toString(), 10)]);\n            if (this.selectedRowState[\"\" + pKey]) {\n                return false;\n            }\n        }\n        return true;\n    };\n    Selection.prototype.setCheckAllState = function (index, isInteraction) {\n        if (this.parent.isCheckBoxSelection || this.parent.selectionSettings.checkboxMode === 'ResetOnRowClick') {\n            var checkToSelectAll = false;\n            var isFiltered = false;\n            var checkedLen = Object.keys(this.selectedRowState).length;\n            if (!this.parent.isPersistSelection) {\n                checkedLen = this.selectedRowIndexes.length;\n                this.totalRecordsCount = this.getCurrentBatchRecordChanges().length;\n            }\n            if (this.parent.isPersistSelection && !((this.parent.getDataModule().isRemote() ||\n                (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result)) &&\n                this.isPartialSelection)\n                && (this.parent.searchSettings.key.length || this.parent.filterSettings.columns.length)) {\n                isFiltered = true;\n                checkToSelectAll = this.isAllSelected(checkedLen);\n            }\n            var input = this.getCheckAllBox();\n            if (input) {\n                var spanEle = input.nextElementSibling;\n                removeClass([spanEle], ['e-check', 'e-stop', 'e-uncheck']);\n                setChecked(input, false);\n                input.indeterminate = false;\n                var getRecord = this.parent.getDataModule().isRemote() ? [] :\n                    (this.parent.groupSettings.columns.length) ? this.getData()['records'] : this.getData();\n                if ((checkToSelectAll && isFiltered && (this.parent.getDataModule().isRemote() ||\n                    (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result) ||\n                    getRecord.length)) || (!isFiltered && ((checkedLen === this.totalRecordsCount && this.totalRecordsCount\n                    && !this.isPartialSelection && (!(this.parent.getDataModule().isRemote()\n                    || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))\n                    || this.parent.allowPaging)) ||\n                    (!this.parent.enableVirtualization && !this.parent.enableInfiniteScrolling\n                        && this.isPartialSelection && (this.isSelectAllRowCount(checkedLen) || this.isHdrSelectAllClicked))\n                    || ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)\n                        && !this.parent.allowPaging && ((!(this.parent.getDataModule().isRemote()\n                        || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result)) &&\n                        getRecord.length && checkedLen === getRecord.length) || ((this.parent.getDataModule().isRemote()\n                        || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result)) &&\n                        !this.isPartialSelection && ((checkedLen === this.parent.totalDataRecordsCount) || ((this.isSelectAllRowCount(checkedLen)\n                        || checkedLen === this.totalRecordsCount) && !this.parent.isPersistSelection))) ||\n                        (this.isPartialSelection && (this.isHdrSelectAllClicked || this.isSelectAllRowCount(checkedLen)))))\n                    || (checkedLen === this.totalRecordsCount && this.totalRecordsCount && !this.isPartialSelection &&\n                        !this.parent.allowPaging && !this.parent.enableVirtualization && !this.parent.enableInfiniteScrolling)))) {\n                    addClass([spanEle], ['e-check']);\n                    setChecked(input, true);\n                    if (isInteraction) {\n                        this.getRenderer().setSelection(null, true, true);\n                    }\n                    this.parent.checkAllRows = 'Check';\n                }\n                else if (((!this.selectedRowIndexes.length && (!this.parent.enableVirtualization ||\n                    (!this.persistSelectedData.length && !isFiltered) || (isFiltered && this.someDataSelected())) ||\n                    checkedLen === 0 && this.getCurrentBatchRecordChanges().length === 0) && !this.parent.allowPaging) ||\n                    (this.parent.allowPaging && (checkedLen === 0 || (checkedLen && isFiltered && this.someDataSelected())))) {\n                    addClass([spanEle], ['e-uncheck']);\n                    if (isInteraction) {\n                        this.getRenderer().setSelection(null, false, true);\n                    }\n                    this.parent.checkAllRows = 'Uncheck';\n                }\n                else {\n                    addClass([spanEle], ['e-stop']);\n                    this.parent.checkAllRows = 'Intermediate';\n                    input.indeterminate = true;\n                }\n                if (checkedLen === 0 && this.getCurrentBatchRecordChanges().length === 0) {\n                    addClass([spanEle.parentElement], ['e-checkbox-disabled']);\n                }\n                else {\n                    removeClass([spanEle.parentElement], ['e-checkbox-disabled']);\n                }\n                if (this.isPartialSelection) {\n                    var rowCount = this.parent.getRowsObject().filter(function (e) { return e.isSelectable; }).length;\n                    if (rowCount === 0 && spanEle.parentElement.querySelector('.e-frame').classList.contains('e-uncheck')) {\n                        addClass([spanEle.parentElement], ['e-checkbox-disabled']);\n                    }\n                    else {\n                        removeClass([spanEle.parentElement], ['e-checkbox-disabled']);\n                    }\n                }\n                if ((this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)\n                    && !this.parent.allowPaging && !(this.parent.getDataModule().isRemote()\n                    || (!isNullOrUndefined(this.parent.dataSource) && this.parent.dataSource.result))) {\n                    this.updateSelectedRowIndex(index);\n                }\n            }\n        }\n    };\n    Selection.prototype.isSelectAllRowCount = function (count) {\n        var rowCount = 0;\n        var rowObj = this.parent.getRowsObject();\n        if (this.parent.selectionSettings.persistSelection && (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling)) {\n            var dataLen = (this.parent.getDataModule().isRemote() || (!isNullOrUndefined(this.parent.dataSource)\n                && this.parent.dataSource.result)) ?\n                this.parent.totalDataRecordsCount : this.getData() && this.getData().length;\n            if (dataLen === rowObj.length) {\n                rowCount = rowObj.filter(function (e) { return e.isSelectable; }).length;\n                return rowCount && count === rowCount;\n            }\n            else {\n                return false;\n            }\n        }\n        else {\n            if (this.parent.allowPaging && this.parent.selectionSettings.persistSelection) {\n                rowCount = this.parent.partialSelectedRecords.length + this.parent.disableSelectedRecords.length;\n                if (rowCount === this.totalRecordsCount) {\n                    return this.parent.partialSelectedRecords.length && count === this.parent.partialSelectedRecords.length;\n                }\n                else {\n                    return false;\n                }\n            }\n            else {\n                rowCount = rowObj.filter(function (e) { return e.isSelectable; }).length;\n                return rowCount && count === rowCount;\n            }\n        }\n    };\n    Selection.prototype.keyDownHandler = function (e) {\n        // Below are keyCode for command key in MAC OS. Safari/Chrome(91-Left command, 93-Right Command), Opera(17), FireFox(224)\n        if ((((Browser.info.name === 'chrome') || (Browser.info.name === 'safari')) && (e.keyCode === 91 || e.keyCode === 93)) ||\n            (Browser.info.name === 'opera' && e.keyCode === 17) || (Browser.info.name === 'mozilla' && e.keyCode === 224)) {\n            this.cmdKeyPressed = true;\n        }\n        var targetHeadCell = parentsUntil(e.target, 'e-headercell');\n        var targetRowCell = parentsUntil(e.target, literals.rowCell);\n        var isCheckBox = targetHeadCell ? targetHeadCell.children[0].classList.contains('e-headerchkcelldiv') :\n            targetRowCell ? targetRowCell.classList.contains('e-gridchkbox') : false;\n        if (isCheckBox && !this.parent.allowKeyboard && e.keyCode === 32) {\n            e.preventDefault();\n        }\n    };\n    Selection.prototype.keyUpHandler = function (e) {\n        if ((((Browser.info.name === 'chrome') || (Browser.info.name === 'safari')) && (e.keyCode === 91 || e.keyCode === 93)) ||\n            (Browser.info.name === 'opera' && e.keyCode === 17) || (Browser.info.name === 'mozilla' && e.keyCode === 224)) {\n            this.cmdKeyPressed = false;\n        }\n    };\n    Selection.prototype.clickHandler = function (e) {\n        var target = e.target;\n        this.actualTarget = target;\n        if (this.selectionSettings.persistSelection) {\n            this.deSelectedData = iterateExtend(this.persistSelectedData);\n        }\n        if (parentsUntil(target, literals.row) || parentsUntil(target, 'e-headerchkcelldiv') ||\n            (this.selectionSettings.allowColumnSelection && target.classList.contains('e-headercell'))) {\n            this.isInteracted = true;\n        }\n        this.cmdKeyPressed = e.metaKey;\n        this.isMultiCtrlRequest = e.ctrlKey || this.enableSelectMultiTouch ||\n            (this.isMacOS && this.cmdKeyPressed);\n        if (!this.parent.allowKeyboard) {\n            this.isMultiShiftRequest = false;\n            this.isMultiCtrlRequest = false;\n        }\n        else {\n            this.isMultiShiftRequest = e.shiftKey;\n        }\n        this.isMultiCtrlRequestCell = this.isMultiCtrlRequest;\n        this.popUpClickHandler(e);\n        var chkSelect = false;\n        this.preventFocus = true;\n        var checkBox;\n        var checkWrap = parentsUntil(target, 'e-checkbox-wrapper');\n        this.checkSelectAllClicked = checkWrap && checkWrap.getElementsByClassName('e-checkselectall') ||\n            (this.selectionSettings.persistSelection && parentsUntil(target, literals.row)) ? true : false;\n        if (this.selectionSettings.persistSelection && this.isPartialSelection && parentsUntil(target, 'e-headerchkcelldiv')\n            && !target.querySelector('.e-checkbox-disabled')) {\n            this.isHdrSelectAllClicked = true;\n        }\n        if (checkWrap && checkWrap.querySelectorAll('.e-checkselect,.e-checkselectall').length > 0) {\n            checkBox = checkWrap.querySelector('input[type=\"checkbox\"]');\n            chkSelect = true;\n        }\n        this.drawBorders();\n        this.updateAutoFillPosition();\n        target = parentsUntil(target, literals.rowCell);\n        if (this.parent.isReact && (target && !target.parentElement && target.classList.contains('e-rowcell'))) {\n            target = this.parent.getCellFromIndex(parseInt(target.getAttribute('index'), 10), parseInt(target.getAttribute('data-colindex'), 10));\n        }\n        if (this.isRowDragSelected && isNullOrUndefined(target) && this.parent.allowRowDragAndDrop &&\n            this.selectionSettings.persistSelection && this.checkSelectAllClicked) {\n            this.isRowDragSelected = false;\n        }\n        if (((target && target.parentElement.classList.contains(literals.row) && !this.parent.selectionSettings.checkboxOnly) || chkSelect)\n            && !this.isRowDragSelected) {\n            if (this.parent.isCheckBoxSelection) {\n                this.isMultiCtrlRequest = true;\n            }\n            this.target = target;\n            if (!isNullOrUndefined(checkBox)) {\n                this.checkedTarget = checkBox;\n                if (checkBox.classList.contains('e-checkselectall')) {\n                    this.checkSelectAll(checkBox);\n                }\n                else {\n                    this.checkSelect(checkBox);\n                }\n            }\n            else {\n                var gObj = this.parent;\n                var rIndex = 0;\n                if (isGroupAdaptive(gObj)) {\n                    var uid = target.parentElement.getAttribute('data-uid');\n                    rIndex = gObj.getRows().map(function (m) { return m.getAttribute('data-uid'); }).indexOf(uid);\n                }\n                else {\n                    rIndex = parseInt(target.parentElement.getAttribute(literals.dataRowIndex), 10);\n                }\n                if (this.parent.isPersistSelection && this.parent.element.getElementsByClassName(literals.addedRow).length > 0) {\n                    ++rIndex;\n                }\n                if (!this.mUPTarget || !this.mUPTarget.isEqualNode(target)) {\n                    this.rowCellSelectionHandler(rIndex, parseInt(target.getAttribute(literals.dataColIndex), 10));\n                }\n                if (this.parent.isCheckBoxSelection) {\n                    this.moveIntoUncheckCollection(closest(target, '.' + literals.row));\n                    this.setCheckAllState();\n                }\n            }\n            if (!this.parent.isCheckBoxSelection && Browser.isDevice && !this.isSingleSel()) {\n                this.showPopup(e);\n            }\n        }\n        else if (e.target.classList.contains('e-headercell') &&\n            !e.target.classList.contains('e-stackedheadercell')) {\n            var uid = e.target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid');\n            this.headerSelectionHandler(this.parent.getColumnIndexByUid(uid));\n        }\n        this.isMultiCtrlRequest = false;\n        this.isMultiCtrlRequestCell = this.isMultiCtrlRequest;\n        this.isMultiShiftRequest = false;\n        if (isNullOrUndefined(closest(e.target, '.e-unboundcell'))) {\n            this.preventFocus = false;\n        }\n    };\n    Selection.prototype.popUpClickHandler = function (e) {\n        var target = e.target;\n        if (closest(target, '.e-headercell') || e.target.classList.contains(literals.rowCell) ||\n            closest(target, '.e-gridpopup')) {\n            if (target.classList.contains('e-rowselect')) {\n                if (!target.classList.contains('e-spanclicked')) {\n                    target.classList.add('e-spanclicked');\n                    this.enableSelectMultiTouch = true;\n                }\n                else {\n                    target.classList.remove('e-spanclicked');\n                    this.enableSelectMultiTouch = false;\n                    this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n                }\n            }\n        }\n        else {\n            this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n        }\n    };\n    Selection.prototype.showPopup = function (e) {\n        if (!this.selectionSettings.enableSimpleMultiRowSelection) {\n            setCssInGridPopUp(this.parent.element.querySelector('.e-gridpopup'), e, 'e-rowselect e-icons e-icon-rowselect' +\n                (!this.isSingleSel() && (this.selectedRecords.length > 1\n                    || this.selectedRowCellIndexes.length > 1) ? ' e-spanclicked' : ''));\n        }\n    };\n    Selection.prototype.rowCellSelectionHandler = function (rowIndex, cellIndex) {\n        if ((!this.isMultiCtrlRequest && !this.isMultiShiftRequest) || this.isSingleSel()) {\n            if (!this.isDragged) {\n                this.selectRow(rowIndex, this.selectionSettings.enableToggle);\n            }\n            this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, this.selectionSettings.enableToggle);\n            if (this.selectedRowCellIndexes.length) {\n                this.updateAutoFillPosition();\n            }\n            this.drawBorders();\n        }\n        else if (this.isMultiShiftRequest) {\n            if (this.parent.isCheckBoxSelection || (!this.parent.isCheckBoxSelection &&\n                !closest(this.target, '.' + literals.rowCell).classList.contains(literals.gridChkBox))) {\n                this.selectRowsByRange(isUndefined(this.prevRowIndex) ? rowIndex : this.prevRowIndex, rowIndex);\n            }\n            else {\n                this.addRowsToSelection([rowIndex]);\n            }\n            this.selectCellsByRange(isUndefined(this.prevCIdxs) ? { rowIndex: rowIndex, cellIndex: cellIndex } : this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n            this.updateAutoFillPosition();\n            this.drawBorders();\n        }\n        else {\n            this.addRowsToSelection([rowIndex]);\n            if (this.selectionSettings.mode === 'Both') {\n                var checkboxColumn = this.parent.getColumns().find(function (col) { return col.type === 'checkbox'; });\n                var checkboxColumnIndexCheck = checkboxColumn && checkboxColumn.index !== cellIndex;\n                if (checkboxColumnIndexCheck && !this.isMultiCtrlRequestCell) {\n                    this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, this.selectionSettings.enableToggle);\n                }\n                else if (!checkboxColumn || checkboxColumnIndexCheck) {\n                    this.addCellsToSelection([{ rowIndex: rowIndex, cellIndex: cellIndex }]);\n                }\n            }\n            else {\n                this.addCellsToSelection([{ rowIndex: rowIndex, cellIndex: cellIndex }]);\n            }\n            this.showHideBorders('none');\n        }\n        this.isDragged = false;\n    };\n    Selection.prototype.onCellFocused = function (e) {\n        if (this.parent.frozenRows && e.container.isHeader && e.byKey) {\n            if (e.keyArgs.action === 'upArrow') {\n                if (this.parent.allowFiltering) {\n                    e.isJump = e.element.tagName === 'INPUT' ? true : false;\n                }\n                else {\n                    e.isJump = e.element.tagName === 'TH' ? true : false;\n                }\n            }\n            else {\n                if (e.keyArgs.action === 'downArrow') {\n                    var rIdx = Number(e.element.parentElement.getAttribute(literals.dataRowIndex));\n                    e.isJump = rIdx === 0 ? true : false;\n                }\n                else {\n                    if (e.keyArgs.action === 'ctrlHome') {\n                        e.isJump = true;\n                    }\n                }\n            }\n        }\n        var clear = ((e.container.isHeader && e.isJump) ||\n            (e.container.isContent && !e.container.isSelectable)) && !(e.byKey && e.keyArgs.action === 'space')\n            && !(e.element.classList.contains('e-detailrowexpand') || e.element.classList.contains('e-detailrowcollapse'));\n        var headerAction = (e.container.isHeader && e.element.tagName !== 'TD' && !closest(e.element, '.' + literals.rowCell))\n            && !(e.byKey && e.keyArgs.action === 'space');\n        if (!e.byKey || clear) {\n            if (clear && !this.parent.isCheckBoxSelection) {\n                this.clearSelection();\n            }\n            return;\n        }\n        var _a = e.container.isContent ? e.container.indexes : e.indexes, rowIndex = _a[0], cellIndex = _a[1];\n        var prev = this.focus.getPrevIndexes();\n        if (e.element.parentElement.querySelector('.e-rowcelldrag') || e.element.parentElement.querySelector('.e-dtdiagonalright')\n            || e.element.parentElement.querySelector('.e-dtdiagonaldown')) {\n            prev.cellIndex = prev.cellIndex - 1;\n        }\n        if (this.parent.frozenRows) {\n            if (e.container.isHeader && (e.element.tagName === 'TD' || closest(e.element, '.' + literals.rowCell))) {\n                var thLen = this.parent.getHeaderTable().querySelector('thead').childElementCount;\n                rowIndex -= thLen;\n                prev.rowIndex = !isNullOrUndefined(prev.rowIndex) ? prev.rowIndex - thLen : null;\n            }\n            else {\n                rowIndex += this.parent.frozenRows;\n                prev.rowIndex = prev.rowIndex === 0 || !isNullOrUndefined(prev.rowIndex) ? prev.rowIndex + this.parent.frozenRows : null;\n            }\n        }\n        if (this.parent.enableInfiniteScrolling && this.parent.infiniteScrollSettings.enableCache) {\n            rowIndex = parseInt(e.element.parentElement.getAttribute('data-rowindex'), 10);\n        }\n        if ((headerAction || (['ctrlPlusA', 'escape'].indexOf(e.keyArgs.action) === -1 &&\n            e.keyArgs.action !== 'space' && rowIndex === prev.rowIndex && cellIndex === prev.cellIndex)) &&\n            !this.selectionSettings.allowColumnSelection) {\n            return;\n        }\n        this.preventFocus = true;\n        var columnIndex = this.getKeyColIndex(e);\n        if (this.needColumnSelection) {\n            cellIndex = columnIndex;\n        }\n        if (this.parent.element.classList.contains('e-gridcell-read') && (e.keyArgs.action === 'tab' || e.keyArgs.action === 'shiftTab'\n            || e.keyArgs.action === 'rightArrow' || e.keyArgs.action === 'leftArrow')) {\n            var targetLabel = this.target.getAttribute('aria-label');\n            targetLabel = this.target.innerHTML + ' column header ' + this.parent.getColumnByIndex(cellIndex).field;\n            this.target.setAttribute('aria-label', targetLabel);\n        }\n        switch (e.keyArgs.action) {\n            case 'downArrow':\n            case 'upArrow':\n            case 'enter':\n            case 'shiftEnter':\n                this.target = e.element;\n                this.isKeyAction = true;\n                this.applyDownUpKey(rowIndex, cellIndex);\n                break;\n            case 'rightArrow':\n            case 'leftArrow':\n                this.applyRightLeftKey(rowIndex, cellIndex);\n                break;\n            case 'shiftDown':\n            case 'shiftUp':\n                this.shiftDownKey(rowIndex, cellIndex);\n                break;\n            case 'shiftLeft':\n            case 'shiftRight':\n                this.applyShiftLeftRightKey(rowIndex, cellIndex);\n                break;\n            case 'home':\n            case 'end':\n                cellIndex = e.keyArgs.action === 'end' ? this.getLastColIndex(rowIndex) : 0;\n                this.applyHomeEndKey(rowIndex, cellIndex);\n                break;\n            case 'ctrlHome':\n            case 'ctrlEnd':\n                this.applyCtrlHomeEndKey(rowIndex, cellIndex);\n                break;\n            case 'escape':\n                this.clearSelection();\n                if (this.parent.clipboardModule) {\n                    window.navigator['clipboard'].writeText('');\n                }\n                break;\n            case 'ctrlPlusA':\n                this.ctrlPlusA();\n                break;\n            case 'space':\n                this.applySpaceSelection(e.element);\n                break;\n            case 'tab':\n                if (this.parent.editSettings.allowNextRowEdit) {\n                    this.selectRow(rowIndex);\n                }\n                break;\n        }\n        this.needColumnSelection = false;\n        this.preventFocus = false;\n        this.positionBorders();\n        if (this.parent.isFrozenGrid()) {\n            this.showHideBorders('none', true);\n            this.refreshFrozenBorders();\n        }\n        this.updateAutoFillPosition();\n    };\n    Selection.prototype.getKeyColIndex = function (e) {\n        var uid;\n        var index = null;\n        var stackedHeader = e.element.querySelector('.e-stackedheadercelldiv');\n        if (this.selectionSettings.allowColumnSelection && parentsUntil(e.element, 'e-columnheader')) {\n            this.needColumnSelection = e.container.isHeader ? true : false;\n            if (stackedHeader) {\n                if (e.keyArgs.action === 'rightArrow' || e.keyArgs.action === 'leftArrow') {\n                    return index;\n                }\n                uid = stackedHeader.getAttribute('e-mappinguid');\n                var innerColumn = this.getstackedColumns(this.parent.getColumnByUid(uid).columns);\n                var lastIndex = this.parent.getColumnIndexByUid(innerColumn[innerColumn.length - 1].uid);\n                var firstIndex = this.parent.getColumnIndexByUid(innerColumn[0].uid);\n                index = this.prevColIndex >= lastIndex ? firstIndex : lastIndex;\n            }\n            else {\n                index = this.parent.getColumnIndexByUid(e.element\n                    .querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n            }\n        }\n        return index;\n    };\n    /**\n     * Apply ctrl + A key selection\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Selection.prototype.ctrlPlusA = function () {\n        if (this.isRowType() && !this.isSingleSel()) {\n            this.selectRowsByRange(0, this.getCurrentBatchRecordChanges().length - 1);\n        }\n        if (this.isCellType() && !this.isSingleSel()) {\n            this.selectCellsByRange({ rowIndex: 0, cellIndex: 0 }, { rowIndex: this.parent.getRows().length - 1, cellIndex: this.parent.getColumns().length - 1 });\n        }\n    };\n    Selection.prototype.applySpaceSelection = function (target) {\n        if (target.classList.contains('e-checkselectall')) {\n            this.checkedTarget = target;\n            this.checkSelectAll(this.checkedTarget);\n        }\n        else {\n            if (target.classList.contains('e-checkselect')) {\n                this.checkedTarget = target;\n                this.checkSelect(this.checkedTarget);\n            }\n        }\n    };\n    Selection.prototype.applyDownUpKey = function (rowIndex, cellIndex) {\n        var gObj = this.parent;\n        if (this.parent.isCheckBoxSelection && this.parent.checkAllRows === 'Check' && !this.selectionSettings.persistSelection &&\n            !this.selectionSettings.checkboxOnly) {\n            this.checkSelectAllAction(false);\n            this.checkedTarget = null;\n        }\n        if (this.isRowType() && !this.selectionSettings.checkboxOnly) {\n            if (this.parent.frozenRows) {\n                this.selectRow(rowIndex, true);\n                this.applyUpDown(gObj.selectedRowIndex);\n            }\n            else {\n                this.selectRow(rowIndex, true);\n                this.applyUpDown(gObj.selectedRowIndex);\n            }\n        }\n        if (this.isCellType()) {\n            this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n        }\n        if (this.selectionSettings.allowColumnSelection && this.needColumnSelection) {\n            this.selectColumn(cellIndex);\n        }\n    };\n    Selection.prototype.applyUpDown = function (rowIndex) {\n        if (rowIndex < 0) {\n            return;\n        }\n        if (!this.target) {\n            this.target = this.parent.getRows()[0].children[this.parent.groupSettings.columns.length || 0];\n        }\n        var cIndex = parseInt(this.target.getAttribute(literals.dataColIndex), 10);\n        var row = this.contentRenderer.getRowByIndex(rowIndex);\n        if (row) {\n            this.target = row.getElementsByClassName(literals.rowCell)[parseInt(cIndex.toString(), 10)];\n        }\n        this.addAttribute(this.target);\n        if (this.parent.element.classList.contains('e-gridcell-read')) {\n            var targetLabel = this.target.getAttribute('aria-label');\n            targetLabel = this.target.innerHTML;\n            this.target.setAttribute('aria-label', targetLabel);\n        }\n    };\n    Selection.prototype.applyRightLeftKey = function (rowIndex, cellIndex) {\n        if (this.selectionSettings.allowColumnSelection && this.needColumnSelection) {\n            this.selectColumn(cellIndex);\n        }\n        else if (this.isCellType()) {\n            this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n            this.addAttribute(this.target);\n        }\n    };\n    Selection.prototype.applyHomeEndKey = function (rowIndex, cellIndex) {\n        if (this.isCellType()) {\n            this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n        }\n        else {\n            this.addAttribute(this.parent.getCellFromIndex(rowIndex, cellIndex));\n        }\n    };\n    /**\n     * Apply shift+down key selection\n     *\n     * @param {number} rowIndex - specfies the rowIndex\n     * @param {number} cellIndex - specifies the CellIndex\n     * @returns {void}\n     * @hidden\n     */\n    Selection.prototype.shiftDownKey = function (rowIndex, cellIndex) {\n        this.isMultiShiftRequest = true;\n        if (this.isRowType() && !this.isSingleSel()) {\n            if (!isUndefined(this.prevRowIndex)) {\n                this.selectRowsByRange(this.prevRowIndex, rowIndex);\n                this.applyUpDown(rowIndex);\n            }\n            else if (this.isPartialSelection) {\n                this.selectRow(rowIndex, true);\n            }\n            else {\n                this.selectRow(0, true);\n            }\n        }\n        if (this.isCellType() && !this.isSingleSel()) {\n            this.selectCellsByRange(this.prevCIdxs || { rowIndex: 0, cellIndex: 0 }, { rowIndex: rowIndex, cellIndex: cellIndex });\n        }\n        this.isMultiShiftRequest = false;\n    };\n    Selection.prototype.applyShiftLeftRightKey = function (rowIndex, cellIndex) {\n        this.isMultiShiftRequest = true;\n        if (this.selectionSettings.allowColumnSelection && this.needColumnSelection) {\n            this.selectColumnsByRange(this.prevColIndex, cellIndex);\n        }\n        else {\n            this.selectCellsByRange(this.prevCIdxs, { rowIndex: rowIndex, cellIndex: cellIndex });\n        }\n        this.isMultiShiftRequest = false;\n    };\n    Selection.prototype.getstackedColumns = function (column) {\n        var innerColumnIndexes = [];\n        for (var i = 0, len = column.length; i < len; i++) {\n            if (column[parseInt(i.toString(), 10)].columns) {\n                this.getstackedColumns(column[parseInt(i.toString(), 10)].columns);\n            }\n            else {\n                innerColumnIndexes.push(column[parseInt(i.toString(), 10)]);\n            }\n        }\n        return innerColumnIndexes;\n    };\n    Selection.prototype.applyCtrlHomeEndKey = function (rowIndex, cellIndex) {\n        if (this.isRowType()) {\n            this.selectRow(rowIndex, true);\n            this.addAttribute(this.parent.getCellFromIndex(rowIndex, cellIndex));\n        }\n        if (this.isCellType()) {\n            this.selectCell({ rowIndex: rowIndex, cellIndex: cellIndex }, true);\n        }\n    };\n    Selection.prototype.addRemoveClassesForRow = function (row, isAdd, clearAll) {\n        var args = [];\n        for (var _i = 3; _i < arguments.length; _i++) {\n            args[_i - 3] = arguments[_i];\n        }\n        if (row) {\n            var cells = [].slice.call(row.getElementsByClassName(literals.rowCell));\n            var detailIndentCell = row.querySelector('.e-detailrowcollapse') || row.querySelector('.e-detailrowexpand');\n            var dragdropIndentCell = row.querySelector('.e-rowdragdrop');\n            if (detailIndentCell) {\n                cells.push(detailIndentCell);\n            }\n            if (dragdropIndentCell) {\n                cells.push(dragdropIndentCell);\n            }\n            addRemoveActiveClasses.apply(void 0, [cells, isAdd].concat(args));\n        }\n        this.getRenderer().setSelection(row ? row.getAttribute('data-uid') : null, isAdd, clearAll);\n    };\n    Selection.prototype.isRowType = function () {\n        return this.selectionSettings.mode === 'Row' || this.selectionSettings.mode === 'Both';\n    };\n    Selection.prototype.isCellType = function () {\n        return this.selectionSettings.mode === 'Cell' || this.selectionSettings.mode === 'Both';\n    };\n    Selection.prototype.isSingleSel = function () {\n        return this.selectionSettings.type === 'Single';\n    };\n    Selection.prototype.getRenderer = function () {\n        if (isNullOrUndefined(this.contentRenderer)) {\n            this.contentRenderer = this.factory.getRenderer(RenderType.Content);\n        }\n        return this.contentRenderer;\n    };\n    /**\n     * Gets the collection of selected records.\n     *\n     * @returns {Object[]} returns the Object\n     */\n    Selection.prototype.getSelectedRecords = function () {\n        var selectedData = [];\n        if (!this.selectionSettings.persistSelection && this.selectedRecords.length) {\n            selectedData = this.parent.getRowsObject().filter(function (row) { return row.isSelected; })\n                .map(function (m) { return m.data; });\n        }\n        else {\n            selectedData = this.persistSelectedData;\n        }\n        return selectedData;\n    };\n    /**\n     * Select the column by passing start column index\n     *\n     * @param {number} index - specifies the index\n     * @returns {void}\n     */\n    Selection.prototype.selectColumn = function (index) {\n        var gObj = this.parent;\n        if (isNullOrUndefined(gObj.getColumns()[parseInt(index.toString(), 10)])) {\n            return;\n        }\n        var column = gObj.getColumnByIndex(index);\n        var selectedCol = gObj.getColumnHeaderByUid(column.uid);\n        var isColSelected = selectedCol.classList.contains('e-columnselection');\n        if ((!gObj.selectionSettings.allowColumnSelection)) {\n            return;\n        }\n        var isMultiColumns = this.selectedColumnsIndexes.length > 1 &&\n            this.selectedColumnsIndexes.indexOf(index) > -1;\n        this.clearColDependency();\n        if (!isColSelected || !this.selectionSettings.enableToggle || isMultiColumns) {\n            var args = {\n                columnIndex: index, headerCell: selectedCol,\n                column: column,\n                cancel: false, target: this.actualTarget,\n                isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex,\n                isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest\n            };\n            this.onActionBegin(args, events.columnSelecting);\n            if (args.cancel) {\n                this.disableInteracted();\n                return;\n            }\n            if (!(gObj.selectionSettings.enableToggle && index === this.prevColIndex && isColSelected) || isMultiColumns) {\n                this.updateColSelection(selectedCol, index);\n            }\n            var selectedArgs = {\n                columnIndex: index, headerCell: selectedCol,\n                column: column,\n                target: this.actualTarget,\n                isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex\n            };\n            this.onActionComplete(selectedArgs, events.columnSelected);\n        }\n        this.updateColProps(index);\n    };\n    /**\n     * Select the columns by passing start and end column index\n     *\n     * @param  {number} startIndex - specifies the start index\n     * @param  {number} endIndex - specifies the end index\n     * @returns {void}\n     */\n    Selection.prototype.selectColumnsByRange = function (startIndex, endIndex) {\n        var gObj = this.parent;\n        if (isNullOrUndefined(gObj.getColumns()[parseInt(startIndex.toString(), 10)])) {\n            return;\n        }\n        var indexes = [];\n        if (gObj.selectionSettings.type === 'Single' || isNullOrUndefined(endIndex)) {\n            indexes[0] = startIndex;\n        }\n        else {\n            var min = startIndex < endIndex;\n            for (var i = startIndex; min ? i <= endIndex : i >= endIndex; min ? i++ : i--) {\n                indexes.push(i);\n            }\n        }\n        this.selectColumns(indexes);\n    };\n    /**\n     * Select the columns by passing column indexes\n     *\n     * @param  {number[]} columnIndexes - specifies the columnIndexes\n     * @returns {void}\n     */\n    Selection.prototype.selectColumns = function (columnIndexes) {\n        var gObj = this.parent;\n        var selectedCol = this.getselectedCols();\n        if (gObj.selectionSettings.type === 'Single') {\n            columnIndexes = [columnIndexes[0]];\n        }\n        if (!gObj.selectionSettings.allowColumnSelection) {\n            return;\n        }\n        this.clearColDependency();\n        var selectingArgs = {\n            columnIndex: columnIndexes[0], headerCell: selectedCol,\n            columnIndexes: columnIndexes,\n            column: gObj.getColumnByIndex(columnIndexes[0]),\n            cancel: false, target: this.actualTarget,\n            isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex,\n            isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest\n        };\n        this.onActionBegin(selectingArgs, events.columnSelecting);\n        if (selectingArgs.cancel) {\n            this.disableInteracted();\n            return;\n        }\n        for (var i = 0, len = columnIndexes.length; i < len; i++) {\n            this.updateColSelection(gObj.getColumnHeaderByUid(gObj.getColumnByIndex(columnIndexes[parseInt(i.toString(), 10)]).uid), columnIndexes[parseInt(i.toString(), 10)]);\n        }\n        selectedCol = this.getselectedCols();\n        var selectedArgs = {\n            columnIndex: columnIndexes[0], headerCell: selectedCol,\n            columnIndexes: columnIndexes,\n            column: gObj.getColumnByIndex(columnIndexes[0]),\n            target: this.actualTarget,\n            isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex\n        };\n        this.onActionComplete(selectedArgs, events.columnSelected);\n        this.updateColProps(columnIndexes[0]);\n    };\n    /**\n     * Select the column with existing column by passing column index\n     *\n     * @param  {number} startIndex - specifies the start index\n     * @returns {void}\n     */\n    Selection.prototype.selectColumnWithExisting = function (startIndex) {\n        var gObj = this.parent;\n        if (isNullOrUndefined(gObj.getColumns()[parseInt(startIndex.toString(), 10)])) {\n            return;\n        }\n        var newCol = gObj.getColumnHeaderByUid(gObj.getColumnByIndex(startIndex).uid);\n        var selectedCol = this.getselectedCols();\n        if (gObj.selectionSettings.type === 'Single') {\n            this.clearColDependency();\n        }\n        if (!gObj.selectionSettings.allowColumnSelection) {\n            return;\n        }\n        if (this.selectedColumnsIndexes.indexOf(startIndex) > -1) {\n            this.clearColumnSelection(startIndex);\n        }\n        else {\n            var selectingArgs = {\n                columnIndex: startIndex, headerCell: selectedCol,\n                columnIndexes: this.selectedColumnsIndexes,\n                column: gObj.getColumnByIndex(startIndex),\n                cancel: false, target: this.actualTarget,\n                isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex,\n                isCtrlPressed: this.isMultiCtrlRequest, isShiftPressed: this.isMultiShiftRequest\n            };\n            this.onActionBegin(selectingArgs, events.columnSelecting);\n            if (selectingArgs.cancel) {\n                this.disableInteracted();\n                return;\n            }\n            this.updateColSelection(newCol, startIndex);\n            selectedCol = this.getselectedCols();\n            var selectedArgs = {\n                columnIndex: startIndex, headerCell: selectedCol,\n                column: gObj.getColumnByIndex(startIndex),\n                columnIndexes: this.selectedColumnsIndexes,\n                target: this.actualTarget,\n                isInteracted: this.isInteracted, previousColumnIndex: this.prevColIndex\n            };\n            this.onActionComplete(selectedArgs, events.columnSelected);\n        }\n        this.updateColProps(startIndex);\n    };\n    /**\n     * Clear the column selection\n     *\n     * @param {number} clearIndex - specifies the clearIndex\n     * @returns {void}\n     */\n    Selection.prototype.clearColumnSelection = function (clearIndex) {\n        if (this.isColumnSelected) {\n            var gObj = this.parent;\n            if (!isNullOrUndefined(clearIndex) && this.selectedColumnsIndexes.indexOf(clearIndex) === -1) {\n                return;\n            }\n            var index = !isNullOrUndefined(clearIndex) ? clearIndex :\n                this.selectedColumnsIndexes[this.selectedColumnsIndexes.length - 1];\n            var column = gObj.getColumnByIndex(index);\n            var selectedCol = gObj.getColumnHeaderByUid(column.uid);\n            var deselectedArgs = {\n                columnIndex: index, headerCell: selectedCol,\n                columnIndexes: this.selectedColumnsIndexes,\n                column: column,\n                cancel: false, target: this.actualTarget,\n                isInteracted: this.isInteracted\n            };\n            var isCanceled = this.columnDeselect(deselectedArgs, events.columnDeselecting);\n            if (isCanceled) {\n                this.disableInteracted();\n                return;\n            }\n            var selectedHeader = !isNullOrUndefined(clearIndex) ? [selectedCol] :\n                [].slice.call(gObj.getHeaderContent().getElementsByClassName('e-columnselection'));\n            var selectedCells = this.getSelectedColumnCells(clearIndex);\n            for (var i = 0, len = selectedHeader.length; i < len; i++) {\n                addRemoveActiveClasses([selectedHeader[parseInt(i.toString(), 10)]], false, 'e-columnselection');\n            }\n            for (var i = 0, len = selectedCells.length; i < len; i++) {\n                addRemoveActiveClasses([selectedCells[parseInt(i.toString(), 10)]], false, 'e-columnselection');\n            }\n            if (!isNullOrUndefined(clearIndex)) {\n                this.selectedColumnsIndexes.splice(this.selectedColumnsIndexes.indexOf(clearIndex), 1);\n                this.parent.getColumns()[parseInt(clearIndex.toString(), 10)].isSelected = false;\n            }\n            else {\n                this.columnDeselect(deselectedArgs, events.columnDeselected);\n                this.selectedColumnsIndexes = [];\n                this.isColumnSelected = false;\n                this.parent.getColumns().filter(function (col) { return col.isSelected = false; });\n            }\n        }\n    };\n    Selection.prototype.getselectedCols = function () {\n        var gObj = this.parent;\n        var selectedCol;\n        if (this.selectedColumnsIndexes.length > 1) {\n            selectedCol = [];\n            for (var i = 0; i < this.selectedColumnsIndexes.length; i++) {\n                (selectedCol).push(gObj.getColumnHeaderByUid(gObj.getColumnByIndex(this.selectedColumnsIndexes[parseInt(i.toString(), 10)]).uid));\n            }\n        }\n        else {\n            selectedCol = gObj.getColumnHeaderByUid(gObj.getColumnByIndex(this.selectedColumnsIndexes[0]).uid);\n        }\n        return selectedCol;\n    };\n    Selection.prototype.getSelectedColumnCells = function (clearIndex) {\n        var gObj = this.parent;\n        var isRowTemplate = !isNullOrUndefined(this.parent.rowTemplate);\n        var rows = isRowTemplate ? gObj.getRows() : gObj.getDataRows();\n        var seletedcells = [];\n        var selectionString = !isNullOrUndefined(clearIndex) ? '[data-colindex=\"' + clearIndex + '\"]' : '.e-columnselection';\n        for (var i = 0, len = rows.length; i < len; i++) {\n            seletedcells = seletedcells.concat([].slice.call(rows[parseInt(i.toString(), 10)].querySelectorAll(selectionString)));\n        }\n        return seletedcells;\n    };\n    Selection.prototype.columnDeselect = function (args, event) {\n        if (event === 'columnDeselected') {\n            delete args.cancel;\n        }\n        this.onActionComplete(args, event);\n        return args.cancel;\n    };\n    Selection.prototype.updateColProps = function (startIndex) {\n        this.prevColIndex = startIndex;\n        this.isColumnSelected = this.selectedColumnsIndexes.length && true;\n    };\n    Selection.prototype.clearColDependency = function () {\n        this.clearColumnSelection();\n        this.selectedColumnsIndexes = [];\n    };\n    Selection.prototype.updateColSelection = function (selectedCol, startIndex) {\n        if (isNullOrUndefined(this.parent.getColumns()[parseInt(startIndex.toString(), 10)])) {\n            return;\n        }\n        var isRowTemplate = !isNullOrUndefined(this.parent.rowTemplate);\n        var rows = isRowTemplate ? this.parent.getRows() : this.parent.getDataRows();\n        this.selectedColumnsIndexes.push(startIndex);\n        this.parent.getColumns()[parseInt(startIndex.toString(), 10)].isSelected = true;\n        startIndex = startIndex + this.parent.getIndentCount();\n        addRemoveActiveClasses([selectedCol], true, 'e-columnselection');\n        for (var j = 0, len = rows.length; j < len; j++) {\n            if (rows[parseInt(j.toString(), 10)].classList.contains(literals.row)) {\n                if ((rows[parseInt(j.toString(), 10)].classList.contains(literals.editedRow)\n                    || rows[parseInt(j.toString(), 10)].classList.contains(literals.addedRow))\n                    && this.parent.editSettings.mode === 'Normal'\n                    && !isNullOrUndefined(rows[parseInt(j.toString(), 10)].querySelector('tr').childNodes[parseInt(startIndex.toString(), 10)])) {\n                    addRemoveActiveClasses([rows[parseInt(j.toString(), 10)].querySelector('tr').childNodes[parseInt(startIndex.toString(), 10)]], true, 'e-columnselection');\n                }\n                else if (!isNullOrUndefined(rows[parseInt(j.toString(), 10)].childNodes[parseInt(startIndex.toString(), 10)])) {\n                    addRemoveActiveClasses([rows[parseInt(j.toString(), 10)].childNodes[parseInt(startIndex.toString(), 10)]], true, 'e-columnselection');\n                }\n            }\n        }\n    };\n    Selection.prototype.headerSelectionHandler = function (colIndex) {\n        if ((!this.isMultiCtrlRequest && !this.isMultiShiftRequest) || this.isSingleSel()) {\n            this.selectColumn(colIndex);\n        }\n        else if (this.isMultiShiftRequest) {\n            this.selectColumnsByRange(isUndefined(this.prevColIndex) ? colIndex : this.prevColIndex, colIndex);\n        }\n        else {\n            this.selectColumnWithExisting(colIndex);\n        }\n    };\n    // eslint-disable-next-line camelcase\n    Selection.prototype.addEventListener_checkbox = function () {\n        var _this = this;\n        this.parent.on(events.dataReady, this.dataReady, this);\n        this.onDataBoundFunction = this.onDataBound.bind(this);\n        this.parent.addEventListener(events.dataBound, this.onDataBoundFunction);\n        this.parent.on(events.refreshInfinitePersistSelection, this.onDataBoundFunction);\n        this.parent.on(events.contentReady, this.checkBoxSelectionChanged, this);\n        this.parent.on(events.beforeRefreshOnDataChange, this.initPerisistSelection, this);\n        this.parent.on(events.onEmpty, this.setCheckAllForEmptyGrid, this);\n        this.actionCompleteFunc = this.actionCompleteHandler.bind(this);\n        this.parent.addEventListener(events.actionComplete, this.actionCompleteFunc);\n        this.parent.on(events.click, this.clickHandler, this);\n        this.resizeEndFn = function () {\n            _this.updateAutoFillPosition();\n            _this.drawBorders();\n        };\n        this.resizeEndFn.bind(this);\n        this.parent.addEventListener(events.resizeStop, this.resizeEndFn);\n    };\n    // eslint-disable-next-line camelcase\n    Selection.prototype.removeEventListener_checkbox = function () {\n        this.parent.off(events.dataReady, this.dataReady);\n        this.parent.removeEventListener(events.dataBound, this.onDataBoundFunction);\n        this.parent.removeEventListener(events.actionComplete, this.actionCompleteFunc);\n        this.parent.off(events.refreshInfinitePersistSelection, this.onDataBoundFunction);\n        this.parent.off(events.onEmpty, this.setCheckAllForEmptyGrid);\n        this.parent.off(events.click, this.clickHandler);\n        this.parent.off(events.beforeRefreshOnDataChange, this.initPerisistSelection);\n    };\n    Selection.prototype.setCheckAllForEmptyGrid = function () {\n        var checkAllBox = this.getCheckAllBox();\n        if (checkAllBox) {\n            this.parent.isCheckBoxSelection = true;\n            var spanEle = checkAllBox.nextElementSibling;\n            removeClass([spanEle], ['e-check', 'e-stop', 'e-uncheck']);\n            addClass([spanEle.parentElement], ['e-checkbox-disabled']);\n        }\n    };\n    Selection.prototype.dataReady = function (e) {\n        this.isHeaderCheckboxClicked = false;\n        var isInfinitecroll = this.parent.enableInfiniteScrolling && e.requestType === 'infiniteScroll';\n        if (e.requestType !== 'virtualscroll' && !this.parent.isPersistSelection && !isInfinitecroll) {\n            this.disableUI = !this.parent.enableImmutableMode && !(e.requestType === 'save' && e['action'] === 'add');\n            this.clearSelection();\n            this.setCheckAllState();\n            this.disableUI = false;\n        }\n    };\n    Selection.prototype.actionCompleteHandler = function (e) {\n        if (e.requestType === 'save' && this.parent.isPersistSelection) {\n            this.refreshPersistSelection();\n        }\n    };\n    Selection.prototype.selectRowIndex = function (index) {\n        this.parent.isSelectedRowIndexUpdating = true;\n        if ((isNullOrUndefined(this.parent.selectedRowIndex) || this.parent.selectedRowIndex === -1) || !this.parent.enablePersistence) {\n            this.parent.selectedRowIndex = index;\n        }\n        else {\n            this.parent.selectedRowIndex = -1;\n        }\n    };\n    Selection.prototype.disableInteracted = function () {\n        this.isInteracted = false;\n    };\n    Selection.prototype.activeTarget = function () {\n        this.actualTarget = this.isInteracted ? this.actualTarget : null;\n    };\n    return Selection;\n}());\nexport { Selection };\n","//! moment.js locale configuration\n//! locale : Lao [lo]\n//! author : Ryan Hart : https://github.com/ryanhart2\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var lo = moment.defineLocale('lo', {\n        months: 'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ມັງກອນ_ກຸມພາ_ມີນາ_ເມສາ_ພຶດສະພາ_ມິຖຸນາ_ກໍລະກົດ_ສິງຫາ_ກັນຍາ_ຕຸລາ_ພະຈິກ_ທັນວາ'.split(\n                '_'\n            ),\n        weekdays: 'ອາທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysShort: 'ທິດ_ຈັນ_ອັງຄານ_ພຸດ_ພະຫັດ_ສຸກ_ເສົາ'.split('_'),\n        weekdaysMin: 'ທ_ຈ_ອຄ_ພ_ພຫ_ສກ_ສ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'ວັນdddd D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ຕອນເຊົ້າ|ຕອນແລງ/,\n        isPM: function (input) {\n            return input === 'ຕອນແລງ';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ຕອນເຊົ້າ';\n            } else {\n                return 'ຕອນແລງ';\n            }\n        },\n        calendar: {\n            sameDay: '[ມື້ນີ້ເວລາ] LT',\n            nextDay: '[ມື້ອື່ນເວລາ] LT',\n            nextWeek: '[ວັນ]dddd[ໜ້າເວລາ] LT',\n            lastDay: '[ມື້ວານນີ້ເວລາ] LT',\n            lastWeek: '[ວັນ]dddd[ແລ້ວນີ້ເວລາ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ອີກ %s',\n            past: '%sຜ່ານມາ',\n            s: 'ບໍ່ເທົ່າໃດວິນາທີ',\n            ss: '%d ວິນາທີ',\n            m: '1 ນາທີ',\n            mm: '%d ນາທີ',\n            h: '1 ຊົ່ວໂມງ',\n            hh: '%d ຊົ່ວໂມງ',\n            d: '1 ມື້',\n            dd: '%d ມື້',\n            M: '1 ເດືອນ',\n            MM: '%d ເດືອນ',\n            y: '1 ປີ',\n            yy: '%d ປີ',\n        },\n        dayOfMonthOrdinalParse: /(ທີ່)\\d{1,2}/,\n        ordinal: function (number) {\n            return 'ທີ່' + number;\n        },\n    });\n\n    return lo;\n\n})));\n","import { isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { formatUnit } from '@syncfusion/ej2-base';\nimport { columnWidthChanged, preventFrozenScrollRefresh } from '../base/constant';\nimport { Column } from '../models/column';\nimport { parentsUntil, ispercentageWidth, getScrollBarWidth } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * ColumnWidthService\n *\n * @hidden\n */\nvar ColumnWidthService = /** @class */ (function () {\n    function ColumnWidthService(parent) {\n        this.parent = parent;\n    }\n    ColumnWidthService.prototype.setWidthToColumns = function () {\n        var i = 0;\n        var indexes = this.parent.getColumnIndexesInView();\n        var wFlag = true;\n        var totalColumnsWidth = 0;\n        if (this.parent.allowGrouping) {\n            for (var len = this.parent.groupSettings.columns.length; i < len; i++) {\n                if (this.parent.enableColumnVirtualization && indexes.indexOf(i) === -1) {\n                    wFlag = false;\n                    continue;\n                }\n                this.setColumnWidth(new Column({ width: '30px' }), i);\n            }\n        }\n        if (this.parent.detailTemplate || this.parent.childGrid) {\n            this.setColumnWidth(new Column({ width: '30px' }), i);\n            i++;\n        }\n        if (this.parent.isRowDragable() && this.parent.getFrozenMode() !== 'Right') {\n            this.setColumnWidth(new Column({ width: '30px' }), i);\n            i++;\n        }\n        var columns = this.parent.getColumns();\n        for (var j = 0; j < columns.length; j++) {\n            this.setColumnWidth(columns[parseInt(j.toString(), 10)], wFlag && this.parent.enableColumnVirtualization ? undefined : j + i);\n        }\n        if (this.parent.isRowDragable() && this.parent.getFrozenMode() === 'Right') {\n            this.setColumnWidth(new Column({ width: '30px' }), this.parent.groupSettings.columns.length + columns.length);\n        }\n        totalColumnsWidth = this.getTableWidth(this.parent.getColumns());\n        if (this.parent.width !== 'auto' && this.parent.width.toString().indexOf('%') === -1) {\n            this.setMinwidthBycalculation(totalColumnsWidth);\n        }\n    };\n    ColumnWidthService.prototype.setMinwidthBycalculation = function (tWidth) {\n        var difference = 0;\n        var collection = this.parent.getColumns().filter(function (a) {\n            return isNullOrUndefined(a.width) || a.width === 'auto';\n        });\n        if (collection.length) {\n            if (!isNullOrUndefined(this.parent.width) && this.parent.width !== 'auto' &&\n                typeof (this.parent.width) === 'string' && this.parent.width.indexOf('%') === -1) {\n                difference = (typeof this.parent.width === 'string' ? parseInt(this.parent.width, 10) : this.parent.width) - tWidth;\n            }\n            else {\n                difference = this.parent.element.getBoundingClientRect().width - tWidth;\n            }\n            var tmWidth = 0;\n            for (var _i = 0, collection_1 = collection; _i < collection_1.length; _i++) {\n                var cols = collection_1[_i];\n                tmWidth += !isNullOrUndefined(cols.minWidth) ?\n                    ((typeof cols.minWidth === 'string' ? parseInt(cols.minWidth, 10) : cols.minWidth)) : 0;\n            }\n            for (var i = 0; i < collection.length; i++) {\n                if (tWidth === 0 && this.parent.allowResizing && this.isWidthUndefined() && (i !== collection.length - 1)) {\n                    this.setUndefinedColumnWidth(collection);\n                }\n                var index = this.parent.getColumnIndexByField(collection[parseInt(i.toString(), 10)].field) + this.parent.getIndentCount();\n                if (tWidth !== 0 && difference < tmWidth) {\n                    this.setWidth(collection[parseInt(i.toString(), 10)].minWidth, index);\n                }\n                else if (tWidth !== 0 && difference > tmWidth) {\n                    this.setWidth('', index, true);\n                }\n            }\n        }\n    };\n    ColumnWidthService.prototype.setUndefinedColumnWidth = function (collection) {\n        for (var k = 0; k < collection.length; k++) {\n            if (k !== collection.length - 1) {\n                collection[parseInt(k.toString(), 10)].width = 200;\n                this.setWidth(200, this.parent.getColumnIndexByField(collection[parseInt(k.toString(), 10)].field));\n            }\n        }\n    };\n    ColumnWidthService.prototype.setColumnWidth = function (column, index, module) {\n        if (this.parent.getColumns().length < 1) {\n            return;\n        }\n        var columnIndex = isNullOrUndefined(index) ? this.parent.getNormalizedColumnIndex(column.uid) : index;\n        var cWidth = this.getWidth(column);\n        var tgridWidth = this.getTableWidth(this.parent.getColumns());\n        if (cWidth !== null) {\n            this.setWidth(cWidth, columnIndex);\n            if (this.parent.width !== 'auto' && this.parent.width.toString().indexOf('%') === -1) {\n                this.setMinwidthBycalculation(tgridWidth);\n            }\n            if ((this.parent.allowResizing && module === 'resize')) {\n                this.setWidthToTable();\n            }\n            this.parent.notify(columnWidthChanged, { index: columnIndex, width: cWidth, column: column, module: module });\n        }\n    };\n    ColumnWidthService.prototype.setWidth = function (width, index, clear) {\n        if (this.parent.groupSettings.columns.length > index && ispercentageWidth(this.parent)) {\n            var elementWidth = this.parent.element.offsetWidth;\n            width = (30 / elementWidth * 100).toFixed(1) + '%';\n        }\n        var header = this.parent.getHeaderTable();\n        var content = this.parent.getContentTable();\n        var fWidth = formatUnit(width);\n        var headerCol = header.querySelector(literals.colGroup).children[parseInt(index.toString(), 10)];\n        if (headerCol && !clear) {\n            headerCol.style.width = fWidth;\n        }\n        else if (headerCol && clear) {\n            headerCol.style.width = '';\n        }\n        var contentCol = content.querySelector(literals.colGroup).children[parseInt(index.toString(), 10)];\n        if (contentCol && !clear) {\n            contentCol.style.width = fWidth;\n        }\n        else if (contentCol && clear) {\n            contentCol.style.width = '';\n        }\n        if (!this.parent.enableColumnVirtualization && this.parent.isEdit) {\n            var edit = this.parent.element.querySelectorAll('.e-table.e-inline-edit');\n            var editTableCol = [];\n            for (var i = 0; i < edit.length; i++) {\n                if (parentsUntil(edit[parseInt(i.toString(), 10)], 'e-grid').id === this.parent.element.id) {\n                    for (var j = 0; j < edit[parseInt(i.toString(), 10)].querySelector('colgroup').children.length; j++) {\n                        editTableCol.push(edit[parseInt(i.toString(), 10)].querySelector('colgroup').children[parseInt(j.toString(), 10)]);\n                    }\n                }\n            }\n            if (edit.length && editTableCol.length) {\n                editTableCol[parseInt(index.toString(), 10)].style.width = fWidth;\n            }\n        }\n        if (this.parent.isFrozenGrid() && this.parent.enableColumnVirtualization) {\n            this.refreshFrozenScrollbar();\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    ColumnWidthService.prototype.refreshFrozenScrollbar = function () {\n        var args = { cancel: false };\n        this.parent.notify(preventFrozenScrollRefresh, args);\n        if (args.cancel) {\n            return;\n        }\n        var scrollWidth = getScrollBarWidth();\n        var movableScrollbar = this.parent.element.querySelector('.e-movablescrollbar');\n        var movableWidth = this.parent.getContent().firstElementChild.getBoundingClientRect().width;\n        if (this.parent.enableColumnVirtualization) {\n            var placeHolder = this.parent.getContent().querySelector('.e-virtualtrack');\n            if (placeHolder) {\n                movableWidth = placeHolder.scrollWidth;\n            }\n        }\n        if (this.parent.height !== 'auto') {\n            movableWidth = movableWidth + scrollWidth;\n        }\n        movableScrollbar.firstElementChild.style.width = movableWidth + 'px';\n    };\n    ColumnWidthService.prototype.getSiblingsHeight = function (element) {\n        var previous = this.getHeightFromDirection(element, 'previous');\n        var next = this.getHeightFromDirection(element, 'next');\n        return previous + next;\n    };\n    ColumnWidthService.prototype.getHeightFromDirection = function (element, direction) {\n        var sibling = element[direction + 'ElementSibling'];\n        var result = 0;\n        var classList = [literals.gridHeader, literals.gridFooter, 'e-groupdroparea', 'e-gridpager', 'e-toolbar', 'e-temp-toolbar'];\n        while (sibling) {\n            if (classList.some(function (value) { return sibling.classList.contains(value); })) {\n                result += sibling.offsetHeight;\n            }\n            sibling = sibling[direction + 'ElementSibling'];\n        }\n        return result;\n    };\n    ColumnWidthService.prototype.isWidthUndefined = function () {\n        var isWidUndefCount = this.parent.getColumns().filter(function (col) {\n            return isNullOrUndefined(col.width) && isNullOrUndefined(col.minWidth);\n        }).length;\n        return (this.parent.getColumns().length === isWidUndefCount);\n    };\n    ColumnWidthService.prototype.getWidth = function (column) {\n        if (isNullOrUndefined(column.width) && this.parent.allowResizing\n            && isNullOrUndefined(column.minWidth) && !this.isWidthUndefined()) {\n            column.width = 200;\n        }\n        if (!column.width) {\n            return null;\n        }\n        var width = parseInt(column.width.toString(), 10);\n        if (column.minWidth && width < parseInt(column.minWidth.toString(), 10)) {\n            return column.minWidth;\n        }\n        else if ((column.maxWidth && width > parseInt(column.maxWidth.toString(), 10))) {\n            return column.maxWidth;\n        }\n        else {\n            return column.width;\n        }\n    };\n    ColumnWidthService.prototype.getTableWidth = function (columns) {\n        var tWidth = 0;\n        for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n            var column = columns_1[_i];\n            var cWidth = this.getWidth(column);\n            if (column.width === 'auto') {\n                cWidth = 0;\n            }\n            if (column.visible !== false && cWidth !== null) {\n                tWidth += parseInt(cWidth.toString(), 10);\n            }\n        }\n        return tWidth;\n    };\n    ColumnWidthService.prototype.setWidthToTable = function () {\n        var tWidth = formatUnit(this.getTableWidth(this.parent.getColumns()));\n        if (this.parent.detailTemplate || this.parent.childGrid) {\n            this.setColumnWidth(new Column({ width: '30px' }));\n        }\n        tWidth = this.isAutoResize() ? '100%' : tWidth;\n        this.parent.getHeaderTable().style.width = tWidth;\n        this.parent.getContentTable().style.width = tWidth;\n        var edit = this.parent.element.querySelector('.e-table.e-inline-edit');\n        if (edit) {\n            edit.style.width = tWidth;\n        }\n    };\n    ColumnWidthService.prototype.isAutoResize = function () {\n        return this.parent.allowResizing && this.parent.resizeSettings.mode === 'Auto';\n    };\n    return ColumnWidthService;\n}());\nexport { ColumnWidthService };\n","//! moment.js locale configuration\n//! locale : German (Austria) [de-at]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Martin Groller : https://github.com/MadMG\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deAt = moment.defineLocale('de-at', {\n        months: 'Jänner_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jän._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return deAt;\n\n})));\n","var render = function () {var _vm=this;var _h=_vm.$createElement;var _c=_vm._self._c||_h;return _c('CRow',[_c('CCol',{attrs:{\"col\":\"\"}},[_c('div',{staticClass:\"col-lg-12 control-section\",staticStyle:{\"padding\":\"10px\",\"position\":\"relative\"}},[_c('div',{staticStyle:{\"width\":\"100%\"}},[_c('ejs-grid',{ref:\"grid\",attrs:{\"id\":\"deadlineAlertGridId\",\"dataSource\":_vm.data,\"allowFiltering\":true,\"commandClick\":_vm.commandClick,\"allowPaging\":true,\"allowTextWrap\":true,\"textWrapSettings\":_vm.wrapSettings,\"allowResizing\":true,\"toolbarClick\":_vm.toolbarClick,\"allowExcelExport\":true,\"excelExportComplete\":_vm.excelExportComplete,\"allowReordering\":true,\"allowSorting\":true,\"editSettings\":_vm.editSettings,\"toolbar\":_vm.toolbar,\"pageSettings\":_vm.pageSettings,\"actionComplete\":_vm.actionComplete,\"actionBegin\":_vm.actionBegin,\"actionFailure\":_vm.actionFailure,\"filterSettings\":_vm.filterOptions,\"queryCellInfo\":_vm.customiseCell,\"query\":_vm.gridQuery,\"width\":\"100%\",\"height\":\"100%\"}},[_c('e-columns',[_c('e-column',{attrs:{\"field\":\"id\",\"headerText\":\"Id\",\"width\":\"120\",\"isPrimaryKey\":true,\"visible\":false}}),_c('e-column',{attrs:{\"field\":\"alertDate\",\"headerText\":\"Alert Date\",\"textAlign\":\"Right\",\"format\":_vm.dateFormatOptions,\"type\":\"date\",\"width\":\"150\"}}),_c('e-column',{attrs:{\"field\":\"alertType\",\"headerText\":\"Alert\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"clientName\",\"headerText\":\"Client\",\"width\":\"210\"}}),_c('e-column',{attrs:{\"field\":\"stateName\",\"headerText\":\"Country\",\"width\":\"150\"}}),_c('e-column',{attrs:{\"field\":\"companyName\",\"headerText\":\"Company\",\"width\":\"210\"}}),_c('e-column',{attrs:{\"field\":\"contractName\",\"headerText\":\"Contract\",\"width\":\"300\"}}),_c('e-column',{attrs:{\"field\":\"utilityTypeName\",\"headerText\":\"Commodity\",\"width\":\"150\",\"visible\":false}}),_c('e-column',{attrs:{\"field\":\"tradeablePeriodName\",\"headerText\":\"Period\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"field\":\"deafaultDeadlineDate\",\"headerText\":\"Default Deadline\",\"textAlign\":\"Right\",\"format\":_vm.dateFormatOptions,\"type\":\"date\",\"width\":\"180\"}}),_c('e-column',{attrs:{\"field\":\"openVolume\",\"headerText\":\"Open Volume\",\"textAlign\":\"Right\",\"type\":\"number\",\"format\":\"n2\",\"width\":\"180\"}}),_c('e-column',{attrs:{\"field\":\"alertStatus\",\"headerText\":\"Status\",\"width\":\"120\"}}),_c('e-column',{attrs:{\"headerText\":\"Actions\",\"width\":\"220\",\"textAlign\":\"left\",\"commands\":_vm.commands}})],1)],1)],1),_c('ejs-dialog',{ref:\"alertDialog\",attrs:{\"buttons\":_vm.alertDlgButtons,\"cssClass\":\"greyBackground\",\"id\":\"alertDialogDefDeadline\",\"visible\":false,\"animationSettings\":_vm.animationSettings,\"showCloseIcon\":_vm.showCloseIcon,\"open\":_vm.dialogOpen,\"close\":_vm.dialogClose,\"width\":_vm.alertWidth,\"header\":_vm.header,\"allowDragging\":_vm.draggable,\"position\":_vm.position}},[_c('h5',{staticClass:\"ml-5\",attrs:{\"id\":\"graphHeader\"}},[_vm._v(\" \"+_vm._s(_vm.alertType)+\" - Default Deadline\")]),_c('br'),_c('label',{staticClass:\"mr-5 float-right\"},[_vm._v(\"Alert issued on : \"+_vm._s(_vm.alertDate))]),_c('br'),_c('br'),_c('label',{staticClass:\"ml-5\"},[_vm._v(_vm._s(_vm.alertText))]),_c('br'),_c('br'),_c('div',{staticClass:\"row\"},[_c('div',{staticClass:\"column ml-3\"},[_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Client\")]),_vm._v(\": \"+_vm._s(_vm.client))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Country\")]),_vm._v(\": \"+_vm._s(_vm.country))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Utility\")]),_vm._v(\": \"+_vm._s(_vm.utility))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Company\")]),_vm._v(\": \"+_vm._s(_vm.company))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Contract Name\")]),_vm._v(\": \"+_vm._s(_vm.contractName))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Contract ID\")]),_vm._v(\": \"+_vm._s(_vm.contractId))]),_c('br'),_c('br')]),_c('div',{staticClass:\"column ml-5\"},[_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Period\")]),_vm._v(\": \"+_vm._s(_vm.watchPeriod))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Default Deadline\")]),_vm._v(\": \"+_vm._s(_vm.deafaultDeadlineDate))]),_c('br'),_c('label',{staticClass:\"ml-5\"},[_c('b',[_vm._v(\"Open Volume\")]),_vm._v(\": \"+_vm._s(_vm.openVolume)+\" %\")]),_c('br')])])])],1)])],1)}\nvar staticRenderFns = []\n\nexport { render, staticRenderFns }","<template>\r\n    <CRow>\r\n        <CCol col>\r\n            <div class=\"col-lg-12 control-section\" style=\"padding:10px;position:relative;\">\r\n                <div style=\"width:100%;\">\r\n                    <ejs-grid ref='grid' id=\"deadlineAlertGridId\" :dataSource=\"data\" :allowFiltering='true' :commandClick='commandClick'\r\n                              :allowPaging=\"true\" :allowTextWrap='true' :textWrapSettings='wrapSettings' :allowResizing='true' \r\n                              :toolbarClick='toolbarClick' :allowExcelExport='true' :excelExportComplete='excelExportComplete' \r\n                              :allowReordering='true' :allowSorting='true' :editSettings='editSettings' :toolbar='toolbar' \r\n                              :pageSettings='pageSettings' :actionComplete='actionComplete' :actionBegin=\"actionBegin\" \r\n                              :actionFailure=\"actionFailure\" :filterSettings='filterOptions' :queryCellInfo='customiseCell' \r\n                              :query='gridQuery' width=\"100%\" height=\"100%\">\r\n                        <e-columns>\r\n                            <e-column field='id' headerText='Id' width=120 :isPrimaryKey='true' :visible='false'></e-column>\r\n                            <e-column field='alertDate' headerText='Alert Date' textAlign='Right' :format='dateFormatOptions' type='date' width=150></e-column>\r\n                            <e-column field='alertType' headerText='Alert' width=120></e-column>\r\n                            <e-column field='clientName' headerText='Client' width=210></e-column>\r\n                            <e-column field='stateName' headerText='Country' width=150></e-column>\r\n                            <e-column field='companyName' headerText='Company' width=210></e-column>\r\n                            <e-column field='contractName' headerText='Contract' width=300></e-column>\r\n                            <e-column field='utilityTypeName' headerText='Commodity' width=150 :visible=\"false\"></e-column>\r\n                            <e-column field='tradeablePeriodName' headerText='Period' width=120></e-column>\r\n\r\n                            <e-column field='deafaultDeadlineDate' headerText='Default Deadline' textAlign='Right' :format='dateFormatOptions' type='date' width=180></e-column>\r\n                            <e-column field='openVolume' headerText='Open Volume' textAlign='Right' type=\"number\" format=\"n2\" width=180></e-column>\r\n                            <e-column field='alertStatus' headerText='Status' width=120></e-column>\r\n                            <e-column headerText='Actions' width=220 textAlign='left' :commands='commands'></e-column>\r\n                        </e-columns>\r\n                    </ejs-grid>\r\n                </div>\r\n                    <ejs-dialog :buttons='alertDlgButtons' cssClass=\"greyBackground\" ref=\"alertDialog\" id=\"alertDialogDefDeadline\" v-bind:visible=\"false\" :animationSettings='animationSettings' :showCloseIcon='showCloseIcon' :open=\"dialogOpen\" :close=\"dialogClose\" :width=\"alertWidth\" :header=\"header\" :allowDragging=\"draggable\" :position=\"position\">\r\n                        <h5 class=\"ml-5\" id=\"graphHeader\">  {{alertType}} - Default Deadline</h5><br />\r\n                        <label class=\"mr-5 float-right\">Alert issued on : {{alertDate}}</label><br />\r\n                        <br />\r\n                        <label class=\"ml-5\">{{alertText}}</label><br />\r\n                        <br />\r\n                        <div class=\"row\">\r\n                            <div class=\"column ml-3\">\r\n                                <label class=\"ml-5\"><b>Client</b>: {{client}}</label><br />\r\n                                <label class=\"ml-5\"><b>Country</b>: {{country}}</label><br />\r\n                                <label class=\"ml-5\"><b>Utility</b>: {{utility}}</label><br />\r\n                                <label class=\"ml-5\"><b>Company</b>: {{company}}</label><br />\r\n                                <label class=\"ml-5\"><b>Contract Name</b>: {{contractName}}</label><br />\r\n                                <label class=\"ml-5\"><b>Contract ID</b>: {{contractId}}</label><br />\r\n                                <br />\r\n                            </div>\r\n                            <div class=\"column ml-5\">\r\n                                <label class=\"ml-5\"><b>Period</b>: {{watchPeriod}}</label><br />\r\n                                <label class=\"ml-5\"><b>Default Deadline</b>: {{deafaultDeadlineDate}}</label><br />\r\n                                <label class=\"ml-5\"><b>Open Volume</b>: {{openVolume}} %</label><br />\r\n                            </div>\r\n                        </div>\r\n                    </ejs-dialog>\r\n                </div>\r\n</CCol>\r\n    </CRow>\r\n</template>\r\n\r\n<script>\r\n    import Vue from \"vue\";\r\n    import { GridPlugin, Edit, Page, Toolbar, Sort, Filter, Reorder, Resize, ExcelExport, ForeignKey, CommandColumn } from \"@syncfusion/ej2-vue-grids\";\r\n    import { DialogUtility } from '@syncfusion/ej2-popups';\r\n    import SyncHelper from '../../common/syncfusion';\r\n    import gridOptions from '../../common/gridOptions'\r\n    import urls from '../../common/urls';\r\n    import apis from '../../common/network'\r\n    import { Query } from '@syncfusion/ej2-data';\r\n    import { DialogPlugin } from '@syncfusion/ej2-vue-popups';\r\n    import { ButtonPlugin } from '@syncfusion/ej2-vue-buttons';\r\n    import store from '../../store';\r\n    import moment from 'moment';\r\n\r\n    Vue.use(DialogUtility);\r\n    Vue.use(GridPlugin);\r\n    Vue.use(ButtonPlugin);\r\n    Vue.use(DialogPlugin);\r\n\r\n    export default {\r\n        props: ['reportContractId', 'clientId', 'reportTradingGroupId'],\r\n        components: {\r\n        },\r\n        data() {\r\n            return {\r\n                // needed because of form being loaded from tab,in such cases this isnt available and store is loaded from import\r\n                store: store,\r\n                // needed for vieweing dialog,initally not there then appears\r\n                showCloseIcon: false,\r\n                alertWidth: '700px',\r\n                position: { X: 'center', Y: 'center' },\r\n                animationSettings: { effect: 'Zoom' },\r\n                alertDlgButtons: [{ click: this.alertDlgBtnClick, buttonModel: { content: 'Dismiss', isPrimary: true } }],\r\n                ShowBtn: true,\r\n                gridQuery: new Query().addParams(\"contractId\", this.reportContractId).addParams(\"clientId\", this.clientId).addParams(\"tradingGroupId\", this.reportTradingGroupId),// when form is loaded from contracts reporting ui, when not it will be undefined\r\n                contractUnits: \"\",\r\n                alertType: \"\",\r\n                openVolume: \"\",\r\n                deafaultDeadlineDate: \"\",\r\n                alertDate: \"\",\r\n                client: \"\",\r\n                country: \"\",\r\n                utility: \"\",\r\n                company: \"\",\r\n                contractName: \"\",\r\n                contractId: \"\",\r\n                watchPeriod: \"\",\r\n                alertText: \"\",\r\n                type: \"\",\r\n                wrapSettings: { wrapMode: 'Header' },\r\n                commands: [{\r\n                    buttonOption:\r\n                        { cssClass: 'e-primary', content: 'View' }\r\n                },\r\n                {\r\n                    buttonOption:\r\n                        { cssClass: 'secondary', content: 'Mark as Seen' }\r\n                }],\r\n                dateFormatOptions: { type: 'date', format: 'dd/MM/yyyy' },\r\n                data: SyncHelper.getDataManager(\"DefaultDeadlineAlert\"),\r\n                //pageSettings: gridOptions.pageSettings,\r\n                pageSettings: { pageSizes: [10, 20, 50, 100], pageSize: 10, pageCount: 4 },\r\n                editSettings: {\r\n                    showConfirmDialog: true,\r\n                    showDeleteConfirmDialog: true,\r\n                    allowEditing: false,\r\n                    allowAdding: false,\r\n                    allowDeleting: store.state.permissions[\"Permissions.Triggers.Delete\"],\r\n                    mode: 'Dialog'\r\n                },\r\n                toolbar: ['Delete', 'ExcelExport'],\r\n                editparams: { params: { popupHeight: '300px' } },\r\n                filterOptions: gridOptions.filterSettings,\r\n                draggable: true,\r\n                header: \" \"\r\n            };\r\n        },\r\n        methods: {\r\n            alertDlgBtnClick: function () {\r\n                this.$refs.alertDialog.hide();\r\n            },\r\n            dialogClose: function () {\r\n                this.ShowBtn = true;\r\n            },\r\n            dialogOpen: function () {\r\n                this.ShowBtn = false;\r\n            },\r\n            commandClick: function (args) {\r\n                var triggerAlertId = args.rowData.id;\r\n                if (args.commandColumn.buttonOption.content == \"View\") {// clone command button\r\n                    this.loadGraph(args.rowData);\r\n                }\r\n                else if (args.commandColumn.buttonOption.content == \"Mark as Seen\" || args.commandColumn.buttonOption.content == \"Mark as Unseen\") {// clone command button\r\n                    this.changeAlertStatus(triggerAlertId, this.$refs.grid);\r\n                 \r\n                }\r\n            },\r\n            changeAlertStatus: function (args,grid) {\r\n                apis.protectedApi.put(`${urls.apiBaseUrl}DefaultDeadlineAlert/UpdateStatus/`, { id: args }).then(it => {\r\n                    grid.refresh();\r\n                }).catch(\r\n                    response => {\r\n                        var message = response.response.data.message != undefined ? response.response.data.message : \"Error invoking service,please contact support\";\r\n                        gridOptions.errorAlert(\"Error: \" + message);\r\n                    }\r\n                );      \r\n            },\r\n            loadGraph: function (args) {\r\n         \r\n                if (args.alertType == \"Missed\") {\r\n                    document.getElementById('graphHeader').classList.remove('approachingDeadlineHeader');\r\n                    document.getElementById('graphHeader').classList.add('missedDeadlineHeader');\r\n                }\r\n                else {\r\n                    document.getElementById('graphHeader').classList.remove('missedDeadlineHeader');\r\n                    document.getElementById('graphHeader').classList.add('approachingDeadlineHeader');\r\n                }\r\n                //this.type = args.type;\r\n                this.alertText = args.alertType == \"Missed\" ? \"You have missed the hedging deadline for the period. The remaining Open Volume has defaulted. \" :\r\n                    \"The Deafult Deadline for the period is approaching. The remaining Open Volume will soon default.\";\r\n                \r\n                if (args.alertType == \"Watch Zone\") {\r\n                    this.alertType = args.alertType + \" \" + \"Entered\";\r\n                } else {\r\n                    this.alertType = args.alertType;\r\n                }\r\n                this.contractUnits = args.unit;\r\n                this.alertDate = moment(String(args.alertDate)).format('DD/MM/YYYY');\r\n                this.client = args.clientName;\r\n                this.country = args.stateName;\r\n                this.utility = args.utilityTypeName;\r\n                this.company = args.companyName;\r\n                this.contractName = args.contractName;\r\n                this.contractId = args.contractId;\r\n                this.watchPeriod = args.tradeablePeriodName;\r\n                this.openVolume = args.openVolume;\r\n                this.deafaultDeadlineDate = moment(String(args.deafaultDeadlineDate)).format('DD/MM/YYYY');\r\n\r\n                this.$refs.alertDialog.show();\r\n            },\r\n            toolbarClick(args) {\r\n                if (args.item.id.includes('excelexport')) {\r\n                    // hide and show dropdown columns and show text columns as they always have value but dropdowns if not on the page will not have values\r\n                }\r\n                gridOptions.excelExport(args, \"Deadline Alert.xlsx\", this.$refs);\r\n            },\r\n            excelExportComplete(args) {\r\n                this.$refs.grid.hideSpinner();\r\n                // hide and show dropdown columns and show text columns as they always have value but dropdowns if not on the page will not have values,and return to the state before export\r\n            },\r\n\r\n            actionBegin(args) {\r\n                gridOptions.actionBegin(args);\r\n             \r\n            },\r\n            actionComplete(args) {\r\n                gridOptions.actionComplete(args, this.$refs);\r\n\r\n                if (args.requestType == \"refresh\") {\r\n\r\n                    if (this.reportContractId != undefined) {\r\n                        apis.protectedApi(`${urls.apiBaseUrl}TriggerAlert/GroupCounts?contractId=${this.reportContractId}`).then(it => {\r\n                            this.deadline = it.data.deadline;\r\n                            this.status = it.data.status;\r\n                            this.hit = it.data.hit;\r\n                            this.AlertsCount = this.hit + this.deadline + this.status;\r\n                            //this is for counter in header, count unseen alerts\r\n                            if (document.getElementsByClassName('expiredTriggerHeader').length > 0) {\r\n                                document.getElementsByClassName('expiredTriggerHeader')[0].innerHTML = \"<u>DEFAULT DEADLINES\" + \" \" + this.deadline + \"</u>\";\r\n                                document.querySelectorAll('[role=\"presentation\"]')[6].innerHTML = \"Alerts\" + \"(\" + this.AlertsCount + \")\";\r\n                            }\r\n                        });\r\n\r\n                    }\r\n                    if (this.clientId != undefined) {\r\n                        apis.protectedApi(`${urls.apiBaseUrl}TriggerAlert/GroupCounts?clientId=${this.clientId}`).then(it => {\r\n                            this.deadline = it.data.deadline;\r\n                            this.status = it.data.status;\r\n                            this.hit = it.data.hit;\r\n                            this.AlertsCount = this.hit + this.deadline + this.status;\r\n                            //this is for counter in header, count unseen alerts\r\n                            if (document.getElementsByClassName('expiredTriggerHeader').length > 0) {\r\n                                document.getElementsByClassName('expiredTriggerHeader')[0].innerHTML = \"<u>DEFAULT DEADLINES\" + \" \" + this.deadline + \"</u>\";\r\n                                document.querySelectorAll('[role=\"presentation\"]')[5].innerHTML = \"Alerts\" + \"(\" + this.AlertsCount + \")\";\r\n                            }\r\n                        });\r\n\r\n                    }\r\n                    if (this.reportTradingGroupId != undefined) {\r\n                        apis.protectedApi(`${urls.apiBaseUrl}TriggerAlert/GroupCountsATG?tradingGroupId=${this.reportTradingGroupId}`).then(it => {\r\n                            this.deadline = it.data.deadline;\r\n                            this.status = it.data.status;\r\n                            this.hit = it.data.hit;\r\n                            this.AlertsCount = this.hit + this.deadline + this.status;\r\n                            //this is for counter in header, count unseen alerts\r\n                            if (document.getElementsByClassName('expiredTriggerHeader').length > 0) {\r\n                                document.getElementsByClassName('expiredTriggerHeader')[0].innerHTML = \"<u>DEFAULT DEADLINES\" + \" \" + this.deadline + \"</u>\";\r\n                                document.querySelectorAll('[role=\"presentation\"]')[6].innerHTML = \"Alerts\" + \"(\" + this.AlertsCount + \")\";\r\n                            }\r\n                        });\r\n                    }\r\n\r\n                }\r\n            },\r\n            actionFailure(args) {\r\n                gridOptions.actionFailure(args);\r\n            },\r\n            customiseCell: function (args) { // when setting up the grid this is rendering each column on its own\r\n                if (args.column.field === 'alertType') {\r\n                    if (args.data['alertType'] == 'Missed') {\r\n                        args.cell.classList.add('redBox');\r\n                    } else {\r\n                        args.cell.classList.add('orangeBox');\r\n                    }\r\n                } else if (args.column.field === 'openVolume') {\r\n                    args.cell.textContent = args.cell.textContent + \"%\";\r\n                } else if (args.column.headerText === \"Actions\") {\r\n                    if (args.data['alertStatus'] == 'Seen') {\r\n                        args.cell.querySelector(\"button[title='Mark as Seen']\").textContent = 'Mark as Unseen';\r\n                        args.cell.querySelector(\"button[title='Mark as Seen']\").title = 'Mark as Unseen';\r\n                    }\r\n                }\r\n            },\r\n        },\r\n        provide: {\r\n            grid: [Page, Edit, Toolbar, Sort, Filter, Reorder, Resize, ExcelExport, ForeignKey, CommandColumn],\r\n        }\r\n    };\r\n\r\n</script>\r\n<style>\r\n/*    .e-dialog {\r\n        max-height: 900px !important;\r\n        top: 0px !important;\r\n    }*/\r\n    /*@import \"../node_modules/@syncfusion/ej2-vue-grids/styles/material.css\";*/\r\n    .orangeBox {\r\n        background-color: #d9843b !important;\r\n    }\r\n\r\n    .redBox {\r\n        background-color: #f78764 !important;\r\n    }\r\n\r\n    .greyBackground {\r\n        background-color: lightgrey;\r\n    }\r\n    #alertDialogDefDeadline .e-dlg-content {\r\n        color: #4d4d4d !important;\r\n    }\r\n    .missedDeadlineHeader {\r\n        text-transform: uppercase;\r\n        color: #f78764 !important;\r\n    }\r\n    .approachingDeadlineHeader {\r\n        text-transform: uppercase;\r\n        color: #7FB7BE !important;\r\n    }\r\n    #deadlineAlertGridId .e-content {\r\n        min-height: 0px!important;\r\n    }\r\n    #alertDialogDefDeadline {\r\n        max-height: 100% !important;\r\n        z-index: 10000 !important;\r\n        position: fixed !important;\r\n        top: 20% !important;\r\n    }\r\n\r\n</style>\r\n","import mod from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DeadlineAlert.vue?vue&type=script&lang=js\"; export default mod; export * from \"-!../../../node_modules/cache-loader/dist/cjs.js??ref--12-0!../../../node_modules/thread-loader/dist/cjs.js!../../../node_modules/babel-loader/lib/index.js!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./DeadlineAlert.vue?vue&type=script&lang=js\"","import { render, staticRenderFns } from \"./DeadlineAlert.vue?vue&type=template&id=917cdcba\"\nimport script from \"./DeadlineAlert.vue?vue&type=script&lang=js\"\nexport * from \"./DeadlineAlert.vue?vue&type=script&lang=js\"\nimport style0 from \"./DeadlineAlert.vue?vue&type=style&index=0&id=917cdcba&prod&lang=css\"\n\n\n/* normalize component */\nimport normalizer from \"!../../../node_modules/vue-loader/lib/runtime/componentNormalizer.js\"\nvar component = normalizer(\n  script,\n  render,\n  staticRenderFns,\n  false,\n  null,\n  null,\n  null\n  \n)\n\nexport default component.exports","//! moment.js locale configuration\n//! locale : German [de]\n//! author : lluchs : https://github.com/lluchs\n//! author: Menelion Elensúle: https://github.com/Oire\n//! author : Mikolaj Dadela : https://github.com/mik01aj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var de = moment.defineLocale('de', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So._Mo._Di._Mi._Do._Fr._Sa.'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return de;\n\n})));\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight Latin [tzm-latn]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tzmLatn = moment.defineLocale('tzm-latn', {\n        months: 'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n            '_'\n        ),\n        monthsShort:\n            'innayr_brˤayrˤ_marˤsˤ_ibrir_mayyw_ywnyw_ywlywz_ɣwšt_šwtanbir_ktˤwbrˤ_nwwanbir_dwjnbir'.split(\n                '_'\n            ),\n        weekdays: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysShort: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        weekdaysMin: 'asamas_aynas_asinas_akras_akwas_asimwas_asiḍyas'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[asdkh g] LT',\n            nextDay: '[aska g] LT',\n            nextWeek: 'dddd [g] LT',\n            lastDay: '[assant g] LT',\n            lastWeek: 'dddd [g] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dadkh s yan %s',\n            past: 'yan %s',\n            s: 'imik',\n            ss: '%d imik',\n            m: 'minuḍ',\n            mm: '%d minuḍ',\n            h: 'saɛa',\n            hh: '%d tassaɛin',\n            d: 'ass',\n            dd: '%d ossan',\n            M: 'ayowr',\n            MM: '%d iyyirn',\n            y: 'asgas',\n            yy: '%d isgasn',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzmLatn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Javanese [jv]\n//! author : Rony Lantip : https://github.com/lantip\n//! reference: http://jv.wikipedia.org/wiki/Basa_Jawa\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var jv = moment.defineLocale('jv', {\n        months: 'Januari_Februari_Maret_April_Mei_Juni_Juli_Agustus_September_Oktober_Nopember_Desember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_Mei_Jun_Jul_Ags_Sep_Okt_Nop_Des'.split('_'),\n        weekdays: 'Minggu_Senen_Seloso_Rebu_Kemis_Jemuwah_Septu'.split('_'),\n        weekdaysShort: 'Min_Sen_Sel_Reb_Kem_Jem_Sep'.split('_'),\n        weekdaysMin: 'Mg_Sn_Sl_Rb_Km_Jm_Sp'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /enjing|siyang|sonten|ndalu/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'enjing') {\n                return hour;\n            } else if (meridiem === 'siyang') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'sonten' || meridiem === 'ndalu') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'enjing';\n            } else if (hours < 15) {\n                return 'siyang';\n            } else if (hours < 19) {\n                return 'sonten';\n            } else {\n                return 'ndalu';\n            }\n        },\n        calendar: {\n            sameDay: '[Dinten puniko pukul] LT',\n            nextDay: '[Mbenjang pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kala wingi pukul] LT',\n            lastWeek: 'dddd [kepengker pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'wonten ing %s',\n            past: '%s ingkang kepengker',\n            s: 'sawetawis detik',\n            ss: '%d detik',\n            m: 'setunggal menit',\n            mm: '%d menit',\n            h: 'setunggal jam',\n            hh: '%d jam',\n            d: 'sedinten',\n            dd: '%d dinten',\n            M: 'sewulan',\n            MM: '%d wulan',\n            y: 'setaun',\n            yy: '%d taun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return jv;\n\n})));\n","//! moment.js locale configuration\n//! locale : Spanish (Mexico) [es-mx]\n//! author : JC Franco : https://github.com/jcfranco\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortDot =\n            'ene._feb._mar._abr._may._jun._jul._ago._sep._oct._nov._dic.'.split(\n                '_'\n            ),\n        monthsShort = 'ene_feb_mar_abr_may_jun_jul_ago_sep_oct_nov_dic'.split('_'),\n        monthsParse = [\n            /^ene/i,\n            /^feb/i,\n            /^mar/i,\n            /^abr/i,\n            /^may/i,\n            /^jun/i,\n            /^jul/i,\n            /^ago/i,\n            /^sep/i,\n            /^oct/i,\n            /^nov/i,\n            /^dic/i,\n        ],\n        monthsRegex =\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre|ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i;\n\n    var esMx = moment.defineLocale('es-mx', {\n        months: 'enero_febrero_marzo_abril_mayo_junio_julio_agosto_septiembre_octubre_noviembre_diciembre'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortDot;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShort[m.month()];\n            } else {\n                return monthsShortDot[m.month()];\n            }\n        },\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(enero|febrero|marzo|abril|mayo|junio|julio|agosto|septiembre|octubre|noviembre|diciembre)/i,\n        monthsShortStrictRegex:\n            /^(ene\\.?|feb\\.?|mar\\.?|abr\\.?|may\\.?|jun\\.?|jul\\.?|ago\\.?|sep\\.?|oct\\.?|nov\\.?|dic\\.?)/i,\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n        weekdays: 'domingo_lunes_martes_miércoles_jueves_viernes_sábado'.split('_'),\n        weekdaysShort: 'dom._lun._mar._mié._jue._vie._sáb.'.split('_'),\n        weekdaysMin: 'do_lu_ma_mi_ju_vi_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY H:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[hoy a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextDay: function () {\n                return '[mañana a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastDay: function () {\n                return '[ayer a la' + (this.hours() !== 1 ? 's' : '') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [pasado a la' +\n                    (this.hours() !== 1 ? 's' : '') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'en %s',\n            past: 'hace %s',\n            s: 'unos segundos',\n            ss: '%d segundos',\n            m: 'un minuto',\n            mm: '%d minutos',\n            h: 'una hora',\n            hh: '%d horas',\n            d: 'un día',\n            dd: '%d días',\n            w: 'una semana',\n            ww: '%d semanas',\n            M: 'un mes',\n            MM: '%d meses',\n            y: 'un año',\n            yy: '%d años',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n        invalidDate: 'Fecha inválida',\n    });\n\n    return esMx;\n\n})));\n","import { select, detach } from '@syncfusion/ej2-base';\nimport { VScroll } from './v-scroll';\nimport { HScroll } from './h-scroll';\n/**\n * Used to add scroll in menu.\n *\n * @param {createElementType} createElement - Specifies the create element model\n * @param {HTMLElement} container - Specifies the element container\n * @param {HTMLElement} content - Specifies the content element\n * @param {string} scrollType - Specifies the scroll type\n * @param {boolean} enableRtl - Specifies the enable RTL property\n * @param {boolean} offset - Specifies the offset value\n * @returns {HTMLElement} - Element\n * @hidden\n */\nexport function addScrolling(createElement, container, content, scrollType, enableRtl, offset) {\n    var containerOffset;\n    var contentOffset;\n    var parentElem = container.parentElement;\n    if (scrollType === 'vscroll') {\n        containerOffset = offset || container.getBoundingClientRect().height;\n        contentOffset = content.getBoundingClientRect().height;\n    }\n    else {\n        containerOffset = container.getBoundingClientRect().width;\n        contentOffset = content.getBoundingClientRect().width;\n    }\n    if (containerOffset < contentOffset) {\n        return createScrollbar(createElement, container, content, scrollType, enableRtl, offset);\n    }\n    else if (parentElem) {\n        var width = parentElem.getBoundingClientRect().width;\n        if (width < containerOffset && scrollType === 'hscroll') {\n            contentOffset = width;\n            container.style.maxWidth = width + 'px';\n            return createScrollbar(createElement, container, content, scrollType, enableRtl, offset);\n        }\n        return content;\n    }\n    else {\n        return content;\n    }\n}\n/**\n * Used to create scroll bar in menu.\n *\n * @param {createElementType} createElement - Specifies the create element model\n * @param {HTMLElement} container - Specifies the element container\n * @param {HTMLElement} content - Specifies the content element\n * @param {string} scrollType - Specifies the scroll type\n * @param {boolean} enableRtl - Specifies the enable RTL property\n * @param {boolean} offset - Specifies the offset value\n * @returns {HTMLElement} - Element\n * @hidden\n */\nfunction createScrollbar(createElement, container, content, scrollType, enableRtl, offset) {\n    var scrollEle = createElement('div', { className: 'e-menu-' + scrollType });\n    container.appendChild(scrollEle);\n    scrollEle.appendChild(content);\n    if (offset) {\n        scrollEle.style.overflow = 'hidden';\n        scrollEle.style.height = offset + 'px';\n    }\n    else {\n        scrollEle.style.maxHeight = container.style.maxHeight;\n        container.style.overflow = 'hidden';\n    }\n    var scrollObj;\n    if (scrollType === 'vscroll') {\n        scrollObj = new VScroll({ enableRtl: enableRtl }, scrollEle);\n        scrollObj.scrollStep = select('.e-' + scrollType + '-bar', container).offsetHeight / 2;\n    }\n    else {\n        scrollObj = new HScroll({ enableRtl: enableRtl }, scrollEle);\n        scrollObj.scrollStep = select('.e-' + scrollType + '-bar', container).offsetWidth;\n    }\n    return scrollEle;\n}\n/**\n * Used to destroy the scroll option.\n *\n * @param {VScroll | HScroll} scrollObj - Specifies the scroller object\n * @param {Element} element - Specifies the element\n * @param {HTMLElement} skipEle - Specifies the skip  element\n * @returns {void}\n * @hidden\n */\nexport function destroyScroll(scrollObj, element, skipEle) {\n    if (scrollObj) {\n        var menu = select('.e-menu-parent', element);\n        if (menu) {\n            if (!skipEle || skipEle === menu) {\n                scrollObj.destroy();\n                element.parentElement.appendChild(menu);\n                detach(element);\n            }\n        }\n        else {\n            scrollObj.destroy();\n            detach(element);\n        }\n    }\n}\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, ChildProperty, NotifyPropertyChanges, isBlazor } from '@syncfusion/ej2-base';\nimport { Event, EventHandler, KeyboardEvents, Touch } from '@syncfusion/ej2-base';\nimport { Animation } from '@syncfusion/ej2-base';\nimport { Browser, Collection, setValue, getValue, getUniqueID, getInstance, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { select, selectAll, closest, detach, append, rippleEffect, isVisible, Complex, addClass, removeClass } from '@syncfusion/ej2-base';\nimport { ListBase } from '@syncfusion/ej2-lists';\nimport { getZindexPartial, calculatePosition, isCollide, fit, Popup } from '@syncfusion/ej2-popups';\nimport { SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { getScrollableParent } from '@syncfusion/ej2-popups';\nimport { HScroll } from '../common/h-scroll';\nimport { VScroll } from '../common/v-scroll';\nimport { addScrolling, destroyScroll } from '../common/menu-scroll';\nvar ENTER = 'enter';\nvar ESCAPE = 'escape';\nvar FOCUSED = 'e-focused';\nvar HEADER = 'e-menu-header';\nvar SELECTED = 'e-selected';\nvar SEPARATOR = 'e-separator';\nvar UPARROW = 'uparrow';\nvar DOWNARROW = 'downarrow';\nvar LEFTARROW = 'leftarrow';\nvar RIGHTARROW = 'rightarrow';\nvar HOME = 'home';\nvar END = 'end';\nvar TAB = 'tab';\nvar CARET = 'e-caret';\nvar ITEM = 'e-menu-item';\nvar DISABLED = 'e-disabled';\nvar HIDE = 'e-menu-hide';\nvar ICONS = 'e-icons';\nvar RTL = 'e-rtl';\nvar POPUP = 'e-menu-popup';\nvar TEMPLATE_PROPERTY = 'Template';\n/**\n * Configures the field options of the Menu.\n */\nvar FieldSettings = /** @class */ (function (_super) {\n    __extends(FieldSettings, _super);\n    function FieldSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('id')\n    ], FieldSettings.prototype, \"itemId\", void 0);\n    __decorate([\n        Property('parentId')\n    ], FieldSettings.prototype, \"parentId\", void 0);\n    __decorate([\n        Property('text')\n    ], FieldSettings.prototype, \"text\", void 0);\n    __decorate([\n        Property('iconCss')\n    ], FieldSettings.prototype, \"iconCss\", void 0);\n    __decorate([\n        Property('url')\n    ], FieldSettings.prototype, \"url\", void 0);\n    __decorate([\n        Property('separator')\n    ], FieldSettings.prototype, \"separator\", void 0);\n    __decorate([\n        Property('items')\n    ], FieldSettings.prototype, \"children\", void 0);\n    return FieldSettings;\n}(ChildProperty));\nexport { FieldSettings };\n/**\n * Specifies menu items.\n */\nvar MenuItem = /** @class */ (function (_super) {\n    __extends(MenuItem, _super);\n    function MenuItem() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(null)\n    ], MenuItem.prototype, \"iconCss\", void 0);\n    __decorate([\n        Property('')\n    ], MenuItem.prototype, \"id\", void 0);\n    __decorate([\n        Property(false)\n    ], MenuItem.prototype, \"separator\", void 0);\n    __decorate([\n        Collection([], MenuItem)\n    ], MenuItem.prototype, \"items\", void 0);\n    __decorate([\n        Property('')\n    ], MenuItem.prototype, \"text\", void 0);\n    __decorate([\n        Property('')\n    ], MenuItem.prototype, \"url\", void 0);\n    return MenuItem;\n}(ChildProperty));\nexport { MenuItem };\n/**\n * Animation configuration settings.\n */\nvar MenuAnimationSettings = /** @class */ (function (_super) {\n    __extends(MenuAnimationSettings, _super);\n    function MenuAnimationSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('SlideDown')\n    ], MenuAnimationSettings.prototype, \"effect\", void 0);\n    __decorate([\n        Property(400)\n    ], MenuAnimationSettings.prototype, \"duration\", void 0);\n    __decorate([\n        Property('ease')\n    ], MenuAnimationSettings.prototype, \"easing\", void 0);\n    return MenuAnimationSettings;\n}(ChildProperty));\nexport { MenuAnimationSettings };\n/**\n * Base class for Menu and ContextMenu components.\n *\n *  @private\n */\nvar MenuBase = /** @class */ (function (_super) {\n    __extends(MenuBase, _super);\n    /**\n     * Constructor for creating the widget.\n     *\n     * @private\n     * @param {MenuBaseModel} options - Specifies the menu base model\n     * @param {string | HTMLUListElement} element - Specifies the element\n     */\n    function MenuBase(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.navIdx = [];\n        _this.animation = new Animation({});\n        _this.isTapHold = false;\n        _this.tempItem = [];\n        _this.showSubMenuOn = 'Auto';\n        return _this;\n    }\n    /**\n     * Initialized third party configuration settings.\n     *\n     * @private\n     * @returns {void}\n     */\n    MenuBase.prototype.preRender = function () {\n        if (!this.isMenu) {\n            var ul = void 0;\n            if (this.element.tagName === 'EJS-CONTEXTMENU') {\n                ul = this.createElement('ul', {\n                    id: getUniqueID(this.getModuleName()), className: 'e-control e-lib e-' + this.getModuleName()\n                });\n                var ejInst = getValue('ej2_instances', this.element);\n                removeClass([this.element], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);\n                this.clonedElement = this.element;\n                this.element = ul;\n                setValue('ej2_instances', ejInst, this.element);\n            }\n            else {\n                ul = this.createElement('ul', { id: getUniqueID(this.getModuleName()) });\n                append([].slice.call(this.element.cloneNode(true).children), ul);\n                var refEle = this.element.nextElementSibling;\n                if (refEle) {\n                    this.element.parentElement.insertBefore(ul, refEle);\n                }\n                else {\n                    this.element.parentElement.appendChild(ul);\n                }\n                this.clonedElement = ul;\n            }\n            this.clonedElement.style.display = 'none';\n        }\n        if (this.element.tagName === 'EJS-MENU') {\n            var ele = this.element;\n            var ejInstance = getValue('ej2_instances', ele);\n            var ul = this.createElement('ul');\n            var wrapper = this.createElement('EJS-MENU', { className: 'e-' + this.getModuleName() + '-wrapper' });\n            for (var idx = 0, len = ele.attributes.length; idx < len; idx++) {\n                ul.setAttribute(ele.attributes[idx].nodeName, ele.attributes[idx].nodeValue);\n            }\n            ele.parentNode.insertBefore(wrapper, ele);\n            detach(ele);\n            ele = ul;\n            wrapper.appendChild(ele);\n            setValue('ej2_instances', ejInstance, ele);\n            this.clonedElement = wrapper;\n            this.element = ele;\n            if (!this.element.id) {\n                this.element.id = getUniqueID(this.getModuleName());\n            }\n        }\n    };\n    /**\n     * Initialize the control rendering.\n     *\n     * @private\n     * @returns {void}\n     */\n    MenuBase.prototype.render = function () {\n        var _this = this;\n        this.initialize();\n        this.renderItems();\n        this.wireEvents();\n        this.renderComplete();\n        var wrapper = this.getWrapper();\n        // eslint-disable-next-line\n        if (this.template && this.enableScrolling && (this.isReact || this.isAngular)) {\n            requestAnimationFrame(function () {\n                addScrolling(_this.createElement, wrapper, _this.element, 'hscroll', _this.enableRtl);\n            });\n        }\n    };\n    MenuBase.prototype.initialize = function () {\n        var wrapper = this.getWrapper();\n        if (!wrapper) {\n            wrapper = this.createElement('div', { className: 'e-' + this.getModuleName() + '-wrapper' });\n            if (this.isMenu) {\n                this.element.parentElement.insertBefore(wrapper, this.element);\n            }\n            else {\n                document.body.appendChild(wrapper);\n            }\n        }\n        if (this.cssClass) {\n            addClass([wrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n        }\n        if (this.enableRtl) {\n            wrapper.classList.add(RTL);\n        }\n        wrapper.appendChild(this.element);\n        if (this.isMenu && this.hamburgerMode) {\n            if (!this.target) {\n                this.createHeaderContainer(wrapper);\n            }\n        }\n        this.defaultOption = this.showItemOnClick;\n    };\n    MenuBase.prototype.renderItems = function () {\n        if (!this.items.length) {\n            var items = ListBase.createJsonFromElement(this.element, { fields: { child: 'items' } });\n            this.setProperties({ items: items }, true);\n            if (isBlazor() && !this.isMenu) {\n                this.element = this.removeChildElement(this.element);\n            }\n            else {\n                this.element.innerHTML = '';\n            }\n        }\n        var ul = this.createItems(this.items);\n        append(Array.prototype.slice.call(ul.children), this.element);\n        this.element.classList.add('e-menu-parent');\n        if (this.isMenu) {\n            if (!this.hamburgerMode && this.element.classList.contains('e-vertical')) {\n                this.setBlankIconStyle(this.element);\n            }\n            if (this.enableScrolling) {\n                var wrapper = this.getWrapper();\n                if (this.element.classList.contains('e-vertical')) {\n                    addScrolling(this.createElement, wrapper, this.element, 'vscroll', this.enableRtl);\n                }\n                else {\n                    addScrolling(this.createElement, wrapper, this.element, 'hscroll', this.enableRtl);\n                }\n            }\n        }\n        else {\n            this.element.parentElement.setAttribute('role', 'dialog');\n            this.element.parentElement.setAttribute('aria-label', 'context menu');\n        }\n    };\n    MenuBase.prototype.wireEvents = function () {\n        var wrapper = this.getWrapper();\n        if (this.target) {\n            var target = void 0;\n            var targetElems = selectAll(this.target);\n            for (var i = 0, len = targetElems.length; i < len; i++) {\n                target = targetElems[i];\n                if (this.isMenu) {\n                    EventHandler.add(target, 'click', this.menuHeaderClickHandler, this);\n                }\n                else {\n                    if (Browser.isIos) {\n                        new Touch(target, { tapHold: this.touchHandler.bind(this) });\n                    }\n                    else {\n                        EventHandler.add(target, 'contextmenu', this.cmenuHandler, this);\n                    }\n                }\n            }\n            this.targetElement = target;\n            if (!this.isMenu) {\n                EventHandler.add(this.targetElement, 'mousewheel DOMMouseScroll', this.scrollHandler, this);\n                for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n                    var parent_1 = _a[_i];\n                    EventHandler.add(parent_1, 'mousewheel DOMMouseScroll', this.scrollHandler, this);\n                }\n            }\n        }\n        if (!Browser.isDevice) {\n            this.delegateMoverHandler = this.moverHandler.bind(this);\n            this.delegateMouseDownHandler = this.mouseDownHandler.bind(this);\n            EventHandler.add(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler, this);\n            EventHandler.add(document, 'mousedown', this.delegateMouseDownHandler, this);\n        }\n        this.delegateClickHandler = this.clickHandler.bind(this);\n        EventHandler.add(document, 'click', this.delegateClickHandler, this);\n        this.wireKeyboardEvent(wrapper);\n        this.rippleFn = rippleEffect(wrapper, { selector: '.' + ITEM });\n    };\n    MenuBase.prototype.wireKeyboardEvent = function (element) {\n        var keyConfigs = {\n            downarrow: DOWNARROW,\n            uparrow: UPARROW,\n            enter: ENTER,\n            leftarrow: LEFTARROW,\n            rightarrow: RIGHTARROW,\n            escape: ESCAPE\n        };\n        if (this.isMenu) {\n            keyConfigs.home = HOME;\n            keyConfigs.end = END;\n            keyConfigs.tab = TAB;\n        }\n        new KeyboardEvents(element, {\n            keyAction: this.keyBoardHandler.bind(this),\n            keyConfigs: keyConfigs\n        });\n    };\n    MenuBase.prototype.mouseDownHandler = function (e) {\n        if (closest(e.target, '.e-' + this.getModuleName() + '-wrapper') !== this.getWrapper()\n            && (!closest(e.target, '.e-' + this.getModuleName() + '-popup'))) {\n            this.closeMenu(this.isMenu ? null : this.navIdx.length, e);\n        }\n    };\n    MenuBase.prototype.keyHandler = function (e) {\n        if (e.keyCode === 38 || e.keyCode === 40) {\n            if (e.target && (e.target.classList.contains('e-contextmenu') || e.target.classList.contains('e-menu-item'))) {\n                e.preventDefault();\n            }\n        }\n    };\n    MenuBase.prototype.keyBoardHandler = function (e) {\n        var actionName = '';\n        var trgt = e.target;\n        var actionNeeded = this.isMenu && !this.hamburgerMode && !this.element.classList.contains('e-vertical')\n            && this.navIdx.length < 1;\n        e.preventDefault();\n        if (this.enableScrolling && e.keyCode === 13 && trgt.classList.contains('e-scroll-nav')) {\n            this.removeLIStateByClass([FOCUSED, SELECTED], [closest(trgt, '.e-' + this.getModuleName() + '-wrapper')]);\n        }\n        if (actionNeeded) {\n            switch (e.action) {\n                case RIGHTARROW:\n                    actionName = RIGHTARROW;\n                    e.action = DOWNARROW;\n                    break;\n                case LEFTARROW:\n                    actionName = LEFTARROW;\n                    e.action = UPARROW;\n                    break;\n                case DOWNARROW:\n                    actionName = DOWNARROW;\n                    e.action = RIGHTARROW;\n                    break;\n                case UPARROW:\n                    actionName = UPARROW;\n                    e.action = '';\n                    break;\n            }\n        }\n        else if (this.enableRtl) {\n            switch (e.action) {\n                case LEFTARROW:\n                    actionNeeded = true;\n                    actionName = LEFTARROW;\n                    e.action = RIGHTARROW;\n                    break;\n                case RIGHTARROW:\n                    actionNeeded = true;\n                    actionName = RIGHTARROW;\n                    e.action = LEFTARROW;\n                    break;\n            }\n        }\n        switch (e.action) {\n            case DOWNARROW:\n            case UPARROW:\n            case END:\n            case HOME:\n            case TAB:\n                this.upDownKeyHandler(e);\n                break;\n            case RIGHTARROW:\n                this.rightEnterKeyHandler(e);\n                break;\n            case LEFTARROW:\n                this.leftEscKeyHandler(e);\n                break;\n            case ENTER:\n                if (this.hamburgerMode && trgt.tagName === 'SPAN' && trgt.classList.contains('e-menu-icon')) {\n                    this.menuHeaderClickHandler(e);\n                }\n                else {\n                    this.rightEnterKeyHandler(e);\n                }\n                break;\n            case ESCAPE:\n                this.leftEscKeyHandler(e);\n                break;\n        }\n        if (actionNeeded) {\n            e.action = actionName;\n        }\n    };\n    MenuBase.prototype.upDownKeyHandler = function (e) {\n        var cul = this.getUlByNavIdx();\n        var defaultIdx = (e.action === DOWNARROW || e.action === HOME || e.action === TAB) ? 0 : cul.childElementCount - 1;\n        var fliIdx = defaultIdx;\n        var fli = this.getLIByClass(cul, FOCUSED);\n        if (fli) {\n            if (e.action !== END && e.action !== HOME) {\n                fliIdx = this.getIdx(cul, fli);\n            }\n            fli.classList.remove(FOCUSED);\n            if (e.action !== END && e.action !== HOME) {\n                if (e.action === DOWNARROW) {\n                    fliIdx++;\n                }\n                else {\n                    fliIdx--;\n                }\n                if (fliIdx === (e.action === DOWNARROW ? cul.childElementCount : -1)) {\n                    fliIdx = defaultIdx;\n                }\n            }\n        }\n        var cli = cul.children[fliIdx];\n        fliIdx = this.isValidLI(cli, fliIdx, e.action);\n        cul.children[fliIdx].classList.add(FOCUSED);\n        cul.children[fliIdx].focus();\n    };\n    MenuBase.prototype.isValidLI = function (cli, index, action) {\n        var cul = this.getUlByNavIdx();\n        var defaultIdx = (action === DOWNARROW || action === HOME || action === TAB) ? 0 : cul.childElementCount - 1;\n        if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n            if (action === DOWNARROW && index === cul.childElementCount - 1) {\n                index = defaultIdx;\n            }\n            else if (action === UPARROW && index === 0) {\n                index = defaultIdx;\n            }\n            else if ((action === DOWNARROW) || (action === RIGHTARROW)) {\n                index++;\n            }\n            else {\n                index--;\n            }\n        }\n        cli = cul.children[index];\n        if (cli.classList.contains(SEPARATOR) || cli.classList.contains(DISABLED) || cli.classList.contains(HIDE)) {\n            index = this.isValidLI(cli, index, action);\n        }\n        return index;\n    };\n    MenuBase.prototype.getUlByNavIdx = function (navIdxLen) {\n        var _this = this;\n        if (navIdxLen === void 0) { navIdxLen = this.navIdx.length; }\n        if (this.isMenu) {\n            var popup = [this.getWrapper()].concat([].slice.call(selectAll('.' + POPUP)))[navIdxLen];\n            var popups_1 = [];\n            var allPopup = selectAll('.' + POPUP);\n            allPopup.forEach(function (elem) {\n                if (_this.element.id === elem.id.split('-')[2] || elem.id.split('-')[2] + '-' + elem.id.split('-')[3]) {\n                    popups_1.push(elem);\n                }\n            });\n            popup = [this.getWrapper()].concat([].slice.call(popups_1))[navIdxLen];\n            return isNullOrUndefined(popup) ? null : select('.e-menu-parent', popup);\n        }\n        else {\n            return this.getWrapper().children[navIdxLen];\n        }\n    };\n    MenuBase.prototype.rightEnterKeyHandler = function (e) {\n        var eventArgs;\n        var cul = this.getUlByNavIdx();\n        var fli = this.getLIByClass(cul, FOCUSED);\n        if (fli) {\n            var fliIdx = this.getIdx(cul, fli);\n            var navIdx = this.navIdx.concat(fliIdx);\n            var item = this.getItem(navIdx);\n            if (item.items.length) {\n                this.navIdx.push(fliIdx);\n                this.keyType = 'right';\n                this.action = e.action;\n                this.openMenu(fli, item, -1, -1, e);\n            }\n            else {\n                if (e.action === ENTER) {\n                    if (this.isMenu && this.navIdx.length === 0) {\n                        this.removeLIStateByClass([SELECTED], [this.getWrapper()]);\n                    }\n                    else {\n                        fli.classList.remove(FOCUSED);\n                    }\n                    fli.classList.add(SELECTED);\n                    eventArgs = { element: fli, item: item, event: e };\n                    this.trigger('select', eventArgs);\n                    var aEle = fli.querySelector('.e-menu-url');\n                    if (item.url && aEle) {\n                        switch (aEle.getAttribute('target')) {\n                            case '_blank':\n                                window.open(item.url, '_blank');\n                                break;\n                            case '_parent':\n                                window.parent.location.href = item.url;\n                                break;\n                            default:\n                                window.location.href = item.url;\n                        }\n                    }\n                    this.closeMenu(null, e);\n                    var sli = this.getLIByClass(this.getUlByNavIdx(), SELECTED);\n                    if (sli) {\n                        sli.classList.add(FOCUSED);\n                        sli.focus();\n                    }\n                }\n            }\n        }\n    };\n    MenuBase.prototype.leftEscKeyHandler = function (e) {\n        if (this.navIdx.length) {\n            this.keyType = 'left';\n            this.closeMenu(this.navIdx.length, e);\n        }\n        else {\n            if (e.action === ESCAPE) {\n                this.closeMenu(null, e);\n            }\n        }\n    };\n    MenuBase.prototype.scrollHandler = function (e) {\n        this.closeMenu(null, e);\n    };\n    MenuBase.prototype.touchHandler = function (e) {\n        this.isTapHold = true;\n        this.cmenuHandler(e.originalEvent);\n    };\n    MenuBase.prototype.cmenuHandler = function (e) {\n        e.preventDefault();\n        this.currentTarget = e.target;\n        this.isCMenu = true;\n        this.pageX = e.changedTouches ? e.changedTouches[0].pageX + 1 : e.pageX + 1;\n        this.pageY = e.changedTouches ? e.changedTouches[0].pageY + 1 : e.pageY + 1;\n        this.closeMenu(null, e);\n        if (this.isCMenu) {\n            if (this.canOpen(e.target)) {\n                this.openMenu(null, null, this.pageY, this.pageX, e);\n            }\n            this.isCMenu = false;\n        }\n    };\n    // eslint:disable-next-line:max-func-body-length\n    MenuBase.prototype.closeMenu = function (ulIndex, e, isIterated) {\n        var _this = this;\n        if (ulIndex === void 0) { ulIndex = 0; }\n        if (e === void 0) { e = null; }\n        if (this.isMenuVisible()) {\n            var sli = void 0;\n            var item_1;\n            var wrapper_1 = this.getWrapper();\n            var beforeCloseArgs = void 0;\n            var items_1;\n            var popups = this.getPopups();\n            var isClose = false;\n            var cnt = this.isMenu ? popups.length + 1 : wrapper_1.childElementCount;\n            var ul_1 = this.isMenu && cnt !== 1 ? select('.e-ul', popups[cnt - 2])\n                : selectAll('.e-menu-parent', wrapper_1)[cnt - 1];\n            if (this.isMenu && ul_1.classList.contains('e-menu')) {\n                sli = this.getLIByClass(ul_1, SELECTED);\n                if (sli) {\n                    sli.classList.remove(SELECTED);\n                }\n                isClose = true;\n            }\n            if (!isClose) {\n                var liElem_1 = e && e.target && this.getLI(e.target);\n                if (liElem_1) {\n                    this.cli = liElem_1;\n                }\n                else {\n                    this.cli = ul_1.children[0];\n                }\n                item_1 = this.navIdx.length ? this.getItem(this.navIdx) : null;\n                items_1 = item_1 ? item_1.items : this.items;\n                beforeCloseArgs = { element: ul_1, parentItem: item_1, items: items_1, event: e, cancel: false, isFocused: true };\n                this.trigger('beforeClose', beforeCloseArgs, function (observedCloseArgs) {\n                    var popupEle;\n                    var closeArgs;\n                    var popupId = '';\n                    var popupObj;\n                    var isOpen = !observedCloseArgs.cancel;\n                    if (isOpen || _this.isCMenu) {\n                        if (_this.isMenu) {\n                            popupEle = closest(ul_1, '.' + POPUP);\n                            if (_this.hamburgerMode) {\n                                popupEle.parentElement.style.minHeight = '';\n                                closest(ul_1, '.e-menu-item').setAttribute('aria-expanded', 'false');\n                            }\n                            _this.unWireKeyboardEvent(popupEle);\n                            destroyScroll(getInstance(popupEle.children[0], VScroll), popupEle.children[0]);\n                            popupObj = getInstance(popupEle, Popup);\n                            popupObj.hide();\n                            popupId = popupEle.id;\n                            popupObj.destroy();\n                            detach(popupEle);\n                        }\n                        else {\n                            _this.toggleAnimation(ul_1, false);\n                        }\n                        closeArgs = { element: ul_1, parentItem: item_1, items: items_1 };\n                        _this.trigger('onClose', closeArgs);\n                        _this.navIdx.pop();\n                        if (_this.navIdx.length === 0 && e && e.type === 'keyup') {\n                            _this.showSubMenu = false;\n                        }\n                        if (!_this.isMenu) {\n                            EventHandler.remove(ul_1, 'keydown', _this.keyHandler);\n                            if (_this.keyType === 'right') {\n                                _this.keyType = '';\n                            }\n                        }\n                    }\n                    _this.updateReactTemplate();\n                    var trgtliId;\n                    var closedLi;\n                    var trgtLi;\n                    var trgtpopUp = _this.getWrapper() && _this.getUlByNavIdx();\n                    if (_this.isCMenu) {\n                        if (_this.canOpen(e.target)) {\n                            _this.openMenu(null, null, _this.pageY, _this.pageX, e);\n                        }\n                        _this.isCMenu = false;\n                    }\n                    if (_this.isMenu && trgtpopUp && popupId.length) {\n                        // eslint-disable-next-line\n                        trgtliId = new RegExp('(.*)-ej2menu-' + _this.element.id + '-popup').exec(popupId)[1];\n                        closedLi = trgtpopUp.querySelector('[id=\"' + trgtliId + '\"]');\n                        trgtLi = (liElem_1 && trgtpopUp.querySelector('[id=\"' + liElem_1.id + '\"]'));\n                    }\n                    else if (trgtpopUp) {\n                        closedLi = trgtpopUp.querySelector('.e-menu-item.e-selected');\n                        trgtLi = (liElem_1 && trgtpopUp.querySelector('[id=\"' + liElem_1.id + '\"]'));\n                    }\n                    var submenus = liElem_1 && liElem_1.querySelectorAll('.e-menu-item');\n                    if (isOpen && _this.hamburgerMode && ulIndex && !(submenus.length)) {\n                        _this.afterCloseMenu(e);\n                    }\n                    else if (isOpen && !_this.hamburgerMode && closedLi && !trgtLi && _this.keyType !== 'left' && (_this.navIdx.length || !_this.isMenu && _this.navIdx.length === 0)) {\n                        var ele = (e && (e.target.classList.contains('e-vscroll') || e.target.classList.contains('e-scroll-nav')))\n                            ? closest(e.target, '.e-menu-wrapper') : null;\n                        if (ele) {\n                            ele = ele.querySelector('.e-menu-item');\n                            if (_this.showItemOnClick || (ele && _this.getIndex(ele.id, true).length <= _this.navIdx.length)) {\n                                _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e, true);\n                            }\n                        }\n                        else {\n                            if (!(e && e.target.classList.contains('e-nav-arrow'))) {\n                                _this.closeMenu(_this.navIdx[_this.navIdx.length - 1], e);\n                            }\n                        }\n                    }\n                    else if (isOpen && !isIterated && !ulIndex && ((_this.hamburgerMode && _this.navIdx.length) ||\n                        _this.navIdx.length === 1 && liElem_1 && trgtpopUp !== liElem_1.parentElement)) {\n                        _this.closeMenu(null, e);\n                    }\n                    else if (isOpen && isNullOrUndefined(ulIndex) && _this.navIdx.length) {\n                        _this.closeMenu(null, e);\n                    }\n                    else if (isOpen && !_this.isMenu && !ulIndex && _this.navIdx.length === 0 && !_this.isMenusClosed) {\n                        _this.isMenusClosed = true;\n                        _this.closeMenu(0, e);\n                    }\n                    else if (isOpen && _this.isMenu && e && e.target &&\n                        _this.navIdx.length !== 0 && closest(e.target, '.e-menu-parent.e-control')) {\n                        _this.closeMenu(0, e);\n                    }\n                    else if (isOpen && !_this.isMenu && selectAll('.e-menu-parent', wrapper_1)[ulIndex - 1] && e.which === 3) {\n                        _this.closeMenu(null, e);\n                    }\n                    else {\n                        if (isOpen && (_this.keyType === 'right' || _this.keyType === 'click')) {\n                            _this.afterCloseMenu(e);\n                        }\n                        else {\n                            var cul = _this.getUlByNavIdx();\n                            var sli_1 = _this.getLIByClass(cul, SELECTED);\n                            if (sli_1) {\n                                sli_1.setAttribute('aria-expanded', 'false');\n                                sli_1.classList.remove(SELECTED);\n                                if (observedCloseArgs.isFocused && liElem_1 || _this.keyType === 'left') {\n                                    sli_1.classList.add(FOCUSED);\n                                    if (!e.target || !e.target.classList.contains('e-edit-template')) {\n                                        sli_1.focus();\n                                    }\n                                }\n                            }\n                            if (!isOpen && _this.hamburgerMode && liElem_1 && liElem_1.getAttribute('aria-expanded') === 'false' &&\n                                liElem_1.getAttribute('aria-haspopup') === 'true') {\n                                if (closest(liElem_1, '.e-menu-parent.e-control')) {\n                                    _this.navIdx = [];\n                                }\n                                else {\n                                    _this.navIdx.pop();\n                                }\n                                _this.navIdx.push(_this.cliIdx);\n                                var item_2 = _this.getItem(_this.navIdx);\n                                liElem_1.setAttribute('aria-expanded', 'true');\n                                _this.openMenu(liElem_1, item_2, -1, -1, e);\n                            }\n                        }\n                        if (_this.navIdx.length < 1) {\n                            if (_this.showSubMenuOn === 'Hover' || _this.showSubMenuOn === 'Click') {\n                                _this.showItemOnClick = _this.defaultOption;\n                                _this.showSubMenuOn = 'Auto';\n                            }\n                        }\n                    }\n                    _this.removeStateWrapper();\n                });\n            }\n        }\n    };\n    MenuBase.prototype.updateReactTemplate = function () {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        if (this.isReact && this.template && this.navIdx.length === 0) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            var portals = this.portals.splice(0, this.items.length);\n            this.clearTemplate(['template']);\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            this.portals = portals;\n            this.renderReactTemplates();\n        }\n    };\n    MenuBase.prototype.getMenuItemModel = function (item, level) {\n        if (isNullOrUndefined(item)) {\n            return null;\n        }\n        if (isNullOrUndefined(level)) {\n            level = 0;\n        }\n        var fields = this.getFields(level);\n        return { text: item[fields.text], id: item[fields.id], items: item[fields.child], separator: item[fields.separator],\n            iconCss: item[fields.iconCss], url: item[fields.url] };\n    };\n    MenuBase.prototype.getPopups = function () {\n        var _this = this;\n        var popups = [];\n        [].slice.call(document.querySelectorAll('.' + POPUP)).forEach(function (elem) {\n            if (!isNullOrUndefined(elem.querySelector('.' + ITEM)) && _this.getIndex(elem.querySelector('.' + ITEM).id, true).length) {\n                popups.push(elem);\n            }\n        });\n        return popups;\n    };\n    MenuBase.prototype.isMenuVisible = function () {\n        return (this.navIdx.length > 0 || (this.element.classList.contains('e-contextmenu') && isVisible(this.element).valueOf()));\n    };\n    MenuBase.prototype.canOpen = function (target) {\n        var canOpen = true;\n        if (this.filter) {\n            canOpen = false;\n            var filter = this.filter.split(' ');\n            for (var i = 0, len = filter.length; i < len; i++) {\n                if (closest(target, '.' + filter[i])) {\n                    canOpen = true;\n                    break;\n                }\n            }\n        }\n        return canOpen;\n    };\n    MenuBase.prototype.openMenu = function (li, item, top, left, e, target) {\n        var _this = this;\n        if (top === void 0) { top = 0; }\n        if (left === void 0) { left = 0; }\n        if (e === void 0) { e = null; }\n        if (target === void 0) { target = this.targetElement; }\n        var wrapper = this.getWrapper();\n        this.lItem = li;\n        var elemId = this.element.id !== '' ? this.element.id : 'menu';\n        this.isMenusClosed = false;\n        if (isNullOrUndefined(top)) {\n            top = -1;\n        }\n        if (isNullOrUndefined(left)) {\n            left = -1;\n        }\n        if (li) {\n            this.uList = this.createItems(item[this.getField('children', this.navIdx.length - 1)]);\n            if (!this.isMenu && Browser.isDevice) {\n                wrapper.lastChild.style.display = 'none';\n                var data = {\n                    text: item[this.getField('text')].toString(), iconCss: ICONS + ' e-previous'\n                };\n                var hdata = new MenuItem(this.items[0], 'items', data, true);\n                var hli = this.createItems([hdata]).children[0];\n                hli.classList.add(HEADER);\n                this.uList.insertBefore(hli, this.uList.children[0]);\n            }\n            if (this.isMenu) {\n                this.popupWrapper = this.createElement('div', {\n                    className: 'e-' + this.getModuleName() + '-wrapper ' + POPUP, id: li.id + '-ej2menu-' + elemId + '-popup'\n                });\n                if (this.hamburgerMode) {\n                    top = li.offsetHeight;\n                    li.appendChild(this.popupWrapper);\n                }\n                else {\n                    document.body.appendChild(this.popupWrapper);\n                }\n                this.isNestedOrVertical = this.element.classList.contains('e-vertical') || this.navIdx.length !== 1;\n                this.popupObj = this.generatePopup(this.popupWrapper, this.uList, li, this.isNestedOrVertical);\n                if (this.template) {\n                    this.renderReactTemplates();\n                }\n                if (this.hamburgerMode) {\n                    this.calculateIndentSize(this.uList, li);\n                }\n                else {\n                    if (this.cssClass) {\n                        addClass([this.popupWrapper], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n                    }\n                    this.popupObj.hide();\n                }\n                if (!this.hamburgerMode && !this.showItemOnClick && this.hoverDelay) {\n                    window.clearInterval(this.timer);\n                    this.timer = window.setTimeout(function () { _this.triggerBeforeOpen(li, _this.uList, item, e, 0, 0, 'menu'); }, this.hoverDelay);\n                }\n                else {\n                    this.triggerBeforeOpen(li, this.uList, item, e, 0, 0, 'menu');\n                }\n            }\n            else {\n                this.uList.style.zIndex = this.element.style.zIndex;\n                wrapper.appendChild(this.uList);\n                if (!this.showItemOnClick && this.hoverDelay) {\n                    window.clearInterval(this.timer);\n                    this.timer = window.setTimeout(function () { _this.triggerBeforeOpen(li, _this.uList, item, e, top, left, 'none'); }, this.hoverDelay);\n                }\n                else {\n                    this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');\n                }\n            }\n        }\n        else {\n            this.uList = this.element;\n            this.uList.style.zIndex = getZindexPartial(target ? target : this.element).toString();\n            if (isNullOrUndefined(e)) {\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                var ev = document.createEvent('MouseEvents');\n                ev.initEvent('click', true, false);\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                var targetEvent = this.copyObject(ev, {});\n                targetEvent.target = targetEvent.srcElement = target;\n                targetEvent.currentTarget = target;\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                this.triggerBeforeOpen(li, this.uList, item, targetEvent, top, left, 'none');\n            }\n            else {\n                this.triggerBeforeOpen(li, this.uList, item, e, top, left, 'none');\n            }\n        }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    MenuBase.prototype.copyObject = function (source, destination) {\n        for (var prop in source) {\n            destination[\"\" + prop] = source[\"\" + prop];\n        }\n        return destination;\n    };\n    MenuBase.prototype.calculateIndentSize = function (ul, li) {\n        var liStyle = getComputedStyle(li);\n        var liIndent = parseInt(liStyle.textIndent, 10);\n        if (this.navIdx.length < 2 && !li.classList.contains('e-blankicon')) {\n            liIndent *= 2;\n        }\n        else {\n            liIndent += (liIndent / 4);\n        }\n        ul.style.textIndent = liIndent + 'px';\n        var blankIconElem = ul.querySelectorAll('.e-blankicon');\n        if (blankIconElem && blankIconElem.length) {\n            var menuIconElem = ul.querySelector('.e-menu-icon');\n            var menuIconElemStyle = getComputedStyle(menuIconElem);\n            var blankIconIndent = (parseInt(menuIconElemStyle.marginRight, 10) + menuIconElem.offsetWidth + liIndent);\n            for (var i = 0; i < blankIconElem.length; i++) {\n                blankIconElem[i].style.textIndent = blankIconIndent + 'px';\n            }\n        }\n    };\n    MenuBase.prototype.generatePopup = function (popupWrapper, ul, li, isNestedOrVertical) {\n        var _this = this;\n        var popupObj = new Popup(popupWrapper, {\n            actionOnScroll: this.hamburgerMode ? 'none' : 'reposition',\n            relateTo: li,\n            collision: this.hamburgerMode ? { X: 'none', Y: 'none' } : { X: isNestedOrVertical ||\n                    this.enableRtl ? 'none' : 'flip', Y: 'fit' },\n            position: (isNestedOrVertical && !this.hamburgerMode) ? { X: 'right', Y: 'top' } : { X: 'left', Y: 'bottom' },\n            targetType: 'relative',\n            enableRtl: this.enableRtl,\n            content: ul,\n            open: function () {\n                var scrollEle = select('.e-menu-vscroll', popupObj.element);\n                if (scrollEle) {\n                    scrollEle.style.height = 'inherit';\n                    scrollEle.style.maxHeight = '';\n                }\n                var ul = select('.e-ul', popupObj.element);\n                popupObj.element.style.maxHeight = '';\n                ul.focus();\n                _this.triggerOpen(ul);\n            }\n        });\n        return popupObj;\n    };\n    MenuBase.prototype.createHeaderContainer = function (wrapper) {\n        wrapper = wrapper || this.getWrapper();\n        var spanElem = this.createElement('span', { className: 'e-' + this.getModuleName() + '-header' });\n        var tempTitle = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(this.title) : this.title;\n        var spanTitle = this.createElement('span', {\n            className: 'e-' + this.getModuleName() + '-title', innerHTML: tempTitle\n        });\n        var spanIcon = this.createElement('span', {\n            className: 'e-icons e-' + this.getModuleName() + '-icon', attrs: { 'tabindex': '0' }\n        });\n        spanElem.appendChild(spanTitle);\n        spanElem.appendChild(spanIcon);\n        wrapper.insertBefore(spanElem, this.element);\n    };\n    MenuBase.prototype.openHamburgerMenu = function (e) {\n        if (this.hamburgerMode) {\n            this.triggerBeforeOpen(null, this.element, null, e, 0, 0, 'hamburger');\n        }\n    };\n    MenuBase.prototype.closeHamburgerMenu = function (e) {\n        var _this = this;\n        var beforeCloseArgs = { element: this.element, parentItem: null, event: e,\n            items: this.items, cancel: false };\n        this.trigger('beforeClose', beforeCloseArgs, function (observedHamburgerCloseArgs) {\n            if (!observedHamburgerCloseArgs.cancel) {\n                _this.closeMenu(null, e);\n                _this.element.classList.add('e-hide-menu');\n                _this.trigger('onClose', { element: _this.element, parentItem: null, items: _this.items });\n            }\n        });\n    };\n    MenuBase.prototype.callFit = function (element, x, y, top, left) {\n        return fit(element, null, { X: x, Y: y }, { top: top, left: left });\n    };\n    MenuBase.prototype.triggerBeforeOpen = function (li, ul, item, e, top, left, type) {\n        var _this = this;\n        var items = li ? item[this.getField('children', this.navIdx.length - 1)] : this.items;\n        var eventArgs = {\n            element: ul, items: items, parentItem: item, event: e, cancel: false, top: top, left: left, showSubMenuOn: 'Auto'\n        };\n        var menuType = type;\n        this.trigger('beforeOpen', eventArgs, function (observedOpenArgs) {\n            switch (menuType) {\n                case 'menu':\n                    if (!_this.hamburgerMode) {\n                        if (observedOpenArgs.showSubMenuOn !== 'Auto') {\n                            _this.showItemOnClick = !_this.defaultOption;\n                            _this.showSubMenuOn = observedOpenArgs.showSubMenuOn;\n                        }\n                        _this.top = observedOpenArgs.top;\n                        _this.left = observedOpenArgs.left;\n                    }\n                    _this.popupWrapper.style.display = 'block';\n                    if (!_this.hamburgerMode) {\n                        _this.popupWrapper.style.maxHeight = _this.popupWrapper.getBoundingClientRect().height + 'px';\n                        if (_this.enableScrolling) {\n                            addScrolling(_this.createElement, _this.popupWrapper, _this.uList, 'vscroll', _this.enableRtl);\n                        }\n                        _this.checkScrollOffset(e);\n                    }\n                    if (!_this.hamburgerMode && !_this.left && !_this.top) {\n                        _this.popupObj.refreshPosition(_this.lItem, true);\n                        _this.left = parseInt(_this.popupWrapper.style.left, 10);\n                        _this.top = parseInt(_this.popupWrapper.style.top, 10);\n                        if (_this.enableRtl) {\n                            _this.left =\n                                _this.isNestedOrVertical ? _this.left - _this.popupWrapper.offsetWidth - _this.lItem.parentElement.offsetWidth + 2\n                                    : _this.left - _this.popupWrapper.offsetWidth + _this.lItem.offsetWidth;\n                        }\n                        // eslint-disable-next-line\n                        if (_this.template && (_this.isReact || _this.isAngular)) {\n                            requestAnimationFrame(function () {\n                                _this.collision();\n                                _this.popupWrapper.style.display = '';\n                            });\n                        }\n                        else {\n                            _this.collision();\n                            _this.popupWrapper.style.display = '';\n                        }\n                    }\n                    else {\n                        _this.popupObj.collision = { X: 'none', Y: 'none' };\n                        _this.popupWrapper.style.display = '';\n                    }\n                    break;\n                case 'none':\n                    _this.top = observedOpenArgs.top;\n                    _this.left = observedOpenArgs.left;\n                    break;\n                case 'hamburger':\n                    if (!observedOpenArgs.cancel) {\n                        _this.element.classList.remove('e-hide-menu');\n                        _this.triggerOpen(_this.element);\n                    }\n                    break;\n            }\n            if (menuType !== 'hamburger') {\n                if (observedOpenArgs.cancel) {\n                    if (_this.isMenu) {\n                        _this.popupObj.destroy();\n                        detach(_this.popupWrapper);\n                    }\n                    else if (ul.className.indexOf('e-ul') > -1) {\n                        detach(ul);\n                    }\n                    _this.navIdx.pop();\n                }\n                else {\n                    if (_this.isMenu) {\n                        if (_this.hamburgerMode) {\n                            _this.popupWrapper.style.top = _this.top + 'px';\n                            _this.popupWrapper.style.left = 0 + 'px';\n                            _this.toggleAnimation(_this.popupWrapper);\n                        }\n                        else {\n                            _this.setBlankIconStyle(_this.popupWrapper);\n                            _this.wireKeyboardEvent(_this.popupWrapper);\n                            rippleEffect(_this.popupWrapper, { selector: '.' + ITEM });\n                            _this.popupWrapper.style.left = _this.left + 'px';\n                            _this.popupWrapper.style.top = _this.top + 'px';\n                            var animationOptions = _this.animationSettings.effect !== 'None' ? {\n                                name: _this.animationSettings.effect, duration: _this.animationSettings.duration,\n                                timingFunction: _this.animationSettings.easing\n                            } : null;\n                            _this.popupObj.show(animationOptions, _this.lItem);\n                        }\n                    }\n                    else {\n                        _this.setBlankIconStyle(_this.uList);\n                        _this.setPosition(_this.lItem, _this.uList, _this.top, _this.left);\n                        _this.toggleAnimation(_this.uList);\n                    }\n                }\n            }\n            if (_this.keyType === 'right') {\n                var cul = _this.getUlByNavIdx();\n                li.classList.remove(FOCUSED);\n                if (_this.isMenu && _this.navIdx.length === 1) {\n                    _this.removeLIStateByClass([SELECTED], [_this.getWrapper()]);\n                }\n                li.classList.add(SELECTED);\n                if (_this.action === ENTER) {\n                    var eventArgs_1 = { element: li, item: item, event: e };\n                    _this.trigger('select', eventArgs_1);\n                }\n                li.focus();\n                cul = _this.getUlByNavIdx();\n                var index = _this.isValidLI(cul.children[0], 0, _this.action);\n                cul.children[index].classList.add(FOCUSED);\n                cul.children[index].focus();\n            }\n        });\n    };\n    MenuBase.prototype.collision = function () {\n        var collide;\n        collide = isCollide(this.popupWrapper, null, this.left, this.top);\n        if ((this.isNestedOrVertical || this.enableRtl) && (collide.indexOf('right') > -1\n            || collide.indexOf('left') > -1)) {\n            this.popupObj.collision.X = 'none';\n            var offWidth = closest(this.lItem, '.e-' + this.getModuleName() + '-wrapper').offsetWidth;\n            this.left =\n                this.enableRtl ? calculatePosition(this.lItem, this.isNestedOrVertical ? 'right' : 'left', 'top').left\n                    : this.left - this.popupWrapper.offsetWidth - offWidth + 2;\n        }\n        collide = isCollide(this.popupWrapper, null, this.left, this.top);\n        if (collide.indexOf('left') > -1 || collide.indexOf('right') > -1) {\n            this.left = this.callFit(this.popupWrapper, true, false, this.top, this.left).left;\n        }\n        this.popupWrapper.style.left = this.left + 'px';\n    };\n    MenuBase.prototype.setBlankIconStyle = function (menu) {\n        var blankIconList = [].slice.call(menu.getElementsByClassName('e-blankicon'));\n        if (!blankIconList.length) {\n            return;\n        }\n        var iconLi = menu.querySelector('.e-menu-item:not(.e-blankicon):not(.e-separator)');\n        if (!iconLi) {\n            return;\n        }\n        var icon = iconLi.querySelector('.e-menu-icon');\n        if (!icon) {\n            return;\n        }\n        var cssProp = this.enableRtl ? { padding: 'paddingRight', margin: 'marginLeft' } :\n            { padding: 'paddingLeft', margin: 'marginRight' };\n        var iconCssProps = getComputedStyle(icon);\n        var iconSize = parseInt(iconCssProps.fontSize, 10);\n        if (!!parseInt(iconCssProps.width, 10) && parseInt(iconCssProps.width, 10) > iconSize) {\n            iconSize = parseInt(iconCssProps.width, 10);\n        }\n        // eslint:disable\n        var size = iconSize + parseInt(\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        iconCssProps[cssProp.margin], 10) + parseInt(getComputedStyle(iconLi)[cssProp.padding], 10) + \"px\";\n        blankIconList.forEach(function (li) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            li.style[cssProp.padding] = size;\n        });\n        // eslint:enable\n    };\n    MenuBase.prototype.checkScrollOffset = function (e) {\n        var wrapper = this.getWrapper();\n        if (wrapper.children[0].classList.contains('e-menu-hscroll') && this.navIdx.length === 1) {\n            var trgt = isNullOrUndefined(e) ? this.element : closest(e.target, '.' + ITEM);\n            var offsetEle = select('.e-hscroll-bar', wrapper);\n            if (offsetEle.scrollLeft > trgt.offsetLeft) {\n                offsetEle.scrollLeft -= (offsetEle.scrollLeft - trgt.offsetLeft);\n            }\n            var offsetLeft = offsetEle.scrollLeft + offsetEle.offsetWidth;\n            var offsetRight = trgt.offsetLeft + trgt.offsetWidth;\n            if (offsetLeft < offsetRight) {\n                offsetEle.scrollLeft += (offsetRight - offsetLeft);\n            }\n        }\n    };\n    MenuBase.prototype.setPosition = function (li, ul, top, left) {\n        var px = 'px';\n        this.toggleVisiblity(ul);\n        if (ul === this.element || (left > -1 && top > -1)) {\n            var collide = isCollide(ul, null, left, top);\n            if (collide.indexOf('right') > -1) {\n                left = left - ul.offsetWidth;\n            }\n            if (collide.indexOf('bottom') > -1) {\n                var offset = this.callFit(ul, false, true, top, left);\n                top = offset.top - 20;\n                if (top < 0) {\n                    var newTop = (pageYOffset + document.documentElement.clientHeight) - ul.getBoundingClientRect().height;\n                    if (newTop > -1) {\n                        top = newTop;\n                    }\n                }\n            }\n            collide = isCollide(ul, null, left, top);\n            if (collide.indexOf('left') > -1) {\n                var offset = this.callFit(ul, true, false, top, left);\n                left = offset.left;\n            }\n        }\n        else {\n            if (Browser.isDevice) {\n                top = Number(this.element.style.top.replace(px, ''));\n                left = Number(this.element.style.left.replace(px, ''));\n            }\n            else {\n                var x = this.enableRtl ? 'left' : 'right';\n                var offset = calculatePosition(li, x, 'top');\n                top = offset.top;\n                left = offset.left;\n                var collide = isCollide(ul, null, this.enableRtl ? left - ul.offsetWidth : left, top);\n                var xCollision = collide.indexOf('left') > -1 || collide.indexOf('right') > -1;\n                if (xCollision) {\n                    offset = calculatePosition(li, this.enableRtl ? 'right' : 'left', 'top');\n                    left = offset.left;\n                }\n                if (this.enableRtl || xCollision) {\n                    left = (this.enableRtl && xCollision) ? left : left - ul.offsetWidth;\n                }\n                if (collide.indexOf('bottom') > -1) {\n                    offset = this.callFit(ul, false, true, top, left);\n                    top = offset.top;\n                }\n            }\n        }\n        this.toggleVisiblity(ul, false);\n        ul.style.top = top + px;\n        ul.style.left = left + px;\n    };\n    MenuBase.prototype.toggleVisiblity = function (ul, isVisible) {\n        if (isVisible === void 0) { isVisible = true; }\n        ul.style.visibility = isVisible ? 'hidden' : '';\n        ul.style.display = isVisible ? 'block' : 'none';\n    };\n    MenuBase.prototype.createItems = function (items) {\n        var _this = this;\n        var level = this.navIdx ? this.navIdx.length : 0;\n        var fields = this.getFields(level);\n        var showIcon = this.hasField(items, this.getField('iconCss', level));\n        var listBaseOptions = {\n            showIcon: showIcon,\n            moduleName: 'menu',\n            fields: fields,\n            template: this.template,\n            itemNavigable: true,\n            itemCreating: function (args) {\n                if (!args.curData[args.fields[fields.id]]) {\n                    args.curData[args.fields[fields.id]] = getUniqueID('menuitem');\n                }\n                if (isNullOrUndefined(args.curData.htmlAttributes)) {\n                    args.curData.htmlAttributes = {};\n                }\n                if (Browser.isIE) {\n                    args.curData.htmlAttributes.role = 'menuitem';\n                    args.curData.htmlAttributes.tabindex = '-1';\n                }\n                else {\n                    Object.assign(args.curData.htmlAttributes, { role: 'menuitem', tabindex: '-1' });\n                }\n                if (_this.isMenu && !args.curData[_this.getField('separator', level)]) {\n                    args.curData.htmlAttributes['aria-label'] = args.curData[args.fields.text] ?\n                        args.curData[args.fields.text] : args.curData[args.fields.id];\n                }\n                if (args.curData[args.fields[fields.iconCss]] === '') {\n                    args.curData[args.fields[fields.iconCss]] = null;\n                }\n            },\n            itemCreated: function (args) {\n                if (args.curData[_this.getField('separator', level)]) {\n                    args.item.classList.add(SEPARATOR);\n                    args.item.setAttribute('role', 'separator');\n                }\n                if (showIcon && !args.curData[args.fields.iconCss]\n                    && !args.curData[_this.getField('separator', level)]) {\n                    args.item.classList.add('e-blankicon');\n                }\n                if (args.curData[args.fields.child]\n                    && args.curData[args.fields.child].length) {\n                    var span = _this.createElement('span', { className: ICONS + ' ' + CARET });\n                    args.item.appendChild(span);\n                    args.item.setAttribute('aria-haspopup', 'true');\n                    args.item.setAttribute('aria-expanded', 'false');\n                    args.item.classList.add('e-menu-caret-icon');\n                }\n                if (_this.isMenu && _this.template) {\n                    args.item.setAttribute('id', args.curData[args.fields.id].toString());\n                    args.item.removeAttribute('data-uid');\n                    if (args.item.classList.contains('e-level-1')) {\n                        args.item.classList.remove('e-level-1');\n                    }\n                    if (args.item.classList.contains('e-has-child')) {\n                        args.item.classList.remove('e-has-child');\n                    }\n                    args.item.removeAttribute('aria-level');\n                }\n                var eventArgs = { item: args.curData, element: args.item };\n                _this.trigger('beforeItemRender', eventArgs);\n            }\n        };\n        this.setProperties({ 'items': this.items }, true);\n        if (this.isMenu) {\n            listBaseOptions.templateID = this.element.id + TEMPLATE_PROPERTY;\n        }\n        var ul = ListBase.createList(this.createElement, items, listBaseOptions, !this.template, this);\n        ul.setAttribute('tabindex', '0');\n        if (this.isMenu) {\n            ul.setAttribute('role', 'menu');\n        }\n        else {\n            ul.setAttribute('role', 'menubar');\n        }\n        return ul;\n    };\n    MenuBase.prototype.moverHandler = function (e) {\n        var trgt = e.target;\n        this.liTrgt = trgt;\n        var cli = this.getLI(trgt);\n        var wrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : this.getWrapper();\n        var hdrWrapper = this.getWrapper();\n        var regex = new RegExp('-ej2menu-(.*)-popup');\n        var ulId;\n        var isDifferentElem = false;\n        if (!wrapper) {\n            return;\n        }\n        if (wrapper.id !== '') {\n            ulId = regex.exec(wrapper.id)[1];\n        }\n        else {\n            ulId = wrapper.querySelector('ul').id;\n        }\n        if (ulId !== this.element.id) {\n            this.removeLIStateByClass([FOCUSED, SELECTED], [this.getWrapper()]);\n            if (this.navIdx.length) {\n                isDifferentElem = true;\n            }\n            else {\n                return;\n            }\n        }\n        if (cli && closest(cli, '.e-' + this.getModuleName() + '-wrapper') && !isDifferentElem) {\n            this.removeLIStateByClass([FOCUSED], this.isMenu ? [wrapper].concat(this.getPopups()) : [wrapper]);\n            this.removeLIStateByClass([FOCUSED], this.isMenu ? [hdrWrapper].concat(this.getPopups()) : [hdrWrapper]);\n            cli.classList.add(FOCUSED);\n            if (!this.showItemOnClick) {\n                this.clickHandler(e);\n            }\n        }\n        else if (this.isMenu && this.showItemOnClick && !isDifferentElem) {\n            this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));\n        }\n        if (this.isMenu) {\n            if (!this.showItemOnClick && (trgt.parentElement !== wrapper && !closest(trgt, '.e-' + this.getModuleName() + '-popup'))\n                && (!cli || (cli && !this.getIndex(cli.id, true).length)) && this.showSubMenuOn !== 'Hover') {\n                this.removeLIStateByClass([FOCUSED], [wrapper]);\n                if (this.navIdx.length) {\n                    this.isClosed = true;\n                    this.closeMenu(null, e);\n                }\n            }\n            else if (isDifferentElem && !this.showItemOnClick) {\n                if (this.navIdx.length) {\n                    this.isClosed = true;\n                    this.closeMenu(null, e);\n                }\n            }\n            if (!this.isClosed) {\n                this.removeStateWrapper();\n            }\n            this.isClosed = false;\n        }\n    };\n    MenuBase.prototype.removeStateWrapper = function () {\n        if (this.liTrgt) {\n            var wrapper = closest(this.liTrgt, '.e-menu-vscroll');\n            if (this.liTrgt.tagName === 'DIV' && wrapper) {\n                this.removeLIStateByClass([FOCUSED, SELECTED], [wrapper]);\n            }\n        }\n    };\n    MenuBase.prototype.removeLIStateByClass = function (classList, element) {\n        var li;\n        var _loop_1 = function (i) {\n            classList.forEach(function (className) {\n                li = select('.' + className, element[i]);\n                if (li) {\n                    li.classList.remove(className);\n                }\n            });\n        };\n        for (var i = 0; i < element.length; i++) {\n            _loop_1(i);\n        }\n    };\n    MenuBase.prototype.getField = function (propName, level) {\n        if (level === void 0) { level = 0; }\n        var fieldName = this.fields[\"\" + propName];\n        return typeof fieldName === 'string' ? fieldName :\n            (!fieldName[level] ? fieldName[fieldName.length - 1].toString()\n                : fieldName[level].toString());\n    };\n    MenuBase.prototype.getFields = function (level) {\n        if (level === void 0) { level = 0; }\n        return {\n            id: this.getField('itemId', level),\n            iconCss: this.getField('iconCss', level),\n            text: this.getField('text', level),\n            url: this.getField('url', level),\n            child: this.getField('children', level),\n            separator: this.getField('separator', level)\n        };\n    };\n    MenuBase.prototype.hasField = function (items, field) {\n        for (var i = 0, len = items.length; i < len; i++) {\n            if (items[i][\"\" + field]) {\n                return true;\n            }\n        }\n        return false;\n    };\n    MenuBase.prototype.menuHeaderClickHandler = function (e) {\n        if (closest(e.target, '.e-menu-wrapper').querySelector('ul.e-menu-parent').id !== this.element.id) {\n            return;\n        }\n        if (this.element.className.indexOf('e-hide-menu') > -1) {\n            this.openHamburgerMenu(e);\n        }\n        else {\n            this.closeHamburgerMenu(e);\n        }\n    };\n    MenuBase.prototype.clickHandler = function (e) {\n        if (this.isTapHold) {\n            this.isTapHold = false;\n        }\n        else {\n            var wrapper = this.getWrapper();\n            var trgt = e.target;\n            var cli = this.cli = this.getLI(trgt);\n            var regex = new RegExp('-ej2menu-(.*)-popup');\n            var cliWrapper = cli ? closest(cli, '.e-' + this.getModuleName() + '-wrapper') : null;\n            var isInstLI = cli && cliWrapper && (this.isMenu ? this.getIndex(cli.id, true).length > 0\n                : wrapper.firstElementChild.id === cliWrapper.firstElementChild.id);\n            if (Browser.isDevice && this.isMenu) {\n                this.removeLIStateByClass([FOCUSED], [wrapper].concat(this.getPopups()));\n                this.mouseDownHandler(e);\n            }\n            if (cli && cliWrapper && this.isMenu) {\n                var cliWrapperId = cliWrapper.id ? regex.exec(cliWrapper.id)[1] : cliWrapper.querySelector('.e-menu-parent').id;\n                if (this.element.id !== cliWrapperId) {\n                    return;\n                }\n            }\n            if (isInstLI && e.type === 'click' && !cli.classList.contains(HEADER)) {\n                this.setLISelected(cli);\n                var navIdx = this.getIndex(cli.id, true);\n                var item = this.getItem(navIdx);\n                var eventArgs = { element: cli, item: item, event: e };\n                this.trigger('select', eventArgs);\n            }\n            if (isInstLI && (e.type === 'mouseover' || Browser.isDevice || this.showItemOnClick)) {\n                var ul = void 0;\n                if (cli.classList.contains(HEADER)) {\n                    ul = wrapper.children[this.navIdx.length - 1];\n                    this.toggleAnimation(ul);\n                    var sli = this.getLIByClass(ul, SELECTED);\n                    if (sli) {\n                        sli.classList.remove(SELECTED);\n                    }\n                    detach(cli.parentNode);\n                    this.navIdx.pop();\n                }\n                else {\n                    if (!cli.classList.contains(SEPARATOR)) {\n                        this.showSubMenu = true;\n                        var cul = cli.parentNode;\n                        if (isNullOrUndefined(cul)) {\n                            return;\n                        }\n                        this.cliIdx = this.getIdx(cul, cli);\n                        if (this.isMenu || !Browser.isDevice) {\n                            var culIdx = this.isMenu ? Array.prototype.indexOf.call([wrapper].concat(this.getPopups()), closest(cul, '.' + 'e-' + this.getModuleName() + '-wrapper'))\n                                : this.getIdx(wrapper, cul);\n                            if (this.navIdx[culIdx] === this.cliIdx) {\n                                this.showSubMenu = false;\n                            }\n                            if (culIdx !== this.navIdx.length && (e.type !== 'mouseover' || this.showSubMenu)) {\n                                var sli = this.getLIByClass(cul, SELECTED);\n                                if (sli) {\n                                    sli.classList.remove(SELECTED);\n                                }\n                                this.isClosed = true;\n                                this.keyType = 'click';\n                                if (this.showItemOnClick) {\n                                    this.setLISelected(cli);\n                                }\n                                this.closeMenu(culIdx + 1, e);\n                                if (this.showItemOnClick) {\n                                    this.setLISelected(cli);\n                                }\n                            }\n                        }\n                        if (!this.isClosed) {\n                            this.afterCloseMenu(e);\n                        }\n                        this.isClosed = false;\n                    }\n                }\n            }\n            else {\n                if (this.isMenu && trgt.tagName === 'DIV' && this.navIdx.length && closest(trgt, '.e-menu-vscroll')) {\n                    var popupEle = closest(trgt, '.' + POPUP);\n                    var cIdx = Array.prototype.indexOf.call(this.getPopups(), popupEle) + 1;\n                    if (cIdx < this.navIdx.length) {\n                        this.closeMenu(cIdx + 1, e);\n                        if (popupEle) {\n                            this.removeLIStateByClass([FOCUSED, SELECTED], [popupEle]);\n                        }\n                    }\n                }\n                else if (this.isMenu && this.hamburgerMode && trgt.tagName === 'SPAN'\n                    && trgt.classList.contains('e-menu-icon')) {\n                    this.menuHeaderClickHandler(e);\n                }\n                else {\n                    if (trgt.tagName !== 'UL' || (this.isMenu ? trgt.parentElement.classList.contains('e-menu-wrapper') &&\n                        !this.getIndex(trgt.querySelector('.' + ITEM).id, true).length : trgt.parentElement !== wrapper)) {\n                        if (!cli) {\n                            this.removeLIStateByClass([SELECTED], [wrapper]);\n                        }\n                        if (!cli || !cli.querySelector('.' + CARET)) {\n                            this.closeMenu(null, e);\n                        }\n                    }\n                }\n            }\n        }\n    };\n    MenuBase.prototype.afterCloseMenu = function (e) {\n        if (isNullOrUndefined(e)) {\n            return;\n        }\n        var isHeader;\n        if (this.showSubMenu) {\n            if (this.showItemOnClick && this.navIdx.length === 0) {\n                isHeader = closest(e.target, '.e-menu-parent.e-control');\n            }\n            else {\n                isHeader = closest(this.element, '.e-menu-parent.e-control');\n            }\n            var idx = this.navIdx.concat(this.cliIdx);\n            var item = this.getItem(idx);\n            if (item && item[this.getField('children', idx.length - 1)] &&\n                item[this.getField('children', idx.length - 1)].length) {\n                if (e.type === 'mouseover' || (Browser.isDevice && this.isMenu)) {\n                    this.setLISelected(this.cli);\n                }\n                if ((!this.hamburgerMode && isHeader) || (this.hamburgerMode && this.cli.getAttribute('aria-expanded') === 'false')) {\n                    this.cli.setAttribute('aria-expanded', 'true');\n                    this.navIdx.push(this.cliIdx);\n                    this.openMenu(this.cli, item, null, null, e);\n                }\n            }\n            else {\n                if (e.type !== 'mouseover') {\n                    this.closeMenu(null, e);\n                }\n            }\n            if (!isHeader) {\n                var cul = this.getUlByNavIdx();\n                var sli = this.getLIByClass(cul, SELECTED);\n                if (sli) {\n                    sli.setAttribute('aria-expanded', 'false');\n                    sli.classList.remove(SELECTED);\n                }\n            }\n        }\n        this.keyType = '';\n    };\n    MenuBase.prototype.setLISelected = function (li) {\n        var sli = this.getLIByClass(li.parentElement, SELECTED);\n        if (sli) {\n            sli.classList.remove(SELECTED);\n        }\n        if (!this.isMenu) {\n            li.classList.remove(FOCUSED);\n        }\n        li.classList.add(SELECTED);\n    };\n    MenuBase.prototype.getLIByClass = function (ul, classname) {\n        for (var i = 0, len = ul.children.length; i < len; i++) {\n            if (ul.children[i].classList.contains(classname)) {\n                return ul.children[i];\n            }\n        }\n        return null;\n    };\n    /**\n     * This method is used to get the index of the menu item in the Menu based on the argument.\n     *\n     * @param {MenuItem | string} item - item be passed to get the index | id to be passed to get the item index.\n     * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n     * @returns {void}\n     */\n    MenuBase.prototype.getItemIndex = function (item, isUniqueId) {\n        var idx;\n        if (typeof item === 'string') {\n            idx = item;\n        }\n        else {\n            idx = item.id;\n        }\n        var isText = (isUniqueId === false) ? false : true;\n        var navIdx = this.getIndex(idx, isText);\n        return navIdx;\n    };\n    /**\n     * This method is used to set the menu item in the Menu based on the argument.\n     *\n     * @param {MenuItem} item - item need to be updated.\n     * @param {string} id - id / text to be passed to update the item.\n     * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n     * @returns {void}\n     */\n    MenuBase.prototype.setItem = function (item, id, isUniqueId) {\n        var idx;\n        if (isUniqueId) {\n            idx = id ? id : item.id;\n        }\n        else {\n            idx = id ? id : item.text;\n        }\n        var navIdx = this.getIndex(idx, isUniqueId);\n        var newItem = this.getItem(navIdx);\n        Object.assign(newItem, item);\n    };\n    MenuBase.prototype.getItem = function (navIdx) {\n        navIdx = navIdx.slice();\n        var idx = navIdx.pop();\n        var items = this.getItems(navIdx);\n        return items[idx];\n    };\n    MenuBase.prototype.getItems = function (navIdx) {\n        var items = this.items;\n        for (var i = 0; i < navIdx.length; i++) {\n            items = items[navIdx[i]][this.getField('children', i)];\n        }\n        return items;\n    };\n    MenuBase.prototype.setItems = function (newItems, navIdx) {\n        var items = this.getItems(navIdx);\n        items.splice(0, items.length);\n        for (var i = 0; i < newItems.length; i++) {\n            items.splice(i, 0, newItems[i]);\n        }\n    };\n    MenuBase.prototype.getIdx = function (ul, li, skipHdr) {\n        if (skipHdr === void 0) { skipHdr = true; }\n        var idx = Array.prototype.indexOf.call(ul.children, li);\n        if (skipHdr && ul.children[0].classList.contains(HEADER)) {\n            idx--;\n        }\n        return idx;\n    };\n    MenuBase.prototype.getLI = function (elem) {\n        if (elem.tagName === 'LI' && elem.classList.contains('e-menu-item')) {\n            return elem;\n        }\n        return closest(elem, 'li.e-menu-item');\n    };\n    MenuBase.prototype.updateItemsByNavIdx = function () {\n        var items = this.items;\n        var count = 0;\n        for (var index = 0; index < this.navIdx.length; index++) {\n            items = items[index].items;\n            if (!items) {\n                break;\n            }\n            count++;\n            var ul = this.getUlByNavIdx(count);\n            if (!ul) {\n                break;\n            }\n            this.updateItem(ul, items);\n        }\n    };\n    MenuBase.prototype.removeChildElement = function (elem) {\n        while (elem.firstElementChild) {\n            elem.removeChild(elem.firstElementChild);\n        }\n        return elem;\n    };\n    /**\n     * Called internally if any of the property value changed.\n     *\n     * @private\n     * @param {MenuBaseModel} newProp - Specifies the new properties\n     * @param {MenuBaseModel} oldProp - Specifies the old properties\n     * @returns {void}\n     */\n    MenuBase.prototype.onPropertyChanged = function (newProp, oldProp) {\n        var _this = this;\n        var wrapper = this.getWrapper();\n        var _loop_2 = function (prop) {\n            switch (prop) {\n                case 'cssClass':\n                    if (oldProp.cssClass) {\n                        removeClass([wrapper], oldProp.cssClass.split(' '));\n                    }\n                    if (newProp.cssClass) {\n                        addClass([wrapper], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n                    }\n                    break;\n                case 'enableRtl':\n                    if (this_1.enableRtl) {\n                        wrapper.classList.add(RTL);\n                    }\n                    else {\n                        wrapper.classList.remove(RTL);\n                    }\n                    break;\n                case 'showItemOnClick':\n                    this_1.unWireEvents();\n                    this_1.showItemOnClick = newProp.showItemOnClick;\n                    this_1.wireEvents();\n                    break;\n                case 'enableScrolling':\n                    if (newProp.enableScrolling) {\n                        var ul_2;\n                        if (this_1.element.classList.contains('e-vertical')) {\n                            addScrolling(this_1.createElement, wrapper, this_1.element, 'vscroll', this_1.enableRtl);\n                        }\n                        else {\n                            addScrolling(this_1.createElement, wrapper, this_1.element, 'hscroll', this_1.enableRtl);\n                        }\n                        this_1.getPopups().forEach(function (wrapper) {\n                            ul_2 = select('.e-ul', wrapper);\n                            addScrolling(_this.createElement, wrapper, ul_2, 'vscroll', _this.enableRtl);\n                        });\n                    }\n                    else {\n                        var ul_3 = wrapper.children[0];\n                        if (this_1.element.classList.contains('e-vertical')) {\n                            destroyScroll(getInstance(ul_3, VScroll), ul_3);\n                        }\n                        else {\n                            destroyScroll(getInstance(ul_3, HScroll), ul_3);\n                        }\n                        wrapper.style.overflow = '';\n                        wrapper.appendChild(this_1.element);\n                        this_1.getPopups().forEach(function (wrapper) {\n                            ul_3 = wrapper.children[0];\n                            destroyScroll(getInstance(ul_3, VScroll), ul_3);\n                            wrapper.style.overflow = '';\n                        });\n                    }\n                    break;\n                case 'items': {\n                    var idx = void 0;\n                    var navIdx = void 0;\n                    var item = void 0;\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    if (this_1.isReact && this_1.template) {\n                        this_1.clearTemplate(['template']);\n                    }\n                    if (!Object.keys(oldProp.items).length) {\n                        this_1.updateItem(this_1.element, this_1.items);\n                        if (this_1.enableScrolling && this_1.element.parentElement.classList.contains('e-custom-scroll')) {\n                            if (this_1.element.classList.contains('e-vertical')) {\n                                addScrolling(this_1.createElement, wrapper, this_1.element, 'vscroll', this_1.enableRtl);\n                            }\n                            else {\n                                addScrolling(this_1.createElement, wrapper, this_1.element, 'hscroll', this_1.enableRtl);\n                            }\n                        }\n                        if (!this_1.hamburgerMode) {\n                            for (var i = 1, count = wrapper.childElementCount; i < count; i++) {\n                                detach(wrapper.lastElementChild);\n                            }\n                        }\n                        this_1.navIdx = [];\n                    }\n                    else {\n                        var keys = Object.keys(newProp.items);\n                        for (var i = 0; i < keys.length; i++) {\n                            navIdx = this_1.getChangedItemIndex(newProp, [], Number(keys[i]));\n                            if (navIdx.length <= this_1.getWrapper().children.length) {\n                                idx = navIdx.pop();\n                                item = this_1.getItems(navIdx);\n                                this_1.insertAfter([item[idx]], item[idx].text);\n                                this_1.removeItem(item, navIdx, idx);\n                                this_1.setItems(item, navIdx);\n                            }\n                            navIdx.length = 0;\n                        }\n                    }\n                    break;\n                }\n            }\n        };\n        var this_1 = this;\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            _loop_2(prop);\n        }\n    };\n    MenuBase.prototype.updateItem = function (ul, items) {\n        if (isBlazor() && !this.isMenu) {\n            ul = this.removeChildElement(ul);\n        }\n        else {\n            if (this.enableScrolling) {\n                var wrapper1 = this.getWrapper();\n                var ul1 = wrapper1.children[0];\n                if (this.element.classList.contains('e-vertical')) {\n                    destroyScroll(getInstance(ul1, VScroll), ul1);\n                }\n                else {\n                    destroyScroll(getInstance(ul1, HScroll), ul1);\n                }\n            }\n            ul.innerHTML = '';\n        }\n        var lis = [].slice.call(this.createItems(items).children);\n        lis.forEach(function (li) {\n            ul.appendChild(li);\n        });\n    };\n    MenuBase.prototype.getChangedItemIndex = function (newProp, index, idx) {\n        index.push(idx);\n        var key = Object.keys(newProp.items[idx]).pop();\n        if (key === 'items') {\n            var item = newProp.items[idx];\n            var popStr = Object.keys(item.items).pop();\n            if (popStr) {\n                this.getChangedItemIndex(item, index, Number(popStr));\n            }\n        }\n        else {\n            if (key === 'isParentArray' && index.length > 1) {\n                index.pop();\n            }\n        }\n        return index;\n    };\n    MenuBase.prototype.removeItem = function (item, navIdx, idx) {\n        item.splice(idx, 1);\n        var uls = this.getWrapper().children;\n        if (navIdx.length < uls.length) {\n            detach(uls[navIdx.length].children[idx]);\n        }\n    };\n    /**\n     * Used to unwire the bind events.\n     *\n     * @private\n     * @param {string} targetSelctor - Specifies the target selector\n     * @returns {void}\n     */\n    MenuBase.prototype.unWireEvents = function (targetSelctor) {\n        if (targetSelctor === void 0) { targetSelctor = this.target; }\n        var wrapper = this.getWrapper();\n        if (targetSelctor) {\n            var target = void 0;\n            var touchModule = void 0;\n            var targetElems = selectAll(targetSelctor);\n            for (var i = 0, len = targetElems.length; i < len; i++) {\n                target = targetElems[i];\n                if (this.isMenu) {\n                    EventHandler.remove(target, 'click', this.menuHeaderClickHandler);\n                }\n                else {\n                    if (Browser.isIos) {\n                        touchModule = getInstance(target, Touch);\n                        if (touchModule) {\n                            touchModule.destroy();\n                        }\n                    }\n                    else {\n                        EventHandler.remove(target, 'contextmenu', this.cmenuHandler);\n                    }\n                }\n            }\n            if (!this.isMenu) {\n                EventHandler.remove(this.targetElement, 'mousewheel DOMMouseScroll', this.scrollHandler);\n                for (var _i = 0, _a = getScrollableParent(this.targetElement); _i < _a.length; _i++) {\n                    var parent_2 = _a[_i];\n                    EventHandler.remove(parent_2, 'mousewheel DOMMouseScroll', this.scrollHandler);\n                }\n            }\n        }\n        if (!Browser.isDevice) {\n            EventHandler.remove(this.isMenu ? document : wrapper, 'mouseover', this.delegateMoverHandler);\n            EventHandler.remove(document, 'mousedown', this.delegateMouseDownHandler);\n        }\n        EventHandler.remove(document, 'click', this.delegateClickHandler);\n        this.unWireKeyboardEvent(wrapper);\n        this.rippleFn();\n    };\n    MenuBase.prototype.unWireKeyboardEvent = function (element) {\n        var keyboardModule = getInstance(element, KeyboardEvents);\n        if (keyboardModule) {\n            keyboardModule.destroy();\n        }\n    };\n    MenuBase.prototype.toggleAnimation = function (ul, isMenuOpen) {\n        var _this = this;\n        if (isMenuOpen === void 0) { isMenuOpen = true; }\n        var pUlHeight;\n        var pElement;\n        if (this.animationSettings.effect === 'None' || !isMenuOpen) {\n            this.end(ul, isMenuOpen);\n        }\n        else {\n            this.animation.animate(ul, {\n                name: this.animationSettings.effect,\n                duration: this.animationSettings.duration,\n                timingFunction: this.animationSettings.easing,\n                begin: function (options) {\n                    if (_this.hamburgerMode) {\n                        pElement = options.element.parentElement;\n                        options.element.style.position = 'absolute';\n                        pUlHeight = pElement.offsetHeight;\n                        options.element.style.maxHeight = options.element.offsetHeight + 'px';\n                        pElement.style.maxHeight = '';\n                    }\n                    else {\n                        options.element.style.display = 'block';\n                        options.element.style.maxHeight = options.element.getBoundingClientRect().height + 'px';\n                    }\n                },\n                progress: function (options) {\n                    if (_this.hamburgerMode) {\n                        pElement.style.minHeight = (pUlHeight + options.element.offsetHeight) + 'px';\n                    }\n                },\n                end: function (options) {\n                    if (_this.hamburgerMode) {\n                        options.element.style.position = '';\n                        options.element.style.maxHeight = '';\n                        pElement.style.minHeight = '';\n                        options.element.style.top = 0 + 'px';\n                        options.element.children[0].focus();\n                        _this.triggerOpen(options.element.children[0]);\n                    }\n                    else {\n                        _this.end(options.element, isMenuOpen);\n                    }\n                }\n            });\n        }\n    };\n    MenuBase.prototype.triggerOpen = function (ul) {\n        var item = this.navIdx.length ? this.getItem(this.navIdx) : null;\n        var eventArgs = {\n            element: ul, parentItem: item, items: item ? item.items : this.items\n        };\n        this.trigger('onOpen', eventArgs);\n        if (!this.isMenu) {\n            EventHandler.add(ul, 'keydown', this.keyHandler, this);\n        }\n    };\n    MenuBase.prototype.end = function (ul, isMenuOpen) {\n        if (isMenuOpen) {\n            ul.style.display = 'block';\n            ul.style.maxHeight = '';\n            this.triggerOpen(ul);\n            if (ul.querySelector('.' + FOCUSED)) {\n                ul.querySelector('.' + FOCUSED).focus();\n            }\n            else {\n                var ele = this.getWrapper().children[this.getIdx(this.getWrapper(), ul) - 1];\n                if (this.currentTarget) {\n                    if (!(this.currentTarget.classList.contains('e-numerictextbox') || this.currentTarget.classList.contains('e-textbox') || this.currentTarget.tagName === 'INPUT')) {\n                        if (ele) {\n                            ele.querySelector('.' + SELECTED).focus();\n                        }\n                        else {\n                            this.element.focus();\n                        }\n                    }\n                }\n                else {\n                    if (ele) {\n                        ele.querySelector('.' + SELECTED).focus();\n                    }\n                    else {\n                        this.element.focus();\n                    }\n                }\n            }\n        }\n        else {\n            if (ul === this.element) {\n                var fli = this.getLIByClass(this.element, FOCUSED);\n                if (fli) {\n                    fli.classList.remove(FOCUSED);\n                }\n                var sli = this.getLIByClass(this.element, SELECTED);\n                if (sli) {\n                    sli.classList.remove(SELECTED);\n                }\n                ul.style.display = 'none';\n            }\n            else {\n                detach(ul);\n            }\n        }\n    };\n    /**\n     * Get the properties to be maintained in the persisted state.\n     *\n     * @returns {string} - Persist data\n     */\n    MenuBase.prototype.getPersistData = function () {\n        return '';\n    };\n    /**\n     * Get wrapper element.\n     *\n     * @returns {Element} - Wrapper element\n     * @private\n     */\n    MenuBase.prototype.getWrapper = function () {\n        return closest(this.element, '.e-' + this.getModuleName() + '-wrapper');\n    };\n    MenuBase.prototype.getIndex = function (data, isUniqueId, items, nIndex, isCallBack, level) {\n        if (items === void 0) { items = this.items; }\n        if (nIndex === void 0) { nIndex = []; }\n        if (isCallBack === void 0) { isCallBack = false; }\n        if (level === void 0) { level = 0; }\n        var item;\n        level = isCallBack ? level + 1 : 0;\n        for (var i = 0, len = items.length; i < len; i++) {\n            item = items[i];\n            if ((isUniqueId ? item[this.getField('itemId', level)] : item[this.getField('text', level)]) === data) {\n                nIndex.push(i);\n                break;\n            }\n            else if (item[this.getField('children', level)]\n                && item[this.getField('children', level)].length) {\n                nIndex = this.getIndex(data, isUniqueId, item[this.getField('children', level)], nIndex, true, level);\n                if (nIndex[nIndex.length - 1] === -1) {\n                    if (i !== len - 1) {\n                        nIndex.pop();\n                    }\n                }\n                else {\n                    nIndex.unshift(i);\n                    break;\n                }\n            }\n            else {\n                if (i === len - 1) {\n                    nIndex.push(-1);\n                }\n            }\n        }\n        return (!isCallBack && nIndex[0] === -1) ? [] : nIndex;\n    };\n    /**\n     * This method is used to enable or disable the menu items in the Menu based on the items and enable argument.\n     *\n     * @param {string[]} items - Text items that needs to be enabled/disabled.\n     * @param {boolean} enable - Set `true`/`false` to enable/disable the list items.\n     * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n     * @returns {void}\n     */\n    MenuBase.prototype.enableItems = function (items, enable, isUniqueId) {\n        if (enable === void 0) { enable = true; }\n        var ul;\n        var idx;\n        var navIdx;\n        var disabled = DISABLED;\n        var skipItem;\n        for (var i = 0; i < items.length; i++) {\n            navIdx = this.getIndex(items[i], isUniqueId);\n            if (this.navIdx.length) {\n                if (navIdx.length !== 1) {\n                    skipItem = false;\n                    for (var i_1 = 0, len = navIdx.length - 1; i_1 < len; i_1++) {\n                        if (navIdx[i_1] !== this.navIdx[i_1]) {\n                            skipItem = true;\n                            break;\n                        }\n                    }\n                    if (skipItem) {\n                        continue;\n                    }\n                }\n            }\n            else {\n                if (navIdx.length !== 1) {\n                    continue;\n                }\n            }\n            idx = navIdx.pop();\n            ul = this.getUlByNavIdx(navIdx.length);\n            if (ul && !isNullOrUndefined(idx)) {\n                if (enable) {\n                    if (this.isMenu) {\n                        ul.children[idx].classList.remove(disabled);\n                        ul.children[idx].removeAttribute('aria-disabled');\n                    }\n                    else {\n                        if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n                            ul.children[idx + 1].classList.remove(disabled);\n                        }\n                        else {\n                            ul.children[idx].classList.remove(disabled);\n                        }\n                    }\n                }\n                else {\n                    if (this.isMenu) {\n                        ul.children[idx].classList.add(disabled);\n                        ul.children[idx].setAttribute('aria-disabled', 'true');\n                    }\n                    else {\n                        if (Browser.isDevice && !ul.classList.contains('e-contextmenu')) {\n                            ul.children[idx + 1].classList.add(disabled);\n                        }\n                        else {\n                            ul.children[idx].classList.add(disabled);\n                        }\n                    }\n                }\n            }\n        }\n    };\n    /**\n     * This method is used to show the menu items in the Menu based on the items text.\n     *\n     * @param {string[]} items - Text items that needs to be shown.\n     * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n     * @returns {void}\n     */\n    MenuBase.prototype.showItems = function (items, isUniqueId) {\n        this.showHideItems(items, false, isUniqueId);\n    };\n    /**\n     * This method is used to hide the menu items in the Menu based on the items text.\n     *\n     * @param {string[]} items - Text items that needs to be hidden.\n     * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n     * @returns {void}\n     */\n    MenuBase.prototype.hideItems = function (items, isUniqueId) {\n        this.showHideItems(items, true, isUniqueId);\n    };\n    MenuBase.prototype.showHideItems = function (items, ishide, isUniqueId) {\n        var ul;\n        var index;\n        var navIdx;\n        var item;\n        for (var i = 0; i < items.length; i++) {\n            navIdx = this.getIndex(items[i], isUniqueId);\n            index = navIdx.pop();\n            ul = this.getUlByNavIdx(navIdx.length);\n            item = this.getItems(navIdx);\n            if (ul) {\n                var validUl = isUniqueId ? ul.children[index].id : item[index].text.toString();\n                if (ishide && validUl === items[i]) {\n                    ul.children[index].classList.add(HIDE);\n                }\n                else if (!ishide && validUl === items[i]) {\n                    ul.children[index].classList.remove(HIDE);\n                }\n            }\n        }\n    };\n    /**\n     * It is used to remove the menu items from the Menu based on the items text.\n     *\n     * @param {string[]} items Text items that needs to be removed.\n     * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n     * @returns {void}\n     */\n    MenuBase.prototype.removeItems = function (items, isUniqueId) {\n        var idx;\n        var navIdx;\n        var iitems;\n        for (var i = 0; i < items.length; i++) {\n            navIdx = this.getIndex(items[i], isUniqueId);\n            idx = navIdx.pop();\n            iitems = this.getItems(navIdx);\n            if (!isNullOrUndefined(idx)) {\n                this.removeItem(iitems, navIdx, idx);\n            }\n        }\n    };\n    /**\n     * It is used to insert the menu items after the specified menu item text.\n     *\n     * @param {MenuItemModel[]} items - Items that needs to be inserted.\n     * @param {string} text - Text item after that the element to be inserted.\n     * @param {boolean} isUniqueId - Set `true` if it is a unique id.\n     * @returns {void}\n     */\n    MenuBase.prototype.insertAfter = function (items, text, isUniqueId) {\n        this.insertItems(items, text, isUniqueId);\n    };\n    /**\n     * It is used to insert the menu items before the specified menu item text.\n     *\n     * @param {MenuItemModel[]} items - Items that needs to be inserted.\n     * @param {string} text - Text item before that the element to be inserted.\n     * @param  {boolean} isUniqueId - Set `true` if it is a unique id.\n     * @returns {void}\n     */\n    MenuBase.prototype.insertBefore = function (items, text, isUniqueId) {\n        this.insertItems(items, text, isUniqueId, false);\n    };\n    MenuBase.prototype.insertItems = function (items, text, isUniqueId, isAfter) {\n        if (isAfter === void 0) { isAfter = true; }\n        var li;\n        var idx;\n        var navIdx;\n        var iitems;\n        var menuitem;\n        for (var i = 0; i < items.length; i++) {\n            navIdx = this.getIndex(text, isUniqueId);\n            idx = navIdx.pop();\n            iitems = this.getItems(navIdx);\n            menuitem = new MenuItem(iitems[0], 'items', items[i], true);\n            iitems.splice(isAfter ? idx + 1 : idx, 0, menuitem);\n            var uls = this.isMenu ? [this.getWrapper()].concat(this.getPopups()) : [].slice.call(this.getWrapper().children);\n            if (!isNullOrUndefined(idx) && navIdx.length < uls.length) {\n                idx = isAfter ? idx + 1 : idx;\n                li = this.createItems(iitems).children[idx];\n                var ul = this.isMenu ? select('.e-menu-parent', uls[navIdx.length]) : uls[navIdx.length];\n                ul.insertBefore(li, ul.children[idx]);\n            }\n        }\n    };\n    MenuBase.prototype.removeAttributes = function () {\n        var _this = this;\n        ['top', 'left', 'display', 'z-index'].forEach(function (key) {\n            _this.element.style.removeProperty(key);\n        });\n        ['role', 'tabindex', 'class', 'style'].forEach(function (key) {\n            if (key === 'class' && _this.element.classList.contains('e-menu-parent')) {\n                _this.element.classList.remove('e-menu-parent');\n            }\n            if (['class', 'style'].indexOf(key) === -1 || !_this.element.getAttribute(key)) {\n                _this.element.removeAttribute(key);\n            }\n            if (_this.isMenu && key === 'class' && _this.element.classList.contains('e-vertical')) {\n                _this.element.classList.remove('e-vertical');\n            }\n        });\n    };\n    /**\n     * Destroys the widget.\n     *\n     * @returns {void}\n     */\n    MenuBase.prototype.destroy = function () {\n        var wrapper = this.getWrapper();\n        if (wrapper) {\n            this.unWireEvents();\n            if (!this.isMenu) {\n                this.clonedElement.style.display = '';\n                if (this.clonedElement.tagName === 'EJS-CONTEXTMENU') {\n                    addClass([this.clonedElement], ['e-control', 'e-lib', 'e-' + this.getModuleName()]);\n                    this.element = this.clonedElement;\n                }\n                else {\n                    if (this.refreshing && this.clonedElement.childElementCount && this.clonedElement.children[0].tagName === 'LI') {\n                        this.setProperties({ 'items': [] }, true);\n                    }\n                    if (document.getElementById(this.clonedElement.id)) {\n                        var refEle = this.clonedElement.nextElementSibling;\n                        if (refEle && refEle !== wrapper) {\n                            this.clonedElement.parentElement.insertBefore(this.element, refEle);\n                        }\n                        else {\n                            this.clonedElement.parentElement.appendChild(this.element);\n                        }\n                        if (isBlazor() && !this.isMenu) {\n                            this.element = this.removeChildElement(this.element);\n                        }\n                        else {\n                            this.element.innerHTML = '';\n                        }\n                        append([].slice.call(this.clonedElement.children), this.element);\n                        detach(this.clonedElement);\n                        this.removeAttributes();\n                    }\n                }\n                this.clonedElement = null;\n            }\n            else {\n                this.closeMenu();\n                if (isBlazor() && !this.isMenu) {\n                    this.element = this.removeChildElement(this.element);\n                }\n                else {\n                    this.element.innerHTML = '';\n                }\n                this.removeAttributes();\n                wrapper.parentNode.insertBefore(this.element, wrapper);\n                this.clonedElement = null;\n            }\n            if (this.isMenu && this.clonedElement) {\n                detach(this.element);\n                wrapper.style.display = '';\n                wrapper.classList.remove('e-' + this.getModuleName() + '-wrapper');\n                wrapper.removeAttribute('data-ripple');\n            }\n            else {\n                detach(wrapper);\n            }\n            _super.prototype.destroy.call(this);\n            if (this.template) {\n                this.clearTemplate(['template']);\n            }\n        }\n        this.rippleFn = null;\n    };\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"beforeItemRender\", void 0);\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"beforeOpen\", void 0);\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"onOpen\", void 0);\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"beforeClose\", void 0);\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"onClose\", void 0);\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"select\", void 0);\n    __decorate([\n        Event()\n    ], MenuBase.prototype, \"created\", void 0);\n    __decorate([\n        Property('')\n    ], MenuBase.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(0)\n    ], MenuBase.prototype, \"hoverDelay\", void 0);\n    __decorate([\n        Property(false)\n    ], MenuBase.prototype, \"showItemOnClick\", void 0);\n    __decorate([\n        Property('')\n    ], MenuBase.prototype, \"target\", void 0);\n    __decorate([\n        Property('')\n    ], MenuBase.prototype, \"filter\", void 0);\n    __decorate([\n        Property(null)\n    ], MenuBase.prototype, \"template\", void 0);\n    __decorate([\n        Property(false)\n    ], MenuBase.prototype, \"enableScrolling\", void 0);\n    __decorate([\n        Property(false)\n    ], MenuBase.prototype, \"enableHtmlSanitizer\", void 0);\n    __decorate([\n        Complex({ itemId: 'id', text: 'text', parentId: 'parentId', iconCss: 'iconCss', url: 'url', separator: 'separator', children: 'items' }, FieldSettings)\n    ], MenuBase.prototype, \"fields\", void 0);\n    __decorate([\n        Collection([], MenuItem)\n    ], MenuBase.prototype, \"items\", void 0);\n    __decorate([\n        Complex({ duration: 400, easing: 'ease', effect: 'SlideDown' }, MenuAnimationSettings)\n    ], MenuBase.prototype, \"animationSettings\", void 0);\n    MenuBase = __decorate([\n        NotifyPropertyChanges\n    ], MenuBase);\n    return MenuBase;\n}(Component));\nexport { MenuBase };\n","//! moment.js locale configuration\n//! locale : English (Singapore) [en-sg]\n//! author : Matthew Castrillon-Madrigal : https://github.com/techdimension\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enSg = moment.defineLocale('en-sg', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enSg;\n\n})));\n","//! moment.js locale configuration\n//! locale : Nynorsk [nn]\n//! authors : https://github.com/mechuwind\n//!           Stephen Ramthun : https://github.com/stephenramthun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var nn = moment.defineLocale('nn', {\n        months: 'januar_februar_mars_april_mai_juni_juli_august_september_oktober_november_desember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mars_apr._mai_juni_juli_aug._sep._okt._nov._des.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'sundag_måndag_tysdag_onsdag_torsdag_fredag_laurdag'.split('_'),\n        weekdaysShort: 'su._må._ty._on._to._fr._lau.'.split('_'),\n        weekdaysMin: 'su_må_ty_on_to_fr_la'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY [kl.] H:mm',\n            LLLL: 'dddd D. MMMM YYYY [kl.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[I dag klokka] LT',\n            nextDay: '[I morgon klokka] LT',\n            nextWeek: 'dddd [klokka] LT',\n            lastDay: '[I går klokka] LT',\n            lastWeek: '[Føregåande] dddd [klokka] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'om %s',\n            past: '%s sidan',\n            s: 'nokre sekund',\n            ss: '%d sekund',\n            m: 'eit minutt',\n            mm: '%d minutt',\n            h: 'ein time',\n            hh: '%d timar',\n            d: 'ein dag',\n            dd: '%d dagar',\n            w: 'ei veke',\n            ww: '%d veker',\n            M: 'ein månad',\n            MM: '%d månader',\n            y: 'eit år',\n            yy: '%d år',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Latvian [lv]\n//! author : Kristaps Karlsons : https://github.com/skakri\n//! author : Jānis Elmeris : https://github.com/JanisE\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var units = {\n        ss: 'sekundes_sekundēm_sekunde_sekundes'.split('_'),\n        m: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        mm: 'minūtes_minūtēm_minūte_minūtes'.split('_'),\n        h: 'stundas_stundām_stunda_stundas'.split('_'),\n        hh: 'stundas_stundām_stunda_stundas'.split('_'),\n        d: 'dienas_dienām_diena_dienas'.split('_'),\n        dd: 'dienas_dienām_diena_dienas'.split('_'),\n        M: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        MM: 'mēneša_mēnešiem_mēnesis_mēneši'.split('_'),\n        y: 'gada_gadiem_gads_gadi'.split('_'),\n        yy: 'gada_gadiem_gads_gadi'.split('_'),\n    };\n    /**\n     * @param withoutSuffix boolean true = a length of time; false = before/after a period of time.\n     */\n    function format(forms, number, withoutSuffix) {\n        if (withoutSuffix) {\n            // E.g. \"21 minūte\", \"3 minūtes\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[2] : forms[3];\n        } else {\n            // E.g. \"21 minūtes\" as in \"pēc 21 minūtes\".\n            // E.g. \"3 minūtēm\" as in \"pēc 3 minūtēm\".\n            return number % 10 === 1 && number % 100 !== 11 ? forms[0] : forms[1];\n        }\n    }\n    function relativeTimeWithPlural(number, withoutSuffix, key) {\n        return number + ' ' + format(units[key], number, withoutSuffix);\n    }\n    function relativeTimeWithSingular(number, withoutSuffix, key) {\n        return format(units[key], number, withoutSuffix);\n    }\n    function relativeSeconds(number, withoutSuffix) {\n        return withoutSuffix ? 'dažas sekundes' : 'dažām sekundēm';\n    }\n\n    var lv = moment.defineLocale('lv', {\n        months: 'janvāris_februāris_marts_aprīlis_maijs_jūnijs_jūlijs_augusts_septembris_oktobris_novembris_decembris'.split(\n            '_'\n        ),\n        monthsShort: 'jan_feb_mar_apr_mai_jūn_jūl_aug_sep_okt_nov_dec'.split('_'),\n        weekdays:\n            'svētdiena_pirmdiena_otrdiena_trešdiena_ceturtdiena_piektdiena_sestdiena'.split(\n                '_'\n            ),\n        weekdaysShort: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysMin: 'Sv_P_O_T_C_Pk_S'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY.',\n            LL: 'YYYY. [gada] D. MMMM',\n            LLL: 'YYYY. [gada] D. MMMM, HH:mm',\n            LLLL: 'YYYY. [gada] D. MMMM, dddd, HH:mm',\n        },\n        calendar: {\n            sameDay: '[Šodien pulksten] LT',\n            nextDay: '[Rīt pulksten] LT',\n            nextWeek: 'dddd [pulksten] LT',\n            lastDay: '[Vakar pulksten] LT',\n            lastWeek: '[Pagājušā] dddd [pulksten] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'pēc %s',\n            past: 'pirms %s',\n            s: relativeSeconds,\n            ss: relativeTimeWithPlural,\n            m: relativeTimeWithSingular,\n            mm: relativeTimeWithPlural,\n            h: relativeTimeWithSingular,\n            hh: relativeTimeWithPlural,\n            d: relativeTimeWithSingular,\n            dd: relativeTimeWithPlural,\n            M: relativeTimeWithSingular,\n            MM: relativeTimeWithPlural,\n            y: relativeTimeWithSingular,\n            yy: relativeTimeWithPlural,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return lv;\n\n})));\n","//! moment.js locale configuration\n//! locale : German (Switzerland) [de-ch]\n//! author : sschueller : https://github.com/sschueller\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            m: ['eine Minute', 'einer Minute'],\n            h: ['eine Stunde', 'einer Stunde'],\n            d: ['ein Tag', 'einem Tag'],\n            dd: [number + ' Tage', number + ' Tagen'],\n            w: ['eine Woche', 'einer Woche'],\n            M: ['ein Monat', 'einem Monat'],\n            MM: [number + ' Monate', number + ' Monaten'],\n            y: ['ein Jahr', 'einem Jahr'],\n            yy: [number + ' Jahre', number + ' Jahren'],\n        };\n        return withoutSuffix ? format[key][0] : format[key][1];\n    }\n\n    var deCh = moment.defineLocale('de-ch', {\n        months: 'Januar_Februar_März_April_Mai_Juni_Juli_August_September_Oktober_November_Dezember'.split(\n            '_'\n        ),\n        monthsShort:\n            'Jan._Feb._März_Apr._Mai_Juni_Juli_Aug._Sep._Okt._Nov._Dez.'.split('_'),\n        monthsParseExact: true,\n        weekdays:\n            'Sonntag_Montag_Dienstag_Mittwoch_Donnerstag_Freitag_Samstag'.split(\n                '_'\n            ),\n        weekdaysShort: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysMin: 'So_Mo_Di_Mi_Do_Fr_Sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY HH:mm',\n            LLLL: 'dddd, D. MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[heute um] LT [Uhr]',\n            sameElse: 'L',\n            nextDay: '[morgen um] LT [Uhr]',\n            nextWeek: 'dddd [um] LT [Uhr]',\n            lastDay: '[gestern um] LT [Uhr]',\n            lastWeek: '[letzten] dddd [um] LT [Uhr]',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: 'vor %s',\n            s: 'ein paar Sekunden',\n            ss: '%d Sekunden',\n            m: processRelativeTime,\n            mm: '%d Minuten',\n            h: processRelativeTime,\n            hh: '%d Stunden',\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            w: processRelativeTime,\n            ww: '%d Wochen',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return deCh;\n\n})));\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var StackedColumnsDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-stacked-columns';\n        }\n    }\n});\nexport var StackedColumnsPlugin = {\n    name: 'e-stacked-columns',\n    install: function (Vue) {\n        Vue.component(StackedColumnsPlugin.name, StackedColumnsDirective);\n    }\n};\nexport var StackedColumnDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-stacked-column';\n        }\n    }\n});\nexport var StackedColumnPlugin = {\n    name: 'e-stacked-column',\n    install: function (Vue) {\n        Vue.component(StackedColumnPlugin.name, StackedColumnDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var ColumnsDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-columns';\n        }\n    }\n});\nexport var ColumnsPlugin = {\n    name: 'e-columns',\n    install: function (Vue) {\n        Vue.component(ColumnsPlugin.name, ColumnsDirective);\n    }\n};\n/**\n * `e-column` directive represent a column of the VueJS Grid.\n * It must be contained in a Grid component(`ejs-grid`).\n * ```vue\n * <ejs-grid :dataSource='data' allowPaging='true' allowSorting='true'>\n *   <e-columns>\n *    <e-column field='ID' width='100'/>\n *    <e-column field='name' headerText='Name' width='100'/>\n *   </e-columns>\n * </ejs-grid>\n * ```\n */\nexport var ColumnDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-column';\n        }\n    }\n});\nexport var ColumnPlugin = {\n    name: 'e-column',\n    install: function (Vue) {\n        Vue.component(ColumnPlugin.name, ColumnDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var AggregateColumnsDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-columns';\n        }\n    }\n});\nexport var AggregateColumnsPlugin = {\n    name: 'e-columns',\n    install: function (Vue) {\n        Vue.component(AggregateColumnsPlugin.name, AggregateColumnsDirective);\n    }\n};\n/**\n * `e-aggregate->e-column` directive represent a aggregate column of the VueJS Grid.\n * ```vue\n * <ejs-grid :dataSource='data' allowPaging='true' allowSorting='true'>\n *   <e-columns>\n *     <e-column field='ID' width='100'/>\n *     <e-column field='name' headerText='Name' width='100'/>\n *   </e-columns>\n *   <e-aggregates>\n *     <e-aggregate>\n *       <e-columns>\n *         <e-column field='ID' type='Min'/>\n *       </e-columns>\n *      </e-aggregate>\n *    </e-aggregates>\n * </ejs-grid>\n * ```\n */\nexport var AggregateColumnDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-column';\n        }\n    }\n});\nexport var AggregateColumnPlugin = {\n    name: 'e-column',\n    install: function (Vue) {\n        Vue.component(AggregateColumnPlugin.name, AggregateColumnDirective);\n    }\n};\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var AggregatesDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-aggregates';\n        }\n    }\n});\nexport var AggregatesPlugin = {\n    name: 'e-aggregates',\n    install: function (Vue) {\n        Vue.component(AggregatesPlugin.name, AggregatesDirective);\n    }\n};\n/**\n * `e-aggregate` directive represent a aggregate row of the VueJS Grid.\n * It must be contained in a Grid component(`ejs-grid`).\n * ```vue\n * <ejs-grid :dataSource]='data' allowPaging='true' allowSorting='true'>\n *   <e-columns>\n *     <e-column field='ID' width='100'/>\n *     <e-column field='name' headerText='Name' width='100'/>\n *   </e-columns>\n *   <e-aggregates>\n *     <e-aggregate>\n *       <e-columns>\n *         <e-column field='ID' type='Min'/>\n *       </e-columns>\n *      </e-aggregate>\n *    </e-aggregates>\n * </ejs-grid>\n * ```\n */\nexport var AggregateDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-aggregate';\n        }\n    }\n});\nexport var AggregatePlugin = {\n    name: 'e-aggregate',\n    install: function (Vue) {\n        Vue.component(AggregatePlugin.name, AggregateDirective);\n    }\n};\n","import { ComponentBase, gh, getProps, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { isUndefined } from '@syncfusion/ej2-base';\nimport { Grid } from '@syncfusion/ej2-grids';\nimport { StackedColumnsDirective, StackedColumnDirective, StackedColumnsPlugin, StackedColumnPlugin } from './stacked-column.directive';\nimport { ColumnsDirective, ColumnDirective, ColumnsPlugin, ColumnPlugin } from './columns.directive';\nimport { AggregateColumnsDirective, AggregateColumnDirective, AggregateColumnsPlugin, AggregateColumnPlugin } from './aggregate-columns.directive';\nimport { AggregatesDirective, AggregateDirective, AggregatesPlugin, AggregatePlugin } from './aggregates.directive';\nexport var properties = ['isLazyUpdate', 'plugins', 'aggregates', 'allowExcelExport', 'allowFiltering', 'allowGrouping', 'allowKeyboard', 'allowMultiSorting', 'allowPaging', 'allowPdfExport', 'allowReordering', 'allowResizing', 'allowRowDragAndDrop', 'allowSelection', 'allowSorting', 'allowTextWrap', 'autoFit', 'childGrid', 'clipMode', 'columnChooserSettings', 'columnMenuItems', 'columnQueryMode', 'columns', 'contextMenuItems', 'cssClass', 'currencyCode', 'currentAction', 'currentViewData', 'dataSource', 'detailTemplate', 'editSettings', 'ej2StatePersistenceVersion', 'emptyRecordTemplate', 'enableAdaptiveUI', 'enableAltRow', 'enableAutoFill', 'enableColumnVirtualization', 'enableHeaderFocus', 'enableHover', 'enableHtmlSanitizer', 'enableImmutableMode', 'enableInfiniteScrolling', 'enablePersistence', 'enableRtl', 'enableStickyHeader', 'enableVirtualMaskRow', 'enableVirtualization', 'exportGrids', 'filterSettings', 'frozenColumns', 'frozenRows', 'gridLines', 'groupSettings', 'height', 'hierarchyPrintMode', 'infiniteScrollSettings', 'loadingIndicator', 'locale', 'pageSettings', 'pagerTemplate', 'parentDetails', 'printMode', 'query', 'queryString', 'resizeSettings', 'rowDropSettings', 'rowHeight', 'rowRenderingMode', 'rowTemplate', 'searchSettings', 'selectedRowIndex', 'selectionSettings', 'showColumnChooser', 'showColumnMenu', 'showHider', 'sortSettings', 'textWrapSettings', 'toolbar', 'toolbarTemplate', 'width', 'actionBegin', 'actionComplete', 'actionFailure', 'batchAdd', 'batchCancel', 'batchDelete', 'beforeAutoFill', 'beforeBatchAdd', 'beforeBatchDelete', 'beforeBatchSave', 'beforeCopy', 'beforeDataBound', 'beforeExcelExport', 'beforeOpenAdaptiveDialog', 'beforeOpenColumnChooser', 'beforePaste', 'beforePdfExport', 'beforePrint', 'beginEdit', 'cellDeselected', 'cellDeselecting', 'cellEdit', 'cellSave', 'cellSaved', 'cellSelected', 'cellSelecting', 'checkBoxChange', 'columnDataStateChange', 'columnDeselected', 'columnDeselecting', 'columnDrag', 'columnDragStart', 'columnDrop', 'columnMenuClick', 'columnMenuOpen', 'columnSelected', 'columnSelecting', 'commandClick', 'contextMenuClick', 'contextMenuOpen', 'created', 'dataBound', 'dataSourceChanged', 'dataStateChange', 'destroyed', 'detailDataBound', 'excelAggregateQueryCellInfo', 'excelExportComplete', 'excelHeaderQueryCellInfo', 'excelQueryCellInfo', 'exportDetailDataBound', 'exportDetailTemplate', 'exportGroupCaption', 'headerCellInfo', 'keyPressed', 'lazyLoadGroupCollapse', 'lazyLoadGroupExpand', 'load', 'pdfAggregateQueryCellInfo', 'pdfExportComplete', 'pdfHeaderQueryCellInfo', 'pdfQueryCellInfo', 'printComplete', 'queryCellInfo', 'recordClick', 'recordDoubleClick', 'resizeStart', 'resizeStop', 'resizing', 'rowDataBound', 'rowDeselected', 'rowDeselecting', 'rowDrag', 'rowDragStart', 'rowDragStartHelper', 'rowDrop', 'rowSelected', 'rowSelecting', 'toolbarClick'];\nexport var modelProps = ['dataSource'];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0], watch = testProp[1], emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged', 'update:modelValue');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n    var props_1 = modelProps_1[_i];\n    emitProbs.push('update:' + props_1);\n}\n/**\n * `ejs-grid` represents the VueJS Grid Component.\n * ```vue\n * <ejs-grid :dataSource='data' allowPaging='true' allowSorting='true'></ejs-grid>\n * ```\n */\nexport var GridComponent = vueDefineComponent({\n    name: 'GridComponent',\n    mixins: [ComponentBase],\n    props: props,\n    watch: watch,\n    emits: emitProbs,\n    model: { event: 'modelchanged' },\n    provide: function () { return { custom: this.custom }; },\n    data: function () {\n        return {\n            ej2Instances: new Grid({}),\n            propKeys: properties,\n            models: modelProps,\n            hasChildDirective: true,\n            hasInjectedModules: true,\n            tagMapper: { \"e-columns\": { \"e-column\": { \"e-stacked-columns\": \"e-stacked-column\" } }, \"e-aggregates\": { \"e-aggregate\": { \"e-columns\": \"e-column\" } } },\n            tagNameMapper: { \"e-stacked-columns\": \"e-columns\" },\n            isVue3: !isExecute,\n            templateCollection: {},\n        };\n    },\n    created: function () {\n        this.ej2Instances._trigger = this.ej2Instances.trigger;\n        this.ej2Instances.trigger = this.trigger;\n        this.bindProperties();\n        this.ej2Instances._setProperties = this.ej2Instances.setProperties;\n        this.ej2Instances.setProperties = this.setProperties;\n        this.ej2Instances.clearTemplate = this.clearTemplate;\n        this.updated = this.updated;\n    },\n    render: function (createElement) {\n        var h = !isExecute ? gh : createElement;\n        var slots = null;\n        if (!isNullOrUndefined(this.$slots.default)) {\n            slots = !isExecute ? this.$slots.default() : this.$slots.default;\n        }\n        return h('div', slots);\n    },\n    methods: {\n        clearTemplate: function (templateNames) {\n            if (!templateNames) {\n                templateNames = Object.keys(this.templateCollection || {});\n            }\n            if (templateNames.length && this.templateCollection) {\n                for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n                    var tempName = templateNames_1[_i];\n                    var elementCollection = this.templateCollection[tempName];\n                    if (elementCollection && elementCollection.length) {\n                        for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n                            var ele = elementCollection_1[_a];\n                            var destroy = getValue('__vue__.$destroy', ele);\n                            if (destroy) {\n                                ele.__vue__.$destroy();\n                            }\n                            if (ele.innerHTML) {\n                                ele.innerHTML = '';\n                            }\n                        }\n                        delete this.templateCollection[tempName];\n                    }\n                }\n            }\n        },\n        setProperties: function (prop, muteOnChange) {\n            var _this = this;\n            if (this.isVue3) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if (this.ej2Instances && this.ej2Instances._setProperties) {\n                this.ej2Instances._setProperties(prop, muteOnChange);\n            }\n            if (prop && this.models && this.models.length) {\n                Object.keys(prop).map(function (key) {\n                    _this.models.map(function (model) {\n                        if ((key === model) && !(/datasource/i.test(key))) {\n                            if (_this.isVue3) {\n                                _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n                            }\n                            else {\n                                _this.$emit('update:' + key, prop[key]);\n                                _this.$emit('modelchanged', prop[key]);\n                            }\n                        }\n                    });\n                });\n            }\n        },\n        trigger: function (eventName, eventProp, successHandler) {\n            if (!isExecute) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if ((eventName === 'change' || eventName === 'input') && this.models && (this.models.length !== 0)) {\n                var key = this.models.toString().match(/checked|value/) || [];\n                var propKey = key[0];\n                if (eventProp && key && !isUndefined(eventProp[propKey])) {\n                    if (!isExecute) {\n                        this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('update:modelValue', eventProp[propKey]);\n                    }\n                    else {\n                        if (eventName === 'change' || (this.$props && !this.$props.isLazyUpdate)) {\n                            this.$emit('update:' + propKey, eventProp[propKey]);\n                            this.$emit('modelchanged', eventProp[propKey]);\n                        }\n                    }\n                }\n            }\n            else if ((eventName === 'actionBegin' && eventProp.requestType === 'dateNavigate') && this.models && (this.models.length !== 0)) {\n                var key = this.models.toString().match(/currentView|selectedDate/) || [];\n                var propKey = key[0];\n                if (eventProp && key && !isUndefined(eventProp[propKey])) {\n                    if (!isExecute) {\n                        this.ej2Instances.vueInstance.$emit('update:' + propKey, eventProp[propKey]);\n                        this.ej2Instances.vueInstance.$emit('modelchanged', eventProp[propKey]);\n                    }\n                    else {\n                        this.$emit('update:' + propKey, eventProp[propKey]);\n                        this.$emit('modelchanged', eventProp[propKey]);\n                    }\n                }\n            }\n            if ((this.ej2Instances && this.ej2Instances._trigger)) {\n                this.ej2Instances._trigger(eventName, eventProp, successHandler);\n            }\n        },\n        custom: function () {\n            this.updated();\n        },\n        addRecord: function (data, index) {\n            return this.ej2Instances.addRecord(data, index);\n        },\n        addShimmerEffect: function () {\n            return this.ej2Instances.addShimmerEffect();\n        },\n        autoFitColumns: function (fieldNames) {\n            return this.ej2Instances.autoFitColumns(fieldNames);\n        },\n        batchAsyncUpdate: function (changes) {\n            return this.ej2Instances.batchAsyncUpdate(changes);\n        },\n        batchUpdate: function (changes) {\n            return this.ej2Instances.batchUpdate(changes);\n        },\n        calculatePageSizeByParentHeight: function (containerHeight) {\n            return this.ej2Instances.calculatePageSizeByParentHeight(containerHeight);\n        },\n        changeDataSource: function (dataSource, columns) {\n            return this.ej2Instances.changeDataSource(dataSource, columns);\n        },\n        clearCellSelection: function () {\n            return this.ej2Instances.clearCellSelection();\n        },\n        clearFiltering: function (fields) {\n            return this.ej2Instances.clearFiltering(fields);\n        },\n        clearGrouping: function () {\n            return this.ej2Instances.clearGrouping();\n        },\n        clearRowSelection: function () {\n            return this.ej2Instances.clearRowSelection();\n        },\n        clearSelection: function () {\n            return this.ej2Instances.clearSelection();\n        },\n        clearSorting: function () {\n            return this.ej2Instances.clearSorting();\n        },\n        closeEdit: function () {\n            return this.ej2Instances.closeEdit();\n        },\n        copy: function (withHeader) {\n            return this.ej2Instances.copy(withHeader);\n        },\n        csvExport: function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n            return this.ej2Instances.csvExport(excelExportProperties, isMultipleExport, workbook, isBlob);\n        },\n        dataReady: function () {\n            return this.ej2Instances.dataReady();\n        },\n        deleteRecord: function (fieldname, data) {\n            return this.ej2Instances.deleteRecord(fieldname, data);\n        },\n        deleteRow: function (tr) {\n            return this.ej2Instances.deleteRow(tr);\n        },\n        destroyTemplate: function (propertyNames, index) {\n            return this.ej2Instances.destroyTemplate(propertyNames, index);\n        },\n        detailCollapseAll: function () {\n            return this.ej2Instances.detailCollapseAll();\n        },\n        detailExpandAll: function () {\n            return this.ej2Instances.detailExpandAll();\n        },\n        editCell: function (index, field) {\n            return this.ej2Instances.editCell(index, field);\n        },\n        enableToolbarItems: function (items, isEnable) {\n            return this.ej2Instances.enableToolbarItems(items, isEnable);\n        },\n        endEdit: function () {\n            return this.ej2Instances.endEdit();\n        },\n        excelExport: function (excelExportProperties, isMultipleExport, workbook, isBlob) {\n            return this.ej2Instances.excelExport(excelExportProperties, isMultipleExport, workbook, isBlob);\n        },\n        extendRequiredModules: function (modules) {\n            return this.ej2Instances.extendRequiredModules(modules);\n        },\n        filterByColumn: function (fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator) {\n            return this.ej2Instances.filterByColumn(fieldName, filterOperator, filterValue, predicate, matchCase, ignoreAccent, actualFilterValue, actualOperator);\n        },\n        getBatchChanges: function () {\n            return this.ej2Instances.getBatchChanges();\n        },\n        getCellFromIndex: function (rowIndex, columnIndex) {\n            return this.ej2Instances.getCellFromIndex(rowIndex, columnIndex);\n        },\n        getColumnByField: function (field) {\n            return this.ej2Instances.getColumnByField(field);\n        },\n        getColumnByUid: function (uid) {\n            return this.ej2Instances.getColumnByUid(uid);\n        },\n        getColumnFieldNames: function () {\n            return this.ej2Instances.getColumnFieldNames();\n        },\n        getColumnHeaderByField: function (field) {\n            return this.ej2Instances.getColumnHeaderByField(field);\n        },\n        getColumnHeaderByIndex: function (index) {\n            return this.ej2Instances.getColumnHeaderByIndex(index);\n        },\n        getColumnHeaderByUid: function (uid) {\n            return this.ej2Instances.getColumnHeaderByUid(uid);\n        },\n        getColumnIndexByField: function (field) {\n            return this.ej2Instances.getColumnIndexByField(field);\n        },\n        getColumnIndexByUid: function (uid) {\n            return this.ej2Instances.getColumnIndexByUid(uid);\n        },\n        getColumns: function (isRefresh) {\n            return this.ej2Instances.getColumns(isRefresh);\n        },\n        getContent: function () {\n            return this.ej2Instances.getContent();\n        },\n        getContentTable: function () {\n            return this.ej2Instances.getContentTable();\n        },\n        getCurrentViewRecords: function () {\n            return this.ej2Instances.getCurrentViewRecords();\n        },\n        getDataModule: function () {\n            return this.ej2Instances.getDataModule();\n        },\n        getDataRows: function () {\n            return this.ej2Instances.getDataRows();\n        },\n        getFilterUIInfo: function () {\n            return this.ej2Instances.getFilterUIInfo();\n        },\n        getFilteredRecords: function () {\n            return this.ej2Instances.getFilteredRecords();\n        },\n        getFooterContent: function () {\n            return this.ej2Instances.getFooterContent();\n        },\n        getFooterContentTable: function () {\n            return this.ej2Instances.getFooterContentTable();\n        },\n        getForeignKeyColumns: function () {\n            return this.ej2Instances.getForeignKeyColumns();\n        },\n        getFrozenDataRows: function () {\n            return this.ej2Instances.getFrozenDataRows();\n        },\n        getFrozenLeftColumnHeaderByIndex: function (index) {\n            return this.ej2Instances.getFrozenLeftColumnHeaderByIndex(index);\n        },\n        getFrozenLeftCount: function () {\n            return this.ej2Instances.getFrozenLeftCount();\n        },\n        getFrozenMode: function () {\n            return this.ej2Instances.getFrozenMode();\n        },\n        getFrozenRightCellFromIndex: function (rowIndex, columnIndex) {\n            return this.ej2Instances.getFrozenRightCellFromIndex(rowIndex, columnIndex);\n        },\n        getFrozenRightColumnHeaderByIndex: function (index) {\n            return this.ej2Instances.getFrozenRightColumnHeaderByIndex(index);\n        },\n        getFrozenRightDataRows: function () {\n            return this.ej2Instances.getFrozenRightDataRows();\n        },\n        getFrozenRightRowByIndex: function (index) {\n            return this.ej2Instances.getFrozenRightRowByIndex(index);\n        },\n        getFrozenRightRows: function () {\n            return this.ej2Instances.getFrozenRightRows();\n        },\n        getFrozenRowByIndex: function (index) {\n            return this.ej2Instances.getFrozenRowByIndex(index);\n        },\n        getHeaderContent: function () {\n            return this.ej2Instances.getHeaderContent();\n        },\n        getHeaderTable: function () {\n            return this.ej2Instances.getHeaderTable();\n        },\n        getHiddenColumns: function () {\n            return this.ej2Instances.getHiddenColumns();\n        },\n        getMediaColumns: function () {\n            return this.ej2Instances.getMediaColumns();\n        },\n        getMovableCellFromIndex: function (rowIndex, columnIndex) {\n            return this.ej2Instances.getMovableCellFromIndex(rowIndex, columnIndex);\n        },\n        getMovableColumnHeaderByIndex: function (index) {\n            return this.ej2Instances.getMovableColumnHeaderByIndex(index);\n        },\n        getMovableDataRows: function () {\n            return this.ej2Instances.getMovableDataRows();\n        },\n        getMovableRowByIndex: function (index) {\n            return this.ej2Instances.getMovableRowByIndex(index);\n        },\n        getMovableRows: function () {\n            return this.ej2Instances.getMovableRows();\n        },\n        getPager: function () {\n            return this.ej2Instances.getPager();\n        },\n        getPrimaryKeyFieldNames: function () {\n            return this.ej2Instances.getPrimaryKeyFieldNames();\n        },\n        getRowByIndex: function (index) {\n            return this.ej2Instances.getRowByIndex(index);\n        },\n        getRowIndexByPrimaryKey: function (value) {\n            return this.ej2Instances.getRowIndexByPrimaryKey(value);\n        },\n        getRowInfo: function (target) {\n            return this.ej2Instances.getRowInfo(target);\n        },\n        getRows: function () {\n            return this.ej2Instances.getRows();\n        },\n        getSelectedColumnsUid: function () {\n            return this.ej2Instances.getSelectedColumnsUid();\n        },\n        getSelectedRecords: function () {\n            return this.ej2Instances.getSelectedRecords();\n        },\n        getSelectedRowCellIndexes: function () {\n            return this.ej2Instances.getSelectedRowCellIndexes();\n        },\n        getSelectedRowIndexes: function () {\n            return this.ej2Instances.getSelectedRowIndexes();\n        },\n        getSelectedRows: function () {\n            return this.ej2Instances.getSelectedRows();\n        },\n        getSummaryValues: function (summaryCol, summaryData) {\n            return this.ej2Instances.getSummaryValues(summaryCol, summaryData);\n        },\n        getUidByColumnField: function (field) {\n            return this.ej2Instances.getUidByColumnField(field);\n        },\n        getVisibleColumns: function () {\n            return this.ej2Instances.getVisibleColumns();\n        },\n        goToPage: function (pageNo) {\n            return this.ej2Instances.goToPage(pageNo);\n        },\n        groupCollapseAll: function () {\n            return this.ej2Instances.groupCollapseAll();\n        },\n        groupColumn: function (columnName) {\n            return this.ej2Instances.groupColumn(columnName);\n        },\n        groupExpandAll: function () {\n            return this.ej2Instances.groupExpandAll();\n        },\n        hideColumns: function (keys, hideBy) {\n            return this.ej2Instances.hideColumns(keys, hideBy);\n        },\n        hideScroll: function () {\n            return this.ej2Instances.hideScroll();\n        },\n        hideSpinner: function () {\n            return this.ej2Instances.hideSpinner();\n        },\n        isFrozenGrid: function () {\n            return this.ej2Instances.isFrozenGrid();\n        },\n        openColumnChooser: function (x, y) {\n            return this.ej2Instances.openColumnChooser(x, y);\n        },\n        pdfExport: function (pdfExportProperties, isMultipleExport, pdfDoc, isBlob) {\n            return this.ej2Instances.pdfExport(pdfExportProperties, isMultipleExport, pdfDoc, isBlob);\n        },\n        print: function () {\n            return this.ej2Instances.print();\n        },\n        refresh: function () {\n            return this.ej2Instances.refresh();\n        },\n        refreshColumns: function () {\n            return this.ej2Instances.refreshColumns();\n        },\n        refreshHeader: function () {\n            return this.ej2Instances.refreshHeader();\n        },\n        removeMaskRow: function () {\n            return this.ej2Instances.removeMaskRow();\n        },\n        reorderColumnByIndex: function (fromIndex, toIndex) {\n            return this.ej2Instances.reorderColumnByIndex(fromIndex, toIndex);\n        },\n        reorderColumnByTargetIndex: function (fieldName, toIndex) {\n            return this.ej2Instances.reorderColumnByTargetIndex(fieldName, toIndex);\n        },\n        reorderColumns: function (fromFName, toFName) {\n            return this.ej2Instances.reorderColumns(fromFName, toFName);\n        },\n        reorderRows: function (fromIndexes, toIndex) {\n            return this.ej2Instances.reorderRows(fromIndexes, toIndex);\n        },\n        saveCell: function () {\n            return this.ej2Instances.saveCell();\n        },\n        search: function (searchString) {\n            return this.ej2Instances.search(searchString);\n        },\n        selectCell: function (cellIndex, isToggle) {\n            return this.ej2Instances.selectCell(cellIndex, isToggle);\n        },\n        selectCells: function (rowCellIndexes) {\n            return this.ej2Instances.selectCells(rowCellIndexes);\n        },\n        selectCellsByRange: function (startIndex, endIndex) {\n            return this.ej2Instances.selectCellsByRange(startIndex, endIndex);\n        },\n        selectRow: function (index, isToggle) {\n            return this.ej2Instances.selectRow(index, isToggle);\n        },\n        selectRows: function (rowIndexes) {\n            return this.ej2Instances.selectRows(rowIndexes);\n        },\n        selectRowsByRange: function (startIndex, endIndex) {\n            return this.ej2Instances.selectRowsByRange(startIndex, endIndex);\n        },\n        serverCsvExport: function (url) {\n            return this.ej2Instances.serverCsvExport(url);\n        },\n        serverExcelExport: function (url) {\n            return this.ej2Instances.serverExcelExport(url);\n        },\n        serverPdfExport: function (url) {\n            return this.ej2Instances.serverPdfExport(url);\n        },\n        setCellValue: function (key, field, value) {\n            return this.ej2Instances.setCellValue(key, field, value);\n        },\n        setGridContent: function (element) {\n            return this.ej2Instances.setGridContent(element);\n        },\n        setGridContentTable: function (element) {\n            return this.ej2Instances.setGridContentTable(element);\n        },\n        setGridHeaderContent: function (element) {\n            return this.ej2Instances.setGridHeaderContent(element);\n        },\n        setGridHeaderTable: function (element) {\n            return this.ej2Instances.setGridHeaderTable(element);\n        },\n        setGridPager: function (element) {\n            return this.ej2Instances.setGridPager(element);\n        },\n        setRowData: function (key, rowData) {\n            return this.ej2Instances.setRowData(key, rowData);\n        },\n        showAdaptiveFilterDialog: function () {\n            return this.ej2Instances.showAdaptiveFilterDialog();\n        },\n        showAdaptiveSortDialog: function () {\n            return this.ej2Instances.showAdaptiveSortDialog();\n        },\n        showColumns: function (keys, showBy) {\n            return this.ej2Instances.showColumns(keys, showBy);\n        },\n        showMaskRow: function (axisDirection, dialogElement) {\n            return this.ej2Instances.showMaskRow(axisDirection, dialogElement);\n        },\n        showSpinner: function () {\n            return this.ej2Instances.showSpinner();\n        },\n        sortColumn: function (columnName, direction, isMultiSort) {\n            return this.ej2Instances.sortColumn(columnName, direction, isMultiSort);\n        },\n        startEdit: function () {\n            return this.ej2Instances.startEdit();\n        },\n        ungroupColumn: function (columnName) {\n            return this.ej2Instances.ungroupColumn(columnName);\n        },\n        updateCell: function (rowIndex, field, value) {\n            return this.ej2Instances.updateCell(rowIndex, field, value);\n        },\n        updateExternalMessage: function (message) {\n            return this.ej2Instances.updateExternalMessage(message);\n        },\n        updateRow: function (index, data) {\n            return this.ej2Instances.updateRow(index, data);\n        },\n        updateRowValue: function (key, rowData) {\n            return this.ej2Instances.updateRowValue(key, rowData);\n        },\n    }\n});\nexport var GridPlugin = {\n    name: 'ejs-grid',\n    install: function (Vue) {\n        Vue.component(GridPlugin.name, GridComponent);\n        Vue.component(ColumnPlugin.name, ColumnDirective);\n        Vue.component(ColumnsPlugin.name, ColumnsDirective);\n        Vue.component(StackedColumnPlugin.name, StackedColumnDirective);\n        Vue.component(StackedColumnsPlugin.name, StackedColumnsDirective);\n        Vue.component(AggregatePlugin.name, AggregateDirective);\n        Vue.component(AggregatesPlugin.name, AggregatesDirective);\n        Vue.component(AggregateColumnPlugin.name, AggregateColumnDirective);\n        Vue.component(AggregateColumnsPlugin.name, AggregateColumnsDirective);\n    }\n};\n","//! moment.js locale configuration\n//! locale : Central Atlas Tamazight [tzm]\n//! author : Abdel Said : https://github.com/abdelsaid\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var tzm = moment.defineLocale('tzm', {\n        months: 'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ⵉⵏⵏⴰⵢⵔ_ⴱⵕⴰⵢⵕ_ⵎⴰⵕⵚ_ⵉⴱⵔⵉⵔ_ⵎⴰⵢⵢⵓ_ⵢⵓⵏⵢⵓ_ⵢⵓⵍⵢⵓⵣ_ⵖⵓⵛⵜ_ⵛⵓⵜⴰⵏⴱⵉⵔ_ⴽⵟⵓⴱⵕ_ⵏⵓⵡⴰⵏⴱⵉⵔ_ⴷⵓⵊⵏⴱⵉⵔ'.split(\n                '_'\n            ),\n        weekdays: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysShort: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        weekdaysMin: 'ⴰⵙⴰⵎⴰⵙ_ⴰⵢⵏⴰⵙ_ⴰⵙⵉⵏⴰⵙ_ⴰⴽⵔⴰⵙ_ⴰⴽⵡⴰⵙ_ⴰⵙⵉⵎⵡⴰⵙ_ⴰⵙⵉⴹⵢⴰⵙ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[ⴰⵙⴷⵅ ⴴ] LT',\n            nextDay: '[ⴰⵙⴽⴰ ⴴ] LT',\n            nextWeek: 'dddd [ⴴ] LT',\n            lastDay: '[ⴰⵚⴰⵏⵜ ⴴ] LT',\n            lastWeek: 'dddd [ⴴ] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ⴷⴰⴷⵅ ⵙ ⵢⴰⵏ %s',\n            past: 'ⵢⴰⵏ %s',\n            s: 'ⵉⵎⵉⴽ',\n            ss: '%d ⵉⵎⵉⴽ',\n            m: 'ⵎⵉⵏⵓⴺ',\n            mm: '%d ⵎⵉⵏⵓⴺ',\n            h: 'ⵙⴰⵄⴰ',\n            hh: '%d ⵜⴰⵙⵙⴰⵄⵉⵏ',\n            d: 'ⴰⵙⵙ',\n            dd: '%d oⵙⵙⴰⵏ',\n            M: 'ⴰⵢoⵓⵔ',\n            MM: '%d ⵉⵢⵢⵉⵔⵏ',\n            y: 'ⴰⵙⴳⴰⵙ',\n            yy: '%d ⵉⵙⴳⴰⵙⵏ',\n        },\n        week: {\n            dow: 6, // Saturday is the first day of the week.\n            doy: 12, // The week that contains Jan 12th is the first week of the year.\n        },\n    });\n\n    return tzm;\n\n})));\n","//! moment.js\n//! version : 2.29.4\n//! authors : Tim Wood, Iskren Chernev, Moment.js contributors\n//! license : MIT\n//! momentjs.com\n\n;(function (global, factory) {\n    typeof exports === 'object' && typeof module !== 'undefined' ? module.exports = factory() :\n    typeof define === 'function' && define.amd ? define(factory) :\n    global.moment = factory()\n}(this, (function () { 'use strict';\n\n    var hookCallback;\n\n    function hooks() {\n        return hookCallback.apply(null, arguments);\n    }\n\n    // This is done to register the method called with moment()\n    // without creating circular dependencies.\n    function setHookCallback(callback) {\n        hookCallback = callback;\n    }\n\n    function isArray(input) {\n        return (\n            input instanceof Array ||\n            Object.prototype.toString.call(input) === '[object Array]'\n        );\n    }\n\n    function isObject(input) {\n        // IE8 will treat undefined and null as object if it wasn't for\n        // input != null\n        return (\n            input != null &&\n            Object.prototype.toString.call(input) === '[object Object]'\n        );\n    }\n\n    function hasOwnProp(a, b) {\n        return Object.prototype.hasOwnProperty.call(a, b);\n    }\n\n    function isObjectEmpty(obj) {\n        if (Object.getOwnPropertyNames) {\n            return Object.getOwnPropertyNames(obj).length === 0;\n        } else {\n            var k;\n            for (k in obj) {\n                if (hasOwnProp(obj, k)) {\n                    return false;\n                }\n            }\n            return true;\n        }\n    }\n\n    function isUndefined(input) {\n        return input === void 0;\n    }\n\n    function isNumber(input) {\n        return (\n            typeof input === 'number' ||\n            Object.prototype.toString.call(input) === '[object Number]'\n        );\n    }\n\n    function isDate(input) {\n        return (\n            input instanceof Date ||\n            Object.prototype.toString.call(input) === '[object Date]'\n        );\n    }\n\n    function map(arr, fn) {\n        var res = [],\n            i,\n            arrLen = arr.length;\n        for (i = 0; i < arrLen; ++i) {\n            res.push(fn(arr[i], i));\n        }\n        return res;\n    }\n\n    function extend(a, b) {\n        for (var i in b) {\n            if (hasOwnProp(b, i)) {\n                a[i] = b[i];\n            }\n        }\n\n        if (hasOwnProp(b, 'toString')) {\n            a.toString = b.toString;\n        }\n\n        if (hasOwnProp(b, 'valueOf')) {\n            a.valueOf = b.valueOf;\n        }\n\n        return a;\n    }\n\n    function createUTC(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, true).utc();\n    }\n\n    function defaultParsingFlags() {\n        // We need to deep clone this object.\n        return {\n            empty: false,\n            unusedTokens: [],\n            unusedInput: [],\n            overflow: -2,\n            charsLeftOver: 0,\n            nullInput: false,\n            invalidEra: null,\n            invalidMonth: null,\n            invalidFormat: false,\n            userInvalidated: false,\n            iso: false,\n            parsedDateParts: [],\n            era: null,\n            meridiem: null,\n            rfc2822: false,\n            weekdayMismatch: false,\n        };\n    }\n\n    function getParsingFlags(m) {\n        if (m._pf == null) {\n            m._pf = defaultParsingFlags();\n        }\n        return m._pf;\n    }\n\n    var some;\n    if (Array.prototype.some) {\n        some = Array.prototype.some;\n    } else {\n        some = function (fun) {\n            var t = Object(this),\n                len = t.length >>> 0,\n                i;\n\n            for (i = 0; i < len; i++) {\n                if (i in t && fun.call(this, t[i], i, t)) {\n                    return true;\n                }\n            }\n\n            return false;\n        };\n    }\n\n    function isValid(m) {\n        if (m._isValid == null) {\n            var flags = getParsingFlags(m),\n                parsedParts = some.call(flags.parsedDateParts, function (i) {\n                    return i != null;\n                }),\n                isNowValid =\n                    !isNaN(m._d.getTime()) &&\n                    flags.overflow < 0 &&\n                    !flags.empty &&\n                    !flags.invalidEra &&\n                    !flags.invalidMonth &&\n                    !flags.invalidWeekday &&\n                    !flags.weekdayMismatch &&\n                    !flags.nullInput &&\n                    !flags.invalidFormat &&\n                    !flags.userInvalidated &&\n                    (!flags.meridiem || (flags.meridiem && parsedParts));\n\n            if (m._strict) {\n                isNowValid =\n                    isNowValid &&\n                    flags.charsLeftOver === 0 &&\n                    flags.unusedTokens.length === 0 &&\n                    flags.bigHour === undefined;\n            }\n\n            if (Object.isFrozen == null || !Object.isFrozen(m)) {\n                m._isValid = isNowValid;\n            } else {\n                return isNowValid;\n            }\n        }\n        return m._isValid;\n    }\n\n    function createInvalid(flags) {\n        var m = createUTC(NaN);\n        if (flags != null) {\n            extend(getParsingFlags(m), flags);\n        } else {\n            getParsingFlags(m).userInvalidated = true;\n        }\n\n        return m;\n    }\n\n    // Plugins that add properties should also add the key here (null value),\n    // so we can properly clone ourselves.\n    var momentProperties = (hooks.momentProperties = []),\n        updateInProgress = false;\n\n    function copyConfig(to, from) {\n        var i,\n            prop,\n            val,\n            momentPropertiesLen = momentProperties.length;\n\n        if (!isUndefined(from._isAMomentObject)) {\n            to._isAMomentObject = from._isAMomentObject;\n        }\n        if (!isUndefined(from._i)) {\n            to._i = from._i;\n        }\n        if (!isUndefined(from._f)) {\n            to._f = from._f;\n        }\n        if (!isUndefined(from._l)) {\n            to._l = from._l;\n        }\n        if (!isUndefined(from._strict)) {\n            to._strict = from._strict;\n        }\n        if (!isUndefined(from._tzm)) {\n            to._tzm = from._tzm;\n        }\n        if (!isUndefined(from._isUTC)) {\n            to._isUTC = from._isUTC;\n        }\n        if (!isUndefined(from._offset)) {\n            to._offset = from._offset;\n        }\n        if (!isUndefined(from._pf)) {\n            to._pf = getParsingFlags(from);\n        }\n        if (!isUndefined(from._locale)) {\n            to._locale = from._locale;\n        }\n\n        if (momentPropertiesLen > 0) {\n            for (i = 0; i < momentPropertiesLen; i++) {\n                prop = momentProperties[i];\n                val = from[prop];\n                if (!isUndefined(val)) {\n                    to[prop] = val;\n                }\n            }\n        }\n\n        return to;\n    }\n\n    // Moment prototype object\n    function Moment(config) {\n        copyConfig(this, config);\n        this._d = new Date(config._d != null ? config._d.getTime() : NaN);\n        if (!this.isValid()) {\n            this._d = new Date(NaN);\n        }\n        // Prevent infinite loop in case updateOffset creates new moment\n        // objects.\n        if (updateInProgress === false) {\n            updateInProgress = true;\n            hooks.updateOffset(this);\n            updateInProgress = false;\n        }\n    }\n\n    function isMoment(obj) {\n        return (\n            obj instanceof Moment || (obj != null && obj._isAMomentObject != null)\n        );\n    }\n\n    function warn(msg) {\n        if (\n            hooks.suppressDeprecationWarnings === false &&\n            typeof console !== 'undefined' &&\n            console.warn\n        ) {\n            console.warn('Deprecation warning: ' + msg);\n        }\n    }\n\n    function deprecate(msg, fn) {\n        var firstTime = true;\n\n        return extend(function () {\n            if (hooks.deprecationHandler != null) {\n                hooks.deprecationHandler(null, msg);\n            }\n            if (firstTime) {\n                var args = [],\n                    arg,\n                    i,\n                    key,\n                    argLen = arguments.length;\n                for (i = 0; i < argLen; i++) {\n                    arg = '';\n                    if (typeof arguments[i] === 'object') {\n                        arg += '\\n[' + i + '] ';\n                        for (key in arguments[0]) {\n                            if (hasOwnProp(arguments[0], key)) {\n                                arg += key + ': ' + arguments[0][key] + ', ';\n                            }\n                        }\n                        arg = arg.slice(0, -2); // Remove trailing comma and space\n                    } else {\n                        arg = arguments[i];\n                    }\n                    args.push(arg);\n                }\n                warn(\n                    msg +\n                        '\\nArguments: ' +\n                        Array.prototype.slice.call(args).join('') +\n                        '\\n' +\n                        new Error().stack\n                );\n                firstTime = false;\n            }\n            return fn.apply(this, arguments);\n        }, fn);\n    }\n\n    var deprecations = {};\n\n    function deprecateSimple(name, msg) {\n        if (hooks.deprecationHandler != null) {\n            hooks.deprecationHandler(name, msg);\n        }\n        if (!deprecations[name]) {\n            warn(msg);\n            deprecations[name] = true;\n        }\n    }\n\n    hooks.suppressDeprecationWarnings = false;\n    hooks.deprecationHandler = null;\n\n    function isFunction(input) {\n        return (\n            (typeof Function !== 'undefined' && input instanceof Function) ||\n            Object.prototype.toString.call(input) === '[object Function]'\n        );\n    }\n\n    function set(config) {\n        var prop, i;\n        for (i in config) {\n            if (hasOwnProp(config, i)) {\n                prop = config[i];\n                if (isFunction(prop)) {\n                    this[i] = prop;\n                } else {\n                    this['_' + i] = prop;\n                }\n            }\n        }\n        this._config = config;\n        // Lenient ordinal parsing accepts just a number in addition to\n        // number + (possibly) stuff coming from _dayOfMonthOrdinalParse.\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        this._dayOfMonthOrdinalParseLenient = new RegExp(\n            (this._dayOfMonthOrdinalParse.source || this._ordinalParse.source) +\n                '|' +\n                /\\d{1,2}/.source\n        );\n    }\n\n    function mergeConfigs(parentConfig, childConfig) {\n        var res = extend({}, parentConfig),\n            prop;\n        for (prop in childConfig) {\n            if (hasOwnProp(childConfig, prop)) {\n                if (isObject(parentConfig[prop]) && isObject(childConfig[prop])) {\n                    res[prop] = {};\n                    extend(res[prop], parentConfig[prop]);\n                    extend(res[prop], childConfig[prop]);\n                } else if (childConfig[prop] != null) {\n                    res[prop] = childConfig[prop];\n                } else {\n                    delete res[prop];\n                }\n            }\n        }\n        for (prop in parentConfig) {\n            if (\n                hasOwnProp(parentConfig, prop) &&\n                !hasOwnProp(childConfig, prop) &&\n                isObject(parentConfig[prop])\n            ) {\n                // make sure changes to properties don't modify parent config\n                res[prop] = extend({}, res[prop]);\n            }\n        }\n        return res;\n    }\n\n    function Locale(config) {\n        if (config != null) {\n            this.set(config);\n        }\n    }\n\n    var keys;\n\n    if (Object.keys) {\n        keys = Object.keys;\n    } else {\n        keys = function (obj) {\n            var i,\n                res = [];\n            for (i in obj) {\n                if (hasOwnProp(obj, i)) {\n                    res.push(i);\n                }\n            }\n            return res;\n        };\n    }\n\n    var defaultCalendar = {\n        sameDay: '[Today at] LT',\n        nextDay: '[Tomorrow at] LT',\n        nextWeek: 'dddd [at] LT',\n        lastDay: '[Yesterday at] LT',\n        lastWeek: '[Last] dddd [at] LT',\n        sameElse: 'L',\n    };\n\n    function calendar(key, mom, now) {\n        var output = this._calendar[key] || this._calendar['sameElse'];\n        return isFunction(output) ? output.call(mom, now) : output;\n    }\n\n    function zeroFill(number, targetLength, forceSign) {\n        var absNumber = '' + Math.abs(number),\n            zerosToFill = targetLength - absNumber.length,\n            sign = number >= 0;\n        return (\n            (sign ? (forceSign ? '+' : '') : '-') +\n            Math.pow(10, Math.max(0, zerosToFill)).toString().substr(1) +\n            absNumber\n        );\n    }\n\n    var formattingTokens =\n            /(\\[[^\\[]*\\])|(\\\\)?([Hh]mm(ss)?|Mo|MM?M?M?|Do|DDDo|DD?D?D?|ddd?d?|do?|w[o|w]?|W[o|W]?|Qo?|N{1,5}|YYYYYY|YYYYY|YYYY|YY|y{2,4}|yo?|gg(ggg?)?|GG(GGG?)?|e|E|a|A|hh?|HH?|kk?|mm?|ss?|S{1,9}|x|X|zz?|ZZ?|.)/g,\n        localFormattingTokens = /(\\[[^\\[]*\\])|(\\\\)?(LTS|LT|LL?L?L?|l{1,4})/g,\n        formatFunctions = {},\n        formatTokenFunctions = {};\n\n    // token:    'M'\n    // padded:   ['MM', 2]\n    // ordinal:  'Mo'\n    // callback: function () { this.month() + 1 }\n    function addFormatToken(token, padded, ordinal, callback) {\n        var func = callback;\n        if (typeof callback === 'string') {\n            func = function () {\n                return this[callback]();\n            };\n        }\n        if (token) {\n            formatTokenFunctions[token] = func;\n        }\n        if (padded) {\n            formatTokenFunctions[padded[0]] = function () {\n                return zeroFill(func.apply(this, arguments), padded[1], padded[2]);\n            };\n        }\n        if (ordinal) {\n            formatTokenFunctions[ordinal] = function () {\n                return this.localeData().ordinal(\n                    func.apply(this, arguments),\n                    token\n                );\n            };\n        }\n    }\n\n    function removeFormattingTokens(input) {\n        if (input.match(/\\[[\\s\\S]/)) {\n            return input.replace(/^\\[|\\]$/g, '');\n        }\n        return input.replace(/\\\\/g, '');\n    }\n\n    function makeFormatFunction(format) {\n        var array = format.match(formattingTokens),\n            i,\n            length;\n\n        for (i = 0, length = array.length; i < length; i++) {\n            if (formatTokenFunctions[array[i]]) {\n                array[i] = formatTokenFunctions[array[i]];\n            } else {\n                array[i] = removeFormattingTokens(array[i]);\n            }\n        }\n\n        return function (mom) {\n            var output = '',\n                i;\n            for (i = 0; i < length; i++) {\n                output += isFunction(array[i])\n                    ? array[i].call(mom, format)\n                    : array[i];\n            }\n            return output;\n        };\n    }\n\n    // format date using native date object\n    function formatMoment(m, format) {\n        if (!m.isValid()) {\n            return m.localeData().invalidDate();\n        }\n\n        format = expandFormat(format, m.localeData());\n        formatFunctions[format] =\n            formatFunctions[format] || makeFormatFunction(format);\n\n        return formatFunctions[format](m);\n    }\n\n    function expandFormat(format, locale) {\n        var i = 5;\n\n        function replaceLongDateFormatTokens(input) {\n            return locale.longDateFormat(input) || input;\n        }\n\n        localFormattingTokens.lastIndex = 0;\n        while (i >= 0 && localFormattingTokens.test(format)) {\n            format = format.replace(\n                localFormattingTokens,\n                replaceLongDateFormatTokens\n            );\n            localFormattingTokens.lastIndex = 0;\n            i -= 1;\n        }\n\n        return format;\n    }\n\n    var defaultLongDateFormat = {\n        LTS: 'h:mm:ss A',\n        LT: 'h:mm A',\n        L: 'MM/DD/YYYY',\n        LL: 'MMMM D, YYYY',\n        LLL: 'MMMM D, YYYY h:mm A',\n        LLLL: 'dddd, MMMM D, YYYY h:mm A',\n    };\n\n    function longDateFormat(key) {\n        var format = this._longDateFormat[key],\n            formatUpper = this._longDateFormat[key.toUpperCase()];\n\n        if (format || !formatUpper) {\n            return format;\n        }\n\n        this._longDateFormat[key] = formatUpper\n            .match(formattingTokens)\n            .map(function (tok) {\n                if (\n                    tok === 'MMMM' ||\n                    tok === 'MM' ||\n                    tok === 'DD' ||\n                    tok === 'dddd'\n                ) {\n                    return tok.slice(1);\n                }\n                return tok;\n            })\n            .join('');\n\n        return this._longDateFormat[key];\n    }\n\n    var defaultInvalidDate = 'Invalid date';\n\n    function invalidDate() {\n        return this._invalidDate;\n    }\n\n    var defaultOrdinal = '%d',\n        defaultDayOfMonthOrdinalParse = /\\d{1,2}/;\n\n    function ordinal(number) {\n        return this._ordinal.replace('%d', number);\n    }\n\n    var defaultRelativeTime = {\n        future: 'in %s',\n        past: '%s ago',\n        s: 'a few seconds',\n        ss: '%d seconds',\n        m: 'a minute',\n        mm: '%d minutes',\n        h: 'an hour',\n        hh: '%d hours',\n        d: 'a day',\n        dd: '%d days',\n        w: 'a week',\n        ww: '%d weeks',\n        M: 'a month',\n        MM: '%d months',\n        y: 'a year',\n        yy: '%d years',\n    };\n\n    function relativeTime(number, withoutSuffix, string, isFuture) {\n        var output = this._relativeTime[string];\n        return isFunction(output)\n            ? output(number, withoutSuffix, string, isFuture)\n            : output.replace(/%d/i, number);\n    }\n\n    function pastFuture(diff, output) {\n        var format = this._relativeTime[diff > 0 ? 'future' : 'past'];\n        return isFunction(format) ? format(output) : format.replace(/%s/i, output);\n    }\n\n    var aliases = {};\n\n    function addUnitAlias(unit, shorthand) {\n        var lowerCase = unit.toLowerCase();\n        aliases[lowerCase] = aliases[lowerCase + 's'] = aliases[shorthand] = unit;\n    }\n\n    function normalizeUnits(units) {\n        return typeof units === 'string'\n            ? aliases[units] || aliases[units.toLowerCase()]\n            : undefined;\n    }\n\n    function normalizeObjectUnits(inputObject) {\n        var normalizedInput = {},\n            normalizedProp,\n            prop;\n\n        for (prop in inputObject) {\n            if (hasOwnProp(inputObject, prop)) {\n                normalizedProp = normalizeUnits(prop);\n                if (normalizedProp) {\n                    normalizedInput[normalizedProp] = inputObject[prop];\n                }\n            }\n        }\n\n        return normalizedInput;\n    }\n\n    var priorities = {};\n\n    function addUnitPriority(unit, priority) {\n        priorities[unit] = priority;\n    }\n\n    function getPrioritizedUnits(unitsObj) {\n        var units = [],\n            u;\n        for (u in unitsObj) {\n            if (hasOwnProp(unitsObj, u)) {\n                units.push({ unit: u, priority: priorities[u] });\n            }\n        }\n        units.sort(function (a, b) {\n            return a.priority - b.priority;\n        });\n        return units;\n    }\n\n    function isLeapYear(year) {\n        return (year % 4 === 0 && year % 100 !== 0) || year % 400 === 0;\n    }\n\n    function absFloor(number) {\n        if (number < 0) {\n            // -0 -> 0\n            return Math.ceil(number) || 0;\n        } else {\n            return Math.floor(number);\n        }\n    }\n\n    function toInt(argumentForCoercion) {\n        var coercedNumber = +argumentForCoercion,\n            value = 0;\n\n        if (coercedNumber !== 0 && isFinite(coercedNumber)) {\n            value = absFloor(coercedNumber);\n        }\n\n        return value;\n    }\n\n    function makeGetSet(unit, keepTime) {\n        return function (value) {\n            if (value != null) {\n                set$1(this, unit, value);\n                hooks.updateOffset(this, keepTime);\n                return this;\n            } else {\n                return get(this, unit);\n            }\n        };\n    }\n\n    function get(mom, unit) {\n        return mom.isValid()\n            ? mom._d['get' + (mom._isUTC ? 'UTC' : '') + unit]()\n            : NaN;\n    }\n\n    function set$1(mom, unit, value) {\n        if (mom.isValid() && !isNaN(value)) {\n            if (\n                unit === 'FullYear' &&\n                isLeapYear(mom.year()) &&\n                mom.month() === 1 &&\n                mom.date() === 29\n            ) {\n                value = toInt(value);\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](\n                    value,\n                    mom.month(),\n                    daysInMonth(value, mom.month())\n                );\n            } else {\n                mom._d['set' + (mom._isUTC ? 'UTC' : '') + unit](value);\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function stringGet(units) {\n        units = normalizeUnits(units);\n        if (isFunction(this[units])) {\n            return this[units]();\n        }\n        return this;\n    }\n\n    function stringSet(units, value) {\n        if (typeof units === 'object') {\n            units = normalizeObjectUnits(units);\n            var prioritized = getPrioritizedUnits(units),\n                i,\n                prioritizedLen = prioritized.length;\n            for (i = 0; i < prioritizedLen; i++) {\n                this[prioritized[i].unit](units[prioritized[i].unit]);\n            }\n        } else {\n            units = normalizeUnits(units);\n            if (isFunction(this[units])) {\n                return this[units](value);\n            }\n        }\n        return this;\n    }\n\n    var match1 = /\\d/, //       0 - 9\n        match2 = /\\d\\d/, //      00 - 99\n        match3 = /\\d{3}/, //     000 - 999\n        match4 = /\\d{4}/, //    0000 - 9999\n        match6 = /[+-]?\\d{6}/, // -999999 - 999999\n        match1to2 = /\\d\\d?/, //       0 - 99\n        match3to4 = /\\d\\d\\d\\d?/, //     999 - 9999\n        match5to6 = /\\d\\d\\d\\d\\d\\d?/, //   99999 - 999999\n        match1to3 = /\\d{1,3}/, //       0 - 999\n        match1to4 = /\\d{1,4}/, //       0 - 9999\n        match1to6 = /[+-]?\\d{1,6}/, // -999999 - 999999\n        matchUnsigned = /\\d+/, //       0 - inf\n        matchSigned = /[+-]?\\d+/, //    -inf - inf\n        matchOffset = /Z|[+-]\\d\\d:?\\d\\d/gi, // +00:00 -00:00 +0000 -0000 or Z\n        matchShortOffset = /Z|[+-]\\d\\d(?::?\\d\\d)?/gi, // +00 -00 +00:00 -00:00 +0000 -0000 or Z\n        matchTimestamp = /[+-]?\\d+(\\.\\d{1,3})?/, // 123456789 123456789.123\n        // any word (or two) characters or numbers including two/three word month in arabic.\n        // includes scottish gaelic two word and hyphenated months\n        matchWord =\n            /[0-9]{0,256}['a-z\\u00A0-\\u05FF\\u0700-\\uD7FF\\uF900-\\uFDCF\\uFDF0-\\uFF07\\uFF10-\\uFFEF]{1,256}|[\\u0600-\\u06FF\\/]{1,256}(\\s*?[\\u0600-\\u06FF]{1,256}){1,2}/i,\n        regexes;\n\n    regexes = {};\n\n    function addRegexToken(token, regex, strictRegex) {\n        regexes[token] = isFunction(regex)\n            ? regex\n            : function (isStrict, localeData) {\n                  return isStrict && strictRegex ? strictRegex : regex;\n              };\n    }\n\n    function getParseRegexForToken(token, config) {\n        if (!hasOwnProp(regexes, token)) {\n            return new RegExp(unescapeFormat(token));\n        }\n\n        return regexes[token](config._strict, config._locale);\n    }\n\n    // Code from http://stackoverflow.com/questions/3561493/is-there-a-regexp-escape-function-in-javascript\n    function unescapeFormat(s) {\n        return regexEscape(\n            s\n                .replace('\\\\', '')\n                .replace(\n                    /\\\\(\\[)|\\\\(\\])|\\[([^\\]\\[]*)\\]|\\\\(.)/g,\n                    function (matched, p1, p2, p3, p4) {\n                        return p1 || p2 || p3 || p4;\n                    }\n                )\n        );\n    }\n\n    function regexEscape(s) {\n        return s.replace(/[-\\/\\\\^$*+?.()|[\\]{}]/g, '\\\\$&');\n    }\n\n    var tokens = {};\n\n    function addParseToken(token, callback) {\n        var i,\n            func = callback,\n            tokenLen;\n        if (typeof token === 'string') {\n            token = [token];\n        }\n        if (isNumber(callback)) {\n            func = function (input, array) {\n                array[callback] = toInt(input);\n            };\n        }\n        tokenLen = token.length;\n        for (i = 0; i < tokenLen; i++) {\n            tokens[token[i]] = func;\n        }\n    }\n\n    function addWeekParseToken(token, callback) {\n        addParseToken(token, function (input, array, config, token) {\n            config._w = config._w || {};\n            callback(input, config._w, config, token);\n        });\n    }\n\n    function addTimeToArrayFromToken(token, input, config) {\n        if (input != null && hasOwnProp(tokens, token)) {\n            tokens[token](input, config._a, config, token);\n        }\n    }\n\n    var YEAR = 0,\n        MONTH = 1,\n        DATE = 2,\n        HOUR = 3,\n        MINUTE = 4,\n        SECOND = 5,\n        MILLISECOND = 6,\n        WEEK = 7,\n        WEEKDAY = 8;\n\n    function mod(n, x) {\n        return ((n % x) + x) % x;\n    }\n\n    var indexOf;\n\n    if (Array.prototype.indexOf) {\n        indexOf = Array.prototype.indexOf;\n    } else {\n        indexOf = function (o) {\n            // I know\n            var i;\n            for (i = 0; i < this.length; ++i) {\n                if (this[i] === o) {\n                    return i;\n                }\n            }\n            return -1;\n        };\n    }\n\n    function daysInMonth(year, month) {\n        if (isNaN(year) || isNaN(month)) {\n            return NaN;\n        }\n        var modMonth = mod(month, 12);\n        year += (month - modMonth) / 12;\n        return modMonth === 1\n            ? isLeapYear(year)\n                ? 29\n                : 28\n            : 31 - ((modMonth % 7) % 2);\n    }\n\n    // FORMATTING\n\n    addFormatToken('M', ['MM', 2], 'Mo', function () {\n        return this.month() + 1;\n    });\n\n    addFormatToken('MMM', 0, 0, function (format) {\n        return this.localeData().monthsShort(this, format);\n    });\n\n    addFormatToken('MMMM', 0, 0, function (format) {\n        return this.localeData().months(this, format);\n    });\n\n    // ALIASES\n\n    addUnitAlias('month', 'M');\n\n    // PRIORITY\n\n    addUnitPriority('month', 8);\n\n    // PARSING\n\n    addRegexToken('M', match1to2);\n    addRegexToken('MM', match1to2, match2);\n    addRegexToken('MMM', function (isStrict, locale) {\n        return locale.monthsShortRegex(isStrict);\n    });\n    addRegexToken('MMMM', function (isStrict, locale) {\n        return locale.monthsRegex(isStrict);\n    });\n\n    addParseToken(['M', 'MM'], function (input, array) {\n        array[MONTH] = toInt(input) - 1;\n    });\n\n    addParseToken(['MMM', 'MMMM'], function (input, array, config, token) {\n        var month = config._locale.monthsParse(input, token, config._strict);\n        // if we didn't find a month name, mark the date as invalid.\n        if (month != null) {\n            array[MONTH] = month;\n        } else {\n            getParsingFlags(config).invalidMonth = input;\n        }\n    });\n\n    // LOCALES\n\n    var defaultLocaleMonths =\n            'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n                '_'\n            ),\n        defaultLocaleMonthsShort =\n            'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        MONTHS_IN_FORMAT = /D[oD]?(\\[[^\\[\\]]*\\]|\\s)+MMMM?/,\n        defaultMonthsShortRegex = matchWord,\n        defaultMonthsRegex = matchWord;\n\n    function localeMonths(m, format) {\n        if (!m) {\n            return isArray(this._months)\n                ? this._months\n                : this._months['standalone'];\n        }\n        return isArray(this._months)\n            ? this._months[m.month()]\n            : this._months[\n                  (this._months.isFormat || MONTHS_IN_FORMAT).test(format)\n                      ? 'format'\n                      : 'standalone'\n              ][m.month()];\n    }\n\n    function localeMonthsShort(m, format) {\n        if (!m) {\n            return isArray(this._monthsShort)\n                ? this._monthsShort\n                : this._monthsShort['standalone'];\n        }\n        return isArray(this._monthsShort)\n            ? this._monthsShort[m.month()]\n            : this._monthsShort[\n                  MONTHS_IN_FORMAT.test(format) ? 'format' : 'standalone'\n              ][m.month()];\n    }\n\n    function handleStrictParse(monthName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = monthName.toLocaleLowerCase();\n        if (!this._monthsParse) {\n            // this is not used\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n            for (i = 0; i < 12; ++i) {\n                mom = createUTC([2000, i]);\n                this._shortMonthsParse[i] = this.monthsShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._longMonthsParse[i] = this.months(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'MMM') {\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._longMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._longMonthsParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortMonthsParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeMonthsParse(monthName, format, strict) {\n        var i, mom, regex;\n\n        if (this._monthsParseExact) {\n            return handleStrictParse.call(this, monthName, format, strict);\n        }\n\n        if (!this._monthsParse) {\n            this._monthsParse = [];\n            this._longMonthsParse = [];\n            this._shortMonthsParse = [];\n        }\n\n        // TODO: add sorting\n        // Sorting makes sure if one month (or abbr) is a prefix of another\n        // see sorting in computeMonthsParse\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            if (strict && !this._longMonthsParse[i]) {\n                this._longMonthsParse[i] = new RegExp(\n                    '^' + this.months(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n                this._shortMonthsParse[i] = new RegExp(\n                    '^' + this.monthsShort(mom, '').replace('.', '') + '$',\n                    'i'\n                );\n            }\n            if (!strict && !this._monthsParse[i]) {\n                regex =\n                    '^' + this.months(mom, '') + '|^' + this.monthsShort(mom, '');\n                this._monthsParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'MMMM' &&\n                this._longMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'MMM' &&\n                this._shortMonthsParse[i].test(monthName)\n            ) {\n                return i;\n            } else if (!strict && this._monthsParse[i].test(monthName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function setMonth(mom, value) {\n        var dayOfMonth;\n\n        if (!mom.isValid()) {\n            // No op\n            return mom;\n        }\n\n        if (typeof value === 'string') {\n            if (/^\\d+$/.test(value)) {\n                value = toInt(value);\n            } else {\n                value = mom.localeData().monthsParse(value);\n                // TODO: Another silent failure?\n                if (!isNumber(value)) {\n                    return mom;\n                }\n            }\n        }\n\n        dayOfMonth = Math.min(mom.date(), daysInMonth(mom.year(), value));\n        mom._d['set' + (mom._isUTC ? 'UTC' : '') + 'Month'](value, dayOfMonth);\n        return mom;\n    }\n\n    function getSetMonth(value) {\n        if (value != null) {\n            setMonth(this, value);\n            hooks.updateOffset(this, true);\n            return this;\n        } else {\n            return get(this, 'Month');\n        }\n    }\n\n    function getDaysInMonth() {\n        return daysInMonth(this.year(), this.month());\n    }\n\n    function monthsShortRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsShortStrictRegex;\n            } else {\n                return this._monthsShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsShortRegex')) {\n                this._monthsShortRegex = defaultMonthsShortRegex;\n            }\n            return this._monthsShortStrictRegex && isStrict\n                ? this._monthsShortStrictRegex\n                : this._monthsShortRegex;\n        }\n    }\n\n    function monthsRegex(isStrict) {\n        if (this._monthsParseExact) {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                computeMonthsParse.call(this);\n            }\n            if (isStrict) {\n                return this._monthsStrictRegex;\n            } else {\n                return this._monthsRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_monthsRegex')) {\n                this._monthsRegex = defaultMonthsRegex;\n            }\n            return this._monthsStrictRegex && isStrict\n                ? this._monthsStrictRegex\n                : this._monthsRegex;\n        }\n    }\n\n    function computeMonthsParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom;\n        for (i = 0; i < 12; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, i]);\n            shortPieces.push(this.monthsShort(mom, ''));\n            longPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.months(mom, ''));\n            mixedPieces.push(this.monthsShort(mom, ''));\n        }\n        // Sorting makes sure if one month (or abbr) is a prefix of another it\n        // will match the longer piece.\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n        for (i = 0; i < 12; i++) {\n            shortPieces[i] = regexEscape(shortPieces[i]);\n            longPieces[i] = regexEscape(longPieces[i]);\n        }\n        for (i = 0; i < 24; i++) {\n            mixedPieces[i] = regexEscape(mixedPieces[i]);\n        }\n\n        this._monthsRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._monthsShortRegex = this._monthsRegex;\n        this._monthsStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._monthsShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken('Y', 0, 0, function () {\n        var y = this.year();\n        return y <= 9999 ? zeroFill(y, 4) : '+' + y;\n    });\n\n    addFormatToken(0, ['YY', 2], 0, function () {\n        return this.year() % 100;\n    });\n\n    addFormatToken(0, ['YYYY', 4], 0, 'year');\n    addFormatToken(0, ['YYYYY', 5], 0, 'year');\n    addFormatToken(0, ['YYYYYY', 6, true], 0, 'year');\n\n    // ALIASES\n\n    addUnitAlias('year', 'y');\n\n    // PRIORITIES\n\n    addUnitPriority('year', 1);\n\n    // PARSING\n\n    addRegexToken('Y', matchSigned);\n    addRegexToken('YY', match1to2, match2);\n    addRegexToken('YYYY', match1to4, match4);\n    addRegexToken('YYYYY', match1to6, match6);\n    addRegexToken('YYYYYY', match1to6, match6);\n\n    addParseToken(['YYYYY', 'YYYYYY'], YEAR);\n    addParseToken('YYYY', function (input, array) {\n        array[YEAR] =\n            input.length === 2 ? hooks.parseTwoDigitYear(input) : toInt(input);\n    });\n    addParseToken('YY', function (input, array) {\n        array[YEAR] = hooks.parseTwoDigitYear(input);\n    });\n    addParseToken('Y', function (input, array) {\n        array[YEAR] = parseInt(input, 10);\n    });\n\n    // HELPERS\n\n    function daysInYear(year) {\n        return isLeapYear(year) ? 366 : 365;\n    }\n\n    // HOOKS\n\n    hooks.parseTwoDigitYear = function (input) {\n        return toInt(input) + (toInt(input) > 68 ? 1900 : 2000);\n    };\n\n    // MOMENTS\n\n    var getSetYear = makeGetSet('FullYear', true);\n\n    function getIsLeapYear() {\n        return isLeapYear(this.year());\n    }\n\n    function createDate(y, m, d, h, M, s, ms) {\n        // can't just apply() to create a date:\n        // https://stackoverflow.com/q/181348\n        var date;\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            date = new Date(y + 400, m, d, h, M, s, ms);\n            if (isFinite(date.getFullYear())) {\n                date.setFullYear(y);\n            }\n        } else {\n            date = new Date(y, m, d, h, M, s, ms);\n        }\n\n        return date;\n    }\n\n    function createUTCDate(y) {\n        var date, args;\n        // the Date.UTC function remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            args = Array.prototype.slice.call(arguments);\n            // preserve leap years using a full 400 year cycle, then reset\n            args[0] = y + 400;\n            date = new Date(Date.UTC.apply(null, args));\n            if (isFinite(date.getUTCFullYear())) {\n                date.setUTCFullYear(y);\n            }\n        } else {\n            date = new Date(Date.UTC.apply(null, arguments));\n        }\n\n        return date;\n    }\n\n    // start-of-first-week - start-of-year\n    function firstWeekOffset(year, dow, doy) {\n        var // first-week day -- which january is always in the first week (4 for iso, 1 for other)\n            fwd = 7 + dow - doy,\n            // first-week day local weekday -- which local weekday is fwd\n            fwdlw = (7 + createUTCDate(year, 0, fwd).getUTCDay() - dow) % 7;\n\n        return -fwdlw + fwd - 1;\n    }\n\n    // https://en.wikipedia.org/wiki/ISO_week_date#Calculating_a_date_given_the_year.2C_week_number_and_weekday\n    function dayOfYearFromWeeks(year, week, weekday, dow, doy) {\n        var localWeekday = (7 + weekday - dow) % 7,\n            weekOffset = firstWeekOffset(year, dow, doy),\n            dayOfYear = 1 + 7 * (week - 1) + localWeekday + weekOffset,\n            resYear,\n            resDayOfYear;\n\n        if (dayOfYear <= 0) {\n            resYear = year - 1;\n            resDayOfYear = daysInYear(resYear) + dayOfYear;\n        } else if (dayOfYear > daysInYear(year)) {\n            resYear = year + 1;\n            resDayOfYear = dayOfYear - daysInYear(year);\n        } else {\n            resYear = year;\n            resDayOfYear = dayOfYear;\n        }\n\n        return {\n            year: resYear,\n            dayOfYear: resDayOfYear,\n        };\n    }\n\n    function weekOfYear(mom, dow, doy) {\n        var weekOffset = firstWeekOffset(mom.year(), dow, doy),\n            week = Math.floor((mom.dayOfYear() - weekOffset - 1) / 7) + 1,\n            resWeek,\n            resYear;\n\n        if (week < 1) {\n            resYear = mom.year() - 1;\n            resWeek = week + weeksInYear(resYear, dow, doy);\n        } else if (week > weeksInYear(mom.year(), dow, doy)) {\n            resWeek = week - weeksInYear(mom.year(), dow, doy);\n            resYear = mom.year() + 1;\n        } else {\n            resYear = mom.year();\n            resWeek = week;\n        }\n\n        return {\n            week: resWeek,\n            year: resYear,\n        };\n    }\n\n    function weeksInYear(year, dow, doy) {\n        var weekOffset = firstWeekOffset(year, dow, doy),\n            weekOffsetNext = firstWeekOffset(year + 1, dow, doy);\n        return (daysInYear(year) - weekOffset + weekOffsetNext) / 7;\n    }\n\n    // FORMATTING\n\n    addFormatToken('w', ['ww', 2], 'wo', 'week');\n    addFormatToken('W', ['WW', 2], 'Wo', 'isoWeek');\n\n    // ALIASES\n\n    addUnitAlias('week', 'w');\n    addUnitAlias('isoWeek', 'W');\n\n    // PRIORITIES\n\n    addUnitPriority('week', 5);\n    addUnitPriority('isoWeek', 5);\n\n    // PARSING\n\n    addRegexToken('w', match1to2);\n    addRegexToken('ww', match1to2, match2);\n    addRegexToken('W', match1to2);\n    addRegexToken('WW', match1to2, match2);\n\n    addWeekParseToken(\n        ['w', 'ww', 'W', 'WW'],\n        function (input, week, config, token) {\n            week[token.substr(0, 1)] = toInt(input);\n        }\n    );\n\n    // HELPERS\n\n    // LOCALES\n\n    function localeWeek(mom) {\n        return weekOfYear(mom, this._week.dow, this._week.doy).week;\n    }\n\n    var defaultLocaleWeek = {\n        dow: 0, // Sunday is the first day of the week.\n        doy: 6, // The week that contains Jan 6th is the first week of the year.\n    };\n\n    function localeFirstDayOfWeek() {\n        return this._week.dow;\n    }\n\n    function localeFirstDayOfYear() {\n        return this._week.doy;\n    }\n\n    // MOMENTS\n\n    function getSetWeek(input) {\n        var week = this.localeData().week(this);\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    function getSetISOWeek(input) {\n        var week = weekOfYear(this, 1, 4).week;\n        return input == null ? week : this.add((input - week) * 7, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('d', 0, 'do', 'day');\n\n    addFormatToken('dd', 0, 0, function (format) {\n        return this.localeData().weekdaysMin(this, format);\n    });\n\n    addFormatToken('ddd', 0, 0, function (format) {\n        return this.localeData().weekdaysShort(this, format);\n    });\n\n    addFormatToken('dddd', 0, 0, function (format) {\n        return this.localeData().weekdays(this, format);\n    });\n\n    addFormatToken('e', 0, 0, 'weekday');\n    addFormatToken('E', 0, 0, 'isoWeekday');\n\n    // ALIASES\n\n    addUnitAlias('day', 'd');\n    addUnitAlias('weekday', 'e');\n    addUnitAlias('isoWeekday', 'E');\n\n    // PRIORITY\n    addUnitPriority('day', 11);\n    addUnitPriority('weekday', 11);\n    addUnitPriority('isoWeekday', 11);\n\n    // PARSING\n\n    addRegexToken('d', match1to2);\n    addRegexToken('e', match1to2);\n    addRegexToken('E', match1to2);\n    addRegexToken('dd', function (isStrict, locale) {\n        return locale.weekdaysMinRegex(isStrict);\n    });\n    addRegexToken('ddd', function (isStrict, locale) {\n        return locale.weekdaysShortRegex(isStrict);\n    });\n    addRegexToken('dddd', function (isStrict, locale) {\n        return locale.weekdaysRegex(isStrict);\n    });\n\n    addWeekParseToken(['dd', 'ddd', 'dddd'], function (input, week, config, token) {\n        var weekday = config._locale.weekdaysParse(input, token, config._strict);\n        // if we didn't get a weekday name, mark the date as invalid\n        if (weekday != null) {\n            week.d = weekday;\n        } else {\n            getParsingFlags(config).invalidWeekday = input;\n        }\n    });\n\n    addWeekParseToken(['d', 'e', 'E'], function (input, week, config, token) {\n        week[token] = toInt(input);\n    });\n\n    // HELPERS\n\n    function parseWeekday(input, locale) {\n        if (typeof input !== 'string') {\n            return input;\n        }\n\n        if (!isNaN(input)) {\n            return parseInt(input, 10);\n        }\n\n        input = locale.weekdaysParse(input);\n        if (typeof input === 'number') {\n            return input;\n        }\n\n        return null;\n    }\n\n    function parseIsoWeekday(input, locale) {\n        if (typeof input === 'string') {\n            return locale.weekdaysParse(input) % 7 || 7;\n        }\n        return isNaN(input) ? null : input;\n    }\n\n    // LOCALES\n    function shiftWeekdays(ws, n) {\n        return ws.slice(n, 7).concat(ws.slice(0, n));\n    }\n\n    var defaultLocaleWeekdays =\n            'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split('_'),\n        defaultLocaleWeekdaysShort = 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        defaultLocaleWeekdaysMin = 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        defaultWeekdaysRegex = matchWord,\n        defaultWeekdaysShortRegex = matchWord,\n        defaultWeekdaysMinRegex = matchWord;\n\n    function localeWeekdays(m, format) {\n        var weekdays = isArray(this._weekdays)\n            ? this._weekdays\n            : this._weekdays[\n                  m && m !== true && this._weekdays.isFormat.test(format)\n                      ? 'format'\n                      : 'standalone'\n              ];\n        return m === true\n            ? shiftWeekdays(weekdays, this._week.dow)\n            : m\n            ? weekdays[m.day()]\n            : weekdays;\n    }\n\n    function localeWeekdaysShort(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysShort, this._week.dow)\n            : m\n            ? this._weekdaysShort[m.day()]\n            : this._weekdaysShort;\n    }\n\n    function localeWeekdaysMin(m) {\n        return m === true\n            ? shiftWeekdays(this._weekdaysMin, this._week.dow)\n            : m\n            ? this._weekdaysMin[m.day()]\n            : this._weekdaysMin;\n    }\n\n    function handleStrictParse$1(weekdayName, format, strict) {\n        var i,\n            ii,\n            mom,\n            llc = weekdayName.toLocaleLowerCase();\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._minWeekdaysParse = [];\n\n            for (i = 0; i < 7; ++i) {\n                mom = createUTC([2000, 1]).day(i);\n                this._minWeekdaysParse[i] = this.weekdaysMin(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._shortWeekdaysParse[i] = this.weekdaysShort(\n                    mom,\n                    ''\n                ).toLocaleLowerCase();\n                this._weekdaysParse[i] = this.weekdays(mom, '').toLocaleLowerCase();\n            }\n        }\n\n        if (strict) {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        } else {\n            if (format === 'dddd') {\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else if (format === 'ddd') {\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            } else {\n                ii = indexOf.call(this._minWeekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._weekdaysParse, llc);\n                if (ii !== -1) {\n                    return ii;\n                }\n                ii = indexOf.call(this._shortWeekdaysParse, llc);\n                return ii !== -1 ? ii : null;\n            }\n        }\n    }\n\n    function localeWeekdaysParse(weekdayName, format, strict) {\n        var i, mom, regex;\n\n        if (this._weekdaysParseExact) {\n            return handleStrictParse$1.call(this, weekdayName, format, strict);\n        }\n\n        if (!this._weekdaysParse) {\n            this._weekdaysParse = [];\n            this._minWeekdaysParse = [];\n            this._shortWeekdaysParse = [];\n            this._fullWeekdaysParse = [];\n        }\n\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n\n            mom = createUTC([2000, 1]).day(i);\n            if (strict && !this._fullWeekdaysParse[i]) {\n                this._fullWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdays(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._shortWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysShort(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n                this._minWeekdaysParse[i] = new RegExp(\n                    '^' + this.weekdaysMin(mom, '').replace('.', '\\\\.?') + '$',\n                    'i'\n                );\n            }\n            if (!this._weekdaysParse[i]) {\n                regex =\n                    '^' +\n                    this.weekdays(mom, '') +\n                    '|^' +\n                    this.weekdaysShort(mom, '') +\n                    '|^' +\n                    this.weekdaysMin(mom, '');\n                this._weekdaysParse[i] = new RegExp(regex.replace('.', ''), 'i');\n            }\n            // test the regex\n            if (\n                strict &&\n                format === 'dddd' &&\n                this._fullWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'ddd' &&\n                this._shortWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (\n                strict &&\n                format === 'dd' &&\n                this._minWeekdaysParse[i].test(weekdayName)\n            ) {\n                return i;\n            } else if (!strict && this._weekdaysParse[i].test(weekdayName)) {\n                return i;\n            }\n        }\n    }\n\n    // MOMENTS\n\n    function getSetDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var day = this._isUTC ? this._d.getUTCDay() : this._d.getDay();\n        if (input != null) {\n            input = parseWeekday(input, this.localeData());\n            return this.add(input - day, 'd');\n        } else {\n            return day;\n        }\n    }\n\n    function getSetLocaleDayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        var weekday = (this.day() + 7 - this.localeData()._week.dow) % 7;\n        return input == null ? weekday : this.add(input - weekday, 'd');\n    }\n\n    function getSetISODayOfWeek(input) {\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n\n        // behaves the same as moment#day except\n        // as a getter, returns 7 instead of 0 (1-7 range instead of 0-6)\n        // as a setter, sunday should belong to the previous week.\n\n        if (input != null) {\n            var weekday = parseIsoWeekday(input, this.localeData());\n            return this.day(this.day() % 7 ? weekday : weekday - 7);\n        } else {\n            return this.day() || 7;\n        }\n    }\n\n    function weekdaysRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysStrictRegex;\n            } else {\n                return this._weekdaysRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                this._weekdaysRegex = defaultWeekdaysRegex;\n            }\n            return this._weekdaysStrictRegex && isStrict\n                ? this._weekdaysStrictRegex\n                : this._weekdaysRegex;\n        }\n    }\n\n    function weekdaysShortRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysShortStrictRegex;\n            } else {\n                return this._weekdaysShortRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysShortRegex')) {\n                this._weekdaysShortRegex = defaultWeekdaysShortRegex;\n            }\n            return this._weekdaysShortStrictRegex && isStrict\n                ? this._weekdaysShortStrictRegex\n                : this._weekdaysShortRegex;\n        }\n    }\n\n    function weekdaysMinRegex(isStrict) {\n        if (this._weekdaysParseExact) {\n            if (!hasOwnProp(this, '_weekdaysRegex')) {\n                computeWeekdaysParse.call(this);\n            }\n            if (isStrict) {\n                return this._weekdaysMinStrictRegex;\n            } else {\n                return this._weekdaysMinRegex;\n            }\n        } else {\n            if (!hasOwnProp(this, '_weekdaysMinRegex')) {\n                this._weekdaysMinRegex = defaultWeekdaysMinRegex;\n            }\n            return this._weekdaysMinStrictRegex && isStrict\n                ? this._weekdaysMinStrictRegex\n                : this._weekdaysMinRegex;\n        }\n    }\n\n    function computeWeekdaysParse() {\n        function cmpLenRev(a, b) {\n            return b.length - a.length;\n        }\n\n        var minPieces = [],\n            shortPieces = [],\n            longPieces = [],\n            mixedPieces = [],\n            i,\n            mom,\n            minp,\n            shortp,\n            longp;\n        for (i = 0; i < 7; i++) {\n            // make the regex if we don't have it already\n            mom = createUTC([2000, 1]).day(i);\n            minp = regexEscape(this.weekdaysMin(mom, ''));\n            shortp = regexEscape(this.weekdaysShort(mom, ''));\n            longp = regexEscape(this.weekdays(mom, ''));\n            minPieces.push(minp);\n            shortPieces.push(shortp);\n            longPieces.push(longp);\n            mixedPieces.push(minp);\n            mixedPieces.push(shortp);\n            mixedPieces.push(longp);\n        }\n        // Sorting makes sure if one weekday (or abbr) is a prefix of another it\n        // will match the longer piece.\n        minPieces.sort(cmpLenRev);\n        shortPieces.sort(cmpLenRev);\n        longPieces.sort(cmpLenRev);\n        mixedPieces.sort(cmpLenRev);\n\n        this._weekdaysRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._weekdaysShortRegex = this._weekdaysRegex;\n        this._weekdaysMinRegex = this._weekdaysRegex;\n\n        this._weekdaysStrictRegex = new RegExp(\n            '^(' + longPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysShortStrictRegex = new RegExp(\n            '^(' + shortPieces.join('|') + ')',\n            'i'\n        );\n        this._weekdaysMinStrictRegex = new RegExp(\n            '^(' + minPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    function hFormat() {\n        return this.hours() % 12 || 12;\n    }\n\n    function kFormat() {\n        return this.hours() || 24;\n    }\n\n    addFormatToken('H', ['HH', 2], 0, 'hour');\n    addFormatToken('h', ['hh', 2], 0, hFormat);\n    addFormatToken('k', ['kk', 2], 0, kFormat);\n\n    addFormatToken('hmm', 0, 0, function () {\n        return '' + hFormat.apply(this) + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('hmmss', 0, 0, function () {\n        return (\n            '' +\n            hFormat.apply(this) +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    addFormatToken('Hmm', 0, 0, function () {\n        return '' + this.hours() + zeroFill(this.minutes(), 2);\n    });\n\n    addFormatToken('Hmmss', 0, 0, function () {\n        return (\n            '' +\n            this.hours() +\n            zeroFill(this.minutes(), 2) +\n            zeroFill(this.seconds(), 2)\n        );\n    });\n\n    function meridiem(token, lowercase) {\n        addFormatToken(token, 0, 0, function () {\n            return this.localeData().meridiem(\n                this.hours(),\n                this.minutes(),\n                lowercase\n            );\n        });\n    }\n\n    meridiem('a', true);\n    meridiem('A', false);\n\n    // ALIASES\n\n    addUnitAlias('hour', 'h');\n\n    // PRIORITY\n    addUnitPriority('hour', 13);\n\n    // PARSING\n\n    function matchMeridiem(isStrict, locale) {\n        return locale._meridiemParse;\n    }\n\n    addRegexToken('a', matchMeridiem);\n    addRegexToken('A', matchMeridiem);\n    addRegexToken('H', match1to2);\n    addRegexToken('h', match1to2);\n    addRegexToken('k', match1to2);\n    addRegexToken('HH', match1to2, match2);\n    addRegexToken('hh', match1to2, match2);\n    addRegexToken('kk', match1to2, match2);\n\n    addRegexToken('hmm', match3to4);\n    addRegexToken('hmmss', match5to6);\n    addRegexToken('Hmm', match3to4);\n    addRegexToken('Hmmss', match5to6);\n\n    addParseToken(['H', 'HH'], HOUR);\n    addParseToken(['k', 'kk'], function (input, array, config) {\n        var kInput = toInt(input);\n        array[HOUR] = kInput === 24 ? 0 : kInput;\n    });\n    addParseToken(['a', 'A'], function (input, array, config) {\n        config._isPm = config._locale.isPM(input);\n        config._meridiem = input;\n    });\n    addParseToken(['h', 'hh'], function (input, array, config) {\n        array[HOUR] = toInt(input);\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n        getParsingFlags(config).bigHour = true;\n    });\n    addParseToken('Hmm', function (input, array, config) {\n        var pos = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos));\n        array[MINUTE] = toInt(input.substr(pos));\n    });\n    addParseToken('Hmmss', function (input, array, config) {\n        var pos1 = input.length - 4,\n            pos2 = input.length - 2;\n        array[HOUR] = toInt(input.substr(0, pos1));\n        array[MINUTE] = toInt(input.substr(pos1, 2));\n        array[SECOND] = toInt(input.substr(pos2));\n    });\n\n    // LOCALES\n\n    function localeIsPM(input) {\n        // IE8 Quirks Mode & IE7 Standards Mode do not allow accessing strings like arrays\n        // Using charAt should be more compatible.\n        return (input + '').toLowerCase().charAt(0) === 'p';\n    }\n\n    var defaultLocaleMeridiemParse = /[ap]\\.?m?\\.?/i,\n        // Setting the hour should keep the time, because the user explicitly\n        // specified which hour they want. So trying to maintain the same hour (in\n        // a new timezone) makes sense. Adding/subtracting hours does not follow\n        // this rule.\n        getSetHour = makeGetSet('Hours', true);\n\n    function localeMeridiem(hours, minutes, isLower) {\n        if (hours > 11) {\n            return isLower ? 'pm' : 'PM';\n        } else {\n            return isLower ? 'am' : 'AM';\n        }\n    }\n\n    var baseConfig = {\n        calendar: defaultCalendar,\n        longDateFormat: defaultLongDateFormat,\n        invalidDate: defaultInvalidDate,\n        ordinal: defaultOrdinal,\n        dayOfMonthOrdinalParse: defaultDayOfMonthOrdinalParse,\n        relativeTime: defaultRelativeTime,\n\n        months: defaultLocaleMonths,\n        monthsShort: defaultLocaleMonthsShort,\n\n        week: defaultLocaleWeek,\n\n        weekdays: defaultLocaleWeekdays,\n        weekdaysMin: defaultLocaleWeekdaysMin,\n        weekdaysShort: defaultLocaleWeekdaysShort,\n\n        meridiemParse: defaultLocaleMeridiemParse,\n    };\n\n    // internal storage for locale config files\n    var locales = {},\n        localeFamilies = {},\n        globalLocale;\n\n    function commonPrefix(arr1, arr2) {\n        var i,\n            minl = Math.min(arr1.length, arr2.length);\n        for (i = 0; i < minl; i += 1) {\n            if (arr1[i] !== arr2[i]) {\n                return i;\n            }\n        }\n        return minl;\n    }\n\n    function normalizeLocale(key) {\n        return key ? key.toLowerCase().replace('_', '-') : key;\n    }\n\n    // pick the locale from the array\n    // try ['en-au', 'en-gb'] as 'en-au', 'en-gb', 'en', as in move through the list trying each\n    // substring from most specific to least, but move to the next array item if it's a more specific variant than the current root\n    function chooseLocale(names) {\n        var i = 0,\n            j,\n            next,\n            locale,\n            split;\n\n        while (i < names.length) {\n            split = normalizeLocale(names[i]).split('-');\n            j = split.length;\n            next = normalizeLocale(names[i + 1]);\n            next = next ? next.split('-') : null;\n            while (j > 0) {\n                locale = loadLocale(split.slice(0, j).join('-'));\n                if (locale) {\n                    return locale;\n                }\n                if (\n                    next &&\n                    next.length >= j &&\n                    commonPrefix(split, next) >= j - 1\n                ) {\n                    //the next array item is better than a shallower substring of this one\n                    break;\n                }\n                j--;\n            }\n            i++;\n        }\n        return globalLocale;\n    }\n\n    function isLocaleNameSane(name) {\n        // Prevent names that look like filesystem paths, i.e contain '/' or '\\'\n        return name.match('^[^/\\\\\\\\]*$') != null;\n    }\n\n    function loadLocale(name) {\n        var oldLocale = null,\n            aliasedRequire;\n        // TODO: Find a better way to register and load all the locales in Node\n        if (\n            locales[name] === undefined &&\n            typeof module !== 'undefined' &&\n            module &&\n            module.exports &&\n            isLocaleNameSane(name)\n        ) {\n            try {\n                oldLocale = globalLocale._abbr;\n                aliasedRequire = require;\n                aliasedRequire('./locale/' + name);\n                getSetGlobalLocale(oldLocale);\n            } catch (e) {\n                // mark as not found to avoid repeating expensive file require call causing high CPU\n                // when trying to find en-US, en_US, en-us for every format call\n                locales[name] = null; // null means not found\n            }\n        }\n        return locales[name];\n    }\n\n    // This function will load locale and then set the global locale.  If\n    // no arguments are passed in, it will simply return the current global\n    // locale key.\n    function getSetGlobalLocale(key, values) {\n        var data;\n        if (key) {\n            if (isUndefined(values)) {\n                data = getLocale(key);\n            } else {\n                data = defineLocale(key, values);\n            }\n\n            if (data) {\n                // moment.duration._locale = moment._locale = data;\n                globalLocale = data;\n            } else {\n                if (typeof console !== 'undefined' && console.warn) {\n                    //warn user if arguments are passed but the locale could not be set\n                    console.warn(\n                        'Locale ' + key + ' not found. Did you forget to load it?'\n                    );\n                }\n            }\n        }\n\n        return globalLocale._abbr;\n    }\n\n    function defineLocale(name, config) {\n        if (config !== null) {\n            var locale,\n                parentConfig = baseConfig;\n            config.abbr = name;\n            if (locales[name] != null) {\n                deprecateSimple(\n                    'defineLocaleOverride',\n                    'use moment.updateLocale(localeName, config) to change ' +\n                        'an existing locale. moment.defineLocale(localeName, ' +\n                        'config) should only be used for creating a new locale ' +\n                        'See http://momentjs.com/guides/#/warnings/define-locale/ for more info.'\n                );\n                parentConfig = locales[name]._config;\n            } else if (config.parentLocale != null) {\n                if (locales[config.parentLocale] != null) {\n                    parentConfig = locales[config.parentLocale]._config;\n                } else {\n                    locale = loadLocale(config.parentLocale);\n                    if (locale != null) {\n                        parentConfig = locale._config;\n                    } else {\n                        if (!localeFamilies[config.parentLocale]) {\n                            localeFamilies[config.parentLocale] = [];\n                        }\n                        localeFamilies[config.parentLocale].push({\n                            name: name,\n                            config: config,\n                        });\n                        return null;\n                    }\n                }\n            }\n            locales[name] = new Locale(mergeConfigs(parentConfig, config));\n\n            if (localeFamilies[name]) {\n                localeFamilies[name].forEach(function (x) {\n                    defineLocale(x.name, x.config);\n                });\n            }\n\n            // backwards compat for now: also set the locale\n            // make sure we set the locale AFTER all child locales have been\n            // created, so we won't end up with the child locale set.\n            getSetGlobalLocale(name);\n\n            return locales[name];\n        } else {\n            // useful for testing\n            delete locales[name];\n            return null;\n        }\n    }\n\n    function updateLocale(name, config) {\n        if (config != null) {\n            var locale,\n                tmpLocale,\n                parentConfig = baseConfig;\n\n            if (locales[name] != null && locales[name].parentLocale != null) {\n                // Update existing child locale in-place to avoid memory-leaks\n                locales[name].set(mergeConfigs(locales[name]._config, config));\n            } else {\n                // MERGE\n                tmpLocale = loadLocale(name);\n                if (tmpLocale != null) {\n                    parentConfig = tmpLocale._config;\n                }\n                config = mergeConfigs(parentConfig, config);\n                if (tmpLocale == null) {\n                    // updateLocale is called for creating a new locale\n                    // Set abbr so it will have a name (getters return\n                    // undefined otherwise).\n                    config.abbr = name;\n                }\n                locale = new Locale(config);\n                locale.parentLocale = locales[name];\n                locales[name] = locale;\n            }\n\n            // backwards compat for now: also set the locale\n            getSetGlobalLocale(name);\n        } else {\n            // pass null for config to unupdate, useful for tests\n            if (locales[name] != null) {\n                if (locales[name].parentLocale != null) {\n                    locales[name] = locales[name].parentLocale;\n                    if (name === getSetGlobalLocale()) {\n                        getSetGlobalLocale(name);\n                    }\n                } else if (locales[name] != null) {\n                    delete locales[name];\n                }\n            }\n        }\n        return locales[name];\n    }\n\n    // returns locale data\n    function getLocale(key) {\n        var locale;\n\n        if (key && key._locale && key._locale._abbr) {\n            key = key._locale._abbr;\n        }\n\n        if (!key) {\n            return globalLocale;\n        }\n\n        if (!isArray(key)) {\n            //short-circuit everything else\n            locale = loadLocale(key);\n            if (locale) {\n                return locale;\n            }\n            key = [key];\n        }\n\n        return chooseLocale(key);\n    }\n\n    function listLocales() {\n        return keys(locales);\n    }\n\n    function checkOverflow(m) {\n        var overflow,\n            a = m._a;\n\n        if (a && getParsingFlags(m).overflow === -2) {\n            overflow =\n                a[MONTH] < 0 || a[MONTH] > 11\n                    ? MONTH\n                    : a[DATE] < 1 || a[DATE] > daysInMonth(a[YEAR], a[MONTH])\n                    ? DATE\n                    : a[HOUR] < 0 ||\n                      a[HOUR] > 24 ||\n                      (a[HOUR] === 24 &&\n                          (a[MINUTE] !== 0 ||\n                              a[SECOND] !== 0 ||\n                              a[MILLISECOND] !== 0))\n                    ? HOUR\n                    : a[MINUTE] < 0 || a[MINUTE] > 59\n                    ? MINUTE\n                    : a[SECOND] < 0 || a[SECOND] > 59\n                    ? SECOND\n                    : a[MILLISECOND] < 0 || a[MILLISECOND] > 999\n                    ? MILLISECOND\n                    : -1;\n\n            if (\n                getParsingFlags(m)._overflowDayOfYear &&\n                (overflow < YEAR || overflow > DATE)\n            ) {\n                overflow = DATE;\n            }\n            if (getParsingFlags(m)._overflowWeeks && overflow === -1) {\n                overflow = WEEK;\n            }\n            if (getParsingFlags(m)._overflowWeekday && overflow === -1) {\n                overflow = WEEKDAY;\n            }\n\n            getParsingFlags(m).overflow = overflow;\n        }\n\n        return m;\n    }\n\n    // iso 8601 regex\n    // 0000-00-00 0000-W00 or 0000-W00-0 + T + 00 or 00:00 or 00:00:00 or 00:00:00.000 + +00:00 or +0000 or +00)\n    var extendedIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})-(?:\\d\\d-\\d\\d|W\\d\\d-\\d|W\\d\\d|\\d\\d\\d|\\d\\d))(?:(T| )(\\d\\d(?::\\d\\d(?::\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        basicIsoRegex =\n            /^\\s*((?:[+-]\\d{6}|\\d{4})(?:\\d\\d\\d\\d|W\\d\\d\\d|W\\d\\d|\\d\\d\\d|\\d\\d|))(?:(T| )(\\d\\d(?:\\d\\d(?:\\d\\d(?:[.,]\\d+)?)?)?)([+-]\\d\\d(?::?\\d\\d)?|\\s*Z)?)?$/,\n        tzRegex = /Z|[+-]\\d\\d(?::?\\d\\d)?/,\n        isoDates = [\n            ['YYYYYY-MM-DD', /[+-]\\d{6}-\\d\\d-\\d\\d/],\n            ['YYYY-MM-DD', /\\d{4}-\\d\\d-\\d\\d/],\n            ['GGGG-[W]WW-E', /\\d{4}-W\\d\\d-\\d/],\n            ['GGGG-[W]WW', /\\d{4}-W\\d\\d/, false],\n            ['YYYY-DDD', /\\d{4}-\\d{3}/],\n            ['YYYY-MM', /\\d{4}-\\d\\d/, false],\n            ['YYYYYYMMDD', /[+-]\\d{10}/],\n            ['YYYYMMDD', /\\d{8}/],\n            ['GGGG[W]WWE', /\\d{4}W\\d{3}/],\n            ['GGGG[W]WW', /\\d{4}W\\d{2}/, false],\n            ['YYYYDDD', /\\d{7}/],\n            ['YYYYMM', /\\d{6}/, false],\n            ['YYYY', /\\d{4}/, false],\n        ],\n        // iso time formats and regexes\n        isoTimes = [\n            ['HH:mm:ss.SSSS', /\\d\\d:\\d\\d:\\d\\d\\.\\d+/],\n            ['HH:mm:ss,SSSS', /\\d\\d:\\d\\d:\\d\\d,\\d+/],\n            ['HH:mm:ss', /\\d\\d:\\d\\d:\\d\\d/],\n            ['HH:mm', /\\d\\d:\\d\\d/],\n            ['HHmmss.SSSS', /\\d\\d\\d\\d\\d\\d\\.\\d+/],\n            ['HHmmss,SSSS', /\\d\\d\\d\\d\\d\\d,\\d+/],\n            ['HHmmss', /\\d\\d\\d\\d\\d\\d/],\n            ['HHmm', /\\d\\d\\d\\d/],\n            ['HH', /\\d\\d/],\n        ],\n        aspNetJsonRegex = /^\\/?Date\\((-?\\d+)/i,\n        // RFC 2822 regex: For details see https://tools.ietf.org/html/rfc2822#section-3.3\n        rfc2822 =\n            /^(?:(Mon|Tue|Wed|Thu|Fri|Sat|Sun),?\\s)?(\\d{1,2})\\s(Jan|Feb|Mar|Apr|May|Jun|Jul|Aug|Sep|Oct|Nov|Dec)\\s(\\d{2,4})\\s(\\d\\d):(\\d\\d)(?::(\\d\\d))?\\s(?:(UT|GMT|[ECMP][SD]T)|([Zz])|([+-]\\d{4}))$/,\n        obsOffsets = {\n            UT: 0,\n            GMT: 0,\n            EDT: -4 * 60,\n            EST: -5 * 60,\n            CDT: -5 * 60,\n            CST: -6 * 60,\n            MDT: -6 * 60,\n            MST: -7 * 60,\n            PDT: -7 * 60,\n            PST: -8 * 60,\n        };\n\n    // date from iso format\n    function configFromISO(config) {\n        var i,\n            l,\n            string = config._i,\n            match = extendedIsoRegex.exec(string) || basicIsoRegex.exec(string),\n            allowTime,\n            dateFormat,\n            timeFormat,\n            tzFormat,\n            isoDatesLen = isoDates.length,\n            isoTimesLen = isoTimes.length;\n\n        if (match) {\n            getParsingFlags(config).iso = true;\n            for (i = 0, l = isoDatesLen; i < l; i++) {\n                if (isoDates[i][1].exec(match[1])) {\n                    dateFormat = isoDates[i][0];\n                    allowTime = isoDates[i][2] !== false;\n                    break;\n                }\n            }\n            if (dateFormat == null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[3]) {\n                for (i = 0, l = isoTimesLen; i < l; i++) {\n                    if (isoTimes[i][1].exec(match[3])) {\n                        // match[2] should be 'T' or space\n                        timeFormat = (match[2] || ' ') + isoTimes[i][0];\n                        break;\n                    }\n                }\n                if (timeFormat == null) {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            if (!allowTime && timeFormat != null) {\n                config._isValid = false;\n                return;\n            }\n            if (match[4]) {\n                if (tzRegex.exec(match[4])) {\n                    tzFormat = 'Z';\n                } else {\n                    config._isValid = false;\n                    return;\n                }\n            }\n            config._f = dateFormat + (timeFormat || '') + (tzFormat || '');\n            configFromStringAndFormat(config);\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    function extractFromRFC2822Strings(\n        yearStr,\n        monthStr,\n        dayStr,\n        hourStr,\n        minuteStr,\n        secondStr\n    ) {\n        var result = [\n            untruncateYear(yearStr),\n            defaultLocaleMonthsShort.indexOf(monthStr),\n            parseInt(dayStr, 10),\n            parseInt(hourStr, 10),\n            parseInt(minuteStr, 10),\n        ];\n\n        if (secondStr) {\n            result.push(parseInt(secondStr, 10));\n        }\n\n        return result;\n    }\n\n    function untruncateYear(yearStr) {\n        var year = parseInt(yearStr, 10);\n        if (year <= 49) {\n            return 2000 + year;\n        } else if (year <= 999) {\n            return 1900 + year;\n        }\n        return year;\n    }\n\n    function preprocessRFC2822(s) {\n        // Remove comments and folding whitespace and replace multiple-spaces with a single space\n        return s\n            .replace(/\\([^()]*\\)|[\\n\\t]/g, ' ')\n            .replace(/(\\s\\s+)/g, ' ')\n            .replace(/^\\s\\s*/, '')\n            .replace(/\\s\\s*$/, '');\n    }\n\n    function checkWeekday(weekdayStr, parsedInput, config) {\n        if (weekdayStr) {\n            // TODO: Replace the vanilla JS Date object with an independent day-of-week check.\n            var weekdayProvided = defaultLocaleWeekdaysShort.indexOf(weekdayStr),\n                weekdayActual = new Date(\n                    parsedInput[0],\n                    parsedInput[1],\n                    parsedInput[2]\n                ).getDay();\n            if (weekdayProvided !== weekdayActual) {\n                getParsingFlags(config).weekdayMismatch = true;\n                config._isValid = false;\n                return false;\n            }\n        }\n        return true;\n    }\n\n    function calculateOffset(obsOffset, militaryOffset, numOffset) {\n        if (obsOffset) {\n            return obsOffsets[obsOffset];\n        } else if (militaryOffset) {\n            // the only allowed military tz is Z\n            return 0;\n        } else {\n            var hm = parseInt(numOffset, 10),\n                m = hm % 100,\n                h = (hm - m) / 100;\n            return h * 60 + m;\n        }\n    }\n\n    // date and time from ref 2822 format\n    function configFromRFC2822(config) {\n        var match = rfc2822.exec(preprocessRFC2822(config._i)),\n            parsedArray;\n        if (match) {\n            parsedArray = extractFromRFC2822Strings(\n                match[4],\n                match[3],\n                match[2],\n                match[5],\n                match[6],\n                match[7]\n            );\n            if (!checkWeekday(match[1], parsedArray, config)) {\n                return;\n            }\n\n            config._a = parsedArray;\n            config._tzm = calculateOffset(match[8], match[9], match[10]);\n\n            config._d = createUTCDate.apply(null, config._a);\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n\n            getParsingFlags(config).rfc2822 = true;\n        } else {\n            config._isValid = false;\n        }\n    }\n\n    // date from 1) ASP.NET, 2) ISO, 3) RFC 2822 formats, or 4) optional fallback if parsing isn't strict\n    function configFromString(config) {\n        var matched = aspNetJsonRegex.exec(config._i);\n        if (matched !== null) {\n            config._d = new Date(+matched[1]);\n            return;\n        }\n\n        configFromISO(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        configFromRFC2822(config);\n        if (config._isValid === false) {\n            delete config._isValid;\n        } else {\n            return;\n        }\n\n        if (config._strict) {\n            config._isValid = false;\n        } else {\n            // Final attempt, use Input Fallback\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    hooks.createFromInputFallback = deprecate(\n        'value provided is not in a recognized RFC2822 or ISO format. moment construction falls back to js Date(), ' +\n            'which is not reliable across all browsers and versions. Non RFC2822/ISO date formats are ' +\n            'discouraged. Please refer to http://momentjs.com/guides/#/warnings/js-date/ for more info.',\n        function (config) {\n            config._d = new Date(config._i + (config._useUTC ? ' UTC' : ''));\n        }\n    );\n\n    // Pick the first defined of two or three arguments.\n    function defaults(a, b, c) {\n        if (a != null) {\n            return a;\n        }\n        if (b != null) {\n            return b;\n        }\n        return c;\n    }\n\n    function currentDateArray(config) {\n        // hooks is actually the exported moment object\n        var nowValue = new Date(hooks.now());\n        if (config._useUTC) {\n            return [\n                nowValue.getUTCFullYear(),\n                nowValue.getUTCMonth(),\n                nowValue.getUTCDate(),\n            ];\n        }\n        return [nowValue.getFullYear(), nowValue.getMonth(), nowValue.getDate()];\n    }\n\n    // convert an array to a date.\n    // the array should mirror the parameters below\n    // note: all values past the year are optional and will default to the lowest possible value.\n    // [year, month, day , hour, minute, second, millisecond]\n    function configFromArray(config) {\n        var i,\n            date,\n            input = [],\n            currentDate,\n            expectedWeekday,\n            yearToUse;\n\n        if (config._d) {\n            return;\n        }\n\n        currentDate = currentDateArray(config);\n\n        //compute day of the year from weeks and weekdays\n        if (config._w && config._a[DATE] == null && config._a[MONTH] == null) {\n            dayOfYearFromWeekInfo(config);\n        }\n\n        //if the day of the year is set, figure out what it is\n        if (config._dayOfYear != null) {\n            yearToUse = defaults(config._a[YEAR], currentDate[YEAR]);\n\n            if (\n                config._dayOfYear > daysInYear(yearToUse) ||\n                config._dayOfYear === 0\n            ) {\n                getParsingFlags(config)._overflowDayOfYear = true;\n            }\n\n            date = createUTCDate(yearToUse, 0, config._dayOfYear);\n            config._a[MONTH] = date.getUTCMonth();\n            config._a[DATE] = date.getUTCDate();\n        }\n\n        // Default to current date.\n        // * if no year, month, day of month are given, default to today\n        // * if day of month is given, default month and year\n        // * if month is given, default only year\n        // * if year is given, don't default anything\n        for (i = 0; i < 3 && config._a[i] == null; ++i) {\n            config._a[i] = input[i] = currentDate[i];\n        }\n\n        // Zero out whatever was not defaulted, including time\n        for (; i < 7; i++) {\n            config._a[i] = input[i] =\n                config._a[i] == null ? (i === 2 ? 1 : 0) : config._a[i];\n        }\n\n        // Check for 24:00:00.000\n        if (\n            config._a[HOUR] === 24 &&\n            config._a[MINUTE] === 0 &&\n            config._a[SECOND] === 0 &&\n            config._a[MILLISECOND] === 0\n        ) {\n            config._nextDay = true;\n            config._a[HOUR] = 0;\n        }\n\n        config._d = (config._useUTC ? createUTCDate : createDate).apply(\n            null,\n            input\n        );\n        expectedWeekday = config._useUTC\n            ? config._d.getUTCDay()\n            : config._d.getDay();\n\n        // Apply timezone offset from input. The actual utcOffset can be changed\n        // with parseZone.\n        if (config._tzm != null) {\n            config._d.setUTCMinutes(config._d.getUTCMinutes() - config._tzm);\n        }\n\n        if (config._nextDay) {\n            config._a[HOUR] = 24;\n        }\n\n        // check for mismatching day of week\n        if (\n            config._w &&\n            typeof config._w.d !== 'undefined' &&\n            config._w.d !== expectedWeekday\n        ) {\n            getParsingFlags(config).weekdayMismatch = true;\n        }\n    }\n\n    function dayOfYearFromWeekInfo(config) {\n        var w, weekYear, week, weekday, dow, doy, temp, weekdayOverflow, curWeek;\n\n        w = config._w;\n        if (w.GG != null || w.W != null || w.E != null) {\n            dow = 1;\n            doy = 4;\n\n            // TODO: We need to take the current isoWeekYear, but that depends on\n            // how we interpret now (local, utc, fixed offset). So create\n            // a now version of current config (take local/utc/offset flags, and\n            // create now).\n            weekYear = defaults(\n                w.GG,\n                config._a[YEAR],\n                weekOfYear(createLocal(), 1, 4).year\n            );\n            week = defaults(w.W, 1);\n            weekday = defaults(w.E, 1);\n            if (weekday < 1 || weekday > 7) {\n                weekdayOverflow = true;\n            }\n        } else {\n            dow = config._locale._week.dow;\n            doy = config._locale._week.doy;\n\n            curWeek = weekOfYear(createLocal(), dow, doy);\n\n            weekYear = defaults(w.gg, config._a[YEAR], curWeek.year);\n\n            // Default to current week.\n            week = defaults(w.w, curWeek.week);\n\n            if (w.d != null) {\n                // weekday -- low day numbers are considered next week\n                weekday = w.d;\n                if (weekday < 0 || weekday > 6) {\n                    weekdayOverflow = true;\n                }\n            } else if (w.e != null) {\n                // local weekday -- counting starts from beginning of week\n                weekday = w.e + dow;\n                if (w.e < 0 || w.e > 6) {\n                    weekdayOverflow = true;\n                }\n            } else {\n                // default to beginning of week\n                weekday = dow;\n            }\n        }\n        if (week < 1 || week > weeksInYear(weekYear, dow, doy)) {\n            getParsingFlags(config)._overflowWeeks = true;\n        } else if (weekdayOverflow != null) {\n            getParsingFlags(config)._overflowWeekday = true;\n        } else {\n            temp = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy);\n            config._a[YEAR] = temp.year;\n            config._dayOfYear = temp.dayOfYear;\n        }\n    }\n\n    // constant that refers to the ISO standard\n    hooks.ISO_8601 = function () {};\n\n    // constant that refers to the RFC 2822 form\n    hooks.RFC_2822 = function () {};\n\n    // date from string and format string\n    function configFromStringAndFormat(config) {\n        // TODO: Move this to another part of the creation flow to prevent circular deps\n        if (config._f === hooks.ISO_8601) {\n            configFromISO(config);\n            return;\n        }\n        if (config._f === hooks.RFC_2822) {\n            configFromRFC2822(config);\n            return;\n        }\n        config._a = [];\n        getParsingFlags(config).empty = true;\n\n        // This array is used to make a Date, either with `new Date` or `Date.UTC`\n        var string = '' + config._i,\n            i,\n            parsedInput,\n            tokens,\n            token,\n            skipped,\n            stringLength = string.length,\n            totalParsedInputLength = 0,\n            era,\n            tokenLen;\n\n        tokens =\n            expandFormat(config._f, config._locale).match(formattingTokens) || [];\n        tokenLen = tokens.length;\n        for (i = 0; i < tokenLen; i++) {\n            token = tokens[i];\n            parsedInput = (string.match(getParseRegexForToken(token, config)) ||\n                [])[0];\n            if (parsedInput) {\n                skipped = string.substr(0, string.indexOf(parsedInput));\n                if (skipped.length > 0) {\n                    getParsingFlags(config).unusedInput.push(skipped);\n                }\n                string = string.slice(\n                    string.indexOf(parsedInput) + parsedInput.length\n                );\n                totalParsedInputLength += parsedInput.length;\n            }\n            // don't parse if it's not a known token\n            if (formatTokenFunctions[token]) {\n                if (parsedInput) {\n                    getParsingFlags(config).empty = false;\n                } else {\n                    getParsingFlags(config).unusedTokens.push(token);\n                }\n                addTimeToArrayFromToken(token, parsedInput, config);\n            } else if (config._strict && !parsedInput) {\n                getParsingFlags(config).unusedTokens.push(token);\n            }\n        }\n\n        // add remaining unparsed input length to the string\n        getParsingFlags(config).charsLeftOver =\n            stringLength - totalParsedInputLength;\n        if (string.length > 0) {\n            getParsingFlags(config).unusedInput.push(string);\n        }\n\n        // clear _12h flag if hour is <= 12\n        if (\n            config._a[HOUR] <= 12 &&\n            getParsingFlags(config).bigHour === true &&\n            config._a[HOUR] > 0\n        ) {\n            getParsingFlags(config).bigHour = undefined;\n        }\n\n        getParsingFlags(config).parsedDateParts = config._a.slice(0);\n        getParsingFlags(config).meridiem = config._meridiem;\n        // handle meridiem\n        config._a[HOUR] = meridiemFixWrap(\n            config._locale,\n            config._a[HOUR],\n            config._meridiem\n        );\n\n        // handle era\n        era = getParsingFlags(config).era;\n        if (era !== null) {\n            config._a[YEAR] = config._locale.erasConvertYear(era, config._a[YEAR]);\n        }\n\n        configFromArray(config);\n        checkOverflow(config);\n    }\n\n    function meridiemFixWrap(locale, hour, meridiem) {\n        var isPm;\n\n        if (meridiem == null) {\n            // nothing to do\n            return hour;\n        }\n        if (locale.meridiemHour != null) {\n            return locale.meridiemHour(hour, meridiem);\n        } else if (locale.isPM != null) {\n            // Fallback\n            isPm = locale.isPM(meridiem);\n            if (isPm && hour < 12) {\n                hour += 12;\n            }\n            if (!isPm && hour === 12) {\n                hour = 0;\n            }\n            return hour;\n        } else {\n            // this is not supposed to happen\n            return hour;\n        }\n    }\n\n    // date from string and array of format strings\n    function configFromStringAndArray(config) {\n        var tempConfig,\n            bestMoment,\n            scoreToBeat,\n            i,\n            currentScore,\n            validFormatFound,\n            bestFormatIsValid = false,\n            configfLen = config._f.length;\n\n        if (configfLen === 0) {\n            getParsingFlags(config).invalidFormat = true;\n            config._d = new Date(NaN);\n            return;\n        }\n\n        for (i = 0; i < configfLen; i++) {\n            currentScore = 0;\n            validFormatFound = false;\n            tempConfig = copyConfig({}, config);\n            if (config._useUTC != null) {\n                tempConfig._useUTC = config._useUTC;\n            }\n            tempConfig._f = config._f[i];\n            configFromStringAndFormat(tempConfig);\n\n            if (isValid(tempConfig)) {\n                validFormatFound = true;\n            }\n\n            // if there is any input that was not parsed add a penalty for that format\n            currentScore += getParsingFlags(tempConfig).charsLeftOver;\n\n            //or tokens\n            currentScore += getParsingFlags(tempConfig).unusedTokens.length * 10;\n\n            getParsingFlags(tempConfig).score = currentScore;\n\n            if (!bestFormatIsValid) {\n                if (\n                    scoreToBeat == null ||\n                    currentScore < scoreToBeat ||\n                    validFormatFound\n                ) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                    if (validFormatFound) {\n                        bestFormatIsValid = true;\n                    }\n                }\n            } else {\n                if (currentScore < scoreToBeat) {\n                    scoreToBeat = currentScore;\n                    bestMoment = tempConfig;\n                }\n            }\n        }\n\n        extend(config, bestMoment || tempConfig);\n    }\n\n    function configFromObject(config) {\n        if (config._d) {\n            return;\n        }\n\n        var i = normalizeObjectUnits(config._i),\n            dayOrDate = i.day === undefined ? i.date : i.day;\n        config._a = map(\n            [i.year, i.month, dayOrDate, i.hour, i.minute, i.second, i.millisecond],\n            function (obj) {\n                return obj && parseInt(obj, 10);\n            }\n        );\n\n        configFromArray(config);\n    }\n\n    function createFromConfig(config) {\n        var res = new Moment(checkOverflow(prepareConfig(config)));\n        if (res._nextDay) {\n            // Adding is smart enough around DST\n            res.add(1, 'd');\n            res._nextDay = undefined;\n        }\n\n        return res;\n    }\n\n    function prepareConfig(config) {\n        var input = config._i,\n            format = config._f;\n\n        config._locale = config._locale || getLocale(config._l);\n\n        if (input === null || (format === undefined && input === '')) {\n            return createInvalid({ nullInput: true });\n        }\n\n        if (typeof input === 'string') {\n            config._i = input = config._locale.preparse(input);\n        }\n\n        if (isMoment(input)) {\n            return new Moment(checkOverflow(input));\n        } else if (isDate(input)) {\n            config._d = input;\n        } else if (isArray(format)) {\n            configFromStringAndArray(config);\n        } else if (format) {\n            configFromStringAndFormat(config);\n        } else {\n            configFromInput(config);\n        }\n\n        if (!isValid(config)) {\n            config._d = null;\n        }\n\n        return config;\n    }\n\n    function configFromInput(config) {\n        var input = config._i;\n        if (isUndefined(input)) {\n            config._d = new Date(hooks.now());\n        } else if (isDate(input)) {\n            config._d = new Date(input.valueOf());\n        } else if (typeof input === 'string') {\n            configFromString(config);\n        } else if (isArray(input)) {\n            config._a = map(input.slice(0), function (obj) {\n                return parseInt(obj, 10);\n            });\n            configFromArray(config);\n        } else if (isObject(input)) {\n            configFromObject(config);\n        } else if (isNumber(input)) {\n            // from milliseconds\n            config._d = new Date(input);\n        } else {\n            hooks.createFromInputFallback(config);\n        }\n    }\n\n    function createLocalOrUTC(input, format, locale, strict, isUTC) {\n        var c = {};\n\n        if (format === true || format === false) {\n            strict = format;\n            format = undefined;\n        }\n\n        if (locale === true || locale === false) {\n            strict = locale;\n            locale = undefined;\n        }\n\n        if (\n            (isObject(input) && isObjectEmpty(input)) ||\n            (isArray(input) && input.length === 0)\n        ) {\n            input = undefined;\n        }\n        // object construction must be done this way.\n        // https://github.com/moment/moment/issues/1423\n        c._isAMomentObject = true;\n        c._useUTC = c._isUTC = isUTC;\n        c._l = locale;\n        c._i = input;\n        c._f = format;\n        c._strict = strict;\n\n        return createFromConfig(c);\n    }\n\n    function createLocal(input, format, locale, strict) {\n        return createLocalOrUTC(input, format, locale, strict, false);\n    }\n\n    var prototypeMin = deprecate(\n            'moment().min is deprecated, use moment.max instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other < this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        ),\n        prototypeMax = deprecate(\n            'moment().max is deprecated, use moment.min instead. http://momentjs.com/guides/#/warnings/min-max/',\n            function () {\n                var other = createLocal.apply(null, arguments);\n                if (this.isValid() && other.isValid()) {\n                    return other > this ? this : other;\n                } else {\n                    return createInvalid();\n                }\n            }\n        );\n\n    // Pick a moment m from moments so that m[fn](other) is true for all\n    // other. This relies on the function fn to be transitive.\n    //\n    // moments should either be an array of moment objects or an array, whose\n    // first element is an array of moment objects.\n    function pickBy(fn, moments) {\n        var res, i;\n        if (moments.length === 1 && isArray(moments[0])) {\n            moments = moments[0];\n        }\n        if (!moments.length) {\n            return createLocal();\n        }\n        res = moments[0];\n        for (i = 1; i < moments.length; ++i) {\n            if (!moments[i].isValid() || moments[i][fn](res)) {\n                res = moments[i];\n            }\n        }\n        return res;\n    }\n\n    // TODO: Use [].sort instead?\n    function min() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isBefore', args);\n    }\n\n    function max() {\n        var args = [].slice.call(arguments, 0);\n\n        return pickBy('isAfter', args);\n    }\n\n    var now = function () {\n        return Date.now ? Date.now() : +new Date();\n    };\n\n    var ordering = [\n        'year',\n        'quarter',\n        'month',\n        'week',\n        'day',\n        'hour',\n        'minute',\n        'second',\n        'millisecond',\n    ];\n\n    function isDurationValid(m) {\n        var key,\n            unitHasDecimal = false,\n            i,\n            orderLen = ordering.length;\n        for (key in m) {\n            if (\n                hasOwnProp(m, key) &&\n                !(\n                    indexOf.call(ordering, key) !== -1 &&\n                    (m[key] == null || !isNaN(m[key]))\n                )\n            ) {\n                return false;\n            }\n        }\n\n        for (i = 0; i < orderLen; ++i) {\n            if (m[ordering[i]]) {\n                if (unitHasDecimal) {\n                    return false; // only allow non-integers for smallest unit\n                }\n                if (parseFloat(m[ordering[i]]) !== toInt(m[ordering[i]])) {\n                    unitHasDecimal = true;\n                }\n            }\n        }\n\n        return true;\n    }\n\n    function isValid$1() {\n        return this._isValid;\n    }\n\n    function createInvalid$1() {\n        return createDuration(NaN);\n    }\n\n    function Duration(duration) {\n        var normalizedInput = normalizeObjectUnits(duration),\n            years = normalizedInput.year || 0,\n            quarters = normalizedInput.quarter || 0,\n            months = normalizedInput.month || 0,\n            weeks = normalizedInput.week || normalizedInput.isoWeek || 0,\n            days = normalizedInput.day || 0,\n            hours = normalizedInput.hour || 0,\n            minutes = normalizedInput.minute || 0,\n            seconds = normalizedInput.second || 0,\n            milliseconds = normalizedInput.millisecond || 0;\n\n        this._isValid = isDurationValid(normalizedInput);\n\n        // representation for dateAddRemove\n        this._milliseconds =\n            +milliseconds +\n            seconds * 1e3 + // 1000\n            minutes * 6e4 + // 1000 * 60\n            hours * 1000 * 60 * 60; //using 1000 * 60 * 60 instead of 36e5 to avoid floating point rounding errors https://github.com/moment/moment/issues/2978\n        // Because of dateAddRemove treats 24 hours as different from a\n        // day when working around DST, we need to store them separately\n        this._days = +days + weeks * 7;\n        // It is impossible to translate months into days without knowing\n        // which months you are are talking about, so we have to store\n        // it separately.\n        this._months = +months + quarters * 3 + years * 12;\n\n        this._data = {};\n\n        this._locale = getLocale();\n\n        this._bubble();\n    }\n\n    function isDuration(obj) {\n        return obj instanceof Duration;\n    }\n\n    function absRound(number) {\n        if (number < 0) {\n            return Math.round(-1 * number) * -1;\n        } else {\n            return Math.round(number);\n        }\n    }\n\n    // compare two arrays, return the number of differences\n    function compareArrays(array1, array2, dontConvert) {\n        var len = Math.min(array1.length, array2.length),\n            lengthDiff = Math.abs(array1.length - array2.length),\n            diffs = 0,\n            i;\n        for (i = 0; i < len; i++) {\n            if (\n                (dontConvert && array1[i] !== array2[i]) ||\n                (!dontConvert && toInt(array1[i]) !== toInt(array2[i]))\n            ) {\n                diffs++;\n            }\n        }\n        return diffs + lengthDiff;\n    }\n\n    // FORMATTING\n\n    function offset(token, separator) {\n        addFormatToken(token, 0, 0, function () {\n            var offset = this.utcOffset(),\n                sign = '+';\n            if (offset < 0) {\n                offset = -offset;\n                sign = '-';\n            }\n            return (\n                sign +\n                zeroFill(~~(offset / 60), 2) +\n                separator +\n                zeroFill(~~offset % 60, 2)\n            );\n        });\n    }\n\n    offset('Z', ':');\n    offset('ZZ', '');\n\n    // PARSING\n\n    addRegexToken('Z', matchShortOffset);\n    addRegexToken('ZZ', matchShortOffset);\n    addParseToken(['Z', 'ZZ'], function (input, array, config) {\n        config._useUTC = true;\n        config._tzm = offsetFromString(matchShortOffset, input);\n    });\n\n    // HELPERS\n\n    // timezone chunker\n    // '+10:00' > ['10',  '00']\n    // '-1530'  > ['-15', '30']\n    var chunkOffset = /([\\+\\-]|\\d\\d)/gi;\n\n    function offsetFromString(matcher, string) {\n        var matches = (string || '').match(matcher),\n            chunk,\n            parts,\n            minutes;\n\n        if (matches === null) {\n            return null;\n        }\n\n        chunk = matches[matches.length - 1] || [];\n        parts = (chunk + '').match(chunkOffset) || ['-', 0, 0];\n        minutes = +(parts[1] * 60) + toInt(parts[2]);\n\n        return minutes === 0 ? 0 : parts[0] === '+' ? minutes : -minutes;\n    }\n\n    // Return a moment from input, that is local/utc/zone equivalent to model.\n    function cloneWithOffset(input, model) {\n        var res, diff;\n        if (model._isUTC) {\n            res = model.clone();\n            diff =\n                (isMoment(input) || isDate(input)\n                    ? input.valueOf()\n                    : createLocal(input).valueOf()) - res.valueOf();\n            // Use low-level api, because this fn is low-level api.\n            res._d.setTime(res._d.valueOf() + diff);\n            hooks.updateOffset(res, false);\n            return res;\n        } else {\n            return createLocal(input).local();\n        }\n    }\n\n    function getDateOffset(m) {\n        // On Firefox.24 Date#getTimezoneOffset returns a floating point.\n        // https://github.com/moment/moment/pull/1871\n        return -Math.round(m._d.getTimezoneOffset());\n    }\n\n    // HOOKS\n\n    // This function will be called whenever a moment is mutated.\n    // It is intended to keep the offset in sync with the timezone.\n    hooks.updateOffset = function () {};\n\n    // MOMENTS\n\n    // keepLocalTime = true means only change the timezone, without\n    // affecting the local hour. So 5:31:26 +0300 --[utcOffset(2, true)]-->\n    // 5:31:26 +0200 It is possible that 5:31:26 doesn't exist with offset\n    // +0200, so we adjust the time as needed, to be valid.\n    //\n    // Keeping the time actually adds/subtracts (one hour)\n    // from the actual represented time. That is why we call updateOffset\n    // a second time. In case it wants us to change the offset again\n    // _changeInProgress == true case, then we have to adjust, because\n    // there is no such time in the given timezone.\n    function getSetOffset(input, keepLocalTime, keepMinutes) {\n        var offset = this._offset || 0,\n            localAdjust;\n        if (!this.isValid()) {\n            return input != null ? this : NaN;\n        }\n        if (input != null) {\n            if (typeof input === 'string') {\n                input = offsetFromString(matchShortOffset, input);\n                if (input === null) {\n                    return this;\n                }\n            } else if (Math.abs(input) < 16 && !keepMinutes) {\n                input = input * 60;\n            }\n            if (!this._isUTC && keepLocalTime) {\n                localAdjust = getDateOffset(this);\n            }\n            this._offset = input;\n            this._isUTC = true;\n            if (localAdjust != null) {\n                this.add(localAdjust, 'm');\n            }\n            if (offset !== input) {\n                if (!keepLocalTime || this._changeInProgress) {\n                    addSubtract(\n                        this,\n                        createDuration(input - offset, 'm'),\n                        1,\n                        false\n                    );\n                } else if (!this._changeInProgress) {\n                    this._changeInProgress = true;\n                    hooks.updateOffset(this, true);\n                    this._changeInProgress = null;\n                }\n            }\n            return this;\n        } else {\n            return this._isUTC ? offset : getDateOffset(this);\n        }\n    }\n\n    function getSetZone(input, keepLocalTime) {\n        if (input != null) {\n            if (typeof input !== 'string') {\n                input = -input;\n            }\n\n            this.utcOffset(input, keepLocalTime);\n\n            return this;\n        } else {\n            return -this.utcOffset();\n        }\n    }\n\n    function setOffsetToUTC(keepLocalTime) {\n        return this.utcOffset(0, keepLocalTime);\n    }\n\n    function setOffsetToLocal(keepLocalTime) {\n        if (this._isUTC) {\n            this.utcOffset(0, keepLocalTime);\n            this._isUTC = false;\n\n            if (keepLocalTime) {\n                this.subtract(getDateOffset(this), 'm');\n            }\n        }\n        return this;\n    }\n\n    function setOffsetToParsedOffset() {\n        if (this._tzm != null) {\n            this.utcOffset(this._tzm, false, true);\n        } else if (typeof this._i === 'string') {\n            var tZone = offsetFromString(matchOffset, this._i);\n            if (tZone != null) {\n                this.utcOffset(tZone);\n            } else {\n                this.utcOffset(0, true);\n            }\n        }\n        return this;\n    }\n\n    function hasAlignedHourOffset(input) {\n        if (!this.isValid()) {\n            return false;\n        }\n        input = input ? createLocal(input).utcOffset() : 0;\n\n        return (this.utcOffset() - input) % 60 === 0;\n    }\n\n    function isDaylightSavingTime() {\n        return (\n            this.utcOffset() > this.clone().month(0).utcOffset() ||\n            this.utcOffset() > this.clone().month(5).utcOffset()\n        );\n    }\n\n    function isDaylightSavingTimeShifted() {\n        if (!isUndefined(this._isDSTShifted)) {\n            return this._isDSTShifted;\n        }\n\n        var c = {},\n            other;\n\n        copyConfig(c, this);\n        c = prepareConfig(c);\n\n        if (c._a) {\n            other = c._isUTC ? createUTC(c._a) : createLocal(c._a);\n            this._isDSTShifted =\n                this.isValid() && compareArrays(c._a, other.toArray()) > 0;\n        } else {\n            this._isDSTShifted = false;\n        }\n\n        return this._isDSTShifted;\n    }\n\n    function isLocal() {\n        return this.isValid() ? !this._isUTC : false;\n    }\n\n    function isUtcOffset() {\n        return this.isValid() ? this._isUTC : false;\n    }\n\n    function isUtc() {\n        return this.isValid() ? this._isUTC && this._offset === 0 : false;\n    }\n\n    // ASP.NET json date format regex\n    var aspNetRegex = /^(-|\\+)?(?:(\\d*)[. ])?(\\d+):(\\d+)(?::(\\d+)(\\.\\d*)?)?$/,\n        // from http://docs.closure-library.googlecode.com/git/closure_goog_date_date.js.source.html\n        // somewhat more in line with 4.4.3.2 2004 spec, but allows decimal anywhere\n        // and further modified to allow for strings containing both week and day\n        isoRegex =\n            /^(-|\\+)?P(?:([-+]?[0-9,.]*)Y)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)W)?(?:([-+]?[0-9,.]*)D)?(?:T(?:([-+]?[0-9,.]*)H)?(?:([-+]?[0-9,.]*)M)?(?:([-+]?[0-9,.]*)S)?)?$/;\n\n    function createDuration(input, key) {\n        var duration = input,\n            // matching against regexp is expensive, do it on demand\n            match = null,\n            sign,\n            ret,\n            diffRes;\n\n        if (isDuration(input)) {\n            duration = {\n                ms: input._milliseconds,\n                d: input._days,\n                M: input._months,\n            };\n        } else if (isNumber(input) || !isNaN(+input)) {\n            duration = {};\n            if (key) {\n                duration[key] = +input;\n            } else {\n                duration.milliseconds = +input;\n            }\n        } else if ((match = aspNetRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: 0,\n                d: toInt(match[DATE]) * sign,\n                h: toInt(match[HOUR]) * sign,\n                m: toInt(match[MINUTE]) * sign,\n                s: toInt(match[SECOND]) * sign,\n                ms: toInt(absRound(match[MILLISECOND] * 1000)) * sign, // the millisecond decimal point is included in the match\n            };\n        } else if ((match = isoRegex.exec(input))) {\n            sign = match[1] === '-' ? -1 : 1;\n            duration = {\n                y: parseIso(match[2], sign),\n                M: parseIso(match[3], sign),\n                w: parseIso(match[4], sign),\n                d: parseIso(match[5], sign),\n                h: parseIso(match[6], sign),\n                m: parseIso(match[7], sign),\n                s: parseIso(match[8], sign),\n            };\n        } else if (duration == null) {\n            // checks for null or undefined\n            duration = {};\n        } else if (\n            typeof duration === 'object' &&\n            ('from' in duration || 'to' in duration)\n        ) {\n            diffRes = momentsDifference(\n                createLocal(duration.from),\n                createLocal(duration.to)\n            );\n\n            duration = {};\n            duration.ms = diffRes.milliseconds;\n            duration.M = diffRes.months;\n        }\n\n        ret = new Duration(duration);\n\n        if (isDuration(input) && hasOwnProp(input, '_locale')) {\n            ret._locale = input._locale;\n        }\n\n        if (isDuration(input) && hasOwnProp(input, '_isValid')) {\n            ret._isValid = input._isValid;\n        }\n\n        return ret;\n    }\n\n    createDuration.fn = Duration.prototype;\n    createDuration.invalid = createInvalid$1;\n\n    function parseIso(inp, sign) {\n        // We'd normally use ~~inp for this, but unfortunately it also\n        // converts floats to ints.\n        // inp may be undefined, so careful calling replace on it.\n        var res = inp && parseFloat(inp.replace(',', '.'));\n        // apply sign while we're at it\n        return (isNaN(res) ? 0 : res) * sign;\n    }\n\n    function positiveMomentsDifference(base, other) {\n        var res = {};\n\n        res.months =\n            other.month() - base.month() + (other.year() - base.year()) * 12;\n        if (base.clone().add(res.months, 'M').isAfter(other)) {\n            --res.months;\n        }\n\n        res.milliseconds = +other - +base.clone().add(res.months, 'M');\n\n        return res;\n    }\n\n    function momentsDifference(base, other) {\n        var res;\n        if (!(base.isValid() && other.isValid())) {\n            return { milliseconds: 0, months: 0 };\n        }\n\n        other = cloneWithOffset(other, base);\n        if (base.isBefore(other)) {\n            res = positiveMomentsDifference(base, other);\n        } else {\n            res = positiveMomentsDifference(other, base);\n            res.milliseconds = -res.milliseconds;\n            res.months = -res.months;\n        }\n\n        return res;\n    }\n\n    // TODO: remove 'name' arg after deprecation is removed\n    function createAdder(direction, name) {\n        return function (val, period) {\n            var dur, tmp;\n            //invert the arguments, but complain about it\n            if (period !== null && !isNaN(+period)) {\n                deprecateSimple(\n                    name,\n                    'moment().' +\n                        name +\n                        '(period, number) is deprecated. Please use moment().' +\n                        name +\n                        '(number, period). ' +\n                        'See http://momentjs.com/guides/#/warnings/add-inverted-param/ for more info.'\n                );\n                tmp = val;\n                val = period;\n                period = tmp;\n            }\n\n            dur = createDuration(val, period);\n            addSubtract(this, dur, direction);\n            return this;\n        };\n    }\n\n    function addSubtract(mom, duration, isAdding, updateOffset) {\n        var milliseconds = duration._milliseconds,\n            days = absRound(duration._days),\n            months = absRound(duration._months);\n\n        if (!mom.isValid()) {\n            // No op\n            return;\n        }\n\n        updateOffset = updateOffset == null ? true : updateOffset;\n\n        if (months) {\n            setMonth(mom, get(mom, 'Month') + months * isAdding);\n        }\n        if (days) {\n            set$1(mom, 'Date', get(mom, 'Date') + days * isAdding);\n        }\n        if (milliseconds) {\n            mom._d.setTime(mom._d.valueOf() + milliseconds * isAdding);\n        }\n        if (updateOffset) {\n            hooks.updateOffset(mom, days || months);\n        }\n    }\n\n    var add = createAdder(1, 'add'),\n        subtract = createAdder(-1, 'subtract');\n\n    function isString(input) {\n        return typeof input === 'string' || input instanceof String;\n    }\n\n    // type MomentInput = Moment | Date | string | number | (number | string)[] | MomentInputObject | void; // null | undefined\n    function isMomentInput(input) {\n        return (\n            isMoment(input) ||\n            isDate(input) ||\n            isString(input) ||\n            isNumber(input) ||\n            isNumberOrStringArray(input) ||\n            isMomentInputObject(input) ||\n            input === null ||\n            input === undefined\n        );\n    }\n\n    function isMomentInputObject(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'years',\n                'year',\n                'y',\n                'months',\n                'month',\n                'M',\n                'days',\n                'day',\n                'd',\n                'dates',\n                'date',\n                'D',\n                'hours',\n                'hour',\n                'h',\n                'minutes',\n                'minute',\n                'm',\n                'seconds',\n                'second',\n                's',\n                'milliseconds',\n                'millisecond',\n                'ms',\n            ],\n            i,\n            property,\n            propertyLen = properties.length;\n\n        for (i = 0; i < propertyLen; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function isNumberOrStringArray(input) {\n        var arrayTest = isArray(input),\n            dataTypeTest = false;\n        if (arrayTest) {\n            dataTypeTest =\n                input.filter(function (item) {\n                    return !isNumber(item) && isString(input);\n                }).length === 0;\n        }\n        return arrayTest && dataTypeTest;\n    }\n\n    function isCalendarSpec(input) {\n        var objectTest = isObject(input) && !isObjectEmpty(input),\n            propertyTest = false,\n            properties = [\n                'sameDay',\n                'nextDay',\n                'lastDay',\n                'nextWeek',\n                'lastWeek',\n                'sameElse',\n            ],\n            i,\n            property;\n\n        for (i = 0; i < properties.length; i += 1) {\n            property = properties[i];\n            propertyTest = propertyTest || hasOwnProp(input, property);\n        }\n\n        return objectTest && propertyTest;\n    }\n\n    function getCalendarFormat(myMoment, now) {\n        var diff = myMoment.diff(now, 'days', true);\n        return diff < -6\n            ? 'sameElse'\n            : diff < -1\n            ? 'lastWeek'\n            : diff < 0\n            ? 'lastDay'\n            : diff < 1\n            ? 'sameDay'\n            : diff < 2\n            ? 'nextDay'\n            : diff < 7\n            ? 'nextWeek'\n            : 'sameElse';\n    }\n\n    function calendar$1(time, formats) {\n        // Support for single parameter, formats only overload to the calendar function\n        if (arguments.length === 1) {\n            if (!arguments[0]) {\n                time = undefined;\n                formats = undefined;\n            } else if (isMomentInput(arguments[0])) {\n                time = arguments[0];\n                formats = undefined;\n            } else if (isCalendarSpec(arguments[0])) {\n                formats = arguments[0];\n                time = undefined;\n            }\n        }\n        // We want to compare the start of today, vs this.\n        // Getting start-of-today depends on whether we're local/utc/offset or not.\n        var now = time || createLocal(),\n            sod = cloneWithOffset(now, this).startOf('day'),\n            format = hooks.calendarFormat(this, sod) || 'sameElse',\n            output =\n                formats &&\n                (isFunction(formats[format])\n                    ? formats[format].call(this, now)\n                    : formats[format]);\n\n        return this.format(\n            output || this.localeData().calendar(format, this, createLocal(now))\n        );\n    }\n\n    function clone() {\n        return new Moment(this);\n    }\n\n    function isAfter(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() > localInput.valueOf();\n        } else {\n            return localInput.valueOf() < this.clone().startOf(units).valueOf();\n        }\n    }\n\n    function isBefore(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input);\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() < localInput.valueOf();\n        } else {\n            return this.clone().endOf(units).valueOf() < localInput.valueOf();\n        }\n    }\n\n    function isBetween(from, to, units, inclusivity) {\n        var localFrom = isMoment(from) ? from : createLocal(from),\n            localTo = isMoment(to) ? to : createLocal(to);\n        if (!(this.isValid() && localFrom.isValid() && localTo.isValid())) {\n            return false;\n        }\n        inclusivity = inclusivity || '()';\n        return (\n            (inclusivity[0] === '('\n                ? this.isAfter(localFrom, units)\n                : !this.isBefore(localFrom, units)) &&\n            (inclusivity[1] === ')'\n                ? this.isBefore(localTo, units)\n                : !this.isAfter(localTo, units))\n        );\n    }\n\n    function isSame(input, units) {\n        var localInput = isMoment(input) ? input : createLocal(input),\n            inputMs;\n        if (!(this.isValid() && localInput.isValid())) {\n            return false;\n        }\n        units = normalizeUnits(units) || 'millisecond';\n        if (units === 'millisecond') {\n            return this.valueOf() === localInput.valueOf();\n        } else {\n            inputMs = localInput.valueOf();\n            return (\n                this.clone().startOf(units).valueOf() <= inputMs &&\n                inputMs <= this.clone().endOf(units).valueOf()\n            );\n        }\n    }\n\n    function isSameOrAfter(input, units) {\n        return this.isSame(input, units) || this.isAfter(input, units);\n    }\n\n    function isSameOrBefore(input, units) {\n        return this.isSame(input, units) || this.isBefore(input, units);\n    }\n\n    function diff(input, units, asFloat) {\n        var that, zoneDelta, output;\n\n        if (!this.isValid()) {\n            return NaN;\n        }\n\n        that = cloneWithOffset(input, this);\n\n        if (!that.isValid()) {\n            return NaN;\n        }\n\n        zoneDelta = (that.utcOffset() - this.utcOffset()) * 6e4;\n\n        units = normalizeUnits(units);\n\n        switch (units) {\n            case 'year':\n                output = monthDiff(this, that) / 12;\n                break;\n            case 'month':\n                output = monthDiff(this, that);\n                break;\n            case 'quarter':\n                output = monthDiff(this, that) / 3;\n                break;\n            case 'second':\n                output = (this - that) / 1e3;\n                break; // 1000\n            case 'minute':\n                output = (this - that) / 6e4;\n                break; // 1000 * 60\n            case 'hour':\n                output = (this - that) / 36e5;\n                break; // 1000 * 60 * 60\n            case 'day':\n                output = (this - that - zoneDelta) / 864e5;\n                break; // 1000 * 60 * 60 * 24, negate dst\n            case 'week':\n                output = (this - that - zoneDelta) / 6048e5;\n                break; // 1000 * 60 * 60 * 24 * 7, negate dst\n            default:\n                output = this - that;\n        }\n\n        return asFloat ? output : absFloor(output);\n    }\n\n    function monthDiff(a, b) {\n        if (a.date() < b.date()) {\n            // end-of-month calculations work correct when the start month has more\n            // days than the end month.\n            return -monthDiff(b, a);\n        }\n        // difference in months\n        var wholeMonthDiff = (b.year() - a.year()) * 12 + (b.month() - a.month()),\n            // b is in (anchor - 1 month, anchor + 1 month)\n            anchor = a.clone().add(wholeMonthDiff, 'months'),\n            anchor2,\n            adjust;\n\n        if (b - anchor < 0) {\n            anchor2 = a.clone().add(wholeMonthDiff - 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor - anchor2);\n        } else {\n            anchor2 = a.clone().add(wholeMonthDiff + 1, 'months');\n            // linear across the month\n            adjust = (b - anchor) / (anchor2 - anchor);\n        }\n\n        //check for negative zero, return zero if negative zero\n        return -(wholeMonthDiff + adjust) || 0;\n    }\n\n    hooks.defaultFormat = 'YYYY-MM-DDTHH:mm:ssZ';\n    hooks.defaultFormatUtc = 'YYYY-MM-DDTHH:mm:ss[Z]';\n\n    function toString() {\n        return this.clone().locale('en').format('ddd MMM DD YYYY HH:mm:ss [GMT]ZZ');\n    }\n\n    function toISOString(keepOffset) {\n        if (!this.isValid()) {\n            return null;\n        }\n        var utc = keepOffset !== true,\n            m = utc ? this.clone().utc() : this;\n        if (m.year() < 0 || m.year() > 9999) {\n            return formatMoment(\n                m,\n                utc\n                    ? 'YYYYYY-MM-DD[T]HH:mm:ss.SSS[Z]'\n                    : 'YYYYYY-MM-DD[T]HH:mm:ss.SSSZ'\n            );\n        }\n        if (isFunction(Date.prototype.toISOString)) {\n            // native implementation is ~50x faster, use it when we can\n            if (utc) {\n                return this.toDate().toISOString();\n            } else {\n                return new Date(this.valueOf() + this.utcOffset() * 60 * 1000)\n                    .toISOString()\n                    .replace('Z', formatMoment(m, 'Z'));\n            }\n        }\n        return formatMoment(\n            m,\n            utc ? 'YYYY-MM-DD[T]HH:mm:ss.SSS[Z]' : 'YYYY-MM-DD[T]HH:mm:ss.SSSZ'\n        );\n    }\n\n    /**\n     * Return a human readable representation of a moment that can\n     * also be evaluated to get a new moment which is the same\n     *\n     * @link https://nodejs.org/dist/latest/docs/api/util.html#util_custom_inspect_function_on_objects\n     */\n    function inspect() {\n        if (!this.isValid()) {\n            return 'moment.invalid(/* ' + this._i + ' */)';\n        }\n        var func = 'moment',\n            zone = '',\n            prefix,\n            year,\n            datetime,\n            suffix;\n        if (!this.isLocal()) {\n            func = this.utcOffset() === 0 ? 'moment.utc' : 'moment.parseZone';\n            zone = 'Z';\n        }\n        prefix = '[' + func + '(\"]';\n        year = 0 <= this.year() && this.year() <= 9999 ? 'YYYY' : 'YYYYYY';\n        datetime = '-MM-DD[T]HH:mm:ss.SSS';\n        suffix = zone + '[\")]';\n\n        return this.format(prefix + year + datetime + suffix);\n    }\n\n    function format(inputString) {\n        if (!inputString) {\n            inputString = this.isUtc()\n                ? hooks.defaultFormatUtc\n                : hooks.defaultFormat;\n        }\n        var output = formatMoment(this, inputString);\n        return this.localeData().postformat(output);\n    }\n\n    function from(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ to: this, from: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function fromNow(withoutSuffix) {\n        return this.from(createLocal(), withoutSuffix);\n    }\n\n    function to(time, withoutSuffix) {\n        if (\n            this.isValid() &&\n            ((isMoment(time) && time.isValid()) || createLocal(time).isValid())\n        ) {\n            return createDuration({ from: this, to: time })\n                .locale(this.locale())\n                .humanize(!withoutSuffix);\n        } else {\n            return this.localeData().invalidDate();\n        }\n    }\n\n    function toNow(withoutSuffix) {\n        return this.to(createLocal(), withoutSuffix);\n    }\n\n    // If passed a locale key, it will set the locale for this\n    // instance.  Otherwise, it will return the locale configuration\n    // variables for this instance.\n    function locale(key) {\n        var newLocaleData;\n\n        if (key === undefined) {\n            return this._locale._abbr;\n        } else {\n            newLocaleData = getLocale(key);\n            if (newLocaleData != null) {\n                this._locale = newLocaleData;\n            }\n            return this;\n        }\n    }\n\n    var lang = deprecate(\n        'moment().lang() is deprecated. Instead, use moment().localeData() to get the language configuration. Use moment().locale() to change languages.',\n        function (key) {\n            if (key === undefined) {\n                return this.localeData();\n            } else {\n                return this.locale(key);\n            }\n        }\n    );\n\n    function localeData() {\n        return this._locale;\n    }\n\n    var MS_PER_SECOND = 1000,\n        MS_PER_MINUTE = 60 * MS_PER_SECOND,\n        MS_PER_HOUR = 60 * MS_PER_MINUTE,\n        MS_PER_400_YEARS = (365 * 400 + 97) * 24 * MS_PER_HOUR;\n\n    // actual modulo - handles negative numbers (for dates before 1970):\n    function mod$1(dividend, divisor) {\n        return ((dividend % divisor) + divisor) % divisor;\n    }\n\n    function localStartOfDate(y, m, d) {\n        // the date constructor remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return new Date(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return new Date(y, m, d).valueOf();\n        }\n    }\n\n    function utcStartOfDate(y, m, d) {\n        // Date.UTC remaps years 0-99 to 1900-1999\n        if (y < 100 && y >= 0) {\n            // preserve leap years using a full 400 year cycle, then reset\n            return Date.UTC(y + 400, m, d) - MS_PER_400_YEARS;\n        } else {\n            return Date.UTC(y, m, d);\n        }\n    }\n\n    function startOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year(), 0, 1);\n                break;\n            case 'quarter':\n                time = startOfDate(\n                    this.year(),\n                    this.month() - (this.month() % 3),\n                    1\n                );\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month(), 1);\n                break;\n            case 'week':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - this.weekday()\n                );\n                break;\n            case 'isoWeek':\n                time = startOfDate(\n                    this.year(),\n                    this.month(),\n                    this.date() - (this.isoWeekday() - 1)\n                );\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date());\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time -= mod$1(\n                    time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                    MS_PER_HOUR\n                );\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_MINUTE);\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time -= mod$1(time, MS_PER_SECOND);\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function endOf(units) {\n        var time, startOfDate;\n        units = normalizeUnits(units);\n        if (units === undefined || units === 'millisecond' || !this.isValid()) {\n            return this;\n        }\n\n        startOfDate = this._isUTC ? utcStartOfDate : localStartOfDate;\n\n        switch (units) {\n            case 'year':\n                time = startOfDate(this.year() + 1, 0, 1) - 1;\n                break;\n            case 'quarter':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month() - (this.month() % 3) + 3,\n                        1\n                    ) - 1;\n                break;\n            case 'month':\n                time = startOfDate(this.year(), this.month() + 1, 1) - 1;\n                break;\n            case 'week':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - this.weekday() + 7\n                    ) - 1;\n                break;\n            case 'isoWeek':\n                time =\n                    startOfDate(\n                        this.year(),\n                        this.month(),\n                        this.date() - (this.isoWeekday() - 1) + 7\n                    ) - 1;\n                break;\n            case 'day':\n            case 'date':\n                time = startOfDate(this.year(), this.month(), this.date() + 1) - 1;\n                break;\n            case 'hour':\n                time = this._d.valueOf();\n                time +=\n                    MS_PER_HOUR -\n                    mod$1(\n                        time + (this._isUTC ? 0 : this.utcOffset() * MS_PER_MINUTE),\n                        MS_PER_HOUR\n                    ) -\n                    1;\n                break;\n            case 'minute':\n                time = this._d.valueOf();\n                time += MS_PER_MINUTE - mod$1(time, MS_PER_MINUTE) - 1;\n                break;\n            case 'second':\n                time = this._d.valueOf();\n                time += MS_PER_SECOND - mod$1(time, MS_PER_SECOND) - 1;\n                break;\n        }\n\n        this._d.setTime(time);\n        hooks.updateOffset(this, true);\n        return this;\n    }\n\n    function valueOf() {\n        return this._d.valueOf() - (this._offset || 0) * 60000;\n    }\n\n    function unix() {\n        return Math.floor(this.valueOf() / 1000);\n    }\n\n    function toDate() {\n        return new Date(this.valueOf());\n    }\n\n    function toArray() {\n        var m = this;\n        return [\n            m.year(),\n            m.month(),\n            m.date(),\n            m.hour(),\n            m.minute(),\n            m.second(),\n            m.millisecond(),\n        ];\n    }\n\n    function toObject() {\n        var m = this;\n        return {\n            years: m.year(),\n            months: m.month(),\n            date: m.date(),\n            hours: m.hours(),\n            minutes: m.minutes(),\n            seconds: m.seconds(),\n            milliseconds: m.milliseconds(),\n        };\n    }\n\n    function toJSON() {\n        // new Date(NaN).toJSON() === null\n        return this.isValid() ? this.toISOString() : null;\n    }\n\n    function isValid$2() {\n        return isValid(this);\n    }\n\n    function parsingFlags() {\n        return extend({}, getParsingFlags(this));\n    }\n\n    function invalidAt() {\n        return getParsingFlags(this).overflow;\n    }\n\n    function creationData() {\n        return {\n            input: this._i,\n            format: this._f,\n            locale: this._locale,\n            isUTC: this._isUTC,\n            strict: this._strict,\n        };\n    }\n\n    addFormatToken('N', 0, 0, 'eraAbbr');\n    addFormatToken('NN', 0, 0, 'eraAbbr');\n    addFormatToken('NNN', 0, 0, 'eraAbbr');\n    addFormatToken('NNNN', 0, 0, 'eraName');\n    addFormatToken('NNNNN', 0, 0, 'eraNarrow');\n\n    addFormatToken('y', ['y', 1], 'yo', 'eraYear');\n    addFormatToken('y', ['yy', 2], 0, 'eraYear');\n    addFormatToken('y', ['yyy', 3], 0, 'eraYear');\n    addFormatToken('y', ['yyyy', 4], 0, 'eraYear');\n\n    addRegexToken('N', matchEraAbbr);\n    addRegexToken('NN', matchEraAbbr);\n    addRegexToken('NNN', matchEraAbbr);\n    addRegexToken('NNNN', matchEraName);\n    addRegexToken('NNNNN', matchEraNarrow);\n\n    addParseToken(\n        ['N', 'NN', 'NNN', 'NNNN', 'NNNNN'],\n        function (input, array, config, token) {\n            var era = config._locale.erasParse(input, token, config._strict);\n            if (era) {\n                getParsingFlags(config).era = era;\n            } else {\n                getParsingFlags(config).invalidEra = input;\n            }\n        }\n    );\n\n    addRegexToken('y', matchUnsigned);\n    addRegexToken('yy', matchUnsigned);\n    addRegexToken('yyy', matchUnsigned);\n    addRegexToken('yyyy', matchUnsigned);\n    addRegexToken('yo', matchEraYearOrdinal);\n\n    addParseToken(['y', 'yy', 'yyy', 'yyyy'], YEAR);\n    addParseToken(['yo'], function (input, array, config, token) {\n        var match;\n        if (config._locale._eraYearOrdinalRegex) {\n            match = input.match(config._locale._eraYearOrdinalRegex);\n        }\n\n        if (config._locale.eraYearOrdinalParse) {\n            array[YEAR] = config._locale.eraYearOrdinalParse(input, match);\n        } else {\n            array[YEAR] = parseInt(input, 10);\n        }\n    });\n\n    function localeEras(m, format) {\n        var i,\n            l,\n            date,\n            eras = this._eras || getLocale('en')._eras;\n        for (i = 0, l = eras.length; i < l; ++i) {\n            switch (typeof eras[i].since) {\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].since).startOf('day');\n                    eras[i].since = date.valueOf();\n                    break;\n            }\n\n            switch (typeof eras[i].until) {\n                case 'undefined':\n                    eras[i].until = +Infinity;\n                    break;\n                case 'string':\n                    // truncate time\n                    date = hooks(eras[i].until).startOf('day').valueOf();\n                    eras[i].until = date.valueOf();\n                    break;\n            }\n        }\n        return eras;\n    }\n\n    function localeErasParse(eraName, format, strict) {\n        var i,\n            l,\n            eras = this.eras(),\n            name,\n            abbr,\n            narrow;\n        eraName = eraName.toUpperCase();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            name = eras[i].name.toUpperCase();\n            abbr = eras[i].abbr.toUpperCase();\n            narrow = eras[i].narrow.toUpperCase();\n\n            if (strict) {\n                switch (format) {\n                    case 'N':\n                    case 'NN':\n                    case 'NNN':\n                        if (abbr === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNN':\n                        if (name === eraName) {\n                            return eras[i];\n                        }\n                        break;\n\n                    case 'NNNNN':\n                        if (narrow === eraName) {\n                            return eras[i];\n                        }\n                        break;\n                }\n            } else if ([name, abbr, narrow].indexOf(eraName) >= 0) {\n                return eras[i];\n            }\n        }\n    }\n\n    function localeErasConvertYear(era, year) {\n        var dir = era.since <= era.until ? +1 : -1;\n        if (year === undefined) {\n            return hooks(era.since).year();\n        } else {\n            return hooks(era.since).year() + (year - era.offset) * dir;\n        }\n    }\n\n    function getEraName() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].name;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].name;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraNarrow() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].narrow;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].narrow;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraAbbr() {\n        var i,\n            l,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (eras[i].since <= val && val <= eras[i].until) {\n                return eras[i].abbr;\n            }\n            if (eras[i].until <= val && val <= eras[i].since) {\n                return eras[i].abbr;\n            }\n        }\n\n        return '';\n    }\n\n    function getEraYear() {\n        var i,\n            l,\n            dir,\n            val,\n            eras = this.localeData().eras();\n        for (i = 0, l = eras.length; i < l; ++i) {\n            dir = eras[i].since <= eras[i].until ? +1 : -1;\n\n            // truncate time\n            val = this.clone().startOf('day').valueOf();\n\n            if (\n                (eras[i].since <= val && val <= eras[i].until) ||\n                (eras[i].until <= val && val <= eras[i].since)\n            ) {\n                return (\n                    (this.year() - hooks(eras[i].since).year()) * dir +\n                    eras[i].offset\n                );\n            }\n        }\n\n        return this.year();\n    }\n\n    function erasNameRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNameRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNameRegex : this._erasRegex;\n    }\n\n    function erasAbbrRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasAbbrRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasAbbrRegex : this._erasRegex;\n    }\n\n    function erasNarrowRegex(isStrict) {\n        if (!hasOwnProp(this, '_erasNarrowRegex')) {\n            computeErasParse.call(this);\n        }\n        return isStrict ? this._erasNarrowRegex : this._erasRegex;\n    }\n\n    function matchEraAbbr(isStrict, locale) {\n        return locale.erasAbbrRegex(isStrict);\n    }\n\n    function matchEraName(isStrict, locale) {\n        return locale.erasNameRegex(isStrict);\n    }\n\n    function matchEraNarrow(isStrict, locale) {\n        return locale.erasNarrowRegex(isStrict);\n    }\n\n    function matchEraYearOrdinal(isStrict, locale) {\n        return locale._eraYearOrdinalRegex || matchUnsigned;\n    }\n\n    function computeErasParse() {\n        var abbrPieces = [],\n            namePieces = [],\n            narrowPieces = [],\n            mixedPieces = [],\n            i,\n            l,\n            eras = this.eras();\n\n        for (i = 0, l = eras.length; i < l; ++i) {\n            namePieces.push(regexEscape(eras[i].name));\n            abbrPieces.push(regexEscape(eras[i].abbr));\n            narrowPieces.push(regexEscape(eras[i].narrow));\n\n            mixedPieces.push(regexEscape(eras[i].name));\n            mixedPieces.push(regexEscape(eras[i].abbr));\n            mixedPieces.push(regexEscape(eras[i].narrow));\n        }\n\n        this._erasRegex = new RegExp('^(' + mixedPieces.join('|') + ')', 'i');\n        this._erasNameRegex = new RegExp('^(' + namePieces.join('|') + ')', 'i');\n        this._erasAbbrRegex = new RegExp('^(' + abbrPieces.join('|') + ')', 'i');\n        this._erasNarrowRegex = new RegExp(\n            '^(' + narrowPieces.join('|') + ')',\n            'i'\n        );\n    }\n\n    // FORMATTING\n\n    addFormatToken(0, ['gg', 2], 0, function () {\n        return this.weekYear() % 100;\n    });\n\n    addFormatToken(0, ['GG', 2], 0, function () {\n        return this.isoWeekYear() % 100;\n    });\n\n    function addWeekYearFormatToken(token, getter) {\n        addFormatToken(0, [token, token.length], 0, getter);\n    }\n\n    addWeekYearFormatToken('gggg', 'weekYear');\n    addWeekYearFormatToken('ggggg', 'weekYear');\n    addWeekYearFormatToken('GGGG', 'isoWeekYear');\n    addWeekYearFormatToken('GGGGG', 'isoWeekYear');\n\n    // ALIASES\n\n    addUnitAlias('weekYear', 'gg');\n    addUnitAlias('isoWeekYear', 'GG');\n\n    // PRIORITY\n\n    addUnitPriority('weekYear', 1);\n    addUnitPriority('isoWeekYear', 1);\n\n    // PARSING\n\n    addRegexToken('G', matchSigned);\n    addRegexToken('g', matchSigned);\n    addRegexToken('GG', match1to2, match2);\n    addRegexToken('gg', match1to2, match2);\n    addRegexToken('GGGG', match1to4, match4);\n    addRegexToken('gggg', match1to4, match4);\n    addRegexToken('GGGGG', match1to6, match6);\n    addRegexToken('ggggg', match1to6, match6);\n\n    addWeekParseToken(\n        ['gggg', 'ggggg', 'GGGG', 'GGGGG'],\n        function (input, week, config, token) {\n            week[token.substr(0, 2)] = toInt(input);\n        }\n    );\n\n    addWeekParseToken(['gg', 'GG'], function (input, week, config, token) {\n        week[token] = hooks.parseTwoDigitYear(input);\n    });\n\n    // MOMENTS\n\n    function getSetWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.week(),\n            this.weekday(),\n            this.localeData()._week.dow,\n            this.localeData()._week.doy\n        );\n    }\n\n    function getSetISOWeekYear(input) {\n        return getSetWeekYearHelper.call(\n            this,\n            input,\n            this.isoWeek(),\n            this.isoWeekday(),\n            1,\n            4\n        );\n    }\n\n    function getISOWeeksInYear() {\n        return weeksInYear(this.year(), 1, 4);\n    }\n\n    function getISOWeeksInISOWeekYear() {\n        return weeksInYear(this.isoWeekYear(), 1, 4);\n    }\n\n    function getWeeksInYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.year(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getWeeksInWeekYear() {\n        var weekInfo = this.localeData()._week;\n        return weeksInYear(this.weekYear(), weekInfo.dow, weekInfo.doy);\n    }\n\n    function getSetWeekYearHelper(input, week, weekday, dow, doy) {\n        var weeksTarget;\n        if (input == null) {\n            return weekOfYear(this, dow, doy).year;\n        } else {\n            weeksTarget = weeksInYear(input, dow, doy);\n            if (week > weeksTarget) {\n                week = weeksTarget;\n            }\n            return setWeekAll.call(this, input, week, weekday, dow, doy);\n        }\n    }\n\n    function setWeekAll(weekYear, week, weekday, dow, doy) {\n        var dayOfYearData = dayOfYearFromWeeks(weekYear, week, weekday, dow, doy),\n            date = createUTCDate(dayOfYearData.year, 0, dayOfYearData.dayOfYear);\n\n        this.year(date.getUTCFullYear());\n        this.month(date.getUTCMonth());\n        this.date(date.getUTCDate());\n        return this;\n    }\n\n    // FORMATTING\n\n    addFormatToken('Q', 0, 'Qo', 'quarter');\n\n    // ALIASES\n\n    addUnitAlias('quarter', 'Q');\n\n    // PRIORITY\n\n    addUnitPriority('quarter', 7);\n\n    // PARSING\n\n    addRegexToken('Q', match1);\n    addParseToken('Q', function (input, array) {\n        array[MONTH] = (toInt(input) - 1) * 3;\n    });\n\n    // MOMENTS\n\n    function getSetQuarter(input) {\n        return input == null\n            ? Math.ceil((this.month() + 1) / 3)\n            : this.month((input - 1) * 3 + (this.month() % 3));\n    }\n\n    // FORMATTING\n\n    addFormatToken('D', ['DD', 2], 'Do', 'date');\n\n    // ALIASES\n\n    addUnitAlias('date', 'D');\n\n    // PRIORITY\n    addUnitPriority('date', 9);\n\n    // PARSING\n\n    addRegexToken('D', match1to2);\n    addRegexToken('DD', match1to2, match2);\n    addRegexToken('Do', function (isStrict, locale) {\n        // TODO: Remove \"ordinalParse\" fallback in next major release.\n        return isStrict\n            ? locale._dayOfMonthOrdinalParse || locale._ordinalParse\n            : locale._dayOfMonthOrdinalParseLenient;\n    });\n\n    addParseToken(['D', 'DD'], DATE);\n    addParseToken('Do', function (input, array) {\n        array[DATE] = toInt(input.match(match1to2)[0]);\n    });\n\n    // MOMENTS\n\n    var getSetDayOfMonth = makeGetSet('Date', true);\n\n    // FORMATTING\n\n    addFormatToken('DDD', ['DDDD', 3], 'DDDo', 'dayOfYear');\n\n    // ALIASES\n\n    addUnitAlias('dayOfYear', 'DDD');\n\n    // PRIORITY\n    addUnitPriority('dayOfYear', 4);\n\n    // PARSING\n\n    addRegexToken('DDD', match1to3);\n    addRegexToken('DDDD', match3);\n    addParseToken(['DDD', 'DDDD'], function (input, array, config) {\n        config._dayOfYear = toInt(input);\n    });\n\n    // HELPERS\n\n    // MOMENTS\n\n    function getSetDayOfYear(input) {\n        var dayOfYear =\n            Math.round(\n                (this.clone().startOf('day') - this.clone().startOf('year')) / 864e5\n            ) + 1;\n        return input == null ? dayOfYear : this.add(input - dayOfYear, 'd');\n    }\n\n    // FORMATTING\n\n    addFormatToken('m', ['mm', 2], 0, 'minute');\n\n    // ALIASES\n\n    addUnitAlias('minute', 'm');\n\n    // PRIORITY\n\n    addUnitPriority('minute', 14);\n\n    // PARSING\n\n    addRegexToken('m', match1to2);\n    addRegexToken('mm', match1to2, match2);\n    addParseToken(['m', 'mm'], MINUTE);\n\n    // MOMENTS\n\n    var getSetMinute = makeGetSet('Minutes', false);\n\n    // FORMATTING\n\n    addFormatToken('s', ['ss', 2], 0, 'second');\n\n    // ALIASES\n\n    addUnitAlias('second', 's');\n\n    // PRIORITY\n\n    addUnitPriority('second', 15);\n\n    // PARSING\n\n    addRegexToken('s', match1to2);\n    addRegexToken('ss', match1to2, match2);\n    addParseToken(['s', 'ss'], SECOND);\n\n    // MOMENTS\n\n    var getSetSecond = makeGetSet('Seconds', false);\n\n    // FORMATTING\n\n    addFormatToken('S', 0, 0, function () {\n        return ~~(this.millisecond() / 100);\n    });\n\n    addFormatToken(0, ['SS', 2], 0, function () {\n        return ~~(this.millisecond() / 10);\n    });\n\n    addFormatToken(0, ['SSS', 3], 0, 'millisecond');\n    addFormatToken(0, ['SSSS', 4], 0, function () {\n        return this.millisecond() * 10;\n    });\n    addFormatToken(0, ['SSSSS', 5], 0, function () {\n        return this.millisecond() * 100;\n    });\n    addFormatToken(0, ['SSSSSS', 6], 0, function () {\n        return this.millisecond() * 1000;\n    });\n    addFormatToken(0, ['SSSSSSS', 7], 0, function () {\n        return this.millisecond() * 10000;\n    });\n    addFormatToken(0, ['SSSSSSSS', 8], 0, function () {\n        return this.millisecond() * 100000;\n    });\n    addFormatToken(0, ['SSSSSSSSS', 9], 0, function () {\n        return this.millisecond() * 1000000;\n    });\n\n    // ALIASES\n\n    addUnitAlias('millisecond', 'ms');\n\n    // PRIORITY\n\n    addUnitPriority('millisecond', 16);\n\n    // PARSING\n\n    addRegexToken('S', match1to3, match1);\n    addRegexToken('SS', match1to3, match2);\n    addRegexToken('SSS', match1to3, match3);\n\n    var token, getSetMillisecond;\n    for (token = 'SSSS'; token.length <= 9; token += 'S') {\n        addRegexToken(token, matchUnsigned);\n    }\n\n    function parseMs(input, array) {\n        array[MILLISECOND] = toInt(('0.' + input) * 1000);\n    }\n\n    for (token = 'S'; token.length <= 9; token += 'S') {\n        addParseToken(token, parseMs);\n    }\n\n    getSetMillisecond = makeGetSet('Milliseconds', false);\n\n    // FORMATTING\n\n    addFormatToken('z', 0, 0, 'zoneAbbr');\n    addFormatToken('zz', 0, 0, 'zoneName');\n\n    // MOMENTS\n\n    function getZoneAbbr() {\n        return this._isUTC ? 'UTC' : '';\n    }\n\n    function getZoneName() {\n        return this._isUTC ? 'Coordinated Universal Time' : '';\n    }\n\n    var proto = Moment.prototype;\n\n    proto.add = add;\n    proto.calendar = calendar$1;\n    proto.clone = clone;\n    proto.diff = diff;\n    proto.endOf = endOf;\n    proto.format = format;\n    proto.from = from;\n    proto.fromNow = fromNow;\n    proto.to = to;\n    proto.toNow = toNow;\n    proto.get = stringGet;\n    proto.invalidAt = invalidAt;\n    proto.isAfter = isAfter;\n    proto.isBefore = isBefore;\n    proto.isBetween = isBetween;\n    proto.isSame = isSame;\n    proto.isSameOrAfter = isSameOrAfter;\n    proto.isSameOrBefore = isSameOrBefore;\n    proto.isValid = isValid$2;\n    proto.lang = lang;\n    proto.locale = locale;\n    proto.localeData = localeData;\n    proto.max = prototypeMax;\n    proto.min = prototypeMin;\n    proto.parsingFlags = parsingFlags;\n    proto.set = stringSet;\n    proto.startOf = startOf;\n    proto.subtract = subtract;\n    proto.toArray = toArray;\n    proto.toObject = toObject;\n    proto.toDate = toDate;\n    proto.toISOString = toISOString;\n    proto.inspect = inspect;\n    if (typeof Symbol !== 'undefined' && Symbol.for != null) {\n        proto[Symbol.for('nodejs.util.inspect.custom')] = function () {\n            return 'Moment<' + this.format() + '>';\n        };\n    }\n    proto.toJSON = toJSON;\n    proto.toString = toString;\n    proto.unix = unix;\n    proto.valueOf = valueOf;\n    proto.creationData = creationData;\n    proto.eraName = getEraName;\n    proto.eraNarrow = getEraNarrow;\n    proto.eraAbbr = getEraAbbr;\n    proto.eraYear = getEraYear;\n    proto.year = getSetYear;\n    proto.isLeapYear = getIsLeapYear;\n    proto.weekYear = getSetWeekYear;\n    proto.isoWeekYear = getSetISOWeekYear;\n    proto.quarter = proto.quarters = getSetQuarter;\n    proto.month = getSetMonth;\n    proto.daysInMonth = getDaysInMonth;\n    proto.week = proto.weeks = getSetWeek;\n    proto.isoWeek = proto.isoWeeks = getSetISOWeek;\n    proto.weeksInYear = getWeeksInYear;\n    proto.weeksInWeekYear = getWeeksInWeekYear;\n    proto.isoWeeksInYear = getISOWeeksInYear;\n    proto.isoWeeksInISOWeekYear = getISOWeeksInISOWeekYear;\n    proto.date = getSetDayOfMonth;\n    proto.day = proto.days = getSetDayOfWeek;\n    proto.weekday = getSetLocaleDayOfWeek;\n    proto.isoWeekday = getSetISODayOfWeek;\n    proto.dayOfYear = getSetDayOfYear;\n    proto.hour = proto.hours = getSetHour;\n    proto.minute = proto.minutes = getSetMinute;\n    proto.second = proto.seconds = getSetSecond;\n    proto.millisecond = proto.milliseconds = getSetMillisecond;\n    proto.utcOffset = getSetOffset;\n    proto.utc = setOffsetToUTC;\n    proto.local = setOffsetToLocal;\n    proto.parseZone = setOffsetToParsedOffset;\n    proto.hasAlignedHourOffset = hasAlignedHourOffset;\n    proto.isDST = isDaylightSavingTime;\n    proto.isLocal = isLocal;\n    proto.isUtcOffset = isUtcOffset;\n    proto.isUtc = isUtc;\n    proto.isUTC = isUtc;\n    proto.zoneAbbr = getZoneAbbr;\n    proto.zoneName = getZoneName;\n    proto.dates = deprecate(\n        'dates accessor is deprecated. Use date instead.',\n        getSetDayOfMonth\n    );\n    proto.months = deprecate(\n        'months accessor is deprecated. Use month instead',\n        getSetMonth\n    );\n    proto.years = deprecate(\n        'years accessor is deprecated. Use year instead',\n        getSetYear\n    );\n    proto.zone = deprecate(\n        'moment().zone is deprecated, use moment().utcOffset instead. http://momentjs.com/guides/#/warnings/zone/',\n        getSetZone\n    );\n    proto.isDSTShifted = deprecate(\n        'isDSTShifted is deprecated. See http://momentjs.com/guides/#/warnings/dst-shifted/ for more information',\n        isDaylightSavingTimeShifted\n    );\n\n    function createUnix(input) {\n        return createLocal(input * 1000);\n    }\n\n    function createInZone() {\n        return createLocal.apply(null, arguments).parseZone();\n    }\n\n    function preParsePostFormat(string) {\n        return string;\n    }\n\n    var proto$1 = Locale.prototype;\n\n    proto$1.calendar = calendar;\n    proto$1.longDateFormat = longDateFormat;\n    proto$1.invalidDate = invalidDate;\n    proto$1.ordinal = ordinal;\n    proto$1.preparse = preParsePostFormat;\n    proto$1.postformat = preParsePostFormat;\n    proto$1.relativeTime = relativeTime;\n    proto$1.pastFuture = pastFuture;\n    proto$1.set = set;\n    proto$1.eras = localeEras;\n    proto$1.erasParse = localeErasParse;\n    proto$1.erasConvertYear = localeErasConvertYear;\n    proto$1.erasAbbrRegex = erasAbbrRegex;\n    proto$1.erasNameRegex = erasNameRegex;\n    proto$1.erasNarrowRegex = erasNarrowRegex;\n\n    proto$1.months = localeMonths;\n    proto$1.monthsShort = localeMonthsShort;\n    proto$1.monthsParse = localeMonthsParse;\n    proto$1.monthsRegex = monthsRegex;\n    proto$1.monthsShortRegex = monthsShortRegex;\n    proto$1.week = localeWeek;\n    proto$1.firstDayOfYear = localeFirstDayOfYear;\n    proto$1.firstDayOfWeek = localeFirstDayOfWeek;\n\n    proto$1.weekdays = localeWeekdays;\n    proto$1.weekdaysMin = localeWeekdaysMin;\n    proto$1.weekdaysShort = localeWeekdaysShort;\n    proto$1.weekdaysParse = localeWeekdaysParse;\n\n    proto$1.weekdaysRegex = weekdaysRegex;\n    proto$1.weekdaysShortRegex = weekdaysShortRegex;\n    proto$1.weekdaysMinRegex = weekdaysMinRegex;\n\n    proto$1.isPM = localeIsPM;\n    proto$1.meridiem = localeMeridiem;\n\n    function get$1(format, index, field, setter) {\n        var locale = getLocale(),\n            utc = createUTC().set(setter, index);\n        return locale[field](utc, format);\n    }\n\n    function listMonthsImpl(format, index, field) {\n        if (isNumber(format)) {\n            index = format;\n            format = undefined;\n        }\n\n        format = format || '';\n\n        if (index != null) {\n            return get$1(format, index, field, 'month');\n        }\n\n        var i,\n            out = [];\n        for (i = 0; i < 12; i++) {\n            out[i] = get$1(format, i, field, 'month');\n        }\n        return out;\n    }\n\n    // ()\n    // (5)\n    // (fmt, 5)\n    // (fmt)\n    // (true)\n    // (true, 5)\n    // (true, fmt, 5)\n    // (true, fmt)\n    function listWeekdaysImpl(localeSorted, format, index, field) {\n        if (typeof localeSorted === 'boolean') {\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        } else {\n            format = localeSorted;\n            index = format;\n            localeSorted = false;\n\n            if (isNumber(format)) {\n                index = format;\n                format = undefined;\n            }\n\n            format = format || '';\n        }\n\n        var locale = getLocale(),\n            shift = localeSorted ? locale._week.dow : 0,\n            i,\n            out = [];\n\n        if (index != null) {\n            return get$1(format, (index + shift) % 7, field, 'day');\n        }\n\n        for (i = 0; i < 7; i++) {\n            out[i] = get$1(format, (i + shift) % 7, field, 'day');\n        }\n        return out;\n    }\n\n    function listMonths(format, index) {\n        return listMonthsImpl(format, index, 'months');\n    }\n\n    function listMonthsShort(format, index) {\n        return listMonthsImpl(format, index, 'monthsShort');\n    }\n\n    function listWeekdays(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdays');\n    }\n\n    function listWeekdaysShort(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysShort');\n    }\n\n    function listWeekdaysMin(localeSorted, format, index) {\n        return listWeekdaysImpl(localeSorted, format, index, 'weekdaysMin');\n    }\n\n    getSetGlobalLocale('en', {\n        eras: [\n            {\n                since: '0001-01-01',\n                until: +Infinity,\n                offset: 1,\n                name: 'Anno Domini',\n                narrow: 'AD',\n                abbr: 'AD',\n            },\n            {\n                since: '0000-12-31',\n                until: -Infinity,\n                offset: 1,\n                name: 'Before Christ',\n                narrow: 'BC',\n                abbr: 'BC',\n            },\n        ],\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    toInt((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n    });\n\n    // Side effect imports\n\n    hooks.lang = deprecate(\n        'moment.lang is deprecated. Use moment.locale instead.',\n        getSetGlobalLocale\n    );\n    hooks.langData = deprecate(\n        'moment.langData is deprecated. Use moment.localeData instead.',\n        getLocale\n    );\n\n    var mathAbs = Math.abs;\n\n    function abs() {\n        var data = this._data;\n\n        this._milliseconds = mathAbs(this._milliseconds);\n        this._days = mathAbs(this._days);\n        this._months = mathAbs(this._months);\n\n        data.milliseconds = mathAbs(data.milliseconds);\n        data.seconds = mathAbs(data.seconds);\n        data.minutes = mathAbs(data.minutes);\n        data.hours = mathAbs(data.hours);\n        data.months = mathAbs(data.months);\n        data.years = mathAbs(data.years);\n\n        return this;\n    }\n\n    function addSubtract$1(duration, input, value, direction) {\n        var other = createDuration(input, value);\n\n        duration._milliseconds += direction * other._milliseconds;\n        duration._days += direction * other._days;\n        duration._months += direction * other._months;\n\n        return duration._bubble();\n    }\n\n    // supports only 2.0-style add(1, 's') or add(duration)\n    function add$1(input, value) {\n        return addSubtract$1(this, input, value, 1);\n    }\n\n    // supports only 2.0-style subtract(1, 's') or subtract(duration)\n    function subtract$1(input, value) {\n        return addSubtract$1(this, input, value, -1);\n    }\n\n    function absCeil(number) {\n        if (number < 0) {\n            return Math.floor(number);\n        } else {\n            return Math.ceil(number);\n        }\n    }\n\n    function bubble() {\n        var milliseconds = this._milliseconds,\n            days = this._days,\n            months = this._months,\n            data = this._data,\n            seconds,\n            minutes,\n            hours,\n            years,\n            monthsFromDays;\n\n        // if we have a mix of positive and negative values, bubble down first\n        // check: https://github.com/moment/moment/issues/2166\n        if (\n            !(\n                (milliseconds >= 0 && days >= 0 && months >= 0) ||\n                (milliseconds <= 0 && days <= 0 && months <= 0)\n            )\n        ) {\n            milliseconds += absCeil(monthsToDays(months) + days) * 864e5;\n            days = 0;\n            months = 0;\n        }\n\n        // The following code bubbles up values, see the tests for\n        // examples of what that means.\n        data.milliseconds = milliseconds % 1000;\n\n        seconds = absFloor(milliseconds / 1000);\n        data.seconds = seconds % 60;\n\n        minutes = absFloor(seconds / 60);\n        data.minutes = minutes % 60;\n\n        hours = absFloor(minutes / 60);\n        data.hours = hours % 24;\n\n        days += absFloor(hours / 24);\n\n        // convert days to months\n        monthsFromDays = absFloor(daysToMonths(days));\n        months += monthsFromDays;\n        days -= absCeil(monthsToDays(monthsFromDays));\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        data.days = days;\n        data.months = months;\n        data.years = years;\n\n        return this;\n    }\n\n    function daysToMonths(days) {\n        // 400 years have 146097 days (taking into account leap year rules)\n        // 400 years have 12 months === 4800\n        return (days * 4800) / 146097;\n    }\n\n    function monthsToDays(months) {\n        // the reverse of daysToMonths\n        return (months * 146097) / 4800;\n    }\n\n    function as(units) {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        var days,\n            months,\n            milliseconds = this._milliseconds;\n\n        units = normalizeUnits(units);\n\n        if (units === 'month' || units === 'quarter' || units === 'year') {\n            days = this._days + milliseconds / 864e5;\n            months = this._months + daysToMonths(days);\n            switch (units) {\n                case 'month':\n                    return months;\n                case 'quarter':\n                    return months / 3;\n                case 'year':\n                    return months / 12;\n            }\n        } else {\n            // handle milliseconds separately because of floating point math errors (issue #1867)\n            days = this._days + Math.round(monthsToDays(this._months));\n            switch (units) {\n                case 'week':\n                    return days / 7 + milliseconds / 6048e5;\n                case 'day':\n                    return days + milliseconds / 864e5;\n                case 'hour':\n                    return days * 24 + milliseconds / 36e5;\n                case 'minute':\n                    return days * 1440 + milliseconds / 6e4;\n                case 'second':\n                    return days * 86400 + milliseconds / 1000;\n                // Math.floor prevents floating point math errors here\n                case 'millisecond':\n                    return Math.floor(days * 864e5) + milliseconds;\n                default:\n                    throw new Error('Unknown unit ' + units);\n            }\n        }\n    }\n\n    // TODO: Use this.as('ms')?\n    function valueOf$1() {\n        if (!this.isValid()) {\n            return NaN;\n        }\n        return (\n            this._milliseconds +\n            this._days * 864e5 +\n            (this._months % 12) * 2592e6 +\n            toInt(this._months / 12) * 31536e6\n        );\n    }\n\n    function makeAs(alias) {\n        return function () {\n            return this.as(alias);\n        };\n    }\n\n    var asMilliseconds = makeAs('ms'),\n        asSeconds = makeAs('s'),\n        asMinutes = makeAs('m'),\n        asHours = makeAs('h'),\n        asDays = makeAs('d'),\n        asWeeks = makeAs('w'),\n        asMonths = makeAs('M'),\n        asQuarters = makeAs('Q'),\n        asYears = makeAs('y');\n\n    function clone$1() {\n        return createDuration(this);\n    }\n\n    function get$2(units) {\n        units = normalizeUnits(units);\n        return this.isValid() ? this[units + 's']() : NaN;\n    }\n\n    function makeGetter(name) {\n        return function () {\n            return this.isValid() ? this._data[name] : NaN;\n        };\n    }\n\n    var milliseconds = makeGetter('milliseconds'),\n        seconds = makeGetter('seconds'),\n        minutes = makeGetter('minutes'),\n        hours = makeGetter('hours'),\n        days = makeGetter('days'),\n        months = makeGetter('months'),\n        years = makeGetter('years');\n\n    function weeks() {\n        return absFloor(this.days() / 7);\n    }\n\n    var round = Math.round,\n        thresholds = {\n            ss: 44, // a few seconds to seconds\n            s: 45, // seconds to minute\n            m: 45, // minutes to hour\n            h: 22, // hours to day\n            d: 26, // days to month/week\n            w: null, // weeks to month\n            M: 11, // months to year\n        };\n\n    // helper function for moment.fn.from, moment.fn.fromNow, and moment.duration.fn.humanize\n    function substituteTimeAgo(string, number, withoutSuffix, isFuture, locale) {\n        return locale.relativeTime(number || 1, !!withoutSuffix, string, isFuture);\n    }\n\n    function relativeTime$1(posNegDuration, withoutSuffix, thresholds, locale) {\n        var duration = createDuration(posNegDuration).abs(),\n            seconds = round(duration.as('s')),\n            minutes = round(duration.as('m')),\n            hours = round(duration.as('h')),\n            days = round(duration.as('d')),\n            months = round(duration.as('M')),\n            weeks = round(duration.as('w')),\n            years = round(duration.as('y')),\n            a =\n                (seconds <= thresholds.ss && ['s', seconds]) ||\n                (seconds < thresholds.s && ['ss', seconds]) ||\n                (minutes <= 1 && ['m']) ||\n                (minutes < thresholds.m && ['mm', minutes]) ||\n                (hours <= 1 && ['h']) ||\n                (hours < thresholds.h && ['hh', hours]) ||\n                (days <= 1 && ['d']) ||\n                (days < thresholds.d && ['dd', days]);\n\n        if (thresholds.w != null) {\n            a =\n                a ||\n                (weeks <= 1 && ['w']) ||\n                (weeks < thresholds.w && ['ww', weeks]);\n        }\n        a = a ||\n            (months <= 1 && ['M']) ||\n            (months < thresholds.M && ['MM', months]) ||\n            (years <= 1 && ['y']) || ['yy', years];\n\n        a[2] = withoutSuffix;\n        a[3] = +posNegDuration > 0;\n        a[4] = locale;\n        return substituteTimeAgo.apply(null, a);\n    }\n\n    // This function allows you to set the rounding function for relative time strings\n    function getSetRelativeTimeRounding(roundingFunction) {\n        if (roundingFunction === undefined) {\n            return round;\n        }\n        if (typeof roundingFunction === 'function') {\n            round = roundingFunction;\n            return true;\n        }\n        return false;\n    }\n\n    // This function allows you to set a threshold for relative time strings\n    function getSetRelativeTimeThreshold(threshold, limit) {\n        if (thresholds[threshold] === undefined) {\n            return false;\n        }\n        if (limit === undefined) {\n            return thresholds[threshold];\n        }\n        thresholds[threshold] = limit;\n        if (threshold === 's') {\n            thresholds.ss = limit - 1;\n        }\n        return true;\n    }\n\n    function humanize(argWithSuffix, argThresholds) {\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var withSuffix = false,\n            th = thresholds,\n            locale,\n            output;\n\n        if (typeof argWithSuffix === 'object') {\n            argThresholds = argWithSuffix;\n            argWithSuffix = false;\n        }\n        if (typeof argWithSuffix === 'boolean') {\n            withSuffix = argWithSuffix;\n        }\n        if (typeof argThresholds === 'object') {\n            th = Object.assign({}, thresholds, argThresholds);\n            if (argThresholds.s != null && argThresholds.ss == null) {\n                th.ss = argThresholds.s - 1;\n            }\n        }\n\n        locale = this.localeData();\n        output = relativeTime$1(this, !withSuffix, th, locale);\n\n        if (withSuffix) {\n            output = locale.pastFuture(+this, output);\n        }\n\n        return locale.postformat(output);\n    }\n\n    var abs$1 = Math.abs;\n\n    function sign(x) {\n        return (x > 0) - (x < 0) || +x;\n    }\n\n    function toISOString$1() {\n        // for ISO strings we do not use the normal bubbling rules:\n        //  * milliseconds bubble up until they become hours\n        //  * days do not bubble at all\n        //  * months bubble up until they become years\n        // This is because there is no context-free conversion between hours and days\n        // (think of clock changes)\n        // and also not between days and months (28-31 days per month)\n        if (!this.isValid()) {\n            return this.localeData().invalidDate();\n        }\n\n        var seconds = abs$1(this._milliseconds) / 1000,\n            days = abs$1(this._days),\n            months = abs$1(this._months),\n            minutes,\n            hours,\n            years,\n            s,\n            total = this.asSeconds(),\n            totalSign,\n            ymSign,\n            daysSign,\n            hmsSign;\n\n        if (!total) {\n            // this is the same as C#'s (Noda) and python (isodate)...\n            // but not other JS (goog.date)\n            return 'P0D';\n        }\n\n        // 3600 seconds -> 60 minutes -> 1 hour\n        minutes = absFloor(seconds / 60);\n        hours = absFloor(minutes / 60);\n        seconds %= 60;\n        minutes %= 60;\n\n        // 12 months -> 1 year\n        years = absFloor(months / 12);\n        months %= 12;\n\n        // inspired by https://github.com/dordille/moment-isoduration/blob/master/moment.isoduration.js\n        s = seconds ? seconds.toFixed(3).replace(/\\.?0+$/, '') : '';\n\n        totalSign = total < 0 ? '-' : '';\n        ymSign = sign(this._months) !== sign(total) ? '-' : '';\n        daysSign = sign(this._days) !== sign(total) ? '-' : '';\n        hmsSign = sign(this._milliseconds) !== sign(total) ? '-' : '';\n\n        return (\n            totalSign +\n            'P' +\n            (years ? ymSign + years + 'Y' : '') +\n            (months ? ymSign + months + 'M' : '') +\n            (days ? daysSign + days + 'D' : '') +\n            (hours || minutes || seconds ? 'T' : '') +\n            (hours ? hmsSign + hours + 'H' : '') +\n            (minutes ? hmsSign + minutes + 'M' : '') +\n            (seconds ? hmsSign + s + 'S' : '')\n        );\n    }\n\n    var proto$2 = Duration.prototype;\n\n    proto$2.isValid = isValid$1;\n    proto$2.abs = abs;\n    proto$2.add = add$1;\n    proto$2.subtract = subtract$1;\n    proto$2.as = as;\n    proto$2.asMilliseconds = asMilliseconds;\n    proto$2.asSeconds = asSeconds;\n    proto$2.asMinutes = asMinutes;\n    proto$2.asHours = asHours;\n    proto$2.asDays = asDays;\n    proto$2.asWeeks = asWeeks;\n    proto$2.asMonths = asMonths;\n    proto$2.asQuarters = asQuarters;\n    proto$2.asYears = asYears;\n    proto$2.valueOf = valueOf$1;\n    proto$2._bubble = bubble;\n    proto$2.clone = clone$1;\n    proto$2.get = get$2;\n    proto$2.milliseconds = milliseconds;\n    proto$2.seconds = seconds;\n    proto$2.minutes = minutes;\n    proto$2.hours = hours;\n    proto$2.days = days;\n    proto$2.weeks = weeks;\n    proto$2.months = months;\n    proto$2.years = years;\n    proto$2.humanize = humanize;\n    proto$2.toISOString = toISOString$1;\n    proto$2.toString = toISOString$1;\n    proto$2.toJSON = toISOString$1;\n    proto$2.locale = locale;\n    proto$2.localeData = localeData;\n\n    proto$2.toIsoString = deprecate(\n        'toIsoString() is deprecated. Please use toISOString() instead (notice the capitals)',\n        toISOString$1\n    );\n    proto$2.lang = lang;\n\n    // FORMATTING\n\n    addFormatToken('X', 0, 0, 'unix');\n    addFormatToken('x', 0, 0, 'valueOf');\n\n    // PARSING\n\n    addRegexToken('x', matchSigned);\n    addRegexToken('X', matchTimestamp);\n    addParseToken('X', function (input, array, config) {\n        config._d = new Date(parseFloat(input) * 1000);\n    });\n    addParseToken('x', function (input, array, config) {\n        config._d = new Date(toInt(input));\n    });\n\n    //! moment.js\n\n    hooks.version = '2.29.4';\n\n    setHookCallback(createLocal);\n\n    hooks.fn = proto;\n    hooks.min = min;\n    hooks.max = max;\n    hooks.now = now;\n    hooks.utc = createUTC;\n    hooks.unix = createUnix;\n    hooks.months = listMonths;\n    hooks.isDate = isDate;\n    hooks.locale = getSetGlobalLocale;\n    hooks.invalid = createInvalid;\n    hooks.duration = createDuration;\n    hooks.isMoment = isMoment;\n    hooks.weekdays = listWeekdays;\n    hooks.parseZone = createInZone;\n    hooks.localeData = getLocale;\n    hooks.isDuration = isDuration;\n    hooks.monthsShort = listMonthsShort;\n    hooks.weekdaysMin = listWeekdaysMin;\n    hooks.defineLocale = defineLocale;\n    hooks.updateLocale = updateLocale;\n    hooks.locales = listLocales;\n    hooks.weekdaysShort = listWeekdaysShort;\n    hooks.normalizeUnits = normalizeUnits;\n    hooks.relativeTimeRounding = getSetRelativeTimeRounding;\n    hooks.relativeTimeThreshold = getSetRelativeTimeThreshold;\n    hooks.calendarFormat = getCalendarFormat;\n    hooks.prototype = proto;\n\n    // currently HTML5 input type only supports 24-hour formats\n    hooks.HTML5_FMT = {\n        DATETIME_LOCAL: 'YYYY-MM-DDTHH:mm', // <input type=\"datetime-local\" />\n        DATETIME_LOCAL_SECONDS: 'YYYY-MM-DDTHH:mm:ss', // <input type=\"datetime-local\" step=\"1\" />\n        DATETIME_LOCAL_MS: 'YYYY-MM-DDTHH:mm:ss.SSS', // <input type=\"datetime-local\" step=\"0.001\" />\n        DATE: 'YYYY-MM-DD', // <input type=\"date\" />\n        TIME: 'HH:mm', // <input type=\"time\" />\n        TIME_SECONDS: 'HH:mm:ss', // <input type=\"time\" step=\"1\" />\n        TIME_MS: 'HH:mm:ss.SSS', // <input type=\"time\" step=\"0.001\" />\n        WEEK: 'GGGG-[W]WW', // <input type=\"week\" />\n        MONTH: 'YYYY-MM', // <input type=\"month\" />\n    };\n\n    return hooks;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { isZoomSet, setRange, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn, firstToLowerCase } from '../../common/utils/helper';\nimport { DataUtil } from '@syncfusion/ej2-data';\nimport { NiceInterval } from '../axis/axis-helper';\nimport { extend, getValue, isNullOrUndefined } from '@syncfusion/ej2-base';\n/**\n * `DateTime` module is used to render datetime axis.\n */\nvar DateTime = /** @class */ (function (_super) {\n    __extends(DateTime, _super);\n    /**\n     * Constructor for the dateTime module.\n     *\n     * @private\n     */\n    function DateTime(chart) {\n        return _super.call(this, chart) || this;\n    }\n    /**\n     * The function to calculate the range and labels for the axis.\n     *\n     * @returns {void}\n     */\n    DateTime.prototype.calculateRangeAndInterval = function (size, axis) {\n        this.calculateRange(axis);\n        this.getActualRange(axis, size);\n        this.applyRangePadding(axis, size);\n        this.calculateVisibleLabels(axis, this.chart);\n    };\n    /**\n     * Actual Range for the axis.\n     *\n     * @private\n     */\n    DateTime.prototype.getActualRange = function (axis, size) {\n        var option = {\n            skeleton: 'full',\n            type: 'dateTime'\n        };\n        var dateParser = this.chart.intl.getDateParser(option);\n        var dateFormatter = this.chart.intl.getDateFormat(option);\n        // Axis min\n        if ((axis.minimum) !== null) {\n            this.min = this.chart.isBlazor ? Date.parse(axis.minimum.toString()) : Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: axis.minimum }).val))));\n        }\n        else if (this.min === null || this.min === Number.POSITIVE_INFINITY) {\n            this.min = Date.parse(dateParser(dateFormatter(new Date(1970, 1, 1))));\n        }\n        // Axis Max\n        if ((axis.maximum) !== null) {\n            this.max = this.chart.isBlazor ? Date.parse(axis.maximum.toString()) : Date.parse(dateParser(dateFormatter(new Date(DataUtil.parse.parseJson({ val: axis.maximum }).val))));\n        }\n        else if (this.max === null || this.max === Number.NEGATIVE_INFINITY) {\n            this.max = Date.parse(dateParser(dateFormatter(new Date(1970, 5, 1))));\n        }\n        if (this.min === this.max) {\n            this.max = this.max + 2592000000;\n            this.min = this.min - 2592000000;\n        }\n        axis.actualRange = {};\n        axis.doubleRange = new DoubleRange(this.min, this.max);\n        var datetimeInterval = this.calculateDateTimeNiceInterval(axis, size, axis.doubleRange.start, axis.doubleRange.end);\n        if (!axis.interval) {\n            axis.actualRange.interval = datetimeInterval;\n        }\n        else {\n            axis.actualRange.interval = axis.interval;\n        }\n        axis.actualRange.min = axis.doubleRange.start;\n        axis.actualRange.max = axis.doubleRange.end;\n    };\n    /**\n     * Apply padding for the range.\n     *\n     * @private\n     */\n    DateTime.prototype.applyRangePadding = function (axis, size) {\n        this.min = (axis.actualRange.min);\n        this.max = (axis.actualRange.max);\n        var minimum;\n        var maximum;\n        var interval = axis.actualRange.interval;\n        if (!setRange(axis)) {\n            var rangePadding = axis.getRangePadding(this.chart);\n            minimum = new Date(this.min);\n            maximum = new Date(this.max);\n            var intervalType = axis.actualIntervalType;\n            if (rangePadding === 'None') {\n                this.min = minimum.getTime();\n                this.max = maximum.getTime();\n            }\n            else if (rangePadding === 'Additional' || rangePadding === 'Round') {\n                switch (intervalType) {\n                    case 'Years':\n                        this.getYear(minimum, maximum, rangePadding, interval);\n                        break;\n                    case 'Months':\n                        this.getMonth(minimum, maximum, rangePadding, interval);\n                        break;\n                    case 'Days':\n                        this.getDay(minimum, maximum, rangePadding, interval);\n                        break;\n                    case 'Hours':\n                        this.getHour(minimum, maximum, rangePadding, interval);\n                        break;\n                    case 'Minutes':\n                        var minute = (minimum.getMinutes() / interval) * interval;\n                        var endMinute = maximum.getMinutes() + (minimum.getMinutes() - minute);\n                        if (rangePadding === 'Round') {\n                            this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minute, 0)).getTime();\n                            this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), endMinute, 59)).getTime();\n                        }\n                        else {\n                            this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minute + (-interval), 0)).getTime();\n                            this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), endMinute + (interval), 0)).getTime();\n                        }\n                        break;\n                    case 'Seconds':\n                        var second = (minimum.getSeconds() / interval) * interval;\n                        var endSecond = maximum.getSeconds() + (minimum.getSeconds() - second);\n                        if (rangePadding === 'Round') {\n                            this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second, 0)).getTime();\n                            this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), maximum.getMinutes(), endSecond, 0)).getTime();\n                        }\n                        else {\n                            this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), minimum.getHours(), minimum.getMinutes(), second + (-interval), 0)).getTime();\n                            this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), maximum.getHours(), maximum.getMinutes(), endSecond + (interval), 0)).getTime();\n                        }\n                        break;\n                }\n            }\n        }\n        axis.actualRange.min = (axis.minimum != null) ? this.min : this.min;\n        axis.actualRange.max = (axis.maximum != null) ? this.max : this.max;\n        axis.actualRange.delta = (axis.actualRange.max - axis.actualRange.min);\n        axis.doubleRange = new DoubleRange(axis.actualRange.min, axis.actualRange.max);\n        this.calculateVisibleRange(size, axis);\n    };\n    DateTime.prototype.getYear = function (minimum, maximum, rangePadding, interval) {\n        var startYear = minimum.getFullYear();\n        var endYear = maximum.getFullYear();\n        if (rangePadding === 'Additional') {\n            this.min = (new Date(startYear - interval, 1, 1, 0, 0, 0)).getTime();\n            this.max = (new Date(endYear + interval, 1, 1, 0, 0, 0)).getTime();\n        }\n        else {\n            this.min = new Date(startYear, 0, 0, 0, 0, 0).getTime();\n            this.max = new Date(endYear, 11, 30, 23, 59, 59).getTime();\n        }\n    };\n    DateTime.prototype.getMonth = function (minimum, maximum, rangePadding, interval) {\n        var month = minimum.getMonth();\n        var endMonth = maximum.getMonth();\n        if (rangePadding === 'Round') {\n            this.min = (new Date(minimum.getFullYear(), month, 0, 0, 0, 0)).getTime();\n            this.max = (new Date(maximum.getFullYear(), endMonth, new Date(maximum.getFullYear(), maximum.getMonth(), 0).getDate(), 23, 59, 59)).getTime();\n        }\n        else {\n            this.min = (new Date(minimum.getFullYear(), month + (-interval), 1, 0, 0, 0)).getTime();\n            this.max = (new Date(maximum.getFullYear(), endMonth + (interval), endMonth === 2 ? 28 : 30, 0, 0, 0)).getTime();\n        }\n    };\n    DateTime.prototype.getDay = function (minimum, maximum, rangePadding, interval) {\n        var day = minimum.getDate();\n        var endDay = maximum.getDate();\n        if (rangePadding === 'Round') {\n            this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), day, 0, 0, 0)).getTime();\n            this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), endDay, 23, 59, 59)).getTime();\n        }\n        else {\n            this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), day + (-interval), 0, 0, 0)).getTime();\n            this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), endDay + (interval), 0, 0, 0)).getTime();\n        }\n    };\n    DateTime.prototype.getHour = function (minimum, maximum, rangePadding, interval) {\n        var hour = (minimum.getHours() / interval) * interval;\n        var endHour = maximum.getHours() + (minimum.getHours() - hour);\n        if (rangePadding === 'Round') {\n            this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour, 0, 0)).getTime();\n            this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), endHour, 59, 59)).getTime();\n        }\n        else {\n            this.min = (new Date(minimum.getFullYear(), minimum.getMonth(), minimum.getDate(), hour + (-interval), 0, 0)).getTime();\n            this.max = (new Date(maximum.getFullYear(), maximum.getMonth(), maximum.getDate(), endHour + (interval), 0, 0)).getTime();\n        }\n    };\n    /**\n     * Calculate visible range for axis.\n     *\n     * @private\n     */\n    DateTime.prototype.calculateVisibleRange = function (size, axis) {\n        axis.visibleRange = {\n            min: axis.actualRange.min,\n            max: axis.actualRange.max,\n            interval: axis.actualRange.interval,\n            delta: axis.actualRange.delta\n        };\n        var isLazyLoad = isNullOrUndefined(axis.zoomingScrollBar) ? false : axis.zoomingScrollBar.isLazyLoad;\n        if ((isZoomSet(axis)) && !isLazyLoad) {\n            axis.calculateVisibleRangeOnZooming(size);\n            axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming) ?\n                this.calculateDateTimeNiceInterval(axis, size, axis.visibleRange.min, axis.visibleRange.max)\n                : axis.visibleRange.interval;\n        }\n        axis.dateTimeInterval = this.increaseDateTimeInterval(axis, axis.visibleRange.min, axis.visibleRange.interval).getTime()\n            - axis.visibleRange.min;\n        axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n    };\n    /**\n     * Calculate visible labels for the axis.\n     *\n     * @param {Axis} axis axis\n     * @param {Chart | RangeNavigator} chart chart\n     * @returns {void}\n     * @private\n     */\n    DateTime.prototype.calculateVisibleLabels = function (axis, chart) {\n        axis.visibleLabels = [];\n        var tempInterval = axis.visibleRange.min;\n        var labelStyle;\n        var previousValue;\n        var isBlazor = chart.getModuleName() === 'chart' ? chart.isBlazor : false;\n        var axisLabels = axis.visibleLabels;\n        if (!setRange(axis)) {\n            tempInterval = this.alignRangeStart(axis, tempInterval, axis.visibleRange.interval).getTime();\n        }\n        while (tempInterval <= axis.visibleRange.max) {\n            labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n            previousValue = axisLabels.length ? axis.visibleLabels[axisLabels.length - 1].value : tempInterval;\n            axis.format = chart.intl.getDateFormat({\n                format: this.findCustomFormats(axis, tempInterval, previousValue) || this.blazorCustomFormat(axis),\n                type: firstToLowerCase(axis.skeletonType),\n                skeleton: this.getSkeleton(axis, tempInterval, previousValue, isBlazor)\n            });\n            axis.startLabel = axis.format(new Date(axis.visibleRange.min));\n            axis.endLabel = axis.format(new Date(axis.visibleRange.max));\n            if (withIn(tempInterval, axis.visibleRange)) {\n                var interval = this.increaseDateTimeInterval(axis, tempInterval, axis.visibleRange.interval).getTime();\n                if (interval > axis.visibleRange.max) {\n                    axis.endLabel = axis.format(new Date(tempInterval));\n                }\n                triggerLabelRender(chart, tempInterval, axis.format(new Date(tempInterval)), labelStyle, axis);\n            }\n            var actualInterval = tempInterval;\n            tempInterval = this.increaseDateTimeInterval(axis, tempInterval, axis.visibleRange.interval).getTime();\n            if (actualInterval === tempInterval) {\n                break;\n            }\n        }\n        //tooltip and crosshair formats for 'Months' and 'Days' interval types\n        if ((axis.actualIntervalType === 'Months' || axis.actualIntervalType === 'Days') && axis.isChart) {\n            axis.format = chart.intl.getDateFormat({\n                format: axis.labelFormat || (axis.actualIntervalType === 'Months' && !axis.skeleton ? 'y MMM' : ''),\n                type: firstToLowerCase(axis.skeletonType), skeleton: axis.skeleton || (axis.actualIntervalType === 'Days' ? 'MMMd' : '')\n            });\n        }\n        if (axis.getMaxLabelWidth) {\n            axis.getMaxLabelWidth(this.chart);\n        }\n    };\n    /** @private */\n    DateTime.prototype.blazorCustomFormat = function (axis) {\n        if (this.chart.isBlazor) {\n            return axis.actualIntervalType === 'Years' ? (axis.isIntervalInDecimal ? 'yyyy' : 'MMM y') :\n                (axis.actualIntervalType === 'Days' && !axis.isIntervalInDecimal) ? 'ddd HH tt' : '';\n        }\n        else {\n            return '';\n        }\n    };\n    /** @private */\n    DateTime.prototype.increaseDateTimeInterval = function (axis, value, interval) {\n        var result = new Date(value);\n        if (axis.interval) {\n            axis.isIntervalInDecimal = (interval % 1) === 0;\n            axis.visibleRange.interval = interval;\n        }\n        else {\n            interval = Math.ceil(interval);\n            axis.visibleRange.interval = interval;\n        }\n        var intervalType = axis.actualIntervalType;\n        if (axis.isIntervalInDecimal) {\n            switch (intervalType) {\n                case 'Years':\n                    result.setFullYear(result.getFullYear() + interval);\n                    return result;\n                case 'Quarter':\n                    result.setMonth(result.getMonth() + (3 * interval));\n                    return result;\n                case 'Months':\n                    result.setMonth(result.getMonth() + interval);\n                    return result;\n                case 'Weeks':\n                    result.setDate(result.getDate() + (interval * 7));\n                    return result;\n                case 'Days':\n                    result.setDate(result.getDate() + interval);\n                    return result;\n                case 'Hours':\n                    result.setHours(result.getHours() + interval);\n                    return result;\n                case 'Minutes':\n                    result.setMinutes(result.getMinutes() + interval);\n                    return result;\n                case 'Seconds':\n                    result.setSeconds(result.getSeconds() + interval);\n                    return result;\n            }\n        }\n        else {\n            result = this.getDecimalInterval(result, interval, intervalType);\n        }\n        return result;\n    };\n    DateTime.prototype.alignRangeStart = function (axis, sDate, intervalSize) {\n        var sResult = new Date(sDate);\n        switch (axis.actualIntervalType) {\n            case 'Years':\n                var year = Math.floor(Math.floor(sResult.getFullYear() / intervalSize) * intervalSize);\n                sResult = new Date(year, sResult.getMonth(), sResult.getDate(), 0, 0, 0);\n                return sResult;\n            case 'Months':\n                var month = Math.floor(Math.floor((sResult.getMonth()) / intervalSize) * intervalSize);\n                sResult = new Date(sResult.getFullYear(), month, sResult.getDate(), 0, 0, 0);\n                return sResult;\n            case 'Days':\n                var day = Math.floor(Math.floor((sResult.getDate()) / intervalSize) * intervalSize);\n                sResult = new Date(sResult.getFullYear(), sResult.getMonth(), day, 0, 0, 0);\n                return sResult;\n            case 'Hours':\n                var hour = Math.floor(Math.floor((sResult.getHours()) / intervalSize) * intervalSize);\n                sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), hour, 0, 0);\n                return sResult;\n            case 'Minutes':\n                var minutes = Math.floor(Math.floor((sResult.getMinutes()) / intervalSize) * intervalSize);\n                sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), sResult.getHours(), minutes, 0, 0);\n                return sResult;\n            case 'Seconds':\n                var seconds = Math.floor(Math.floor((sResult.getSeconds()) / intervalSize) * intervalSize);\n                sResult = new Date(sResult.getFullYear(), sResult.getMonth(), sResult.getDate(), sResult.getHours(), sResult.getMinutes(), seconds, 0);\n                return sResult;\n        }\n        return sResult;\n    };\n    DateTime.prototype.getDecimalInterval = function (result, interval, intervalType) {\n        var roundValue = Math.floor(interval);\n        var decimalValue = interval - roundValue;\n        switch (intervalType) {\n            case 'Years':\n                var month = Math.round(12 * decimalValue);\n                result.setFullYear(result.getFullYear() + roundValue);\n                result.setMonth(result.getMonth() + month);\n                return result;\n            case 'Quarter':\n                result.setMonth(result.getMonth() + (3 * interval));\n                return result;\n            case 'Months':\n                var days = Math.round(30 * decimalValue);\n                result.setMonth(result.getMonth() + roundValue);\n                result.setDate(result.getDate() + days);\n                return result;\n            case 'Weeks':\n                result.setDate(result.getDate() + (interval * 7));\n                return result;\n            case 'Days':\n                var hour = Math.round(24 * decimalValue);\n                result.setDate(result.getDate() + roundValue);\n                result.setHours(result.getHours() + hour);\n                return result;\n            case 'Hours':\n                var min = Math.round(60 * decimalValue);\n                result.setHours(result.getHours() + roundValue);\n                result.setMinutes(result.getMinutes() + min);\n                return result;\n            case 'Minutes':\n                var sec = Math.round(60 * decimalValue);\n                result.setMinutes(result.getMinutes() + roundValue);\n                result.setSeconds(result.getSeconds() + sec);\n                return result;\n            case 'Seconds':\n                var milliSec = Math.round(1000 * decimalValue);\n                result.setSeconds(result.getSeconds() + roundValue);\n                result.setMilliseconds(result.getMilliseconds() + milliSec);\n                return result;\n        }\n        return result;\n    };\n    /**\n     * Get module name\n     */\n    DateTime.prototype.getModuleName = function () {\n        /**\n         * Returns the module name\n         */\n        return 'DateTime';\n    };\n    /**\n     * To destroy the category axis.\n     *\n     * @returns {void}\n     * @private\n     */\n    DateTime.prototype.destroy = function () {\n        /**\n         * Destroy method performed here\n         */\n    };\n    return DateTime;\n}(NiceInterval));\nexport { DateTime };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { EventHandler, getValue, closest, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, extend, Browser } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport * as event from '../base/constant';\nimport { Row } from '../models/row';\nimport { RowModelGenerator } from './row-model-generator';\nimport { parentsUntil, addRemoveEventListener, findCellIndex } from '../base/util';\nimport * as literals from '../base/string-literals';\n/**\n * FocusStrategy class\n *\n * @hidden\n */\nvar FocusStrategy = /** @class */ (function () {\n    function FocusStrategy(parent) {\n        this.currentInfo = {};\n        this.oneTime = true;\n        this.swap = {};\n        /** @hidden */\n        this.isInfiniteScroll = false;\n        this.forget = false;\n        this.skipFocus = true;\n        this.focusByClick = false;\n        this.firstHeaderCellClick = false;\n        this.prevIndexes = {};\n        this.refMatrix = this.refreshMatrix(true);\n        this.actions = ['downArrow', 'upArrow'];\n        this.isVirtualScroll = false;\n        this.parent = parent;\n        this.rowModelGen = new RowModelGenerator(this.parent);\n        this.addEventListener();\n    }\n    FocusStrategy.prototype.focusCheck = function (e) {\n        var target = e.target;\n        this.focusByClick = true;\n        this.firstHeaderCellClick = true;\n        this.skipFocus = target.classList.contains('e-grid');\n    };\n    FocusStrategy.prototype.onFocus = function (e) {\n        if (this.parent.isDestroyed || Browser.isDevice || this.parent.enableVirtualization\n            || this.parent.element.querySelector('.e-masked-table') || (!this.parent.isInitialLoad && e\n            && e.target === this.parent.element && this.parent.element.querySelector('.e-spin-show'))) {\n            return;\n        }\n        this.setActive(!this.parent.enableHeaderFocus && this.parent.frozenRows === 0);\n        if (!this.parent.enableHeaderFocus && !this.parent.getCurrentViewRecords().length && ((this.parent.editSettings.mode !== 'Batch')\n            || (this.parent.editSettings.mode === 'Batch' && this.parent.editModule && !this.parent.editModule.getBatchChanges()[literals.addedRecords].length))) {\n            this.getContent().matrix.\n                generate(this.rowModelGen.generateRows({ rows: [new Row({ isDataRow: true })] }), this.getContent().selector, false);\n        }\n        var current = this.getContent().matrix.get(0, -1, [0, 1], null, this.getContent().validator());\n        this.getContent().matrix.select(current[0], current[1]);\n        if (this.skipFocus && !(e && e.target === this.parent.element)) {\n            this.focus(e);\n            this.skipFocus = false;\n        }\n    };\n    FocusStrategy.prototype.passiveFocus = function (e) {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        var firstHeaderCell = this.parent.getHeaderContent().querySelector('.e-headercell:not(.e-hide)');\n        if (e.target === firstHeaderCell && e.relatedTarget && !parentsUntil(e.relatedTarget, 'e-grid')\n            && !this.firstHeaderCellClick) {\n            var firstHeaderCellIndex = [0, 0];\n            if (this.active.matrix.matrix[firstHeaderCellIndex[0]][firstHeaderCellIndex[1]] === 0) {\n                firstHeaderCellIndex = findCellIndex(this.active.matrix.matrix, firstHeaderCellIndex, true);\n            }\n            this.active.matrix.current = firstHeaderCellIndex;\n            this.currentInfo.element = e.target;\n            this.currentInfo.elementToFocus = e.target;\n            addClass([this.currentInfo.element], ['e-focused', 'e-focus']);\n        }\n        this.firstHeaderCellClick = false;\n        if (e.target && e.target.classList.contains('e-detailcell')) {\n            this.currentInfo.skipAction = false;\n            addClass([this.currentInfo.element], ['e-focused', 'e-focus']);\n        }\n    };\n    FocusStrategy.prototype.onBlur = function (e) {\n        // The below boolean condition for gantt team focus fix.\n        var isGantt = parentsUntil(e.target, 'e-gantt') && e.target.classList.contains('e-rowcell')\n            && (!isNullOrUndefined(e.target.nextElementSibling)\n                && e.target.nextElementSibling.classList.contains('e-rowcell')) ? true : false;\n        if ((this.parent.isEdit || e && (!e.relatedTarget || closest(e.relatedTarget, '.e-grid'))\n            && !(this.parent.element.classList.contains('e-childgrid') && !this.parent.element.matches(':focus-within')))\n            && !(!isGantt && isNullOrUndefined(e.relatedTarget) && parseInt(e.target.getAttribute('data-colindex'), 10) === 0\n                && parseInt(e.target.getAttribute('index'), 10) === 0) && !(!isGantt && isNullOrUndefined(e.relatedTarget)\n            && !closest(document.activeElement, '.e-grid') && !isNullOrUndefined(e['sourceCapabilities']))) {\n            return;\n        }\n        this.removeFocus();\n        this.skipFocus = true;\n        this.currentInfo.skipAction = false;\n        this.setLastContentCellTabIndex();\n        this.setFirstFocusableTabIndex();\n        this.firstHeaderCellClick = false;\n    };\n    /**\n     * @returns {void}\n     * @hidden */\n    FocusStrategy.prototype.setFirstFocusableTabIndex = function () {\n        var gObj = this.parent;\n        gObj.element.tabIndex = -1;\n        if (gObj.allowGrouping && gObj.groupSettings.showDropArea) {\n            var groupModule = gObj.groupModule;\n            var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n            if (focusableGroupedItems.length > 0) {\n                groupModule.element.tabIndex = -1;\n                focusableGroupedItems[0].tabIndex = 0;\n            }\n            else {\n                groupModule.element.tabIndex = 0;\n            }\n            return;\n        }\n        if (gObj.toolbar || gObj.toolbarTemplate) {\n            var toolbarElement = gObj.toolbarModule.element;\n            var focusableToolbarItems = this.parent.toolbarModule.getFocusableToolbarItems();\n            if (focusableToolbarItems.length > 0 && focusableToolbarItems[0].querySelector('.e-toolbar-item-focus,.e-btn,.e-input')) {\n                toolbarElement.tabIndex = -1;\n                focusableToolbarItems[0].querySelector('.e-toolbar-item-focus,.e-btn,.e-input').tabIndex = 0;\n            }\n            else {\n                toolbarElement.tabIndex = 0;\n            }\n            return;\n        }\n        if (gObj.getColumns().length) {\n            var firstHeaderCell = gObj.getHeaderContent().querySelector('.e-headercell:not(.e-hide)');\n            firstHeaderCell.tabIndex = 0;\n            this.setActive(false);\n            if (!isNullOrUndefined(this.active) && (isNullOrUndefined(this.active.target) || !this.active.target.classList.contains('e-columnmenu'))) {\n                var firstHeaderCellIndex = [0, 0];\n                if (this.active.matrix.matrix[firstHeaderCellIndex[0]][firstHeaderCellIndex[1]] === 0) {\n                    firstHeaderCellIndex = findCellIndex(this.active.matrix.matrix, firstHeaderCellIndex, true);\n                }\n                this.active.matrix.current = firstHeaderCellIndex;\n            }\n            return;\n        }\n    };\n    FocusStrategy.prototype.setLastContentCellTabIndex = function () {\n        var contentTable = this.parent.getContentTable();\n        if (contentTable.rows[contentTable.rows.length - 1]) {\n            var lastCell = contentTable.rows[contentTable.rows.length - 1].lastElementChild;\n            lastCell.tabIndex = 0;\n        }\n    };\n    FocusStrategy.prototype.onClick = function (e, force) {\n        if (parentsUntil(e.target, 'e-filterbarcell') && (parentsUntil(e.target, 'e-multiselect') ||\n            e.target.classList.contains('e-input-group-icon'))) {\n            return;\n        }\n        var isContent = !isNullOrUndefined(closest(e.target, '.' + literals.gridContent));\n        var isHeader = !isNullOrUndefined(closest(e.target, '.' + literals.gridHeader));\n        isContent = isContent && isHeader ? !isContent : isContent;\n        if (!isContent && isNullOrUndefined(closest(e.target, '.' + literals.gridHeader)) ||\n            e.target.classList.contains(literals.content) ||\n            !isNullOrUndefined(closest(e.target, '.e-unboundcell'))) {\n            return;\n        }\n        this.setActive(isContent);\n        if (!isContent && isNullOrUndefined(closest(e.target, '.' + literals.gridHeader))) {\n            this.clearOutline();\n            return;\n        }\n        var beforeArgs = { cancel: false, byKey: false, byClick: !isNullOrUndefined(e.target), clickArgs: e };\n        this.parent.notify(event.beforeCellFocused, beforeArgs);\n        if (beforeArgs.cancel || closest(e.target, '.e-inline-edit')) {\n            return;\n        }\n        this.setActive(isContent);\n        if (this.getContent()) {\n            var returnVal = this.getContent().onClick(e, force);\n            if (returnVal === false) {\n                return;\n            }\n            this.focus();\n            if (this.currentInfo.element.classList.contains('e-rowcell') && e.type && e.type === 'click') {\n                addClass([this.currentInfo.element], ['e-focused', 'e-focus']);\n            }\n        }\n    };\n    FocusStrategy.prototype.handleFilterNavigation = function (e, inputSelector, buttonSelector) {\n        if (e.target === document.querySelector(inputSelector) && e.key === 'Tab' && e.shiftKey) {\n            e.preventDefault();\n            document.querySelector(buttonSelector).focus();\n        }\n        else if (e.target === document.querySelector(buttonSelector) && e.key === 'Tab' && !e.shiftKey &&\n            document.activeElement === document.querySelector(buttonSelector)) {\n            e.preventDefault();\n            document.querySelector(inputSelector).focus();\n        }\n    };\n    FocusStrategy.prototype.onKeyPress = function (e) {\n        if (this.parent.allowPaging) {\n            var pagerElement = this.parent.pagerModule.pagerObj.element;\n            var focusablePagerElements = this.parent.pagerModule.pagerObj.getFocusablePagerElements(pagerElement, []);\n            if (this.parent.childGrid && !parentsUntil(e.target, 'e-gridpager') && this.allowToPaging(e) && focusablePagerElements.length) {\n                focusablePagerElements[0].tabIndex = 0;\n            }\n            if (this.parent.pagerModule.pagerObj.checkPagerHasFocus()) {\n                if (e.action === 'shiftTab' && focusablePagerElements.length && focusablePagerElements[0] === e.target) {\n                    this.setActive(true);\n                    var lastHeaderCellIndex = [this.active.matrix.matrix.length - 1,\n                        this.active.matrix.matrix[this.active.matrix.matrix.length - 1].length - 1];\n                    if (this.active.matrix.matrix[lastHeaderCellIndex[0]][lastHeaderCellIndex[1]] === 0) {\n                        lastHeaderCellIndex = findCellIndex(this.active.matrix.matrix, lastHeaderCellIndex, false);\n                    }\n                    this.active.matrix.current = this.parent.editSettings.mode === 'Batch' ?\n                        this.isValidBatchEditCell(lastHeaderCellIndex) ? lastHeaderCellIndex :\n                            this.findBatchEditCell(lastHeaderCellIndex, false) : lastHeaderCellIndex;\n                    e.preventDefault();\n                    this.focus(e);\n                    return;\n                }\n                if (!(e.action === 'tab' && this.parent.element.classList.contains('e-childgrid')\n                    && ((!this.parent.pageSettings.pageSizes && focusablePagerElements.length\n                        && focusablePagerElements[focusablePagerElements.length - 1] === e.target)\n                        || (this.parent.pagerModule.pagerObj.getDropDownPage() === e.target)))) {\n                    this.parent.pagerModule.pagerObj.changePagerFocus(e);\n                    return;\n                }\n                else {\n                    var parentCell = parentsUntil(this.parent.element, 'e-detailcell');\n                    removeClass([this.parent.element], ['e-focus']);\n                    removeClass([parentCell], ['e-focused']);\n                    parentCell.tabIndex = -1;\n                }\n            }\n            if (this.parent.pagerModule.pagerObj.element.tabIndex === 0 && (e.keyCode === 38 || (e.shiftKey && e.keyCode === 9))) {\n                e.preventDefault();\n                this.focus(e);\n                return;\n            }\n            else if (this.parent.pagerModule.pagerObj.element.tabIndex === 0 && e.keyCode === 9) {\n                e.preventDefault();\n                this.parent.pagerModule.pagerObj.setPagerFocus();\n                return;\n            }\n            if (this.parent.pagerModule.pagerObj.checkFirstPagerFocus()) {\n                var lastRow = this.getContent().matrix.rows;\n                var lastColumn = this.getContent().matrix.columns;\n                this.getContent().matrix.current = [lastRow, lastColumn];\n            }\n        }\n        if (this.parent.filterSettings.type === 'Excel') {\n            this.handleFilterNavigation(e, '.e-excelfilter .e-menu-item:not(.e-disabled)', '.e-excelfilter .e-footer-content button:nth-child(2)');\n        }\n        if (this.parent.filterSettings.type === 'CheckBox') {\n            this.handleFilterNavigation(e, '.e-searchinput.e-input', '.e-checkboxfilter .e-footer-content button:nth-child(2)');\n        }\n        if (this.parent.filterSettings.type === 'Menu') {\n            this.handleFilterNavigation(e, '.e-flmenu .e-input-group.e-popup-flmenu', '.e-flmenu .e-footer-content button:nth-child(2)');\n        }\n        if (this.skipOn(e)) {\n            return;\n        }\n        if (e.target && parentsUntil(e.target, 'e-gridcontent')) {\n            var rows = [].slice.call(this.parent.getContentTable().rows);\n            var lastCell = rows[rows.length - 1].lastElementChild;\n            if (e.target === lastCell) {\n                this.setActive(true);\n                this.setLastContentCellActive();\n            }\n        }\n        if (e.action === 'shiftTab' && e.target && (e.target === this.parent.element || parentsUntil(e.target, 'e-toolbar')\n            || parentsUntil(e.target, 'e-groupdroparea'))) {\n            if (e.target === this.parent.element) {\n                if (this.parent.element.classList.contains('e-childgrid')) {\n                    this.focusOutFromChildGrid(e);\n                }\n                return;\n            }\n            if (parentsUntil(e.target, 'e-groupdroparea')) {\n                if (this.parent.element.classList.contains('e-childgrid')) {\n                    e.preventDefault();\n                    this.parent.element.focus();\n                }\n                return;\n            }\n            if (parentsUntil(e.target, 'e-toolbar')) {\n                if (this.parent.allowGrouping && this.parent.groupSettings.showDropArea) {\n                    var groupModule = this.parent.groupModule;\n                    var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n                    e.preventDefault();\n                    if (focusableGroupedItems.length > 0) {\n                        focusableGroupedItems[focusableGroupedItems.length - 1].focus();\n                    }\n                    else {\n                        groupModule.element.focus();\n                    }\n                }\n                else if (this.parent.element.classList.contains('e-childgrid')) {\n                    e.preventDefault();\n                    this.parent.element.focus();\n                }\n                return;\n            }\n        }\n        var focusFirstHeaderCell = false;\n        if (e.action === 'tab' && e.target && (e.target === this.parent.element || parentsUntil(e.target, 'e-toolbar')\n            || parentsUntil(e.target, 'e-groupdroparea'))) {\n            if (this.parent.allowGrouping && this.parent.groupSettings.showDropArea\n                && (e.target === this.parent.element || e.target.classList.contains('e-groupdroparea'))) {\n                var groupModule = this.parent.groupModule;\n                var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n                if (focusableGroupedItems.length > 0) {\n                    e.preventDefault();\n                    focusableGroupedItems[0].focus();\n                    return;\n                }\n                if (!e.target.classList.contains('e-groupdroparea')) {\n                    e.preventDefault();\n                    groupModule.element.focus();\n                    return;\n                }\n            }\n            if ((this.parent.toolbar || this.parent.toolbarTemplate) && (e.target === this.parent.element\n                || parentsUntil(e.target, 'e-groupdroparea')\n                || e.target.classList.contains('e-toolbar'))) {\n                var toolbarElement = this.parent.toolbarModule.element;\n                var focusableToolbarItems = this.parent.toolbarModule.getFocusableToolbarItems();\n                if (focusableToolbarItems.length > 0) {\n                    e.preventDefault();\n                    focusableToolbarItems[0].querySelector('.e-toolbar-item-focus,.e-btn,.e-input').focus();\n                    return;\n                }\n                if (!e.target.classList.contains('e-toolbar')) {\n                    e.preventDefault();\n                    toolbarElement.focus();\n                    return;\n                }\n            }\n            if (e.target === this.parent.element || parentsUntil(e.target, 'e-toolbar')\n                || parentsUntil(e.target, 'e-groupdroparea')) {\n                focusFirstHeaderCell = true;\n            }\n        }\n        if (focusFirstHeaderCell) {\n            if (this.parent.allowGrouping && this.parent.groupSettings.columns.length === this.parent.columns.length) {\n                this.setActive(true);\n            }\n            else {\n                this.setActive(false);\n            }\n            this.active.matrix.current = [0, -1];\n        }\n        this.activeKey = e.action;\n        var beforeArgs = { cancel: false, byKey: true, byClick: false, keyArgs: e };\n        this.parent.notify(event.beforeCellFocused, beforeArgs);\n        if (beforeArgs.cancel) {\n            return;\n        }\n        var bValue = this.getContent().matrix.current;\n        var prevBatchValue = this.active && this.active.matrix.current ?\n            [this.active.matrix.current[0], this.active.matrix.current[1]] : undefined;\n        this.currentInfo.outline = true;\n        var swapInfo = this.getContent().jump(e.action, bValue);\n        this.swap = swapInfo;\n        if (swapInfo.swap && !(this.parent.editSettings.mode === 'Batch'\n            && (e.action === 'tab' || e.action === 'shiftTab'))) {\n            this.setActive(!swapInfo.toHeader);\n            this.getContent().matrix.current = this.getContent().getNextCurrent(bValue, swapInfo, this.active, e.action);\n            this.prevIndexes = {};\n        }\n        this.setActiveByKey(e.action, this.getContent());\n        var returnVal = this.content.lastIdxCell ? false : this.getContent().onKeyPress(e);\n        if (e.target && parentsUntil(e.target, 'e-gridheader')) {\n            if (e.action === 'tab' && bValue.toString() === this.active.matrix.current.toString()) {\n                var nextHeaderCellIndex = findCellIndex(this.active.matrix.matrix, this.active.matrix.current, true);\n                var lastHeaderCellIndex = [this.active.matrix.matrix.length - 1,\n                    this.active.matrix.matrix[this.active.matrix.matrix.length - 1].length - 1];\n                if (this.active.matrix.matrix[lastHeaderCellIndex[0]][lastHeaderCellIndex[1]] === 0) {\n                    lastHeaderCellIndex = findCellIndex(this.active.matrix.matrix, lastHeaderCellIndex, false);\n                }\n                if (this.active.matrix.current.toString() === lastHeaderCellIndex.toString() && this.content.matrix.matrix.length) {\n                    returnVal = true;\n                    this.setActive(true);\n                    var firstContentCellIndex = [0, 0];\n                    if (this.active.matrix.matrix[firstContentCellIndex[0]][firstContentCellIndex[1]] === 0) {\n                        firstContentCellIndex = findCellIndex(this.active.matrix.matrix, [0, 0], true);\n                    }\n                    this.active.matrix.current = this.parent.editSettings.mode === 'Batch' ?\n                        this.isValidBatchEditCell(firstContentCellIndex) ? firstContentCellIndex :\n                            this.findBatchEditCell(firstContentCellIndex, true) : firstContentCellIndex;\n                }\n                else if (this.active.matrix.current.toString() !== nextHeaderCellIndex.toString()) {\n                    this.active.matrix.current = nextHeaderCellIndex;\n                }\n            }\n            if (e.action === 'shiftTab' && bValue.toString() === this.active.matrix.current.toString()) {\n                var previousCellIndex = findCellIndex(this.active.matrix.matrix, this.active.matrix.current, false);\n                if (previousCellIndex.toString() === this.active.matrix.current.toString()) {\n                    this.focusOutFromHeader(e);\n                    return;\n                }\n                if (this.active.matrix.current.toString() !== previousCellIndex.toString() && !returnVal) {\n                    returnVal = true;\n                    this.active.matrix.current = previousCellIndex;\n                }\n            }\n        }\n        if (e.target && parentsUntil(e.target, 'e-gridcontent')) {\n            if (this.parent.editSettings.mode === 'Batch' && (e.action === 'tab' || e.action === 'shiftTab')) {\n                this.active.matrix.current = this.findBatchEditCell(prevBatchValue, e.action === 'tab' ? true : false);\n                if (e.action === 'tab' && prevBatchValue.toString() === this.active.matrix.current.toString()) {\n                    this.parent.editModule.editModule.addBatchRow = true;\n                }\n            }\n            if (e.action === 'shiftTab' && bValue.toString() === this.active.matrix.current.toString()) {\n                if (this.parent.allowGrouping && this.parent.groupSettings.columns.length === this.parent.columns.length) {\n                    this.focusOutFromHeader(e);\n                    return;\n                }\n                var firstContentCellIndex = [0, 0];\n                if (this.active.matrix.matrix[firstContentCellIndex[0]][firstContentCellIndex[1]] === 0) {\n                    firstContentCellIndex = findCellIndex(this.active.matrix.matrix, [0, 0], true);\n                }\n                if (!returnVal && (firstContentCellIndex.toString() === this.active.matrix.current.toString()\n                    || (this.parent.editSettings.mode === 'Batch'\n                        && prevBatchValue.toString() === this.active.matrix.current.toString()))) {\n                    returnVal = true;\n                    this.setActive(false);\n                    this.setLastContentCellActive();\n                }\n            }\n        }\n        if (returnVal === false) {\n            this.clearIndicator();\n            if (e.action === 'shiftTab' && bValue.toString() === [0, 0].toString()) {\n                this.parent.element.tabIndex = -1;\n            }\n            if (this.parent.allowPaging && !this.parent.pagerModule.pagerObj.checkPagerHasFocus() && this.allowToPaging(e)\n                && bValue.toString() !== [0, 0].toString()) {\n                e.preventDefault();\n                if (e.keyCode === 40) {\n                    this.parent.pagerModule.pagerObj.setPagerContainerFocus();\n                    return;\n                }\n                else if (e.keyCode === 9) {\n                    this.parent.pagerModule.pagerObj.setPagerFocus();\n                    return;\n                }\n            }\n            if (this.parent.element.classList.contains('e-childgrid')) {\n                this.focusOutFromChildGrid(e);\n            }\n            return;\n        }\n        e.preventDefault();\n        this.focus(e);\n    };\n    FocusStrategy.prototype.isValidBatchEditCell = function (cellIndex) {\n        var cell = this.active.getTable().rows[cellIndex[0]].cells[cellIndex[1]];\n        var tr = closest(cell, 'tr');\n        var cellColIndex = parseInt(cell.getAttribute('data-colindex'), 10);\n        var cellCol = this.parent.getColumns()[parseInt(cellColIndex.toString(), 10)];\n        if (this.active.matrix.matrix[cellIndex[0]][cellIndex[1]] === 1\n            && (!tr.classList.contains('e-row') || (tr.classList.contains('e-insertedrow') || !cellCol.isPrimaryKey) && cellCol.allowEditing)) {\n            return true;\n        }\n        return false;\n    };\n    FocusStrategy.prototype.findBatchEditCell = function (currentCellIndex, next, limitRow) {\n        var cellIndex = currentCellIndex;\n        var tempCellIndex = currentCellIndex;\n        var cellIndexObtain = false;\n        while (!cellIndexObtain) {\n            var prevTempCellIndex = tempCellIndex;\n            tempCellIndex = findCellIndex(this.active.matrix.matrix, tempCellIndex, next);\n            if ((prevTempCellIndex.toString() === tempCellIndex.toString())\n                || (limitRow && prevTempCellIndex[0] !== tempCellIndex[0])) {\n                cellIndexObtain = true;\n                continue;\n            }\n            if (this.isValidBatchEditCell(tempCellIndex)) {\n                cellIndex = tempCellIndex;\n                cellIndexObtain = true;\n            }\n        }\n        return cellIndex;\n    };\n    FocusStrategy.prototype.setLastContentCellActive = function () {\n        var lastContentCellIndex = [this.active.matrix.matrix.length - 1,\n            this.active.matrix.matrix[this.active.matrix.matrix.length - 1].length - 1];\n        if (this.active.matrix.matrix[lastContentCellIndex[0]][lastContentCellIndex[1]] === 0) {\n            lastContentCellIndex = findCellIndex(this.active.matrix.matrix, lastContentCellIndex, false);\n        }\n        this.active.matrix.current = lastContentCellIndex;\n    };\n    FocusStrategy.prototype.focusOutFromChildGrid = function (e) {\n        var parentTable = parentsUntil(this.parent.element, 'e-table');\n        var parentGrid = parentsUntil(parentTable, 'e-grid').ej2_instances[0];\n        var parentCell = parentsUntil(this.parent.element, 'e-detailcell');\n        var uid = parentsUntil(this.parent.element, 'e-detailrow').getAttribute('data-uid');\n        var parentRows = [].slice.call(parentGrid.getContentTable().rows);\n        var parentRowIndex = parentRows.map(function (m) { return m.getAttribute('data-uid'); }).indexOf(uid);\n        if (e.action === 'tab' && parentRowIndex >= parentRows.length - 1) {\n            return;\n        }\n        removeClass([this.parent.element], ['e-focus']);\n        removeClass([parentCell], ['e-focused']);\n        parentCell.tabIndex = -1;\n        e.preventDefault();\n        var nextFocusCell;\n        parentGrid.focusModule.removeFocus();\n        if (e.action === 'shiftTab') {\n            var previousRow = parentRows[parentRowIndex - 1];\n            var rowCells = previousRow.cells;\n            for (var i = rowCells.length - 1; i >= 0; i--) {\n                nextFocusCell = rowCells[parseInt(i.toString(), 10)];\n                if (!nextFocusCell.classList.contains('e-hide')) {\n                    parentGrid.focusModule.active.matrix.current = [parentRowIndex - 1, i];\n                    break;\n                }\n            }\n        }\n        else {\n            nextFocusCell = parentRows[parentRowIndex + 1].cells[0];\n            parentGrid.focusModule.active.matrix.current = [parentRowIndex + 1, 0];\n        }\n        parentGrid.focusModule.currentInfo.element = nextFocusCell;\n        parentGrid.focusModule.currentInfo.elementToFocus = nextFocusCell;\n        addClass([nextFocusCell], ['e-focused', 'e-focus']);\n        nextFocusCell.tabIndex = 0;\n        nextFocusCell.focus();\n    };\n    FocusStrategy.prototype.focusOutFromHeader = function (e) {\n        this.removeFocus();\n        if (this.parent.toolbar || this.parent.toolbarTemplate) {\n            var toolbarElement = this.parent.toolbarModule.element;\n            var focusableToolbarItems = this.parent.toolbarModule.getFocusableToolbarItems();\n            e.preventDefault();\n            if (focusableToolbarItems.length > 0) {\n                focusableToolbarItems[focusableToolbarItems.length - 1].querySelector('.e-toolbar-item-focus,.e-btn,.e-input').focus();\n            }\n            else {\n                toolbarElement.focus();\n            }\n            return;\n        }\n        if (this.parent.allowGrouping && this.parent.groupSettings.showDropArea) {\n            var groupModule = this.parent.groupModule;\n            var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n            e.preventDefault();\n            if (focusableGroupedItems.length > 0) {\n                focusableGroupedItems[focusableGroupedItems.length - 1].focus();\n            }\n            else {\n                groupModule.element.focus();\n            }\n            return;\n        }\n        if (this.parent.element.classList.contains('e-childgrid')) {\n            e.preventDefault();\n            this.parent.element.focus();\n        }\n    };\n    FocusStrategy.prototype.allowToPaging = function (e) {\n        if (this.parent.editSettings.mode === 'Batch' && this.parent.editSettings.allowAdding && e.keyCode !== 40) {\n            return false;\n        }\n        return true;\n    };\n    FocusStrategy.prototype.skipOn = function (e) {\n        var target = e.target;\n        if (!target) {\n            return false;\n        }\n        if (this.currentInfo.skipAction) {\n            this.clearIndicator();\n            return true;\n        }\n        if (['pageUp', 'pageDown', 'altDownArrow'].indexOf(e.action) > -1) {\n            this.clearIndicator();\n            return true;\n        }\n        if (this.parent.allowGrouping) {\n            var focusableGroupedItems = this.parent.groupModule.getFocusableGroupedItems();\n            if (parentsUntil(e.target, 'e-groupheadercell')\n                && !((e.target === focusableGroupedItems[0] && e.action === 'shiftTab')\n                    || (e.target === focusableGroupedItems[focusableGroupedItems.length - 1] && e.action === 'tab'))) {\n                return true;\n            }\n        }\n        if (this.parent.toolbar || this.parent.toolbarTemplate) {\n            var toolbarElement = this.parent.toolbarModule.element;\n            var focusableToolbarItems = toolbarElement\n                .querySelectorAll('.e-toolbar-item:not(.e-overlay):not(.e-hidden)');\n            if (parentsUntil(e.target, 'e-toolbar-item')\n                && !(focusableToolbarItems.length > 0 && ((parentsUntil(e.target, 'e-toolbar-item') === focusableToolbarItems[0] && e.action === 'shiftTab')\n                    || (parentsUntil(e.target, 'e-toolbar-item') === focusableToolbarItems[focusableToolbarItems.length - 1] && e.action === 'tab')))) {\n                return true;\n            }\n        }\n        var th = closest(target, 'th') && !closest(target, 'th').tabIndex;\n        if (e.target.classList.contains('e-filterbaroperator') && (e.keyCode === 13 || e.keyCode === 27)) {\n            var inputTarget = closest(e.target, '.e-filterbarcell');\n            inputTarget.querySelector('input').focus();\n        }\n        if (th && closest(document.activeElement, '.e-filterbarcell') !== null) {\n            this.removeFocus();\n        }\n        var filterCell = closest(document.activeElement, '.e-filterbarcell') !== null;\n        if (this.parent.enableHeaderFocus && filterCell) {\n            var matrix = this.active.matrix;\n            var current = matrix.current;\n            filterCell = matrix.matrix[current[0]].lastIndexOf(1) !== current[1];\n        }\n        return (e.action === 'delete'\n            || (this.parent.editSettings.mode !== 'Batch' && (this.parent.isEdit || ['insert', 'f2'].indexOf(e.action) > -1))\n            || ((filterCell && this.parent.enableHeaderFocus) || (filterCell && e.action !== 'tab' && e.action !== 'shiftTab') ||\n                closest(document.activeElement, '#' + this.parent.element.id + '_searchbar') !== null\n                    && ['enter', 'leftArrow', 'rightArrow',\n                        'shiftLeft', 'shiftRight', 'ctrlPlusA'].indexOf(e.action) > -1)\n            || (closest(target, '.' + literals.gridContent) === null && closest(target, '.' + literals.gridHeader) === null\n                && !(e.target === this.parent.element || parentsUntil(e.target, 'e-toolbar')\n                    || parentsUntil(e.target, 'e-groupdroparea')))\n            || (e.action === 'space' && (!target.classList.contains(literals.gridChkBox) && closest(target, '.' + literals.gridChkBox) === null\n                && closest(target, '.e-headerchkcelldiv') === null))) || closest(target, '.e-filter-popup') !== null;\n    };\n    FocusStrategy.prototype.focusVirtualElement = function (e) {\n        var _this = this;\n        if (this.parent.enableVirtualization || this.parent.enableInfiniteScrolling) {\n            var data = { virtualData: {}, isAdd: false, isCancel: false };\n            this.parent.notify(event.getVirtualData, data);\n            var isKeyFocus = this.actions.some(function (value) { return value === _this.activeKey; });\n            var isSelected = this.parent.contentModule ?\n                this.parent.contentModule.selectedRowIndex > -1 : false;\n            if (data.isAdd || Object.keys(data.virtualData).length || isKeyFocus || data.isCancel || isSelected) {\n                this.parent.notify(event.resetVirtualFocus, { isCancel: false });\n                data.isCancel = false;\n                this.parent.contentModule.selectedRowIndex = -1;\n                if (isKeyFocus) {\n                    this.activeKey = this.empty;\n                    this.parent.notify('virtaul-key-handler', e);\n                }\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                this.currentInfo.elementToFocus.focus({ preventScroll: true });\n            }\n            else {\n                if (this.isVirtualScroll || this.isInfiniteScroll) {\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    this.currentInfo.elementToFocus.focus({ preventScroll: true });\n                }\n                else {\n                    this.currentInfo.elementToFocus.focus();\n                }\n            }\n        }\n        this.isVirtualScroll = this.isInfiniteScroll = false;\n    };\n    FocusStrategy.prototype.getFocusedElement = function () {\n        return this.currentInfo.elementToFocus;\n    };\n    FocusStrategy.prototype.getContent = function () {\n        return this.active || this.content;\n    };\n    FocusStrategy.prototype.setActive = function (content) {\n        this.active = content ? this.content : this.header;\n    };\n    FocusStrategy.prototype.setFocusedElement = function (element, e) {\n        var _this = this;\n        this.currentInfo.elementToFocus = element;\n        setTimeout(function () {\n            if (!isNullOrUndefined(_this.currentInfo.elementToFocus)) {\n                if (_this.parent.enableVirtualization || _this.parent.enableInfiniteScrolling) {\n                    _this.focusVirtualElement(e);\n                }\n                else if (isNullOrUndefined(_this.parent.element.querySelector('.e-flmenu')) ||\n                    parentsUntil(document.activeElement, 'e-flmenu-valuediv') !== _this.parent.element.querySelector('.e-flmenu-valuediv')) {\n                    _this.currentInfo.elementToFocus.focus();\n                }\n            }\n        }, 0);\n    };\n    FocusStrategy.prototype.focus = function (e) {\n        this.parent.notify(event.virtaulCellFocus, e);\n        this.removeFocus();\n        this.addFocus(this.getContent().getFocusInfo(), e);\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    FocusStrategy.prototype.removeFocus = function (e) {\n        if (!this.currentInfo.element) {\n            return;\n        }\n        if (this.parent.isReact && !this.parent.isEdit && this.currentInfo.element.classList.contains('e-rowcell')\n            && !this.currentInfo.element.parentElement && !(this.parent.allowGrouping && this.parent.groupSettings.columns.length) &&\n            this.parent.getRowByIndex(this.prevIndexes.rowIndex)) {\n            var cellElem = this.parent.getCellFromIndex(this.prevIndexes.rowIndex, this.prevIndexes.cellIndex);\n            this.currentInfo.element = cellElem ? cellElem : this.currentInfo.element;\n        }\n        removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n        this.currentInfo.element.tabIndex = -1;\n    };\n    /**\n     * @returns {void}\n     * @hidden */\n    FocusStrategy.prototype.addOutline = function () {\n        var info = this.getContent().getFocusInfo();\n        if (info.element) {\n            addClass([info.element], ['e-focused']);\n            addClass([info.elementToFocus], ['e-focus']);\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden */\n    FocusStrategy.prototype.focusHeader = function () {\n        this.setActive(false);\n        this.resetFocus();\n    };\n    /**\n     * @returns {void}\n     * @hidden */\n    FocusStrategy.prototype.focusContent = function () {\n        this.setActive(true);\n        this.resetFocus();\n    };\n    FocusStrategy.prototype.resetFocus = function () {\n        var current = this.getContent().matrix.get(0, -1, [0, 1], null, this.getContent().validator());\n        this.getContent().matrix.select(current[0], current[1]);\n        this.focus();\n    };\n    FocusStrategy.prototype.addFocus = function (info, e) {\n        this.currentInfo = info;\n        this.currentInfo.outline = info.outline && (!isNullOrUndefined(e) || this.isVirtualScroll);\n        if (this.isInfiniteScroll) {\n            this.currentInfo.outline = true;\n        }\n        if (!info.element) {\n            return;\n        }\n        var isFocused = info.elementToFocus.classList.contains('e-focus');\n        if (isFocused) {\n            return;\n        }\n        if (this.currentInfo.outline) {\n            addClass([info.element], ['e-focused']);\n        }\n        addClass([info.elementToFocus], ['e-focus']);\n        info.element.tabIndex = 0;\n        if (!isFocused) {\n            this.setFocusedElement(info.elementToFocus, e);\n        }\n        this.parent.notify(event.cellFocused, {\n            element: info.elementToFocus,\n            parent: info.element,\n            indexes: this.getContent().matrix.current,\n            byKey: !isNullOrUndefined(e),\n            byClick: isNullOrUndefined(e),\n            keyArgs: e,\n            isJump: this.swap.swap,\n            container: this.getContent().getInfo(e),\n            outline: !isNullOrUndefined(e),\n            swapInfo: this.swap\n        });\n        var _a = this.getContent().matrix.current, rowIndex = _a[0], cellIndex = _a[1];\n        this.prevIndexes = { rowIndex: rowIndex, cellIndex: cellIndex };\n        this.focusedColumnUid = this.parent.getColumnByIndex(cellIndex).uid;\n        this.focusByClick = false;\n    };\n    FocusStrategy.prototype.refreshMatrix = function (content) {\n        var _this = this;\n        return function (e) {\n            if (content && !_this.content) {\n                _this.content = new ContentFocus(_this.parent);\n            }\n            if (!content && !_this.header) {\n                _this.header = new HeaderFocus(_this.parent);\n            }\n            var cFocus = content ? _this.content : _this.header;\n            var frozenRow = _this.parent.frozenRows;\n            var batchLen = 0;\n            if (frozenRow && _this.parent.editSettings.mode === 'Batch') {\n                batchLen = _this.parent.getHeaderContent().querySelectorAll('.e-insertedrow').length +\n                    _this.parent.getHeaderContent().querySelectorAll('.e-hiddenrow').length;\n            }\n            if (_this.parent.groupSettings.columns.length && frozenRow && content) {\n                frozenRow = 0;\n                for (var i = 0; i < e.rows.length; i++) {\n                    frozenRow++;\n                    if (e.rows[parseInt(i.toString(), 10)].index + 1 === _this.parent.frozenRows) {\n                        break;\n                    }\n                }\n            }\n            var rows = content ? e.rows.slice(frozenRow + batchLen) : e.rows;\n            var updateRow = content ? e.rows.slice(0, frozenRow + batchLen) : e.rows;\n            if (_this.parent.isCollapseStateEnabled() && content) {\n                rows = rows.filter(function (x) { return x.visible !== false; });\n            }\n            var isRowTemplate = !isNullOrUndefined(_this.parent.rowTemplate);\n            if (frozenRow && ((_this.parent.editSettings.mode === 'Batch' && content && (e.name === 'batchDelete' || e.name === 'batchAdd' ||\n                e.name === 'batchCancel' || (e.args && (e.args.requestType === 'batchsave')))) ||\n                (e.args && (e.args.requestType === 'delete' || e.args.requestType === 'save')))) {\n                var matrixcs = _this.header.matrix.matrix;\n                var hdrLen = _this.parent.headerModule.rows.length;\n                matrixcs.splice(hdrLen, matrixcs.length - hdrLen);\n            }\n            var matrix = cFocus.matrix.generate(updateRow, cFocus.selector, isRowTemplate);\n            cFocus.matrix.generate(rows, cFocus.selector, isRowTemplate);\n            if (!(_this.parent.isFrozenGrid() && (e.args && (e.args.requestType === 'sorting'\n                || e.args.requestType === 'batchsave' || e.args.requestType === 'paging'))) ||\n                (frozenRow && _this.parent.editSettings.mode === 'Batch' && content && (e.name === 'batchDelete' || e.name === 'batchAdd' ||\n                    e.name === 'batchCancel' || e.args.requestType === 'batchsave'\n                    || e.name === 'batchAdd' || e.name === 'batchCancel'))) {\n                cFocus.generateRows(updateRow, {\n                    matrix: matrix, handlerInstance: _this.header\n                });\n            }\n            if (!Browser.isDevice && e && e.args) {\n                if (!_this.focusByClick && e.args.requestType === 'paging' && !_this.parent.pagerModule.pagerObj.checkPagerHasFocus()) {\n                    _this.skipFocus = false;\n                    _this.parent.element.focus();\n                }\n                if (e.args.requestType === 'grouping') {\n                    _this.skipFocus = true;\n                }\n            }\n            if (e && e.args && e.args.requestType === 'virtualscroll') {\n                if (_this.currentInfo.uid) {\n                    var index_1;\n                    var bool = e.rows.some(function (row, i) {\n                        index_1 = i;\n                        return row.uid === _this.currentInfo.uid;\n                    });\n                    if (bool) {\n                        _this.content.matrix.current[0] = index_1;\n                        _this.content.matrix.current[1] = _this.parent.getColumnIndexByUid(_this.focusedColumnUid) || 0;\n                        var focusElement = _this.getContent().getFocusInfo().elementToFocus;\n                        if (focusElement) {\n                            var cellPosition = focusElement.getBoundingClientRect();\n                            var gridPosition = _this.parent.element.getBoundingClientRect();\n                            if (cellPosition.top >= 0 && cellPosition.left >= 0 &&\n                                cellPosition.right <= Math.min(gridPosition.right, window.innerWidth ||\n                                    document.documentElement.clientWidth) &&\n                                cellPosition.bottom <= Math.min(gridPosition.bottom, window.innerHeight ||\n                                    document.documentElement.clientHeight)) {\n                                _this.isVirtualScroll = true;\n                                _this.focus();\n                            }\n                        }\n                    }\n                }\n                else if (e.args.focusElement && e.args.focusElement.classList.contains('e-filtertext')) {\n                    var focusElement = _this.parent.element.querySelector('#' + e.args.focusElement.id);\n                    if (focusElement) {\n                        focusElement.focus();\n                    }\n                }\n            }\n            if (e && e.args && e.args.requestType === 'infiniteScroll') {\n                _this.isInfiniteScroll = true;\n            }\n        };\n    };\n    FocusStrategy.prototype.addEventListener = function () {\n        var _this = this;\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        EventHandler.add(this.parent.element, 'mousedown', this.focusCheck, this);\n        EventHandler.add(this.parent.element, 'touchstart', this.focusCheck, this);\n        EventHandler.add(this.parent.element, 'focus', this.onFocus, this);\n        this.parent.element.addEventListener('focus', this.passiveHandler = function (e) { return _this.passiveFocus(e); }, true);\n        EventHandler.add(this.parent.element, 'focusout', this.onBlur, this);\n        this.evtHandlers = [{ event: event.keyPressed, handler: this.onKeyPress },\n            { event: event.click, handler: this.onClick },\n            { event: event.contentReady, handler: this.refMatrix },\n            { event: event.partialRefresh, handler: this.refMatrix },\n            { event: event.refreshExpandandCollapse, handler: this.refMatrix },\n            { event: event.headerRefreshed, handler: this.refreshMatrix() },\n            { event: event.closeEdit, handler: this.restoreFocus },\n            { event: event.restoreFocus, handler: this.restoreFocus },\n            { event: 'start-edit', handler: this.clearIndicator },\n            { event: 'start-add', handler: this.clearIndicator },\n            { event: 'sorting-complete', handler: this.restoreFocus },\n            { event: 'filtering-complete', handler: this.filterfocus },\n            { event: 'grouping-complete', handler: this.restoreFocusWithAction },\n            { event: 'ungrouping-complete', handler: this.restoreFocusWithAction },\n            { event: event.batchAdd, handler: this.refMatrix },\n            { event: event.batchCancel, handler: this.refMatrix },\n            { event: event.batchDelete, handler: this.refMatrix },\n            { event: event.detailDataBound, handler: this.refMatrix },\n            { event: event.onEmpty, handler: this.refMatrix },\n            { event: event.cellFocused, handler: this.internalCellFocus }];\n        addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n    };\n    FocusStrategy.prototype.filterfocus = function () {\n        if (this.parent.filterSettings.type !== 'FilterBar') {\n            this.restoreFocus();\n        }\n    };\n    FocusStrategy.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        EventHandler.remove(this.parent.element, 'mousedown', this.focusCheck);\n        EventHandler.remove(this.parent.element, 'touchstart', this.focusCheck);\n        EventHandler.remove(this.parent.element, 'focus', this.onFocus);\n        EventHandler.remove(this.parent.element, 'focusout', this.onBlur);\n        this.parent.element.removeEventListener('focus', this.passiveHandler, true);\n        addRemoveEventListener(this.parent, this.evtHandlers, false);\n    };\n    FocusStrategy.prototype.destroy = function () {\n        this.removeEventListener();\n    };\n    FocusStrategy.prototype.restoreFocus = function () {\n        var groupModule = this.parent.groupModule;\n        if (this.parent.allowGrouping && groupModule && (groupModule.groupSortFocus || groupModule.groupTextFocus)) {\n            groupModule.groupSortFocus = false;\n            groupModule.groupTextFocus = false;\n            return;\n        }\n        this.firstHeaderCellClick = true;\n        this.addFocus(this.getContent().getFocusInfo());\n    };\n    FocusStrategy.prototype.restoreFocusWithAction = function (e) {\n        if (!this.parent.enableInfiniteScrolling) {\n            var matrix = this.getContent().matrix;\n            var current = matrix.current;\n            switch (e.requestType) {\n                case 'grouping':\n                case 'ungrouping':\n                    current[1] = current.length &&\n                        !this.parent.groupSettings.showGroupedColumn && !isNullOrUndefined(matrix.matrix[current[0]]) ?\n                        matrix.matrix[current[0]].indexOf(1) : e.requestType === 'grouping' ? current[1] + 1 : current[1] - 1;\n                    break;\n            }\n            this.getContent().matrix.current = current;\n            var groupModule = this.parent.groupModule;\n            if (this.parent.allowGrouping && groupModule && groupModule.groupCancelFocus) {\n                var focusableGroupedItems = groupModule.getFocusableGroupedItems();\n                if (focusableGroupedItems.length) {\n                    if (focusableGroupedItems[0].parentElement.getAttribute('ej-mappingname') === e.columnName) {\n                        focusableGroupedItems[3].focus();\n                    }\n                    else {\n                        focusableGroupedItems[0].focus();\n                    }\n                }\n                else {\n                    groupModule.element.focus();\n                }\n                groupModule.groupCancelFocus = false;\n                return;\n            }\n            this.addFocus(this.getContent().getFocusInfo());\n        }\n    };\n    FocusStrategy.prototype.clearOutline = function () {\n        this.getContent().matrix.current = this.getContent().matrix.get(0, -1, [0, 1], 'downArrow', this.getContent().validator());\n        this.clearIndicator();\n    };\n    FocusStrategy.prototype.clearIndicator = function () {\n        if (!this.currentInfo.element || !this.currentInfo.elementToFocus) {\n            return;\n        }\n        removeClass([this.currentInfo.element, this.currentInfo.elementToFocus], ['e-focus', 'e-focused']);\n    };\n    FocusStrategy.prototype.getPrevIndexes = function () {\n        var forget = this.forget;\n        this.forget = false;\n        return forget || !Object.keys(this.prevIndexes).length ? { rowIndex: null, cellIndex: null } : this.prevIndexes;\n    };\n    FocusStrategy.prototype.forgetPrevious = function () {\n        this.forget = true;\n    };\n    FocusStrategy.prototype.setActiveByKey = function (action, active) {\n        if (this.parent.frozenRows === 0) {\n            return;\n        }\n        // eslint-disable-next-line prefer-const\n        var info;\n        var actions = {\n            'home': function () { return ({ toHeader: !info.isContent, toFrozen: true }); },\n            'end': function () { return ({ toHeader: !info.isContent, toFrozen: false }); },\n            'ctrlHome': function () { return ({ toHeader: true, toFrozen: false }); },\n            'ctrlEnd': function () { return ({ toHeader: false, toFrozen: false }); }\n        };\n        if (!(action in actions)) {\n            return;\n        }\n        info = active.getInfo();\n        var swap = actions[\"\" + action]();\n        this.setActive(!swap.toHeader);\n        this.getContent().matrix.current = active.matrix.current;\n    };\n    FocusStrategy.prototype.internalCellFocus = function (e) {\n        if (!(e.byKey && e.container.isContent && e.keyArgs.action === 'enter'\n            && (e.parent.classList.contains('e-detailcell') ||\n                e.parent.classList.contains('e-unboundcell')))) {\n            return;\n        }\n        this.clearIndicator();\n        var focusEle = this.getContent().getFocusable(this.getFocusedElement());\n        this.setFocusedElement(focusEle);\n        this.currentInfo.skipAction = true;\n    };\n    return FocusStrategy;\n}());\nexport { FocusStrategy };\n/**\n * Create matrix from row collection which act as mental model for cell navigation\n *\n * @hidden\n */\nvar Matrix = /** @class */ (function () {\n    function Matrix() {\n        this.matrix = [];\n        this.current = [];\n    }\n    Matrix.prototype.set = function (rowIndex, columnIndex, allow) {\n        rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n        columnIndex = Math.max(0, Math.min(columnIndex, this.columns));\n        this.matrix[parseInt(rowIndex.toString(), 10)] = this.matrix[parseInt(rowIndex.toString(), 10)] || [];\n        this.matrix[parseInt(rowIndex.toString(), 10)][parseInt(columnIndex.toString(), 10)] = allow ? 1 : 0;\n    };\n    Matrix.prototype.get = function (rowIndex, columnIndex, navigator, action, validator) {\n        var tmp = columnIndex;\n        if (rowIndex + navigator[0] < 0) {\n            return [rowIndex, columnIndex];\n        }\n        rowIndex = Math.max(0, Math.min(rowIndex + navigator[0], this.rows));\n        var emptyTable = true;\n        if (isNullOrUndefined(this.matrix[parseInt(rowIndex.toString(), 10)])) {\n            return null;\n        }\n        columnIndex = Math.max(0, Math.min(columnIndex + navigator[1], this.matrix[parseInt(rowIndex.toString(), 10)].length - 1));\n        if (tmp + navigator[1] > this.matrix[parseInt(rowIndex.toString(), 10)].length - 1\n            && validator(rowIndex, columnIndex, action)) {\n            return [rowIndex, tmp];\n        }\n        var first = this.first(this.matrix[parseInt(rowIndex.toString(), 10)], columnIndex, navigator, true, action);\n        columnIndex = first === null ? tmp : first;\n        var val = getValue(rowIndex + \".\" + columnIndex, this.matrix);\n        if (rowIndex === this.rows && (action === 'downArrow' || action === 'enter')) {\n            navigator[0] = -1;\n        }\n        if (first === null) {\n            for (var i = 0; i < this.rows; i++) {\n                if (this.matrix[parseInt(i.toString(), 10)].some(function (v) { return v === 1; })) {\n                    emptyTable = false;\n                    break;\n                }\n            }\n            if (emptyTable) {\n                rowIndex = this.current.length ? this.current[0] : 0;\n                return [rowIndex, columnIndex];\n            }\n        }\n        return this.inValid(val) || !validator(rowIndex, columnIndex, action) ?\n            this.get(rowIndex, tmp, navigator, action, validator) : [rowIndex, columnIndex];\n    };\n    Matrix.prototype.first = function (vector, index, navigator, moveTo, action) {\n        if (((index < 0 || index === vector.length) && this.inValid(vector[parseInt(index.toString(), 10)])\n            && (action !== 'upArrow' && action !== 'downArrow')) || !vector.some(function (v) { return v === 1; })) {\n            return null;\n        }\n        return !this.inValid(vector[parseInt(index.toString(), 10)]) ? index :\n            this.first(vector, (['upArrow', 'downArrow', 'shiftUp', 'shiftDown'].indexOf(action) !== -1) ? moveTo ? 0 : ++index : index + navigator[1], navigator, false, action);\n    };\n    Matrix.prototype.select = function (rowIndex, columnIndex) {\n        rowIndex = Math.max(0, Math.min(rowIndex, this.rows));\n        columnIndex = Math.max(0, Math.min(columnIndex, this.matrix[parseInt(rowIndex.toString(), 10)].length - 1));\n        this.current = [rowIndex, columnIndex];\n    };\n    Matrix.prototype.generate = function (rows, selector, isRowTemplate) {\n        this.rows = rows.length - 1;\n        this.matrix = [];\n        for (var i = 0; i < rows.length; i++) {\n            var cells = rows[parseInt(i.toString(), 10)].cells.filter(function (c) { return c.isSpanned !== true; });\n            this.columns = Math.max(cells.length - 1, this.columns | 0);\n            var incrementNumber = 0;\n            for (var j = 0; j < cells.length; j++) {\n                if (cells[parseInt(j.toString(), 10)].column && cells[parseInt(j.toString(), 10)].column.columns) {\n                    incrementNumber = this.columnsCount(cells[parseInt(j.toString(), 10)].column.columns, incrementNumber);\n                }\n                else {\n                    incrementNumber++;\n                }\n                this.set(i, j, rows[parseInt(i.toString(), 10)].visible === false ?\n                    false : selector(rows[parseInt(i.toString(), 10)], cells[parseInt(j.toString(), 10)], isRowTemplate));\n            }\n            this.columns = Math.max(incrementNumber - 1, this.columns | 0);\n        }\n        return this.matrix;\n    };\n    Matrix.prototype.columnsCount = function (rowColumns, currentColumnCount) {\n        var columns = rowColumns;\n        var incrementNumber = currentColumnCount;\n        for (var i = 0; i < columns.length; i++) {\n            if (columns[parseInt(i.toString(), 10)].columns) {\n                incrementNumber = this.columnsCount(columns[parseInt(i.toString(), 10)].columns, incrementNumber);\n            }\n            else {\n                incrementNumber++;\n            }\n        }\n        return incrementNumber;\n    };\n    Matrix.prototype.inValid = function (value) {\n        return value === 0 || value === undefined;\n    };\n    return Matrix;\n}());\nexport { Matrix };\n/**\n * @hidden\n */\nvar ContentFocus = /** @class */ (function () {\n    function ContentFocus(parent) {\n        var _this = this;\n        this.matrix = new Matrix();\n        this.lastIdxCell = false;\n        this.parent = parent;\n        this.keyActions = {\n            'rightArrow': [0, 1],\n            'tab': [0, 1],\n            'leftArrow': [0, -1],\n            'shiftTab': [0, -1],\n            'upArrow': [-1, 0],\n            'downArrow': [1, 0],\n            'shiftUp': [-1, 0],\n            'shiftDown': [1, 0],\n            'shiftRight': [0, 1],\n            'shiftLeft': [0, -1],\n            'enter': [1, 0],\n            'shiftEnter': [-1, 0]\n        };\n        this.indexesByKey = function (action) {\n            var opt = {\n                'home': [_this.matrix.current[0], -1, 0, 1],\n                'end': [_this.matrix.current[0], _this.matrix.columns + 1, 0, -1],\n                'ctrlHome': [0, -1, 0, 1],\n                'ctrlEnd': [_this.matrix.rows, _this.matrix.columns + 1, 0, -1]\n            };\n            return opt[\"\" + action] || null;\n        };\n    }\n    ContentFocus.prototype.getTable = function () {\n        return (this.parent.getContentTable());\n    };\n    ContentFocus.prototype.onKeyPress = function (e) {\n        var isMacLike = /(Mac)/i.test(navigator.platform);\n        if (isMacLike && e.metaKey) {\n            if (e.action === 'home') {\n                e.action = 'ctrlHome';\n            }\n            else if (e.action === 'end') {\n                e.action = 'ctrlEnd';\n            }\n            else if (['downArrow', 'upArrow', 'leftArrow', 'rightArrow'].indexOf(e.action) !== -1) {\n                return;\n            }\n        }\n        var navigators = this.keyActions[e.action];\n        var current = this.getCurrentFromAction(e.action, navigators, e.action in this.keyActions, e);\n        if (!current) {\n            return;\n        }\n        if (((['tab', 'shiftTab'].indexOf(e.action) > -1 && this.matrix.current || []).toString() === current.toString())\n            || (this.parent.allowPaging && !this.parent.pagerModule.pagerObj.checkPagerHasFocus()\n                && this.matrix.current[0] === this.matrix.rows && ((this.parent.editSettings.mode === 'Batch'\n                && this.parent.editSettings.allowAdding && e.keyCode === 40) || (e.keyCode === 40)))) {\n            if (current.toString() === [this.matrix.rows, this.matrix.columns].toString() ||\n                current.toString() === [0, 0].toString() || (this.matrix.current[0] === this.matrix.rows &&\n                this.matrix.current.toString() === current.toString()) || (this.parent.allowGrouping &&\n                this.parent.infiniteScrollSettings.enableCache && current.toString() === [0, 1].toString())) {\n                return false;\n            }\n            else {\n                current = this.editNextRow(current[0], current[1], e.action);\n            }\n        }\n        this.matrix.select(current[0], current[1]);\n    };\n    ContentFocus.prototype.editNextRow = function (rowIndex, cellIndex, action) {\n        var gObj = this.parent;\n        var editNextRow = gObj.editSettings.allowNextRowEdit && (gObj.isEdit || gObj.isLastCellPrimaryKey);\n        var visibleIndex = gObj.getColumnIndexByField(gObj.getVisibleColumns()[0].field);\n        var cell = this.getTable().rows[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)];\n        if (action === 'tab' && editNextRow) {\n            rowIndex++;\n            var index = (this.getTable().rows[parseInt(rowIndex.toString(), 10)].getElementsByClassName('e-indentcell').length +\n                this.getTable().rows[parseInt(rowIndex.toString(), 10)].getElementsByClassName('e-detailrowcollapse').length);\n            cellIndex = visibleIndex + index;\n        }\n        if (action === 'shiftTab' && editNextRow) {\n            rowIndex--;\n            cellIndex = gObj.getColumnIndexByField(gObj.getVisibleColumns()[gObj.getVisibleColumns().length - 1].field);\n        }\n        return !cell.classList.contains(literals.rowCell) && !cell.classList.contains('e-headercell') &&\n            !cell.classList.contains('e-groupcaption') && !cell.classList.contains('e-filterbarcell') ?\n            this.editNextRow(rowIndex, cellIndex, action) : [rowIndex, cellIndex];\n    };\n    ContentFocus.prototype.getCurrentFromAction = function (action, navigator, isPresent, e) {\n        if (navigator === void 0) { navigator = [0, 0]; }\n        if (!isPresent && !this.indexesByKey(action) || (this.matrix.current.length === 0)) {\n            return null;\n        }\n        if (!this.shouldFocusChange(e)) {\n            return this.matrix.current;\n        }\n        // eslint-disable-next-line\n        var _a = this.indexesByKey(action) || this.matrix.current.concat(navigator), rowIndex = _a[0], cellIndex = _a[1], rN = _a[2], cN = _a[3];\n        if (this.parent.allowGrouping && this.parent.groupSettings.columns.length && this.parent.aggregates.length && action === 'enter') {\n            for (var i = rowIndex; i < this.matrix.matrix.length; i++) {\n                var row = this.getTable().rows[i + 1];\n                if (row && row.cells[parseInt(cellIndex.toString(), 10)] && row.cells[parseInt(cellIndex.toString(), 10)].classList.contains('e-rowcell')) {\n                    return [i + 1, cellIndex];\n                }\n                if (i === this.matrix.matrix.length - 1) {\n                    return [rowIndex, cellIndex];\n                }\n            }\n        }\n        if (action === 'ctrlEnd' || action === 'end') {\n            var lastContentCellIndex = [this.matrix.matrix.length - 1,\n                this.matrix.matrix[this.matrix.matrix.length - 1].length - 1];\n            if (action === 'end') {\n                lastContentCellIndex = [rowIndex, this.matrix.matrix[parseInt(rowIndex.toString(), 10)].length - 1];\n            }\n            if (this.matrix.matrix[lastContentCellIndex[0]][lastContentCellIndex[1]] === 0) {\n                lastContentCellIndex = findCellIndex(this.matrix.matrix, lastContentCellIndex, false);\n            }\n            rowIndex = lastContentCellIndex[0];\n            cellIndex = lastContentCellIndex[1] + 1;\n        }\n        var current = this.matrix.get(rowIndex, cellIndex, [rN, cN], action, this.validator());\n        return current;\n    };\n    ContentFocus.prototype.onClick = function (e, force) {\n        var target = e.target;\n        this.target = target;\n        target = (target.classList.contains(literals.rowCell) ? target : closest(target, 'td'));\n        target = target ? target : closest(e.target, 'td.e-detailrowcollapse')\n            || closest(e.target, 'td.e-detailrowexpand');\n        target = closest(e.target, 'td.e-detailcell') ?\n            isNullOrUndefined(closest(closest(e.target, '.e-grid'), 'td.e-detailcell')) ? null : target : target;\n        target = target && closest(target, 'table').classList.contains(literals.table) ? target : null;\n        if (!target) {\n            return false;\n        }\n        var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n        var _b = this.matrix.current, oRowIndex = _b[0], oCellIndex = _b[1];\n        var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n        if (this.matrix.inValid(val) || (!force && oRowIndex === rowIndex && oCellIndex === cellIndex) ||\n            (!parentsUntil(e.target, literals.rowCell) && !parentsUntil(e.target, 'e-groupcaption')\n                && !parentsUntil(e.target, 'e-recordpluscollapse') && !parentsUntil(e.target, 'e-recordplusexpand')\n                && !parentsUntil(e.target, 'e-detailrowcollapse') && !parentsUntil(e.target, 'e-detailrowexpand')\n                && !parentsUntil(e.target, 'e-templatecell'))) {\n            return false;\n        }\n        this.matrix.select(rowIndex, cellIndex);\n    };\n    ContentFocus.prototype.getFocusInfo = function () {\n        var info = {};\n        var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n        this.matrix.current = [rowIndex, cellIndex];\n        info.element = !isNullOrUndefined(this.getTable().rows[parseInt(rowIndex.toString(), 10)]) ?\n            this.getTable().rows[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)] : null;\n        if (!info.element) {\n            return info;\n        }\n        info.elementToFocus = !info.element.classList.contains('e-unboundcell') && !info.element.classList.contains('e-detailcell')\n            ? this.getFocusable(info.element) : info.element;\n        info.elementToFocus = info.element.classList.contains('e-detailcell') && info.element.querySelector('.e-childgrid')\n            ? info.element.querySelector('.e-childgrid') : info.elementToFocus;\n        info.outline = true;\n        info.uid = info.element.parentElement.getAttribute('data-uid');\n        return info;\n    };\n    ContentFocus.prototype.getFocusable = function (element) {\n        var query = 'button, [href], input:not([type=\"hidden\"]), select, textarea, [tabindex]:not([tabindex=\"-1\"])';\n        var isTemplate = !isNullOrUndefined(closest(element, '.e-templatecell'));\n        if (this.parent.isEdit) {\n            query = 'input:not([type=\"hidden\"]), select:not([aria-hidden=\"true\"]), textarea';\n        }\n        var child = [].slice.call(element.querySelectorAll(query));\n        /* Select the first focusable child element\n         * if no child found then select the cell itself.\n         * if Grid is in editable state, check for editable control inside child.\n         */\n        return child.length ? isTemplate && child.length > 1 ? this.target ? this.target : element : child[0] : element;\n    };\n    ContentFocus.prototype.selector = function (row, cell, isRowTemplate) {\n        var types = [CellType.Expand, CellType.GroupCaption, CellType.CaptionSummary, CellType.GroupSummary];\n        return ((row.isDataRow && cell.visible && (cell.isDataCell || cell.isTemplate))\n            || (row.isDataRow && cell.cellType === CellType.DetailExpand && isNullOrUndefined(cell.visible))\n            || (!row.isDataRow && types.indexOf(cell.cellType) > -1\n                && !((cell.cellType === CellType.GroupSummary || cell.cellType === CellType.CaptionSummary)\n                    && !(cell.isDataCell && cell.visible)))\n            || (cell.column && cell.visible && cell.column.type === 'checkbox')\n            || (cell.cellType === CellType.CommandColumn)\n            || (row.isDataRow && isRowTemplate))\n            && !(row.edit === 'delete' && row.isDirty);\n    };\n    ContentFocus.prototype.nextRowFocusValidate = function (index) {\n        var lastIndex = index;\n        for (var i = index, len = this.matrix.rows; i <= len; i++) {\n            if (this.matrix.matrix[parseInt(index.toString(), 10)].indexOf(1) === -1) {\n                index = index + 1;\n            }\n            else {\n                return index;\n            }\n        }\n        this.lastIdxCell = true;\n        return lastIndex;\n    };\n    ContentFocus.prototype.previousRowFocusValidate = function (index) {\n        var firstIndex = index;\n        for (var i = index, len = 0; i >= len; i--) {\n            if (this.matrix.matrix[parseInt(index.toString(), 10)].indexOf(1) === -1) {\n                index = index - 1;\n                if (index < 0) {\n                    this.lastIdxCell = true;\n                    return firstIndex;\n                }\n            }\n            else {\n                return index;\n            }\n        }\n        return firstIndex;\n    };\n    ContentFocus.prototype.jump = function (action, current) {\n        this.lastIdxCell = false;\n        var enterFrozen = this.parent.frozenRows !== 0 && action === 'shiftEnter';\n        var headerSwap = (action === 'upArrow' || enterFrozen) && current[0] === 0;\n        if (action === 'tab' && this.matrix.matrix.length &&\n            current[1] === this.matrix.matrix[current[0]].lastIndexOf(1) && this.matrix.matrix.length - 1 !== current[0]) {\n            this.matrix.current[0] = this.nextRowFocusValidate(this.matrix.current[0] + 1);\n            this.matrix.current[1] = -1;\n        }\n        if (action === 'shiftTab' &&\n            current[0] !== 0 && this.matrix.matrix[current[0]].indexOf(1) === current[1]) {\n            this.matrix.current[0] = this.previousRowFocusValidate(this.matrix.current[0] - 1);\n            this.matrix.current[1] = this.matrix.matrix[current[0]].length;\n        }\n        var isHeaderFocus = false;\n        var row = parentsUntil(document.activeElement, 'e-row');\n        if ((this.parent.enableVirtualization || this.parent.infiniteScrollSettings.enableCache)\n            && !isNullOrUndefined(row) && row.classList.contains(literals.row)) {\n            var rowIndex = parseInt(row.getAttribute(literals.dataRowIndex), 10);\n            isHeaderFocus = rowIndex > 0;\n        }\n        var info = {\n            swap: !isHeaderFocus ? ((action === 'upArrow' || enterFrozen) && current[0] === 0) : false,\n            toHeader: headerSwap\n        };\n        return info;\n    };\n    ContentFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n        if (previous === void 0) { previous = []; }\n        var current = [];\n        if (action === 'rightArrow' || action === 'tab') {\n            current[0] = previous[0];\n            current[1] = -1;\n        }\n        if (action === 'downArrow' || action === 'enter') {\n            current[0] = -1;\n            current[1] = previous[1];\n        }\n        return current;\n    };\n    ContentFocus.prototype.generateRows = function (rows, optionals) {\n        var _a;\n        var matrix = optionals.matrix, handlerInstance = optionals.handlerInstance;\n        var len = handlerInstance.matrix.matrix.length;\n        var defaultLen = this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar' ? len + 1 : len;\n        handlerInstance.matrix.matrix = handlerInstance.matrix.matrix.slice(0, defaultLen); //Header matrix update.\n        handlerInstance.matrix.rows = defaultLen;\n        (_a = handlerInstance.matrix.matrix).push.apply(_a, matrix);\n        handlerInstance.matrix.rows += matrix.length;\n    };\n    ContentFocus.prototype.getInfo = function (e) {\n        var info = this.getFocusInfo();\n        var _a = this.matrix.current, rIndex = _a[0], cIndex = _a[1];\n        var isData = info.element.classList.contains(literals.rowCell);\n        var isSelectable = isData || (e && e.action !== 'enter' && (info.element.classList.contains('e-detailrowcollapse')\n            || info.element.classList.contains('e-detailrowexpand')));\n        // eslint-disable-next-line\n        var _b = [Math.min(parseInt(info.element.parentElement.getAttribute(literals.dataRowIndex), 10), rIndex),\n            Math.min(parseInt(info.element.getAttribute(literals.dataColIndex), 10), cIndex)], rowIndex = _b[0], cellIndex = _b[1];\n        if (this.parent.allowGrouping && this.parent.groupSettings.enableLazyLoading && isData) {\n            rowIndex = this.parent.getDataRows().indexOf(info.element.parentElement);\n        }\n        return { isContent: true, isDataCell: isData, indexes: [rowIndex, cellIndex], isSelectable: isSelectable };\n    };\n    ContentFocus.prototype.validator = function () {\n        var table = this.getTable();\n        return function (rowIndex, cellIndex, action) {\n            if (!isNullOrUndefined(table.rows[parseInt(rowIndex.toString(), 10)])) {\n                var cell = void 0;\n                cellIndex = table.querySelector('.e-emptyrow') ? 0 : cellIndex;\n                if (table.rows[parseInt(rowIndex.toString(), 10)].cells[0].classList.contains('e-editcell')) {\n                    cell = table.rows[parseInt(rowIndex.toString(), 10)].cells[0].querySelectorAll('td')[parseInt(cellIndex.toString(), 10)];\n                }\n                else {\n                    cell = table.rows[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)];\n                }\n                var isCellWidth = cell.getBoundingClientRect().width !== 0;\n                if (action === 'enter' || action === 'shiftEnter') {\n                    return isCellWidth && cell.classList.contains(literals.rowCell);\n                }\n                if ((action === 'shiftUp' || action === 'shiftDown') && cell.classList.contains(literals.rowCell)) {\n                    return isCellWidth;\n                }\n                else if (action !== 'shiftUp' && action !== 'shiftDown') {\n                    return isCellWidth;\n                }\n            }\n            return false;\n        };\n    };\n    ContentFocus.prototype.shouldFocusChange = function (e) {\n        var _a = this.matrix.current, _b = _a[0], rIndex = _b === void 0 ? -1 : _b, _c = _a[1], cIndex = _c === void 0 ? -1 : _c;\n        if (rIndex < 0 || cIndex < 0) {\n            return true;\n        }\n        var cell = getValue(rIndex + \".cells.\" + cIndex, this.getTable().rows);\n        if (!cell) {\n            return true;\n        }\n        return e.action === 'enter' || e.action === 'shiftEnter' ?\n            cell.classList.contains(literals.rowCell) && !cell.classList.contains('e-unboundcell')\n                || cell.classList.contains('e-editedbatchcell') && !cell.classList.contains('e-detailcell') : true;\n    };\n    ContentFocus.prototype.getGridSeletion = function () {\n        return this.parent.allowSelection && this.parent.selectionSettings.allowColumnSelection;\n    };\n    return ContentFocus;\n}());\nexport { ContentFocus };\n/**\n * @hidden\n */\nvar HeaderFocus = /** @class */ (function (_super) {\n    __extends(HeaderFocus, _super);\n    function HeaderFocus(parent) {\n        return _super.call(this, parent) || this;\n    }\n    HeaderFocus.prototype.getTable = function () {\n        return (this.parent.getHeaderTable());\n    };\n    HeaderFocus.prototype.onClick = function (e) {\n        var target = e.target;\n        this.target = target;\n        target = (target.classList.contains('e-headercell') ? target : closest(target, 'th'));\n        if (!target && this.parent.frozenRows !== 0) {\n            target = (e.target.classList.contains(literals.rowCell) ? e.target :\n                closest(e.target, 'td'));\n        }\n        if (e.target.classList.contains('e-columnheader') ||\n            e.target.querySelector('.e-stackedheadercell')) {\n            return false;\n        }\n        if (!target) {\n            return;\n        }\n        var _a = [target.parentElement.rowIndex, target.cellIndex], rowIndex = _a[0], cellIndex = _a[1];\n        var val = getValue(rowIndex + \".\" + cellIndex, this.matrix.matrix);\n        if (this.matrix.inValid(val)) {\n            return false;\n        }\n        this.matrix.select(target.parentElement.rowIndex, target.cellIndex);\n    };\n    HeaderFocus.prototype.getFocusInfo = function () {\n        var info = {};\n        var _a = this.matrix.current, _b = _a[0], rowIndex = _b === void 0 ? 0 : _b, _c = _a[1], cellIndex = _c === void 0 ? 0 : _c;\n        info.element = this.getTable().rows[parseInt(rowIndex.toString(), 10)].cells[parseInt(cellIndex.toString(), 10)];\n        if (!isNullOrUndefined(info.element)) {\n            info.elementToFocus = this.getFocusable(info.element);\n            info.outline = !info.element.classList.contains('e-filterbarcell');\n        }\n        return info;\n    };\n    HeaderFocus.prototype.selector = function (row, cell) {\n        return (cell.visible && (cell.column.field !== undefined || cell.isTemplate || !isNullOrUndefined(cell.column.template)\n            || !isNullOrUndefined(cell.column.commands))) || cell.column.type === 'checkbox' || cell.cellType === CellType.StackedHeader;\n    };\n    HeaderFocus.prototype.jump = function (action, current) {\n        var enterFrozen = this.parent.frozenRows !== 0 && action === 'enter';\n        var isLastCell;\n        var lastRow;\n        if (this.parent.enableHeaderFocus && action === 'tab') {\n            lastRow = this.matrix.matrix.length - 1 === current[0];\n            isLastCell = current[1] === this.matrix.matrix[current[0]].lastIndexOf(1);\n            if (isLastCell) {\n                if (!lastRow) {\n                    this.matrix.current[0] = this.matrix.current[0] + 1;\n                }\n                else {\n                    this.matrix.current[0] = 0;\n                }\n                this.matrix.current[1] = -1;\n            }\n        }\n        return {\n            swap: ((action === 'downArrow' || enterFrozen) && current[0] === this.matrix.matrix.length - 1) ||\n                (action === 'tab' && lastRow && isLastCell)\n        };\n    };\n    HeaderFocus.prototype.getNextCurrent = function (previous, swap, active, action) {\n        if (previous === void 0) { previous = []; }\n        var current1 = [];\n        if (action === 'rightArrow' || (action === 'shiftRight' && this.getGridSeletion()) || action === 'tab') {\n            current1[0] = previous[0];\n            current1[1] = -1;\n        }\n        if (action === 'upArrow' || action === 'shiftEnter') {\n            current1[0] = this.matrix.matrix.length;\n            current1[1] = previous[1];\n        }\n        return current1;\n    };\n    HeaderFocus.prototype.generateRows = function (rows) {\n        var length = this.matrix.matrix.length;\n        if (this.parent.allowFiltering && this.parent.filterSettings.type === 'FilterBar') {\n            this.matrix.rows = ++this.matrix.rows;\n            var cells = rows[0].cells;\n            var incrementNumber = 0;\n            for (var i = 0; i < cells.length; i++) {\n                if (cells[parseInt(i.toString(), 10)].column && cells[parseInt(i.toString(), 10)].column.columns) {\n                    incrementNumber = this.checkFilterColumn(cells[parseInt(i.toString(), 10)].column.columns, length, incrementNumber);\n                }\n                else {\n                    this.matrix.set(length, incrementNumber, cells[parseInt(i.toString(), 10)].visible && cells[parseInt(i.toString(), 10)].column.allowFiltering !== false);\n                    incrementNumber++;\n                }\n            }\n        }\n    };\n    HeaderFocus.prototype.checkFilterColumn = function (rowColumns, rowIndex, columnIndex) {\n        var columns = rowColumns;\n        var incrementNumber = columnIndex;\n        for (var i = 0; i < columns.length; i++) {\n            if (columns[parseInt(i.toString(), 10)].columns) {\n                incrementNumber = this.checkFilterColumn(columns[parseInt(i.toString(), 10)].columns, rowIndex, incrementNumber);\n            }\n            else {\n                this.matrix.set(rowIndex, incrementNumber, columns[parseInt(i.toString(), 10)].visible && columns[parseInt(i.toString(), 10)].allowFiltering !== false);\n                incrementNumber++;\n            }\n        }\n        return incrementNumber;\n    };\n    HeaderFocus.prototype.getInfo = function (e) {\n        return extend(_super.prototype.getInfo.call(this, e), { isContent: false, isHeader: true });\n    };\n    HeaderFocus.prototype.validator = function () {\n        return function () { return true; };\n    };\n    HeaderFocus.prototype.shouldFocusChange = function (e) {\n        var _a = this.matrix.current, rowIndex = _a[0], columnIndex = _a[1];\n        if (rowIndex < 0 || columnIndex < 0) {\n            return true;\n        }\n        var cell = getValue(rowIndex + \".cells.\" + columnIndex, this.getTable().rows);\n        if (!cell) {\n            return true;\n        }\n        return e.action === 'enter' || e.action === 'altDownArrow' ? !cell.classList.contains('e-headercell') : true;\n    };\n    HeaderFocus.prototype.getHeaderType = function () {\n        return 'HeaderFocus';\n    };\n    return HeaderFocus;\n}(ContentFocus));\nexport { HeaderFocus };\n/** @hidden */\nvar SearchBox = /** @class */ (function () {\n    function SearchBox(searchBox, serviceLocator) {\n        this.searchBox = searchBox;\n        this.serviceLocator = serviceLocator;\n        this.l10n = this.serviceLocator.getService('localization');\n    }\n    SearchBox.prototype.searchFocus = function (args) {\n        args.target.parentElement.classList.add('e-input-focus');\n        if (args.target.classList.contains('e-input') && args.target.classList.contains('e-search') && args.target.value) {\n            var sIcon = args.target.parentElement.querySelector('.e-sicon');\n            sIcon.classList.add('e-clear-icon');\n            sIcon.setAttribute('title', this.l10n.getConstant('ClearButton'));\n            (sIcon).style.cursor = 'pointer';\n        }\n    };\n    SearchBox.prototype.searchBlur = function (args) {\n        var relatedTarget = args.relatedTarget ? args.relatedTarget : null;\n        if (relatedTarget && relatedTarget.classList.contains('e-sicon')) {\n            if (relatedTarget.classList.contains('e-clear-icon')) {\n                args.target.parentElement.classList.remove('e-input-focus');\n            }\n        }\n        else {\n            args.target.parentElement.classList.remove('e-input-focus');\n        }\n        if (args.target.classList.contains('e-search') && ((relatedTarget && !(relatedTarget.classList.contains('e-sicon e-clear-icon'))\n            && !(relatedTarget.classList.contains('e-sicon'))) || isNullOrUndefined(relatedTarget))) {\n            var sIcon = args.target.parentElement.querySelector('.e-sicon');\n            sIcon.classList.remove('e-clear-icon');\n            sIcon.removeAttribute('title');\n            sIcon.style.cursor = 'default';\n        }\n    };\n    SearchBox.prototype.wireEvent = function () {\n        if (this.searchBox) {\n            EventHandler.add(this.searchBox, 'focus', this.searchFocus, this);\n            EventHandler.add(this.searchBox, 'blur', this.searchBlur, this);\n        }\n    };\n    SearchBox.prototype.unWireEvent = function () {\n        if (this.searchBox) {\n            EventHandler.remove(this.searchBox, 'focus', this.searchFocus);\n            EventHandler.remove(this.searchBox, 'blur', this.searchBlur);\n        }\n    };\n    return SearchBox;\n}());\nexport { SearchBox };\n","//! moment.js locale configuration\n//! locale : Hebrew [he]\n//! author : Tomer Cohen : https://github.com/tomer\n//! author : Moshe Simantov : https://github.com/DevelopmentIL\n//! author : Tal Ater : https://github.com/TalAter\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var he = moment.defineLocale('he', {\n        months: 'ינואר_פברואר_מרץ_אפריל_מאי_יוני_יולי_אוגוסט_ספטמבר_אוקטובר_נובמבר_דצמבר'.split(\n            '_'\n        ),\n        monthsShort:\n            'ינו׳_פבר׳_מרץ_אפר׳_מאי_יוני_יולי_אוג׳_ספט׳_אוק׳_נוב׳_דצמ׳'.split('_'),\n        weekdays: 'ראשון_שני_שלישי_רביעי_חמישי_שישי_שבת'.split('_'),\n        weekdaysShort: 'א׳_ב׳_ג׳_ד׳_ה׳_ו׳_ש׳'.split('_'),\n        weekdaysMin: 'א_ב_ג_ד_ה_ו_ש'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [ב]MMMM YYYY',\n            LLL: 'D [ב]MMMM YYYY HH:mm',\n            LLLL: 'dddd, D [ב]MMMM YYYY HH:mm',\n            l: 'D/M/YYYY',\n            ll: 'D MMM YYYY',\n            lll: 'D MMM YYYY HH:mm',\n            llll: 'ddd, D MMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[היום ב־]LT',\n            nextDay: '[מחר ב־]LT',\n            nextWeek: 'dddd [בשעה] LT',\n            lastDay: '[אתמול ב־]LT',\n            lastWeek: '[ביום] dddd [האחרון בשעה] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'בעוד %s',\n            past: 'לפני %s',\n            s: 'מספר שניות',\n            ss: '%d שניות',\n            m: 'דקה',\n            mm: '%d דקות',\n            h: 'שעה',\n            hh: function (number) {\n                if (number === 2) {\n                    return 'שעתיים';\n                }\n                return number + ' שעות';\n            },\n            d: 'יום',\n            dd: function (number) {\n                if (number === 2) {\n                    return 'יומיים';\n                }\n                return number + ' ימים';\n            },\n            M: 'חודש',\n            MM: function (number) {\n                if (number === 2) {\n                    return 'חודשיים';\n                }\n                return number + ' חודשים';\n            },\n            y: 'שנה',\n            yy: function (number) {\n                if (number === 2) {\n                    return 'שנתיים';\n                } else if (number % 10 === 0 && number !== 10) {\n                    return number + ' שנה';\n                }\n                return number + ' שנים';\n            },\n        },\n        meridiemParse:\n            /אחה\"צ|לפנה\"צ|אחרי הצהריים|לפני הצהריים|לפנות בוקר|בבוקר|בערב/i,\n        isPM: function (input) {\n            return /^(אחה\"צ|אחרי הצהריים|בערב)$/.test(input);\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 5) {\n                return 'לפנות בוקר';\n            } else if (hour < 10) {\n                return 'בבוקר';\n            } else if (hour < 12) {\n                return isLower ? 'לפנה\"צ' : 'לפני הצהריים';\n            } else if (hour < 18) {\n                return isLower ? 'אחה\"צ' : 'אחרי הצהריים';\n            } else {\n                return 'בערב';\n            }\n        },\n    });\n\n    return he;\n\n})));\n","import { print as printWindow, createElement } from '@syncfusion/ej2-base';\nimport { getElement } from '../utils/helper';\nimport { beforePrint } from '../model/constants';\nvar PrintUtils = /** @class */ (function () {\n    /**\n     * Constructor for chart and accumulation annotation\n     *\n     * @param control\n     */\n    function PrintUtils(control) {\n        this.control = control;\n    }\n    /**\n     * To print the accumulation and chart elements.\n     *\n     * @param elements\n     */\n    PrintUtils.prototype.print = function (elements) {\n        this.printWindow = window.open('', 'print', 'height=' + window.outerHeight + ',width=' + window.outerWidth + ',tabbar=no');\n        this.printWindow.moveTo(0, 0);\n        this.printWindow.resizeTo(screen.availWidth, screen.availHeight);\n        var argsData = {\n            cancel: false, htmlContent: this.getHTMLContent(elements), name: beforePrint\n        };\n        this.control.trigger(beforePrint, argsData);\n        if (!argsData.cancel) {\n            printWindow(argsData.htmlContent, this.printWindow);\n        }\n    };\n    /**\n     * To get the html string of the chart and accumulation\n     *\n     * @param elements\n     * @private\n     */\n    PrintUtils.prototype.getHTMLContent = function (elements) {\n        var div = createElement('div');\n        if (elements) {\n            if (elements instanceof Array) {\n                for (var j = 0; j < elements.length; j++) {\n                    var value = elements[j];\n                    div.appendChild(getElement(value).cloneNode(true));\n                }\n            }\n            else if (elements instanceof Element) {\n                div.appendChild(elements.cloneNode(true));\n            }\n            else {\n                div.appendChild(getElement(elements).cloneNode(true));\n            }\n        }\n        else {\n            div.appendChild(this.control.element.cloneNode(true));\n        }\n        for (var index = 0; index < div.children.length; index++) {\n            var backgroundColor = (this.control.theme.indexOf('Dark') > -1 || this.control.theme === 'HighContrast') ? 'rgba(0, 0, 0, 1)' : 'rgba(255, 255, 255, 1)';\n            var svg = div.children[index];\n            for (var childIndex = 0; childIndex < svg.children.length; childIndex++) {\n                var actualBackgroundColor = void 0;\n                var isSVG = false;\n                if (svg.id.indexOf('_stockChart_svg') > -1) {\n                    actualBackgroundColor = svg.children[0].getAttribute('fill');\n                    isSVG = true;\n                }\n                else if (svg.children[childIndex].id.indexOf('_svg') > -1) {\n                    actualBackgroundColor = svg.children[childIndex].children[0].getAttribute('fill');\n                    isSVG = true;\n                }\n                if (isSVG) {\n                    actualBackgroundColor = actualBackgroundColor === 'transparent' ? backgroundColor : actualBackgroundColor;\n                    svg.children[childIndex].children[0].setAttribute('fill', actualBackgroundColor);\n                }\n            }\n            div[index] = svg;\n        }\n        return div;\n    };\n    return PrintUtils;\n}());\nexport { PrintUtils };\n","//! moment.js locale configuration\n//! locale : Albanian [sq]\n//! author : Flakërim Ismani : https://github.com/flakerimi\n//! author : Menelion Elensúle : https://github.com/Oire\n//! author : Oerd Cukalla : https://github.com/oerd\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var sq = moment.defineLocale('sq', {\n        months: 'Janar_Shkurt_Mars_Prill_Maj_Qershor_Korrik_Gusht_Shtator_Tetor_Nëntor_Dhjetor'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Shk_Mar_Pri_Maj_Qer_Kor_Gus_Sht_Tet_Nën_Dhj'.split('_'),\n        weekdays: 'E Diel_E Hënë_E Martë_E Mërkurë_E Enjte_E Premte_E Shtunë'.split(\n            '_'\n        ),\n        weekdaysShort: 'Die_Hën_Mar_Mër_Enj_Pre_Sht'.split('_'),\n        weekdaysMin: 'D_H_Ma_Më_E_P_Sh'.split('_'),\n        weekdaysParseExact: true,\n        meridiemParse: /PD|MD/,\n        isPM: function (input) {\n            return input.charAt(0) === 'M';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            return hours < 12 ? 'PD' : 'MD';\n        },\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Sot në] LT',\n            nextDay: '[Nesër në] LT',\n            nextWeek: 'dddd [në] LT',\n            lastDay: '[Dje në] LT',\n            lastWeek: 'dddd [e kaluar në] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'në %s',\n            past: '%s më parë',\n            s: 'disa sekonda',\n            ss: '%d sekonda',\n            m: 'një minutë',\n            mm: '%d minuta',\n            h: 'një orë',\n            hh: '%d orë',\n            d: 'një ditë',\n            dd: '%d ditë',\n            M: 'një muaj',\n            MM: '%d muaj',\n            y: 'një vit',\n            yy: '%d vite',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return sq;\n\n})));\n","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./HedgingOverviewReportTemplate.vue?vue&type=style&index=0&id=7c78f8cc&prod&lang=css\"","export * from \"-!../../../node_modules/mini-css-extract-plugin/dist/loader.js??ref--6-oneOf-1-0!../../../node_modules/css-loader/dist/cjs.js??ref--6-oneOf-1-1!../../../node_modules/vue-loader/lib/loaders/stylePostLoader.js!../../../node_modules/postcss-loader/src/index.js??ref--6-oneOf-1-2!../../../node_modules/cache-loader/dist/cjs.js??ref--0-0!../../../node_modules/vue-loader/lib/index.js??vue-loader-options!./TicketsReportTemplate.vue?vue&type=style&index=0&id=17903d5c&prod&lang=css\"","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Property, ChildProperty, Complex, Collection, Browser } from '@syncfusion/ej2-base';\n/**\n * Defines the appearance of the connectors\n */\nvar Connector = /** @class */ (function (_super) {\n    __extends(Connector, _super);\n    function Connector() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('Line')\n    ], Connector.prototype, \"type\", void 0);\n    __decorate([\n        Property(null)\n    ], Connector.prototype, \"color\", void 0);\n    __decorate([\n        Property(1)\n    ], Connector.prototype, \"width\", void 0);\n    __decorate([\n        Property(null)\n    ], Connector.prototype, \"length\", void 0);\n    __decorate([\n        Property('')\n    ], Connector.prototype, \"dashArray\", void 0);\n    return Connector;\n}(ChildProperty));\nexport { Connector };\n/**\n * Configures the borders in the chart title.\n */\nvar titleBorder = /** @class */ (function (_super) {\n    __extends(titleBorder, _super);\n    function titleBorder() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('transparent')\n    ], titleBorder.prototype, \"color\", void 0);\n    __decorate([\n        Property(0)\n    ], titleBorder.prototype, \"width\", void 0);\n    __decorate([\n        Property(0.8)\n    ], titleBorder.prototype, \"cornerRadius\", void 0);\n    return titleBorder;\n}(ChildProperty));\nexport { titleBorder };\n/**\n * Configures the title settings in chart and 3D chart.\n */\nvar titleSettings = /** @class */ (function (_super) {\n    __extends(titleSettings, _super);\n    function titleSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('Normal')\n    ], titleSettings.prototype, \"fontStyle\", void 0);\n    __decorate([\n        Property('15px')\n    ], titleSettings.prototype, \"size\", void 0);\n    __decorate([\n        Property('500')\n    ], titleSettings.prototype, \"fontWeight\", void 0);\n    __decorate([\n        Property('')\n    ], titleSettings.prototype, \"color\", void 0);\n    __decorate([\n        Property('Center')\n    ], titleSettings.prototype, \"textAlignment\", void 0);\n    __decorate([\n        Property('Segoe UI')\n    ], titleSettings.prototype, \"fontFamily\", void 0);\n    __decorate([\n        Property(1)\n    ], titleSettings.prototype, \"opacity\", void 0);\n    __decorate([\n        Property('Wrap')\n    ], titleSettings.prototype, \"textOverflow\", void 0);\n    __decorate([\n        Property('Top')\n    ], titleSettings.prototype, \"position\", void 0);\n    __decorate([\n        Property(0)\n    ], titleSettings.prototype, \"x\", void 0);\n    __decorate([\n        Property(0)\n    ], titleSettings.prototype, \"y\", void 0);\n    __decorate([\n        Property('transparent')\n    ], titleSettings.prototype, \"background\", void 0);\n    __decorate([\n        Complex({}, titleBorder)\n    ], titleSettings.prototype, \"border\", void 0);\n    return titleSettings;\n}(ChildProperty));\nexport { titleSettings };\n/**\n * Configures the location for the legend.\n */\nvar Location = /** @class */ (function (_super) {\n    __extends(Location, _super);\n    function Location() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(0)\n    ], Location.prototype, \"x\", void 0);\n    __decorate([\n        Property(0)\n    ], Location.prototype, \"y\", void 0);\n    return Location;\n}(ChildProperty));\nexport { Location };\n/**\n * Configures the fonts in charts.\n */\nvar Font = /** @class */ (function (_super) {\n    __extends(Font, _super);\n    function Font() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('Normal')\n    ], Font.prototype, \"fontStyle\", void 0);\n    __decorate([\n        Property('16px')\n    ], Font.prototype, \"size\", void 0);\n    __decorate([\n        Property('Normal')\n    ], Font.prototype, \"fontWeight\", void 0);\n    __decorate([\n        Property('')\n    ], Font.prototype, \"color\", void 0);\n    __decorate([\n        Property('Center')\n    ], Font.prototype, \"textAlignment\", void 0);\n    __decorate([\n        Property('Segoe UI')\n    ], Font.prototype, \"fontFamily\", void 0);\n    __decorate([\n        Property(1)\n    ], Font.prototype, \"opacity\", void 0);\n    __decorate([\n        Property('Wrap')\n    ], Font.prototype, \"textOverflow\", void 0);\n    return Font;\n}(ChildProperty));\nexport { Font };\n/**\n * Configures the borders in the chart.\n */\nvar Border = /** @class */ (function (_super) {\n    __extends(Border, _super);\n    function Border() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('')\n    ], Border.prototype, \"color\", void 0);\n    __decorate([\n        Property(1)\n    ], Border.prototype, \"width\", void 0);\n    return Border;\n}(ChildProperty));\nexport { Border };\n/**\n * Configures the marker position in the chart.\n */\nvar Offset = /** @class */ (function (_super) {\n    __extends(Offset, _super);\n    function Offset() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(0)\n    ], Offset.prototype, \"x\", void 0);\n    __decorate([\n        Property(0)\n    ], Offset.prototype, \"y\", void 0);\n    return Offset;\n}(ChildProperty));\nexport { Offset };\n/**\n * Configures the chart area.\n */\nvar ChartArea = /** @class */ (function (_super) {\n    __extends(ChartArea, _super);\n    function ChartArea() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Complex({}, Border)\n    ], ChartArea.prototype, \"border\", void 0);\n    __decorate([\n        Property('transparent')\n    ], ChartArea.prototype, \"background\", void 0);\n    __decorate([\n        Property(1)\n    ], ChartArea.prototype, \"opacity\", void 0);\n    __decorate([\n        Property(null)\n    ], ChartArea.prototype, \"backgroundImage\", void 0);\n    __decorate([\n        Property(null)\n    ], ChartArea.prototype, \"width\", void 0);\n    return ChartArea;\n}(ChildProperty));\nexport { ChartArea };\n/**\n * Configures the chart margins.\n */\nvar Margin = /** @class */ (function (_super) {\n    __extends(Margin, _super);\n    function Margin() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(Browser.isDevice ? 5 : 10)\n    ], Margin.prototype, \"left\", void 0);\n    __decorate([\n        Property(Browser.isDevice ? 5 : 10)\n    ], Margin.prototype, \"right\", void 0);\n    __decorate([\n        Property(Browser.isDevice ? 5 : 10)\n    ], Margin.prototype, \"top\", void 0);\n    __decorate([\n        Property(Browser.isDevice ? 5 : 10)\n    ], Margin.prototype, \"bottom\", void 0);\n    return Margin;\n}(ChildProperty));\nexport { Margin };\n/**\n * Configures the chart Legend Container Padding.\n */\nvar ContainerPadding = /** @class */ (function (_super) {\n    __extends(ContainerPadding, _super);\n    function ContainerPadding() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(0)\n    ], ContainerPadding.prototype, \"left\", void 0);\n    __decorate([\n        Property(0)\n    ], ContainerPadding.prototype, \"right\", void 0);\n    __decorate([\n        Property(0)\n    ], ContainerPadding.prototype, \"top\", void 0);\n    __decorate([\n        Property(0)\n    ], ContainerPadding.prototype, \"bottom\", void 0);\n    return ContainerPadding;\n}(ChildProperty));\nexport { ContainerPadding };\n/**\n * Configures the animation behavior for chart series.\n */\nvar Animation = /** @class */ (function (_super) {\n    __extends(Animation, _super);\n    function Animation() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(true)\n    ], Animation.prototype, \"enable\", void 0);\n    __decorate([\n        Property(1000)\n    ], Animation.prototype, \"duration\", void 0);\n    __decorate([\n        Property(0)\n    ], Animation.prototype, \"delay\", void 0);\n    return Animation;\n}(ChildProperty));\nexport { Animation };\n/**\n * Series and point index\n *\n * @public\n */\nvar Indexes = /** @class */ (function (_super) {\n    __extends(Indexes, _super);\n    function Indexes() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(0)\n    ], Indexes.prototype, \"series\", void 0);\n    __decorate([\n        Property(0)\n    ], Indexes.prototype, \"point\", void 0);\n    return Indexes;\n}(ChildProperty));\nexport { Indexes };\n/**\n * Column series rounded corner options\n */\nvar CornerRadius = /** @class */ (function (_super) {\n    __extends(CornerRadius, _super);\n    function CornerRadius() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(0)\n    ], CornerRadius.prototype, \"topLeft\", void 0);\n    __decorate([\n        Property(0)\n    ], CornerRadius.prototype, \"topRight\", void 0);\n    __decorate([\n        Property(0)\n    ], CornerRadius.prototype, \"bottomLeft\", void 0);\n    __decorate([\n        Property(0)\n    ], CornerRadius.prototype, \"bottomRight\", void 0);\n    return CornerRadius;\n}(ChildProperty));\nexport { CornerRadius };\n/**\n * @private\n */\nvar Index = /** @class */ (function () {\n    function Index(seriesIndex, pointIndex) {\n        this.series = seriesIndex;\n        this.point = pointIndex;\n    }\n    return Index;\n}());\nexport { Index };\n/**\n * Configures the Empty Points of series\n */\nvar EmptyPointSettings = /** @class */ (function (_super) {\n    __extends(EmptyPointSettings, _super);\n    function EmptyPointSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(null)\n    ], EmptyPointSettings.prototype, \"fill\", void 0);\n    __decorate([\n        Complex({ color: 'transparent', width: 0 }, Border)\n    ], EmptyPointSettings.prototype, \"border\", void 0);\n    __decorate([\n        Property('Gap')\n    ], EmptyPointSettings.prototype, \"mode\", void 0);\n    return EmptyPointSettings;\n}(ChildProperty));\nexport { EmptyPointSettings };\n/**\n * Configures the drag settings of series\n */\nvar DragSettings = /** @class */ (function (_super) {\n    __extends(DragSettings, _super);\n    function DragSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(false)\n    ], DragSettings.prototype, \"enable\", void 0);\n    __decorate([\n        Property(null)\n    ], DragSettings.prototype, \"minY\", void 0);\n    __decorate([\n        Property(null)\n    ], DragSettings.prototype, \"maxY\", void 0);\n    __decorate([\n        Property(null)\n    ], DragSettings.prototype, \"fill\", void 0);\n    return DragSettings;\n}(ChildProperty));\nexport { DragSettings };\n/**\n * Options to customize the center label of the pie and doughnut chart.\n *\n * @default {}\n */\nvar CenterLabel = /** @class */ (function (_super) {\n    __extends(CenterLabel, _super);\n    function CenterLabel() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(null)\n    ], CenterLabel.prototype, \"text\", void 0);\n    __decorate([\n        Complex({ fontFamily: null, size: \"16px\", fontStyle: 'Normal', fontWeight: '600', color: null }, Font)\n    ], CenterLabel.prototype, \"textStyle\", void 0);\n    __decorate([\n        Property(null)\n    ], CenterLabel.prototype, \"hoverTextFormat\", void 0);\n    return CenterLabel;\n}(ChildProperty));\nexport { CenterLabel };\n/**\n * Configures the ToolTips in the chart.\n *\n * @public\n */\nvar TooltipSettings = /** @class */ (function (_super) {\n    __extends(TooltipSettings, _super);\n    function TooltipSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(false)\n    ], TooltipSettings.prototype, \"enable\", void 0);\n    __decorate([\n        Property(true)\n    ], TooltipSettings.prototype, \"enableMarker\", void 0);\n    __decorate([\n        Property(false)\n    ], TooltipSettings.prototype, \"shared\", void 0);\n    __decorate([\n        Property(null)\n    ], TooltipSettings.prototype, \"fill\", void 0);\n    __decorate([\n        Property(null)\n    ], TooltipSettings.prototype, \"header\", void 0);\n    __decorate([\n        Property(null)\n    ], TooltipSettings.prototype, \"opacity\", void 0);\n    __decorate([\n        Complex({ fontFamily: null, size: \"12px\", fontStyle: 'Normal', fontWeight: null, color: null }, Font)\n    ], TooltipSettings.prototype, \"textStyle\", void 0);\n    __decorate([\n        Property(null)\n    ], TooltipSettings.prototype, \"format\", void 0);\n    __decorate([\n        Property(null)\n    ], TooltipSettings.prototype, \"template\", void 0);\n    __decorate([\n        Property(true)\n    ], TooltipSettings.prototype, \"enableAnimation\", void 0);\n    __decorate([\n        Property(300)\n    ], TooltipSettings.prototype, \"duration\", void 0);\n    __decorate([\n        Property(1000)\n    ], TooltipSettings.prototype, \"fadeOutDuration\", void 0);\n    __decorate([\n        Property('Move')\n    ], TooltipSettings.prototype, \"fadeOutMode\", void 0);\n    __decorate([\n        Property(false)\n    ], TooltipSettings.prototype, \"enableTextWrap\", void 0);\n    __decorate([\n        Property(true)\n    ], TooltipSettings.prototype, \"showNearestPoint\", void 0);\n    __decorate([\n        Complex({ color: null, width: null }, Border)\n    ], TooltipSettings.prototype, \"border\", void 0);\n    __decorate([\n        Complex({ x: null, y: null }, Location)\n    ], TooltipSettings.prototype, \"location\", void 0);\n    return TooltipSettings;\n}(ChildProperty));\nexport { TooltipSettings };\nvar StockTooltipSettings = /** @class */ (function (_super) {\n    __extends(StockTooltipSettings, _super);\n    function StockTooltipSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(false)\n    ], StockTooltipSettings.prototype, \"enable\", void 0);\n    __decorate([\n        Property(true)\n    ], StockTooltipSettings.prototype, \"enableMarker\", void 0);\n    __decorate([\n        Property(false)\n    ], StockTooltipSettings.prototype, \"shared\", void 0);\n    __decorate([\n        Property(null)\n    ], StockTooltipSettings.prototype, \"fill\", void 0);\n    __decorate([\n        Property(null)\n    ], StockTooltipSettings.prototype, \"header\", void 0);\n    __decorate([\n        Property(0.75)\n    ], StockTooltipSettings.prototype, \"opacity\", void 0);\n    __decorate([\n        Complex({ fontFamily: null, size: \"12px\", fontStyle: 'Normal', fontWeight: null, color: null }, Font)\n    ], StockTooltipSettings.prototype, \"textStyle\", void 0);\n    __decorate([\n        Property(null)\n    ], StockTooltipSettings.prototype, \"format\", void 0);\n    __decorate([\n        Property(null)\n    ], StockTooltipSettings.prototype, \"template\", void 0);\n    __decorate([\n        Property(true)\n    ], StockTooltipSettings.prototype, \"enableAnimation\", void 0);\n    __decorate([\n        Property(300)\n    ], StockTooltipSettings.prototype, \"duration\", void 0);\n    __decorate([\n        Property(1000)\n    ], StockTooltipSettings.prototype, \"fadeOutDuration\", void 0);\n    __decorate([\n        Property('Move')\n    ], StockTooltipSettings.prototype, \"fadeOutMode\", void 0);\n    __decorate([\n        Property(false)\n    ], StockTooltipSettings.prototype, \"enableTextWrap\", void 0);\n    __decorate([\n        Property(true)\n    ], StockTooltipSettings.prototype, \"showNearestPoint\", void 0);\n    __decorate([\n        Complex({ color: null, width: null }, Border)\n    ], StockTooltipSettings.prototype, \"border\", void 0);\n    __decorate([\n        Property('Fixed')\n    ], StockTooltipSettings.prototype, \"position\", void 0);\n    return StockTooltipSettings;\n}(ChildProperty));\nexport { StockTooltipSettings };\n/**\n * button settings in period selector\n */\nvar Periods = /** @class */ (function (_super) {\n    __extends(Periods, _super);\n    function Periods() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('Years')\n    ], Periods.prototype, \"intervalType\", void 0);\n    __decorate([\n        Property(1)\n    ], Periods.prototype, \"interval\", void 0);\n    __decorate([\n        Property(null)\n    ], Periods.prototype, \"text\", void 0);\n    __decorate([\n        Property(false)\n    ], Periods.prototype, \"selected\", void 0);\n    return Periods;\n}(ChildProperty));\nexport { Periods };\n/**\n * Period Selector Settings\n */\nvar PeriodSelectorSettings = /** @class */ (function (_super) {\n    __extends(PeriodSelectorSettings, _super);\n    function PeriodSelectorSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property(43)\n    ], PeriodSelectorSettings.prototype, \"height\", void 0);\n    __decorate([\n        Property('Bottom')\n    ], PeriodSelectorSettings.prototype, \"position\", void 0);\n    __decorate([\n        Collection([], Periods)\n    ], PeriodSelectorSettings.prototype, \"periods\", void 0);\n    return PeriodSelectorSettings;\n}(ChildProperty));\nexport { PeriodSelectorSettings };\n","import { getMinPointsDelta, getActualDesiredIntervalsCount, setRange, triggerLabelRender } from '../../common/utils/helper';\nimport { DoubleRange } from '../utils/double-range';\nimport { withIn, logBase } from '../../common/utils/helper';\nimport { isNullOrUndefined, extend, getValue } from '@syncfusion/ej2-base';\n/**\n * Numeric module is used to render numeric axis.\n */\nvar Double = /** @class */ (function () {\n    /**\n     * Constructor for the dateTime module.\n     *\n     * @private\n     */\n    function Double(chart) {\n        this.isColumn = 0;\n        this.isStacking = false;\n        this.chart = chart;\n    }\n    /**\n     * Numeric Nice Interval for the axis.\n     *\n     * @private\n     */\n    Double.prototype.calculateNumericNiceInterval = function (axis, delta, size) {\n        var actualDesiredIntervalsCount = getActualDesiredIntervalsCount(size, axis);\n        var niceInterval = delta / actualDesiredIntervalsCount;\n        if (!isNullOrUndefined(axis.desiredIntervals)) {\n            if (this.isAutoIntervalOnBothAxis(axis)) {\n                return niceInterval;\n            }\n        }\n        var minInterval = Math.pow(10, Math.floor(logBase(niceInterval, 10)));\n        for (var _i = 0, _a = axis.intervalDivs; _i < _a.length; _i++) {\n            var interval = _a[_i];\n            var currentInterval = minInterval * interval;\n            if (actualDesiredIntervalsCount < (delta / currentInterval)) {\n                break;\n            }\n            niceInterval = currentInterval;\n        }\n        return niceInterval;\n    };\n    /**\n     * Actual Range for the axis.\n     *\n     * @private\n     */\n    Double.prototype.isAutoIntervalOnBothAxis = function (axis) {\n        if (((axis.zoomFactor < 1 || axis.zoomPosition > 0) && axis.enableAutoIntervalOnZooming)) {\n            return false;\n        }\n        else {\n            return true;\n        }\n    };\n    Double.prototype.getActualRange = function (axis, size) {\n        this.initializeDoubleRange(axis);\n        if ((!axis.startFromZero) && (this.isColumn > 0)) {\n            axis.actualRange.interval = axis.interval || this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n            axis.actualRange.max = axis.doubleRange.end + axis.actualRange.interval;\n            if ((axis.doubleRange.start - axis.actualRange.interval < 0 && axis.doubleRange.start > 0)) {\n                axis.actualRange.min = 0;\n            }\n            else {\n                axis.actualRange.min = axis.doubleRange.start - (this.isStacking ? 0 : axis.actualRange.interval);\n            }\n        }\n        else {\n            axis.actualRange.interval = axis.interval || this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n            axis.actualRange.min = axis.doubleRange.start;\n            axis.actualRange.max = axis.doubleRange.end;\n        }\n    };\n    /**\n     * Range for the axis.\n     *\n     * @private\n     */\n    Double.prototype.initializeDoubleRange = function (axis) {\n        //Axis Min\n        if (axis.minimum !== null) {\n            this.min = axis.minimum;\n        }\n        else if (this.min === null || this.min === Number.POSITIVE_INFINITY) {\n            this.min = 0;\n        }\n        // Axis Max\n        if (axis.maximum !== null) {\n            this.max = axis.maximum;\n        }\n        else if (this.max === null || this.max === Number.NEGATIVE_INFINITY) {\n            this.max = 5;\n        }\n        if (this.min === this.max) {\n            this.max = axis.valueType.indexOf('Category') > -1 ? this.max : this.min + 1;\n        }\n        axis.doubleRange = new DoubleRange(this.min, this.max);\n        axis.actualRange = {};\n    };\n    /**\n     * The function to calculate the range and labels for the axis.\n     *\n     * @returns {void}\n     * @private\n     */\n    Double.prototype.calculateRangeAndInterval = function (size, axis) {\n        this.calculateRange(axis);\n        this.getActualRange(axis, size);\n        this.applyRangePadding(axis, size);\n        this.calculateVisibleLabels(axis, this.chart);\n    };\n    /**\n     * Calculate Range for the axis.\n     *\n     * @private\n     */\n    Double.prototype.calculateRange = function (axis) {\n        /*! Generate axis range */\n        this.min = null;\n        this.max = null;\n        if (!setRange(axis)) {\n            for (var _i = 0, _a = axis.series; _i < _a.length; _i++) {\n                var series = _a[_i];\n                if (!series.visible) {\n                    continue;\n                }\n                this.paddingInterval = 0;\n                if (!isNullOrUndefined(series.points)) {\n                    axis.maxPointLength = series.points.length;\n                }\n                axis.maxPointLength = series.points.length;\n                if (((series.type.indexOf('Column') > -1 || series.type.indexOf('Histogram') > -1) && axis.orientation === 'Horizontal')\n                    || (series.type.indexOf('Bar') > -1 && axis.orientation === 'Vertical')) {\n                    if ((series.xAxis.valueType === 'Double' || series.xAxis.valueType === 'DateTime')\n                        && series.xAxis.rangePadding === 'Auto') {\n                        this.paddingInterval = getMinPointsDelta(series.xAxis, axis.series) * 0.5;\n                    }\n                }\n                //For xRange\n                if (axis.orientation === 'Horizontal') {\n                    if (this.chart.requireInvertedAxis) {\n                        this.yAxisRange(axis, series);\n                    }\n                    else {\n                        this.findMinMax(series.xMin - this.paddingInterval, series.xMax + this.paddingInterval);\n                    }\n                }\n                // For yRange\n                if (axis.orientation === 'Vertical') {\n                    this.isColumn += (series.type.indexOf('Column') !== -1 || series.type.indexOf('Bar') !== -1 || series.drawType === 'Column') ? 1 : 0;\n                    this.isStacking = series.type.indexOf('Stacking') !== -1;\n                    if (this.chart.requireInvertedAxis) {\n                        this.findMinMax(series.xMin - this.paddingInterval, series.xMax + this.paddingInterval);\n                    }\n                    else {\n                        this.yAxisRange(axis, series);\n                    }\n                }\n            }\n        }\n    };\n    Double.prototype.yAxisRange = function (axis, series) {\n        if (series.dragSettings.enable && this.chart.dragY) {\n            if (this.chart.dragY >= axis.visibleRange.max) {\n                series.yMax = this.chart.dragY + axis.visibleRange.interval;\n            }\n            if (this.chart.dragY <= axis.visibleRange.min) {\n                series.yMin = this.chart.dragY - axis.visibleRange.interval;\n            }\n        }\n        this.findMinMax(series.yMin, series.yMax);\n    };\n    Double.prototype.findMinMax = function (min, max) {\n        if (this.min === null || this.min > min) {\n            this.min = min;\n        }\n        if (this.max === null || this.max < max) {\n            this.max = max;\n        }\n        if ((this.max === this.min) && this.max < 0 && this.min < 0) { // max == min\n            this.max = 0;\n        }\n    };\n    /**\n     * Apply padding for the range.\n     *\n     * @private\n     */\n    Double.prototype.applyRangePadding = function (axis, size) {\n        var start = axis.actualRange.min;\n        var end = axis.actualRange.max;\n        if (!setRange(axis)) {\n            var interval = axis.actualRange.interval;\n            var padding = axis.getRangePadding(this.chart);\n            if (padding === 'Additional' || padding === 'Round') {\n                this.findAdditional(axis, start, end, interval, size);\n            }\n            else if (padding === 'Normal') {\n                this.findNormal(axis, start, end, interval, size);\n            }\n            else {\n                this.updateActualRange(axis, start, end, interval);\n            }\n        }\n        axis.actualRange.delta = axis.actualRange.max - axis.actualRange.min;\n        this.calculateVisibleRange(size, axis);\n    };\n    Double.prototype.updateActualRange = function (axis, minimum, maximum, interval) {\n        axis.actualRange = {\n            min: axis.minimum != null ? axis.minimum : minimum,\n            max: axis.maximum != null ? axis.maximum : maximum,\n            interval: axis.interval != null ? axis.interval : interval,\n            delta: axis.actualRange.delta\n        };\n    };\n    Double.prototype.findAdditional = function (axis, start, end, interval, size) {\n        var minimum;\n        var maximum;\n        minimum = Math.floor(start / interval) * interval;\n        maximum = Math.ceil(end / interval) * interval;\n        if (axis.rangePadding === 'Additional') {\n            minimum -= interval;\n            maximum += interval;\n        }\n        if (!isNullOrUndefined(axis.desiredIntervals)) {\n            var delta = maximum - minimum;\n            interval = this.calculateNumericNiceInterval(axis, delta, size);\n        }\n        this.updateActualRange(axis, minimum, maximum, interval);\n    };\n    Double.prototype.findNormal = function (axis, start, end, interval, size) {\n        var remaining;\n        var minimum;\n        var maximum;\n        var startValue = start;\n        if (start < 0) {\n            startValue = 0;\n            minimum = start + (start * 0.05);\n            remaining = interval + (minimum % interval);\n            if ((0.365 * interval) >= remaining) {\n                minimum -= interval;\n            }\n            if (minimum % interval < 0) {\n                minimum = (minimum - interval) - (minimum % interval);\n            }\n        }\n        else {\n            minimum = start < ((5.0 / 6.0) * end) ? 0 : (start - (end - start) * 0.5);\n            if (minimum % interval > 0) {\n                minimum -= (minimum % interval);\n            }\n        }\n        maximum = (end > 0) ? (end + (end - startValue) * 0.05) : (end - (end - startValue) * 0.05);\n        remaining = interval - (maximum % interval);\n        if ((0.365 * interval) >= remaining) {\n            maximum += interval;\n        }\n        if (maximum % interval > 0) {\n            maximum = (maximum + interval) - (maximum % interval);\n        }\n        axis.doubleRange = new DoubleRange(minimum, maximum);\n        if (minimum === 0 || (minimum < 0 && maximum < 0)) {\n            interval = this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size);\n            maximum = Math.ceil(maximum / interval) * interval;\n        }\n        this.updateActualRange(axis, minimum, maximum, interval);\n    };\n    /**\n     * Calculate visible range for axis.\n     *\n     * @private\n     */\n    Double.prototype.calculateVisibleRange = function (size, axis) {\n        axis.visibleRange = {\n            max: axis.actualRange.max, min: axis.actualRange.min,\n            delta: axis.actualRange.delta, interval: axis.actualRange.interval\n        };\n        if (this.chart.chartAreaType === 'Cartesian') {\n            var isLazyLoad = isNullOrUndefined(axis.zoomingScrollBar) ? false : axis.zoomingScrollBar.isLazyLoad;\n            if ((axis.zoomFactor < 1 || axis.zoomPosition > 0) && !isLazyLoad) {\n                axis.calculateVisibleRangeOnZooming(size);\n                axis.visibleRange.interval = (axis.enableAutoIntervalOnZooming) ?\n                    this.calculateNumericNiceInterval(axis, axis.doubleRange.delta, size)\n                    : axis.visibleRange.interval;\n            }\n        }\n        if (axis.maximum && axis.orientation === 'Vertical' && axis.rangePadding === 'Auto') {\n            var duplicateTempInterval = void 0;\n            var tempInterval = axis.visibleRange.min;\n            for (; (tempInterval <= axis.visibleRange.max) && (duplicateTempInterval !== tempInterval); tempInterval += axis.visibleRange.interval) {\n                duplicateTempInterval = tempInterval;\n            }\n            if (duplicateTempInterval < axis.visibleRange.max) {\n                axis.visibleRange.max = duplicateTempInterval + axis.visibleRange.interval;\n            }\n        }\n        axis.triggerRangeRender(this.chart, axis.visibleRange.min, axis.visibleRange.max, axis.visibleRange.interval);\n    };\n    /**\n     * Calculate label for the axis.\n     *\n     * @private\n     */\n    Double.prototype.calculateVisibleLabels = function (axis, chart) {\n        /*! Generate axis labels */\n        axis.visibleLabels = [];\n        var tempInterval = axis.visibleRange.min;\n        var labelStyle;\n        var controlName = chart.getModuleName();\n        var isPolarRadar = controlName === 'chart' && chart.chartAreaType === 'PolarRadar';\n        if (!isPolarRadar && (axis.zoomFactor < 1 || axis.zoomPosition > 0 || this.paddingInterval)) {\n            tempInterval = axis.visibleRange.min - (axis.visibleRange.min % axis.visibleRange.interval);\n        }\n        var format = this.getFormat(axis);\n        var isCustom = format.match('{value}') !== null;\n        var intervalDigits = 0;\n        var formatDigits = 0;\n        if (axis.labelFormat && axis.labelFormat.indexOf('n') > -1) {\n            formatDigits = parseInt(axis.labelFormat.substring(1, axis.labelFormat.length), 10);\n        }\n        axis.format = chart.intl.getNumberFormat({\n            format: isCustom ? '' : format,\n            useGrouping: chart.useGroupingSeparator\n        });\n        axis.startLabel = axis.format(axis.visibleRange.min);\n        axis.endLabel = axis.format(axis.visibleRange.max);\n        if (axis.visibleRange.interval && (axis.visibleRange.interval + '').indexOf('.') >= 0) {\n            intervalDigits = (axis.visibleRange.interval + '').split('.')[1].length;\n        }\n        var duplicateTempInterval;\n        for (; (tempInterval <= axis.visibleRange.max) && (duplicateTempInterval !== tempInterval); tempInterval += axis.visibleRange.interval) {\n            duplicateTempInterval = tempInterval;\n            labelStyle = (extend({}, getValue('properties', axis.labelStyle), null, true));\n            if (withIn(tempInterval, axis.visibleRange)) {\n                triggerLabelRender(chart, tempInterval, this.formatValue(axis, isCustom, format, tempInterval), labelStyle, axis);\n            }\n        }\n        if (tempInterval && (tempInterval + '').indexOf('.') >= 0 && (tempInterval + '').split('.')[1].length > 10) {\n            tempInterval = (tempInterval + '').split('.')[1].length > (formatDigits || intervalDigits) ?\n                +tempInterval.toFixed(formatDigits || intervalDigits) : tempInterval;\n            if (tempInterval <= axis.visibleRange.max) {\n                triggerLabelRender(chart, tempInterval, this.formatValue(axis, isCustom, format, tempInterval), labelStyle, axis);\n            }\n        }\n        if (axis.getMaxLabelWidth) {\n            axis.getMaxLabelWidth(this.chart);\n        }\n    };\n    /**\n     * Format of the axis label.\n     *\n     * @private\n     */\n    Double.prototype.getFormat = function (axis) {\n        if (axis.labelFormat) {\n            if (axis.labelFormat.indexOf('p') === 0 && axis.labelFormat.indexOf('{value}') === -1 && axis.isStack100) {\n                return '{value}%';\n            }\n            return axis.labelFormat;\n        }\n        return axis.isStack100 ? '{value}%' : '';\n    };\n    /**\n     * Formatted the axis label.\n     *\n     * @private\n     */\n    Double.prototype.formatValue = function (axis, isCustom, format, tempInterval) {\n        /*The toLocaleString method is used to adjust the decimal points for this ticket, specifically for ticket numbers I481747 and I541484.*/\n        var labelValue = !(tempInterval % 1) ? tempInterval : Number(tempInterval.toLocaleString('en-US').split(',').join(''));\n        return isCustom ? format.replace('{value}', axis.format(labelValue))\n            : format ? axis.format(tempInterval) : axis.format(labelValue);\n    };\n    return Double;\n}());\nexport { Double };\n","/** @hidden */\nexport var created = 'create';\n/** @hidden */\nexport var destroyed = 'destroy';\n/** @hidden */\nexport var load = 'load';\n/** @hidden */\nexport var rowDataBound = 'rowDataBound';\n/** @hidden */\nexport var queryCellInfo = 'queryCellInfo';\n/** @hidden */\nexport var headerCellInfo = 'headerCellInfo';\n/** @hidden */\nexport var actionBegin = 'actionBegin';\n/** @hidden */\nexport var actionComplete = 'actionComplete';\n/** @hidden */\nexport var actionFailure = 'actionFailure';\n/** @hidden */\nexport var dataBound = 'dataBound';\n/** @hidden */\nexport var rowSelecting = 'rowSelecting';\n/** @hidden */\nexport var rowSelected = 'rowSelected';\n/** @hidden */\nexport var rowDeselecting = 'rowDeselecting';\n/** @hidden */\nexport var rowDeselected = 'rowDeselected';\n/** @hidden */\nexport var cellSelecting = 'cellSelecting';\n/** @hidden */\nexport var cellSelected = 'cellSelected';\n/** @hidden */\nexport var cellDeselecting = 'cellDeselecting';\n/** @hidden */\nexport var cellDeselected = 'cellDeselected';\n/** @hidden */\nexport var columnSelecting = 'columnSelecting';\n/** @hidden */\nexport var columnSelected = 'columnSelected';\n/** @hidden */\nexport var columnDeselecting = 'columnDeselecting';\n/** @hidden */\nexport var columnDeselected = 'columnDeselected';\n/** @hidden */\nexport var columnDragStart = 'columnDragStart';\n/** @hidden */\nexport var columnDrag = 'columnDrag';\n/** @hidden */\nexport var columnDrop = 'columnDrop';\n/** @hidden */\nexport var rowDragStartHelper = 'rowDragStartHelper';\n/** @hidden */\nexport var rowDragStart = 'rowDragStart';\n/** @hidden */\nexport var rowDrag = 'rowDrag';\n/** @hidden */\nexport var rowDrop = 'rowDrop';\n/** @hidden */\nexport var beforePrint = 'beforePrint';\n/** @hidden */\nexport var printComplete = 'printComplete';\n/** @hidden */\nexport var detailDataBound = 'detailDataBound';\n/** @hidden */\nexport var toolbarClick = 'toolbarClick';\n/** @hidden */\nexport var batchAdd = 'batchAdd';\n/** @hidden */\nexport var batchCancel = 'batchCancel';\n/** @hidden */\nexport var batchDelete = 'batchDelete';\n/** @hidden */\nexport var beforeBatchAdd = 'beforeBatchAdd';\n/** @hidden */\nexport var beforeBatchDelete = 'beforeBatchDelete';\n/** @hidden */\nexport var beforeBatchSave = 'beforeBatchSave';\n/** @hidden */\nexport var beginEdit = 'beginEdit';\n/** @hidden */\nexport var cellEdit = 'cellEdit';\n/** @hidden */\nexport var cellSave = 'cellSave';\n/** @hidden */\nexport var cellSaved = 'cellSaved';\n/** @hidden */\nexport var endAdd = 'endAdd';\n/** @hidden */\nexport var endDelete = 'endDelete';\n/** @hidden */\nexport var endEdit = 'endEdit';\n/** @hidden */\nexport var recordDoubleClick = 'recordDoubleClick';\n/** @hidden */\nexport var recordClick = 'recordClick';\n/** @hidden */\nexport var beforeDataBound = 'beforeDataBound';\n/** @hidden */\nexport var beforeOpenColumnChooser = 'beforeOpenColumnChooser';\n/** @hidden */\nexport var beforeOpenAdaptiveDialog = 'beforeOpenAdaptiveDialog';\n/** @hidden */\nexport var resizeStart = 'resizeStart';\n/** @hidden */\nexport var onResize = 'resizing';\n/** @hidden */\nexport var resizeStop = 'resizeStop';\n/** @hidden */\nexport var checkBoxChange = 'checkBoxChange';\n/** @hidden */\nexport var beforeCopy = 'beforeCopy';\n/** @hidden */\nexport var beforePaste = 'beforePaste';\n/** @hidden */\nexport var beforeAutoFill = 'beforeAutoFill';\n/** @hidden */\nexport var filterChoiceRequest = 'filterchoicerequest';\n/** @hidden */\nexport var filterAfterOpen = 'filterAfterOpen';\n/** @hidden */\nexport var filterBeforeOpen = 'filterBeforeOpen';\n/** @hidden */\nexport var filterSearchBegin = 'filterSearchBegin';\n/** @hidden */\nexport var commandClick = 'commandClick';\n/** @hidden */\nexport var exportGroupCaption = 'exportGroupCaption';\n/** @hidden */\nexport var lazyLoadGroupExpand = 'lazyLoadGroupExpand';\n/** @hidden */\nexport var lazyLoadGroupCollapse = 'lazyLoadGroupCollapse';\n/**\n * Specifies grid internal events\n */\n/** @hidden */\nexport var initialLoad = 'initial-load';\n/** @hidden */\nexport var initialEnd = 'initial-end';\n/** @hidden */\nexport var dataReady = 'data-ready';\n/** @hidden */\nexport var contentReady = 'content-ready';\n/** @hidden */\nexport var uiUpdate = 'ui-update';\n/** @hidden */\nexport var onEmpty = 'on-empty';\n/** @hidden */\nexport var inBoundModelChanged = 'inbound-model-changed';\n/** @hidden */\nexport var modelChanged = 'model-changed';\n/** @hidden */\nexport var colGroupRefresh = 'colgroup-refresh';\n/** @hidden */\nexport var headerRefreshed = 'header-refreshed';\n/** @hidden */\nexport var pageBegin = 'paging-begin';\n/** @hidden */\nexport var pageComplete = 'paging-complete';\n/** @hidden */\nexport var sortBegin = 'sorting-begin';\n/** @hidden */\nexport var sortComplete = 'sorting-complete';\n/** @hidden */\nexport var filterBegin = 'filtering-begin';\n/** @hidden */\nexport var filterComplete = 'filtering-complete';\n/** @hidden */\nexport var searchBegin = 'searching-begin';\n/** @hidden */\nexport var searchComplete = 'searching-complete';\n/** @hidden */\nexport var reorderBegin = 'reorder-begin';\n/** @hidden */\nexport var reorderComplete = 'reorder-complete';\n/** @hidden */\nexport var rowDragAndDropBegin = 'rowdraganddrop-begin';\n/** @hidden */\nexport var rowDragAndDropComplete = 'rowdraganddrop-complete';\n/** @hidden */\nexport var groupBegin = 'grouping-begin';\n/** @hidden */\nexport var groupComplete = 'grouping-complete';\n/** @hidden */\nexport var ungroupBegin = 'ungrouping-begin';\n/** @hidden */\nexport var ungroupComplete = 'ungrouping-complete';\n/** @hidden */\nexport var groupAggregates = 'group-aggregates';\n/** @hidden */\nexport var refreshFooterRenderer = 'refresh-footer-rendered';\n/** @hidden */\nexport var refreshAggregateCell = 'refresh-aggregate-cell';\n/** @hidden */\nexport var refreshAggregates = 'refresh-aggregates';\n/** @hidden */\nexport var rowSelectionBegin = 'rowselecting';\n/** @hidden */\nexport var rowSelectionComplete = 'rowselected';\n/** @hidden */\nexport var columnSelectionBegin = 'columnselecting';\n/** @hidden */\nexport var columnSelectionComplete = 'columnselected';\n/** @hidden */\nexport var cellSelectionBegin = 'cellselecting';\n/** @hidden */\nexport var cellSelectionComplete = 'cellselected';\n/** @hidden */\nexport var beforeCellFocused = 'beforecellfocused';\n/** @hidden */\nexport var cellFocused = 'cellfocused';\n/** @hidden */\nexport var keyPressed = 'key-pressed';\n/** @hidden */\nexport var click = 'click';\n/** @hidden */\nexport var destroy = 'destroy';\n/** @hidden */\nexport var columnVisibilityChanged = 'column-visible-changed';\n/** @hidden */\nexport var scroll = 'scroll';\n/** @hidden */\nexport var columnWidthChanged = 'column-width-changed';\n/** @hidden */\nexport var columnPositionChanged = 'column-position-changed';\n/** @hidden */\nexport var rowDragAndDrop = 'row-drag-and-drop';\n/** @hidden */\nexport var rowsAdded = 'rows-added';\n/** @hidden */\nexport var rowsRemoved = 'rows-removed';\n/** @hidden */\nexport var columnDragStop = 'column-drag-stop';\n/** @hidden */\nexport var headerDrop = 'header-drop';\n/** @hidden */\nexport var dataSourceModified = 'datasource-modified';\n/** @hidden */\nexport var refreshComplete = 'refresh-complete';\n/** @hidden */\nexport var refreshVirtualBlock = 'refresh-virtual-block';\n/** @hidden */\nexport var dblclick = 'dblclick';\n/** @hidden */\nexport var toolbarRefresh = 'toolbar-refresh';\n/** @hidden */\nexport var bulkSave = 'bulk-save';\n/** @hidden */\nexport var autoCol = 'auto-col';\n/** @hidden */\nexport var tooltipDestroy = 'tooltip-destroy';\n/** @hidden */\nexport var updateData = 'update-data';\n/** @hidden */\nexport var editBegin = 'edit-begin';\n/** @hidden */\nexport var editComplete = 'edit-complete';\n/** @hidden */\nexport var addBegin = 'add-begin';\n/** @hidden */\nexport var addComplete = 'add-complete';\n/** @hidden */\nexport var saveComplete = 'save-complete';\n/** @hidden */\nexport var deleteBegin = 'delete-begin';\n/** @hidden */\nexport var deleteComplete = 'delete-complete';\n/** @hidden */\nexport var preventBatch = 'prevent-batch';\n/** @hidden */\nexport var dialogDestroy = 'dialog-destroy';\n/** @hidden */\nexport var crudAction = 'crud-Action';\n/** @hidden */\nexport var addDeleteAction = 'add-delete-Action';\n/** @hidden */\nexport var destroyForm = 'destroy-form';\n/** @hidden */\nexport var doubleTap = 'double-tap';\n/** @hidden */\nexport var beforeExcelExport = 'beforeExcelExport';\n/** @hidden */\nexport var excelExportComplete = 'excelExportComplete';\n/** @hidden */\nexport var excelQueryCellInfo = 'excelQueryCellInfo';\n/** @hidden */\nexport var excelHeaderQueryCellInfo = 'excelHeaderQueryCellInfo';\n/** @hidden */\nexport var exportDetailDataBound = 'exportDetailDataBound';\n/** @hidden */\nexport var exportDetailTemplate = 'exportDetailTemplate';\n/** @hidden */\nexport var beforePdfExport = 'beforePdfExport';\n/** @hidden */\nexport var pdfExportComplete = 'pdfExportComplete';\n/** @hidden */\nexport var pdfQueryCellInfo = 'pdfQueryCellInfo';\n/** @hidden */\nexport var pdfHeaderQueryCellInfo = 'pdfHeaderQueryCellInfo';\n/** @hidden */\nexport var accessPredicate = 'access-predicate';\n/** @hidden */\nexport var contextMenuClick = 'contextMenuClick';\n/** @hidden */\nexport var freezeRender = 'freezerender';\n/** @hidden */\nexport var freezeRefresh = 'freezerefresh';\n/** @hidden */\nexport var contextMenuOpen = 'contextMenuOpen';\n/** @hidden */\nexport var columnMenuClick = 'columnMenuClick';\n/** @hidden */\nexport var columnMenuOpen = 'columnMenuOpen';\n/** @hidden */\nexport var filterOpen = 'filterOpen';\n/** @hidden */\nexport var filterDialogCreated = 'filterDialogCreated';\n/** @hidden */\nexport var filterMenuClose = 'filter-menu-close';\n/** @hidden */\nexport var initForeignKeyColumn = 'initForeignKeyColumn';\n/** @hidden */\nexport var getForeignKeyData = 'getForeignKeyData';\n/** @hidden */\nexport var generateQuery = 'generateQuery';\n/** @hidden */\nexport var showEmptyGrid = 'showEmptyGrid';\n/** @hidden */\nexport var foreignKeyData = 'foreignKeyData';\n/** @hidden */\nexport var columnDataStateChange = 'columnDataStateChange';\n/** @hidden */\nexport var dataStateChange = 'dataStateChange';\n/** @hidden */\nexport var dataSourceChanged = 'dataSourceChanged';\n/** @hidden */\nexport var rtlUpdated = 'rtl-updated';\n/** @hidden */\nexport var beforeFragAppend = 'beforeFragAppend';\n/** @hidden */\nexport var frozenHeight = 'frozenHeight';\n/** @hidden */\nexport var textWrapRefresh = 'textWrapRefresh';\n/** @hidden */\nexport var recordAdded = 'recordAdded';\n/** @hidden */\nexport var cancelBegin = 'cancel-Begin';\n/** @hidden */\nexport var editNextValCell = 'editNextValCell';\n/** @hidden */\nexport var hierarchyPrint = 'hierarchyprint';\n/** @hidden */\nexport var expandChildGrid = 'expandchildgrid';\n/** @hidden */\nexport var printGridInit = 'printGrid-Init';\n/** @hidden */\nexport var exportRowDataBound = 'export-RowDataBound';\n/** @hidden */\nexport var exportDataBound = 'export-DataBound';\n/** @hidden */\nexport var rowPositionChanged = 'row-position-changed';\n/** @hidden */\nexport var columnChooserOpened = 'columnChooserOpened';\n/** @hidden */\nexport var batchForm = 'batchedit-form';\n/** @hidden */\nexport var beforeStartEdit = 'edit-form';\n/** @hidden */\nexport var beforeBatchCancel = 'before-batch-cancel';\n/** @hidden */\nexport var batchEditFormRendered = 'batcheditform-rendered';\n/** @hidden */\nexport var partialRefresh = 'partial-refresh';\n/** @hidden */\nexport var beforeCustomFilterOpen = 'beforeCustomFilterOpen';\n/** @hidden */\nexport var selectVirtualRow = 'select-virtual-Row';\n/** @hidden */\nexport var columnsPrepared = 'columns-prepared';\n/** @hidden */\nexport var cBoxFltrBegin = 'cbox-filter-begin';\n/** @hidden */\nexport var cBoxFltrComplete = 'cbox-filter-complete';\n/** @hidden */\nexport var fltrPrevent = 'filter-Prevent';\n/** @hidden */\nexport var beforeFltrcMenuOpen = 'before-filter-cmenu-open';\n/** @hidden */\nexport var valCustomPlacement = 'validation-custom-placement';\n/** @hidden */\nexport var filterCboxValue = 'filter-cbox-value';\n/** @hidden */\nexport var componentRendered = 'component-rendered';\n/** @hidden */\nexport var restoreFocus = 'restore-Focus';\n/** @hidden */\nexport var detailStateChange = 'detail-state-change';\n/** @hidden */\nexport var detailIndentCellInfo = 'detail-indentcell-info';\n/** @hidden */\nexport var virtaulKeyHandler = 'virtaul-key-handler';\n/** @hidden */\nexport var virtaulCellFocus = 'virtaul-cell-focus';\n/** @hidden */\nexport var virtualScrollEditActionBegin = 'virtual-scroll-edit-action-begin';\n/** @hidden */\nexport var virtualScrollEditSuccess = 'virtual-scroll-edit-success';\n/** @hidden */\nexport var virtualScrollEditCancel = 'virtual-scroll-edit-cancel';\n/** @hidden */\nexport var virtualScrollEdit = 'virtual-scroll-edit';\n/** @hidden */\nexport var refreshVirtualCache = 'refresh-virtual-cache';\n/** @hidden */\nexport var editReset = 'edit-reset';\n/** @hidden */\nexport var virtualScrollAddActionBegin = 'virtual-scroll-add-action-begin';\n/** @hidden */\nexport var getVirtualData = 'get-virtual-data';\n/** @hidden */\nexport var refreshInfiniteModeBlocks = 'refresh-infinite-mode-blocks';\n/** @hidden */\nexport var resetInfiniteBlocks = 'reset-infinite-blocks';\n/** @hidden */\nexport var infiniteScrollHandler = 'infinite-scroll-handler';\n/** @hidden */\nexport var infinitePageQuery = 'infinite-page-query';\n/** @hidden */\nexport var infiniteShowHide = 'infinite-show-hide';\n/** @hidden */\nexport var appendInfiniteContent = 'append-infinite-content';\n/** @hidden */\nexport var removeInfiniteRows = 'remove-infinite-rows';\n/** @hidden */\nexport var setInfiniteCache = 'set-infinite-cache';\n/** @hidden */\nexport var infiniteEditHandler = 'infinite-edit-handler';\n/** @hidden */\nexport var initialCollapse = 'initial-collapse';\n/** @hidden */\nexport var getAggregateQuery = 'get-aggregate-query';\n/** @hidden */\nexport var closeFilterDialog = 'close-filter-dialog';\n/** @hidden */\nexport var columnChooserCancelBtnClick = 'columnChooserCancelBtnClick';\n/** @hidden */\nexport var getFilterBarOperator = 'get-filterbar-operator';\n/** @hidden */\nexport var resetColumns = 'reset-columns';\n/** @hidden */\nexport var pdfAggregateQueryCellInfo = 'pdfAggregateQueryCellInfo';\n/** @hidden */\nexport var excelAggregateQueryCellInfo = 'excelAggregateQueryCellInfo';\n/** @hidden */\nexport var setGroupCache = 'group-cache';\n/** @hidden */\nexport var lazyLoadScrollHandler = 'lazy-load-scroll-handler';\n/** @hidden */\nexport var groupCollapse = 'group-collapse';\n/** @hidden */\nexport var beforeCheckboxRenderer = 'beforeCheckboxRenderer';\n/** @hidden */\nexport var refreshHandlers = 'refreshResizeHandlers';\n/** @hidden */\nexport var refreshFrozenColumns = 'refresh-frozen-columns';\n/** @hidden */\nexport var setReorderDestinationElement = 'set-reorder-destination-element';\n/** @hidden */\nexport var refreshVirtualFrozenHeight = 'refresh-virtual-frozen-height';\n/** @hidden */\nexport var setFreezeSelection = 'set-freeze-selection';\n/** @hidden */\nexport var setInfiniteFrozenHeight = 'set-infinite-frozen-height';\n/** @hidden */\nexport var setInfiniteColFrozenHeight = 'set-infinite-col-frozen-height';\n/** @hidden */\nexport var beforeRefreshOnDataChange = 'before-refresh-on-data-change';\n/** @hidden */\nexport var immutableBatchCancel = 'immutable-batch-cancel';\n/** @hidden */\nexport var refreshVirtualFrozenRows = 'refresh-virtual-frozenrows';\n/** @hidden */\nexport var checkScrollReset = 'check-scroll-reset';\n/** @hidden */\nexport var refreshFrozenHeight = 'refresh-frozen-height';\n/** @hidden */\nexport var setHeightToFrozenElement = 'set-height-to-frozen-element';\n/** @hidden */\nexport var preventFrozenScrollRefresh = 'prevent-frozen-scroll-refresh';\n/** @hidden */\nexport var nextCellIndex = 'next-cell-index';\n/** @hidden */\nexport var refreshInfiniteCurrentViewData = 'refresh-infinite-current-view-data';\n/** @hidden */\nexport var infiniteCrudCancel = 'infinite-crud-cancel';\n/** @hidden */\nexport var filterDialogClose = 'filter-dialog-close';\n/** @hidden */\nexport var refreshCustomFilterOkBtn = 'refresh-cutsom-filter-ok-button';\n/** @hidden */\nexport var refreshCustomFilterClearBtn = 'refresh-cutsom-filter-clear-button';\n/** @hidden */\nexport var renderResponsiveCmenu = 'render-responsive-cmenu';\n/** @hidden */\nexport var filterCmenuSelect = 'filter-cmenu-select';\n/** @hidden */\nexport var customFilterClose = 'custom-filter-close';\n/** @hidden */\nexport var setFullScreenDialog = 'set-fullscreen-dialog';\n/** @hidden */\nexport var refreshExpandandCollapse = 'refresh-Expand-and-Collapse';\n/** @hidden */\nexport var rowModeChange = 'row-mode-change';\n/** @hidden */\nexport var enterKeyHandler = 'enter-key-handler';\n/** @hidden */\nexport var refreshVirtualMaxPage = 'refresh-virtual-max-page';\n/** @hidden */\nexport var setVirtualPageQuery = 'set-virtual-page-query';\n/** @hidden */\nexport var selectRowOnContextOpen = 'select-row-on-context-open';\n/** @hidden */\nexport var pagerRefresh = 'pager-refresh';\n/** @hidden */\nexport var closeInline = 'closeinline';\n/** @hidden */\nexport var closeBatch = 'closebatch';\n/** @hidden */\nexport var closeEdit = 'close-edit';\n/** @hidden */\nexport var resetVirtualFocus = 'reset-virtual-focus';\n/** @hidden */\nexport var afterContentRender = 'after-content-renderer';\n/** @hidden */\nexport var refreshVirtualEditFormCells = 'refresh-virtual-editform-cells';\n/** @hidden */\nexport var scrollToEdit = 'scroll-to-edit';\n/** @hidden */\nexport var beforeCheckboxRendererQuery = 'before-checkbox-renderer-query';\n/** @hidden */\nexport var createVirtualValidationForm = 'create-virtual-validation-form';\n/** @hidden */\nexport var validateVirtualForm = 'validate-virtual-form';\n/** @hidden */\nexport var destroyChildGrid = 'destroy-child-grid';\n/** @hidden */\nexport var stickyScrollComplete = 'sticky-scroll-complete';\n/** @hidden */\nexport var captionActionComplete = 'infinite-group-collapse';\n/** @hidden */\nexport var refreshInfinitePersistSelection = 'refresh-infinite-persist-selection';\n/** @hidden */\nexport var refreshInfiniteEditrowindex = 'refresh-infinite-editrowindex';\n/** @hidden */\nexport var afterFilterColumnMenuClose = 'after-filter-column-menu-close';\n/** @hidden */\nexport var beforeCheckboxfilterRenderer = 'beforeCheckboxfilterRenderer';\n/** @hidden */\nexport var commandColumnDestroy = 'commandColumnDestroy';\n/** @hidden */\nexport var batchCnfrmDlgCancel = 'cancelcnfrmDlg';\n/** @hidden */\nexport var refreshVirtualLazyLoadCache = 'refresh-Virtual-LazyLoad-Cache';\n/** @hidden */\nexport var refreshFrozenPosition = 'refresh-Frozen-Position';\n/** @hidden */\nexport var refreshResizePosition = 'refresh-Resize-Position';\n/** @hidden */\nexport var refreshSplitFrozenColumn = 'refresh-Split-Frozen-Column';\n/** @hidden */\nexport var renderResponsiveChangeAction = 'render-Responsive-Change-Action';\n/** @hidden */\nexport var renderResponsiveColumnChooserDiv = 'render-Responsive-Column-Chooser-Div';\n","//! moment.js locale configuration\n//! locale : Serbian [sr]\n//! author : Milan Janačković<milanjanackovic@gmail.com> : https://github.com/milan-j\n//! author : Stefan Crnjaković <stefan@hotmail.rs> : https://github.com/crnjakovic\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var translator = {\n        words: {\n            //Different grammatical cases\n            ss: ['sekunda', 'sekunde', 'sekundi'],\n            m: ['jedan minut', 'jednog minuta'],\n            mm: ['minut', 'minuta', 'minuta'],\n            h: ['jedan sat', 'jednog sata'],\n            hh: ['sat', 'sata', 'sati'],\n            d: ['jedan dan', 'jednog dana'],\n            dd: ['dan', 'dana', 'dana'],\n            M: ['jedan mesec', 'jednog meseca'],\n            MM: ['mesec', 'meseca', 'meseci'],\n            y: ['jednu godinu', 'jedne godine'],\n            yy: ['godinu', 'godine', 'godina'],\n        },\n        correctGrammaticalCase: function (number, wordKey) {\n            if (\n                number % 10 >= 1 &&\n                number % 10 <= 4 &&\n                (number % 100 < 10 || number % 100 >= 20)\n            ) {\n                return number % 10 === 1 ? wordKey[0] : wordKey[1];\n            }\n            return wordKey[2];\n        },\n        translate: function (number, withoutSuffix, key, isFuture) {\n            var wordKey = translator.words[key],\n                word;\n\n            if (key.length === 1) {\n                // Nominativ\n                if (key === 'y' && withoutSuffix) return 'jedna godina';\n                return isFuture || withoutSuffix ? wordKey[0] : wordKey[1];\n            }\n\n            word = translator.correctGrammaticalCase(number, wordKey);\n            // Nominativ\n            if (key === 'yy' && withoutSuffix && word === 'godinu') {\n                return number + ' godina';\n            }\n\n            return number + ' ' + word;\n        },\n    };\n\n    var sr = moment.defineLocale('sr', {\n        months: 'januar_februar_mart_april_maj_jun_jul_avgust_septembar_oktobar_novembar_decembar'.split(\n            '_'\n        ),\n        monthsShort:\n            'jan._feb._mar._apr._maj_jun_jul_avg._sep._okt._nov._dec.'.split('_'),\n        monthsParseExact: true,\n        weekdays: 'nedelja_ponedeljak_utorak_sreda_četvrtak_petak_subota'.split(\n            '_'\n        ),\n        weekdaysShort: 'ned._pon._uto._sre._čet._pet._sub.'.split('_'),\n        weekdaysMin: 'ne_po_ut_sr_če_pe_su'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'D. M. YYYY.',\n            LL: 'D. MMMM YYYY.',\n            LLL: 'D. MMMM YYYY. H:mm',\n            LLLL: 'dddd, D. MMMM YYYY. H:mm',\n        },\n        calendar: {\n            sameDay: '[danas u] LT',\n            nextDay: '[sutra u] LT',\n            nextWeek: function () {\n                switch (this.day()) {\n                    case 0:\n                        return '[u] [nedelju] [u] LT';\n                    case 3:\n                        return '[u] [sredu] [u] LT';\n                    case 6:\n                        return '[u] [subotu] [u] LT';\n                    case 1:\n                    case 2:\n                    case 4:\n                    case 5:\n                        return '[u] dddd [u] LT';\n                }\n            },\n            lastDay: '[juče u] LT',\n            lastWeek: function () {\n                var lastWeekDays = [\n                    '[prošle] [nedelje] [u] LT',\n                    '[prošlog] [ponedeljka] [u] LT',\n                    '[prošlog] [utorka] [u] LT',\n                    '[prošle] [srede] [u] LT',\n                    '[prošlog] [četvrtka] [u] LT',\n                    '[prošlog] [petka] [u] LT',\n                    '[prošle] [subote] [u] LT',\n                ];\n                return lastWeekDays[this.day()];\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'za %s',\n            past: 'pre %s',\n            s: 'nekoliko sekundi',\n            ss: translator.translate,\n            m: translator.translate,\n            mm: translator.translate,\n            h: translator.translate,\n            hh: translator.translate,\n            d: translator.translate,\n            dd: translator.translate,\n            M: translator.translate,\n            MM: translator.translate,\n            y: translator.translate,\n            yy: translator.translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return sr;\n\n})));\n","//! moment.js locale configuration\n//! locale : Talossan [tzl]\n//! author : Robin van der Vliet : https://github.com/robin0van0der0v\n//! author : Iustì Canun\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    // After the year there should be a slash and the amount of years since December 26, 1979 in Roman numerals.\n    // This is currently too difficult (maybe even impossible) to add.\n    var tzl = moment.defineLocale('tzl', {\n        months: 'Januar_Fevraglh_Març_Avrïu_Mai_Gün_Julia_Guscht_Setemvar_Listopäts_Noemvar_Zecemvar'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Fev_Mar_Avr_Mai_Gün_Jul_Gus_Set_Lis_Noe_Zec'.split('_'),\n        weekdays: 'Súladi_Lúneçi_Maitzi_Márcuri_Xhúadi_Viénerçi_Sáturi'.split('_'),\n        weekdaysShort: 'Súl_Lún_Mai_Már_Xhú_Vié_Sát'.split('_'),\n        weekdaysMin: 'Sú_Lú_Ma_Má_Xh_Vi_Sá'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM [dallas] YYYY',\n            LLL: 'D. MMMM [dallas] YYYY HH.mm',\n            LLLL: 'dddd, [li] D. MMMM [dallas] YYYY HH.mm',\n        },\n        meridiemParse: /d\\'o|d\\'a/i,\n        isPM: function (input) {\n            return \"d'o\" === input.toLowerCase();\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? \"d'o\" : \"D'O\";\n            } else {\n                return isLower ? \"d'a\" : \"D'A\";\n            }\n        },\n        calendar: {\n            sameDay: '[oxhi à] LT',\n            nextDay: '[demà à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[ieiri à] LT',\n            lastWeek: '[sür el] dddd [lasteu à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'osprei %s',\n            past: 'ja%s',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: processRelativeTime,\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['viensas secunds', \"'iensas secunds\"],\n            ss: [number + ' secunds', '' + number + ' secunds'],\n            m: [\"'n míut\", \"'iens míut\"],\n            mm: [number + ' míuts', '' + number + ' míuts'],\n            h: [\"'n þora\", \"'iensa þora\"],\n            hh: [number + ' þoras', '' + number + ' þoras'],\n            d: [\"'n ziua\", \"'iensa ziua\"],\n            dd: [number + ' ziuas', '' + number + ' ziuas'],\n            M: [\"'n mes\", \"'iens mes\"],\n            MM: [number + ' mesen', '' + number + ' mesen'],\n            y: [\"'n ar\", \"'iens ar\"],\n            yy: [number + ' ars', '' + number + ' ars'],\n        };\n        return isFuture\n            ? format[key][0]\n            : withoutSuffix\n            ? format[key][0]\n            : format[key][1];\n    }\n\n    return tzl;\n\n})));\n","//! moment.js locale configuration\n//! locale : Klingon [tlh]\n//! author : Dominika Kruk : https://github.com/amaranthrose\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var numbersNouns = 'pagh_wa’_cha’_wej_loS_vagh_jav_Soch_chorgh_Hut'.split('_');\n\n    function translateFuture(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'leS'\n                : output.indexOf('jar') !== -1\n                ? time.slice(0, -3) + 'waQ'\n                : output.indexOf('DIS') !== -1\n                ? time.slice(0, -3) + 'nem'\n                : time + ' pIq';\n        return time;\n    }\n\n    function translatePast(output) {\n        var time = output;\n        time =\n            output.indexOf('jaj') !== -1\n                ? time.slice(0, -3) + 'Hu’'\n                : output.indexOf('jar') !== -1\n                ? time.slice(0, -3) + 'wen'\n                : output.indexOf('DIS') !== -1\n                ? time.slice(0, -3) + 'ben'\n                : time + ' ret';\n        return time;\n    }\n\n    function translate(number, withoutSuffix, string, isFuture) {\n        var numberNoun = numberAsNoun(number);\n        switch (string) {\n            case 'ss':\n                return numberNoun + ' lup';\n            case 'mm':\n                return numberNoun + ' tup';\n            case 'hh':\n                return numberNoun + ' rep';\n            case 'dd':\n                return numberNoun + ' jaj';\n            case 'MM':\n                return numberNoun + ' jar';\n            case 'yy':\n                return numberNoun + ' DIS';\n        }\n    }\n\n    function numberAsNoun(number) {\n        var hundred = Math.floor((number % 1000) / 100),\n            ten = Math.floor((number % 100) / 10),\n            one = number % 10,\n            word = '';\n        if (hundred > 0) {\n            word += numbersNouns[hundred] + 'vatlh';\n        }\n        if (ten > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[ten] + 'maH';\n        }\n        if (one > 0) {\n            word += (word !== '' ? ' ' : '') + numbersNouns[one];\n        }\n        return word === '' ? 'pagh' : word;\n    }\n\n    var tlh = moment.defineLocale('tlh', {\n        months: 'tera’ jar wa’_tera’ jar cha’_tera’ jar wej_tera’ jar loS_tera’ jar vagh_tera’ jar jav_tera’ jar Soch_tera’ jar chorgh_tera’ jar Hut_tera’ jar wa’maH_tera’ jar wa’maH wa’_tera’ jar wa’maH cha’'.split(\n            '_'\n        ),\n        monthsShort:\n            'jar wa’_jar cha’_jar wej_jar loS_jar vagh_jar jav_jar Soch_jar chorgh_jar Hut_jar wa’maH_jar wa’maH wa’_jar wa’maH cha’'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split(\n            '_'\n        ),\n        weekdaysShort:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        weekdaysMin:\n            'lojmItjaj_DaSjaj_povjaj_ghItlhjaj_loghjaj_buqjaj_ghInjaj'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[DaHjaj] LT',\n            nextDay: '[wa’leS] LT',\n            nextWeek: 'LLL',\n            lastDay: '[wa’Hu’] LT',\n            lastWeek: 'LLL',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: translateFuture,\n            past: translatePast,\n            s: 'puS lup',\n            ss: translate,\n            m: 'wa’ tup',\n            mm: translate,\n            h: 'wa’ rep',\n            hh: translate,\n            d: 'wa’ jaj',\n            dd: translate,\n            M: 'wa’ jar',\n            MM: translate,\n            y: 'wa’ DIS',\n            yy: translate,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return tlh;\n\n})));\n","import { Droppable } from '@syncfusion/ej2-base';\nimport { isNullOrUndefined, extend } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, remove, updateBlazorTemplate } from '@syncfusion/ej2-base';\nimport { getUpdateUsingRaf, appendChildren, setDisplayValue, clearReactVueTemplates, getScrollBarWidth, getScrollWidth } from '../base/util';\nimport * as events from '../base/constant';\nimport { RowRenderer } from './row-renderer';\nimport { CellMergeRender } from './cell-merge-renderer';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupModelGenerator } from '../services/group-model-generator';\nimport { isGroupAdaptive, addFixedColumnBorder } from '../base/util';\nimport * as literals from '../base/string-literals';\n// eslint-disable-next-line valid-jsdoc\n/**\n * Content module is used to render grid content\n *\n * @hidden\n */\nvar ContentRender = /** @class */ (function () {\n    /**\n     * Constructor for content renderer module\n     *\n     * @param {IGrid} parent - specifies the Igrid\n     * @param {ServiceLocator} serviceLocator - specifies the service locator\n     */\n    function ContentRender(parent, serviceLocator) {\n        var _this = this;\n        this.rows = [];\n        this.freezeRows = [];\n        this.movableRows = [];\n        this.freezeRowElements = [];\n        /** @hidden */\n        this.currentInfo = {};\n        /** @hidden */\n        this.prevCurrentView = [];\n        this.isLoaded = true;\n        this.drop = function (e) {\n            _this.parent.notify(events.columnDrop, { target: e.target, droppedElement: e.droppedElement });\n            remove(e.droppedElement);\n        };\n        this.infiniteCache = {};\n        /** @hidden */\n        this.visibleRows = [];\n        this.visibleFrozenRows = [];\n        this.rightFreezeRows = [];\n        this.isAddRows = false;\n        this.isInfiniteFreeze = false;\n        this.useGroupCache = false;\n        /** @hidden */\n        this.tempFreezeRows = [];\n        this.rafCallback = function (args) {\n            var arg = args;\n            return function () {\n                _this.ariaService.setBusy(_this.getPanel().querySelector('.' + literals.content), false);\n                if (_this.parent.isDestroyed) {\n                    return;\n                }\n                var rows = _this.rows.slice(0);\n                if (_this.parent.enableInfiniteScrolling) {\n                    if (_this.parent.groupSettings.enableLazyLoading) {\n                        for (var i = 0; i < _this.visibleRows.length; i++) {\n                            _this.setRowsInLazyGroup(_this.visibleRows[parseInt(i.toString(), 10)], i);\n                        }\n                    }\n                    rows = _this.parent.getRowsObject();\n                    var prevPage = arg.prevPage;\n                    if (_this.parent.infiniteScrollSettings.enableCache && prevPage) {\n                        var maxBlock = _this.parent.infiniteScrollSettings.maxBlocks;\n                        rows = [];\n                        var rowIdx = (parseInt(_this.rowElements[0].getAttribute('data-rowindex'), 10) + 1);\n                        var startIdx = Math.ceil(rowIdx / _this.parent.pageSettings.pageSize);\n                        for (var i = 0, count = startIdx; i < maxBlock; i++, count++) {\n                            if (_this.infiniteCache[parseInt(count.toString(), 10)]) {\n                                rows = rows.concat(_this.infiniteCache[parseInt(count.toString(), 10)]);\n                            }\n                        }\n                    }\n                }\n                _this.parent.notify(events.contentReady, { rows: rows, args: arg });\n                if (_this.parent.autoFit) {\n                    _this.parent.preventAdjustColumns();\n                }\n                if (!_this.parent.isInitialLoad) {\n                    _this.parent.focusModule.setFirstFocusableTabIndex();\n                }\n                if (_this.isLoaded) {\n                    _this.parent.isManualRefresh = false;\n                    if (_this.parent.enableInfiniteScrolling && _this.parent.groupSettings.enableLazyLoading && args.requestType === 'sorting') {\n                        _this.parent.infiniteScrollModule['groupCaptionAction'] = undefined;\n                    }\n                    var isReactChild = _this.parent.parentDetails && _this.parent.parentDetails.parentInstObj &&\n                        _this.parent.parentDetails.parentInstObj.isReact;\n                    if ((_this.parent.isReact || isReactChild) && _this.parent.element.querySelectorAll('.e-templatecell').length) {\n                        // eslint-disable-next-line @typescript-eslint/no-this-alias\n                        var thisRef_1 = _this;\n                        thisRef_1.parent.renderTemplates(function () {\n                            thisRef_1.parent.trigger(events.dataBound, {}, function () {\n                                if (thisRef_1.parent.allowTextWrap) {\n                                    thisRef_1.parent.notify(events.freezeRender, { case: 'textwrap' });\n                                }\n                            });\n                        });\n                    }\n                    else {\n                        _this.parent.trigger(events.dataBound, {}, function () {\n                            if (_this.parent.allowTextWrap) {\n                                _this.parent.notify(events.freezeRender, { case: 'textwrap' });\n                            }\n                        });\n                    }\n                    if (_this.parent.allowTextWrap && _this.parent.height === 'auto') {\n                        if (_this.parent.getContentTable().scrollHeight > _this.parent.getContent().clientHeight) {\n                            _this.parent.scrollModule.setPadding();\n                        }\n                        else {\n                            _this.parent.scrollModule.removePadding();\n                        }\n                    }\n                }\n                if (arg) {\n                    var action = (arg.requestType || '').toLowerCase() + '-complete';\n                    _this.parent.notify(action, arg);\n                    if (args.requestType === 'batchsave') {\n                        args.cancel = false;\n                        _this.parent.trigger(events.actionComplete, args);\n                    }\n                }\n                if (_this.isLoaded) {\n                    _this.parent.hideSpinner();\n                }\n            };\n        };\n        this.parent = parent;\n        this.serviceLocator = serviceLocator;\n        this.widthService = serviceLocator.getService('widthService');\n        this.ariaService = this.serviceLocator.getService('ariaService');\n        this.parent.enableDeepCompare = this.parent.getDataModule().isRemote();\n        this.generator = this.getModelGenerator();\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        if (!this.parent.enableColumnVirtualization && !this.parent.enableVirtualization\n            && !this.parent.groupSettings.enableLazyLoading) {\n            this.parent.on(events.columnVisibilityChanged, this.setVisible, this);\n        }\n        this.parent.on(events.colGroupRefresh, this.colGroupRefresh, this);\n        this.parent.on(events.uiUpdate, this.enableAfterRender, this);\n        this.parent.on(events.refreshInfiniteModeBlocks, this.refreshContentRows, this);\n        this.parent.on(events.beforeCellFocused, this.beforeCellFocused, this);\n        this.parent.on(events.destroy, this.droppableDestroy, this);\n    }\n    ContentRender.prototype.beforeCellFocused = function (e) {\n        if (e.byKey && (e.keyArgs.action === 'upArrow' || e.keyArgs.action === 'downArrow')) {\n            this.pressedKey = e.keyArgs.action;\n        }\n        else {\n            this.pressedKey = undefined;\n        }\n    };\n    /**\n     * The function is used to render grid content div\n     *\n     * @returns {void}\n     */\n    ContentRender.prototype.renderPanel = function () {\n        var gObj = this.parent;\n        var div = this.parent.element.querySelector('.' + literals.gridContent);\n        if (div) {\n            this.ariaService.setOptions(this.parent.element.querySelector('.' + literals.content), { busy: false });\n            this.setPanel(div);\n            return;\n        }\n        div = this.parent.createElement('div', { className: literals.gridContent });\n        var innerDiv = this.parent.createElement('div', {\n            className: literals.content\n        });\n        this.ariaService.setOptions(innerDiv, { busy: false });\n        if (this.parent.enableColumnVirtualization && this.parent.isFrozenGrid()) {\n            this.renderHorizontalScrollbar(div);\n            innerDiv.classList.add('e-virtual-content');\n        }\n        div.appendChild(innerDiv);\n        this.setPanel(div);\n        gObj.element.appendChild(div);\n    };\n    ContentRender.prototype.renderHorizontalScrollbar = function (element) {\n        var parent = this.parent.createElement('div', { className: 'e-movablescrollbar' });\n        var child = this.parent.createElement('div', { className: 'e-movablechild' });\n        var scrollbarHeight = getScrollBarWidth().toString();\n        this.setScrollbarHeight(child, scrollbarHeight);\n        this.setScrollbarHeight(parent, scrollbarHeight);\n        parent.appendChild(child);\n        element.appendChild(parent);\n    };\n    ContentRender.prototype.setScrollbarHeight = function (ele, height) {\n        ele.style.minHeight = height + 'px';\n        ele.style.maxHeight = height + 'px';\n    };\n    /**\n     * The function is used to render grid content table\n     *\n     * @returns {void}\n     */\n    ContentRender.prototype.renderTable = function () {\n        var contentDiv = this.getPanel();\n        var virtualTable = contentDiv.querySelector('.e-virtualtable');\n        var virtualTrack = contentDiv.querySelector('.e-virtualtrack');\n        if (this.parent.enableVirtualization && !isNullOrUndefined(virtualTable) && !isNullOrUndefined(virtualTrack)) {\n            remove(virtualTable);\n            remove(virtualTrack);\n        }\n        contentDiv.appendChild(this.createContentTable('_content_table'));\n        this.setTable(contentDiv.querySelector('.' + literals.table));\n        if (this.parent.selectionSettings.type === 'Multiple') {\n            this.ariaService.setOptions(this.parent.element, {\n                multiselectable: true\n            });\n        }\n        this.initializeContentDrop();\n        if (this.parent.frozenRows) {\n            this.parent.getHeaderContent().classList.add('e-frozenhdr');\n        }\n    };\n    /**\n     * The function is used to create content table elements\n     *\n     * @param {string} id - specifies the id\n     * @returns {Element} returns the element\n     * @hidden\n     */\n    ContentRender.prototype.createContentTable = function (id) {\n        var innerDiv = this.getPanel().firstElementChild;\n        if (this.getTable()) {\n            remove(this.getTable());\n        }\n        var table = innerDiv.querySelector('.' + literals.table) ? innerDiv.querySelector('.' + literals.table) :\n            this.parent.createElement('table', {\n                className: literals.table, attrs: {\n                    cellspacing: '0.25px', role: 'presentation',\n                    id: this.parent.element.id + id\n                }\n            });\n        this.setColGroup(this.parent.getHeaderTable().querySelector(literals.colGroup).cloneNode(true));\n        table.appendChild(this.getColGroup());\n        table.appendChild(this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } }));\n        innerDiv.appendChild(table);\n        return innerDiv;\n    };\n    /**\n     * Refresh the content of the Grid.\n     *\n     * @param {NotifyArgs} args - specifies the args\n     * @returns {void}\n     */\n    // tslint:disable-next-line:max-func-body-length\n    ContentRender.prototype.refreshContentRows = function (args) {\n        var _this = this;\n        if (args === void 0) { args = {}; }\n        var gObj = this.parent;\n        if (gObj.currentViewData.length === 0) {\n            return;\n        }\n        if (gObj.editSettings && gObj.editModule && gObj.editSettings.mode === 'Batch' && gObj.editModule.formObj\n            && gObj.editSettings.showConfirmDialog === false) {\n            gObj.editModule.destroyForm();\n        }\n        var dataSource = this.currentMovableRows || gObj.currentViewData;\n        var isReact = gObj.isReact && !isNullOrUndefined(gObj.rowTemplate);\n        var frag = isReact ? gObj.createElement(literals.tbody, { attrs: { role: 'rowgroup' } }) : document.createDocumentFragment();\n        if (!this.initialPageRecords) {\n            this.initialPageRecords = extend([], dataSource);\n        }\n        var hdrfrag = isReact ? gObj.createElement(literals.tbody, { attrs: { role: 'rowgroup' } }) : document.createDocumentFragment();\n        var refFrag;\n        var refHdrfrag;\n        if (gObj.isReact && gObj.rowTemplate) {\n            refFrag = frag;\n            refHdrfrag = hdrfrag;\n        }\n        var columns = gObj.getColumns();\n        var tr;\n        var hdrTbody;\n        var trElement;\n        var row = new RowRenderer(this.serviceLocator, null, this.parent);\n        var isInfiniteScroll = this.parent.enableInfiniteScrolling\n            && args.requestType === 'infiniteScroll';\n        gObj.notify(events.destroyChildGrid, {});\n        this.rowElements = [];\n        this.rows = [];\n        this.tempFreezeRows = [];\n        var tbdy;\n        var tableName;\n        var isGroupFrozenHdr = this.parent.frozenRows && this.parent.groupSettings.columns.length ? true : false;\n        if (isGroupAdaptive(gObj)) {\n            if (['sorting', 'filtering', 'searching', 'grouping', 'ungrouping', 'reorder', 'save', 'delete']\n                .some(function (value) { return args.requestType === value; })) {\n                this.emptyVcRows();\n            }\n        }\n        var modelData;\n        modelData = this.checkCache(modelData, args);\n        if (!this.isAddRows && !this.useGroupCache) {\n            modelData = this.generator.generateRows(dataSource, args);\n        }\n        this.setGroupCache(modelData, args);\n        this.parent.notify(events.setInfiniteCache, { isInfiniteScroll: isInfiniteScroll, modelData: modelData, args: args });\n        var isFrozenLeft = false;\n        /* eslint-disable */\n        if (!(args.requestType === 'infiniteScroll' && !this.parent.infiniteScrollSettings.enableCache) && this.parent.registeredTemplate\n            && this.parent.registeredTemplate.template && !args.isFrozen && !isFrozenLeft) {\n            var templatetoclear = [];\n            for (var i = 0; i < this.parent.registeredTemplate.template.length; i++) {\n                for (var j = 0; j < this.parent.registeredTemplate.template[i].rootNodes.length; j++) {\n                    if (isNullOrUndefined(this.parent.registeredTemplate.template[i].rootNodes[j].parentNode)) {\n                        templatetoclear.push(this.parent.registeredTemplate.template[i]);\n                        /* eslint-enable */\n                    }\n                }\n            }\n            this.parent.destroyTemplate(['template'], templatetoclear);\n        }\n        if ((this.parent.isReact || this.parent.isVue) && !(args.requestType === 'infiniteScroll' && !this.parent.infiniteScrollSettings.enableCache) && !args.isFrozen) {\n            var templates = [\n                this.parent.isVue ? 'template' : 'columnTemplate', 'rowTemplate', 'detailTemplate',\n                'captionTemplate', 'commandsTemplate', 'groupFooterTemplate', 'groupCaptionTemplate'\n            ];\n            if (args.requestType === 'infiniteScroll' && this.parent.infiniteScrollSettings.enableCache) {\n                templates = [\n                    this.parent.isVue ? 'template' : 'columnTemplate', 'commandsTemplate'\n                ];\n            }\n            clearReactVueTemplates(this.parent, templates);\n        }\n        if (this.parent.enableColumnVirtualization) {\n            var cellMerge = new CellMergeRender(this.serviceLocator, this.parent);\n            cellMerge.updateVirtualCells(modelData);\n        }\n        this.tbody = this.getTable().querySelector(literals.tbody);\n        var startIndex = 0;\n        var blockLoad = true;\n        if (isGroupAdaptive(gObj) && gObj.vcRows.length) {\n            var top_1 = 'top';\n            var scrollTop = !isNullOrUndefined(args.virtualInfo.offsets) ? args.virtualInfo.offsets.top :\n                (!isNullOrUndefined(args.scrollTop) ? args.scrollTop[\"\" + top_1] : 0);\n            if (scrollTop !== 0) {\n                var offsets_1 = gObj.vGroupOffsets;\n                var bSize = gObj.pageSettings.pageSize / 2;\n                var values = Object.keys(offsets_1).map(function (key) { return offsets_1[\"\" + key]; });\n                for (var m = 0; m < values.length; m++) {\n                    if (scrollTop < values[parseInt(m.toString(), 10)]) {\n                        if (!isNullOrUndefined(args.virtualInfo) && args.virtualInfo.direction === 'up') {\n                            startIndex = m > 0 ? ((m - 1) * bSize) : (m * bSize);\n                            break;\n                        }\n                        else {\n                            startIndex = m * bSize;\n                            if (this.parent.contentModule.isEndBlock(m) || this.parent.contentModule.isEndBlock(m + 1)) {\n                                args.virtualInfo.blockIndexes = [m, m + 1];\n                            }\n                            break;\n                        }\n                    }\n                }\n                if (Math.round(scrollTop + this.contentPanel.firstElementChild.offsetHeight) >=\n                    this.contentPanel.firstElementChild.scrollHeight && !args.rowObject) {\n                    blockLoad = false;\n                }\n            }\n        }\n        var isVFFrozenOnly = gObj.frozenRows && this.parent.enableVirtualization\n            && args.requestType === 'reorder';\n        if ((gObj.frozenRows && args.requestType === 'virtualscroll' && args.virtualInfo.sentinelInfo.axis === 'X') || isVFFrozenOnly) {\n            var bIndex = args.virtualInfo.blockIndexes;\n            var page = args.virtualInfo.page;\n            args.virtualInfo.blockIndexes = [1, 2];\n            if (isVFFrozenOnly) {\n                args.virtualInfo.page = 1;\n            }\n            var data = isVFFrozenOnly ? this.initialPageRecords : dataSource;\n            var mhdrData = this.vgenerator\n                .generateRows(data, args);\n            mhdrData.splice(this.parent.frozenRows);\n            for (var i = 0; i < this.parent.frozenRows; i++) {\n                // mhdrData[parseInt(i.toString(), 10)].cells.splice(0, this.parent.getFrozenColumns());\n                tr = row.render(mhdrData[parseInt(i.toString(), 10)], columns);\n                addFixedColumnBorder(tr);\n                hdrfrag.appendChild(tr);\n            }\n            args.virtualInfo.blockIndexes = bIndex;\n            args.virtualInfo.page = page;\n            if (isVFFrozenOnly && args.virtualInfo.page === 1) {\n                modelData.splice(0, this.parent.frozenRows);\n            }\n        }\n        this.virtualFrozenHdrRefresh(hdrfrag, modelData, row, args, dataSource, columns);\n        if (this.parent.groupSettings.enableLazyLoading && !this.useGroupCache && this.parent.groupSettings.columns.length) {\n            (this.parent.enableVirtualization ? this.parent.lazyLoadRender :\n                this.parent.contentModule).refRowsObj[this.parent.pageSettings.currentPage] = [];\n        }\n        if (this.parent.enableInfiniteScrolling && this.parent.groupSettings.enableLazyLoading && args.requestType === 'delete') { //  || (this.parent.infiniteScrollSettings && this.parent.infiniteScrollSettings.enableCache))\n            this.visibleRows = [];\n        }\n        var _loop_1 = function (i, len) {\n            this_1.rows.push(modelData[parseInt(i.toString(), 10)]);\n            if (this_1.parent.groupSettings.enableLazyLoading && !this_1.useGroupCache && this_1.parent.groupSettings.columns.length) {\n                (this_1.parent.enableVirtualization ? this_1.parent.lazyLoadRender :\n                    this_1.parent.contentModule).refRowsObj[this_1.parent.pageSettings.currentPage].push(modelData[parseInt(i.toString(), 10)]);\n                this_1.setRowsInLazyGroup(modelData[parseInt(i.toString(), 10)], i);\n                if (isNullOrUndefined(modelData[parseInt(i.toString(), 10)].indent)) {\n                    return \"continue\";\n                }\n            }\n            this_1.setInfiniteVisibleRows(args, modelData[parseInt(i.toString(), 10)]);\n            if (isGroupAdaptive(gObj) && args.virtualInfo && args.virtualInfo.blockIndexes\n                && (this_1.rowElements.length >= (args.virtualInfo.blockIndexes.length * this_1.parent.contentModule.getBlockSize()))\n                && blockLoad) {\n                this_1.parent.currentViewData['records'] = this_1.rows.map(function (m) { return m.data; });\n                return \"break\";\n            }\n            if (!gObj.rowTemplate) {\n                tr = row.render(modelData[parseInt(i.toString(), 10)], columns);\n                addFixedColumnBorder(tr);\n                var isVFreorder = this_1.ensureFrozenHeaderRender(args);\n                if (gObj.frozenRows && (i < gObj.frozenRows || isGroupFrozenHdr) && !isInfiniteScroll && args.requestType !== 'virtualscroll' && isVFreorder\n                    && this_1.ensureVirtualFrozenHeaderRender(args)) {\n                    hdrfrag.appendChild(tr);\n                }\n                else {\n                    frag.appendChild(tr);\n                }\n                var rowIdx = parseInt(tr.getAttribute('data-rowindex'), 10);\n                if (rowIdx + 1 === gObj.frozenRows) {\n                    isGroupFrozenHdr = false;\n                }\n                if (modelData[parseInt(i.toString(), 10)].isExpand) {\n                    gObj.notify(events.expandChildGrid, tr.cells[gObj.groupSettings.columns.length]);\n                }\n            }\n            else {\n                var rowTemplateID = gObj.element.id + 'rowTemplate';\n                var elements = void 0;\n                if (gObj.isReact) {\n                    var isHeader = gObj.frozenRows && i < gObj.frozenRows;\n                    var copied = extend({ index: i }, dataSource[parseInt(i.toString(), 10)]);\n                    gObj.getRowTemplate()(copied, gObj, 'rowTemplate', rowTemplateID, null, null, isHeader ? hdrfrag : frag);\n                    if (gObj.requireTemplateRef) {\n                        // eslint-disable-next-line @typescript-eslint/no-this-alias\n                        var thisRef_2 = this_1;\n                        thisRef_2.parent.renderTemplates(function () {\n                            if (gObj.frozenRows && i < gObj.frozenRows) {\n                                tr = refHdrfrag.childNodes[parseInt(i.toString(), 10)];\n                            }\n                            else {\n                                trElement = refFrag.childNodes[parseInt(i.toString(), 10)];\n                            }\n                            var arg = { data: modelData[parseInt(i.toString(), 10)].data,\n                                row: trElement ? trElement : tr };\n                            thisRef_2.parent.trigger(events.rowDataBound, arg);\n                            if (modelData[parseInt(i.toString(), 10)].isDataRow || (thisRef_2.parent.enableVirtualization &&\n                                thisRef_2.parent.groupSettings.enableLazyLoading)) {\n                                thisRef_2.rowElements.push(tr);\n                            }\n                            thisRef_2.ariaService.setOptions(thisRef_2.parent.element, {\n                                colcount: gObj.getColumns().length.toString()\n                            });\n                            if (i === modelData.length - 1) {\n                                refFrag = null;\n                                refHdrfrag = null;\n                            }\n                        });\n                        return \"continue\";\n                    }\n                }\n                else {\n                    elements = gObj.getRowTemplate()(extend({ index: i }, dataSource[parseInt(i.toString(), 10)]), gObj, 'rowTemplate', rowTemplateID, undefined, undefined, undefined, this_1.parent['root']);\n                }\n                if (!gObj.isReact && elements[0].tagName === 'TBODY') {\n                    for (var j = 0; j < elements.length; j++) {\n                        var isTR = elements[parseInt(j.toString(), 10)].nodeName.toLowerCase() === 'tr';\n                        if (isTR || (elements[parseInt(j.toString(), 10)].querySelectorAll && elements[parseInt(j.toString(), 10)].querySelectorAll('tr').length)) {\n                            tr = isTR ? elements[parseInt(j.toString(), 10)] : elements[parseInt(j.toString(), 10)].querySelector('tr');\n                        }\n                    }\n                    if (gObj.frozenRows && i < gObj.frozenRows) {\n                        hdrfrag.appendChild(tr);\n                    }\n                    else {\n                        frag.appendChild(tr);\n                    }\n                }\n                else {\n                    if (gObj.frozenRows && i < gObj.frozenRows) {\n                        tr = !gObj.isReact ? appendChildren(hdrfrag, elements) : hdrfrag.lastElementChild;\n                    }\n                    else {\n                        // frag.appendChild(tr);\n                        if (!gObj.isReact) {\n                            tr = appendChildren(frag, elements);\n                        }\n                        trElement = gObj.isReact ? frag.lastElementChild : tr.lastElementChild;\n                    }\n                }\n                var arg = { data: modelData[parseInt(i.toString(), 10)].data, row: trElement ? trElement : tr };\n                this_1.parent.trigger(events.rowDataBound, arg);\n            }\n            if (modelData[parseInt(i.toString(), 10)].isDataRow || (this_1.parent.enableVirtualization &&\n                this_1.parent.groupSettings.enableLazyLoading)) {\n                this_1.rowElements.push(tr);\n            }\n            this_1.ariaService.setOptions(this_1.parent.element, { colcount: gObj.getColumns().length.toString() });\n        };\n        var this_1 = this;\n        for (var i = startIndex, len = modelData.length; i < len; i++) {\n            var state_1 = _loop_1(i, len);\n            if (state_1 === \"break\")\n                break;\n        }\n        var isReactChild = gObj.parentDetails && gObj.parentDetails.parentInstObj && gObj.parentDetails.parentInstObj.isReact;\n        if ((gObj.isReact || isReactChild) && !gObj.requireTemplateRef) {\n            gObj.renderTemplates();\n        }\n        if (this.parent.enableInfiniteScrolling && this.parent.groupSettings.enableLazyLoading) {\n            this.parent.contentModule.refRowsObj[this.parent.pageSettings.currentPage] =\n                this.parent.contentModule['groupCache'][this.parent.pageSettings.currentPage];\n        }\n        if (this.parent.groupSettings.enableLazyLoading && !this.useGroupCache && this.parent.groupSettings.columns.length) {\n            this.parent.notify(events.refreshExpandandCollapse, {\n                rows: (this.parent.enableVirtualization ? this.parent.lazyLoadRender :\n                    this.parent.contentModule).refRowsObj[this.parent.pageSettings.currentPage]\n            });\n        }\n        gObj.removeMaskRow();\n        this.parent.notify('removeGanttShimmer', { requestType: 'hideShimmer' });\n        if ((gObj.frozenRows && args.requestType !== 'virtualscroll' && !isInfiniteScroll && this.ensureVirtualFrozenHeaderRender(args))\n            || (args.requestType === 'virtualscroll' && args.virtualInfo.sentinelInfo && args.virtualInfo.sentinelInfo.axis === 'X')) {\n            hdrTbody = gObj.getHeaderTable().querySelector(literals.tbody);\n            if (isReact) {\n                var parentTable = hdrTbody.parentElement;\n                remove(hdrTbody);\n                parentTable.appendChild(hdrfrag);\n            }\n            else {\n                hdrTbody.innerHTML = '';\n                hdrTbody.appendChild(hdrfrag);\n            }\n            if (!gObj.isInitialLoad) {\n                gObj.scrollModule.setHeight();\n            }\n        }\n        // if (!gObj.enableVirtualization && hdrTbody && gObj.frozenRows && idx === 0 && cont.offsetHeight === Number(gObj.height)) {\n        //     cont.style.height = (cont.offsetHeight - hdrTbody.offsetHeight) + 'px';\n        // }\n        args.rows = this.rows.slice(0);\n        getUpdateUsingRaf(function () {\n            _this.parent.notify(events.beforeFragAppend, args);\n            if (!_this.parent.enableVirtualization && !_this.parent.enableColumnVirtualization && !isInfiniteScroll) {\n                if (!gObj.isReact) {\n                    _this.tbody.innerHTML = '';\n                }\n                if (!isNullOrUndefined(_this.tbody.parentElement)) {\n                    remove(_this.tbody);\n                }\n                else {\n                    remove(gObj.getContentTable().querySelector(literals.tbody));\n                }\n                _this.tbody = _this.parent.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n            }\n            if (gObj.rowTemplate) {\n                updateBlazorTemplate(gObj.element.id + 'rowTemplate', 'RowTemplate', gObj);\n            }\n            if (!isNullOrUndefined(_this.parent.infiniteScrollModule) && _this.parent.enableInfiniteScrolling) {\n                _this.isAddRows = false;\n                _this.parent.notify(events.removeInfiniteRows, { args: args });\n                _this.parent.notify(events.appendInfiniteContent, {\n                    tbody: tbdy ? tbdy : _this.tbody, frag: frag, args: args, rows: _this.rows,\n                    rowElements: _this.rowElements, visibleRows: _this.visibleRows,\n                    tableName: tableName\n                });\n            }\n            else {\n                _this.useGroupCache = false;\n                _this.appendContent(_this.tbody, frag, args);\n            }\n            if (_this.parent.getVisibleFrozenRightCount() && _this.parent.getContent() && getScrollWidth(_this.parent) > 0) {\n                _this.parent.element.classList.add('e-right-shadow');\n            }\n            frag = null;\n        }, this.rafCallback(extend({}, args)));\n    };\n    ContentRender.prototype.emptyVcRows = function () {\n        this.parent.vcRows = [];\n        this.parent.vRows = [];\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    ContentRender.prototype.appendContent = function (tbody, frag, args, tableName) {\n        var isReact = this.parent.isReact && !isNullOrUndefined(this.parent.rowTemplate);\n        if (isReact) {\n            this.getTable().appendChild(frag);\n        }\n        else {\n            tbody.appendChild(frag);\n            this.getTable().appendChild(tbody);\n        }\n        if (this.parent.rowRenderingMode === 'Vertical' && this.parent.allowTextWrap && (this.parent.textWrapSettings.wrapMode === 'Header'\n            || this.parent.textWrapSettings.wrapMode === 'Both')) {\n            var cells = tbody.querySelectorAll('td');\n            for (var i = 0; i < cells.length; i++) {\n                var headerCellHeight = parseFloat(document.defaultView.getComputedStyle(cells[parseInt(i.toString(), 10)], '::before').getPropertyValue('height'));\n                var cellHeight = cells[parseInt(i.toString(), 10)].offsetHeight;\n                if (headerCellHeight > cellHeight) {\n                    cells[parseInt(i.toString(), 10)].style.height = headerCellHeight + 'px';\n                    cells[parseInt(i.toString(), 10)].style.boxSizing = 'content-box';\n                }\n            }\n        }\n        if (this.parent.getVisibleFrozenLeftCount() && this.parent.enableColumnVirtualization) {\n            this.widthService.refreshFrozenScrollbar();\n        }\n    };\n    ContentRender.prototype.setRowsInLazyGroup = function (row, index) {\n        if (this.parent.groupSettings.enableLazyLoading && !this.useGroupCache && this.parent.groupSettings.columns.length) {\n            (this.parent.enableVirtualization ? this.parent.lazyLoadRender :\n                this.parent.contentModule).maintainRows(row, index);\n        }\n    };\n    ContentRender.prototype.setGroupCache = function (data, args) {\n        if (!this.useGroupCache && this.parent.groupSettings.enableLazyLoading) {\n            this.parent.notify(events.setGroupCache, { args: args, data: data });\n        }\n    };\n    ContentRender.prototype.ensureFrozenHeaderRender = function (args) {\n        return !((this.parent.enableVirtualization\n            && (args.requestType === 'reorder' || args.requestType === 'refresh')) || (this.parent.infiniteScrollSettings.enableCache\n            && this.parent.frozenRows && this.parent.infiniteScrollModule.requestType === 'delete'\n            && this.parent.pageSettings.currentPage !== 1));\n    };\n    ContentRender.prototype.ensureVirtualFrozenHeaderRender = function (args) {\n        return !(this.parent.enableVirtualization && args.requestType === 'delete');\n    };\n    ContentRender.prototype.checkCache = function (modelData, args) {\n        if (this.parent.infiniteScrollSettings.enableCache && args.requestType === 'infiniteScroll') {\n            this.isAddRows = !isNullOrUndefined(this.infiniteCache[this.parent.pageSettings.currentPage]);\n            if (this.isAddRows) {\n                var data = this.infiniteCache[this.parent.pageSettings.currentPage];\n                modelData = this.parent.pageSettings.currentPage === 1 ? data.slice(this.parent.frozenRows) : data;\n            }\n            return modelData;\n        }\n        if (this.parent.groupSettings.enableLazyLoading && this.parent.groupSettings.columns.length && (args.requestType === 'paging'\n            || args.requestType === 'columnstate' || args.requestType === 'reorder' || args.requestType === 'virtualscroll')\n            && (this.parent.enableVirtualization ? this.parent.lazyLoadRender :\n                this.parent.contentModule).getGroupCache()[this.parent.pageSettings.currentPage]) {\n            if (!this.parent.enableVirtualization) {\n                this.useGroupCache = true;\n            }\n            return this.parent.enableVirtualization ? this.parent.getRowsObject() :\n                this.parent.contentModule.initialGroupRows(args.requestType === 'reorder');\n        }\n        return null;\n    };\n    ContentRender.prototype.setInfiniteVisibleRows = function (args, data) {\n        if (this.parent.enableInfiniteScrolling && !this.parent.infiniteScrollSettings.enableCache) {\n            if (!this.parent.infiniteScrollSettings.enableCache) {\n                this.visibleRows.push(data);\n            }\n        }\n    };\n    ContentRender.prototype.getCurrentBlockInfiniteRecords = function () {\n        var data = [];\n        if (this.parent.infiniteScrollSettings.enableCache) {\n            if (!Object.keys(this.infiniteCache).length) {\n                return [];\n            }\n            var rows = this.parent.getRows();\n            var index = parseInt(rows[this.parent.frozenRows].getAttribute(literals.dataRowIndex), 10);\n            var first = Math.ceil((index + 1) / this.parent.pageSettings.pageSize);\n            index = parseInt(rows[rows.length - 1].getAttribute(literals.dataRowIndex), 10);\n            var last = Math.ceil((index + (rows.length ? 1 : 0)) / this.parent.pageSettings.pageSize);\n            for (var i = first; i <= last; i++) {\n                data = !data.length ? this.infiniteCache[parseInt(i.toString(), 10)]\n                    : data.concat(this.infiniteCache[parseInt(i.toString(), 10)]);\n            }\n            if (this.parent.frozenRows && this.parent.pageSettings.currentPage > 1) {\n                data = this.infiniteCache[1].slice(0, this.parent.frozenRows).concat(data);\n            }\n        }\n        return data;\n    };\n    ContentRender.prototype.getReorderedRows = function (args) {\n        return this.parent.contentModule.getReorderedFrozenRows(args);\n    };\n    ContentRender.prototype.virtualFrozenHdrRefresh = function (hdrfrag, modelData, row, args, dataSource, columns) {\n        if (this.parent.frozenRows && this.parent.enableVirtualization\n            && (args.requestType === 'reorder' || args.requestType === 'refresh')) {\n            var tr = void 0;\n            var fhdrData = this.getReorderedRows(args);\n            for (var i = 0; i < fhdrData.length; i++) {\n                tr = row.render(fhdrData[parseInt(i.toString(), 10)], columns);\n                hdrfrag.appendChild(tr);\n            }\n            if (args.virtualInfo.page === 1) {\n                modelData.splice(0, this.parent.frozenRows);\n            }\n        }\n    };\n    ContentRender.prototype.getInfiniteRows = function () {\n        var rows = [];\n        if (this.parent.enableInfiniteScrolling) {\n            if (this.parent.infiniteScrollSettings.enableCache) {\n                var keys = Object.keys(this.infiniteCache);\n                for (var i = 0; i < keys.length; i++) {\n                    rows = rows.concat(this.infiniteCache[keys[parseInt(i.toString(), 10)]]);\n                }\n            }\n            else {\n                rows = this.visibleRows;\n            }\n        }\n        return rows;\n    };\n    ContentRender.prototype.getInfiniteMovableRows = function () {\n        var infiniteCacheRows = this.getCurrentBlockInfiniteRecords();\n        var infiniteRows = this.parent.enableInfiniteScrolling ? infiniteCacheRows.length ? infiniteCacheRows\n            : this.visibleRows : [];\n        return infiniteRows;\n    };\n    /**\n     * Get the content div element of grid\n     *\n     * @returns {Element} returns the element\n     */\n    ContentRender.prototype.getPanel = function () {\n        return this.contentPanel;\n    };\n    /**\n     * Set the content div element of grid\n     *\n     * @param  {Element} panel - specifies the panel\n     * @returns {void}\n     */\n    ContentRender.prototype.setPanel = function (panel) {\n        this.contentPanel = panel;\n    };\n    /**\n     * Get the content table element of grid\n     *\n     * @returns {Element} returns the element\n     */\n    ContentRender.prototype.getTable = function () {\n        return this.contentTable;\n    };\n    /**\n     * Set the content table element of grid\n     *\n     * @param  {Element} table - specifies the table\n     * @returns {void}\n     */\n    ContentRender.prototype.setTable = function (table) {\n        this.contentTable = table;\n    };\n    /**\n     * Get the Movable Row collection in the Freeze pane Grid.\n     *\n     * @returns {Row[] | HTMLCollectionOf<HTMLTableRowElement>} returns the row\n     */\n    ContentRender.prototype.getRows = function () {\n        var infiniteRows = this.getInfiniteRows();\n        return infiniteRows.length ? infiniteRows : this.rows;\n    };\n    /**\n     * Get the content table data row elements\n     *\n     * @returns {Element} returns the element\n     */\n    ContentRender.prototype.getRowElements = function () {\n        return this.rowElements;\n    };\n    /**\n     * Get the content table data row elements\n     *\n     * @param {Element[]} elements - specifies the elements\n     * @returns {void}\n     */\n    ContentRender.prototype.setRowElements = function (elements) {\n        this.rowElements = elements;\n    };\n    /**\n     * Get the header colgroup element\n     *\n     * @returns {Element} returns the element\n     */\n    ContentRender.prototype.getColGroup = function () {\n        return this.colgroup;\n    };\n    /**\n     * Set the header colgroup element\n     *\n     * @param {Element} colGroup - specifies the colgroup\n     * @returns {Element} returns the element\n     */\n    ContentRender.prototype.setColGroup = function (colGroup) {\n        if (!isNullOrUndefined(colGroup)) {\n            colGroup.id = 'content-' + colGroup.id;\n        }\n        return this.colgroup = colGroup;\n    };\n    /**\n     * Function to hide content table column based on visible property\n     *\n     * @param {Column[]} columns - specifies the column\n     * @returns {void}\n     */\n    ContentRender.prototype.setVisible = function (columns) {\n        var gObj = this.parent;\n        var rows = this.getRows();\n        var testRow;\n        rows.some(function (r) { if (r.isDataRow) {\n            testRow = r;\n        } return r.isDataRow; });\n        var needFullRefresh = true;\n        if (!gObj.groupSettings.columns.length && testRow) {\n            needFullRefresh = false;\n        }\n        var tr = gObj.getDataRows();\n        var args = {};\n        var infiniteData = this.infiniteRowVisibility();\n        var contentrows = infiniteData ? infiniteData\n            : this.rows.filter(function (row) { return !row.isDetailRow; });\n        for (var c = 0, clen = columns.length; c < clen; c++) {\n            var column = columns[parseInt(c.toString(), 10)];\n            var idx = this.parent.getNormalizedColumnIndex(column.uid);\n            var colIdx = this.parent.getColumnIndexByUid(column.uid);\n            var displayVal = column.visible === true ? '' : 'none';\n            if (idx !== -1 && testRow && idx < testRow.cells.length) {\n                setStyleAttribute(this.getColGroup().childNodes[parseInt(idx.toString(), 10)], { 'display': displayVal });\n            }\n            if (!needFullRefresh) {\n                this.setDisplayNone(tr, colIdx, displayVal, contentrows);\n            }\n            if (!this.parent.invokedFromMedia && column.hideAtMedia) {\n                this.parent.updateMediaColumns(column);\n            }\n            this.parent.invokedFromMedia = false;\n        }\n        if (needFullRefresh) {\n            this.refreshContentRows({ requestType: 'refresh' });\n        }\n        else {\n            this.parent.notify(events.partialRefresh, { rows: contentrows, args: args });\n        }\n    };\n    /**\n     * @param {Object} tr - specifies the trr\n     * @param {number} idx - specifies the idx\n     * @param {string} displayVal - specifies the displayval\n     * @param {Row<Column>} rows - specifies the rows\n     * @returns {void}\n     * @hidden\n     */\n    ContentRender.prototype.setDisplayNone = function (tr, idx, displayVal, rows) {\n        setDisplayValue(tr, idx, displayVal, rows, this.parent, this.parent.isRowDragable());\n        this.parent.notify(events.infiniteShowHide, { visible: displayVal, index: idx, isFreeze: this.isInfiniteFreeze });\n    };\n    ContentRender.prototype.infiniteRowVisibility = function (isFreeze) {\n        var infiniteData;\n        if (this.parent.enableInfiniteScrolling) {\n            this.isInfiniteFreeze = isFreeze;\n            if (this.parent.infiniteScrollSettings.enableCache) {\n                infiniteData = isFreeze ? this.getCurrentBlockInfiniteRecords() : this.getCurrentBlockInfiniteRecords();\n            }\n            else {\n                infiniteData = isFreeze ? this.visibleFrozenRows : this.visibleRows;\n            }\n        }\n        return infiniteData;\n    };\n    ContentRender.prototype.colGroupRefresh = function () {\n        if (this.getColGroup()) {\n            var colGroup = this.getHeaderColGroup();\n            this.getTable().replaceChild(colGroup, this.getColGroup());\n            this.setColGroup(colGroup);\n        }\n    };\n    ContentRender.prototype.getHeaderColGroup = function () {\n        return this.parent.element.querySelector('.' + literals.gridHeader)\n            .querySelector(literals.colGroup + ':not(.e-masked-colgroup)').cloneNode(true);\n    };\n    ContentRender.prototype.initializeContentDrop = function () {\n        var gObj = this.parent;\n        this.droppable = new Droppable(gObj.element, {\n            accept: '.e-dragclone',\n            drop: this.drop\n        });\n    };\n    ContentRender.prototype.droppableDestroy = function () {\n        if (this.droppable && !this.droppable.isDestroyed) {\n            this.droppable.destroy();\n        }\n    };\n    ContentRender.prototype.canSkip = function (column, row, index) {\n        /**\n         * Skip the toggle visiblity operation when one of the following success\n         * 1. Grid has empty records\n         * 2. column visible property is unchanged\n         * 3. cell`s isVisible property is same as column`s visible property.\n         */\n        return isNullOrUndefined(row) || //(1)\n            isNullOrUndefined(column.visible) || //(2)\n            row.cells[parseInt(index.toString(), 10)].visible === column.visible; //(3)\n    };\n    ContentRender.prototype.getModelGenerator = function () {\n        return this.generator = this.parent.allowGrouping ? new GroupModelGenerator(this.parent) : new RowModelGenerator(this.parent);\n    };\n    ContentRender.prototype.renderEmpty = function (tbody) {\n        this.getTable().appendChild(tbody);\n        if (this.parent.frozenRows) {\n            this.parent.getHeaderContent().querySelector(literals.tbody).innerHTML = '';\n        }\n    };\n    ContentRender.prototype.setSelection = function (uid, set, clearAll) {\n        this.parent.notify(events.setFreezeSelection, { uid: uid, set: set, clearAll: clearAll });\n        var row = this.getRows().filter(function (row) { return clearAll || uid === row.uid; });\n        for (var j = 0; j < row.length; j++) {\n            row[parseInt(j.toString(), 10)].isSelected = set;\n            var cells = row[parseInt(j.toString(), 10)].cells;\n            for (var k = 0; k < cells.length; k++) {\n                cells[parseInt(k.toString(), 10)].isSelected = set;\n            }\n        }\n    };\n    ContentRender.prototype.getRowByIndex = function (index) {\n        index = this.getInfiniteRowIndex(index);\n        return !isNullOrUndefined(index) ? this.parent.getDataRows()[parseInt(index.toString(), 10)] : undefined;\n    };\n    ContentRender.prototype.getInfiniteRowIndex = function (index) {\n        if (this.parent.infiniteScrollSettings.enableCache && !isNullOrUndefined(index)) {\n            var fRows = this.parent.frozenRows;\n            var idx = fRows > index ? 0 : fRows;\n            var firstRowIndex = parseInt(this.parent.getRows()[parseInt(idx.toString(), 10)]\n                .getAttribute(literals.dataRowIndex), 10);\n            index = fRows > index ? index : (index - firstRowIndex) + fRows;\n        }\n        return index;\n    };\n    ContentRender.prototype.getVirtualRowIndex = function (index) {\n        return index;\n    };\n    ContentRender.prototype.enableAfterRender = function (e) {\n        if (e.module === 'group' && e.enable) {\n            this.generator = this.getModelGenerator();\n        }\n    };\n    ContentRender.prototype.setRowObjects = function (rows) {\n        this.rows = rows;\n    };\n    /**\n     * @param {NotifyArgs} args - specifies the args\n     * @returns {void}\n     * @hidden\n     */\n    ContentRender.prototype.immutableModeRendering = function (args) {\n        var _this = this;\n        if (args === void 0) { args = {}; }\n        var gObj = this.parent;\n        gObj.hideSpinner();\n        var key = gObj.getPrimaryKeyFieldNames()[0];\n        var oldKeys = {};\n        var newKeys = {};\n        var newRowObjs = [];\n        var oldIndexes = {};\n        var oldRowObjs = gObj.getRowsObject().slice();\n        var batchChangeKeys = this.getBatchEditedRecords(key, oldRowObjs);\n        var newIndexes = {};\n        var hasBatch = Object.keys(batchChangeKeys).length !== 0;\n        if (gObj.getContent().querySelector('.e-emptyrow') || args.requestType === 'reorder'\n            || this.parent.groupSettings.columns.length) {\n            this.refreshContentRows(args);\n        }\n        else {\n            if (gObj.currentViewData.length === 0) {\n                return;\n            }\n            var oldRowElements = {};\n            var tbody = gObj.createElement(literals.tbody, { attrs: { role: 'rowgroup' } });\n            var dataSource = gObj.currentViewData;\n            var trs = [].slice.call(this.getTable().querySelector(literals.tbody).children);\n            if (this.prevCurrentView.length) {\n                var prevLen = this.prevCurrentView.length;\n                var currentLen = dataSource.length;\n                if (prevLen === currentLen) {\n                    for (var i = 0; i < currentLen; i++) {\n                        if (this.parent.editSettings.mode === 'Batch'\n                            && trs[parseInt(i.toString(), 10)].classList.contains('e-insertedrow')) {\n                            trs.splice(i, 1);\n                            --i;\n                            continue;\n                        }\n                        newKeys[dataSource[parseInt(i.toString(), 10)][\"\" + key]] = oldKeys[this.prevCurrentView[parseInt(i.toString(), 10)][\"\" + key]] = i;\n                        newIndexes[parseInt(i.toString(), 10)] = dataSource[parseInt(i.toString(), 10)][\"\" + key];\n                        oldRowElements[oldRowObjs[parseInt(i.toString(), 10)].uid] = trs[parseInt(i.toString(), 10)];\n                        oldIndexes[parseInt(i.toString(), 10)] = this.prevCurrentView[parseInt(i.toString(), 10)][\"\" + key];\n                    }\n                }\n                else {\n                    for (var i = 0; i < currentLen; i++) {\n                        newKeys[dataSource[parseInt(i.toString(), 10)][\"\" + key]] = i;\n                        newIndexes[parseInt(i.toString(), 10)] = dataSource[parseInt(i.toString(), 10)][\"\" + key];\n                    }\n                    for (var i = 0; i < prevLen; i++) {\n                        if (this.parent.editSettings.mode === 'Batch'\n                            && trs[parseInt(i.toString(), 10)].classList.contains('e-insertedrow')) {\n                            trs.splice(i, 1);\n                            --i;\n                            continue;\n                        }\n                        oldRowElements[oldRowObjs[parseInt(i.toString(), 10)].uid] = trs[parseInt(i.toString(), 10)];\n                        oldKeys[this.prevCurrentView[parseInt(i.toString(), 10)][\"\" + key]] = i;\n                        oldIndexes[parseInt(i.toString(), 10)] = this.prevCurrentView[parseInt(i.toString(), 10)][\"\" + key];\n                    }\n                }\n            }\n            for (var i = 0; i < dataSource.length; i++) {\n                var oldIndex = oldKeys[dataSource[parseInt(i.toString(), 10)][\"\" + key]];\n                if (!isNullOrUndefined(oldIndex)) {\n                    var isEqual = false;\n                    if (this.parent.enableDeepCompare) {\n                        isEqual = this.objectEqualityChecker(this.prevCurrentView[parseInt(oldIndex.toString(), 10)], dataSource[parseInt(i.toString(), 10)]);\n                    }\n                    var tr = oldRowElements[oldRowObjs[parseInt(oldIndex.toString(), 10)]\n                        .uid];\n                    newRowObjs.push(oldRowObjs[parseInt(oldIndex.toString(), 10)]);\n                    if (this.rowElements[parseInt(oldIndex.toString(), 10)] && this.rowElements[parseInt(oldIndex.toString(), 10)].getAttribute('data-uid') === newRowObjs[parseInt(i.toString(), 10)].uid\n                        && ((hasBatch && isNullOrUndefined(batchChangeKeys[newIndexes[parseInt(i.toString(), 10)]]))\n                            || (!hasBatch && (isEqual\n                                || this.prevCurrentView[parseInt(oldIndex.toString(), 10)] === dataSource[parseInt(i.toString(), 10)])))) {\n                        if (oldIndex !== i) {\n                            this.refreshImmutableContent(i, tr, newRowObjs[parseInt(i.toString(), 10)]);\n                        }\n                        tbody.appendChild(tr);\n                        continue;\n                    }\n                    if ((hasBatch && !isNullOrUndefined(batchChangeKeys[newIndexes[parseInt(i.toString(), 10)]]))\n                        || (!this.parent.enableDeepCompare\n                            && dataSource[parseInt(i.toString(), 10)] !== this.prevCurrentView[parseInt(oldIndex.toString(), 10)])\n                        || (this.parent.enableDeepCompare && !isEqual)) {\n                        oldRowObjs[parseInt(oldIndex.toString(), 10)].setRowValue(dataSource[parseInt(i.toString(), 10)]);\n                    }\n                    tbody.appendChild(tr);\n                    this.refreshImmutableContent(i, tr, newRowObjs[parseInt(i.toString(), 10)]);\n                }\n                else {\n                    var row = new RowRenderer(this.serviceLocator, null, gObj);\n                    var args_1 = { startIndex: i };\n                    var modelData = this.generator.generateRows([dataSource[parseInt(i.toString(), 10)]], args_1);\n                    newRowObjs.push(modelData[0]);\n                    var tr = row.render(modelData[0], gObj.getColumns());\n                    tbody.appendChild(tr);\n                    this.refreshImmutableContent(i, tr, newRowObjs[parseInt(i.toString(), 10)]);\n                }\n            }\n            this.rows = newRowObjs;\n            this.rowElements = [].slice.call(tbody.children);\n            remove(this.getTable().querySelector(literals.tbody));\n            this.getTable().appendChild(tbody);\n            this.parent.trigger(events.dataBound, {}, function () {\n                if (_this.parent.allowTextWrap) {\n                    _this.parent.notify(events.freezeRender, { case: 'textwrap' });\n                }\n            });\n            if (args) {\n                var action = (args.requestType || '').toLowerCase() + '-complete';\n                this.parent.notify(action, args);\n            }\n        }\n    };\n    ContentRender.prototype.objectEqualityChecker = function (old, next) {\n        var keys = Object.keys(old);\n        var isEqual = true;\n        for (var i = 0; i < keys.length; i++) {\n            if (old[keys[parseInt(i.toString(), 10)]] !== next[keys[parseInt(i.toString(), 10)]]) {\n                var isDate = old[keys[parseInt(i.toString(), 10)]] instanceof Date\n                    && next[keys[parseInt(i.toString(), 10)]] instanceof Date;\n                if (!isDate || (old[keys[parseInt(i.toString(), 10)]]\n                    .getTime() !== next[keys[parseInt(i.toString(), 10)]].getTime())) {\n                    isEqual = false;\n                    break;\n                }\n            }\n        }\n        return isEqual;\n    };\n    ContentRender.prototype.getBatchEditedRecords = function (primaryKey, rows) {\n        var keys = {};\n        var changes = this.parent.getBatchChanges();\n        var changedRecords = [];\n        var addedRecords = [];\n        if (Object.keys(changes).length) {\n            changedRecords = changes.changedRecords;\n            addedRecords = changes.addedRecords;\n        }\n        var args = { cancel: false };\n        this.parent.notify(events.immutableBatchCancel, { rows: rows, args: args });\n        if (addedRecords.length) {\n            if (this.parent.editSettings.newRowPosition === 'Bottom') {\n                rows.splice(rows.length - 1, addedRecords.length);\n            }\n            else {\n                if (!args.cancel) {\n                    rows.splice(0, addedRecords.length);\n                }\n            }\n        }\n        for (var i = 0; i < changedRecords.length; i++) {\n            keys[changedRecords[parseInt(i.toString(), 10)][\"\" + primaryKey]] = i;\n        }\n        return keys;\n    };\n    ContentRender.prototype.refreshImmutableContent = function (index, tr, row) {\n        row.isAltRow = this.parent.enableAltRow ? index % 2 !== 0 : false;\n        if (row.isAltRow) {\n            tr.classList.add('e-altrow');\n        }\n        else {\n            tr.classList.remove('e-altrow');\n        }\n        row.index = index;\n        row.edit = undefined;\n        row.isDirty = false;\n        tr.setAttribute(literals.dataRowIndex, index.toString());\n        tr.setAttribute(literals.ariaRowIndex, (index + 1).toString());\n        this.updateCellIndex(tr, index);\n    };\n    ContentRender.prototype.updateCellIndex = function (rowEle, index) {\n        for (var i = 0; i < rowEle.cells.length; i++) {\n            rowEle.cells[parseInt(i.toString(), 10)].setAttribute('index', index.toString());\n        }\n    };\n    return ContentRender;\n}());\nexport { ContentRender };\n","//! moment.js locale configuration\n//! locale : Tibetan [bo]\n//! author : Thupten N. Chakrishar : https://github.com/vajradog\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '༡',\n            2: '༢',\n            3: '༣',\n            4: '༤',\n            5: '༥',\n            6: '༦',\n            7: '༧',\n            8: '༨',\n            9: '༩',\n            0: '༠',\n        },\n        numberMap = {\n            '༡': '1',\n            '༢': '2',\n            '༣': '3',\n            '༤': '4',\n            '༥': '5',\n            '༦': '6',\n            '༧': '7',\n            '༨': '8',\n            '༩': '9',\n            '༠': '0',\n        };\n\n    var bo = moment.defineLocale('bo', {\n        months: 'ཟླ་བ་དང་པོ_ཟླ་བ་གཉིས་པ_ཟླ་བ་གསུམ་པ_ཟླ་བ་བཞི་པ_ཟླ་བ་ལྔ་པ_ཟླ་བ་དྲུག་པ_ཟླ་བ་བདུན་པ_ཟླ་བ་བརྒྱད་པ_ཟླ་བ་དགུ་པ_ཟླ་བ་བཅུ་པ_ཟླ་བ་བཅུ་གཅིག་པ_ཟླ་བ་བཅུ་གཉིས་པ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ཟླ་1_ཟླ་2_ཟླ་3_ཟླ་4_ཟླ་5_ཟླ་6_ཟླ་7_ཟླ་8_ཟླ་9_ཟླ་10_ཟླ་11_ཟླ་12'.split(\n                '_'\n            ),\n        monthsShortRegex: /^(ཟླ་\\d{1,2})/,\n        monthsParseExact: true,\n        weekdays:\n            'གཟའ་ཉི་མ་_གཟའ་ཟླ་བ་_གཟའ་མིག་དམར་_གཟའ་ལྷག་པ་_གཟའ་ཕུར་བུ_གཟའ་པ་སངས་_གཟའ་སྤེན་པ་'.split(\n                '_'\n            ),\n        weekdaysShort: 'ཉི་མ་_ཟླ་བ་_མིག་དམར་_ལྷག་པ་_ཕུར་བུ_པ་སངས་_སྤེན་པ་'.split(\n            '_'\n        ),\n        weekdaysMin: 'ཉི_ཟླ_མིག_ལྷག_ཕུར_སངས_སྤེན'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm',\n            LTS: 'A h:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm',\n        },\n        calendar: {\n            sameDay: '[དི་རིང] LT',\n            nextDay: '[སང་ཉིན] LT',\n            nextWeek: '[བདུན་ཕྲག་རྗེས་མ], LT',\n            lastDay: '[ཁ་སང] LT',\n            lastWeek: '[བདུན་ཕྲག་མཐའ་མ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ལ་',\n            past: '%s སྔན་ལ',\n            s: 'ལམ་སང',\n            ss: '%d སྐར་ཆ།',\n            m: 'སྐར་མ་གཅིག',\n            mm: '%d སྐར་མ',\n            h: 'ཆུ་ཚོད་གཅིག',\n            hh: '%d ཆུ་ཚོད',\n            d: 'ཉིན་གཅིག',\n            dd: '%d ཉིན་',\n            M: 'ཟླ་བ་གཅིག',\n            MM: '%d ཟླ་བ',\n            y: 'ལོ་གཅིག',\n            yy: '%d ལོ',\n        },\n        preparse: function (string) {\n            return string.replace(/[༡༢༣༤༥༦༧༨༩༠]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        meridiemParse: /མཚན་མོ|ཞོགས་ཀས|ཉིན་གུང|དགོང་དག|མཚན་མོ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (\n                (meridiem === 'མཚན་མོ' && hour >= 4) ||\n                (meridiem === 'ཉིན་གུང' && hour < 5) ||\n                meridiem === 'དགོང་དག'\n            ) {\n                return hour + 12;\n            } else {\n                return hour;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'མཚན་མོ';\n            } else if (hour < 10) {\n                return 'ཞོགས་ཀས';\n            } else if (hour < 17) {\n                return 'ཉིན་གུང';\n            } else if (hour < 20) {\n                return 'དགོང་དག';\n            } else {\n                return 'མཚན་མོ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return bo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Portuguese (Brazil) [pt-br]\n//! author : Caio Ribeiro Pereira : https://github.com/caio-ribeiro-pereira\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ptBr = moment.defineLocale('pt-br', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'domingo_segunda-feira_terça-feira_quarta-feira_quinta-feira_sexta-feira_sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'dom_seg_ter_qua_qui_sex_sáb'.split('_'),\n        weekdaysMin: 'do_2ª_3ª_4ª_5ª_6ª_sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY [às] HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY [às] HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'poucos segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        invalidDate: 'Data inválida',\n    });\n\n    return ptBr;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nimport { Row } from '../models/row';\nimport { isNullOrUndefined, extend, setValue } from '@syncfusion/ej2-base';\nimport { CellType } from '../base/enum';\nimport { RowModelGenerator } from '../services/row-model-generator';\nimport { GroupSummaryModelGenerator, CaptionSummaryModelGenerator } from '../services/summary-model-generator';\nimport { getForeignData, getUid } from '../../grid/base/util';\n/**\n * GroupModelGenerator is used to generate group caption rows and data rows.\n *\n * @hidden\n */\nvar GroupModelGenerator = /** @class */ (function (_super) {\n    __extends(GroupModelGenerator, _super);\n    function GroupModelGenerator(parent) {\n        var _this = _super.call(this, parent) || this;\n        _this.rows = [];\n        /** @hidden */\n        _this.index = 0;\n        _this.infiniteChildCount = 0;\n        _this.renderInfiniteAgg = true;\n        _this.parent = parent;\n        _this.summaryModelGen = new GroupSummaryModelGenerator(parent);\n        _this.captionModelGen = new CaptionSummaryModelGenerator(parent);\n        return _this;\n    }\n    GroupModelGenerator.prototype.generateRows = function (data, args) {\n        if (this.parent.groupSettings.columns.length === 0) {\n            return _super.prototype.generateRows.call(this, data, args);\n        }\n        this.isInfiniteScroll = (args.requestType === 'infiniteScroll');\n        this.rows = [];\n        this.index = this.parent.enableVirtualization || this.isInfiniteScroll ? args.startIndex : 0;\n        for (var i = 0, len = data.length; i < len; i++) {\n            this.infiniteChildCount = 0;\n            this.renderInfiniteAgg = true;\n            this.getGroupedRecords(0, data[parseInt(i.toString(), 10)], data.level, i, undefined, this.rows.length);\n        }\n        this.index = 0;\n        if (this.parent.isCollapseStateEnabled()) {\n            this.ensureRowVisibility();\n        }\n        return this.rows;\n    };\n    GroupModelGenerator.prototype.getGroupedRecords = function (index, data, raw, parentid, childId, tIndex, parentUid) {\n        var _a;\n        var level = raw;\n        if (isNullOrUndefined(data.items)) {\n            if (isNullOrUndefined(data.GroupGuid)) {\n                this.rows = this.rows.concat(this.generateDataRows(data, index, parentid, this.rows.length, parentUid));\n            }\n            else {\n                for (var j = 0, len = data.length; j < len; j++) {\n                    this.getGroupedRecords(index, data[parseInt(j.toString(), 10)], data.level, parentid, index, this.rows.length, parentUid);\n                }\n            }\n        }\n        else {\n            var preCaption = void 0;\n            var captionRow = this.generateCaptionRow(data, index, parentid, childId, tIndex, parentUid);\n            if (this.isInfiniteScroll) {\n                preCaption = this.getPreCaption(index, captionRow.data.key);\n            }\n            if (!preCaption) {\n                this.rows = this.rows.concat(captionRow);\n            }\n            else {\n                captionRow.uid = preCaption.uid;\n            }\n            if (data.items && data.items.length) {\n                this.getGroupedRecords(index + 1, data.items, data.items.level, parentid, index + 1, this.rows.length, captionRow.uid);\n            }\n            if (this.parent.aggregates.length && this.isRenderAggregate(captionRow)) {\n                var rowCnt = this.rows.length;\n                (_a = this.rows).push.apply(_a, this.summaryModelGen.generateRows(data, { level: level, parentUid: captionRow.uid }));\n                for (var i = rowCnt - 1; i >= 0; i--) {\n                    if (this.rows[parseInt(i.toString(), 10)].isCaptionRow) {\n                        this.rows[parseInt(i.toString(), 10)].aggregatesCount = this.rows.length - rowCnt;\n                    }\n                    else if (!this.rows[parseInt(i.toString(), 10)].isCaptionRow && !this.rows[parseInt(i.toString(), 10)].isDataRow) {\n                        break;\n                    }\n                }\n            }\n            if (preCaption) {\n                this.setInfiniteRowVisibility(preCaption);\n            }\n        }\n    };\n    GroupModelGenerator.prototype.isRenderAggregate = function (data) {\n        if (this.parent.enableInfiniteScrolling) {\n            if (!this.renderInfiniteAgg) {\n                return false;\n            }\n            this.getPreCaption(data.indent, data.data.key);\n            this.renderInfiniteAgg = data.data.count === this.infiniteChildCount;\n            return this.renderInfiniteAgg;\n        }\n        return !this.parent.enableInfiniteScrolling;\n    };\n    GroupModelGenerator.prototype.getPreCaption = function (indent, key) {\n        var rowObj = this.parent.getRowsObject().concat(this.rows);\n        var preCap;\n        this.infiniteChildCount = 0;\n        var i = rowObj.length;\n        while (i--) {\n            if (rowObj[parseInt(i.toString(), 10)].isCaptionRow && rowObj[parseInt(i.toString(), 10)].indent === indent\n                && rowObj[parseInt(i.toString(), 10)].data.key === key) {\n                preCap = rowObj[parseInt(i.toString(), 10)];\n            }\n            if (rowObj[parseInt(i.toString(), 10)].indent === indent || rowObj[parseInt(i.toString(), 10)].indent < indent) {\n                break;\n            }\n            if (rowObj[parseInt(i.toString(), 10)].indent === indent + 1) {\n                this.infiniteChildCount++;\n            }\n        }\n        return preCap;\n    };\n    GroupModelGenerator.prototype.getCaptionRowCells = function (field, indent, data) {\n        var cells = [];\n        var visibles = [];\n        var column = this.parent.getColumnByField(field);\n        var indexes = this.parent.getColumnIndexesInView();\n        if (this.parent.enableColumnVirtualization) {\n            column = this.parent.columns.filter(function (c) { return c.field === field; })[0];\n        }\n        var groupedLen = this.parent.groupSettings.columns.length;\n        var gObj = this.parent;\n        if (!this.parent.enableColumnVirtualization || indexes.indexOf(indent) !== -1) {\n            for (var i = 0; i < indent; i++) {\n                cells.push(this.generateIndentCell());\n            }\n            cells.push(this.generateCell({}, null, CellType.Expand));\n        }\n        indent = this.parent.enableColumnVirtualization ? 1 :\n            (this.parent.getVisibleColumns().length + groupedLen + (gObj.detailTemplate || gObj.childGrid ? 1 : 0) -\n                indent + (this.parent.getVisibleColumns().length ? -1 : 0));\n        //Captionsummary cells will be added here.\n        if (this.parent.aggregates.length && !this.captionModelGen.isEmpty()) {\n            var captionCells = this.captionModelGen.generateRows(data)[0];\n            extend(data, captionCells.data);\n            var cIndex_1 = 0;\n            captionCells.cells.some(function (cell, index) { cIndex_1 = index; return cell.visible && cell.isDataCell; });\n            visibles = captionCells.cells.slice(cIndex_1).filter(function (cell) { return cell.visible; });\n            if (captionCells.visible && visibles[0].column.field === this.parent.getVisibleColumns()[0].field) {\n                visibles = visibles.slice(1);\n            }\n            if (this.parent.getVisibleColumns().length === 1) {\n                visibles = [];\n            }\n            indent = indent - visibles.length;\n        }\n        var cols = (!this.parent.enableColumnVirtualization ? [column] : this.parent.getColumns());\n        var wFlag = true;\n        for (var j = 0; j < cols.length; j++) {\n            var tmpFlag = wFlag && indexes.indexOf(indent) !== -1;\n            if (tmpFlag) {\n                wFlag = false;\n            }\n            var cellType = !this.parent.enableColumnVirtualization || tmpFlag ?\n                CellType.GroupCaption : CellType.GroupCaptionEmpty;\n            indent = this.parent.enableColumnVirtualization && cellType === CellType.GroupCaption ? indent + groupedLen : indent;\n            if (gObj.isRowDragable()) {\n                indent++;\n            }\n            cells.push(this.generateCell(column, null, cellType, indent));\n        }\n        cells.push.apply(cells, visibles);\n        return cells;\n    };\n    /**\n     * @param {GroupedData} data - specifies the data\n     * @param {number} indent - specifies the indent\n     * @param {number} parentID - specifies the parentID\n     * @param {number} childID - specifies the childID\n     * @param {number} tIndex - specifies the TIndex\n     * @param {string} parentUid - specifies the ParentUid\n     * @returns {Row<Column>} returns the Row object\n     * @hidden\n     */\n    GroupModelGenerator.prototype.generateCaptionRow = function (data, indent, parentID, childID, tIndex, parentUid) {\n        var options = {};\n        var records = 'records';\n        var col = this.parent.getColumnByField(data.field);\n        options.data = extend({}, data);\n        if (col) {\n            options.data.field = data.field;\n        }\n        options.isDataRow = false;\n        options.isExpand = !this.parent.groupSettings.enableLazyLoading && !this.parent.isCollapseStateEnabled();\n        options.parentGid = parentID;\n        options.childGid = childID;\n        options.tIndex = tIndex;\n        options.isCaptionRow = true;\n        options.parentUid = parentUid;\n        options.gSummary = !isNullOrUndefined(data.items[\"\" + records]) ? data.items[\"\" + records].length : data.items.length;\n        options.uid = getUid('grid-row');\n        var row = new Row(options);\n        row.indent = indent;\n        this.getForeignKeyData(row);\n        row.cells = this.getCaptionRowCells(data.field, indent, row.data);\n        return row;\n    };\n    GroupModelGenerator.prototype.getForeignKeyData = function (row) {\n        var data = row.data;\n        var col = this.parent.getColumnByField(data.field);\n        if (col && col.isForeignColumn && col.isForeignColumn()) {\n            var fkValue = (isNullOrUndefined(data.key) ? '' : col.valueAccessor(col.foreignKeyValue, getForeignData(col, {}, data.key)[0], col));\n            setValue('foreignKey', fkValue, row.data);\n        }\n    };\n    /**\n     * @param {Object[]} data - specifies the data\n     * @param {number} indent - specifies the indent\n     * @param {number} childID - specifies the childID\n     * @param {number} tIndex - specifies the tIndex\n     * @param {string} parentUid - specifies the ParentUid\n     * @returns {Row<Column>[]} returns the row object\n     * @hidden\n     */\n    GroupModelGenerator.prototype.generateDataRows = function (data, indent, childID, tIndex, parentUid) {\n        var rows = [];\n        var indexes = this.parent.getColumnIndexesInView();\n        for (var i = 0, len = data.length; i < len; i++, tIndex++) {\n            rows[parseInt(i.toString(), 10)] = this.generateRow(data[parseInt(i.toString(), 10)], this.index, i ? undefined : 'e-firstchildrow', indent, childID, tIndex, parentUid);\n            for (var j = 0; j < indent; j++) {\n                if (this.parent.enableColumnVirtualization && indexes.indexOf(indent) === -1) {\n                    continue;\n                }\n                rows[parseInt(i.toString(), 10)].cells.unshift(this.generateIndentCell());\n            }\n            this.index++;\n        }\n        return rows;\n    };\n    GroupModelGenerator.prototype.generateIndentCell = function () {\n        return this.generateCell({}, null, CellType.Indent);\n    };\n    GroupModelGenerator.prototype.refreshRows = function (input) {\n        var indexes = this.parent.getColumnIndexesInView();\n        for (var i = 0; i < input.length; i++) {\n            if (input[parseInt(i.toString(), 10)].isDataRow) {\n                input[parseInt(i.toString(), 10)].cells = this.generateCells(input[parseInt(i.toString(), 10)]);\n                for (var j = 0; j < input[parseInt(i.toString(), 10)].indent; j++) {\n                    if (this.parent.enableColumnVirtualization\n                        && indexes.indexOf(input[parseInt(i.toString(), 10)].indent) === -1) {\n                        continue;\n                    }\n                    input[parseInt(i.toString(), 10)].cells.unshift(this.generateIndentCell());\n                }\n            }\n            else {\n                var cRow = this.generateCaptionRow(input[parseInt(i.toString(), 10)].data, input[parseInt(i.toString(), 10)].indent);\n                input[parseInt(i.toString(), 10)].cells = cRow.cells;\n            }\n        }\n        return input;\n    };\n    GroupModelGenerator.prototype.setInfiniteRowVisibility = function (caption) {\n        if (!caption.isExpand || caption.visible === false) {\n            for (var _i = 0, _a = this.rows; _i < _a.length; _i++) {\n                var row = _a[_i];\n                if (row.parentUid === caption.uid) {\n                    row.visible = false;\n                    if (row.isCaptionRow) {\n                        this.setInfiniteRowVisibility(row);\n                    }\n                }\n            }\n        }\n    };\n    GroupModelGenerator.prototype.ensureRowVisibility = function () {\n        for (var i = 0; i < this.rows.length; i++) {\n            var row = this.rows[parseInt(i.toString(), 10)];\n            if (!row.isCaptionRow) {\n                continue;\n            }\n            for (var j = i + 1; j < this.rows.length; j++) {\n                var childRow = this.rows[parseInt(j.toString(), 10)];\n                if (row.uid === childRow.parentUid) {\n                    this.rows[parseInt(j.toString(), 10)].visible = row.isExpand;\n                }\n            }\n        }\n    };\n    return GroupModelGenerator;\n}(RowModelGenerator));\nexport { GroupModelGenerator };\n","//! moment.js locale configuration\n//! locale : Filipino [fil]\n//! author : Dan Hagman : https://github.com/hagmandan\n//! author : Matthew Co : https://github.com/matthewdeeco\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var fil = moment.defineLocale('fil', {\n        months: 'Enero_Pebrero_Marso_Abril_Mayo_Hunyo_Hulyo_Agosto_Setyembre_Oktubre_Nobyembre_Disyembre'.split(\n            '_'\n        ),\n        monthsShort: 'Ene_Peb_Mar_Abr_May_Hun_Hul_Ago_Set_Okt_Nob_Dis'.split('_'),\n        weekdays: 'Linggo_Lunes_Martes_Miyerkules_Huwebes_Biyernes_Sabado'.split(\n            '_'\n        ),\n        weekdaysShort: 'Lin_Lun_Mar_Miy_Huw_Biy_Sab'.split('_'),\n        weekdaysMin: 'Li_Lu_Ma_Mi_Hu_Bi_Sab'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'MM/D/YYYY',\n            LL: 'MMMM D, YYYY',\n            LLL: 'MMMM D, YYYY HH:mm',\n            LLLL: 'dddd, MMMM DD, YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: 'LT [ngayong araw]',\n            nextDay: '[Bukas ng] LT',\n            nextWeek: 'LT [sa susunod na] dddd',\n            lastDay: 'LT [kahapon]',\n            lastWeek: 'LT [noong nakaraang] dddd',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'sa loob ng %s',\n            past: '%s ang nakalipas',\n            s: 'ilang segundo',\n            ss: '%d segundo',\n            m: 'isang minuto',\n            mm: '%d minuto',\n            h: 'isang oras',\n            hh: '%d oras',\n            d: 'isang araw',\n            dd: '%d araw',\n            M: 'isang buwan',\n            MM: '%d buwan',\n            y: 'isang taon',\n            yy: '%d taon',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}/,\n        ordinal: function (number) {\n            return number;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return fil;\n\n})));\n","//! moment.js locale configuration\n//! locale : Armenian [hy-am]\n//! author : Armendarabyan : https://github.com/armendarabyan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var hyAm = moment.defineLocale('hy-am', {\n        months: {\n            format: 'հունվարի_փետրվարի_մարտի_ապրիլի_մայիսի_հունիսի_հուլիսի_օգոստոսի_սեպտեմբերի_հոկտեմբերի_նոյեմբերի_դեկտեմբերի'.split(\n                '_'\n            ),\n            standalone:\n                'հունվար_փետրվար_մարտ_ապրիլ_մայիս_հունիս_հուլիս_օգոստոս_սեպտեմբեր_հոկտեմբեր_նոյեմբեր_դեկտեմբեր'.split(\n                    '_'\n                ),\n        },\n        monthsShort: 'հնվ_փտր_մրտ_ապր_մյս_հնս_հլս_օգս_սպտ_հկտ_նմբ_դկտ'.split('_'),\n        weekdays:\n            'կիրակի_երկուշաբթի_երեքշաբթի_չորեքշաբթի_հինգշաբթի_ուրբաթ_շաբաթ'.split(\n                '_'\n            ),\n        weekdaysShort: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        weekdaysMin: 'կրկ_երկ_երք_չրք_հնգ_ուրբ_շբթ'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D MMMM YYYY թ.',\n            LLL: 'D MMMM YYYY թ., HH:mm',\n            LLLL: 'dddd, D MMMM YYYY թ., HH:mm',\n        },\n        calendar: {\n            sameDay: '[այսօր] LT',\n            nextDay: '[վաղը] LT',\n            lastDay: '[երեկ] LT',\n            nextWeek: function () {\n                return 'dddd [օրը ժամը] LT';\n            },\n            lastWeek: function () {\n                return '[անցած] dddd [օրը ժամը] LT';\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s հետո',\n            past: '%s առաջ',\n            s: 'մի քանի վայրկյան',\n            ss: '%d վայրկյան',\n            m: 'րոպե',\n            mm: '%d րոպե',\n            h: 'ժամ',\n            hh: '%d ժամ',\n            d: 'օր',\n            dd: '%d օր',\n            M: 'ամիս',\n            MM: '%d ամիս',\n            y: 'տարի',\n            yy: '%d տարի',\n        },\n        meridiemParse: /գիշերվա|առավոտվա|ցերեկվա|երեկոյան/,\n        isPM: function (input) {\n            return /^(ցերեկվա|երեկոյան)$/.test(input);\n        },\n        meridiem: function (hour) {\n            if (hour < 4) {\n                return 'գիշերվա';\n            } else if (hour < 12) {\n                return 'առավոտվա';\n            } else if (hour < 17) {\n                return 'ցերեկվա';\n            } else {\n                return 'երեկոյան';\n            }\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}|\\d{1,2}-(ին|րդ)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                case 'DDD':\n                case 'w':\n                case 'W':\n                case 'DDDo':\n                    if (number === 1) {\n                        return number + '-ին';\n                    }\n                    return number + '-րդ';\n                default:\n                    return number;\n            }\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return hyAm;\n\n})));\n","import { Rect } from '@syncfusion/ej2-svg-base';\n/**\n * Specifies Chart Themes\n */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var Theme;\n(function (Theme) {\n    /** @private */\n    Theme.stockEventFont = {\n        size: '13px',\n        fontWeight: '400',\n        color: null,\n        fontStyle: 'Normal',\n        fontFamily: 'Segoe UI'\n    };\n})(Theme || (Theme = {}));\n/** @private */\nexport function getSeriesColor(theme) {\n    var palette;\n    switch (theme) {\n        case 'Fabric':\n            palette = ['#4472c4', '#ed7d31', '#ffc000', '#70ad47', '#5b9bd5',\n                '#c1c1c1', '#6f6fe2', '#e269ae', '#9e480e', '#997300'];\n            break;\n        case 'Bootstrap4':\n            palette = ['#a16ee5', '#f7ce69', '#55a5c2', '#7ddf1e', '#ff6ea6',\n                '#7953ac', '#b99b4f', '#407c92', '#5ea716', '#b91c52'];\n            break;\n        case 'Bootstrap':\n            palette = ['#a16ee5', '#f7ce69', '#55a5c2', '#7ddf1e', '#ff6ea6',\n                '#7953ac', '#b99b4f', '#407c92', '#5ea716', '#b91c52'];\n            break;\n        case 'HighContrastLight':\n        case 'HighContrast':\n            palette = ['#79ECE4', '#E98272', '#DFE6B6', '#C6E773', '#BA98FF',\n                '#FA83C3', '#00C27A', '#43ACEF', '#D681EF', '#D8BC6E'];\n            break;\n        case 'MaterialDark':\n            palette = ['#9ECB08', '#56AEFF', '#C57AFF', '#61EAA9', '#EBBB3E',\n                '#F45C5C', '#8A77FF', '#63C7FF', '#FF84B0', '#F7C928'];\n            break;\n        case 'FabricDark':\n            palette = ['#4472c4', '#ed7d31', '#ffc000', '#70ad47', '#5b9bd5',\n                '#c1c1c1', '#6f6fe2', '#e269ae', '#9e480e', '#997300'];\n            break;\n        case 'BootstrapDark':\n            palette = ['#a16ee5', '#f7ce69', '#55a5c2', '#7ddf1e', '#ff6ea6',\n                '#7953ac', '#b99b4f', '#407c92', '#5ea716', '#b91c52'];\n            break;\n        case 'Tailwind':\n            palette = ['#5A61F6', '#65A30D', '#334155', '#14B8A6', '#8B5CF6',\n                '#0369A1', '#F97316', '#9333EA', '#F59E0B', '#15803D'];\n            break;\n        case 'TailwindDark':\n            palette = ['#8B5CF6', '#22D3EE', '#F87171', '#4ADE80', '#E879F9',\n                '#FCD34D', '#F97316', '#2DD4BF', '#F472B6', '#10B981'];\n            break;\n        case 'Bootstrap5':\n            palette = ['#6355C7', '#FFB400', '#2196F5', '#F7523F', '#963C70',\n                '#4BE0BC', '#FD7400', '#C9E422', '#DE3D8A', '#162F88'];\n            break;\n        case 'Bootstrap5Dark':\n            palette = ['#8F80F4', '#FFD46D', '#6CBDFF', '#FF7F71', '#FF6DB3',\n                '#63F5D2', '#FCAA65', '#ECFF77', '#EF8EFF', '#5F82FD'];\n            break;\n        case 'FluentDark':\n            palette = ['#1AC9E6', '#DA4CB2', '#EDBB40', '#AF4BCF', '#FF7266',\n                '#1BD565', '#EE993D', '#5887FF', '#EC548D', '#7D39C0'];\n            break;\n        case 'Fluent':\n            palette = ['#1AC9E6', '#DA4CB2', '#EDBB40', '#AF4BCF', '#FF7266',\n                '#1BD565', '#EE993D', '#5887FF', '#EC548D', '#7D39C0'];\n            break;\n        case 'Material3':\n            palette = ['#6355C7', '#00AEE0', '#FFB400', '#F7523F', '#963C70',\n                '#FD7400', '#4BE0BC', '#2196F5', '#DE3D8A', '#162F88'];\n            break;\n        case 'Material3Dark':\n            palette = ['#4EAAFF', '#FA4EAB', '#FFF500', '#17EA58', '#38FFE7',\n                '#FF9E45', '#B3F32F', '#B93CE4', '#FC5664', '#9B55FF'];\n            break;\n        default:\n            palette = ['#00bdae', '#404041', '#357cd2', '#e56590', '#f8b883',\n                '#70ad47', '#dd8abd', '#7f84e8', '#7bb4eb', '#ea7a57'];\n            break;\n    }\n    return palette;\n}\n/** @private */\n// tslint:disable-next-line:max-func-body-length\nexport function getThemeColor(theme, canvas) {\n    var style;\n    var darkBackground = theme === 'MaterialDark' ? '#383838' : (theme === 'FabricDark' ? '#242424' : '#1b1b1b');\n    switch (theme) {\n        case 'HighContrastLight':\n        case 'HighContrast':\n            style = {\n                axisLabel: '#ffffff',\n                axisTitle: '#ffffff',\n                axisLine: '#ffffff',\n                majorGridLine: '#BFBFBF',\n                minorGridLine: '#969696',\n                majorTickLine: '#BFBFBF',\n                minorTickLine: '#969696',\n                chartTitle: '#ffffff',\n                legendLabel: '#ffffff',\n                background: canvas ? '#000000' : 'transparent',\n                areaBorder: '#ffffff',\n                errorBar: '#ffffff',\n                crosshairLine: '#ffffff',\n                crosshairFill: '#ffffff',\n                crosshairLabel: '#000000',\n                tooltipFill: '#ffffff',\n                tooltipBoldLabel: '#000000',\n                tooltipLightLabel: '#000000',\n                tooltipHeaderLine: '#969696',\n                markerShadow: '#BFBFBF',\n                selectionRectFill: 'rgba(255, 217, 57, 0.3)',\n                selectionRectStroke: '#ffffff',\n                selectionCircleStroke: '#FFD939',\n                tabColor: '#FFD939',\n                bearFillColor: '#2ecd71',\n                bullFillColor: '#e74c3d',\n                toolkitSelectionColor: '#FFD939',\n                toolkitFill: '#737373',\n                toolkitIconRectOverFill: 'transparent',\n                toolkitIconRectSelectionFill: 'transparent',\n                toolkitIconRect: new Rect(0, 0, 16, 16),\n                chartTitleFont: {\n                    color: '#FFFFFF', fontFamily: 'Segoe UI'\n                },\n                axisLabelFont: {\n                    color: '#969696', fontFamily: 'Segoe UI'\n                },\n                legendTitleFont: {\n                    color: '#FFFFFF', fontFamily: 'Segoe UI'\n                },\n                legendLabelFont: {\n                    color: '#969696', fontFamily: 'Segoe UI'\n                },\n                tooltipLabelFont: {\n                    color: '#000000', fontFamily: 'Segoe UI'\n                },\n                axisTitleFont: {\n                    color: '#FFFFFF', fontFamily: 'Segoe UI'\n                },\n                datalabelFont: {\n                    color: '#969696', fontFamily: 'Segoe UI'\n                },\n                chartSubTitleFont: {\n                    color: '#FFFFFF', fontFamily: 'Segoe UI'\n                },\n                crosshairLabelFont: {\n                    color: '#000000', fontFamily: 'Segoe UI'\n                },\n                stripLineLabelFont: {\n                    color: '#969696', fontFamily: 'Segoe UI'\n                }\n            };\n            break;\n        case 'MaterialDark':\n        case 'FabricDark':\n        case 'BootstrapDark':\n            style = {\n                axisLabel: '#DADADA', axisTitle: '#ffffff',\n                axisLine: ' #6F6C6C',\n                majorGridLine: '#414040',\n                minorGridLine: '#514F4F',\n                majorTickLine: '#414040',\n                minorTickLine: ' #4A4848',\n                chartTitle: '#ffffff',\n                legendLabel: '#DADADA',\n                background: canvas ? darkBackground : 'transparent',\n                areaBorder: ' #9A9A9A',\n                errorBar: '#ffffff',\n                crosshairLine: '#F4F4F4',\n                crosshairFill: theme === 'MaterialDark' ? '#F4F4F4' : theme === 'FabricDark' ? '#A19F9D' : '#F0F0F0',\n                crosshairLabel: '#282727',\n                tooltipFill: '#F4F4F4',\n                tooltipBoldLabel: '#282727',\n                tooltipLightLabel: '#333232',\n                tooltipHeaderLine: '#9A9A9A',\n                markerShadow: null,\n                selectionRectFill: 'rgba(56,169,255, 0.1)',\n                selectionRectStroke: '#38A9FF',\n                selectionCircleStroke: '#282727',\n                tabColor: theme === 'MaterialDark' ? '#00B0FF' : theme === 'FabricDark' ? '#0074CC' : '#0070F0',\n                bearFillColor: '#2ecd71',\n                bullFillColor: '#e74c3d',\n                toolkitSelectionColor: theme === 'MaterialDark' ? '#00B0FF' : theme === 'FabricDark' ? '#0074CC' : '#0070F0',\n                toolkitFill: '#737373',\n                toolkitIconRectOverFill: 'transparent',\n                toolkitIconRectSelectionFill: 'transparent',\n                toolkitIconRect: new Rect(0, 0, 16, 16),\n                chartTitleFont: {\n                    color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.87)' : theme === 'FabricDark' ? '#DADADA' : '#FFFFFF', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica'\n                },\n                axisLabelFont: {\n                    color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.6)' : theme === 'FabricDark' ? '#A19F9D' : '#CED4DA', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica'\n                },\n                legendTitleFont: {\n                    color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.87)' : theme === 'FabricDark' ? '#DADADA' : '#FFFFFF', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica'\n                },\n                legendLabelFont: {\n                    color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.6)' : theme === 'FabricDark' ? '#A19F9D' : '#676767', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica'\n                },\n                tooltipLabelFont: {\n                    color: theme === 'MaterialDark' ? 'rgba(18, 18, 18, 1)' : theme === 'FabricDark' ? '#DADADA' : '#1A1A1A', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica'\n                },\n                axisTitleFont: {\n                    color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.87)' : theme === 'FabricDark' ? '#DADADA' : '#FFFFFF', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica'\n                },\n                datalabelFont: {\n                    color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.6)' : theme === 'FabricDark' ? '#A19F9D' : '#676767', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica'\n                },\n                chartSubTitleFont: {\n                    color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.87)' : theme === 'FabricDark' ? '#DADADA' : '#FFFFFF', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica'\n                },\n                crosshairLabelFont: {\n                    color: theme === 'MaterialDark' ? 'rgba(18, 18, 18, 1)' : theme === 'FabricDark' ? '#DADADA' : '#1A1A1A', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica'\n                },\n                stripLineLabelFont: {\n                    color: theme === 'MaterialDark' ? 'rgba(255, 255, 255, 0.24)' : theme === 'FabricDark' ? '#6F6C6C' : '#414141', fontFamily: theme === 'MaterialDark' ? 'Roboto' : theme === 'FabricDark' ? 'Segoe UI' : 'Helvetica'\n                }\n            };\n            break;\n        case 'Bootstrap4':\n            style = {\n                axisLabel: '#212529', axisTitle: '#212529', axisLine: '#CED4DA', majorGridLine: '#CED4DA',\n                minorGridLine: '#DEE2E6', majorTickLine: '#ADB5BD', minorTickLine: '#CED4DA', chartTitle: '#212529', legendLabel: '#212529',\n                background: canvas ? '#FFFFFF' : 'transparent', areaBorder: '#DEE2E6', errorBar: '#000000', crosshairLine: '#6C757D', crosshairFill: '#212529',\n                crosshairLabel: '#FFFFFF', tooltipFill: '#020202', tooltipBoldLabel: 'rgba(255,255,255)',\n                tooltipLightLabel: 'rgba(255,255,255, 0.9)', tooltipHeaderLine: 'rgba(255,255,255, 0.2)', markerShadow: null,\n                selectionRectFill: 'rgba(255,255,255, 0.1)', selectionRectStroke: 'rgba(0, 123, 255)', selectionCircleStroke: '#495057', tabColor: '#007BFF', bearFillColor: '#2ecd71', bullFillColor: '#e74c3d',\n                toolkitSelectionColor: '#007BFF',\n                toolkitFill: '#495057',\n                toolkitIconRectOverFill: 'transparent',\n                toolkitIconRectSelectionFill: 'transparent',\n                toolkitIconRect: new Rect(-5, -5, 26, 26),\n                chartTitleFont: {\n                    color: '#212529', fontFamily: 'Helvetica'\n                },\n                axisLabelFont: {\n                    color: '#495057', fontFamily: 'Helvetica'\n                },\n                legendTitleFont: {\n                    color: '#212529', fontFamily: 'Helvetica'\n                },\n                legendLabelFont: {\n                    color: '#666666', fontFamily: 'Helvetica'\n                },\n                tooltipLabelFont: {\n                    color: '#F9FAFB', fontFamily: 'Helvetica'\n                },\n                axisTitleFont: {\n                    color: '#212529', fontFamily: 'Helvetica'\n                },\n                datalabelFont: {\n                    color: '#495057', fontFamily: 'Helvetica'\n                },\n                chartSubTitleFont: {\n                    color: '#212529', fontFamily: 'Helvetica'\n                },\n                crosshairLabelFont: {\n                    color: '#F9FAFB', fontFamily: 'Helvetica'\n                },\n                stripLineLabelFont: {\n                    color: '#6C757D', fontFamily: 'Helvetica'\n                }\n            };\n            break;\n        case 'Tailwind':\n            style = {\n                axisLabel: '#6B728', axisTitle: '#374151',\n                axisLine: ' #D1D5DB',\n                majorGridLine: '#E5E7EB',\n                minorGridLine: '#E5E7EB',\n                majorTickLine: '#D1D5DB',\n                minorTickLine: ' #D1D5DB',\n                chartTitle: '#374151',\n                legendLabel: '#374151',\n                background: canvas ? 'rgba(255,255,255, 0.0)' : 'transparent',\n                areaBorder: ' #E5E7EB',\n                errorBar: '#374151',\n                crosshairLine: '#1F2937',\n                crosshairFill: '#111827',\n                crosshairLabel: '#F9FAFB',\n                tooltipFill: '#111827',\n                tooltipBoldLabel: '#D1D5DB',\n                tooltipLightLabel: '#F9FAFB',\n                tooltipHeaderLine: '#6B7280',\n                markerShadow: null,\n                selectionRectFill: 'rgba(79,70,229, 0.1)',\n                selectionRectStroke: '#4F46E5',\n                selectionCircleStroke: '#6B7280',\n                tabColor: '#4F46E5',\n                bearFillColor: '#2ecd71',\n                bullFillColor: '#e74c3d',\n                toolkitSelectionColor: '#4F46E5',\n                toolkitFill: '#6B7280',\n                toolkitIconRectOverFill: 'transparent',\n                toolkitIconRectSelectionFill: 'transparent',\n                toolkitIconRect: new Rect(0, 0, 16, 16),\n                chartTitleFont: {\n                    color: '#374151', fontFamily: 'Inter'\n                },\n                axisLabelFont: {\n                    color: '#6B7280', fontFamily: 'Inter'\n                },\n                legendTitleFont: {\n                    color: '#374151', fontFamily: 'Inter'\n                },\n                legendLabelFont: {\n                    color: '#374151', fontFamily: 'Inter'\n                },\n                tooltipLabelFont: {\n                    color: '#F9FAFB', fontFamily: 'Inter'\n                },\n                axisTitleFont: {\n                    color: '#374151', fontFamily: 'Inter'\n                },\n                datalabelFont: {\n                    color: '#6B7280', fontFamily: 'Inter'\n                },\n                chartSubTitleFont: {\n                    color: '#374151', fontFamily: 'Inter'\n                },\n                crosshairLabelFont: {\n                    color: '#F9FAFB', fontFamily: 'Inter'\n                },\n                stripLineLabelFont: {\n                    color: '#D1D5DB', fontFamily: 'Inter'\n                }\n            };\n            break;\n        case 'TailwindDark':\n            style = {\n                axisLabel: '#9CA3AF', axisTitle: '#9CA3AF',\n                axisLine: ' #4B5563',\n                majorGridLine: '#374151',\n                minorGridLine: '#374151',\n                majorTickLine: '#4B5563',\n                minorTickLine: ' #4B5563',\n                chartTitle: '#D1D5DB',\n                legendLabel: '#D1D5DB',\n                background: canvas ? '#1f2937' : 'transparent',\n                areaBorder: ' #374151',\n                errorBar: '#ffffff',\n                crosshairLine: '#9CA3AF',\n                crosshairFill: '#F9FAFB',\n                crosshairLabel: '#1F2937',\n                tooltipFill: '#F9FAFB',\n                tooltipBoldLabel: '#6B7280',\n                tooltipLightLabel: '#1F2937',\n                tooltipHeaderLine: '#9CA3AF',\n                markerShadow: null,\n                selectionRectFill: 'rgba(34,211,238, 0.1)',\n                selectionRectStroke: '#22D3EE',\n                selectionCircleStroke: '#282727',\n                tabColor: '#22D3EE',\n                bearFillColor: '#2ecd71',\n                bullFillColor: '#e74c3d',\n                toolkitSelectionColor: '#22D3EE',\n                toolkitFill: '#D1D5DB',\n                toolkitIconRectOverFill: 'transparent',\n                toolkitIconRectSelectionFill: 'transparent',\n                toolkitIconRect: new Rect(0, 0, 16, 16),\n                chartTitleFont: {\n                    color: '#D1D5DB', fontFamily: 'Inter'\n                },\n                axisLabelFont: {\n                    color: '#9CA3AF', fontFamily: 'Inter'\n                },\n                legendTitleFont: {\n                    color: '#D1D5DB', fontFamily: 'Inter'\n                },\n                legendLabelFont: {\n                    color: '#D1D5DB', fontFamily: 'Inter'\n                },\n                tooltipLabelFont: {\n                    color: '#1F2937', fontFamily: 'Inter'\n                },\n                axisTitleFont: {\n                    color: '#D1D5DB', fontFamily: 'Inter'\n                },\n                datalabelFont: {\n                    color: '#9CA3AF', fontFamily: 'Inter'\n                },\n                chartSubTitleFont: {\n                    color: '#D1D5DB', fontFamily: 'Inter'\n                },\n                crosshairLabelFont: {\n                    color: '#1F2937', fontFamily: 'Inter'\n                },\n                stripLineLabelFont: {\n                    color: '#6B7280', fontFamily: 'Inter'\n                }\n            };\n            break;\n        case 'Bootstrap5':\n            style = {\n                axisLabel: '#495057',\n                axisTitle: '#343A40',\n                axisLine: '#D1D5DB',\n                majorGridLine: '#E5E7EB',\n                minorGridLine: '#E5E7EB',\n                majorTickLine: '#D1D5DB',\n                minorTickLine: ' #D1D5DB',\n                chartTitle: '#343A40',\n                legendLabel: '#343A40',\n                background: canvas ? '#FFFFFF' : 'transparent',\n                areaBorder: ' #DEE2E6',\n                errorBar: '#1F2937',\n                crosshairLine: '#1F2937',\n                crosshairFill: '#212529',\n                crosshairLabel: '#F9FAFB',\n                tooltipFill: '#212529',\n                tooltipBoldLabel: '#F9FAFB',\n                tooltipLightLabel: '#F9FAFB',\n                tooltipHeaderLine: '#9CA3AF',\n                markerShadow: null,\n                selectionRectFill: 'rgba(79,70,229, 0.1)',\n                selectionRectStroke: '#4F46E5',\n                selectionCircleStroke: '#6B7280',\n                tabColor: '#0D6EFD',\n                bearFillColor: '#2ecd71',\n                bullFillColor: '#e74c3d',\n                toolkitSelectionColor: '#0D6EFD',\n                toolkitFill: '#737373',\n                toolkitIconRectOverFill: 'transparent',\n                toolkitIconRectSelectionFill: 'transparent',\n                toolkitIconRect: new Rect(0, 0, 16, 16),\n                chartTitleFont: {\n                    color: '#343A40', fontFamily: 'Helvetica'\n                },\n                axisLabelFont: {\n                    color: '#495057', fontFamily: 'Helvetica'\n                },\n                legendTitleFont: {\n                    color: '#343A40', fontFamily: 'Helvetica'\n                },\n                legendLabelFont: {\n                    color: '#343A40', fontFamily: 'Helvetica'\n                },\n                tooltipLabelFont: {\n                    color: '#F9FAFB', fontFamily: 'Helvetica'\n                },\n                axisTitleFont: {\n                    color: '#343A40', fontFamily: 'Helvetica'\n                },\n                datalabelFont: {\n                    color: '#495057', fontFamily: 'Helvetica'\n                },\n                chartSubTitleFont: {\n                    color: '#343A40', fontFamily: 'Helvetica'\n                },\n                crosshairLabelFont: {\n                    color: '#F9FAFB', fontFamily: 'Helvetica'\n                },\n                stripLineLabelFont: {\n                    color: '#ADB5BD', fontFamily: 'Helvetica'\n                }\n            };\n            break;\n        case 'Bootstrap5Dark':\n            style = {\n                axisLabel: '#CED4DA',\n                axisTitle: '#E9ECEF',\n                axisLine: '#495057',\n                majorGridLine: '#343A40',\n                minorGridLine: '#343A40',\n                majorTickLine: '#495057',\n                minorTickLine: ' #495057',\n                chartTitle: '#E9ECEF',\n                legendLabel: '#E9ECEF',\n                background: canvas ? '#212529' : 'transparent',\n                areaBorder: ' #444C54',\n                errorBar: '#ADB5BD',\n                crosshairLine: '#ADB5BD',\n                crosshairFill: '#E9ECEF',\n                crosshairLabel: '#212529',\n                tooltipFill: '#E9ECEF',\n                tooltipBoldLabel: '#212529',\n                tooltipLightLabel: '#212529',\n                tooltipHeaderLine: '#ADB5BD',\n                markerShadow: null,\n                selectionRectFill: 'rgba(79,70,229, 0.1)',\n                selectionRectStroke: '#4F46E5',\n                selectionCircleStroke: '#6B7280',\n                tabColor: '#0D6EFD',\n                bearFillColor: '#2ecd71',\n                bullFillColor: '#e74c3d',\n                toolkitSelectionColor: '#0D6EFD',\n                toolkitFill: '#737373',\n                toolkitIconRectOverFill: 'transparent',\n                toolkitIconRectSelectionFill: 'transparent',\n                toolkitIconRect: new Rect(0, 0, 16, 16),\n                chartTitleFont: {\n                    color: '#E9ECEF', fontFamily: 'Helvetica'\n                },\n                axisLabelFont: {\n                    color: '#CED4DA', fontFamily: 'Helvetica'\n                },\n                legendTitleFont: {\n                    color: '#E9ECEF', fontFamily: 'Helvetica'\n                },\n                legendLabelFont: {\n                    color: '#E9ECEF', fontFamily: 'Helvetica'\n                },\n                tooltipLabelFont: {\n                    color: '#212529', fontFamily: 'Helvetica'\n                },\n                axisTitleFont: {\n                    color: '#E9ECEF', fontFamily: 'Helvetica'\n                },\n                datalabelFont: {\n                    color: '#E9ECEF', fontFamily: 'Helvetica'\n                },\n                chartSubTitleFont: {\n                    color: '#E9ECEF', fontFamily: 'Helvetica'\n                },\n                crosshairLabelFont: {\n                    color: '#212529', fontFamily: 'Helvetica'\n                },\n                stripLineLabelFont: {\n                    color: '#6C757D', fontFamily: 'Helvetica'\n                }\n            };\n            break;\n        case 'Fluent':\n            style = {\n                axisLabel: '#3B3A39',\n                axisTitle: '#201F1E',\n                axisLine: '#D2D0CE',\n                majorGridLine: '#EDEBE9',\n                minorGridLine: '#EDEBE9',\n                majorTickLine: '#D2D0CE',\n                minorTickLine: ' #D2D0CE',\n                chartTitle: '#201F1E',\n                legendLabel: '#323130',\n                background: canvas ? '#FFFFFF' : 'transparent',\n                areaBorder: '#EDEBE9',\n                errorBar: '#A19F9D',\n                crosshairLine: '#A19F9D',\n                crosshairFill: '#FFFFFF',\n                crosshairLabel: '#323130',\n                tooltipFill: '#FFFFFF',\n                tooltipBoldLabel: '#323130',\n                tooltipLightLabel: '#323130',\n                tooltipHeaderLine: '#D2D0CE',\n                markerShadow: null,\n                selectionRectFill: 'rgba(79,70,229, 0.1)',\n                selectionRectStroke: '#4F46E5',\n                selectionCircleStroke: '#6B7280',\n                tabColor: '#0078D4',\n                bearFillColor: '#2ecd71',\n                bullFillColor: '#e74c3d',\n                toolkitSelectionColor: '#0078D4',\n                toolkitFill: '#A19F9D',\n                toolkitIconRectOverFill: 'transparent',\n                toolkitIconRectSelectionFill: 'transparent',\n                toolkitIconRect: new Rect(0, 0, 16, 16),\n                chartTitleFont: {\n                    color: '#201F1E', fontFamily: 'Segoe UI'\n                },\n                axisLabelFont: {\n                    color: '#3B3A39', fontFamily: 'Segoe UI'\n                },\n                legendTitleFont: {\n                    color: '#201F1E', fontFamily: 'Segoe UI'\n                },\n                legendLabelFont: {\n                    color: '#49454E', fontFamily: 'Segoe UI'\n                },\n                tooltipLabelFont: {\n                    color: '#323130', fontFamily: 'Segoe UI'\n                },\n                axisTitleFont: {\n                    color: '#201F1E', fontFamily: 'Segoe UI'\n                },\n                datalabelFont: {\n                    color: '#3B3A39', fontFamily: 'Segoe UI'\n                },\n                chartSubTitleFont: {\n                    color: '#323129', fontFamily: 'Segoe UI'\n                },\n                crosshairLabelFont: {\n                    color: '#323130', fontFamily: 'Segoe UI'\n                },\n                stripLineLabelFont: {\n                    color: '#A19F9D', fontFamily: 'Segoe UI'\n                }\n            };\n            break;\n        case 'FluentDark':\n            style = {\n                axisLabel: '#C8C6C4',\n                axisTitle: '#F3F2F1',\n                axisLine: '#3B3A39',\n                majorGridLine: '#414040',\n                minorGridLine: '#414040',\n                majorTickLine: '#3B3A39',\n                minorTickLine: '#3B3A39',\n                chartTitle: '#F3F2F1',\n                legendLabel: '#D2D0CE',\n                background: canvas ? '#383838' : 'transparent',\n                areaBorder: '#414040',\n                errorBar: '#D2D0CE',\n                crosshairLine: '#D2D0CE',\n                crosshairFill: '#323130',\n                crosshairLabel: '#F3F2F1',\n                tooltipFill: '#252423',\n                tooltipBoldLabel: '#F3F2F1',\n                tooltipLightLabel: '#F3F2F1',\n                tooltipHeaderLine: '#3B3A39',\n                markerShadow: null,\n                selectionRectFill: 'rgba(79,70,229, 0.1)',\n                selectionRectStroke: '#4F46E5',\n                selectionCircleStroke: '#6B7280',\n                tabColor: '#0078D4',\n                bearFillColor: '#2ecd71',\n                bullFillColor: '#e74c3d',\n                toolkitSelectionColor: '#0078D4',\n                toolkitFill: '#484644',\n                toolkitIconRectOverFill: 'transparent',\n                toolkitIconRectSelectionFill: 'transparent',\n                toolkitIconRect: new Rect(0, 0, 16, 16),\n                chartTitleFont: {\n                    color: '#C8C6C4', fontFamily: 'Segoe UI'\n                },\n                axisLabelFont: {\n                    color: '#C8C6C4', fontFamily: 'Segoe UI'\n                },\n                legendTitleFont: {\n                    color: '#F3F2F1', fontFamily: 'Segoe UI'\n                },\n                legendLabelFont: {\n                    color: '#D2D0CE', fontFamily: 'Segoe UI'\n                },\n                tooltipLabelFont: {\n                    color: '#F3F2F1', fontFamily: 'Segoe UI'\n                },\n                axisTitleFont: {\n                    color: '#F3F2F2', fontFamily: 'Segoe UI'\n                },\n                datalabelFont: {\n                    color: '#D2D0CE', fontFamily: 'Segoe UI'\n                },\n                chartSubTitleFont: {\n                    color: '#F3F2F1', fontFamily: 'Segoe UI'\n                },\n                crosshairLabelFont: {\n                    color: '#F3F2F1', fontFamily: 'Segoe UI'\n                },\n                stripLineLabelFont: {\n                    color: '#484644', fontFamily: 'Segoe UI'\n                }\n            };\n            break;\n        case 'Material3':\n            style = {\n                axisLabel: '#1E192B',\n                axisTitle: '#1C1B1F',\n                axisLine: '#C4C7C5',\n                majorGridLine: '#C4C7C5',\n                minorGridLine: '#C4C7C5',\n                majorTickLine: '#C4C7C5',\n                minorTickLine: ' #C4C7C5',\n                chartTitle: '#1C1B1F',\n                legendLabel: '#49454E',\n                background: canvas ? '#FFFFFF' : 'transparent',\n                areaBorder: '#E7E0EC',\n                errorBar: '#79747E',\n                crosshairLine: '#49454E',\n                crosshairFill: '#313033',\n                crosshairLabel: '#F4EFF4',\n                tooltipFill: '#313033',\n                tooltipBoldLabel: '#F4EFF4',\n                tooltipLightLabel: '#F4EFF4',\n                tooltipHeaderLine: '#F4EFF4',\n                markerShadow: null,\n                selectionRectFill: 'rgb(98, 0, 238, 0.06)',\n                selectionRectStroke: '#6200EE',\n                selectionCircleStroke: '#79747E',\n                tabColor: '#49454E',\n                bearFillColor: '#5887FF',\n                bullFillColor: '#F7523F',\n                toolkitSelectionColor: '#49454E',\n                toolkitFill: '#49454E',\n                toolkitIconRectOverFill: '#EADDFF',\n                toolkitIconRectSelectionFill: '#EADDFF',\n                toolkitIconRect: new Rect(-4, -5, 26, 26),\n                histogram: '#D21020',\n                chartTitleFont: {\n                    color: '#1C1B1F', fontFamily: 'Roboto'\n                },\n                axisLabelFont: {\n                    color: '#1E192B', fontFamily: 'Roboto'\n                },\n                legendTitleFont: {\n                    color: '#1C1B1F', fontFamily: 'Roboto'\n                },\n                legendLabelFont: {\n                    color: '#49454E', fontFamily: 'Roboto'\n                },\n                tooltipLabelFont: {\n                    color: '#F4EFF4', fontFamily: 'Roboto'\n                },\n                axisTitleFont: {\n                    color: '#1C1B1F', fontFamily: 'Roboto'\n                },\n                datalabelFont: {\n                    color: '#49454E', fontFamily: 'Roboto'\n                },\n                chartSubTitleFont: {\n                    color: '#49454E', fontFamily: 'Roboto'\n                },\n                crosshairLabelFont: {\n                    color: '#F4EFF4', fontFamily: 'Roboto'\n                },\n                stripLineLabelFont: {\n                    color: '#79747E', fontFamily: 'Roboto'\n                }\n            };\n            break;\n        case 'Material3Dark':\n            style = {\n                axisLabel: '#E6E1E5',\n                axisTitle: '#E6E1E5',\n                axisLine: '#49454F',\n                majorGridLine: '#444746',\n                minorGridLine: '#444746',\n                majorTickLine: '#444746',\n                minorTickLine: ' #444746',\n                chartTitle: '#E6E1E5',\n                legendLabel: '#CAC4D0',\n                background: canvas ? '#FFFFFF' : 'transparent',\n                areaBorder: '#49454F',\n                errorBar: '#938F99',\n                crosshairLine: '#CAC4D0',\n                crosshairFill: '#E6E1E5',\n                crosshairLabel: '#313033',\n                tooltipFill: '#E6E1E5',\n                tooltipBoldLabel: '#313033',\n                tooltipLightLabel: '#313033',\n                tooltipHeaderLine: '#313033',\n                markerShadow: null,\n                selectionRectFill: 'rgba(78, 170, 255, 0.06)',\n                selectionRectStroke: '#4EAAFF',\n                selectionCircleStroke: '#938F99',\n                tabColor: '#CAC4D0',\n                bearFillColor: '#B3F32F',\n                bullFillColor: '#FF9E45',\n                toolkitSelectionColor: '#CAC4D0',\n                toolkitFill: '#CAC4D0',\n                toolkitIconRectOverFill: '#4F378B',\n                toolkitIconRectSelectionFill: '#4F378B',\n                toolkitIconRect: new Rect(-4, -5, 26, 26),\n                histogram: '#FF9E45',\n                chartTitleFont: {\n                    color: '#E6E1E5', fontFamily: 'Roboto'\n                },\n                axisLabelFont: {\n                    color: '#CAC4D0', fontFamily: 'Roboto'\n                },\n                legendTitleFont: {\n                    color: '#E6E1E5', fontFamily: 'Roboto'\n                },\n                legendLabelFont: {\n                    color: '#CAC4D0', fontFamily: 'Roboto'\n                },\n                tooltipLabelFont: {\n                    color: '#313033', fontFamily: 'Roboto'\n                },\n                axisTitleFont: {\n                    color: '#E6E1E5', fontFamily: 'Roboto'\n                },\n                datalabelFont: {\n                    color: '#CAC4D0', fontFamily: 'Roboto'\n                },\n                chartSubTitleFont: {\n                    color: '#CAC4D0', fontFamily: 'Roboto'\n                },\n                crosshairLabelFont: {\n                    color: '#313033', fontFamily: 'Roboto'\n                },\n                stripLineLabelFont: {\n                    color: '#938F99', fontFamily: 'Roboto'\n                }\n            };\n            break;\n        default:\n            style = {\n                axisLabel: '#686868',\n                axisTitle: '#424242',\n                axisLine: '#b5b5b5',\n                majorGridLine: '#dbdbdb',\n                minorGridLine: '#eaeaea',\n                majorTickLine: '#b5b5b5',\n                minorTickLine: '#d6d6d6',\n                chartTitle: '#424242',\n                legendLabel: '#353535',\n                background: canvas ? '#FFFFFF' : 'transparent',\n                areaBorder: 'Gray',\n                errorBar: '#000000',\n                crosshairLine: '#4f4f4f',\n                crosshairFill: theme === 'Material' ? '#000816' : theme === 'Fabric' ? '#FFFFFF' : '#212529',\n                crosshairLabel: '#e5e5e5',\n                tooltipFill: '#000816',\n                tooltipBoldLabel: '#ffffff',\n                tooltipLightLabel: '#dbdbdb',\n                tooltipHeaderLine: '#ffffff',\n                markerShadow: null,\n                selectionRectFill: 'rgba(41, 171, 226, 0.1)',\n                selectionRectStroke: '#29abe2',\n                selectionCircleStroke: '#29abe2',\n                tabColor: theme === 'Material' ? '#ff4081' : theme === 'Fabric' ? '#0078D6' : '#317AB9',\n                bearFillColor: '#2ecd71',\n                bullFillColor: '#e74c3d',\n                toolkitSelectionColor: theme === 'Material' ? '#ff4081' : theme === 'Fabric' ? '#0078D6' : '#317AB9',\n                toolkitFill: '#737373',\n                toolkitIconRectOverFill: 'transparent',\n                toolkitIconRectSelectionFill: 'transparent',\n                toolkitIconRect: new Rect(0, 0, 16, 16),\n                chartTitleFont: {\n                    color: theme === 'Material' ? 'rgba(0, 0, 0, 1)' : theme === 'Fabric' ? '#333333' : '#212529', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica'\n                },\n                axisLabelFont: {\n                    color: theme === 'Material' ? 'rgba(97, 97, 97, 1)' : theme === 'Fabric' ? '#666666' : '#676767', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica'\n                },\n                legendTitleFont: {\n                    color: theme === 'Material' ? 'rgba(0, 0, 0, 1)' : theme === 'Fabric' ? '#333333' : '#212529', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica'\n                },\n                legendLabelFont: {\n                    color: theme === 'Material' ? 'rgba(97, 97, 97, 1)' : theme === 'Fabric' ? '#666666' : '#666666', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica'\n                },\n                tooltipLabelFont: {\n                    color: theme === 'Material' ? 'rgba(249, 250, 251, 1)' : theme === 'Fabric' ? '#333333' : '#F9FAFB', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica'\n                },\n                axisTitleFont: {\n                    color: theme === 'Material' ? 'rgba(0, 0, 0, 1)' : theme === 'Fabric' ? '#333333' : '#212529', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica'\n                },\n                datalabelFont: {\n                    color: theme === 'Material' ? 'rgba(97, 97, 97, 1)' : theme === 'Fabric' ? '#666666' : '#676767', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica'\n                },\n                chartSubTitleFont: {\n                    color: theme === 'Material' ? 'rgba(0, 0, 0, 1)' : theme === 'Fabric' ? '#333333' : '#212529', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica'\n                },\n                crosshairLabelFont: {\n                    color: theme === 'Material' ? 'rgba(249, 250, 251, 1)' : theme === 'Fabric' ? '#333333' : '#F9FAFB', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica'\n                },\n                stripLineLabelFont: {\n                    color: theme === 'Material' ? 'rgba(158, 158, 158, 1)' : theme === 'Fabric' ? '#A6A6A6' : '#676767', fontFamily: theme === 'Material' ? 'Roboto' : theme === 'Fabric' ? 'Segoe UI' : 'Helvetica'\n                }\n            };\n            break;\n    }\n    return style;\n}\n/** @private */\nexport function getScrollbarThemeColor(theme) {\n    var scrollStyle;\n    switch (theme) {\n        case 'HighContrastLight':\n            scrollStyle = {\n                backRect: '#333',\n                thumb: '#bfbfbf',\n                circle: '#fff',\n                circleHover: '#685708',\n                arrow: '#333',\n                grip: '#333',\n                arrowHover: '#fff',\n                backRectBorder: '#969696'\n            };\n            break;\n        case 'Bootstrap':\n            scrollStyle = {\n                backRect: '#f5f5f5',\n                thumb: '#e6e6e6',\n                circle: '#fff',\n                circleHover: '#eee',\n                arrow: '#8c8c8c',\n                grip: '#8c8c8c'\n            };\n            break;\n        case 'Fabric':\n            scrollStyle = {\n                backRect: '#f8f8f8',\n                thumb: '#eaeaea',\n                circle: '#fff',\n                circleHover: '#eaeaea',\n                arrow: '#a6a6a6',\n                grip: '#a6a6a6'\n            };\n            break;\n        case 'MaterialDark':\n            scrollStyle = {\n                backRect: '#424242',\n                thumb: '#616161',\n                circle: '#757575',\n                circleHover: '#616161',\n                arrow: '#BDBDBD',\n                grip: '#BDBDBD'\n            };\n            break;\n        case 'FabricDark':\n            scrollStyle = {\n                backRect: '#282727',\n                thumb: '#333232',\n                circle: '#4A4848',\n                circleHover: '#514F4F',\n                arrow: '#ADB5BD',\n                grip: '#DADADA'\n            };\n            break;\n        case 'BootstrapDark':\n            scrollStyle = {\n                backRect: '#2A2A2A',\n                thumb: '#313131',\n                circle: '#414141',\n                circleHover: '#484848',\n                arrow: '#DADADA',\n                grip: '#FFFFFF'\n            };\n            break;\n        case 'Bootstrap5Dark':\n            scrollStyle = {\n                backRect: '#282D31',\n                thumb: '#3B4248',\n                circle: '#495057',\n                circleHover: '#6C757D',\n                arrow: '#A19F9D',\n                grip: '#ADB5BD'\n            };\n            break;\n        case 'HighContrast':\n            scrollStyle = {\n                backRect: '#757575',\n                thumb: '#BFBFBF',\n                circle: '#FFFFFF',\n                circleHover: '#FFFFFF',\n                arrow: '#ADB5BD',\n                grip: '#969696'\n            };\n            break;\n        case 'TailwindDark':\n            scrollStyle = {\n                backRect: '#6B7280',\n                thumb: '#374151',\n                circle: '#4B5563',\n                circleHover: '#4B5563',\n                arrow: '#ADB5BD',\n                grip: '#D1D5DB'\n            };\n            break;\n        case 'Fluent':\n            scrollStyle = {\n                backRect: '#F3F2F1',\n                thumb: '#E1DFDD',\n                circle: '#FFFFFF',\n                circleHover: '#E1DFDD',\n                arrow: '#605E5C',\n                grip: '#605E5C'\n            };\n            break;\n        case 'FluentDark':\n            scrollStyle = {\n                backRect: '#252423',\n                thumb: '#323130',\n                circle: '#3B3A39',\n                circleHover: '#3B3A39',\n                arrow: '#ADB5BD',\n                grip: '#A19F9D'\n            };\n            break;\n        case 'Material3':\n            scrollStyle = {\n                backRect: 'rgba(103, 80, 164, 0.05)',\n                thumb: ' rgba(103, 80, 164, 0.14)',\n                circle: '#FFFFFF',\n                circleHover: '#E1DFDD',\n                arrow: '#49454E',\n                grip: '#49454E'\n            };\n            break;\n        case 'Material3Dark':\n            scrollStyle = {\n                backRect: 'rgba(208, 188, 255, 0.05)',\n                thumb: 'rgba(208, 188, 255, 0.14)',\n                circle: '#FFFFFF',\n                circleHover: '#E1DFDD',\n                arrow: '#CAC4D0',\n                grip: '#CAC4D0'\n            };\n            break;\n        default:\n            scrollStyle = {\n                backRect: '#f5f5f5',\n                thumb: '#e0e0e0',\n                circle: '#fff',\n                circleHover: '#eee',\n                arrow: '#9e9e9e',\n                grip: '#9e9e9e'\n            };\n            break;\n    }\n    return scrollStyle;\n}\n","//! moment.js locale configuration\n//! locale : Catalan [ca]\n//! author : Juan G. Hurtado : https://github.com/juanghurtado\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ca = moment.defineLocale('ca', {\n        months: {\n            standalone:\n                'gener_febrer_març_abril_maig_juny_juliol_agost_setembre_octubre_novembre_desembre'.split(\n                    '_'\n                ),\n            format: \"de gener_de febrer_de març_d'abril_de maig_de juny_de juliol_d'agost_de setembre_d'octubre_de novembre_de desembre\".split(\n                '_'\n            ),\n            isFormat: /D[oD]?(\\s)+MMMM/,\n        },\n        monthsShort:\n            'gen._febr._març_abr._maig_juny_jul._ag._set._oct._nov._des.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'diumenge_dilluns_dimarts_dimecres_dijous_divendres_dissabte'.split(\n                '_'\n            ),\n        weekdaysShort: 'dg._dl._dt._dc._dj._dv._ds.'.split('_'),\n        weekdaysMin: 'dg_dl_dt_dc_dj_dv_ds'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM [de] YYYY',\n            ll: 'D MMM YYYY',\n            LLL: 'D MMMM [de] YYYY [a les] H:mm',\n            lll: 'D MMM YYYY, H:mm',\n            LLLL: 'dddd D MMMM [de] YYYY [a les] H:mm',\n            llll: 'ddd D MMM YYYY, H:mm',\n        },\n        calendar: {\n            sameDay: function () {\n                return '[avui a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextDay: function () {\n                return '[demà a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            nextWeek: function () {\n                return 'dddd [a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastDay: function () {\n                return '[ahir a ' + (this.hours() !== 1 ? 'les' : 'la') + '] LT';\n            },\n            lastWeek: function () {\n                return (\n                    '[el] dddd [passat a ' +\n                    (this.hours() !== 1 ? 'les' : 'la') +\n                    '] LT'\n                );\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: \"d'aquí %s\",\n            past: 'fa %s',\n            s: 'uns segons',\n            ss: '%d segons',\n            m: 'un minut',\n            mm: '%d minuts',\n            h: 'una hora',\n            hh: '%d hores',\n            d: 'un dia',\n            dd: '%d dies',\n            M: 'un mes',\n            MM: '%d mesos',\n            y: 'un any',\n            yy: '%d anys',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(r|n|t|è|a)/,\n        ordinal: function (number, period) {\n            var output =\n                number === 1\n                    ? 'r'\n                    : number === 2\n                    ? 'n'\n                    : number === 3\n                    ? 'r'\n                    : number === 4\n                    ? 't'\n                    : 'è';\n            if (period === 'w' || period === 'W') {\n                output = 'a';\n            }\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return ca;\n\n})));\n","import { ChildProperty, compile as baseTemplateComplier, setValue, Internationalization, isUndefined } from '@syncfusion/ej2-base';\nimport { extend as baseExtend, isNullOrUndefined, getValue, classList } from '@syncfusion/ej2-base';\nimport { setStyleAttribute, addClass, attributes, remove, createElement, removeClass } from '@syncfusion/ej2-base';\nimport { isObject, select, selectAll } from '@syncfusion/ej2-base';\nimport { DataUtil, Query, DataManager, Predicate, UrlAdaptor, Deferred } from '@syncfusion/ej2-data';\nimport { Column } from '../models/column';\nimport { calculateRelativeBasedPosition } from '@syncfusion/ej2-popups';\nimport { Print } from '../actions/print';\nimport { CheckBoxFilterBase } from '../common/checkbox-filter-base';\nimport * as literals from '../base/string-literals';\n//https://typescript.codeplex.com/discussions/401501\n/**\n * Function to check whether target object implement specific interface\n *\n * @param  {Object} target - specifies the target\n * @param  {string} checkFor - specifies the checkfors\n * @returns {boolean} returns the boolean\n * @hidden\n */\nexport function doesImplementInterface(target, checkFor) {\n    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n    return target.prototype && checkFor in target.prototype;\n}\n/**\n * Function to get value from provided data\n *\n * @param  {string} field - specifies the field\n * @param  {Object} data - specifies the data\n * @param  {ColumnModel} column - specifies the column\n * @returns {Object} returns the object\n * @hidden\n */\n// eslint-disable-next-line\nexport function valueAccessor(field, data, column) {\n    return (isNullOrUndefined(field) || field === '') ? '' : DataUtil.getObject(field, data);\n}\n/**\n * Defines the method used to apply custom header cell values from external function and display this on each header cell rendered.\n *\n * @param  {string} field - specifies the field\n * @param  {ColumnModel} column - specifies the column\n * @returns {object} headerValueAccessor\n * @hidden\n */\nexport function headerValueAccessor(field, column) {\n    return (isNullOrUndefined(field) || field === '') ? '' : DataUtil.getObject(field, column);\n}\n/**\n * The function used to update Dom using requestAnimationFrame.\n *\n * @param {Function} updateFunction - Function that contains the actual action\n * @param {object} callBack - defines the callback\n * @returns {void}\n * @hidden\n */\n// eslint-disable-next-line\nexport function getUpdateUsingRaf(updateFunction, callBack) {\n    requestAnimationFrame(function () {\n        try {\n            callBack(null, updateFunction());\n        }\n        catch (e) {\n            callBack(e);\n        }\n    });\n}\n/**\n * @hidden\n * @param {PdfExportProperties | ExcelExportProperties} exportProperties - Defines the export properties\n * @returns {boolean} Returns isExportColumns\n */\nexport function isExportColumns(exportProperties) {\n    return !isNullOrUndefined(exportProperties) &&\n        !isNullOrUndefined(exportProperties.columns) && exportProperties.columns.length > 0;\n}\n/**\n * @param {PdfExportProperties | ExcelExportProperties} exportProperties - Defines the export properties\n * @param {IGrid} gObj - Defines the grid object\n * @returns {void}\n * @hidden\n */\nexport function updateColumnTypeForExportColumns(exportProperties, gObj) {\n    var exportColumns = exportProperties.columns;\n    var gridColumns = gObj.columns;\n    for (var i = 0; i < exportColumns.length; i++) {\n        if (gridColumns.length - 1 >= i) {\n            if (gridColumns[parseInt(i.toString(), 10)].columns) {\n                for (var j = 0; j < gridColumns[parseInt(i.toString(), 10)].columns.length; j++) {\n                    exportColumns[parseInt(i.toString(), 10)].columns[parseInt(j.toString(), 10)]\n                        .type = gridColumns[parseInt(i.toString(), 10)].columns[parseInt(j.toString(), 10)].type;\n                }\n            }\n            else {\n                exportColumns[parseInt(i.toString(), 10)].type = gridColumns[parseInt(i.toString(), 10)].type;\n            }\n        }\n    }\n}\n/**\n * @hidden\n * @param {IGrid} grid - Defines the grid\n * @returns {void}\n */\nexport function updatecloneRow(grid) {\n    var nRows = [];\n    var actualRows = grid.vRows;\n    for (var i = 0; i < actualRows.length; i++) {\n        if (actualRows[parseInt(i.toString(), 10)].isDataRow) {\n            nRows.push(actualRows[parseInt(i.toString(), 10)]);\n        }\n        else if (!actualRows[parseInt(i.toString(), 10)].isDataRow) {\n            nRows.push(actualRows[parseInt(i.toString(), 10)]);\n            if (!actualRows[parseInt(i.toString(), 10)].isExpand && actualRows[parseInt(i.toString(), 10)].isCaptionRow) {\n                i += getCollapsedRowsCount(actualRows[parseInt(i.toString(), 10)], grid);\n            }\n        }\n    }\n    grid.vcRows = nRows;\n}\nvar count = 0;\n/**\n * @hidden\n * @param {Row<Column>} val - Defines the value\n * @param {IGrid} grid - Defines the grid\n * @returns {number} Returns the collapsed row count\n */\nexport function getCollapsedRowsCount(val, grid) {\n    count = 0;\n    var gSummary = 'gSummary';\n    var total = 'count';\n    var gLen = grid.groupSettings.columns.length;\n    var records = 'records';\n    var items = 'items';\n    var value = val[\"\" + gSummary];\n    var dataRowCnt = 0;\n    var agrCnt = 'aggregatesCount';\n    if (value === val.data[\"\" + total]) {\n        if (grid.groupSettings.columns.length && !isNullOrUndefined(val[\"\" + agrCnt]) && val[\"\" + agrCnt]) {\n            if (grid.groupSettings.columns.length !== 1) {\n                count += (val.indent !== 0 && (value) < 2) ? (val[\"\" + gSummary] * ((gLen - val.indent) + (gLen - val.indent) * val[\"\" + agrCnt])) :\n                    (val[\"\" + gSummary] * ((gLen - val.indent) + (gLen - val.indent - 1) * val[\"\" + agrCnt])) + val[\"\" + agrCnt];\n            }\n            else if (grid.groupSettings.columns.length === 1) {\n                count += (val[\"\" + gSummary] * (gLen - val.indent)) + val[\"\" + agrCnt];\n            }\n        }\n        else if (grid.groupSettings.columns.length) {\n            if (grid.groupSettings.columns.length !== 1) {\n                count += val[\"\" + gSummary] * (grid.groupSettings.columns.length - val.indent);\n            }\n            else {\n                count += val[\"\" + gSummary];\n            }\n        }\n        return count;\n    }\n    else {\n        for (var i = 0, len = val.data[\"\" + items].length; i < len; i++) {\n            var gLevel = val.data[\"\" + items][parseInt(i.toString(), 10)];\n            count += gLevel[\"\" + items].length + ((gLen !== grid.columns.length) &&\n                !isNullOrUndefined(gLevel[\"\" + items][\"\" + records]) ? gLevel[\"\" + items][\"\" + records].length : 0);\n            dataRowCnt += (!isNullOrUndefined(gLevel[\"\" + items][\"\" + records]) && !isNullOrUndefined(val[\"\" + agrCnt])) ? gLevel[\"\" + items][\"\" + records].length :\n                gLevel[\"\" + items].length;\n            if (gLevel[\"\" + items].GroupGuid && gLevel[\"\" + items].childLevels !== 0) {\n                recursive(gLevel);\n            }\n        }\n        count += val.data[\"\" + items].length;\n        if (!isNullOrUndefined(val[\"\" + agrCnt])) {\n            if (val[\"\" + agrCnt] && count && dataRowCnt !== 0) {\n                count += ((count - dataRowCnt) * val[\"\" + agrCnt]) + val[\"\" + agrCnt];\n            }\n        }\n    }\n    return count;\n}\n/**\n * @param {Object[]} row - Defines the row\n * @returns {void}\n * @hidden\n */\nexport function recursive(row) {\n    var items = 'items';\n    var rCount = 'count';\n    for (var j = 0, length_1 = row[\"\" + items].length; j < length_1; j++) {\n        var nLevel = row[\"\" + items][parseInt(j.toString(), 10)];\n        count += nLevel[\"\" + rCount];\n        if (nLevel[\"\" + items].childLevels !== 0) {\n            recursive(nLevel);\n        }\n    }\n}\n/**\n * @param {Object[]} collection - Defines the array\n * @param {Object} predicate - Defines the predicate\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function iterateArrayOrObject(collection, predicate) {\n    var result = [];\n    for (var i = 0, len = collection.length; i < len; i++) {\n        var pred = predicate(collection[parseInt(i.toString(), 10)], i);\n        if (!isNullOrUndefined(pred)) {\n            result.push(pred);\n        }\n    }\n    return result;\n}\n/**\n * @param {Object[]} array - Defines the array\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function iterateExtend(array) {\n    var obj = [];\n    for (var i = 0; i < array.length; i++) {\n        obj.push(baseExtend({}, getActualProperties(array[parseInt(i.toString(), 10)]), {}, true));\n    }\n    return obj;\n}\n/**\n * @param {string | Function} template - Defines the template\n * @returns {Function} Returns the function\n * @hidden\n */\nexport function templateCompiler(template) {\n    if (template) {\n        try {\n            var validSelector = template[0] !== '<';\n            if (typeof template === 'function') {\n                return baseTemplateComplier(template);\n            }\n            else if (validSelector && document.querySelectorAll(template).length) {\n                return baseTemplateComplier(document.querySelector(template).innerHTML.trim());\n            }\n            else {\n                return baseTemplateComplier(template);\n            }\n        }\n        catch (e) {\n            return baseTemplateComplier(template);\n        }\n    }\n    return undefined;\n}\n/**\n * @param {Element} node - Defines the column\n * @param {Object} customAttributes - Defines the index\n * @returns {void}\n * @hidden\n */\nexport function setStyleAndAttributes(node, customAttributes) {\n    var copyAttr = {};\n    var literals = ['style', 'class'];\n    //Dont touch the original object - make a copy\n    baseExtend(copyAttr, customAttributes, {});\n    if ('style' in copyAttr) {\n        setStyleAttribute(node, copyAttr[literals[0]]);\n        delete copyAttr[literals[0]];\n    }\n    if ('class' in copyAttr) {\n        addClass([node], copyAttr[literals[1]]);\n        delete copyAttr[literals[1]];\n    }\n    attributes(node, copyAttr);\n}\n/**\n * @param {Object} copied - Defines the column\n * @param {Object} first - Defines the inndex\n * @param {Object} second - Defines the second object\n * @param {string[]} exclude - Defines the exclude\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function extend(copied, first, second, exclude) {\n    var moved = baseExtend(copied, first, second);\n    var values = Object.keys(moved);\n    for (var i = 0; i < values.length; i++) {\n        if (exclude && exclude.indexOf(values[parseInt(i.toString(), 10)]) !== -1) {\n            delete moved[values[parseInt(i.toString(), 10)]];\n        }\n    }\n    return moved;\n}\n/**\n * @param {Column[]} columnModel - Defines the column\n * @param {number} ind - Defines the inndex\n * @returns {number} - Returns the columnindex\n * @hidden\n */\nexport function setColumnIndex(columnModel, ind) {\n    if (ind === void 0) { ind = 0; }\n    for (var i = 0, len = columnModel.length; i < len; i++) {\n        if (columnModel[parseInt(i.toString(), 10)].columns) {\n            columnModel[parseInt(i.toString(), 10)].index = isNullOrUndefined(columnModel[parseInt(i.toString(), 10)].index) ? ind\n                : columnModel[parseInt(i.toString(), 10)].index;\n            ind++;\n            ind = setColumnIndex(columnModel[parseInt(i.toString(), 10)].columns, ind);\n        }\n        else {\n            columnModel[parseInt(i.toString(), 10)].index = isNullOrUndefined(columnModel[parseInt(i.toString(), 10)].index) ? ind\n                : columnModel[parseInt(i.toString(), 10)].index;\n            ind++;\n        }\n    }\n    return ind;\n}\n/**\n * @param {Column[] | string[] | ColumnModel[]} columns - Defines the column\n * @param {boolean} autoWidth - Defines the autowidth\n * @param {IGrid} gObj - Defines the class name\n * @returns {Column} - Returns the columns\n * @hidden\n */\nexport function prepareColumns(columns, autoWidth, gObj) {\n    for (var c = 0, len = columns.length; c < len; c++) {\n        var column = void 0;\n        if (typeof columns[parseInt(c.toString(), 10)] === 'string') {\n            column = new Column({ field: columns[parseInt(c.toString(), 10)] }, gObj);\n        }\n        else if (!(columns[parseInt(c.toString(), 10)] instanceof Column) || columns[parseInt(c.toString(), 10)].columns) {\n            if (!columns[parseInt(c.toString(), 10)].columns) {\n                column = new Column(columns[parseInt(c.toString(), 10)], gObj);\n            }\n            else {\n                columns[parseInt(c.toString(), 10)].columns = prepareColumns(columns[parseInt(c.toString(), 10)].columns, null, gObj);\n                column = new Column(columns[parseInt(c.toString(), 10)], gObj);\n            }\n        }\n        else {\n            column = columns[parseInt(c.toString(), 10)];\n        }\n        if (column.type && column.type.toLowerCase() === 'checkbox') {\n            column.allowReordering = false;\n        }\n        column.headerText = isNullOrUndefined(column.headerText) ? column.foreignKeyValue || column.field || '' : column.headerText;\n        column.foreignKeyField = column.foreignKeyField || column.field;\n        column.valueAccessor = (typeof column.valueAccessor === 'string' ? getValue(column.valueAccessor, window)\n            : column.valueAccessor) || valueAccessor;\n        column.width = autoWidth && isNullOrUndefined(column.width) ? 200 : column.width;\n        if (isNullOrUndefined(column.visible)) {\n            column.visible = true;\n        }\n        columns[parseInt(c.toString(), 10)] = column;\n    }\n    return columns;\n}\n/**\n * @param {HTMLElement} popUp - Defines the popup element\n * @param {MouseEvent | TouchEvent} e - Defines the moouse event\n * @param {string} className - Defines the class name\n * @returns {void}\n * @hidden\n */\nexport function setCssInGridPopUp(popUp, e, className) {\n    var popUpSpan = popUp.querySelector('span');\n    var position = popUp.parentElement.getBoundingClientRect();\n    var targetPosition = e.target.getBoundingClientRect();\n    popUpSpan.className = className;\n    popUp.style.display = '';\n    var isBottomTail = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n        e.clientY) > popUp.offsetHeight + 10;\n    popUp.style.top = targetPosition.top - position.top +\n        (isBottomTail ? -(popUp.offsetHeight + 10) : popUp.offsetHeight + 10) + 'px'; //10px for tail element\n    popUp.style.left = getPopupLeftPosition(popUp, e, targetPosition, position.left) + 'px';\n    if (isBottomTail) {\n        popUp.querySelector('.e-downtail').style.display = '';\n        popUp.querySelector('.e-uptail').style.display = 'none';\n    }\n    else {\n        popUp.querySelector('.e-downtail').style.display = 'none';\n        popUp.querySelector('.e-uptail').style.display = '';\n    }\n}\n/**\n * @param {HTMLElement} popup - Defines the popup element\n * @param {MouseEvent | TouchEvent} e  - Defines the mouse event\n * @param {Object} targetPosition - Defines the target position\n * @param {number} targetPosition.top - Defines the top position\n * @param {number} targetPosition.left  - Defines the left position\n * @param {number} targetPosition.right  - Defines the right position\n * @param {number} left - Defines the left position\n * @returns {number} Returns the popup left position\n * @hidden\n */\nfunction getPopupLeftPosition(popup, e, targetPosition, left) {\n    var width = popup.offsetWidth / 2;\n    var x = getPosition(e).x;\n    if (x - targetPosition.left < width) {\n        return targetPosition.left - left;\n    }\n    else if (targetPosition.right - x < width) {\n        return targetPosition.right - left - width * 2;\n    }\n    else {\n        return x - left - width;\n    }\n}\n/**\n * @param {Object} obj - Defines the object\n * @returns {Object} Returns the Properties\n * @hidden\n */\nexport function getActualProperties(obj) {\n    if (obj instanceof ChildProperty) {\n        return getValue('properties', obj);\n    }\n    else {\n        return obj;\n    }\n}\n/**\n * @param {Element} elem - Defines the element\n * @param {string} selector - Defines the string selector\n * @param {boolean} isID - Defines the isID\n * @returns {Element} Returns the element\n * @hidden\n */\nexport function parentsUntil(elem, selector, isID) {\n    var parent = elem;\n    while (parent) {\n        if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n            break;\n        }\n        parent = parent.parentElement;\n    }\n    return parent;\n}\n/**\n * @param {Element} element - Defines the element\n * @param {Element} elements - Defines the element\n * @returns {number} Returns the element index\n * @hidden\n */\nexport function getElementIndex(element, elements) {\n    var index = -1;\n    for (var i = 0, len = elements.length; i < len; i++) {\n        if (elements[parseInt(i.toString(), 10)].isEqualNode(element)) {\n            index = i;\n            break;\n        }\n    }\n    return index;\n}\n/**\n * @param {Object} value - Defines the value\n * @param {Object} collection - defines the collection\n * @returns {number} Returns the array\n * @hidden\n */\nexport function inArray(value, collection) {\n    for (var i = 0, len = collection.length; i < len; i++) {\n        if (collection[parseInt(i.toString(), 10)] === value) {\n            return i;\n        }\n    }\n    return -1;\n}\n/**\n * @param {Object} collection - Defines the collection\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function getActualPropFromColl(collection) {\n    var coll = [];\n    for (var i = 0, len = collection.length; i < len; i++) {\n        // eslint-disable-next-line no-prototype-builtins\n        if (collection[parseInt(i.toString(), 10)].hasOwnProperty('properties')) {\n            coll.push(collection[parseInt(i.toString(), 10)].properties);\n        }\n        else {\n            coll.push(collection[parseInt(i.toString(), 10)]);\n        }\n    }\n    return coll;\n}\n/**\n * @param {Element} target - Defines the target element\n * @param {string} selector - Defines the selector\n * @returns {void}\n * @hidden\n */\nexport function removeElement(target, selector) {\n    var elements = [].slice.call(target.querySelectorAll(selector));\n    for (var i = 0; i < elements.length; i++) {\n        remove(elements[parseInt(i.toString(), 10)]);\n    }\n}\n/**\n * @param {MouseEvent | TouchEvent} e Defines the mouse event\n * @returns {IPosition} Returns the position\n * @hidden\n */\nexport function getPosition(e) {\n    var position = {};\n    position.x = (isNullOrUndefined(e.clientX) ? e.changedTouches[0].clientX :\n        e.clientX);\n    position.y = (isNullOrUndefined(e.clientY) ? e.changedTouches[0].clientY :\n        e.clientY);\n    return position;\n}\nvar uid = 0;\n/**\n * @param {string} prefix - Defines the prefix string\n * @returns {string} Returns the uid\n * @hidden\n */\nexport function getUid(prefix) {\n    return prefix + uid++;\n}\n/**\n * @param {Element | DocumentFragment} elem - Defines the element\n * @param {Element[] | NodeList} children - Defines the Element\n * @returns {Element} Returns the element\n * @hidden\n */\nexport function appendChildren(elem, children) {\n    for (var i = 0, len = children.length; i < len; i++) {\n        if (len === children.length) {\n            elem.appendChild(children[parseInt(i.toString(), 10)]);\n        }\n        else {\n            elem.appendChild(children[0]);\n        }\n    }\n    return elem;\n}\n/**\n * @param {Element} elem - Defines the element\n * @param {string} selector - Defines the selector\n * @param {boolean} isID - Defines isID\n * @returns {Element} Return the element\n * @hidden\n */\nexport function parents(elem, selector, isID) {\n    var parent = elem;\n    var parents = [];\n    while (parent) {\n        if (isID ? parent.id === selector : parent.classList.contains(selector)) {\n            parents.push(parent);\n        }\n        parent = parent.parentElement;\n    }\n    return parents;\n}\n/**\n * @param {AggregateType | string} type - Defines the type\n * @param {Object} data - Defines the data\n * @param {AggregateColumnModel} column - Defines the column\n * @param {Object} context - Defines the context\n * @returns {Object} Returns the calculated aggragate\n * @hidden\n */\nexport function calculateAggregate(type, data, column, context) {\n    if (type === 'Custom') {\n        var temp = column.customAggregate;\n        if (typeof temp === 'string') {\n            temp = getValue(temp, window);\n        }\n        return temp ? temp.call(context, data, column) : '';\n    }\n    return (column.field in data || data instanceof Array) ? DataUtil.aggregates[type.toLowerCase()](data, column.field) : null;\n}\n/** @hidden */\nvar scrollWidth = null;\n/** @hidden\n * @returns {number} - Returns the scrollbarwidth\n */\nexport function getScrollBarWidth() {\n    if (scrollWidth !== null) {\n        return scrollWidth;\n    }\n    var divNode = document.createElement('div');\n    var value = 0;\n    divNode.style.cssText = 'width:100px;height: 100px;overflow: scroll;position: absolute;top: -9999px;';\n    document.body.appendChild(divNode);\n    value = (divNode.offsetWidth - divNode.clientWidth) | 0;\n    document.body.removeChild(divNode);\n    return scrollWidth = value;\n}\n/** @hidden */\nvar rowHeight;\n/**\n * @param {HTMLElement} element - Defines the element\n * @returns {number} Returns the roww height\n * @hidden\n */\nexport function getRowHeight(element) {\n    if (rowHeight !== undefined) {\n        return rowHeight;\n    }\n    var table = createElement('table', { className: literals.table, styles: 'visibility: hidden', attrs: { role: 'grid' } });\n    table.innerHTML = '<tr><td class=\"e-rowcell\">A<td></tr>';\n    element.appendChild(table);\n    var rect = table.querySelector('td').getBoundingClientRect();\n    element.removeChild(table);\n    rowHeight = Math.ceil(rect.height);\n    return rowHeight;\n}\n/** @hidden */\nvar actualRowHeight;\n/**\n * @param {HTMLElement} element - Defines the HTMl element\n * @returns {number} Returns the row height\n * @hidden\n */\nexport function getActualRowHeight(element) {\n    if (actualRowHeight !== undefined) {\n        return rowHeight;\n    }\n    var table = createElement('table', { className: literals.table, styles: 'visibility: hidden', attrs: { role: 'grid' } });\n    table.innerHTML = '<tr><td class=\"e-rowcell\">A<td></tr>';\n    element.appendChild(table);\n    var rect = table.querySelector('tr').getBoundingClientRect();\n    element.removeChild(table);\n    return rect.height;\n}\n/**\n * @param {string} field - Defines the field\n * @returns {boolean} - Returns is complex field\n * @hidden\n */\nexport function isComplexField(field) {\n    return field.split('.').length > 1;\n}\n/**\n * @param {string} field - Defines the field\n * @returns {string} - Returns the get complex field ID\n * @hidden\n */\nexport function getComplexFieldID(field) {\n    if (field === void 0) { field = ''; }\n    return field.replace(/\\./g, '___');\n}\n/**\n * @param {string} field - Defines the field\n * @returns {string} - Returns the parsed column field id\n * @hidden\n */\nexport function getParsedFieldID(field) {\n    if (field === void 0) { field = ''; }\n    return field.replace(/[^a-zA-Z0-9_.]/g, '\\\\$&');\n}\n/**\n * @param {string} field - Defines the field\n * @returns {string} - Returns the set complex field ID\n * @hidden\n */\nexport function setComplexFieldID(field) {\n    if (field === void 0) { field = ''; }\n    return field.replace(/___/g, '.');\n}\n/**\n * @param {Column} col - Defines the column\n * @param {string} type - Defines the type\n * @param {Element} elem - Defines th element\n * @returns {boolean} Returns is Editable\n * @hidden\n */\nexport function isEditable(col, type, elem) {\n    var row = parentsUntil(elem, literals.row);\n    var isOldRow = !row ? true : row && !row.classList.contains('e-insertedrow');\n    if (type === 'beginEdit' && isOldRow) {\n        if (col.isIdentity || col.isPrimaryKey || !col.allowEditing) {\n            return false;\n        }\n        return true;\n    }\n    else if (type === 'add' && col.isIdentity) {\n        return false;\n    }\n    else {\n        if (isOldRow && !col.allowEditing && !col.isIdentity && !col.isPrimaryKey) {\n            return false;\n        }\n        return true;\n    }\n}\n/**\n * @param {IGrid} inst - Defines the IGrid\n * @returns {boolean} Returns is action prevent in boolean\n * @hidden\n */\nexport function isActionPrevent(inst) {\n    var dlg = select('#' + inst.element.id + 'EditConfirm', inst.element);\n    return inst.editSettings.mode === 'Batch' &&\n        (selectAll('.e-updatedtd', inst.element).length || selectAll('.e-gridform.e-formvalidator', inst.element).length)\n        && inst.editSettings.showConfirmDialog && (dlg ? dlg.classList.contains('e-popup-close') : true);\n}\n/**\n * @param {any} elem - Defines the element\n * @param {boolean} action - Defines the boolean for action\n * @returns {void}\n * @hidden\n */\n// eslint-disable-next-line\nexport function wrap(elem, action) {\n    var clName = 'e-wrap';\n    elem = elem instanceof Array ? elem : [elem];\n    for (var i = 0; i < elem.length; i++) {\n        if (action) {\n            elem[parseInt(i.toString(), 10)].classList.add(clName);\n        }\n        else {\n            elem[parseInt(i.toString(), 10)].classList.remove(clName);\n        }\n    }\n}\n/**\n * @param {ServiceLocator} serviceLocator - Defines the service locator\n * @param {Column} column  - Defines the column\n * @returns {void}\n * @hidden\n */\nexport function setFormatter(serviceLocator, column) {\n    var fmtr = serviceLocator.getService('valueFormatter');\n    var format = 'format';\n    var args;\n    if (column.type === 'date' || column.type === 'datetime' || column.type === 'dateonly') {\n        args = { type: column.type === 'dateonly' ? 'date' : column.type, skeleton: column.format };\n        if ((typeof (column.format) === 'string') && column.format !== 'yMd') {\n            args[\"\" + format] = column.format;\n        }\n    }\n    switch (column.type) {\n        case 'date':\n            column.setFormatter(fmtr.getFormatFunction(args));\n            column.setParser(fmtr.getParserFunction(args));\n            break;\n        case 'dateonly':\n            column.setFormatter(fmtr.getFormatFunction(args));\n            column.setParser(fmtr.getParserFunction(args));\n            break;\n        case 'datetime':\n            column.setFormatter(fmtr.getFormatFunction(args));\n            column.setParser(fmtr.getParserFunction(args));\n            break;\n        case 'number':\n            column.setFormatter(fmtr.getFormatFunction({ format: column.format }));\n            column.setParser(fmtr.getParserFunction({ format: column.format }));\n            break;\n    }\n}\n/**\n * @param {Element} cells - Defines the cell element\n * @param {boolean} add - Defines the add\n * @param {string} args - Defines the args\n * @returns {void}\n * @hidden\n */\nexport function addRemoveActiveClasses(cells, add) {\n    var args = [];\n    for (var _i = 2; _i < arguments.length; _i++) {\n        args[_i - 2] = arguments[_i];\n    }\n    for (var i = 0, len = cells.length; i < len; i++) {\n        if (add) {\n            classList(cells[parseInt(i.toString(), 10)], args.slice(), []);\n            cells[parseInt(i.toString(), 10)].setAttribute('aria-selected', 'true');\n        }\n        else {\n            classList(cells[parseInt(i.toString(), 10)], [], args.slice());\n            cells[parseInt(i.toString(), 10)].removeAttribute('aria-selected');\n        }\n    }\n}\n/**\n * @param {string} result - Defines th string\n * @returns {string} Returns the distinct staing values\n * @hidden\n */\nexport function distinctStringValues(result) {\n    var temp = {};\n    var res = [];\n    for (var i = 0; i < result.length; i++) {\n        if (!(result[parseInt(i.toString(), 10)] in temp)) {\n            res.push(result[parseInt(i.toString(), 10)].toString());\n            temp[result[parseInt(i.toString(), 10)]] = 1;\n        }\n    }\n    return res;\n}\n/**\n * @param {Element} target - Defines the target\n * @param {Dialog} dialogObj - Defines the dialog\n * @returns {void}\n * @hidden\n */\nexport function getFilterMenuPostion(target, dialogObj) {\n    var elementVisible = dialogObj.element.style.display;\n    dialogObj.element.style.display = 'block';\n    var dlgWidth = dialogObj.width;\n    var newpos = calculateRelativeBasedPosition(target, dialogObj.element);\n    dialogObj.element.style.display = elementVisible;\n    dialogObj.element.style.top = (newpos.top + target.getBoundingClientRect().height) - 5 + 'px';\n    var leftPos = ((newpos.left - dlgWidth) + target.clientWidth);\n    if (leftPos < 1) {\n        dialogObj.element.style.left = (dlgWidth + leftPos) - 16 + 'px'; // right calculation\n    }\n    else {\n        dialogObj.element.style.left = leftPos + -4 + 'px';\n    }\n}\n/**\n * @param {Object} args - Defines the args\n * @param {Popup} args.popup - Defines the args for popup\n * @param {Dialog} dialogObj - Defines the dialog obj\n * @returns {void}\n * @hidden\n */\nexport function getZIndexCalcualtion(args, dialogObj) {\n    args.popup.element.style.zIndex = (dialogObj.zIndex + 1).toString();\n}\n/**\n * @param {Element} elem - Defines the element\n * @returns {void}\n * @hidden\n */\nexport function toogleCheckbox(elem) {\n    var span = elem.querySelector('.e-frame');\n    var input = span.previousSibling;\n    if (span.classList.contains('e-check')) {\n        input.checked = false;\n        classList(span, ['e-uncheck'], ['e-check']);\n    }\n    else {\n        input.checked = true;\n        classList(span, ['e-check'], ['e-uncheck']);\n    }\n}\n/**\n * @param {HTMLInputElement} elem - Defines the element\n * @param {boolean} checked - Defines is checked\n * @returns {void}\n * @hidden\n */\nexport function setChecked(elem, checked) {\n    elem.checked = checked;\n}\n/**\n * @param {string} uid - Defines the string\n * @param {Element} elem - Defines the Element\n * @param {string} className - Defines the classname\n * @returns {Element} Returns the box wrap\n * @hidden\n */\nexport function createCboxWithWrap(uid, elem, className) {\n    var div = createElement('div', { className: className });\n    div.appendChild(elem);\n    div.setAttribute('uid', uid);\n    return div;\n}\n/**\n * @param {Element} elem - Defines the element\n * @param {boolean} checked - Defines is checked\n * @returns {void}\n * @hidden\n */\nexport function removeAddCboxClasses(elem, checked) {\n    removeClass([elem], ['e-check', 'e-stop', 'e-uncheck']);\n    if (checked) {\n        elem.classList.add('e-check');\n    }\n    else {\n        elem.classList.add('e-uncheck');\n    }\n}\n/**\n * Refresh the Row model's foreign data.\n *\n * @param {IRow<Column>} row - Grid Row model object.\n * @param {Column[]} columns - Foreign columns array.\n * @param {Object} data - Updated Row data.\n * @returns {void}\n * @hidden\n */\nexport function refreshForeignData(row, columns, data) {\n    for (var i = 0; i < columns.length; i++) {\n        setValue(columns[parseInt(i.toString(), 10)].field, getForeignData(columns[parseInt(i.toString(), 10)], data), row.foreignKeyData);\n    }\n    var cells = row.cells;\n    for (var i = 0; i < cells.length; i++) {\n        if (cells[parseInt(i.toString(), 10)].isForeignKey) {\n            setValue('foreignKeyData', getValue(cells[parseInt(i.toString(), 10)].column.field, row.foreignKeyData), cells[parseInt(i.toString(), 10)]);\n        }\n    }\n}\n/**\n * Get the foreign data for the corresponding cell value.\n *\n * @param {Column} column - Foreign Key column\n * @param {Object} data - Row data.\n * @param {string | number} lValue - cell value.\n * @param {Object} foreignKeyData - foreign data source.\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function getForeignData(column, data, lValue, foreignKeyData) {\n    var fField = column.foreignKeyField;\n    var key = (!isNullOrUndefined(lValue) ? lValue : valueAccessor(column.field, data, column));\n    key = isNullOrUndefined(key) ? '' : key;\n    var query = new Query();\n    var fdata = foreignKeyData || ((column.dataSource instanceof DataManager) && column.dataSource.dataSource.json.length ?\n        column.dataSource.dataSource.json : column.columnData);\n    if (key.getDay) {\n        query.where(getDatePredicate({ field: fField, operator: 'equal', value: key, matchCase: false }));\n    }\n    else {\n        query.where(fField, '==', key, false);\n    }\n    return new DataManager(fdata).executeLocal(query);\n}\n/**\n * To use to get the column's object by the foreign key value.\n *\n * @param {string} foreignKeyValue - Defines ForeignKeyValue.\n * @param {Column[]} columns - Array of column object.\n * @returns {Column} Returns the element\n * @hidden\n */\nexport function getColumnByForeignKeyValue(foreignKeyValue, columns) {\n    var column;\n    return columns.some(function (col) {\n        column = col;\n        return col.foreignKeyValue === foreignKeyValue;\n    }) && column;\n}\n/**\n * @param {number} value - Defines the date or month value\n * @returns {string} Returns string\n * @hidden\n */\nexport function padZero(value) {\n    if (value < 10) {\n        return '0' + value;\n    }\n    return String(value);\n}\n/**\n * @param {PredicateModel} filterObject - Defines the filterObject\n * @param {string} type - Defines the type\n * @param {boolean} isExecuteLocal - Defines whether the data actions performed in client and used for dateonly type field\n * @returns {Predicate} Returns the Predicate\n * @hidden\n */\nexport function getDatePredicate(filterObject, type, isExecuteLocal) {\n    var datePredicate;\n    var prevDate;\n    var nextDate;\n    var prevObj = baseExtend({}, getActualProperties(filterObject));\n    var nextObj = baseExtend({}, getActualProperties(filterObject));\n    if (isNullOrUndefined(filterObject.value) || filterObject.value === '') {\n        datePredicate = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n        return datePredicate;\n    }\n    var value = new Date(filterObject.value);\n    if (type === 'dateonly' && !isExecuteLocal) {\n        if (typeof (prevObj.value) === 'string') {\n            prevObj.value = new Date(prevObj.value);\n        }\n        var dateOnlyString = prevObj.value.getFullYear() + '-' + padZero(prevObj.value.getMonth() + 1) + '-' + padZero(prevObj.value.getDate());\n        var predicates = new Predicate(prevObj.field, prevObj.operator, dateOnlyString, false);\n        datePredicate = predicates;\n    }\n    else {\n        if (filterObject.operator === 'equal' || filterObject.operator === 'notequal') {\n            if (type === 'datetime') {\n                prevDate = new Date(value.setSeconds(value.getSeconds() - 1));\n                nextDate = new Date(value.setSeconds(value.getSeconds() + 2));\n                filterObject.value = new Date(value.setSeconds(nextDate.getSeconds() - 1));\n            }\n            else {\n                prevDate = new Date(value.setHours(0) - 1);\n                nextDate = new Date(value.setHours(24));\n            }\n            prevObj.value = prevDate;\n            nextObj.value = nextDate;\n            if (filterObject.operator === 'equal') {\n                prevObj.operator = 'greaterthan';\n                nextObj.operator = 'lessthan';\n            }\n            else if (filterObject.operator === 'notequal') {\n                prevObj.operator = 'lessthanorequal';\n                nextObj.operator = 'greaterthanorequal';\n            }\n            var predicateSt = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n            var predicateEnd = new Predicate(nextObj.field, nextObj.operator, nextObj.value, false);\n            datePredicate = filterObject.operator === 'equal' ? predicateSt.and(predicateEnd) : predicateSt.or(predicateEnd);\n        }\n        else {\n            if (type === 'date' && (filterObject.operator === 'lessthanorequal' || filterObject.operator === 'greaterthan')) {\n                prevObj.value = new Date(value.setHours(24) - 1);\n            }\n            if (typeof (prevObj.value) === 'string') {\n                prevObj.value = new Date(prevObj.value);\n            }\n            var predicates = new Predicate(prevObj.field, prevObj.operator, prevObj.value, false);\n            datePredicate = predicates;\n        }\n    }\n    if (filterObject.setProperties) {\n        filterObject.setProperties({ ejpredicate: datePredicate }, true);\n    }\n    else {\n        filterObject.ejpredicate = datePredicate;\n    }\n    return datePredicate;\n}\n/**\n * @param {IGrid} grid - Defines the IGrid\n * @returns {boolean} Returns true if group adaptive is true\n * @hidden\n */\nexport function isGroupAdaptive(grid) {\n    return grid.enableVirtualization && grid.groupSettings.columns.length > 0 && grid.isVirtualAdaptive &&\n        !grid.groupSettings.enableLazyLoading;\n}\n/**\n * @param {string} field - Defines the Field\n * @param {Object} object - Defines the objec\n * @returns {any} Returns the object\n * @hidden\n */\n// eslint-disable-next-line @typescript-eslint/no-explicit-any\nexport function getObject(field, object) {\n    if (field === void 0) { field = ''; }\n    if (field) {\n        var value = object;\n        var splits = field.split('.');\n        for (var i = 0; i < splits.length && !isNullOrUndefined(value); i++) {\n            value = value[splits[parseInt(i.toString(), 10)]];\n            if (isUndefined(value)) {\n                var newCase = splits[parseInt(i.toString(), 10)].charAt(0).toUpperCase()\n                    + splits[parseInt(i.toString(), 10)].slice(1);\n                value = object[\"\" + newCase] || object[(\"\" + newCase).charAt(0).toLowerCase() + (\"\" + newCase).slice(1)];\n            }\n        }\n        return value;\n    }\n}\n/**\n * @param {string | Object} format - defines the format\n * @param {string} colType - Defines the coltype\n * @returns {string} Returns the custom Data format\n * @hidden\n */\nexport function getCustomDateFormat(format, colType) {\n    var intl = new Internationalization();\n    var formatvalue;\n    var formatter = 'format';\n    var type = 'type';\n    if (colType === 'date') {\n        formatvalue = typeof (format) === 'object' ?\n            intl.getDatePattern({ type: format[\"\" + type] ? format[\"\" + type] : 'date', format: format[\"\" + formatter] }, false) :\n            intl.getDatePattern({ type: 'dateTime', skeleton: format }, false);\n    }\n    else {\n        formatvalue = typeof (format) === 'object' ?\n            intl.getDatePattern({ type: format[\"\" + type] ? format[\"\" + type] : 'dateTime', format: format[\"\" + formatter] }, false) :\n            intl.getDatePattern({ type: 'dateTime', skeleton: format }, false);\n    }\n    return formatvalue;\n}\n/**\n * @param {IGrid} gObj - Defines the IGrid\n * @param {HierarchyGridPrintMode} hierarchyPrintMode - Defines the hierarchyPrintMode\n * @returns {Object} Returns the object\n * @hidden\n */\nexport function getExpandedState(gObj, hierarchyPrintMode) {\n    var rows = gObj.getRowsObject();\n    var obj = {};\n    for (var _i = 0, rows_1 = rows; _i < rows_1.length; _i++) {\n        var row = rows_1[_i];\n        if (row.isExpand && !row.isDetailRow) {\n            var index = gObj.allowPaging && gObj.printMode === 'AllPages' ? row.index +\n                (gObj.pageSettings.currentPage * gObj.pageSettings.pageSize) - gObj.pageSettings.pageSize : row.index;\n            if (!isNullOrUndefined(index)) {\n                obj[parseInt(index.toString(), 10)] = {};\n                obj[parseInt(index.toString(), 10)].isExpand = true;\n                if (gObj.childGrid) {\n                    obj[parseInt(index.toString(), 10)].gridModel = getPrintGridModel(row.childGrid, hierarchyPrintMode);\n                    obj[parseInt(index.toString(), 10)].gridModel.query = gObj.childGrid.query;\n                }\n            }\n        }\n    }\n    return obj;\n}\n/**\n * @param {IGrid} gObj - Defines the grid objct\n * @param {HierarchyGridPrintMode} hierarchyPrintMode - Defines the hierarchyPrintMode\n * @returns {IGrid} Returns the IGrid\n * @hidden\n */\nexport function getPrintGridModel(gObj, hierarchyPrintMode) {\n    if (hierarchyPrintMode === void 0) { hierarchyPrintMode = 'Expanded'; }\n    var printGridModel = {};\n    if (!gObj) {\n        return printGridModel;\n    }\n    for (var _i = 0, _a = Print.printGridProp; _i < _a.length; _i++) {\n        var key = _a[_i];\n        if (key === 'columns') {\n            printGridModel[\"\" + key] = getActualPropFromColl(gObj.getColumns());\n        }\n        else if (key === 'allowPaging') {\n            printGridModel[\"\" + key] = gObj.printMode === 'CurrentPage';\n        }\n        else {\n            printGridModel[\"\" + key] = getActualProperties(gObj[\"\" + key]);\n        }\n    }\n    printGridModel['enableHover'] = false;\n    if ((gObj.childGrid || gObj.detailTemplate) && hierarchyPrintMode !== 'None') {\n        printGridModel.expandedRows = getExpandedState(gObj, hierarchyPrintMode);\n    }\n    return printGridModel;\n}\n/**\n * @param {Object} copied - Defines the copied object\n * @param {Object} first - Defines the first object\n * @param {Object} second - Defines the second object\n * @param {boolean} deep - Defines the deep\n * @returns {Object} Returns the extended object\n * @hidden\n */\nexport function extendObjWithFn(copied, first, second, deep) {\n    var res = copied || {};\n    var len = arguments.length;\n    if (deep) {\n        len = len - 1;\n    }\n    for (var i = 1; i < len; i++) {\n        // eslint-disable-next-line prefer-rest-params\n        if (!arguments[parseInt(i.toString(), 10)]) {\n            continue;\n        }\n        // eslint-disable-next-line prefer-rest-params\n        var obj1 = arguments[parseInt(i.toString(), 10)];\n        var keys = Object.keys(Object.getPrototypeOf(obj1)).length ?\n            Object.keys(obj1).concat(getPrototypesOfObj(obj1)) : Object.keys(obj1);\n        for (var i_1 = 0; i_1 < keys.length; i_1++) {\n            var source = res[keys[parseInt(i_1.toString(), 10)]];\n            var cpy = obj1[keys[parseInt(i_1.toString(), 10)]];\n            var cln = void 0;\n            if (deep && (isObject(cpy) || Array.isArray(cpy))) {\n                if (isObject(cpy)) {\n                    cln = source ? source : {};\n                    res[keys[parseInt(i_1.toString(), 10)]] = baseExtend({}, cln, cpy, deep);\n                }\n                else {\n                    cln = source ? source : [];\n                    res[keys[parseInt(i_1.toString(), 10)]] = baseExtend([], cln, cpy, deep);\n                }\n            }\n            else {\n                res[keys[parseInt(i_1.toString(), 10)]] = cpy;\n            }\n        }\n    }\n    return res;\n}\n/**\n * @param {Object} obj - Defines the obj\n * @returns {string[]} Returns the string\n * @hidden\n */\nfunction getPrototypesOfObj(obj) {\n    var keys = [];\n    while (Object.getPrototypeOf(obj) && Object.keys(Object.getPrototypeOf(obj)).length) {\n        keys = keys.concat(Object.keys(Object.getPrototypeOf(obj)));\n        obj = Object.getPrototypeOf(obj);\n    }\n    return keys;\n}\n/**\n * @param {Column[]} column - Defines the Column\n * @returns {number} Returns the column Depth\n * @hidden\n */\nexport function measureColumnDepth(column) {\n    var max = 0;\n    for (var i = 0; i < column.length; i++) {\n        var depth = checkDepth(column[parseInt(i.toString(), 10)], 0);\n        if (max < depth) {\n            max = depth;\n        }\n    }\n    return max + 1;\n}\n/**\n * @param {Column} col - Defines the Column\n * @param {number} index - Defines the index\n * @returns {number} Returns the depth\n * @hidden\n */\nexport function checkDepth(col, index) {\n    var max = index;\n    var indices = [];\n    if (col.columns) {\n        index++;\n        for (var i = 0; i < col.columns.length; i++) {\n            indices[parseInt(i.toString(), 10)] = checkDepth(col.columns[parseInt(i.toString(), 10)], index);\n        }\n        for (var j = 0; j < indices.length; j++) {\n            if (max < indices[parseInt(j.toString(), 10)]) {\n                max = indices[parseInt(j.toString(), 10)];\n            }\n        }\n        index = max;\n    }\n    return index;\n}\n/**\n * @param {IGrid} gObj - Defines the IGrid\n * @param {PredicateModel[]} filteredCols - Defines the PredicateModel\n * @returns {void}\n * @hidden\n */\nexport function refreshFilteredColsUid(gObj, filteredCols) {\n    for (var i = 0; i < filteredCols.length; i++) {\n        filteredCols[parseInt(i.toString(), 10)].uid = filteredCols[parseInt(i.toString(), 10)].isForeignKey ?\n            getColumnByForeignKeyValue(filteredCols[parseInt(i.toString(), 10)].field, gObj.getForeignKeyColumns()).uid\n            : gObj.enableColumnVirtualization ? getColumnModelByFieldName(gObj, filteredCols[parseInt(i.toString(), 10)].field).uid\n                : gObj.getColumnByField(filteredCols[parseInt(i.toString(), 10)].field).uid;\n    }\n}\n/** @hidden */\n// eslint-disable-next-line @typescript-eslint/no-namespace\nexport var Global;\n(function (Global) {\n    // eslint-disable-next-line prefer-const\n    Global.timer = null;\n})(Global || (Global = {}));\n/**\n * @param {Element} element - Defines the element\n * @returns {Object} Returns the transform values\n * @hidden\n */\nexport function getTransformValues(element) {\n    var style = document.defaultView.getComputedStyle(element, null);\n    var transformV = style.getPropertyValue('transform');\n    var replacedTv = transformV.replace(/,/g, '');\n    var translateX = parseFloat((replacedTv).split(' ')[4]);\n    var translateY = parseFloat((replacedTv).split(' ')[5]);\n    return { width: translateX, height: translateY };\n}\n/**\n * @param {Element} rootElement - Defines the root Element\n * @param {Element} element - Defines the element\n * @returns {void}\n * @hidden\n */\nexport function applyBiggerTheme(rootElement, element) {\n    if (rootElement.classList.contains('e-bigger')) {\n        element.classList.add('e-bigger');\n    }\n}\n/**\n * @param {IGrid} gObj - Defines grid object\n * @returns {number}  - Returns scroll width\n * @hidden\n */\nexport function getScrollWidth(gObj) {\n    var scrollElem = gObj.getContent().firstElementChild;\n    return scrollElem.scrollWidth > scrollElem.offsetWidth ? getScrollBarWidth() : 0;\n}\n/**\n * @param {IGrid} gObj - Defines grid object\n * @param {number} idx - Defines the index\n * @returns {number} Returns colSpan index\n * @hidden\n */\nexport function resetColspanGroupCaption(gObj, idx) {\n    var colspan = 0;\n    var cols = gObj.getColumns();\n    var width = idx * 30;\n    if (gObj.isRowDragable()) {\n        colspan++;\n        width += 30;\n    }\n    colspan += (gObj.groupSettings.columns.length - idx);\n    width += (30 * (gObj.groupSettings.columns.length - idx));\n    var gridWidth = (gObj.width === 'auto' ? gObj.element.offsetWidth : parseInt(gObj.width.toString(), 10)) -\n        getScrollWidth(gObj);\n    for (var i = 0; i < cols.length; i++) {\n        if (cols[parseInt(i.toString(), 10)].visible) {\n            width += parseInt(cols[parseInt(i.toString(), 10)].width.toString(), 10);\n            colspan++;\n        }\n        if (width > gridWidth) {\n            colspan--;\n            break;\n        }\n    }\n    return colspan;\n}\n/**\n * @param {HTMLElement} tr - Defines the tr Element\n * @param {IGrid} gObj - Defines grid object\n * @returns {void}\n * @hidden\n */\nexport function groupCaptionRowLeftRightPos(tr, gObj) {\n    var width = 0;\n    for (var j = 0; j < tr.childNodes.length; j++) {\n        var td = tr.childNodes[parseInt(j.toString(), 10)];\n        td.classList.add('e-leftfreeze');\n        applyStickyLeftRightPosition(td, width, gObj.enableRtl, 'Left');\n        if (td.classList.contains('e-indentcell') || td.classList.contains('e-recordplusexpand') ||\n            td.classList.contains('e-recordpluscollapse')) {\n            width += 30;\n        }\n        if (td.classList.contains('e-groupcaption')) {\n            var colspan = parseInt(td.getAttribute('colspan'), 10);\n            if (gObj.isRowDragable()) {\n                colspan--;\n                width += 30;\n            }\n            colspan = colspan - (gObj.groupSettings.columns.length - j);\n            width = width + (30 * (gObj.groupSettings.columns.length - j));\n            var cols = gObj.getColumns();\n            for (var i = 0; i < cols.length; i++) {\n                if ((parseInt(td.getAttribute('colspan'), 10) > 1) &&\n                    (parseInt(cols[parseInt(i.toString(), 10)].width.toString(), 10)\n                        + width) > (parseInt(gObj.width.toString(), 10) - getScrollWidth(gObj))) {\n                    var newColspan = resetColspanGroupCaption(gObj, j);\n                    td.setAttribute('colspan', newColspan.toString());\n                    break;\n                }\n                if (cols[parseInt(i.toString(), 10)].visible) {\n                    width += parseInt(cols[parseInt(i.toString(), 10)].width.toString(), 10);\n                    colspan--;\n                }\n                if (colspan === 0) {\n                    break;\n                }\n            }\n        }\n        if (td.classList.contains('e-summarycell')) {\n            var uid_1 = td.getAttribute('e-mappinguid');\n            var column = gObj.getColumnByUid(uid_1);\n            width += parseInt(column.width.toString(), 10);\n        }\n    }\n}\n/**\n * @param {Element} row - Defines row element\n * @param {IGrid} gridObj - Defines grid object\n * @returns {boolean} Returns isRowEnteredInGrid\n * @hidden\n */\nexport function ensureLastRow(row, gridObj) {\n    var content = gridObj.getContent().firstElementChild;\n    return row && (row.getBoundingClientRect().top - content.getBoundingClientRect().top +\n        gridObj.getRowHeight()) > content.offsetHeight;\n}\n/**\n * @param {Element} row - Defines row element\n * @param {number} rowTop - Defines row top number\n * @returns {boolean} Returns first row is true\n * @hidden\n */\nexport function ensureFirstRow(row, rowTop) {\n    return row && row.getBoundingClientRect().top < rowTop;\n}\n/**\n * @param {number} index - Defines index\n * @param {IGrid} gObj - Defines grid object\n * @returns {boolean} Returns isRowEnteredInGrid\n * @hidden\n */\nexport function isRowEnteredInGrid(index, gObj) {\n    var rowHeight = gObj.getRowHeight();\n    var startIndex = gObj.getContent().firstElementChild.scrollTop / rowHeight;\n    var endIndex = startIndex + (gObj.getContent().firstElementChild.offsetHeight / rowHeight);\n    return index < endIndex && index > startIndex;\n}\n/**\n * @param {IGrid} gObj - Defines the grid object\n * @param {Object} data - Defines the query\n * @returns {number} Returns the edited data index\n * @hidden\n */\nexport function getEditedDataIndex(gObj, data) {\n    var keyField = gObj.getPrimaryKeyFieldNames()[0];\n    var dataIndex;\n    gObj.getCurrentViewRecords().filter(function (e, index) {\n        if (keyField.includes('.')) {\n            var currentValue = getObject(keyField, e);\n            var originalValue = getObject(keyField, data);\n            if (currentValue === originalValue) {\n                dataIndex = index;\n            }\n        }\n        else {\n            if (e[\"\" + keyField] === data[\"\" + keyField]) {\n                dataIndex = index;\n            }\n        }\n    });\n    return dataIndex;\n}\n/**\n * @param {Object} args - Defines the argument\n * @param {Query} query - Defines the query\n * @returns {FilterStateObj} Returns the filter state object\n * @hidden\n */\nexport function eventPromise(args, query) {\n    var state = getStateEventArgument(query);\n    var def = new Deferred();\n    state.dataSource = def.resolve;\n    state.action = args;\n    return { state: state, deffered: def };\n}\n/**\n * @param {Query} query - Defines the query\n * @returns {Object} Returns the state event argument\n * @hidden\n */\nexport function getStateEventArgument(query) {\n    var adaptr = new UrlAdaptor();\n    var dm = new DataManager({ url: '', adaptor: new UrlAdaptor });\n    var state = adaptr.processQuery(dm, query);\n    var data = JSON.parse(state.data);\n    return data;\n}\n/**\n * @param {IGrid} gObj - Defines the Igrid\n * @returns {boolean} Returns the ispercentageWidth\n * @hidden\n */\nexport function ispercentageWidth(gObj) {\n    var columns = gObj.getVisibleColumns();\n    var percentageCol = 0;\n    var undefinedWidthCol = 0;\n    for (var i = 0; i < columns.length; i++) {\n        if (isUndefined(columns[parseInt(i.toString(), 10)].width)) {\n            undefinedWidthCol++;\n        }\n        else if (columns[parseInt(i.toString(), 10)].width.toString().indexOf('%') !== -1) {\n            percentageCol++;\n        }\n    }\n    return (gObj.width === 'auto' || typeof (gObj.width) === 'string' && gObj.width.indexOf('%') !== -1) &&\n        !gObj.groupSettings.showGroupedColumn && gObj.groupSettings.columns.length\n        && percentageCol && !undefinedWidthCol;\n}\n/**\n * @param {IGrid} gObj - Defines the IGrid\n * @param {Row<Column>[]} rows - Defines the row\n * @param {HTMLTableRowElement[]} rowElms - Row elements\n * @param {number} index - Row index\n * @param {number} startRowIndex - Start Row Index\n * @returns {void}\n * @hidden\n */\nexport function resetRowIndex(gObj, rows, rowElms, index, startRowIndex) {\n    var startIndex = index ? index : 0;\n    for (var i = startRowIndex ? startRowIndex : 0; i < rows.length; i++) {\n        if (rows[parseInt(i.toString(), 10)] && rows[parseInt(i.toString(), 10)].isDataRow) {\n            rows[parseInt(i.toString(), 10)].index = startIndex;\n            rows[parseInt(i.toString(), 10)].isAltRow = gObj.enableAltRow ? startIndex % 2 !== 0 : false;\n            rowElms[parseInt(i.toString(), 10)].setAttribute(literals.dataRowIndex, startIndex.toString());\n            rowElms[parseInt(i.toString(), 10)].setAttribute(literals.ariaRowIndex, (startIndex + 1).toString());\n            if (rows[parseInt(i.toString(), 10)].isAltRow) {\n                rowElms[parseInt(i.toString(), 10)].classList.add('e-altrow');\n            }\n            else {\n                rowElms[parseInt(i.toString(), 10)].classList.remove('e-altrow');\n            }\n            for (var j = 0; j < rowElms[parseInt(i.toString(), 10)].cells.length; j++) {\n                rowElms[parseInt(i.toString(), 10)].cells[parseInt(j.toString(), 10)].setAttribute('index', startIndex.toString());\n            }\n            startIndex++;\n        }\n    }\n    if (!rows.length) {\n        gObj.renderModule.emptyRow(true);\n    }\n}\n/**\n * @param {IGrid} gObj - Defines the grid object\n * @param {Object} changes - Defines the changes\n * @param {string} type - Defines the type\n * @param {string} keyField - Defines the keyfield\n * @returns {void}\n * @hidden\n */\nexport function compareChanges(gObj, changes, type, keyField) {\n    var newArray = gObj.dataToBeUpdated[\"\" + type].concat(changes[\"\" + type]).reduce(function (r, o) {\n        r[o[\"\" + keyField]] = r[o[\"\" + keyField]] === undefined ? o : Object.assign(r[o[\"\" + keyField]], o);\n        return r;\n    }, {});\n    gObj.dataToBeUpdated[\"\" + type] = Object.keys(newArray).map(function (k) { return newArray[\"\" + k]; });\n}\n/**\n * @param {IGrid} gObj - Defines the grid object\n * @returns {void}\n * @hidden\n */\nexport function setRowElements(gObj) {\n    (gObj).contentModule.rowElements =\n        [].slice.call(gObj.element.querySelectorAll('.e-row:not(.e-addedrow)'));\n}\n/**\n * @param {Element} row - Defines the row\n * @param {number} start - Defines the start index\n * @param {number} end - Defines the end index\n * @returns {void}\n * @hidden\n */\nexport function sliceElements(row, start, end) {\n    var cells = row.children;\n    var len = cells.length;\n    var k = 0;\n    for (var i = 0; i < len; i++, k++) {\n        if (i >= start && i < end) {\n            continue;\n        }\n        row.removeChild(row.children[parseInt(k.toString(), 10)]);\n        k--;\n    }\n}\n/**\n * @param {Column} column - Defines the column\n * @param {string} uid - Defines the uid\n * @returns {boolean} Returns is child column\n * @hidden\n */\nexport function isChildColumn(column, uid) {\n    var uids = [];\n    uids.push(column.uid);\n    pushuid(column, uids);\n    if (uids.indexOf(uid) > -1) {\n        return true;\n    }\n    else {\n        return false;\n    }\n}\n/**\n * @param {Column} column - Defines the column\n * @param {string[]} uids - Defines the uid\n * @returns {void}\n * @hidden\n */\nexport function pushuid(column, uids) {\n    for (var i = 0; i < column.columns.length; i++) {\n        if (column.columns[parseInt(i.toString(), 10)].uid) {\n            uids.push(column.columns[parseInt(i.toString(), 10)].uid);\n        }\n        if (column.columns[parseInt(i.toString(), 10)].columns &&\n            column.columns[parseInt(i.toString(), 10)].columns.length) {\n            pushuid(column.columns[parseInt(i.toString(), 10)], uids);\n        }\n    }\n}\n/**\n * @param {Column} column - Defines the column\n * @returns {string} Returns the direction\n * @hidden\n */\nexport function frozenDirection(column) {\n    if (column.columns[0].freeze || column.columns[0].isFrozen) {\n        if (column.columns[0].freeze === 'Left' || column.columns[0].isFrozen) {\n            return 'Left';\n        }\n        else if (column.columns[0].freeze === 'Right') {\n            return 'Right';\n        }\n        else if (column.columns[0].freeze === 'Fixed') {\n            return 'Fixed';\n        }\n        else {\n            return 'None';\n        }\n    }\n    else {\n        if (column.columns[0].columns && column.columns[0].columns.length) {\n            return frozenDirection(column.columns[0]);\n        }\n        else {\n            return 'None';\n        }\n    }\n}\n/**\n * @param {Element} row - Defines the row\n * @returns {void}\n * @hidden\n */\nexport function addFixedColumnBorder(row) {\n    if (row.querySelector('.e-fixedfreeze')) {\n        var cells = [].slice.call(row.querySelectorAll('.e-filterbarcell:not(.e-hide),.e-summarycell:not(.e-hide),.e-headercell:not(.e-hide),.e-rowcell:not(.e-hide)'));\n        for (var j = 0; j < cells.length; j++) {\n            if (cells[parseInt(j.toString(), 10)].classList.contains('e-fixedfreeze') && (!(cells[j - 1]) ||\n                (cells[j - 1] && !cells[j - 1].classList.contains('e-fixedfreeze')))) {\n                cells[parseInt(j.toString(), 10)].classList.add('e-freezeleftborder');\n            }\n            if (cells[parseInt(j.toString(), 10)].classList.contains('e-fixedfreeze') && (!(cells[j + 1]) ||\n                (cells[j + 1] && !cells[j + 1].classList.contains('e-fixedfreeze')))) {\n                cells[parseInt(j.toString(), 10)].classList.add('e-freezerightborder');\n            }\n        }\n    }\n}\n/**\n * @param {HTMLElement} node - Defines the row\n * @param {number} width - Defines the width\n * @param {boolean} isRtl - Boolean property\n * @param {string} position - Defines the position\n * @returns {void}\n * @hidden\n */\nexport function applyStickyLeftRightPosition(node, width, isRtl, position) {\n    if (position === 'Left') {\n        if (isRtl) {\n            node.style.right = width + 'px';\n        }\n        else {\n            node.style.left = width + 'px';\n        }\n    }\n    if (position === 'Right') {\n        if (isRtl) {\n            node.style.left = width + 'px';\n        }\n        else {\n            node.style.right = width + 'px';\n        }\n    }\n}\n/**\n * @param {IGrid} gObj - Defines the grid\n * @param {Column} column - Defines the column\n * @param {Element} node - Defines the Element\n * @returns {void}\n * @hidden\n */\nexport function addStickyColumnPosition(gObj, column, node) {\n    if (column.freeze === 'Left' || column.isFrozen) {\n        node.classList.add('e-leftfreeze');\n        if (column.border === 'Left') {\n            node.classList.add('e-freezeleftborder');\n        }\n        if (column.index === 0) {\n            applyStickyLeftRightPosition(node, (gObj.getIndentCount() * 30), gObj.enableRtl, 'Left');\n            if (gObj.enableColumnVirtualization) {\n                column.valueX = (gObj.getIndentCount() * 30);\n            }\n        }\n        else {\n            var cols = gObj.getColumns();\n            var width = gObj.getIndentCount() * 30;\n            for (var i = 0; i < cols.length; i++) {\n                if (column.uid === cols[parseInt(i.toString(), 10)].uid) {\n                    break;\n                }\n                if (cols[parseInt(i.toString(), 10)].visible) {\n                    width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n                }\n            }\n            applyStickyLeftRightPosition(node, width, gObj.enableRtl, 'Left');\n            if (gObj.enableColumnVirtualization) {\n                column.valueX = width;\n            }\n        }\n    }\n    else if (column.freeze === 'Right') {\n        node.classList.add('e-rightfreeze');\n        var cols = gObj.getColumns();\n        if (column.border === 'Right') {\n            node.classList.add('e-freezerightborder');\n        }\n        if (column.index === cols[cols.length - 1].index) {\n            var width = gObj.getFrozenMode() === 'Right' && gObj.isRowDragable() ? 30 : 0;\n            applyStickyLeftRightPosition(node, width, gObj.enableRtl, 'Right');\n            if (gObj.enableColumnVirtualization) {\n                column.valueX = width;\n            }\n        }\n        else {\n            var width = gObj.getFrozenMode() === 'Right' && gObj.isRowDragable() ? 30 : 0;\n            for (var i = cols.length - 1; i >= 0; i--) {\n                if (column.uid === cols[parseInt(i.toString(), 10)].uid) {\n                    break;\n                }\n                if (cols[parseInt(i.toString(), 10)].visible) {\n                    width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n                }\n            }\n            applyStickyLeftRightPosition(node, width, gObj.enableRtl, 'Right');\n            if (gObj.enableColumnVirtualization) {\n                column.valueX = width;\n            }\n        }\n    }\n    else if (column.freeze === 'Fixed') {\n        node.classList.add('e-fixedfreeze');\n        var cols = gObj.getColumns();\n        var width = 0;\n        if (gObj.getVisibleFrozenLeftCount()) {\n            width = gObj.getIndentCount() * 30;\n        }\n        else if (gObj.getFrozenMode() === 'Right') {\n            width = gObj.groupSettings.columns.length * 30;\n        }\n        for (var i = 0; i < cols.length; i++) {\n            if (column.uid === cols[parseInt(i.toString(), 10)].uid) {\n                break;\n            }\n            if ((cols[parseInt(i.toString(), 10)].freeze === 'Left' || cols[parseInt(i.toString(), 10)].isFrozen) ||\n                cols[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n                if (cols[parseInt(i.toString(), 10)].visible) {\n                    width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n                }\n            }\n        }\n        applyStickyLeftRightPosition(node, (width - 1), gObj.enableRtl, 'Left');\n        width = gObj.getFrozenMode() === 'Right' && gObj.isRowDragable() ? 30 : 0;\n        for (var i = cols.length - 1; i >= 0; i--) {\n            if (column.uid === cols[parseInt(i.toString(), 10)].uid) {\n                break;\n            }\n            if (cols[parseInt(i.toString(), 10)].freeze === 'Right' || cols[parseInt(i.toString(), 10)].freeze === 'Fixed') {\n                if (cols[parseInt(i.toString(), 10)].visible) {\n                    width += parseFloat(cols[parseInt(i.toString(), 10)].width.toString());\n                }\n            }\n        }\n        applyStickyLeftRightPosition(node, (width - 1), gObj.enableRtl, 'Right');\n    }\n    else {\n        node.classList.add('e-unfreeze');\n    }\n}\n/**\n * @param {IGrid} gObj - Defines the grid Object\n * @param {Column} col - Defines the column\n * @param {number} rowIndex - Defines the rowindex\n * @returns {Element} Returns the element\n * @hidden\n */\nexport function getCellsByTableName(gObj, col, rowIndex) {\n    return [].slice.call(gObj.getDataRows()[parseInt(rowIndex.toString(), 10)].getElementsByClassName(literals.rowCell));\n}\n/**\n * @param {IGrid} gObj - Defines the column\n * @param {Column} col - Defines the index\n * @param {number} rowIndex - Defines the rules\n * @param {number} index - Defines the movable column rules\n * @returns {Element} Returns the Element\n * @hidden\n */\nexport function getCellByColAndRowIndex(gObj, col, rowIndex, index) {\n    return getCellsByTableName(gObj, col, rowIndex)[parseInt(index.toString(), 10)];\n}\n/**\n * @param {Column} col - Defines the column\n * @param {number} index - Defines the index\n * @param {Object} rules - Defines the rules\n * @param {Object} mRules - Defines the movable column rules\n * @param {Object} frRules - Defines the Frozen rules\n * @param {number} len - Defines the length\n * @param {boolean} isCustom - Defines custom form validation\n * @returns {void}\n * @hidden\n */\nexport function setValidationRuels(col, index, rules, mRules, frRules, len, isCustom) {\n    if (isCustom) {\n        rules[getComplexFieldID(col.field)] = col.validationRules;\n    }\n    else {\n        if (col.getFreezeTableName() === literals.frozenLeft\n            || (!index && col.getFreezeTableName() === literals.frozenRight) || len === 1) {\n            rules[getComplexFieldID(col.field)] = col.validationRules;\n        }\n        else if (col.getFreezeTableName() === 'movable' || !col.getFreezeTableName()) {\n            mRules[getComplexFieldID(col.field)] = col.validationRules;\n        }\n        else if (col.getFreezeTableName() === literals.frozenRight) {\n            frRules[getComplexFieldID(col.field)] = col.validationRules;\n        }\n    }\n}\n/**\n * @param {string} numberFormat - Format\n * @param {string} type - Value type\n * @param {boolean} isExcel - Boolean property\n * @param {string} currencyCode - Specifies the currency code to be used for formatting.\n * @returns {string} returns formated value\n * @hidden\n */\nexport function getNumberFormat(numberFormat, type, isExcel, currencyCode) {\n    var format;\n    var intl = new Internationalization();\n    if (type === 'number') {\n        try {\n            format = intl.getNumberPattern({ format: numberFormat, currency: currencyCode, useGrouping: true }, true);\n        }\n        catch (error) {\n            format = numberFormat;\n        }\n    }\n    else if (type === 'date' || type === 'time' || type === 'datetime') {\n        try {\n            format = intl.getDatePattern({ skeleton: numberFormat, type: type }, isExcel);\n            if (isNullOrUndefined(format)) {\n                // eslint-disable-next-line\n                throw 'error';\n            }\n        }\n        catch (error) {\n            try {\n                format = intl.getDatePattern({ format: numberFormat, type: type }, isExcel);\n            }\n            catch (error) {\n                format = numberFormat;\n            }\n        }\n    }\n    else {\n        format = numberFormat;\n    }\n    if (type !== 'number') {\n        var patternRegex = /G|H|c|'| a|yy|y|EEEE|E/g;\n        var mtch_1 = { 'G': '', 'H': 'h', 'c': 'd', '\\'': '\"', ' a': ' AM/PM', 'yy': 'yy', 'y': 'yyyy', 'EEEE': 'dddd', 'E': 'ddd' };\n        format = format.replace(patternRegex, function (pattern) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            return mtch_1[\"\" + pattern];\n        });\n    }\n    return format;\n}\n/**\n * @param {IGrid} gObj - Grid instance\n * @returns {void}\n * @hidden\n */\nexport function addBiggerDialog(gObj) {\n    if (gObj.enableAdaptiveUI) {\n        var dialogs = document.getElementsByClassName('e-responsive-dialog');\n        for (var i = 0; i < dialogs.length; i++) {\n            dialogs[parseInt(i.toString(), 10)].classList.add('e-bigger');\n        }\n    }\n}\n/**\n * @param {string} value - specifies the trr\n * @param {Object} mapObject - specifies the idx\n * @returns {Object | string} returns object or string\n * @hidden\n */\nexport function performComplexDataOperation(value, mapObject) {\n    var returnObj;\n    var length = value.split('.').length;\n    var splits = value.split('.');\n    var duplicateMap = mapObject;\n    for (var i = 0; i < length; i++) {\n        returnObj = duplicateMap[splits[parseInt(i.toString(), 10)]];\n        duplicateMap = returnObj;\n    }\n    return returnObj;\n}\n/**\n * @param {Object} tr - specifies the trr\n * @param {number} idx - specifies the idx\n * @param {string} displayVal - specifies the displayval\n * @param {Row<Column>} rows - specifies the rows\n * @param {IGrid} parent - Grid instance\n * @param {boolean} isContent - check for content renderer\n * @returns {void}\n * @hidden\n */\nexport function setDisplayValue(tr, idx, displayVal, rows, parent, isContent) {\n    var trs = Object.keys(tr);\n    var actualIndex = idx;\n    for (var i = 0; i < trs.length; i++) {\n        var td = tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)];\n        if (parent && !parent.isFrozenGrid() && !parent.isRowDragable()) {\n            td = (!isNullOrUndefined(td) && (parseInt(td.getAttribute('data-colindex'), 10) === idx))\n                ? td : tr[parseInt(i.toString(), 10)].querySelector(\"td[data-colindex=\\\"\" + idx + \"\\\"]\");\n            if (isNullOrUndefined(td)) {\n                continue;\n            }\n            else {\n                idx = (parent.getContentTable().querySelector('.e-detailrowcollapse, .e-detailrowexpand')) ?\n                    (td.cellIndex - 1) : td.cellIndex;\n            }\n        }\n        if (tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell').length && td) {\n            setStyleAttribute(tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)], { 'display': displayVal });\n            if (tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)].classList.contains('e-hide')) {\n                removeClass([tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)]], ['e-hide']);\n            }\n            if ((isContent && parent.isRowDragable()) || (parent && parent.isDetail())) {\n                var index = idx + 1;\n                rows[trs[parseInt(i.toString(), 10)]].cells[parseInt(index.toString(), 10)].visible = displayVal === '' ? true : false;\n            }\n            else {\n                if (!isNullOrUndefined(rows[trs[parseInt(i.toString(), 10)]])) {\n                    rows[trs[parseInt(i.toString(), 10)]].cells[parseInt(idx.toString(), 10)].visible = displayVal === '' ? true : false;\n                    if (rows[trs[parseInt(i.toString(), 10)]].cells[parseInt(idx.toString(), 10)].visible === false) {\n                        tr[trs[parseInt(i.toString(), 10)]].querySelectorAll('td.e-rowcell')[parseInt(idx.toString(), 10)].classList.add('e-hide');\n                    }\n                }\n            }\n            idx = actualIndex;\n        }\n    }\n}\n// eslint-disable-next-line\n/** @hidden */\nexport function addRemoveEventListener(parent, evt, isOn, module) {\n    for (var _i = 0, evt_1 = evt; _i < evt_1.length; _i++) {\n        var inst = evt_1[_i];\n        if (isOn) {\n            parent.on(inst.event, inst.handler, module);\n        }\n        else {\n            parent.off(inst.event, inst.handler);\n        }\n    }\n}\n// eslint-disable-next-line\n/** @hidden */\nexport function createEditElement(parent, column, classNames, attr) {\n    var complexFieldName = getComplexFieldID(column.field);\n    attr = Object.assign(attr, {\n        id: parent.element.id + complexFieldName,\n        name: complexFieldName, 'e-mappinguid': column.uid\n    });\n    return parent.createElement('input', {\n        className: classNames, attrs: attr\n    });\n}\n/**\n * @param {IGrid} gObj - Grid instance\n * @param {string} uid - Defines column's uid\n * @returns {Column} returns column model\n * @hidden\n */\nexport function getColumnModelByUid(gObj, uid) {\n    var column;\n    for (var _i = 0, _a = (gObj.columnModel); _i < _a.length; _i++) {\n        var col = _a[_i];\n        if (col.uid === uid) {\n            column = col;\n            break;\n        }\n    }\n    return column;\n}\n/**\n * @param {IGrid} gObj - Grid instance\n * @param {string} field - Defines column's uid\n * @returns {Column} returns column model\n * @hidden\n */\nexport function getColumnModelByFieldName(gObj, field) {\n    var column;\n    if (!gObj.columnModel) {\n        gObj.getColumns();\n    }\n    for (var _i = 0, _a = (gObj.columnModel); _i < _a.length; _i++) {\n        var col = _a[_i];\n        if (col.field === field) {\n            column = col;\n            break;\n        }\n    }\n    return column;\n}\n/**\n * @param {string} id - Defines component id\n * @param {string[]} evts - Defines events\n * @param {object} handlers - Defines event handlers\n * @param {any} instance - Defines class instance\n * @returns {void}\n * @hidden\n */\n// eslint-disable-next-line\nexport function registerEventHandlers(id, evts, handlers, instance) {\n    instance.eventHandlers[\"\" + id] = {};\n    for (var i = 0; i < evts.length; i++) {\n        instance.eventHandlers[\"\" + id][evts[parseInt(i.toString(), 10)]] = handlers[evts[parseInt(i.toString(), 10)]];\n    }\n}\n/**\n * @param {any} component - Defines component instance\n * @param {string[]} evts - Defines events\n * @param {any} instance - Defines class instance\n * @returns {void}\n * @hidden\n */\n// eslint-disable-next-line\nexport function removeEventHandlers(component, evts, instance) {\n    for (var i = 0; i < evts.length; i++) {\n        if (component.isDestroyed) {\n            break;\n        }\n        component.removeEventListener(evts[parseInt(i.toString(), 10)], instance.eventHandlers[component.element.id][evts[parseInt(i.toString(), 10)]]);\n    }\n}\n/**\n * @param {IGrid | IXLFilter} parent - Defines parent instance\n * @param {string[]} templates - Defines the templates name which are needs to clear\n * @returns {void}\n * @hidden\n */\nexport function clearReactVueTemplates(parent, templates) {\n    parent.destroyTemplate(templates);\n    if (parent.isReact) {\n        parent.renderTemplates();\n    }\n}\n/**\n *\n * @param { Element } row - Defines row element\n * @returns { number } row index\n */\nexport function getRowIndexFromElement(row) {\n    return parseInt(row.getAttribute(literals.dataRowIndex), 10);\n}\n/**\n *\n * @param { string[] } fields - Defines grouped fields\n * @param { values } values - Defines caption keys\n * @param { any } instance - Defines dynamic class instance\n * @returns { Predicate } returns filter predicate\n */\n// eslint-disable-next-line\nexport function generateExpandPredicates(fields, values, instance) {\n    var filterCols = [];\n    for (var i = 0; i < fields.length; i++) {\n        var column = instance.parent.getColumnByField(fields[parseInt(i.toString(), 10)]);\n        var value = values[parseInt(i.toString(), 10)] === 'null' ? null : values[parseInt(i.toString(), 10)];\n        var pred = {\n            field: fields[parseInt(i.toString(), 10)], predicate: 'or', uid: column.uid, operator: 'equal', type: column.type,\n            matchCase: instance.allowCaseSensitive, ignoreAccent: instance.parent.filterSettings.ignoreAccent\n        };\n        if (value === '' || isNullOrUndefined(value)) {\n            filterCols = filterCols.concat(CheckBoxFilterBase.generateNullValuePredicates(pred));\n        }\n        else {\n            filterCols.push(extend({}, { value: value }, pred));\n        }\n    }\n    return CheckBoxFilterBase.getPredicate(filterCols);\n}\n/**\n *\n * @param { Predicate } pred - Defines filter predicate\n * @returns { Predicate[] } Returns formed predicate\n */\nexport function getPredicates(pred) {\n    var predicateList = [];\n    for (var _i = 0, _a = Object.keys(pred); _i < _a.length; _i++) {\n        var prop = _a[_i];\n        predicateList.push(pred[\"\" + prop]);\n    }\n    return predicateList;\n}\n/**\n *\n * @param { number } index - Defines group caption indent\n * @param { Row<Column>[] } rowsObject - Defines rows object\n * @returns { { fields: string[], keys: string[] } } Returns grouped keys and values\n */\nexport function getGroupKeysAndFields(index, rowsObject) {\n    var fields = [];\n    var keys = [];\n    for (var i = index; i >= 0; i--) {\n        if (rowsObject[parseInt(i.toString(), 10)].isCaptionRow\n            && fields.indexOf(rowsObject[parseInt(i.toString(), 10)].data.field) === -1\n            && (rowsObject[parseInt(i.toString(), 10)].indent < rowsObject[parseInt(index.toString(), 10)].indent || i === index)) {\n            fields.push(rowsObject[parseInt(i.toString(), 10)].data.field);\n            keys.push(rowsObject[parseInt(i.toString(), 10)].data.key);\n            if (rowsObject[parseInt(i.toString(), 10)].indent === 0) {\n                break;\n            }\n        }\n    }\n    return { fields: fields, keys: keys };\n}\n// eslint-disable-next-line\n/**\n *\n * @param { number[][] } checkActiveMatrix - Defines matrix to check\n * @param { number[] } checkCellIndex - Defines index to check\n * @param { boolean } next - Defines select next or previous index\n * @returns { number[] } - Returns next active current index\n */\nexport function findCellIndex(checkActiveMatrix, checkCellIndex, next) {\n    var activeMatrix = checkActiveMatrix;\n    var cellIndex = checkCellIndex;\n    var currentCellIndexPass = false;\n    if (next) {\n        for (var i = cellIndex[0]; i < activeMatrix.length; i++) {\n            var rowCell = activeMatrix[parseInt(i.toString(), 10)];\n            for (var j = 0; j < rowCell.length; j++) {\n                if (currentCellIndexPass && activeMatrix[parseInt(i.toString(), 10)][parseInt(j.toString(), 10)] === 1) {\n                    cellIndex = [i, j];\n                    return cellIndex;\n                }\n                if (!currentCellIndexPass && cellIndex.toString() === [i, j].toString()) {\n                    currentCellIndexPass = true;\n                }\n            }\n        }\n    }\n    else {\n        for (var i = cellIndex[0]; i >= 0; i--) {\n            var rowCell = activeMatrix[parseInt(i.toString(), 10)];\n            for (var j = rowCell.length - 1; j >= 0; j--) {\n                if (currentCellIndexPass && activeMatrix[parseInt(i.toString(), 10)][parseInt(j.toString(), 10)] === 1) {\n                    cellIndex = [i, j];\n                    return cellIndex;\n                }\n                if (!currentCellIndexPass && cellIndex.toString() === [i, j].toString()) {\n                    currentCellIndexPass = true;\n                }\n            }\n        }\n    }\n    return cellIndex;\n}\n/**\n *\n * @param { string } string - Defines string need to capitalized first letter\n * @returns { string } - Returns capitalized first letter string\n */\nexport function capitalizeFirstLetter(string) {\n    return string.charAt(0).toUpperCase() + string.slice(1);\n}\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable @typescript-eslint/no-explicit-any */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable jsdoc/require-param */\n/* eslint-disable valid-jsdoc */\nimport { Animation, compile as templateComplier, Browser } from '@syncfusion/ej2-base';\nimport { merge, extend, isNullOrUndefined, resetBlazorTemplate } from '@syncfusion/ej2-base';\nimport { createElement, remove } from '@syncfusion/ej2-base';\nimport { Index } from '../../common/model/base';\nimport { VisibleLabels } from '../../chart/axis/axis';\nimport { axisLabelRender, regSub } from '../model/constants';\nimport { measureText, Rect, TextOption, Size, PathOption, SvgRenderer, CanvasRenderer } from '@syncfusion/ej2-svg-base';\n/**\n * Function to sort the dataSource, by default it sort the data in ascending order.\n *\n * @param  {Object} data chart data\n * @param  {string} fields date fields\n * @param  {boolean} isDescending boolean values of descending\n * @returns {Object[]} It returns chart data which be sorted.\n */\nexport function sort(data, fields, isDescending) {\n    var sortData = extend([], data, null);\n    for (var i = 0; i < sortData.length; i++) {\n        for (var j = 0; j < fields.length; j++) {\n            if (sortData[i][fields[j]] instanceof Date) {\n                sortData[i][fields[j]] = sortData[i][fields[j]].getTime();\n            }\n        }\n    }\n    sortData.sort(function (a, b) {\n        var first = 0;\n        var second = 0;\n        for (var i = 0; i < fields.length; i++) {\n            first += a[fields[i]];\n            second += b[fields[i]];\n        }\n        if ((!isDescending && first < second) || (isDescending && first > second)) {\n            return -1;\n        }\n        else if (first === second) {\n            return 0;\n        }\n        return 1;\n    });\n    return sortData;\n}\n/** @private */\nexport function isBreakLabel(label) {\n    return label.indexOf('<br>') !== -1;\n}\n/** @private */\nexport function getVisiblePoints(series) {\n    var points = extend([], series.points, null, true);\n    var tempPoints = [];\n    var tempPoint;\n    var pointIndex = 0;\n    for (var i = 0; i < points.length; i++) {\n        tempPoint = points[i];\n        if (isNullOrUndefined(tempPoint.x)) {\n            continue;\n        }\n        else {\n            tempPoint.index = pointIndex++;\n            tempPoints.push(tempPoint);\n        }\n    }\n    return tempPoints;\n}\n/** @private */\nexport function rotateTextSize(font, text, angle, chart) {\n    var transformValue = chart.element.style.transform;\n    if (transformValue) {\n        chart.element.style.transform = '';\n    }\n    var renderer = new SvgRenderer(chart.element.id);\n    var labelText;\n    var textCollection = [];\n    var height;\n    var dy;\n    var label;\n    var tspanElement;\n    var options = {\n        id: 'rotate_text',\n        x: chart.initialClipRect.x,\n        y: chart.initialClipRect.y,\n        'font-size': font.size,\n        'font-style': font.fontStyle,\n        'font-family': font.fontFamily,\n        'font-weight': font.fontWeight,\n        'transform': 'rotate(' + angle + ', 0, 0)',\n        'text-anchor': 'middle'\n    };\n    if (isBreakLabel(text)) {\n        textCollection = text.split('<br>');\n        labelText = textCollection[0];\n    }\n    else {\n        labelText = text;\n    }\n    var htmlObject = renderer.createText(options, labelText);\n    if (!chart.delayRedraw && !chart.redraw && !chart.stockChart) {\n        chart.element.appendChild(chart.svgObject);\n    }\n    // for line break label\n    if (typeof textCollection !== 'string' && textCollection.length > 1) {\n        for (var i = 1, len = textCollection.length; i < len; i++) {\n            height = (measureText(textCollection[i], font, chart.themeStyle.axisLabelFont).height);\n            dy = (options.y) + ((i * height));\n            label = textCollection[i];\n            tspanElement = renderer.createTSpan({\n                'x': options.x, 'id': options.id,\n                'y': dy\n            }, label);\n            htmlObject.appendChild(tspanElement);\n        }\n    }\n    chart.svgObject.appendChild(htmlObject);\n    var box = htmlObject.getBoundingClientRect();\n    if (transformValue) {\n        chart.element.style.transform = transformValue;\n    }\n    remove(htmlObject);\n    if (!chart.delayRedraw && !chart.redraw && !chart.stockChart) {\n        remove(chart.svgObject);\n    }\n    if (chart.enableCanvas) {\n        var textWidth = measureText(text, font, chart.themeStyle.axisLabelFont).width;\n        var textHeight = measureText(text, font, chart.themeStyle.axisLabelFont).height;\n        var angleInRadians = (angle * Math.PI) / 180; // Convert the rotation angle to radians\n        var rotatedTextWidth = Math.abs(Math.cos(angleInRadians) * textWidth) + Math.abs(Math.sin(angleInRadians) * textHeight);\n        var rotatedTextHeight = Math.abs(Math.sin(angleInRadians) * textWidth) + Math.abs(Math.cos(angleInRadians) * textHeight);\n        return new Size(rotatedTextWidth, rotatedTextHeight);\n    }\n    return new Size((box.right - box.left), (box.bottom - box.top));\n}\n/** @private */\nexport function removeElement(id) {\n    if (!id) {\n        return null;\n    }\n    var element = typeof id === 'string' ? getElement(id) : id;\n    if (element) {\n        remove(element);\n    }\n}\n/** @private */\nexport function logBase(value, base) {\n    return Math.log(value) / Math.log(base);\n}\n/** @private */\nexport function showTooltip(text, x, y, areaWidth, id, element, isTouch, isTitleOrLegendEnabled) {\n    //let id1: string = 'EJ2_legend_tooltip';\n    var tooltip = document.getElementById(id);\n    var size = measureText(text, {\n        fontFamily: 'Segoe UI', size: '12px',\n        fontStyle: 'Normal', fontWeight: 'Regular'\n    });\n    var width = size.width + 5;\n    x = (x + width > areaWidth) ? x - (width + 15) : x;\n    y = isTitleOrLegendEnabled ? (y - size.height / 2) : y + 15;\n    if (!tooltip) {\n        tooltip = createElement('div', {\n            id: id,\n            styles: 'top:' + (y).toString() + 'px;left:' + (x + 15).toString() +\n                'px;background-color: rgb(255, 255, 255) !important; color:black !important; ' +\n                'position:absolute;border:1px solid rgb(112, 112, 112); padding-left : 3px; padding-right : 2px;' +\n                'padding-bottom : 2px; padding-top : 2px; font-size:12px; font-family: \"Segoe UI\"'\n        });\n        tooltip.innerText = text;\n        element.appendChild(tooltip);\n        var left = parseInt(tooltip.style.left.replace('px', ''), 10);\n        if (left < 0) {\n            tooltip.style.left = '0px';\n        }\n    }\n    else {\n        tooltip.innerText = text;\n        tooltip.style.top = (y).toString() + 'px';\n        tooltip.style.left = (x + 15).toString() + 'px';\n    }\n    if (isTouch) {\n        setTimeout(function () { removeElement(id); }, 1500);\n    }\n}\n/** @private */\nexport function inside(value, range) {\n    return (value < range.max) && (value > range.min);\n}\n/** @private */\nexport function withIn(value, range) {\n    return (value <= range.max) && (value >= range.min);\n}\n/** @private */\nexport function logWithIn(value, axis) {\n    return axis.valueType === 'Logarithmic' ? logBase(value, axis.logBase) : value;\n}\n/** @private */\nexport function withInRange(previousPoint, currentPoint, nextPoint, series) {\n    var mX2 = logWithIn(currentPoint.xValue, series.xAxis);\n    var mX1 = previousPoint ? logWithIn(previousPoint.xValue, series.xAxis) : mX2;\n    var mX3 = nextPoint ? logWithIn(nextPoint.xValue, series.xAxis) : mX2;\n    var xStart = Math.floor(series.xAxis.visibleRange.min);\n    var xEnd = Math.ceil(series.xAxis.visibleRange.max);\n    return ((mX1 >= xStart && mX1 <= xEnd) || (mX2 >= xStart && mX2 <= xEnd) ||\n        (mX3 >= xStart && mX3 <= xEnd) || (xStart >= mX1 && xStart <= mX3));\n}\n/** @private */\nexport function sum(values) {\n    var sum = 0;\n    for (var _i = 0, values_1 = values; _i < values_1.length; _i++) {\n        var value = values_1[_i];\n        sum += value;\n    }\n    return sum;\n}\n/** @private */\nexport function subArraySum(values, first, last, index, series) {\n    var sum = 0;\n    if (index !== null) {\n        for (var i = (first + 1); i < last; i++) {\n            if (index.indexOf(i) === -1) {\n                sum += values[i][series.yName];\n            }\n        }\n    }\n    else {\n        for (var i = (first + 1); i < last; i++) {\n            if (!isNullOrUndefined(values[i][series.yName])) {\n                sum += values[i][series.yName];\n            }\n        }\n    }\n    return sum;\n}\n/** @private */\nexport function subtractThickness(rect, thickness) {\n    rect.x += thickness.left;\n    rect.y += thickness.top;\n    rect.width -= thickness.left + thickness.right;\n    rect.height -= thickness.top + thickness.bottom;\n    return rect;\n}\n/** @private */\nexport function subtractRect(rect, thickness) {\n    rect.x += thickness.x;\n    rect.y += thickness.y;\n    rect.width -= thickness.x + thickness.width;\n    rect.height -= thickness.y + thickness.height;\n    return rect;\n}\n/** @private */\nexport function degreeToLocation(degree, radius, center) {\n    var radian = (degree * Math.PI) / 180;\n    return new ChartLocation(Math.cos(radian) * radius + center.x, Math.sin(radian) * radius + center.y);\n}\n/** @private */\nexport function degreeToRadian(degree) {\n    return degree * (Math.PI / 180);\n}\n/** @private */\nexport function getRotatedRectangleCoordinates(actualPoints, centerX, centerY, angle) {\n    var coordinatesAfterRotation = [];\n    for (var i = 0; i < 4; i++) {\n        var point = actualPoints[i];\n        // translate point to origin\n        var tempX = point.x - centerX;\n        var tempY = point.y - centerY;\n        // now apply rotation\n        var rotatedX = tempX * Math.cos(degreeToRadian(angle)) - tempY * Math.sin(degreeToRadian(angle));\n        var rotatedY = tempX * Math.sin(degreeToRadian(angle)) + tempY * Math.cos(degreeToRadian(angle));\n        // translate back\n        point.x = rotatedX + centerX;\n        point.y = rotatedY + centerY;\n        coordinatesAfterRotation.push(new ChartLocation(point.x, point.y));\n    }\n    return coordinatesAfterRotation;\n}\n/**\n * Helper function to determine whether there is an intersection between the two polygons described\n * by the lists of vertices. Uses the Separating Axis Theorem\n *\n * @param {ChartLocation[]} a an array of connected points [{x:, y:}, {x:, y:},...] that form a closed polygon\n * @param {ChartLocation[]} b an array of connected points [{x:, y:}, {x:, y:},...] that form a closed polygon\n * @returns {boolean} if there is any intersection between the 2 polygons, false otherwise\n */\nexport function isRotatedRectIntersect(a, b) {\n    var polygons = [a, b];\n    var minA;\n    var maxA;\n    var projected;\n    var i;\n    var i1;\n    var j;\n    var minB;\n    var maxB;\n    for (i = 0; i < polygons.length; i++) {\n        // for each polygon, look at each edge of the polygon, and determine if it separates\n        // the two shapes\n        var polygon = polygons[i];\n        for (i1 = 0; i1 < polygon.length; i1++) {\n            // grab 2 vertices to create an edge\n            var i2 = (i1 + 1) % polygon.length;\n            var p1 = polygon[i1];\n            var p2 = polygon[i2];\n            // find the line perpendicular to this edge\n            var normal = new ChartLocation(p2.y - p1.y, p1.x - p2.x);\n            minA = maxA = undefined;\n            // for each vertex in the first shape, project it onto the line perpendicular to the edge\n            // and keep track of the min and max of these values\n            for (j = 0; j < a.length; j++) {\n                projected = normal.x * a[j].x + normal.y * a[j].y;\n                if (isNullOrUndefined(minA) || projected < minA) {\n                    minA = projected;\n                }\n                if (isNullOrUndefined(maxA) || projected > maxA) {\n                    maxA = projected;\n                }\n            }\n            // for each vertex in the second shape, project it onto the line perpendicular to the edge\n            // and keep track of the min and max of these values\n            minB = maxB = undefined;\n            for (j = 0; j < b.length; j++) {\n                projected = normal.x * b[j].x + normal.y * b[j].y;\n                if (isNullOrUndefined(minB) || projected < minB) {\n                    minB = projected;\n                }\n                if (isNullOrUndefined(maxB) || projected > maxB) {\n                    maxB = projected;\n                }\n            }\n            // if there is no overlap between the projects, the edge we are looking at separates the two\n            // polygons, and we know there is no overlap\n            if (maxA < minB || maxB < minA) {\n                return false;\n            }\n        }\n    }\n    return true;\n}\n/** @private */\nfunction getAccumulationLegend(locX, locY, r, height, width, mode) {\n    var cartesianlarge = degreeToLocation(270, r, new ChartLocation(locX, locY));\n    var cartesiansmall = degreeToLocation(270, r, new ChartLocation(locX + (width / 10), locY));\n    return 'M' + ' ' + locX + ' ' + locY + ' ' + 'L' + ' ' + (locX + r) + ' ' + (locY) + ' ' + 'A' + ' ' + (r) + ' ' + (r) +\n        ' ' + 0 + ' ' + 1 + ' ' + 1 + ' ' + cartesianlarge.x + ' ' + cartesianlarge.y + ' ' + 'Z' + ' ' + 'M' + ' ' + (locX +\n        (width / 10)) + ' ' + (locY - (height / 10)) + ' ' + 'L' + (locX + (r)) + ' ' + (locY - height / 10) + ' ' + 'A' + ' '\n        + (r) + ' ' + (r) + ' ' + 0 + ' ' + 0 + ' ' + 0 + ' ' + cartesiansmall.x + ' ' + cartesiansmall.y + ' ' + 'Z';\n}\n/** @private */\nexport function getAngle(center, point) {\n    var angle = Math.atan2((point.y - center.y), (point.x - center.x));\n    angle = angle < 0 ? (6.283 + angle) : angle;\n    return angle * (180 / Math.PI);\n}\n/** @private */\nexport function subArray(values, index) {\n    var subArray = [];\n    for (var i = 0; i <= index - 1; i++) {\n        subArray.push(values[i]);\n    }\n    return subArray;\n}\n/** @private */\nexport function valueToCoefficient(value, axis) {\n    var range = axis.visibleRange;\n    var result = (value - range.min) / (range.delta);\n    var isInverse = axis.isChart ? axis.isAxisInverse : axis.isInversed;\n    return isInverse ? (1 - result) : result;\n}\n/** @private */\nexport function TransformToVisible(x, y, xAxis, yAxis, isInverted, series) {\n    x = (xAxis.valueType === 'Logarithmic' ? logBase(x > 1 ? x : 1, xAxis.logBase) : x);\n    y = (yAxis.valueType === 'Logarithmic' ?\n        logBase(y > 1 ? y : 1, yAxis.logBase) : y);\n    x += xAxis.valueType === 'Category' && xAxis.labelPlacement === 'BetweenTicks' && series.type !== 'Radar' ? 0.5 : 0;\n    var radius = series.chart.radius * valueToCoefficient(y, yAxis);\n    var point = CoefficientToVector(valueToPolarCoefficient(x, xAxis), series.chart.primaryXAxis.startAngle);\n    return {\n        x: (series.clipRect.width / 2 + series.clipRect.x) + radius * point.x,\n        y: (series.clipRect.height / 2 + series.clipRect.y) + radius * point.y\n    };\n}\n/**\n * method to find series, point index by element id\n *\n * @private\n */\nexport function indexFinder(id, isPoint) {\n    if (isPoint === void 0) { isPoint = false; }\n    var ids = ['NaN', 'NaN'];\n    if (id.indexOf('_Point_') > -1) {\n        ids = id.split('_Series_')[1].split('_Point_');\n    }\n    else if (id.indexOf('_shape_') > -1 && (!isPoint || (isPoint && id.indexOf('_legend_') === -1))) {\n        ids = id.split('_shape_');\n        ids[0] = '0';\n    }\n    else if (id.indexOf('_text_') > -1 && (!isPoint || (isPoint && id.indexOf('_legend_') === -1))) {\n        ids = id.split('_text_');\n        ids[0] = '0';\n    }\n    return new Index(parseInt(ids[0], 10), parseInt(ids[1], 10));\n}\n/** @private */\nexport function CoefficientToVector(coefficient, startAngle) {\n    startAngle = startAngle < 0 ? startAngle + 360 : startAngle;\n    var angle = Math.PI * (1.5 - 2 * coefficient);\n    angle = angle + (startAngle * Math.PI) / 180;\n    return { x: Math.cos(angle), y: Math.sin(angle) };\n}\n/** @private */\nexport function valueToPolarCoefficient(value, axis) {\n    var range = axis.visibleRange;\n    var delta;\n    var length;\n    if (axis.valueType !== 'Category') {\n        delta = (range.max - (axis.valueType === 'DateTime' ? axis.dateTimeInterval : range.interval)) - range.min;\n        length = axis.visibleLabels.length - 1;\n        delta = delta === 0 ? 1 : delta;\n    }\n    else {\n        // To split an interval equally based on visible labels count\n        delta = axis.visibleLabels.length === 1 ? 1 :\n            (axis.visibleLabels[axis.visibleLabels.length - 1].value - axis.visibleLabels[0].value);\n        length = axis.visibleLabels.length;\n    }\n    return axis.isAxisInverse ? ((value - range.min) / delta) * (1 - 1 / (length)) :\n        1 - ((value - range.min) / delta) * (1 - 1 / (length));\n}\n/** @private */\nvar Mean = /** @class */ (function () {\n    function Mean(verticalStandardMean, verticalSquareRoot, horizontalStandardMean, horizontalSquareRoot, verticalMean, horizontalMean) {\n        this.verticalStandardMean = verticalStandardMean;\n        this.horizontalStandardMean = horizontalStandardMean;\n        this.verticalSquareRoot = verticalSquareRoot;\n        this.horizontalSquareRoot = horizontalSquareRoot;\n        this.verticalMean = verticalMean;\n        this.horizontalMean = horizontalMean;\n    }\n    return Mean;\n}());\nexport { Mean };\n/** @private */\nvar PolarArc = /** @class */ (function () {\n    function PolarArc(startAngle, endAngle, innerRadius, radius, currentXPosition) {\n        this.startAngle = startAngle;\n        this.endAngle = endAngle;\n        this.innerRadius = innerRadius;\n        this.radius = radius;\n        this.currentXPosition = currentXPosition;\n    }\n    return PolarArc;\n}());\nexport { PolarArc };\n/** @private */\nexport function createTooltip(id, text, top, left, fontSize) {\n    var tooltip = getElement(id);\n    var style = 'top:' + top.toString() + 'px;' +\n        'left:' + left.toString() + 'px;' +\n        'color:black !important; ' +\n        'background:#FFFFFF !important; ' +\n        'position:absolute;border:1px solid #707070;font-size:' + fontSize + ';border-radius:2px; z-index:1';\n    if (!tooltip) {\n        tooltip = createElement('div', {\n            id: id, innerHTML: '&nbsp;' + text + '&nbsp;', styles: style\n        });\n        document.body.appendChild(tooltip);\n    }\n    else {\n        tooltip.setAttribute('innerHTML', '&nbsp;' + text + '&nbsp;');\n        tooltip.setAttribute('styles', style);\n    }\n}\n/** @private */\nexport function createZoomingLabels(chart, axis, parent, index, isVertical, rect) {\n    var margin = 5;\n    var opposedPosition = axis.isAxisOpposedPosition;\n    var anchor = chart.enableRtl ? 'end' : isVertical ? 'start' : 'auto';\n    var size;\n    var chartRect = chart.availableSize.width;\n    var pathElement;\n    var x;\n    var y;\n    var rx = 3;\n    var arrowLocation;\n    var direction;\n    var scrollBarHeight = axis.scrollbarSettings.enable || (axis.zoomingScrollBar && axis.zoomingScrollBar.svgObject)\n        ? axis.scrollBarHeight : 0;\n    var isRtlEnabled = (chart.enableRtl && !isVertical && !axis.isInversed) || (axis.isInversed && !(chart.enableRtl && !isVertical));\n    for (var i = 0; i < 2; i++) {\n        size = measureText(i ? (isRtlEnabled ? axis.startLabel : axis.endLabel) : (isRtlEnabled ? axis.endLabel : axis.startLabel), axis.labelStyle, chart.themeStyle.axisLabelFont);\n        if (isVertical) {\n            arrowLocation = i ? new ChartLocation(rect.x - scrollBarHeight, rect.y + rx) :\n                new ChartLocation(axis.rect.x - scrollBarHeight, (rect.y + rect.height - rx));\n            x = (rect.x + (opposedPosition ? (rect.width + margin + scrollBarHeight) : -(size.width + margin + margin + scrollBarHeight)));\n            y = (rect.y + (i ? 0 : rect.height - size.height - margin));\n            x += (x < 0 || ((chartRect) < (x + size.width + margin))) ? (opposedPosition ? -(size.width / 2) : size.width / 2) : 0;\n            direction = findCrosshairDirection(rx, rx, new Rect(x, y, size.width + margin, size.height + margin), arrowLocation, margin, false, false, !opposedPosition, arrowLocation.x, arrowLocation.y + (i ? -rx : rx));\n        }\n        else {\n            arrowLocation = i ? new ChartLocation((rect.x + rect.width - rx), (rect.y + rect.height + scrollBarHeight)) :\n                new ChartLocation(rect.x + rx, (rect.y + rect.height + scrollBarHeight));\n            x = (rect.x + (i ? (rect.width - size.width - margin) : 0));\n            y = (opposedPosition ? (rect.y - size.height - 10 - scrollBarHeight) : (rect.y + rect.height + margin + scrollBarHeight));\n            direction = findCrosshairDirection(rx, rx, new Rect(x, y, size.width + margin, size.height + margin), arrowLocation, margin, opposedPosition, !opposedPosition, false, arrowLocation.x + (i ? rx : -rx), arrowLocation.y);\n        }\n        x = x + (margin / 2);\n        y = y + (3 * (size.height / 4)) + (margin / 2);\n        pathElement = chart.renderer.drawPath({\n            'id': chart.element.id + '_Zoom_' + index + '_AxisLabel_Shape_' + i,\n            'fill': chart.themeStyle.crosshairFill, 'width': 2, 'color': chart.themeStyle.crosshairFill,\n            'opacity': 1, 'stroke-dasharray': null, 'd': direction\n        }, null);\n        parent.appendChild(pathElement);\n        if (chart.theme === 'Fluent' || chart.theme === 'FluentDark') {\n            var shadowId = chart.element.id + '_shadow';\n            pathElement.setAttribute('filter', Browser.isIE ? '' : 'url(#' + shadowId + ')');\n            var shadow = '<filter id=\"' + shadowId + '\" height=\"130%\"><feGaussianBlur in=\"SourceAlpha\" stdDeviation=\"3\"/>';\n            shadow += '<feOffset dx=\"3\" dy=\"3\" result=\"offsetblur\"/><feComponentTransfer><feFuncA type=\"linear\" slope=\"0.5\"/>';\n            shadow += '</feComponentTransfer><feMerge><feMergeNode/><feMergeNode in=\"SourceGraphic\"/></feMerge></filter>';\n            var defElement = chart.renderer.createDefs();\n            defElement.setAttribute('id', chart.element.id + 'SVG_tooltip_definition');\n            parent.appendChild(defElement);\n            defElement.innerHTML = shadow;\n            pathElement.setAttribute('stroke', '#cccccc');\n            pathElement.setAttribute('stroke-width', '0.5');\n        }\n        textElement(chart.renderer, new TextOption(chart.element.id + '_Zoom_' + index + '_AxisLabel_' + i, x, y, anchor, i ? (isRtlEnabled ? axis.startLabel : axis.endLabel) : (isRtlEnabled ? axis.endLabel : axis.startLabel)), { color: chart.themeStyle.crosshairLabelFont.color, fontFamily: 'Segoe UI', fontWeight: 'Regular', size: '11px' }, chart.themeStyle.crosshairLabelFont.color, parent, null, null, null, null, null, null, null, null, null, null, chart.themeStyle.crosshairLabelFont);\n    }\n    return parent;\n}\n/** @private */\nexport function findCrosshairDirection(rX, rY, rect, arrowLocation, arrowPadding, top, bottom, left, tipX, tipY) {\n    var direction = '';\n    var startX = rect.x;\n    var startY = rect.y;\n    var width = rect.x + rect.width;\n    var height = rect.y + rect.height;\n    if (top) {\n        direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n            + startY + ' ' + (startX + rX) + ' ' + startY);\n        direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + width + ' '\n            + startY + ' ' + (width) + ' ' + (startY + rY));\n        direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' '\n            + (height) + ' ' + (width - rX) + ' ' + (height));\n        if (arrowPadding !== 0) {\n            direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (height));\n            direction = direction.concat(' L' + ' ' + (tipX) + ' ' + (height + arrowPadding)\n                + ' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + height);\n        }\n        if ((arrowLocation.x - arrowPadding / 2) > startX) {\n            direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n                + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n        }\n        else {\n            if (arrowPadding === 0) {\n                direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + height + ' Q ' + startX + ' '\n                    + height + ' ' + (startX) + ' ' + (height - rY) + ' z');\n            }\n            else {\n                direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height + rY) + ' z');\n            }\n        }\n    }\n    else if (bottom) {\n        direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n            + (startY) + ' ' + (startX + rX) + ' ' + (startY) + ' L' + ' ' + (arrowLocation.x - arrowPadding / 2) + ' ' + (startY));\n        direction = direction.concat(' L' + ' ' + (tipX) + ' ' + (arrowLocation.y));\n        direction = direction.concat(' L' + ' ' + (arrowLocation.x + arrowPadding / 2) + ' ' + (startY));\n        direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY)\n            + ' Q ' + (width) + ' ' + (startY) + ' ' + (width) + ' ' + (startY + rY));\n        direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + (width) + ' '\n            + (height) + ' ' + (width - rX) + ' ' + (height));\n        direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + (startX) + ' '\n            + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n    }\n    else if (left) {\n        direction = direction.concat('M' + ' ' + (startX) + ' ' + (startY + rY) + ' Q ' + startX + ' '\n            + (startY) + ' ' + (startX + rX) + ' ' + (startY));\n        direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (startY) + ' Q ' + (width) + ' '\n            + (startY) + ' ' + (width) + ' ' + (startY + rY) + ' L' + ' ' + (width) + ' ' + (arrowLocation.y - arrowPadding / 2));\n        direction = direction.concat(' L' + ' ' + (width + arrowPadding) + ' ' + (tipY));\n        direction = direction.concat(' L' + ' ' + (width) + ' ' + (arrowLocation.y + arrowPadding / 2));\n        direction = direction.concat(' L' + ' ' + (width) + ' ' + (height - rY) + ' Q ' + width + ' ' + (height) + ' ' + (width - rX) + ' ' + (height));\n        direction = direction.concat(' L' + ' ' + (startX + rX) + ' ' + (height) + ' Q ' + startX + ' '\n            + (height) + ' ' + (startX) + ' ' + (height - rY) + ' z');\n    }\n    else {\n        direction = direction.concat('M' + ' ' + (startX + rX) + ' ' + (startY) + ' Q ' + (startX) + ' '\n            + (startY) + ' ' + (startX) + ' ' + (startY + rY) + ' L' + ' ' + (startX) + ' ' + (arrowLocation.y - arrowPadding / 2));\n        direction = direction.concat(' L' + ' ' + (startX - arrowPadding) + ' ' + (tipY));\n        direction = direction.concat(' L' + ' ' + (startX) + ' ' + (arrowLocation.y + arrowPadding / 2));\n        direction = direction.concat(' L' + ' ' + (startX) + ' ' + (height - rY) + ' Q ' + startX + ' '\n            + (height) + ' ' + (startX + rX) + ' ' + (height));\n        direction = direction.concat(' L' + ' ' + (width - rX) + ' ' + (height) + ' Q ' + width + ' '\n            + (height) + ' ' + (width) + ' ' + (height - rY));\n        direction = direction.concat(' L' + ' ' + (width) + ' ' + (startY + rY) + ' Q ' + width + ' '\n            + (startY) + ' ' + (width - rX) + ' ' + (startY) + ' z');\n    }\n    return direction;\n}\n//Within bounds\n/** @private */\nexport function withInBounds(x, y, bounds, width, height) {\n    if (width === void 0) { width = 0; }\n    if (height === void 0) { height = 0; }\n    return (x >= bounds.x - width && x <= bounds.x + bounds.width + width && y >= bounds.y - height\n        && y <= bounds.y + bounds.height + height);\n}\n/** @private */\nexport function getValueXByPoint(value, size, axis) {\n    var actualValue = !axis.isAxisInverse ? value / size : (1 - (value / size));\n    return actualValue * (axis.visibleRange.delta) + axis.visibleRange.min;\n}\n/** @private */\nexport function getValueYByPoint(value, size, axis) {\n    var actualValue = axis.isAxisInverse ? value / size : (1 - (value / size));\n    return actualValue * (axis.visibleRange.delta) + axis.visibleRange.min;\n}\n/** @private */\nexport function findClipRect(series, isCanvas) {\n    if (isCanvas === void 0) { isCanvas = false; }\n    var rect = series.clipRect;\n    if (isCanvas && (series.type === 'Polar' || series.type === 'Radar')) {\n        if (series.drawType === 'Scatter') {\n            rect.x = series.xAxis.rect.x;\n            rect.y = series.yAxis.rect.y;\n            rect.width = series.xAxis.rect.width;\n            rect.height = series.yAxis.rect.height;\n        }\n        else {\n            rect.x = series.xAxis.rect.x / 2;\n            rect.y = series.yAxis.rect.y / 2;\n            rect.width = series.xAxis.rect.width;\n            rect.height = series.yAxis.rect.height;\n        }\n    }\n    else {\n        if (series.chart.requireInvertedAxis) {\n            rect.x = series.yAxis.rect.x;\n            rect.y = series.xAxis.rect.y;\n            rect.width = series.yAxis.rect.width;\n            rect.height = series.xAxis.rect.height;\n        }\n        else {\n            rect.x = series.xAxis.rect.x;\n            rect.y = series.yAxis.rect.y;\n            rect.width = series.xAxis.rect.width;\n            rect.height = series.yAxis.rect.height;\n        }\n    }\n}\n/** @private */\nexport function firstToLowerCase(str) {\n    return str.substr(0, 1).toLowerCase() + str.substr(1);\n}\n/** @private */\nexport function getTransform(xAxis, yAxis, invertedAxis) {\n    var x;\n    var y;\n    var width;\n    var height;\n    if (invertedAxis) {\n        x = yAxis.rect.x;\n        y = xAxis.rect.y;\n        width = yAxis.rect.width;\n        height = xAxis.rect.height;\n    }\n    else {\n        x = xAxis.rect.x;\n        y = yAxis.rect.y;\n        width = xAxis.rect.width;\n        height = yAxis.rect.height;\n    }\n    return new Rect(x, y, width, height);\n}\n/** @private */\nexport function getMinPointsDelta(axis, seriesCollection) {\n    var minDelta = Number.MAX_VALUE;\n    var xValues;\n    var minVal;\n    var seriesMin;\n    var stackingGroups = [];\n    for (var index = 0; index < seriesCollection.length; index++) {\n        var series = seriesCollection[index];\n        xValues = [];\n        if (series.visible &&\n            (axis.name === series.xAxisName || (axis.name === 'primaryXAxis' && series.xAxisName === null)\n                || (axis.name === series.chart.primaryXAxis.name && !series.xAxisName))) {\n            if (series.type.indexOf('Stacking') > -1 && stackingGroups.indexOf(series.stackingGroup) === -1) {\n                stackingGroups.push(series.stackingGroup);\n            }\n            xValues = series.points.map(function (point) {\n                return point.xValue;\n            });\n            xValues.sort(function (first, second) { return first - second; });\n            if (xValues.length === 1) {\n                seriesMin = (axis.valueType === 'DateTime' && series.xMin === series.xMax) ? (series.xMin - 25920000) : series.xMin;\n                minVal = xValues[0] - (!isNullOrUndefined(seriesMin) ?\n                    seriesMin : axis.visibleRange.min);\n                if (minVal !== 0) {\n                    minDelta = Math.min(minDelta, minVal);\n                }\n            }\n            else {\n                for (var index_1 = 0; index_1 < xValues.length; index_1++) {\n                    var value = xValues[index_1];\n                    if (index_1 > 0 && value) {\n                        minVal = series.type.indexOf('Stacking') > -1 && axis.valueType == \"Category\" ? stackingGroups.length : value - xValues[index_1 - 1];\n                        if (minVal !== 0) {\n                            minDelta = Math.min(minDelta, minVal);\n                        }\n                    }\n                }\n            }\n        }\n    }\n    if (minDelta === Number.MAX_VALUE) {\n        minDelta = 1;\n    }\n    return minDelta;\n}\n/** @private */\nexport function getAnimationFunction(effect) {\n    var functionName;\n    switch (effect) {\n        case 'Linear':\n            functionName = linear;\n            break;\n    }\n    return functionName;\n}\n/**\n * Animation Effect Calculation Started Here\n *\n * @param {number} currentTime currentTime\n * @param {number} startValue startValue of the animation\n * @param {number} endValue endValue of the animation\n * @param {number} duration duration of the animation\n * @private\n */\nexport function linear(currentTime, startValue, endValue, duration) {\n    return -endValue * Math.cos(currentTime / duration * (Math.PI / 2)) + endValue + startValue;\n}\n/**\n * Animation Effect Calculation End\n *\n * @private\n */\nexport function markerAnimate(element, delay, duration, series, pointIndex, point, isLabel) {\n    var centerX = point.x;\n    var centerY = point.y;\n    var height = 0;\n    element.style.visibility = 'hidden';\n    var transform = element.getAttribute('transform');\n    new Animation({}).animate(element, {\n        duration: duration,\n        delay: delay,\n        progress: function (args) {\n            if (args.timeStamp > args.delay) {\n                args.element.style.visibility = 'visible';\n                height = ((args.timeStamp - args.delay) / args.duration);\n                element.setAttribute('transform', 'translate(' + centerX\n                    + ' ' + centerY + ') scale(' + height + ') translate(' + (-centerX) + ' ' + (-centerY) + ')');\n            }\n        },\n        end: function () {\n            element.style.visibility = '';\n            element.setAttribute('transform', transform ? transform : '');\n            if ((series.type === 'Scatter' || series.type === 'Bubble') && !isLabel && (pointIndex === series.points.length - 1)) {\n                series.chart.trigger('animationComplete', { series: series.chart.isBlazor ? {} : series });\n            }\n        }\n    });\n}\n/**\n * Animate the rect element.\n */\nexport function animateRectElement(element, delay, duration, currentRect, previousRect) {\n    var setStyle = function (rect) {\n        element.setAttribute('x', rect.x + '');\n        element.setAttribute('y', rect.y + '');\n        element.setAttribute('width', rect.width + '');\n        element.setAttribute('height', rect.height + '');\n    };\n    new Animation({}).animate(createElement('div'), {\n        duration: duration,\n        delay: delay,\n        //name: name,\n        progress: function (args) {\n            setStyle(new Rect(linear(args.timeStamp, previousRect.x, currentRect.x - previousRect.x, args.duration), linear(args.timeStamp, previousRect.y, currentRect.y - previousRect.y, args.duration), linear(args.timeStamp, previousRect.width, currentRect.width - previousRect.width, args.duration), linear(args.timeStamp, previousRect.height, currentRect.height - previousRect.height, args.duration)));\n        },\n        end: function () {\n            setStyle(currentRect);\n        }\n    });\n}\n/**\n * Animation after legend click a path.\n *\n * @param {Element} element element to be animated\n * @param {string} direction current direction of the path\n * @param {boolean} redraw chart redraw\n * @param {string} previousDirection previous direction of the path\n * @param {number} animateDuration animateDuration of the path\n */\nexport function pathAnimation(element, direction, redraw, previousDirection, animateDuration) {\n    if (!redraw || (!previousDirection && !element)) {\n        return null;\n    }\n    var duration = 300;\n    if (animateDuration) {\n        duration = animateDuration;\n    }\n    var startDirections = previousDirection || element.getAttribute('d');\n    var splitDirections = startDirections.split(/(?=[LMCZAQ])/);\n    var endDirections = direction.split(/(?=[LMCZAQ])/);\n    var currentDireciton;\n    var startPath = [];\n    var endPath = [];\n    var c;\n    var end;\n    element.setAttribute('d', startDirections);\n    new Animation({}).animate(createElement('div'), {\n        duration: duration,\n        progress: function (args) {\n            currentDireciton = '';\n            splitDirections.map(function (directions, index) {\n                startPath = directions.split(' ');\n                endPath = endDirections[index] ? endDirections[index].split(' ') : startPath;\n                if (startPath[0] === 'Z') {\n                    currentDireciton += 'Z' + ' ';\n                }\n                else if (startPath[0] === '') {\n                    currentDireciton = '';\n                }\n                else {\n                    currentDireciton += startPath[0] + ' ' +\n                        linear(args.timeStamp, +startPath[1], (+endPath[1] - +startPath[1]), args.duration) + ' ' +\n                        linear(args.timeStamp, +startPath[2], (+endPath[2] - +startPath[2]), args.duration) + ' ';\n                }\n                if (startPath[0] === 'C' || startPath[0] === 'Q') {\n                    c = 3;\n                    end = startPath[0] === 'Q' ? 4 : 6;\n                    while (c < end) {\n                        currentDireciton += linear(args.timeStamp, +startPath[c], (+endPath[c] - +startPath[c]), args.duration) + ' ' +\n                            linear(args.timeStamp, +startPath[++c], (+endPath[c] - +startPath[c]), args.duration) + ' ';\n                        ++c;\n                    }\n                }\n                if (startPath[0] === 'A') {\n                    currentDireciton += 0 + ' ' + 0 + ' ' + 1 + ' ' +\n                        linear(args.timeStamp, +startPath[6], (+endPath[6] - +startPath[6]), args.duration) + ' ' +\n                        linear(args.timeStamp, +startPath[7], (+endPath[7] - +startPath[7]), args.duration) + ' ';\n                }\n            });\n            element.setAttribute('d', currentDireciton);\n        },\n        end: function () {\n            element.setAttribute('d', direction);\n        }\n    });\n}\n/**\n * To append the clip rect element.\n *\n * @param {boolean} redraw chart redraw value\n * @param {BaseAttibutes} options element options\n * @param {SvgRenderer} renderer svg renderer values\n * @param {string} clipPath clipPath of the element\n */\nexport function appendClipElement(redraw, options, renderer, clipPath) {\n    if (clipPath === void 0) { clipPath = 'drawClipPath'; }\n    var clipElement = redrawElement(redraw, options.id, options, renderer);\n    if (clipElement) {\n        var def = renderer.createDefs();\n        def.appendChild(clipElement);\n        return def;\n    }\n    else {\n        return renderer[clipPath](options);\n    }\n}\n/**\n * Triggers the event.\n *\n * @returns {void}\n * @private\n */\nexport function triggerLabelRender(chart, tempInterval, text, labelStyle, axis) {\n    var argsData = {\n        cancel: false, name: axisLabelRender, axis: axis,\n        text: text, value: tempInterval, labelStyle: labelStyle\n    };\n    chart.trigger(axisLabelRender, argsData);\n    if (!argsData.cancel) {\n        var isLineBreakLabels = argsData.text.indexOf('<br>') !== -1;\n        var text_1 = (axis.enableTrim) ? (isLineBreakLabels ?\n            lineBreakLabelTrim(axis.maximumLabelWidth, argsData.text, axis.labelStyle, chart.themeStyle.axisLabelFont) :\n            textTrim(axis.maximumLabelWidth, argsData.text, axis.labelStyle, chart.enableRtl, chart.themeStyle.axisLabelFont)) : argsData.text;\n        axis.visibleLabels.push(new VisibleLabels(text_1, argsData.value, argsData.labelStyle, argsData.text));\n    }\n}\n/**\n * The function used to find whether the range is set.\n *\n * @returns {boolean} It returns true if the axis range is set otherwise false.\n * @private\n */\nexport function setRange(axis) {\n    return (axis.minimum != null && axis.maximum != null);\n}\n/**\n * To check whether the axis is zoomed or not.\n *\n * @param {Axis} axis axis model\n */\nexport function isZoomSet(axis) {\n    return (axis.zoomFactor < 1 && axis.zoomPosition >= 0);\n}\n/**\n * Calculate desired interval for the axis.\n *\n * @returns {void} It returns desired interval count.\n * @private\n */\nexport function getActualDesiredIntervalsCount(availableSize, axis) {\n    var size = axis.orientation === 'Horizontal' ? availableSize.width : availableSize.height;\n    if (isNullOrUndefined(axis.desiredIntervals)) {\n        var desiredIntervalsCount = (axis.orientation === 'Horizontal' ? 0.533 : 1) * axis.maximumLabels;\n        desiredIntervalsCount = Math.max((size * (desiredIntervalsCount / 100)), 1);\n        return desiredIntervalsCount;\n    }\n    else {\n        return axis.desiredIntervals;\n    }\n}\n/**\n * Animation for template\n *\n * @private\n */\nexport function templateAnimate(element, delay, duration, name, isRemove) {\n    new Animation({}).animate(element, {\n        duration: duration,\n        delay: delay,\n        name: name,\n        progress: function (args) {\n            args.element.style.visibility = 'visible';\n        },\n        end: function (args) {\n            if (isRemove) {\n                remove(args.element);\n            }\n            else {\n                args.element.style.visibility = 'visible';\n            }\n        }\n    });\n}\n/** @private */\nexport function drawSymbol(location, shape, size, url, options, label, renderer, clipRect, isChartControl, control) {\n    var chartRenderer = renderer ? renderer : new SvgRenderer('');\n    var shapeOption = calculateShapes(location, size, shape, options, url, isChartControl, control);\n    var drawElement = chartRenderer['draw' + shapeOption.functionName](shapeOption.renderOption, clipRect ? new Int32Array([clipRect.x, clipRect.y]) : null);\n    //drawElement.setAttribute('aria-label', label);\n    return drawElement;\n}\n/** @private */\nexport function calculateShapes(location, size, shape, options, url, isChart, control) {\n    var dir;\n    var functionName = 'Path';\n    var isBulletChart = isChart;\n    var width = (isBulletChart && shape === 'Circle') ? (size.width - 2) : size.width;\n    var height = (isBulletChart && shape === 'Circle') ? (size.height - 2) : size.height;\n    var sizeBullet = (isBulletChart) ? control.targetWidth : 0;\n    var lx = location.x;\n    var ly = location.y;\n    var y = location.y + (-height / 2);\n    var x = location.x + (-width / 2);\n    var eq = 72;\n    var xVal;\n    var yVal;\n    switch (shape) {\n        case 'Bubble':\n        case 'Circle':\n            functionName = 'Ellipse';\n            merge(options, { 'rx': width / 2, 'ry': height / 2, 'cx': lx, 'cy': ly });\n            break;\n        case 'Plus':\n            dir = 'M' + ' ' + x + ' ' + ly + ' ' + 'L' + ' ' + (lx + (width / 2)) + ' ' + ly + ' ' +\n                'M' + ' ' + lx + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + lx + ' ' +\n                (ly + (-height / 2));\n            merge(options, { 'd': dir });\n            break;\n        case 'Cross':\n            dir = 'M' + ' ' + x + ' ' + (ly + (-height / 2)) + ' ' + 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (height / 2)) + ' ' +\n                'M' + ' ' + x + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (-height / 2));\n            merge(options, { 'd': dir });\n            break;\n        case 'Multiply':\n            dir = 'M ' + (lx - sizeBullet) + ' ' + (ly - sizeBullet) + ' L ' +\n                (lx + sizeBullet) + ' ' + (ly + sizeBullet) + ' M ' +\n                (lx - sizeBullet) + ' ' + (ly + sizeBullet) + ' L ' + (lx + sizeBullet) + ' ' + (ly - sizeBullet);\n            merge(options, { 'd': dir, stroke: options.fill });\n            break;\n        case 'HorizontalLine':\n            dir = 'M' + ' ' + x + ' ' + ly + ' ' + 'L' + ' ' + (lx + (width / 2)) + ' ' + ly;\n            merge(options, { 'd': dir });\n            break;\n        case 'VerticalLine':\n            dir = 'M' + ' ' + lx + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + lx + ' ' + (ly + (-height / 2));\n            merge(options, { 'd': dir });\n            break;\n        case 'Diamond':\n            dir = 'M' + ' ' + x + ' ' + ly + ' ' +\n                'L' + ' ' + lx + ' ' + (ly + (-height / 2)) + ' ' +\n                'L' + ' ' + (lx + (width / 2)) + ' ' + ly + ' ' +\n                'L' + ' ' + lx + ' ' + (ly + (height / 2)) + ' ' +\n                'L' + ' ' + x + ' ' + ly + ' z';\n            merge(options, { 'd': dir });\n            break;\n        case 'ActualRect':\n            dir = 'M' + ' ' + x + ' ' + (ly + (-height / 8)) + ' ' +\n                'L' + ' ' + (lx + (sizeBullet)) + ' ' + (ly + (-height / 8)) + ' ' +\n                'L' + ' ' + (lx + (sizeBullet)) + ' ' + (ly + (height / 8)) + ' ' +\n                'L' + ' ' + x + ' ' + (ly + (height / 8)) + ' ' +\n                'L' + ' ' + x + ' ' + (ly + (-height / 8)) + ' z';\n            merge(options, { 'd': dir });\n            break;\n        case 'TargetRect':\n            dir = 'M' + ' ' + (x + (sizeBullet)) + ' ' + (ly + (-height / 2)) + ' ' +\n                'L' + ' ' + (lx + (sizeBullet / 2)) + ' ' + (ly + (-height / 2)) + ' ' +\n                'L' + ' ' + (lx + (sizeBullet / 2)) + ' ' + (ly + (height / 2)) + ' ' +\n                'L' + ' ' + (x + (sizeBullet)) + ' ' + (ly + (height / 2)) + ' ' +\n                'L' + ' ' + (x + (sizeBullet)) + ' ' + (ly + (-height / 2)) + ' z';\n            merge(options, { 'd': dir });\n            break;\n        case 'Rectangle':\n        case 'Hilo':\n        case 'HiloOpenClose':\n        case 'Candle':\n        case 'Waterfall':\n        case 'BoxAndWhisker':\n        case 'StepArea':\n        case 'RangeStepArea':\n        case 'StackingStepArea':\n        case 'Square':\n        case 'Flag':\n            dir = 'M' + ' ' + x + ' ' + (ly + (-height / 2)) + ' ' +\n                'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (-height / 2)) + ' ' +\n                'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (height / 2)) + ' ' +\n                'L' + ' ' + x + ' ' + (ly + (height / 2)) + ' ' +\n                'L' + ' ' + x + ' ' + (ly + (-height / 2)) + ' z';\n            merge(options, { 'd': dir });\n            break;\n        case 'Pyramid':\n        case 'Triangle':\n            dir = 'M' + ' ' + x + ' ' + (ly + (height / 2)) + ' ' +\n                'L' + ' ' + lx + ' ' + (ly + (-height / 2)) + ' ' +\n                'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (height / 2)) + ' ' +\n                'L' + ' ' + x + ' ' + (ly + (height / 2)) + ' z';\n            merge(options, { 'd': dir });\n            break;\n        case 'Funnel':\n        case 'InvertedTriangle':\n            dir = 'M' + ' ' + (lx + (width / 2)) + ' ' + (ly - (height / 2)) + ' ' +\n                'L' + ' ' + lx + ' ' + (ly + (height / 2)) + ' ' +\n                'L' + ' ' + (lx - (width / 2)) + ' ' + (ly - (height / 2)) + ' ' +\n                'L' + ' ' + (lx + (width / 2)) + ' ' + (ly - (height / 2)) + ' z';\n            merge(options, { 'd': dir });\n            break;\n        case 'Pentagon':\n            for (var i = 0; i <= 5; i++) {\n                xVal = (width / 2) * Math.cos((Math.PI / 180) * (i * eq));\n                yVal = (height / 2) * Math.sin((Math.PI / 180) * (i * eq));\n                if (i === 0) {\n                    dir = 'M' + ' ' + (lx + xVal) + ' ' + (ly + yVal) + ' ';\n                }\n                else {\n                    dir = dir.concat('L' + ' ' + (lx + xVal) + ' ' + (ly + yVal) + ' ');\n                }\n            }\n            dir = dir.concat('Z');\n            merge(options, { 'd': dir });\n            break;\n        case 'Image':\n            functionName = 'Image';\n            merge(options, { 'href': url, 'height': height, 'width': width, x: x, y: y });\n            break;\n    }\n    options = calculateLegendShapes(location, new Size(width, height), shape, options).renderOption;\n    return { renderOption: options, functionName: functionName };\n}\n/** @private */\nexport function getRectLocation(startLocation, endLocation, outerRect) {\n    var x = (endLocation.x < outerRect.x) ? outerRect.x :\n        (endLocation.x > (outerRect.x + outerRect.width)) ? outerRect.x + outerRect.width : endLocation.x;\n    var y = (endLocation.y < outerRect.y) ? outerRect.y :\n        (endLocation.y > (outerRect.y + outerRect.height)) ? outerRect.y + outerRect.height : endLocation.y;\n    return new Rect((x > startLocation.x ? startLocation.x : x), (y > startLocation.y ? startLocation.y : y), Math.abs(x - startLocation.x), Math.abs(y - startLocation.y));\n}\n/** @private */\nexport function minMax(value, min, max) {\n    return value > max ? max : (value < min ? min : value);\n}\n/** @private */\nexport function getElement(id) {\n    return document.getElementById(id);\n}\n/** @private */\nexport function getTemplateFunction(template) {\n    var templateFn = null;\n    try {\n        if (typeof template !== 'function' && document.querySelectorAll(template).length) {\n            templateFn = templateComplier(document.querySelector(template).innerHTML.trim());\n        }\n        else {\n            templateFn = templateComplier(template);\n        }\n    }\n    catch (e) {\n        templateFn = templateComplier(template);\n    }\n    return templateFn;\n}\n/** @private */\nexport function accReactTemplate(childElement, chart, isTemplate, points, argsData, point, datalabelGroup, id, dataLabel, redraw) {\n    var clientRect = childElement.getBoundingClientRect();\n    chart.accumulationDataLabelModule.calculateLabelSize(isTemplate, childElement, point, points, argsData, datalabelGroup, id, dataLabel, redraw, clientRect, true);\n}\n/** @private */\nexport function chartReactTemplate(childElement, chart, point, series, labelIndex, redraw) {\n    var parentElement = document.getElementById(chart.element.id + '_Series_' + (series.index === undefined ? series.category : series.index) + '_DataLabelCollections');\n    if (parentElement) {\n        if (point.index === 0) {\n            chart.dataLabelCollections = []; // clear old datalabel bounds for react callback\n        }\n        chart.dataLabelModule.calculateTemplateLabelSize(parentElement, childElement, point, series, series.marker.dataLabel, labelIndex, series.clipRect, redraw, true);\n    }\n}\n/** @private */\nexport function createTemplate(childElement, pointIndex, content, chart, point, series, dataLabelId, labelIndex, argsData, isTemplate, points, datalabelGroup, id, dataLabel, redraw) {\n    var templateFn = getTemplateFunction(content);\n    var templateElement;\n    try {\n        var blazor = 'Blazor';\n        var tempObject = window[blazor] ? (dataLabelId ? point : { point: point }) :\n            { chart: chart, series: series, point: point };\n        var templateId = dataLabelId ? dataLabelId + '_template' : 'template';\n        var elementData = templateFn ? templateFn(tempObject, chart, templateId, dataLabelId ||\n            childElement.id.replace(/[^a-zA-Z0-9]/g, '')) : [];\n        if (elementData.length) {\n            templateElement = Array.prototype.slice.call(elementData);\n            var len = templateElement.length;\n            for (var i = 0; i < len; i++) {\n                childElement.appendChild(templateElement[i]);\n            }\n        }\n        var reactCallback = void 0;\n        if (chart.getModuleName() === 'accumulationchart') {\n            reactCallback = accReactTemplate.bind(this, childElement, chart, isTemplate, points, argsData, points[pointIndex], datalabelGroup, id, dataLabel, redraw);\n            // tslint:disable-next-line:no-any\n            if (chart.isReact) {\n                chart.renderReactTemplates(reactCallback);\n            }\n        }\n        else if (chart.getModuleName() === 'chart') {\n            reactCallback = (point && series) ? chartReactTemplate.bind(this, childElement, chart, point, series, labelIndex, redraw) : reactCallback;\n            // tslint:disable-next-line:no-any\n            if (chart.isReact) {\n                chart.renderReactTemplates(reactCallback);\n            }\n        }\n    }\n    catch (e) {\n        return childElement;\n    }\n    return childElement;\n}\n/** @private */\nexport function getFontStyle(font) {\n    var style = '';\n    style = 'font-size:' + font.size +\n        '; font-style:' + font.fontStyle + '; font-weight:' + font.fontWeight +\n        '; font-family:' + font.fontFamily + ';opacity:' + font.opacity +\n        '; color:' + font.color + ';';\n    return style;\n}\n/** @private */\nexport function measureElementRect(element, redraw, isReactCallback) {\n    if (redraw === void 0) { redraw = false; }\n    if (!isReactCallback) { // If the element is already in DOM, no need to append in the body.\n        document.body.appendChild(element);\n    }\n    var bounds = element.getBoundingClientRect();\n    if (redraw) {\n        remove(element);\n    }\n    else if (!isReactCallback) { // for react chart data label template - (callback function)\n        removeElement(element.id);\n    }\n    return bounds;\n}\n/** @private */\nexport function findlElement(elements, id) {\n    var element;\n    for (var i = 0, length_1 = elements.length; i < length_1; i++) {\n        if (elements[i].id.indexOf(id) > -1) {\n            element = elements[i];\n            continue;\n        }\n    }\n    return element;\n}\n/** @private */\nexport function getPoint(x, y, xAxis, yAxis, isInverted) {\n    x = ((xAxis.valueType === 'Logarithmic') ?\n        logBase(((x > 0) ? x : Math.pow(xAxis.logBase, xAxis.visibleRange.min)), xAxis.logBase) : x);\n    y = ((yAxis.valueType === 'Logarithmic') ?\n        logBase(((y > 0) ? y : Math.pow(yAxis.logBase, yAxis.visibleRange.min)), yAxis.logBase) : y);\n    x = valueToCoefficient(x, xAxis);\n    y = valueToCoefficient(y, yAxis);\n    var xLength = (isInverted ? xAxis.rect.height : xAxis.rect.width);\n    var yLength = (isInverted ? yAxis.rect.width : yAxis.rect.height);\n    var locationX = isInverted ? y * (yLength) : x * (xLength);\n    var locationY = isInverted ? (1 - x) * (xLength) : (1 - y) * (yLength);\n    return new ChartLocation(locationX, locationY);\n}\n/** @private */\nexport function appendElement(child, parent, redraw, animate, x, y) {\n    if (redraw === void 0) { redraw = false; }\n    if (animate === void 0) { animate = false; }\n    if (x === void 0) { x = 'x'; }\n    if (y === void 0) { y = 'y'; }\n    if (child && child.hasChildNodes() && parent) {\n        appendChildElement(false, parent, child, redraw, animate, x, y);\n    }\n    else {\n        return null;\n    }\n}\n/**\n * Method to append child element.\n *\n * @param {boolean} isCanvas canvas mode value\n * @param {Element} parent parent element\n * @param {Element} childElement childElement element\n * @param {boolean} redraw chart redraw value\n * @param {boolean} isAnimate animation value\n * @param {string} x x position\n * @param {string} y y position\n * @param {ChartLocation} start start location value\n * @param {string} direction direction of the element\n * @param {boolean} forceAnimate forceAnimate\n * @param {boolean} isRect isRect\n * @param {Rect} previousRect previousRect\n * @param {number} animateDuration duration of the animation\n */\nexport function appendChildElement(isCanvas, parent, childElement, redraw, isAnimate, x, y, start, direction, forceAnimate, isRect, previousRect, animateDuration, scatterElement) {\n    if (isAnimate === void 0) { isAnimate = false; }\n    if (x === void 0) { x = 'x'; }\n    if (y === void 0) { y = 'y'; }\n    if (forceAnimate === void 0) { forceAnimate = false; }\n    if (isRect === void 0) { isRect = false; }\n    if (previousRect === void 0) { previousRect = null; }\n    if (scatterElement === void 0) { scatterElement = false; }\n    if (isCanvas) {\n        return null;\n    }\n    var existChild = scatterElement ? null : parent.querySelector('#' + childElement.id);\n    var element = (existChild || getElement(childElement.id));\n    var child = childElement;\n    var duration = animateDuration ? animateDuration : 300;\n    if (redraw && isAnimate && element) {\n        start = start || (element.tagName === 'DIV' ?\n            new ChartLocation(+(element.style[x].split('px')[0]), +(element.style[y].split('px')[0])) :\n            new ChartLocation(+element.getAttribute(x), +element.getAttribute(y)));\n        if (direction && direction !== 'undefined') {\n            pathAnimation(childElement, childElement.getAttribute('d'), redraw, direction, duration);\n        }\n        else if (isRect && previousRect) {\n            animateRectElement(child, 0, duration, new Rect(+element.getAttribute('x'), +element.getAttribute('y'), +element.getAttribute('width'), +element.getAttribute('height')), previousRect);\n        }\n        else {\n            var end = child.tagName === 'DIV' ?\n                new ChartLocation(+(child.style[x].split('px')[0]), +(child.style[y].split('px')[0])) :\n                new ChartLocation(+child.getAttribute(x), +child.getAttribute(y));\n            animateRedrawElement(child, duration, start, end, x, y);\n        }\n    }\n    else if (redraw && isAnimate && !element && forceAnimate) {\n        templateAnimate(child, 0, 600, 'FadeIn');\n    }\n    if (existChild) {\n        parent.replaceChild(child, element);\n    }\n    else {\n        parent.appendChild(child);\n    }\n}\n/** @private */\nexport function getDraggedRectLocation(x1, y1, x2, y2, outerRect) {\n    var width = Math.abs(x1 - x2);\n    var height = Math.abs(y1 - y2);\n    var x = Math.max(checkBounds(Math.min(x1, x2), width, outerRect.x, outerRect.width), outerRect.x);\n    var y = Math.max(checkBounds(Math.min(y1, y2), height, outerRect.y, outerRect.height), outerRect.y);\n    return new Rect(x, y, Math.min(width, outerRect.width), Math.min(height, outerRect.height));\n}\n/** @private */\nexport function checkBounds(start, size, min, max) {\n    if (start < min) {\n        start = min;\n    }\n    else if ((start + size) > (max + min)) {\n        start = (max + min) - size;\n    }\n    return start;\n}\n/** @private */\nexport function getLabelText(currentPoint, series, chart) {\n    var labelFormat = series.marker.dataLabel.format ? series.marker.dataLabel.format : series.yAxis.labelFormat;\n    var text = [];\n    var customLabelFormat = labelFormat.match('{value}') !== null;\n    switch (series.seriesType) {\n        case 'XY':\n            /**\n             * I255790\n             * For Polar radar series, the dataLabel appears out of range when axis range is given for yaxis\n             * Cause: Since symbol location for the points which did not lies in within range, lies outside of seriesRect.\n             * Fix: DataLabel rendered after checking WithIn for the points\n             */\n            if (series.chart.chartAreaType === 'PolarRadar') {\n                if (series.drawType.indexOf('Stacking') !== -1) {\n                    if ((series.yAxis.valueType === 'Logarithmic' &&\n                        logWithIn(series.stackedValues.endValues[currentPoint.index], series.yAxis)) ||\n                        withIn(series.stackedValues.endValues[currentPoint.index], series.yAxis.visibleRange)) {\n                        text.push(currentPoint.text || currentPoint.yValue.toString());\n                    }\n                }\n                else {\n                    if ((series.yAxis.valueType === 'Logarithmic' && logWithIn(currentPoint.yValue, series.yAxis)) ||\n                        withIn(currentPoint.yValue, series.yAxis.visibleRange)) {\n                        text.push(currentPoint.text || currentPoint.yValue.toString());\n                    }\n                }\n            }\n            else {\n                text.push(currentPoint.text || currentPoint.yValue.toString());\n            }\n            break;\n        case 'HighLow':\n            text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n            text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n            break;\n        case 'HighLowOpenClose':\n            text.push(currentPoint.text || Math.max(currentPoint.high, currentPoint.low).toString());\n            text.push(currentPoint.text || Math.min(currentPoint.high, currentPoint.low).toString());\n            text.push(currentPoint.text || Math.max(currentPoint.open, currentPoint.close).toString());\n            text.push(currentPoint.text || Math.min(currentPoint.open, currentPoint.close).toString());\n            break;\n        case 'BoxPlot':\n            text.push(currentPoint.text || currentPoint.median.toString());\n            text.push(currentPoint.text || currentPoint.maximum.toString());\n            text.push(currentPoint.text || currentPoint.minimum.toString());\n            text.push(currentPoint.text || currentPoint.upperQuartile.toString());\n            text.push(currentPoint.text || currentPoint.lowerQuartile.toString());\n            for (var _i = 0, _a = currentPoint.outliers; _i < _a.length; _i++) {\n                var liers = _a[_i];\n                text.push(currentPoint.text || liers.toString());\n            }\n            break;\n    }\n    if ((labelFormat || chart.useGroupingSeparator) && !currentPoint.text) {\n        series.yAxis.format = chart.intl.getNumberFormat({\n            format: customLabelFormat ? '' : labelFormat,\n            useGrouping: chart.useGroupingSeparator\n        });\n        for (var i = 0; i < text.length; i++) {\n            text[i] = customLabelFormat ? labelFormat.replace('{value}', series.yAxis.format(parseFloat(text[i]))) :\n                series.yAxis.format(parseFloat(text[i]));\n        }\n    }\n    return text;\n}\n/** @private */\nexport function stopTimer(timer) {\n    window.clearInterval(timer);\n}\n/** @private */\nexport function isCollide(rect, collections, clipRect) {\n    var currentRect = new Rect(rect.x + clipRect.x, rect.y + clipRect.y, rect.width, rect.height);\n    var isCollide = collections.some(function (rect) {\n        return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n            currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n    });\n    return isCollide;\n}\n/** @private */\nexport function isOverlap(currentRect, rect) {\n    return (currentRect.x < rect.x + rect.width && currentRect.x + currentRect.width > rect.x &&\n        currentRect.y < rect.y + rect.height && currentRect.height + currentRect.y > rect.y);\n}\n/** @private */\nexport function containsRect(currentRect, rect) {\n    return (currentRect.x <= rect.x && currentRect.x + currentRect.width >= rect.x + rect.width &&\n        currentRect.y <= rect.y && currentRect.height + currentRect.y >= rect.y + rect.height);\n}\n/** @private */\nexport function calculateRect(location, textSize, margin) {\n    return new Rect((location.x - (textSize.width / 2) - margin.left), (location.y - (textSize.height / 2) - margin.top), textSize.width + margin.left + margin.right, textSize.height + margin.top + margin.bottom);\n}\n/** @private */\nexport function convertToHexCode(value) {\n    return '#' + componentToHex(value.r) + componentToHex(value.g) + componentToHex(value.b);\n}\n/** @private */\nexport function componentToHex(value) {\n    var hex = value.toString(16);\n    return hex.length === 1 ? '0' + hex : hex;\n}\n/** @private */\nexport function convertHexToColor(hex) {\n    var result = /^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$/i.exec(hex);\n    return result ? new ColorValue(parseInt(result[1], 16), parseInt(result[2], 16), parseInt(result[3], 16)) :\n        new ColorValue(255, 255, 255);\n}\n/** @private */\nexport function colorNameToHex(color) {\n    color = color === 'transparent' ? 'white' : color;\n    document.body.appendChild(createElement('text', { id: 'chartmeasuretext' }));\n    var element = document.getElementById('chartmeasuretext');\n    element.style.color = color;\n    color = window.getComputedStyle(element).color;\n    remove(element);\n    // eslint-disable-next-line security/detect-unsafe-regex\n    var exp = /^(rgb|hsl)(a?)[(]\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*,\\s*([\\d.]+\\s*%?)\\s*(?:,\\s*([\\d.]+)\\s*)?[)]$/;\n    var isRGBValue = exp.exec(color);\n    return convertToHexCode(new ColorValue(parseInt(isRGBValue[3], 10), parseInt(isRGBValue[4], 10), parseInt(isRGBValue[5], 10)));\n}\n/** @private */\nexport function checkColorFormat(color) {\n    // eslint-disable-next-line security/detect-unsafe-regex\n    return /(rgba?\\((?:\\d{1,3}[,)]){3}(?:\\d+\\.\\d+\\))?)|(^#?([a-f\\d]{2})([a-f\\d]{2})([a-f\\d]{2})$)/gmi.test(color);\n}\n/** @private */\nexport function getSaturationColor(color, factor) {\n    color = colorNameToHex(color);\n    color = color.replace(/[^0-9a-f]/gi, '');\n    if (color.length < 6) {\n        color = color[0] + color[0] + color[1] + color[1] + color[2] + color[2];\n    }\n    factor = factor || 0;\n    // convert to decimal and change luminosity\n    var rgb = '#';\n    var colorCode;\n    for (var i = 0; i < 3; i++) {\n        colorCode = parseInt(color.substr(i * 2, 2), 16);\n        colorCode = Math.round(Math.min(Math.max(0, colorCode + (colorCode * factor)), 255));\n        rgb += ('00' + colorCode.toString(16)).substr(colorCode.toString(16).length);\n    }\n    return rgb;\n}\n/** @private */\nexport function applyZLight(color, value) {\n    var RGB = convertHexToColor(color);\n    RGB.r = parseInt(Math.floor(RGB.r * value).toString(), 10);\n    RGB.g = parseInt(Math.floor(RGB.g * value).toString(), 10);\n    RGB.b = parseInt(Math.floor(RGB.b * value).toString(), 10);\n    return '#' + componentToHex(RGB.r).toUpperCase() + componentToHex(RGB.g).toUpperCase() + componentToHex(RGB.b).toUpperCase();\n}\n/** @private */\nexport function getMedian(values) {\n    var half = Math.floor(values.length / 2);\n    return values.length % 2 ? values[half] : ((values[half - 1] + values[half]) / 2.0);\n}\n/** @private */\nexport function calculateLegendShapes(location, size, shape, options) {\n    var padding = 10;\n    var dir = '';\n    var space = 2;\n    var height = size.height;\n    var width = size.width;\n    var lx = location.x;\n    var ly = location.y;\n    switch (shape) {\n        case 'MultiColoredLine':\n        case 'Line':\n        case 'StackingLine':\n        case 'StackingLine100':\n            dir = 'M' + ' ' + (lx + (-width * (3 / 4))) + ' ' + (ly) + ' ' +\n                'L' + ' ' + (lx + (width * (3 / 4))) + ' ' + (ly);\n            merge(options, { 'd': dir });\n            break;\n        case 'StepLine':\n            options.fill = 'transparent';\n            dir = 'M' + ' ' + (lx + (-width / 2) - (padding / 4)) + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + (lx +\n                (-width / 2) + (width / 10)) + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + (lx + (-width / 2) + (width / 10))\n                + ' ' + (ly) + ' ' + 'L' + ' ' + (lx + (-width / 10)) + ' ' + (ly) + ' ' + 'L' + ' ' + (lx + (-width / 10))\n                + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + (lx + (width / 5)) + ' ' + (ly + (height / 2)) + ' ' + 'L' +\n                ' ' + (lx + (width / 5)) + ' ' + (ly + (-height / 2)) + ' ' + 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly +\n                (-height / 2)) + 'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (height / 2)) + ' ' + 'L' + '' + (lx + (width / 2)\n                + (padding / 4)) + ' ' + (ly + (height / 2));\n            merge(options, { 'd': dir });\n            break;\n        case 'UpArrow':\n            options.fill = options.stroke;\n            options.stroke = 'transparent';\n            dir = 'M' + ' ' + (lx + (-width / 2)) + ' ' + (ly + (height / 2)) + ' ' +\n                'L' + ' ' + (lx) + ' ' + (ly - (height / 2)) + ' ' +\n                'L' + ' ' + (lx + (width / 2)) + ' ' + (ly + (height / 2)) +\n                'L' + ' ' + (lx + (width / 2) - space) + ' ' + (ly + (height / 2)) + ' ' +\n                'L' + ' ' + (lx) + ' ' + (ly - (height / 2) + (2 * space)) +\n                'L' + (lx - (width / 2) + space) + ' ' + (ly + (height / 2)) + ' Z';\n            merge(options, { 'd': dir });\n            break;\n        case 'DownArrow':\n            dir = 'M' + ' ' + (lx - (width / 2)) + ' ' + (ly - (height / 2)) + ' ' +\n                'L' + ' ' + (lx) + ' ' + (ly + (height / 2)) + ' ' +\n                'L' + ' ' + (lx + (width / 2)) + ' ' + (ly - (height / 2)) +\n                'L' + ' ' + (lx + (width / 2) - space) + ' ' + (ly - (height / 2)) + ' ' +\n                'L' + ' ' + (lx) + ' ' + (ly + (height / 2) - (2 * space)) +\n                'L' + (lx - (width / 2) + space) + ' ' + (ly - (height / 2)) + ' Z';\n            merge(options, { 'd': dir });\n            break;\n        case 'RightArrow':\n            dir = 'M' + ' ' + (lx + (-width / 2)) + ' ' + (ly - (height / 2)) + ' ' +\n                'L' + ' ' + (lx + (width / 2)) + ' ' + (ly) + ' ' + 'L' + ' ' +\n                (lx + (-width / 2)) + ' ' + (ly + (height / 2)) + ' L' + ' ' + (lx + (-width / 2)) + ' ' +\n                (ly + (height / 2) - space) + ' ' + 'L' + ' ' + (lx + (width / 2) - (2 * space)) + ' ' + (ly) +\n                ' L' + (lx + (-width / 2)) + ' ' + (ly - (height / 2) + space) + ' Z';\n            merge(options, { 'd': dir });\n            break;\n        case 'LeftArrow':\n            options.fill = options.stroke;\n            options.stroke = 'transparent';\n            dir = 'M' + ' ' + (lx + (width / 2)) + ' ' + (ly - (height / 2)) + ' ' +\n                'L' + ' ' + (lx + (-width / 2)) + ' ' + (ly) + ' ' + 'L' + ' ' +\n                (lx + (width / 2)) + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' +\n                (lx + (width / 2)) + ' ' + (ly + (height / 2) - space) + ' L' + ' ' + (lx + (-width / 2) + (2 * space))\n                + ' ' + (ly) + ' L' + (lx + (width / 2)) + ' ' + (ly - (height / 2) + space) + ' Z';\n            merge(options, { 'd': dir });\n            break;\n        case 'Column':\n        case 'Pareto':\n        case 'StackingColumn':\n        case 'StackingColumn100':\n        case 'RangeColumn':\n        case 'Histogram':\n            dir = 'M' + ' ' + (lx - 3 * (width / 5)) + ' ' + (ly - (height / 5)) + ' ' + 'L' + ' ' +\n                (lx + 3 * (-width / 10)) + ' ' + (ly - (height / 5)) + ' ' + 'L' + ' ' +\n                (lx + 3 * (-width / 10)) + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' ' + (lx - 3 *\n                (width / 5)) + ' ' + (ly + (height / 2)) + ' ' + 'Z' + ' ' + 'M' + ' ' +\n                (lx + (-width / 10) - (width / 20)) + ' ' + (ly - (height / 4) - (padding / 2))\n                + ' ' + 'L' + ' ' + (lx + (width / 10) + (width / 20)) + ' ' + (ly - (height / 4) -\n                (padding / 2)) + ' ' + 'L' + ' ' + (lx + (width / 10) + (width / 20)) + ' ' + (ly\n                + (height / 2)) + ' ' + 'L' + ' ' + (lx + (-width / 10) - (width / 20)) + ' ' + (ly +\n                (height / 2)) + ' ' + 'Z' + ' ' + 'M' + ' ' + (lx + 3 * (width / 10)) + ' ' + (ly) + ' ' +\n                'L' + ' ' + (lx + 3 * (width / 5)) + ' ' + (ly) + ' ' + 'L' + ' '\n                + (lx + 3 * (width / 5)) + ' ' + (ly + (height / 2)) + ' ' + 'L' + ' '\n                + (lx + 3 * (width / 10)) + ' ' + (ly + (height / 2)) + ' ' + 'Z';\n            merge(options, { 'd': dir });\n            break;\n        case 'Bar':\n        case 'StackingBar':\n        case 'StackingBar100':\n            dir = 'M' + ' ' + (lx + (-width / 2) + (-padding / 4)) + ' ' + (ly - 3 * (height / 5)) + ' '\n                + 'L' + ' ' + (lx + 3 * (width / 10)) + ' ' + (ly - 3 * (height / 5)) + ' ' + 'L' + ' ' +\n                (lx + 3 * (width / 10)) + ' ' + (ly - 3 * (height / 10)) + ' ' + 'L' + ' ' +\n                (lx - (width / 2) + (-padding / 4)) + ' ' + (ly - 3 * (height / 10)) + ' ' + 'Z' + ' '\n                + 'M' + ' ' + (lx + (-width / 2) + (-padding / 4)) + ' ' + (ly - (height / 5)\n                + (padding / 20)) + ' ' + 'L' + ' ' + (lx + (width / 2) + (padding / 4)) + ' ' + (ly\n                - (height / 5) + (padding / 20)) + ' ' + 'L' + ' ' + (lx + (width / 2) + (padding / 4))\n                + ' ' + (ly + (height / 10) + (padding / 20)) + ' ' + 'L' + ' ' + (lx - (width / 2)\n                + (-padding / 4)) + ' ' + (ly + (height / 10) + (padding / 20)) + ' ' + 'Z' + ' ' + 'M'\n                + ' ' + (lx - (width / 2) + (-padding / 4)) + ' ' + (ly + (height / 5)\n                + (padding / 10)) + ' ' + 'L' + ' ' + (lx + (-width / 4)) + ' ' + (ly + (height / 5)\n                + (padding / 10)) + ' ' + 'L' + ' ' + (lx + (-width / 4)) + ' ' + (ly + (height / 2)\n                + (padding / 10)) + ' ' + 'L' + ' ' + (lx - (width / 2) + (-padding / 4))\n                + ' ' + (ly + (height / 2) + (padding / 10)) + ' ' + 'Z';\n            merge(options, { 'd': dir });\n            break;\n        case 'Spline':\n            options.fill = 'transparent';\n            dir = 'M' + ' ' + (lx - (width / 2)) + ' ' + (ly + (height / 5)) + ' ' + 'Q' + ' '\n                + lx + ' ' + (ly - height) + ' ' + lx + ' ' + (ly + (height / 5))\n                + ' ' + 'M' + ' ' + lx + ' ' + (ly + (height / 5)) + ' ' + 'Q' + ' ' + (lx\n                + (width / 2)) + ' ' + (ly + (height / 2)) + ' ' + (lx + (width / 2)) + ' '\n                + (ly - (height / 2));\n            merge(options, { 'd': dir });\n            break;\n        case 'Area':\n        case 'MultiColoredArea':\n        case 'RangeArea':\n        case 'StackingArea':\n        case 'StackingArea100':\n            dir = 'M' + ' ' + (lx - (width / 2) - (padding / 4)) + ' ' + (ly + (height / 2))\n                + ' ' + 'L' + ' ' + (lx + (-width / 4) + (-padding / 8)) + ' ' + (ly - (height / 2))\n                + ' ' + 'L' + ' ' + (lx) + ' ' + (ly + (height / 4)) + ' ' + 'L' + ' ' + (lx\n                + (width / 4) + (padding / 8)) + ' ' + (ly + (-height / 2) + (height / 4)) + ' '\n                + 'L' + ' ' + (lx + (height / 2) + (padding / 4)) + ' ' + (ly + (height / 2)) + ' ' + 'Z';\n            merge(options, { 'd': dir });\n            break;\n        case 'SplineArea':\n        case 'SplineRangeArea':\n            dir = 'M' + ' ' + (lx - (width / 2)) + ' ' + (ly + (height / 5)) + ' ' + 'Q' + ' ' + lx\n                + ' ' + (ly - height) + ' ' + lx + ' ' + (ly + (height / 5)) + ' ' + 'Z' + ' ' + 'M'\n                + ' ' + lx + ' ' + (ly + (height / 5)) + ' ' + 'Q' + ' ' + (lx + (width / 2)) + ' '\n                + (ly + (height / 2)) + ' ' + (lx + (width / 2)) + ' '\n                + (ly - (height / 2)) + ' ' + ' Z';\n            merge(options, { 'd': dir });\n            break;\n        case 'Pie':\n        case 'Doughnut':\n            options.stroke = 'transparent';\n            // eslint-disable-next-line no-case-declarations\n            var r = Math.min(height, width) / 2;\n            dir = getAccumulationLegend(lx, ly, r, height, width, shape);\n            merge(options, { 'd': dir });\n            break;\n    }\n    return { renderOption: options };\n}\n/** @private */\nexport function textTrim(maxWidth, text, font, isRtlEnabled, themeFontStyle) {\n    var label = text;\n    var size = measureText(text, font, themeFontStyle).width;\n    if (size > maxWidth) {\n        var textLength = text.length;\n        for (var i = textLength - 1; i >= 0; --i) {\n            label = isRtlEnabled ? '...' + text.substring(0, i) : text.substring(0, i) + '...';\n            size = measureText(label, font, themeFontStyle).width;\n            if (size <= maxWidth) {\n                return label;\n            }\n        }\n    }\n    return label;\n}\n/** @private */\nexport function lineBreakLabelTrim(maxWidth, text, font, themeFontStyle) {\n    var labelCollection = [];\n    var breakLabels = text.split('<br>');\n    for (var i = 0; i < breakLabels.length; i++) {\n        text = breakLabels[i];\n        var size = measureText(text, font, themeFontStyle).width;\n        if (size > maxWidth) {\n            var textLength = text.length;\n            for (var i_1 = textLength - 1; i_1 >= 0; --i_1) {\n                text = text.substring(0, i_1) + '...';\n                size = measureText(text, font, themeFontStyle).width;\n                if (size <= maxWidth) {\n                    labelCollection.push(text);\n                    break;\n                }\n            }\n        }\n        else {\n            labelCollection.push(text);\n        }\n    }\n    return labelCollection;\n}\n/** @private */\nexport function stringToNumber(value, containerSize) {\n    if (value !== null && value !== undefined) {\n        return value.indexOf('%') !== -1 ? (containerSize / 100) * parseInt(value, 10) : parseInt(value, 10);\n    }\n    return null;\n}\n/** @private */\nexport function redrawElement(redraw, id, options, renderer) {\n    if (!redraw) {\n        return null;\n    }\n    var element = getElement(id);\n    if (element && options) {\n        renderer.setElementAttributes(options, element.tagName === 'clipPath' ? element.childNodes[0] : element);\n    }\n    return element;\n}\n/** @private */\nexport function animateRedrawElement(element, duration, start, end, x, y) {\n    if (x === void 0) { x = 'x'; }\n    if (y === void 0) { y = 'y'; }\n    var isDiv = element.tagName === 'DIV';\n    var setStyle = function (xValue, yValue) {\n        if (isDiv) {\n            element.style[x] = xValue + 'px';\n            element.style[y] = yValue + 'px';\n        }\n        else {\n            element.setAttribute(x, xValue + '');\n            element.setAttribute(y, yValue + '');\n        }\n    };\n    setStyle(start.x, start.y);\n    new Animation({}).animate(createElement('div'), {\n        duration: duration,\n        progress: function (args) {\n            setStyle(linear(args.timeStamp, start.x, end.x - start.x, args.duration), linear(args.timeStamp, start.y, end.y - start.y, args.duration));\n        },\n        end: function () {\n            setStyle(end.x, end.y);\n        }\n    });\n}\n/** @private */\nexport function textElement(renderer, option, font, color, parent, isMinus, redraw, isAnimate, forceAnimate, animateDuration, seriesClipRect, labelSize, isRotatedLabelIntersect, isCanvas, isDataLabelWrap, themeFontStyle) {\n    if (isMinus === void 0) { isMinus = false; }\n    if (forceAnimate === void 0) { forceAnimate = false; }\n    var renderOptions = {};\n    var tspanElement;\n    //let renderer: SvgRenderer = new SvgRenderer('');\n    var height;\n    var dy;\n    var label;\n    var width = 0;\n    var dx;\n    var maxWidth = 0;\n    if (option.text.length > 1 && isDataLabelWrap) {\n        for (var i = 0, len = option.text.length; i < len; i++) {\n            maxWidth = Math.max(maxWidth, measureText(option.text[i], font, themeFontStyle).width);\n        }\n        width = measureText(option.text[0], font, themeFontStyle).width;\n    }\n    dx = (option.text.length > 1 && isDataLabelWrap) ? (option.x + maxWidth / 2 - width / 2) : option.x;\n    renderOptions = {\n        'id': option.id,\n        'x': dx,\n        'y': option.y,\n        'fill': color ? color : 'black',\n        'font-size': font.size,\n        'font-style': font.fontStyle,\n        'font-family': font.fontFamily || themeFontStyle.fontFamily,\n        'font-weight': font.fontWeight,\n        'text-anchor': option.anchor,\n        'labelRotation': option.labelRotation,\n        'transform': option.transform,\n        'opacity': font.opacity,\n        'dominant-baseline': option.baseLine\n    };\n    var text = typeof option.text === 'string' ? option.text : isMinus ? option.text[option.text.length - 1] : option.text[0];\n    var transX = seriesClipRect ? seriesClipRect.x : 0;\n    var transY = seriesClipRect ? seriesClipRect.y : 0;\n    var htmlObject = renderer.createText(renderOptions, text, transX, transY);\n    if (typeof option.text !== 'string' && option.text.length > 1) {\n        for (var i = 1, len = option.text.length; i < len; i++) {\n            height = (measureText(option.text[i], font, themeFontStyle).height);\n            width = measureText(option.text[i], font, themeFontStyle).width;\n            dy = (option.y) + ((isMinus) ? -(i * height) : (i * height));\n            dx = isDataLabelWrap ? (option.x + maxWidth / 2 - width / 2) : option.x;\n            label = isMinus ? option.text[option.text.length - (i + 1)] : option.text[i];\n            if (isCanvas) {\n                tspanElement = renderer.createText(renderOptions, label, null, null, dy, true);\n            }\n            else {\n                tspanElement = renderer.createTSpan({\n                    'x': dx, 'id': option.id,\n                    'y': dy\n                }, label);\n                htmlObject.appendChild(tspanElement);\n            }\n        }\n    }\n    if (!isRotatedLabelIntersect) {\n        appendChildElement(renderer instanceof CanvasRenderer, parent, htmlObject, redraw, isAnimate, 'x', 'y', null, null, forceAnimate, false, null, animateDuration);\n    }\n    return htmlObject;\n}\n/**\n * Method to calculate the width and height of the chart.\n */\nexport function calculateSize(chart) {\n    // fix for Chart rendered with default width in IE issue\n    var containerWidth = chart.element.clientWidth || chart.element.offsetWidth;\n    var containerHeight = chart.element.clientHeight;\n    if (chart.stockChart) {\n        containerWidth = chart.stockChart.availableSize.width;\n        containerHeight = chart.stockChart.availableSize.height;\n    }\n    var height = 450;\n    var marginHeight;\n    if (chart.getModuleName() === 'rangeNavigator') {\n        var range = chart;\n        var tooltipSpace = range.tooltip.enable ? 35 : 0;\n        var periodHeight = range.periodSelectorSettings.periods.length ?\n            range.periodSelectorSettings.height : 0;\n        marginHeight = range.margin.top + range.margin.bottom + tooltipSpace;\n        var labelSize = measureText('tempString', range.labelStyle, range.themeStyle.axisLabelFont).height;\n        var labelPadding = 15;\n        height = (chart.series.length ? (Browser.isDevice ? 80 : 120) : ((range.enableGrouping ? (40 + labelPadding + labelSize) : 40)\n            + marginHeight)) + periodHeight;\n        if (range.disableRangeSelector) {\n            height = periodHeight;\n        }\n    }\n    chart.availableSize = new Size(stringToNumber(chart.width, containerWidth) || containerWidth || 600, stringToNumber(chart.height, containerHeight || height) || containerHeight || height);\n    if (chart.getModuleName() === 'chart') {\n        var scaleX = 1;\n        var scaleY = 1;\n        if (chart.width === '' || chart.width === null || chart.width === '100%') {\n            scaleX = chart.element.getBoundingClientRect().width > 0 ?\n                chart.element.getBoundingClientRect().width / chart.availableSize.width : 1;\n            scaleY = chart.element.getBoundingClientRect().height > 0 ?\n                chart.element.getBoundingClientRect().height / chart.availableSize.height : 1;\n            var transformValue = chart.element.style.transform;\n            if (transformValue) {\n                var scaleValue = parseFloat(transformValue.match(/scale\\((.*?)\\)/)[1]);\n                scaleX = scaleValue ? scaleX / scaleValue : scaleX;\n                scaleY = scaleValue ? scaleY / scaleValue : scaleY;\n            }\n            chart.availableSize.width = chart.availableSize.width * scaleX;\n            chart.availableSize.height = chart.availableSize.height * scaleY;\n            chart.scaleX = scaleX;\n            chart.scaleY = scaleY;\n        }\n    }\n}\n/**\n * To create svg element.\n *\n * @param {Chart} chart chart instance\n */\nexport function createSvg(chart) {\n    chart.canvasRender = new CanvasRenderer(chart.element.id);\n    chart.renderer = chart.enableCanvas ? chart.canvasRender : new SvgRenderer(chart.element.id);\n    calculateSize(chart);\n    if (chart.stockChart && chart.getModuleName() === 'chart') {\n        chart.svgObject = chart.stockChart.chartObject;\n    }\n    else if (chart.stockChart && chart.getModuleName() === 'rangeNavigator') {\n        chart.svgObject = chart.stockChart.selectorObject;\n    }\n    else {\n        if (chart.enableCanvas) {\n            chart.svgObject = chart.renderer.createCanvas({\n                id: chart.element.id + '_canvas',\n                width: chart.availableSize.width,\n                height: chart.availableSize.height\n            });\n        }\n        else {\n            chart.svgObject = chart.renderer.createSvg({\n                id: chart.element.id + '_svg',\n                width: chart.availableSize.width,\n                height: chart.availableSize.height\n            });\n        }\n    }\n    if (chart.enableCanvas) {\n        chart.renderer.ctx.direction = chart.enableRtl ? 'rtl' : 'ltr';\n    }\n}\n/**\n * To calculate chart title and height.\n *\n * @param {string} title text of the title\n * @param {FontModel} style style of the title\n * @param {number} width width of the title\n */\nexport function getTitle(title, style, width, isRtlEnabled, themeFontStyle) {\n    var titleCollection = [];\n    switch (style.textOverflow) {\n        case 'Wrap':\n            titleCollection = textWrap(title, width, style, isRtlEnabled, null, null, themeFontStyle);\n            break;\n        case 'Trim':\n            titleCollection.push(textTrim(width, title, style, isRtlEnabled, themeFontStyle));\n            break;\n        default:\n            titleCollection.push(title);\n            break;\n    }\n    return titleCollection;\n}\n/**\n * Method to calculate x position of title.\n */\nexport function titlePositionX(rect, titleStyle) {\n    var positionX;\n    if (titleStyle.textAlignment === 'Near') {\n        positionX = rect.x;\n    }\n    else if (titleStyle.textAlignment === 'Center') {\n        positionX = rect.x + rect.width / 2;\n    }\n    else {\n        positionX = rect.x + rect.width;\n    }\n    return positionX;\n}\n/**\n * Method to find new text and element size based on textOverflow.\n */\nexport function textWrap(currentLabel, maximumWidth, font, isRtlEnabled, wrapAnyWhere, clip, themeFontStyle) {\n    if (wrapAnyWhere) {\n        return (textWrapAnyWhere(currentLabel, maximumWidth, font, themeFontStyle));\n    }\n    else {\n        var textCollection = currentLabel.split(' ');\n        var label = '';\n        var labelCollection = [];\n        var text = void 0;\n        for (var i = 0, len = textCollection.length; i < len; i++) {\n            text = textCollection[i];\n            if (measureText(label.concat(label === '' ? '' : ' ' + text), font, themeFontStyle).width < maximumWidth) {\n                label = label.concat((label === '' ? '' : ' ') + text);\n            }\n            else {\n                if (label !== '') {\n                    labelCollection.push(clip ? label : textTrim(maximumWidth, label, font, isRtlEnabled, themeFontStyle));\n                    label = text;\n                }\n                else {\n                    labelCollection.push(clip ? text : textTrim(maximumWidth, text, font, isRtlEnabled, themeFontStyle));\n                    text = '';\n                }\n            }\n            if (label && i === len - 1) {\n                labelCollection.push(clip ? label : textTrim(maximumWidth, label, font, isRtlEnabled, themeFontStyle));\n            }\n        }\n        return labelCollection;\n    }\n}\n/**\n * Method to find new text and element size based on textWrap.\n */\nexport function textWrapAnyWhere(currentLabel, maximumWidth, font, themeFontStyle) {\n    var size = measureText(currentLabel, font, themeFontStyle).width;\n    var labelCollection = [];\n    if (size > maximumWidth) {\n        var label = '';\n        var startIndex = 0;\n        var labelIndex = 1;\n        while (labelIndex < currentLabel.length) {\n            label = currentLabel.substring(startIndex, labelIndex);\n            size = measureText(label, font, themeFontStyle).width;\n            if (size < maximumWidth) {\n                labelIndex++;\n            }\n            else if (size === maximumWidth) {\n                startIndex = labelIndex;\n                labelCollection.push(label);\n                labelIndex++;\n                label = '';\n            }\n            else if (size > maximumWidth) {\n                label = label.slice(0, -1);\n                startIndex = labelIndex - 1;\n                labelCollection.push(label);\n                label = '';\n            }\n        }\n        if (label.length > 0) {\n            labelCollection.push(label);\n        }\n    }\n    else {\n        labelCollection.push(currentLabel);\n    }\n    return labelCollection;\n}\n/**\n * Method to support the subscript and superscript value to text.\n */\nexport function getUnicodeText(text, regexp) {\n    var title = text.replace(regexp, ' ');\n    var digit = text.match(regexp);\n    var digitSpecific = ' ';\n    var convertedText = ' ';\n    var k = 0;\n    var unicodeSub = {\n        '0': '\\u2080', '1': '\\u2081', '2': '\\u2082', '3': '\\u2083', '4': '\\u2084',\n        '5': '\\u2085', '6': '\\u2086', '7': '\\u2087', '8': '\\u2088', '9': '\\u2089'\n    };\n    var unicodeSup = {\n        '0': '\\u2070', '1': '\\u00B9', '2': '\\u00B2', '3': '\\u00B3', '4': '\\u2074',\n        '5': '\\u2075', '6': '\\u2076', '7': '\\u2077', '8': '\\u2078', '9': '\\u2079'\n    };\n    for (var i = 0; i <= title.length - 1; i++) {\n        if (title[i] === ' ') {\n            digitSpecific = (regexp === regSub) ? digit[k].replace(/~/g, '') : digit[k].replace(/\\^/g, '');\n            for (var j = 0; j < digitSpecific.length; j++) {\n                convertedText += (regexp === regSub) ? unicodeSub[digitSpecific[j]] : unicodeSup[digitSpecific[j]];\n            }\n            k++;\n        }\n        else {\n            convertedText += title[i];\n        }\n    }\n    return convertedText.trim();\n}\n/**\n * Method to reset the blazor templates.\n */\nexport function blazorTemplatesReset(control) {\n    for (var i = 0; i < control.annotations.length; i++) {\n        resetBlazorTemplate((control.element.id + '_Annotation_' + i).replace(/[^a-zA-Z0-9]/g, ''), 'ContentTemplate');\n    }\n    //This reset the tooltip templates\n    resetBlazorTemplate(control.element.id + '_tooltipparent_template' + '_blazorTemplate', 'Template');\n    //Datalabel templates reset\n    resetBlazorTemplate(control.element.id + '_DataLabel');\n}\n/** @private */\nvar CustomizeOption = /** @class */ (function () {\n    function CustomizeOption(id) {\n        this.id = id;\n    }\n    return CustomizeOption;\n}());\nexport { CustomizeOption };\n/** @private */\nvar StackValues = /** @class */ (function () {\n    function StackValues(startValue, endValue) {\n        this.startValues = startValue;\n        this.endValues = endValue;\n    }\n    return StackValues;\n}());\nexport { StackValues };\n/** @private */\nvar RectOption = /** @class */ (function (_super) {\n    __extends(RectOption, _super);\n    function RectOption(id, fill, border, opacity, rect, rx, ry, transform, dashArray) {\n        var _this = _super.call(this, id, fill, border.width, border.color, opacity, dashArray) || this;\n        _this.y = rect.y;\n        _this.x = rect.x;\n        _this.height = rect.height;\n        _this.width = rect.width;\n        _this.rx = rx ? rx : 0;\n        _this.ry = ry ? ry : 0;\n        _this.transform = transform ? transform : '';\n        _this.stroke = (border.width !== 0 && _this.stroke !== '') ? border.color === null ? '' : border.color : 'transparent';\n        return _this;\n    }\n    return RectOption;\n}(PathOption));\nexport { RectOption };\n/** @private */\nvar ImageOption = /** @class */ (function () {\n    function ImageOption(height, width, href, x, y, id, visibility, preserveAspectRatio) {\n        this.height = height;\n        this.width = width;\n        this.href = href;\n        this.x = x;\n        this.y = y;\n        this.id = id;\n        this.visibility = visibility;\n        this.preserveAspectRatio = preserveAspectRatio;\n    }\n    return ImageOption;\n}());\nexport { ImageOption };\n/** @private */\nvar CircleOption = /** @class */ (function (_super) {\n    __extends(CircleOption, _super);\n    function CircleOption(id, fill, border, opacity, cx, cy, r) {\n        var _this = _super.call(this, id, fill, border.width, border.color, opacity) || this;\n        _this.cy = cy;\n        _this.cx = cx;\n        _this.r = r;\n        return _this;\n    }\n    return CircleOption;\n}(PathOption));\nexport { CircleOption };\n/** @private */\nvar PolygonOption = /** @class */ (function () {\n    function PolygonOption(id, points, fill) {\n        this.id = id;\n        this.points = points;\n        this.fill = fill;\n    }\n    return PolygonOption;\n}());\nexport { PolygonOption };\n/** @private */\nvar ChartLocation = /** @class */ (function () {\n    function ChartLocation(x, y) {\n        this.x = x;\n        this.y = y;\n    }\n    return ChartLocation;\n}());\nexport { ChartLocation };\n/** @private */\nvar LabelLocation = /** @class */ (function () {\n    function LabelLocation(x, y) {\n        this.x = 0;\n        this.y = 0;\n        this.x = x;\n        this.y = y;\n    }\n    return LabelLocation;\n}());\nexport { LabelLocation };\n/** @private */\nvar Thickness = /** @class */ (function () {\n    function Thickness(left, right, top, bottom) {\n        this.left = left;\n        this.right = right;\n        this.top = top;\n        this.bottom = bottom;\n    }\n    return Thickness;\n}());\nexport { Thickness };\n/** @private */\nvar ColorValue = /** @class */ (function () {\n    function ColorValue(r, g, b) {\n        this.r = r;\n        this.g = g;\n        this.b = b;\n    }\n    return ColorValue;\n}());\nexport { ColorValue };\n/** @private */\nvar PointData = /** @class */ (function () {\n    function PointData(point, series, index) {\n        if (index === void 0) { index = 0; }\n        this.point = point;\n        this.series = series;\n        this.lierIndex = index;\n    }\n    return PointData;\n}());\nexport { PointData };\n/** @private */\nvar AccPointData = /** @class */ (function () {\n    function AccPointData(point, series, index) {\n        if (index === void 0) { index = 0; }\n        this.point = point;\n        this.series = series;\n        this.index = index;\n    }\n    return AccPointData;\n}());\nexport { AccPointData };\n/** @private */\nvar Point3D = /** @class */ (function () {\n    /** @private */\n    function Point3D(point, series) {\n        this.point = point;\n        this.series = series;\n    }\n    return Point3D;\n}());\nexport { Point3D };\n/** @private */\nvar ControlPoints = /** @class */ (function () {\n    function ControlPoints(controlPoint1, controlPoint2) {\n        this.controlPoint1 = controlPoint1;\n        this.controlPoint2 = controlPoint2;\n    }\n    return ControlPoints;\n}());\nexport { ControlPoints };\n/** @private */\nexport function getColorByValue(colorMap, value) {\n    var color = '';\n    var rbgColorValue;\n    if (Number(value) === colorMap.start) {\n        color = colorMap.colors[0];\n    }\n    else if (Number(value) === colorMap.end) {\n        color = colorMap.colors[colorMap.colors.length - 1];\n    }\n    else {\n        rbgColorValue = getGradientColor(Number(value), colorMap);\n        color = convertToHexCode(rbgColorValue);\n    }\n    return color;\n}\n/** @private */\nexport function getGradientColor(value, colorMap) {\n    var previousOffset = colorMap.start;\n    var nextOffset = colorMap.end;\n    var percent = 0;\n    var full = nextOffset - previousOffset;\n    var midColor;\n    percent = (value - previousOffset) / full;\n    var previousColor;\n    var nextColor;\n    if (colorMap.colors.length <= 2) {\n        previousColor = colorMap.colors[0].charAt(0) === '#' ? colorMap.colors[0] : colorNameToHex(colorMap.colors[0]);\n        nextColor = colorMap.colors[colorMap.colors.length - 1].charAt(0) === '#' ?\n            colorMap.colors[colorMap.colors.length - 1] : colorNameToHex(colorMap.colors[colorMap.colors.length - 1]);\n    }\n    else {\n        previousColor = colorMap.colors[0].charAt(0) === '#' ? colorMap.colors[0] : colorNameToHex(colorMap.colors[0]);\n        nextColor = colorMap.colors[colorMap.colors.length - 1].charAt(0) === '#' ?\n            colorMap.colors[colorMap.colors.length - 1] : colorNameToHex(colorMap.colors[colorMap.colors.length - 1]);\n        var a = full / (colorMap.colors.length - 1);\n        var b = void 0;\n        var c = void 0;\n        var length_2 = colorMap.colors.length - 1;\n        var splitColorValueOffset = [];\n        var splitColor = {};\n        for (var j = 1; j < length_2; j++) {\n            c = j * a;\n            b = previousOffset + c;\n            splitColor = { b: b, color: colorMap.colors[j] };\n            splitColorValueOffset.push(splitColor);\n        }\n        for (var i = 0; i < splitColorValueOffset.length; i++) {\n            if (previousOffset <= value && value <= splitColorValueOffset[i]['b'] && i === 0) {\n                midColor = splitColorValueOffset[i]['color'].charAt(0) === '#' ?\n                    splitColorValueOffset[i]['color'] : colorNameToHex(splitColorValueOffset[i]['color']);\n                nextColor = midColor;\n                percent = value <= splitColorValueOffset[i]['b'] ? 1 - Math.abs((value - splitColorValueOffset[i]['b']) / a)\n                    : (value - splitColorValueOffset[i]['b']) / a;\n            }\n            else if (splitColorValueOffset[i]['b'] <= value && value <= nextOffset && i === (splitColorValueOffset.length - 1)) {\n                midColor = splitColorValueOffset[i]['color'].charAt(0) === '#' ?\n                    splitColorValueOffset[i]['color'] : colorNameToHex(splitColorValueOffset[i]['color']);\n                previousColor = midColor;\n                percent = value < splitColorValueOffset[i]['b'] ?\n                    1 - Math.abs((value - splitColorValueOffset[i]['b']) / a) : (value - splitColorValueOffset[i]['b']) / a;\n            }\n            if (i !== splitColorValueOffset.length - 1 && i < splitColorValueOffset.length) {\n                if (splitColorValueOffset[i]['b'] <= value && value <= splitColorValueOffset[i + 1]['b']) {\n                    midColor = splitColorValueOffset[i]['color'].charAt(0) === '#' ?\n                        splitColorValueOffset[i]['color'] : colorNameToHex(splitColorValueOffset[i]['color']);\n                    previousColor = midColor;\n                    nextColor = splitColorValueOffset[i + 1]['color'].charAt(0) === '#' ?\n                        splitColorValueOffset[i + 1]['color'] : colorNameToHex(splitColorValueOffset[i + 1]['color']);\n                    percent = Math.abs((value - splitColorValueOffset[i + 1]['b'])) / a;\n                }\n            }\n        }\n    }\n    return getPercentageColor(percent, previousColor, nextColor);\n}\n/** @private */\nexport function getPercentageColor(percent, previous, next) {\n    var nextColor = next.split('#')[1];\n    var prevColor = previous.split('#')[1];\n    var r = getPercentage(percent, parseInt(prevColor.substr(0, 2), 16), parseInt(nextColor.substr(0, 2), 16));\n    var g = getPercentage(percent, parseInt(prevColor.substr(2, 2), 16), parseInt(nextColor.substr(2, 2), 16));\n    var b = getPercentage(percent, parseInt(prevColor.substr(4, 2), 16), parseInt(nextColor.substr(4, 2), 16));\n    return new ColorValue(r, g, b);\n}\n/** @private */\nexport function getPercentage(percent, previous, next) {\n    var full = next - previous;\n    return Math.round((previous + (full * percent)));\n}\n/** @private */\nexport function getTextAnchor(alignment, enableRTL) {\n    switch (alignment) {\n        case 'Near':\n            return enableRTL ? 'end' : 'start';\n        case 'Far':\n            return enableRTL ? 'start' : 'end';\n        default:\n            return 'middle';\n    }\n}\n","//! moment.js locale configuration\n//! locale : French (Canada) [fr-ca]\n//! author : Jonathan Abourbih : https://github.com/jonbca\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var frCa = moment.defineLocale('fr-ca', {\n        months: 'janvier_février_mars_avril_mai_juin_juillet_août_septembre_octobre_novembre_décembre'.split(\n            '_'\n        ),\n        monthsShort:\n            'janv._févr._mars_avr._mai_juin_juil._août_sept._oct._nov._déc.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'dimanche_lundi_mardi_mercredi_jeudi_vendredi_samedi'.split('_'),\n        weekdaysShort: 'dim._lun._mar._mer._jeu._ven._sam.'.split('_'),\n        weekdaysMin: 'di_lu_ma_me_je_ve_sa'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'YYYY-MM-DD',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Aujourd’hui à] LT',\n            nextDay: '[Demain à] LT',\n            nextWeek: 'dddd [à] LT',\n            lastDay: '[Hier à] LT',\n            lastWeek: 'dddd [dernier à] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dans %s',\n            past: 'il y a %s',\n            s: 'quelques secondes',\n            ss: '%d secondes',\n            m: 'une minute',\n            mm: '%d minutes',\n            h: 'une heure',\n            hh: '%d heures',\n            d: 'un jour',\n            dd: '%d jours',\n            M: 'un mois',\n            MM: '%d mois',\n            y: 'un an',\n            yy: '%d ans',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(er|e)/,\n        ordinal: function (number, period) {\n            switch (period) {\n                // Words with masculine grammatical gender: mois, trimestre, jour\n                default:\n                case 'M':\n                case 'Q':\n                case 'D':\n                case 'DDD':\n                case 'd':\n                    return number + (number === 1 ? 'er' : 'e');\n\n                // Words with feminine grammatical gender: semaine\n                case 'w':\n                case 'W':\n                    return number + (number === 1 ? 're' : 'e');\n            }\n        },\n    });\n\n    return frCa;\n\n})));\n","//! moment.js locale configuration\n//! locale : Dutch (Belgium) [nl-be]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^maart|mrt.?$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nlBe = moment.defineLocale('nl-be', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nlBe;\n\n})));\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var DropDownButtonItemsDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-dropdownbuttonitems';\n        }\n    }\n});\nexport var DropDownButtonItemsPlugin = {\n    name: 'e-dropdownbuttonitems',\n    install: function (Vue) {\n        Vue.component(DropDownButtonItemsPlugin.name, DropDownButtonItemsDirective);\n    }\n};\nexport var DropDownButtonItemDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-dropdownbuttonitem';\n        }\n    }\n});\nexport var DropDownButtonItemPlugin = {\n    name: 'e-dropdownbuttonitem',\n    install: function (Vue) {\n        Vue.component(DropDownButtonItemPlugin.name, DropDownButtonItemDirective);\n    }\n};\n","import { ComponentBase, gh, getProps, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { DropDownButton } from '@syncfusion/ej2-splitbuttons';\nimport { DropDownButtonItemsDirective, DropDownButtonItemDirective, DropDownButtonItemsPlugin, DropDownButtonItemPlugin } from './items.directive';\nexport var properties = ['isLazyUpdate', 'plugins', 'closeActionEvents', 'content', 'createPopupOnClick', 'cssClass', 'disabled', 'enableHtmlSanitizer', 'enablePersistence', 'enableRtl', 'iconCss', 'iconPosition', 'items', 'locale', 'target', 'beforeClose', 'beforeItemRender', 'beforeOpen', 'close', 'created', 'open', 'select'];\nexport var modelProps = [];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0], watch = testProp[1], emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged', 'update:modelValue');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n    var props_1 = modelProps_1[_i];\n    emitProbs.push('update:' + props_1);\n}\n/**\n * Represents the Essential JS 2 VueJS DropDownButton Component\n * ```html\n * <ejs-dropdownbutton>DropDownButton</ejs-dropdownbutton>\n * ```\n */\nexport var DropDownButtonComponent = vueDefineComponent({\n    name: 'DropDownButtonComponent',\n    mixins: [ComponentBase],\n    props: props,\n    watch: watch,\n    emits: emitProbs,\n    provide: function () { return { custom: this.custom }; },\n    data: function () {\n        return {\n            ej2Instances: new DropDownButton({}),\n            propKeys: properties,\n            models: modelProps,\n            hasChildDirective: true,\n            hasInjectedModules: false,\n            tagMapper: { \"e-dropdownbuttonitems\": \"e-dropdownbuttonitem\" },\n            tagNameMapper: { \"e-dropdownbuttonitems\": \"e-items\" },\n            isVue3: !isExecute,\n            templateCollection: {},\n        };\n    },\n    created: function () {\n        this.bindProperties();\n        this.ej2Instances._setProperties = this.ej2Instances.setProperties;\n        this.ej2Instances.setProperties = this.setProperties;\n        this.ej2Instances.clearTemplate = this.clearTemplate;\n        this.updated = this.updated;\n    },\n    render: function (createElement) {\n        var h = !isExecute ? gh : createElement;\n        var slots = null;\n        if (!isNullOrUndefined(this.$slots.default)) {\n            slots = !isExecute ? this.$slots.default() : this.$slots.default;\n        }\n        return h('button', slots);\n    },\n    methods: {\n        clearTemplate: function (templateNames) {\n            if (!templateNames) {\n                templateNames = Object.keys(this.templateCollection || {});\n            }\n            if (templateNames.length && this.templateCollection) {\n                for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n                    var tempName = templateNames_1[_i];\n                    var elementCollection = this.templateCollection[tempName];\n                    if (elementCollection && elementCollection.length) {\n                        for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n                            var ele = elementCollection_1[_a];\n                            var destroy = getValue('__vue__.$destroy', ele);\n                            if (destroy) {\n                                ele.__vue__.$destroy();\n                            }\n                            if (ele.innerHTML) {\n                                ele.innerHTML = '';\n                            }\n                        }\n                        delete this.templateCollection[tempName];\n                    }\n                }\n            }\n        },\n        setProperties: function (prop, muteOnChange) {\n            var _this = this;\n            if (this.isVue3) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if (this.ej2Instances && this.ej2Instances._setProperties) {\n                this.ej2Instances._setProperties(prop, muteOnChange);\n            }\n            if (prop && this.models && this.models.length) {\n                Object.keys(prop).map(function (key) {\n                    _this.models.map(function (model) {\n                        if ((key === model) && !(/datasource/i.test(key))) {\n                            if (_this.isVue3) {\n                                _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n                            }\n                            else {\n                                _this.$emit('update:' + key, prop[key]);\n                                _this.$emit('modelchanged', prop[key]);\n                            }\n                        }\n                    });\n                });\n            }\n        },\n        custom: function () {\n            this.updated();\n        },\n        addItems: function (items, text) {\n            return this.ej2Instances.addItems(items, text);\n        },\n        focusIn: function () {\n            return this.ej2Instances.focusIn();\n        },\n        removeItems: function (items, isUniqueId) {\n            return this.ej2Instances.removeItems(items, isUniqueId);\n        },\n        toggle: function () {\n            return this.ej2Instances.toggle();\n        },\n    }\n});\nexport var DropDownButtonPlugin = {\n    name: 'ejs-dropdownbutton',\n    install: function (Vue) {\n        Vue.component(DropDownButtonPlugin.name, DropDownButtonComponent);\n        Vue.component(DropDownButtonItemPlugin.name, DropDownButtonItemDirective);\n        Vue.component(DropDownButtonItemsPlugin.name, DropDownButtonItemsDirective);\n    }\n};\n","//! moment.js locale configuration\n//! locale : Hindi [hi]\n//! author : Mayank Singhal : https://github.com/mayanksinghal\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '१',\n            2: '२',\n            3: '३',\n            4: '४',\n            5: '५',\n            6: '६',\n            7: '७',\n            8: '८',\n            9: '९',\n            0: '०',\n        },\n        numberMap = {\n            '१': '1',\n            '२': '2',\n            '३': '3',\n            '४': '4',\n            '५': '5',\n            '६': '6',\n            '७': '7',\n            '८': '8',\n            '९': '9',\n            '०': '0',\n        },\n        monthsParse = [\n            /^जन/i,\n            /^फ़र|फर/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सितं|सित/i,\n            /^अक्टू/i,\n            /^नव|नवं/i,\n            /^दिसं|दिस/i,\n        ],\n        shortMonthsParse = [\n            /^जन/i,\n            /^फ़र/i,\n            /^मार्च/i,\n            /^अप्रै/i,\n            /^मई/i,\n            /^जून/i,\n            /^जुल/i,\n            /^अग/i,\n            /^सित/i,\n            /^अक्टू/i,\n            /^नव/i,\n            /^दिस/i,\n        ];\n\n    var hi = moment.defineLocale('hi', {\n        months: {\n            format: 'जनवरी_फ़रवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितम्बर_अक्टूबर_नवम्बर_दिसम्बर'.split(\n                '_'\n            ),\n            standalone:\n                'जनवरी_फरवरी_मार्च_अप्रैल_मई_जून_जुलाई_अगस्त_सितंबर_अक्टूबर_नवंबर_दिसंबर'.split(\n                    '_'\n                ),\n        },\n        monthsShort:\n            'जन._फ़र._मार्च_अप्रै._मई_जून_जुल._अग._सित._अक्टू._नव._दिस.'.split('_'),\n        weekdays: 'रविवार_सोमवार_मंगलवार_बुधवार_गुरूवार_शुक्रवार_शनिवार'.split('_'),\n        weekdaysShort: 'रवि_सोम_मंगल_बुध_गुरू_शुक्र_शनि'.split('_'),\n        weekdaysMin: 'र_सो_मं_बु_गु_शु_श'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm बजे',\n            LTS: 'A h:mm:ss बजे',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm बजे',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm बजे',\n        },\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: shortMonthsParse,\n\n        monthsRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsShortRegex:\n            /^(जनवरी|जन\\.?|फ़रवरी|फरवरी|फ़र\\.?|मार्च?|अप्रैल|अप्रै\\.?|मई?|जून?|जुलाई|जुल\\.?|अगस्त|अग\\.?|सितम्बर|सितंबर|सित\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर|नव\\.?|दिसम्बर|दिसंबर|दिस\\.?)/i,\n\n        monthsStrictRegex:\n            /^(जनवरी?|फ़रवरी|फरवरी?|मार्च?|अप्रैल?|मई?|जून?|जुलाई?|अगस्त?|सितम्बर|सितंबर|सित?\\.?|अक्टूबर|अक्टू\\.?|नवम्बर|नवंबर?|दिसम्बर|दिसंबर?)/i,\n\n        monthsShortStrictRegex:\n            /^(जन\\.?|फ़र\\.?|मार्च?|अप्रै\\.?|मई?|जून?|जुल\\.?|अग\\.?|सित\\.?|अक्टू\\.?|नव\\.?|दिस\\.?)/i,\n\n        calendar: {\n            sameDay: '[आज] LT',\n            nextDay: '[कल] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[कल] LT',\n            lastWeek: '[पिछले] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s में',\n            past: '%s पहले',\n            s: 'कुछ ही क्षण',\n            ss: '%d सेकंड',\n            m: 'एक मिनट',\n            mm: '%d मिनट',\n            h: 'एक घंटा',\n            hh: '%d घंटे',\n            d: 'एक दिन',\n            dd: '%d दिन',\n            M: 'एक महीने',\n            MM: '%d महीने',\n            y: 'एक वर्ष',\n            yy: '%d वर्ष',\n        },\n        preparse: function (string) {\n            return string.replace(/[१२३४५६७८९०]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Hindi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Hindi.\n        meridiemParse: /रात|सुबह|दोपहर|शाम/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'रात') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'सुबह') {\n                return hour;\n            } else if (meridiem === 'दोपहर') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'शाम') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'रात';\n            } else if (hour < 10) {\n                return 'सुबह';\n            } else if (hour < 17) {\n                return 'दोपहर';\n            } else if (hour < 20) {\n                return 'शाम';\n            } else {\n                return 'रात';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return hi;\n\n})));\n","import { isNullOrUndefined, attributes } from '@syncfusion/ej2-base';\nimport { iterateArrayOrObject } from '../base/util';\nimport { CellType } from '../base/enum';\n/**\n * `CellMergeRender` module.\n *\n * @hidden\n */\nvar CellMergeRender = /** @class */ (function () {\n    function CellMergeRender(serviceLocator, parent) {\n        this.serviceLocator = serviceLocator;\n        this.parent = parent;\n    }\n    CellMergeRender.prototype.render = function (cellArgs, row, i, td) {\n        var cellRendererFact = this.serviceLocator.getService('cellRendererFactory');\n        var cellRenderer = cellRendererFact.getCellRenderer(row.cells[parseInt(i.toString(), 10)].cellType\n            || CellType.Data);\n        var colSpan = row.cells[parseInt(i.toString(), 10)].cellSpan ? row.cells[parseInt(i.toString(), 10)].cellSpan :\n            (cellArgs.colSpan + i) <= row.cells.length ? cellArgs.colSpan : row.cells.length - i;\n        var rowSpan = cellArgs.rowSpan;\n        var visible = 0;\n        var spannedCell;\n        if (row.index > 0) {\n            var rowsObject = this.parent.getRowsObject();\n            var cells = this.parent.groupSettings.columns.length > 0 &&\n                !rowsObject[row.index - 1].isDataRow ? rowsObject[row.index].cells : rowsObject[row.index - 1].cells;\n            var targetCell_1 = row.cells[parseInt(i.toString(), 10)];\n            var uid_1 = 'uid';\n            spannedCell = cells.filter(function (cell) { return cell.column.uid === targetCell_1.column[\"\" + uid_1]; })[0];\n        }\n        var colSpanLen = spannedCell && spannedCell.colSpanRange > 1 && spannedCell.rowSpanRange > 1 ?\n            spannedCell.colSpanRange : colSpan;\n        for (var j = i + 1; j < i + colSpanLen && j < row.cells.length; j++) {\n            if (row.cells[parseInt(j.toString(), 10)].visible === false) {\n                visible++;\n            }\n            else {\n                row.cells[parseInt(j.toString(), 10)].isSpanned = true;\n            }\n        }\n        if (visible > 0) {\n            for (var j = i + colSpan; j < i + colSpan + visible && j < row.cells.length; j++) {\n                row.cells[parseInt(j.toString(), 10)].isSpanned = true;\n            }\n            if (i + colSpan + visible >= row.cells.length) {\n                colSpan -= (i + colSpan + visible) - row.cells.length;\n            }\n        }\n        if (row.cells[parseInt(i.toString(), 10)].cellSpan) {\n            row.data[cellArgs.column.field] = row.cells[parseInt(i.toString(), 10)].spanText;\n            td = cellRenderer.render(row.cells[parseInt(i.toString(), 10)], row.data, { 'index': !isNullOrUndefined(row.index) ? row.index.toString() : '' });\n        }\n        if (colSpan > 1) {\n            attributes(td, { 'colSpan': colSpan.toString(), 'aria-colSpan': colSpan.toString() });\n        }\n        if (rowSpan > 1) {\n            attributes(td, { 'rowspan': rowSpan.toString(), 'aria-rowspan': rowSpan.toString() });\n            row.cells[parseInt(i.toString(), 10)].isRowSpanned = true;\n            row.cells[parseInt(i.toString(), 10)].rowSpanRange = Number(rowSpan);\n            if (colSpan > 1) {\n                row.cells[parseInt(i.toString(), 10)].colSpanRange = Number(colSpan);\n            }\n        }\n        if (row.index > 0 && (spannedCell.rowSpanRange > 1)) {\n            row.cells[parseInt(i.toString(), 10)].isSpanned = true;\n            row.cells[parseInt(i.toString(), 10)].rowSpanRange = Number(spannedCell.rowSpanRange - 1);\n            row.cells[parseInt(i.toString(), 10)].colSpanRange = spannedCell.rowSpanRange > 0 ? spannedCell.colSpanRange : 1;\n        }\n        if (this.parent.enableColumnVirtualization && !row.cells[parseInt(i.toString(), 10)].cellSpan &&\n            !this.containsKey(cellArgs.column.field, cellArgs.data[cellArgs.column.field])) {\n            this.backupMergeCells(cellArgs.column.field, cellArgs.data[cellArgs.column.field], cellArgs.colSpan);\n        }\n        return td;\n    };\n    CellMergeRender.prototype.backupMergeCells = function (fName, data, span) {\n        this.setMergeCells(this.generteKey(fName, data), span);\n    };\n    CellMergeRender.prototype.generteKey = function (fname, data) {\n        return fname + '__' + data.toString();\n    };\n    CellMergeRender.prototype.splitKey = function (key) {\n        return key.split('__');\n    };\n    CellMergeRender.prototype.containsKey = function (fname, data) {\n        // eslint-disable-next-line no-prototype-builtins\n        return this.getMergeCells().hasOwnProperty(this.generteKey(fname, data));\n    };\n    CellMergeRender.prototype.getMergeCells = function () {\n        return this.parent.mergeCells;\n    };\n    CellMergeRender.prototype.setMergeCells = function (key, span) {\n        this.parent.mergeCells[\"\" + key] = span;\n    };\n    CellMergeRender.prototype.updateVirtualCells = function (rows) {\n        var mCells = this.getMergeCells();\n        for (var _i = 0, _a = Object.keys(mCells); _i < _a.length; _i++) {\n            var key = _a[_i];\n            var value = mCells[\"\" + key];\n            var merge = this.splitKey(key);\n            var columnIndex = this.getIndexFromAllColumns(merge[0]);\n            var vColumnIndices = this.parent.getColumnIndexesInView();\n            var span = value - (vColumnIndices[0] - columnIndex);\n            if (columnIndex < vColumnIndices[0] && span > 1) {\n                for (var _b = 0, rows_1 = rows; _b < rows_1.length; _b++) {\n                    var row = rows_1[_b];\n                    if (row.data[merge[0]].toString() === merge[1].toString()) {\n                        row.cells[0].cellSpan = span;\n                        row.cells[0].spanText = merge[1];\n                        break;\n                    }\n                }\n            }\n        }\n        return rows;\n    };\n    CellMergeRender.prototype.getIndexFromAllColumns = function (field) {\n        var index = iterateArrayOrObject(this.parent.getVisibleColumns(), function (item, index) {\n            if (item.field === field) {\n                return index;\n            }\n            return undefined;\n        })[0];\n        return index;\n    };\n    return CellMergeRender;\n}());\nexport { CellMergeRender };\n","import { EventHandler, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { remove, select, removeClass } from '@syncfusion/ej2-base';\nimport { Toolbar as tool } from '@syncfusion/ej2-navigations';\nimport * as events from '../base/constant';\nimport { templateCompiler, appendChildren, parentsUntil, addRemoveEventListener, applyBiggerTheme } from '../base/util';\nimport { ResponsiveToolbarAction } from '../base/enum';\nimport { ContextMenu as Menu } from '@syncfusion/ej2-navigations';\nimport { calculatePosition } from '@syncfusion/ej2-popups';\nimport { SearchBox } from '../services/focus-strategy';\n/**\n *\n * The `Toolbar` module is used to handle ToolBar actions.\n */\nvar Toolbar = /** @class */ (function () {\n    function Toolbar(parent, serviceLocator) {\n        this.predefinedItems = {};\n        this.isSearched = false;\n        this.items = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print', 'Search',\n            'ColumnChooser', 'PdfExport', 'ExcelExport', 'CsvExport', 'WordExport'];\n        this.isRightToolbarMenu = false;\n        this.parent = parent;\n        this.gridID = parent.element.id;\n        this.serviceLocator = serviceLocator;\n        this.addEventListener();\n    }\n    Toolbar.prototype.render = function () {\n        this.l10n = this.serviceLocator.getService('localization');\n        var preItems = ['Add', 'Edit', 'Update', 'Delete', 'Cancel', 'Print',\n            'PdfExport', 'ExcelExport', 'WordExport', 'CsvExport'];\n        var isAdaptive = this.parent.enableAdaptiveUI;\n        var excludingItems = ['Edit', 'Delete', 'Update', 'Cancel'];\n        for (var _i = 0, preItems_1 = preItems; _i < preItems_1.length; _i++) {\n            var item = preItems_1[_i];\n            var itemStr = item.toLowerCase();\n            var localeName = itemStr[0].toUpperCase() + itemStr.slice(1);\n            this.predefinedItems[\"\" + item] = {\n                id: this.gridID + '_' + itemStr, prefixIcon: 'e-' + itemStr,\n                text: this.l10n.getConstant(localeName), tooltipText: this.l10n.getConstant(localeName)\n            };\n            if (isAdaptive) {\n                this.predefinedItems[\"\" + item].text = '';\n                this.predefinedItems[\"\" + item].visible = excludingItems.indexOf(item) === -1;\n            }\n        }\n        this.predefinedItems.Search = {\n            id: this.gridID + '_search',\n            tooltipText: this.l10n.getConstant('Search'), align: 'Right', cssClass: 'e-search-wrapper',\n            type: 'Input'\n        };\n        this.isRightToolbarMenu = false;\n        if (this.parent.enableAdaptiveUI && this.isResponsiveToolbarMenuItems(true) && ((this.parent.rowRenderingMode === 'Horizontal') ||\n            (this.parent.rowRenderingMode === 'Vertical' && !this.parent.allowFiltering && !this.parent.allowSorting))) {\n            this.isRightToolbarMenu = true;\n        }\n        if (isAdaptive && this.isResponsiveToolbarMenuItems(false)) {\n            this.predefinedItems.responsiveToolbarItems = {\n                id: this.gridID + '_' + 'responsivetoolbaritems', cssClass: 'e-responsive-toolbar-items e-menu-toolbar', suffixIcon: 'e-' + 'responsivetoolbaritems-btn',\n                align: this.isRightToolbarMenu ? 'Left' : 'Right'\n            };\n        }\n        else {\n            this.predefinedItems.ColumnChooser = {\n                id: this.gridID + '_' + 'columnchooser', cssClass: 'e-cc e-ccdiv e-cc-toolbar', suffixIcon: 'e-' + 'columnchooser-btn',\n                text: isAdaptive ? '' : this.l10n.getConstant('Columnchooser'),\n                tooltipText: this.l10n.getConstant('Columnchooser'), align: 'Right'\n            };\n        }\n        if (this.parent.rowRenderingMode === 'Vertical') {\n            if (this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') {\n                this.predefinedItems.responsiveFilter = {\n                    id: this.gridID + '_' + 'responsivefilter', cssClass: 'e-gridresponsiveicons e-icons',\n                    suffixIcon: 'e-' + 'resfilter-icon', tooltipText: this.l10n.getConstant('FilterButton')\n                };\n            }\n            if (this.parent.allowSorting) {\n                this.predefinedItems.responsiveSort = {\n                    id: this.gridID + '_' + 'responsivesort', cssClass: 'e-gridresponsiveicons e-icons',\n                    suffixIcon: 'e-' + 'ressort-icon', tooltipText: this.l10n.getConstant('Sort')\n                };\n            }\n        }\n        if (this.parent.enableAdaptiveUI && this.parent.toolbar && this.parent.toolbar.indexOf('Search') > -1) {\n            this.predefinedItems.responsiveBack = {\n                id: this.gridID + '_' + 'responsiveback', cssClass: 'e-gridresponsiveicons e-icons',\n                suffixIcon: 'e-' + 'resback-icon', visible: false\n            };\n        }\n        this.createToolbar();\n        if (this.parent.enableAdaptiveUI) {\n            if (isNullOrUndefined(this.responsiveToolbarMenu)) {\n                this.renderResponsiveToolbarpopup();\n            }\n            this.toolbar.refreshOverflow();\n        }\n    };\n    Toolbar.prototype.isResponsiveToolbarMenuItems = function (isRight) {\n        var items = isRight ? ['Add', 'Edit', 'Delete', 'Search'] : ['Print', 'ColumnChooser', 'PdfExport', 'ExcelExport', 'CsvExport'];\n        var toolbarItems = this.parent.toolbar || [];\n        for (var i = 0; i < items.length; i++) {\n            if (toolbarItems.indexOf(items[parseInt(i.toString(), 10)]) >= 0) {\n                return isRight ? false : true;\n            }\n        }\n        return isRight ? true : false;\n    };\n    /**\n     * Gets the toolbar of the Grid.\n     *\n     * @returns {Element} returns the element\n     * @hidden\n     */\n    Toolbar.prototype.getToolbar = function () {\n        return this.toolbar.element;\n    };\n    /**\n     * Destroys the ToolBar.\n     *\n     * @function destroy\n     * @returns {void}\n     */\n    Toolbar.prototype.destroy = function () {\n        if (this.toolbar && !this.toolbar.isDestroyed) {\n            if (this.responsiveToolbarMenu) {\n                this.responsiveToolbarMenu.destroy();\n            }\n            if (!this.toolbar.element) {\n                this.parent.destroyTemplate(['toolbarTemplate']);\n                if (this.parent.isReact) {\n                    this.parent.renderTemplates();\n                }\n            }\n            else {\n                this.toolbar.off('render-react-toolbar-template', this.addReactToolbarPortals);\n                this.toolbar.destroy();\n            }\n            this.unWireEvent();\n            this.removeEventListener();\n            if (this.element.parentNode) {\n                remove(this.element);\n            }\n        }\n    };\n    Toolbar.prototype.bindSearchEvents = function () {\n        this.searchElement = select('#' + this.gridID + '_searchbar', this.element);\n        this.wireEvent();\n        this.refreshToolbarItems();\n        if (this.parent.searchSettings) {\n            this.updateSearchBox();\n        }\n    };\n    Toolbar.prototype.toolbarCreated = function (isNormal) {\n        if (this.element.querySelector('.e-search-wrapper')) {\n            if (!this.parent.enableAdaptiveUI || isNormal) {\n                var classList = this.parent.cssClass ? 'e-input-group e-search ' + this.parent.cssClass\n                    : 'e-input-group e-search';\n                this.element.querySelector('.e-search-wrapper').innerHTML = '<div class=\"' + classList + '\" role=\"search\">\\\n                    <input id=\"' + this.gridID + '_searchbar\" class=\"e-input e-search\" name=\"input\" type=\"search\" \\\n                    placeholder= \"' + this.l10n.getConstant('Search') + '\"/>\\\n                    <span id=\"' + this.gridID + '_clearbutton\" class=\"e-input-group-icon e-icons e-sicon\" \\\n                    tabindex=\"-1\" aria-label= \"clear\" role= \"button\" style=\"cursor: default\"></span>\\\n                    <span id=\"' + this.gridID + '_searchbutton\" class=\"e-input-group-icon e-search-icon e-icons\" \\\n                    tabindex=\"-1\" title=\"' + this.l10n.getConstant('Search') + '\" role= \"search\"></span> \\\n                    </div>';\n            }\n            else {\n                this.element.querySelector('.e-search-wrapper').innerHTML = '<span id=\"' + this.gridID\n                    + '_clearbutton\" class=\"e-input-group-icon e-icons e-sicon\" \\\n                    tabindex=\"-1\" role= \"button\" aria-label= \"clear\" style=\"cursor: default\"></span>\\\n                    <span id=\"' + this.gridID\n                    + '_searchbutton\" class=\"e-input-group-icon e-search-icon e-icons\" \\\n                    tabindex=\"-1\" role= \"button\" title=\"' + this.l10n.getConstant('Search') + '\"></span> \\\n                    </div>';\n            }\n        }\n        if (this.element.querySelector('.e-responsive-toolbar-items')) {\n            this.element.querySelector('.e-responsive-toolbar-items').innerHTML = '<button id=\"' + this.gridID\n                + '_responsivetoolbaritems\" class=\"e-tbar-btn e-control e-btn e-lib e-icon-btn\" \\\n                    type=\"button\" data-ripple=\"true\" tabindex=\"-1\" data-tabindex=\"-1\" aria-label=\"responsivetoolbaritems\" \\\n                     aria-disabled=\"false\" style=\"width: auto;\"><span class=\"e-btn-icon e-responsivetoolbaritems-btn e-icons\"></span>';\n        }\n        this.bindSearchEvents();\n    };\n    Toolbar.prototype.createToolbar = function () {\n        var items = this.getItems();\n        this.toolbar = new tool({\n            items: items,\n            clicked: this.toolbarClickHandler.bind(this),\n            enablePersistence: this.parent.enablePersistence,\n            enableRtl: this.parent.enableRtl,\n            created: this.toolbarCreated.bind(this),\n            cssClass: this.parent.cssClass ? this.parent.cssClass : ''\n        });\n        this.toolbar.isReact = this.parent.isReact;\n        this.toolbar.on('render-react-toolbar-template', this.addReactToolbarPortals, this);\n        var isStringTemplate = 'isStringTemplate';\n        this.toolbar[\"\" + isStringTemplate] = true;\n        var viewStr = 'viewContainerRef';\n        var registerTemp = 'registeredTemplate';\n        if (this.parent[\"\" + viewStr]) {\n            this.toolbar[\"\" + registerTemp] = {};\n            this.toolbar[\"\" + viewStr] = this.parent[\"\" + viewStr];\n        }\n        this.element = this.parent.createElement('div', { id: this.gridID + '_toolbarItems' });\n        if (this.parent.enableAdaptiveUI) {\n            this.element.classList.add('e-res-toolbar');\n        }\n        if (this.parent.toolbarTemplate) {\n            if (typeof (this.parent.toolbarTemplate) === 'string') {\n                this.toolbar.appendTo(this.parent.toolbarTemplate);\n                this.element = this.toolbar.element;\n            }\n            else {\n                var isReactCompiler = this.parent.isReact && typeof (this.parent.toolbarTemplate) !== 'string';\n                var isReactChild = this.parent.parentDetails && this.parent.parentDetails.parentInstObj &&\n                    this.parent.parentDetails.parentInstObj.isReact;\n                var ID = this.parent.element.id + 'toolbarTemplate';\n                if (isReactCompiler || isReactChild) {\n                    templateCompiler(this.parent.toolbarTemplate)({}, this.parent, 'toolbarTemplate', ID, null, null, this.element);\n                    this.parent.renderTemplates();\n                }\n                else {\n                    appendChildren(this.element, templateCompiler(this.parent.toolbarTemplate)({}, this.parent, 'toolbarTemplate'));\n                }\n            }\n            this.element.classList.add('e-temp-toolbar');\n        }\n        else {\n            this.toolbar.appendTo(this.element);\n        }\n        this.parent.element.insertBefore(this.element, this.parent.getHeaderContent());\n        var tlbrLeftElement = this.element.querySelector('.e-toolbar-left');\n        var tlbrCenterElement = this.element.querySelector('.e-toolbar-center');\n        var tlbrRightElement = this.element.querySelector('.e-toolbar-right');\n        var tlbrItems = this.element.querySelector('.e-toolbar-items');\n        var tlbrElement = this.element;\n        var tlbrLeftWidth = tlbrLeftElement ? tlbrLeftElement.clientWidth : 0;\n        var tlbrCenterWidth = tlbrCenterElement ? tlbrCenterElement.clientWidth : 0;\n        var tlbrRightWidth = tlbrRightElement ? tlbrRightElement.clientWidth : 0;\n        var tlbrItemsWidth = tlbrItems ? tlbrItems.clientWidth : 0;\n        var tlbrWidth = tlbrElement ? tlbrElement.clientWidth : 0;\n        if (tlbrLeftWidth > tlbrWidth || tlbrCenterWidth > tlbrWidth || tlbrRightWidth > tlbrWidth || tlbrItemsWidth > tlbrWidth) {\n            this.toolbar.refreshOverflow();\n        }\n    };\n    Toolbar.prototype.addReactToolbarPortals = function (args) {\n        if (this.parent.isReact && args) {\n            this.parent.portals = this.parent.portals.concat(args);\n            this.parent.renderTemplates();\n        }\n    };\n    Toolbar.prototype.renderResponsiveSearch = function (isRender) {\n        if (isRender) {\n            this.toolbarCreated(true);\n            this.refreshResponsiveToolbarItems(ResponsiveToolbarAction.isSearch);\n            this.searchElement = select('#' + this.gridID + '_searchbar', this.element);\n            var right = parentsUntil(this.searchElement, 'e-toolbar-right');\n            right.classList.add('e-responsive-right');\n            if (this.parent.searchSettings) {\n                this.updateSearchBox();\n            }\n            this.searchBoxObj.searchFocus({ target: this.searchElement });\n            this.searchElement.focus();\n        }\n        else {\n            this.refreshResponsiveToolbarItems(ResponsiveToolbarAction.isInitial);\n        }\n    };\n    Toolbar.prototype.refreshResponsiveToolbarItems = function (action) {\n        if (action === ResponsiveToolbarAction.isInitial) {\n            var id = this.parent.element.id;\n            var items = [id + '_edit', id + '_delete'];\n            var selectedRecords = this.parent.getSelectedRowIndexes();\n            var excludingItems = [id + '_responsiveback', id + '_update', id + '_cancel'];\n            for (var _i = 0, _a = this.toolbar.items; _i < _a.length; _i++) {\n                var item = _a[_i];\n                var toolbarEle = item.template.length ? this.toolbar.element.querySelector(item.template) : this.toolbar.element.querySelector('#' + item.id);\n                if (toolbarEle) {\n                    if (items.indexOf(item.id) > -1) {\n                        if (selectedRecords.length) {\n                            toolbarEle.parentElement.classList.remove('e-hidden');\n                        }\n                        else {\n                            toolbarEle.parentElement.classList.add('e-hidden');\n                        }\n                    }\n                    else {\n                        if (excludingItems.indexOf(item.id) === -1) {\n                            toolbarEle.parentElement.classList.remove('e-hidden');\n                        }\n                        else {\n                            toolbarEle.parentElement.classList.add('e-hidden');\n                        }\n                    }\n                }\n            }\n            if (this.searchElement) {\n                var right = parentsUntil(this.searchElement, 'e-toolbar-right');\n                right.classList.remove('e-responsive-right');\n                this.toolbarCreated(false);\n                this.unWireEvent();\n                this.searchElement = undefined;\n            }\n        }\n        if (action === ResponsiveToolbarAction.isSearch) {\n            var items = [this.parent.element.id + '_responsiveback', this.parent.element.id + '_search'];\n            for (var _b = 0, _c = this.toolbar.items; _b < _c.length; _b++) {\n                var item = _c[_b];\n                var toolbarEle = this.toolbar.element.querySelector('#' + item.id);\n                if (toolbarEle) {\n                    if (items.indexOf(item.id) > -1) {\n                        toolbarEle.parentElement.classList.remove('e-hidden');\n                    }\n                    else {\n                        toolbarEle.parentElement.classList.add('e-hidden');\n                    }\n                }\n            }\n        }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    Toolbar.prototype.refreshToolbarItems = function (args) {\n        var gObj = this.parent;\n        var enableItems = [];\n        var disableItems = [];\n        var edit = gObj.editSettings;\n        var hasData = gObj.currentViewData && gObj.currentViewData.length;\n        if (edit.allowAdding) {\n            enableItems.push(this.gridID + '_add');\n        }\n        else {\n            disableItems.push(this.gridID + '_add');\n        }\n        if (edit.allowEditing && hasData) {\n            enableItems.push(this.gridID + '_edit');\n        }\n        else {\n            disableItems.push(this.gridID + '_edit');\n        }\n        if (edit.allowDeleting && hasData) {\n            enableItems.push(this.gridID + '_delete');\n        }\n        else {\n            disableItems.push(this.gridID + '_delete');\n        }\n        if (gObj.editSettings.mode === 'Batch') {\n            if (gObj.element.getElementsByClassName('e-updatedtd').length && (edit.allowAdding || edit.allowEditing)) {\n                enableItems.push(this.gridID + '_update');\n                enableItems.push(this.gridID + '_cancel');\n            }\n            else {\n                disableItems.push(this.gridID + '_update');\n                disableItems.push(this.gridID + '_cancel');\n            }\n        }\n        else {\n            if (gObj.isEdit && (edit.allowAdding || edit.allowEditing)) {\n                enableItems = [this.gridID + '_update', this.gridID + '_cancel'];\n                disableItems = [this.gridID + '_add', this.gridID + '_edit', this.gridID + '_delete'];\n            }\n            else {\n                disableItems.push(this.gridID + '_update');\n                disableItems.push(this.gridID + '_cancel');\n            }\n        }\n        this.enableItems(enableItems, true);\n        this.enableItems(disableItems, false);\n    };\n    Toolbar.prototype.getItems = function () {\n        var items = [];\n        var toolbarItems = this.parent.toolbar || [];\n        var toolbarItemsString = false;\n        if (typeof (this.parent.toolbar) === 'string') {\n            return [];\n        }\n        if (this.parent.rowRenderingMode === 'Vertical') {\n            if (this.parent.allowFiltering && this.parent.filterSettings.type !== 'FilterBar') {\n                items.push(this.getItemObject('responsiveFilter'));\n            }\n            if (this.parent.allowSorting) {\n                items.push(this.getItemObject('responsiveSort'));\n            }\n        }\n        for (var _i = 0, toolbarItems_1 = toolbarItems; _i < toolbarItems_1.length; _i++) {\n            var item = toolbarItems_1[_i];\n            if (this.parent.enableAdaptiveUI && ['Print', 'ColumnChooser',\n                'PdfExport', 'ExcelExport', 'CsvExport'].indexOf(item) !== -1) {\n                toolbarItemsString = true;\n                continue;\n            }\n            switch (typeof item) {\n                case 'number':\n                    items.push(this.getItemObject(this.items[item]));\n                    break;\n                case 'string':\n                    items.push(this.getItemObject(item));\n                    break;\n                default:\n                    items.push(this.getItem(item));\n            }\n        }\n        if (this.parent.enableAdaptiveUI && this.parent.toolbar && this.parent.toolbar.indexOf('Search') > -1) {\n            items.push(this.getItemObject('responsiveBack'));\n        }\n        if (this.parent.enableAdaptiveUI && this.isResponsiveToolbarMenuItems(false)) {\n            items.push(this.getItemObject('responsiveToolbarItems'));\n        }\n        return items;\n    };\n    Toolbar.prototype.getItem = function (itemObject) {\n        var item = this.predefinedItems[itemObject.text];\n        return item ? extend(item, item, itemObject) : itemObject;\n    };\n    Toolbar.prototype.getItemObject = function (itemName) {\n        return this.predefinedItems[\"\" + itemName] || { text: itemName, id: this.gridID + '_' + itemName };\n    };\n    /**\n     * Enables or disables ToolBar items.\n     *\n     * @param {string[]} items - Defines the collection of itemID of ToolBar items.\n     * @param {boolean} isEnable - Defines the items to be enabled or disabled.\n     * @returns {void}\n     * @hidden\n     */\n    Toolbar.prototype.enableItems = function (items, isEnable) {\n        for (var _i = 0, items_1 = items; _i < items_1.length; _i++) {\n            var item = items_1[_i];\n            var element = select('#' + item, this.element);\n            if (element) {\n                this.toolbar.enableItems(element.closest('.e-toolbar-item'), isEnable);\n            }\n        }\n    };\n    Toolbar.prototype.toolbarClickHandler = function (args) {\n        var _this = this;\n        var gObj = this.parent;\n        var gID = this.gridID;\n        var originalEvent = args.originalEvent;\n        if (this.parent.enableAdaptiveUI && args.item.id === gID + '_responsivetoolbaritems') {\n            this.openResponsiveToolbarMenuPopup(originalEvent, args.item.id);\n        }\n        else {\n            extend(args, { cancel: false });\n            var newArgs = args;\n            gObj.trigger(events.toolbarClick, newArgs, function (toolbarargs) {\n                toolbarargs.originalEvent = toolbarargs.originalEvent ? toolbarargs.originalEvent : originalEvent;\n                if (!toolbarargs.cancel) {\n                    switch (!isNullOrUndefined(toolbarargs.item) && toolbarargs.item.id) {\n                        case gID + '_print':\n                            gObj.print();\n                            break;\n                        case gID + '_edit':\n                            gObj.startEdit();\n                            break;\n                        case gID + '_update':\n                            gObj.endEdit();\n                            break;\n                        case gID + '_cancel':\n                            gObj.closeEdit();\n                            break;\n                        case gID + '_add':\n                            gObj.addRecord();\n                            break;\n                        case gID + '_delete':\n                            gObj.deleteRecord();\n                            break;\n                        case gID + '_search':\n                            if (toolbarargs.originalEvent.target.id === gID + '_searchbutton' && _this.searchElement) {\n                                _this.search();\n                            }\n                            else if (gObj.enableAdaptiveUI && !_this.searchElement\n                                && (toolbarargs.originalEvent.target.classList.contains('e-search-wrapper')\n                                    || toolbarargs.originalEvent.target.id === gID + '_searchbutton')) {\n                                _this.renderResponsiveSearch(true);\n                            }\n                            else if (toolbarargs.originalEvent.target.classList.contains('e-clear-icon') && toolbarargs.originalEvent.target.id === gID + '_clearbutton' && _this.searchElement) {\n                                _this.searchElement.value = '';\n                                if (_this.searchElement) {\n                                    _this.sIcon = _this.searchElement.parentElement.querySelector('.e-sicon');\n                                    _this.sIcon.classList.remove('e-clear-icon');\n                                    _this.sIcon.removeAttribute('title');\n                                    _this.sIcon.style.cursor = 'default';\n                                }\n                                if (_this.isSearched || _this.parent.searchSettings.key.length) {\n                                    _this.parent.search(_this.searchElement.value);\n                                    _this.isSearched = false;\n                                }\n                            }\n                            break;\n                        case gID + '_columnchooser':\n                            if (_this.parent.enableAdaptiveUI) {\n                                gObj.showResponsiveCustomColumnChooser();\n                            }\n                            else {\n                                /* eslint-disable */\n                                var tarElement = _this.parent.element.querySelector('.e-ccdiv');\n                                var y = tarElement.getBoundingClientRect().top;\n                                var x = tarElement.getBoundingClientRect().left;\n                                var targetEle = toolbarargs.originalEvent.target;\n                                /* eslint-enable */\n                                y = tarElement.getBoundingClientRect().top + tarElement.offsetTop;\n                                gObj.createColumnchooser(x, y, targetEle);\n                            }\n                            break;\n                        case gID + '_responsivefilter':\n                            gObj.notify(events.renderResponsiveChangeAction, { action: 3 });\n                            gObj.showResponsiveCustomFilter();\n                            break;\n                        case gID + '_responsivesort':\n                            gObj.notify(events.renderResponsiveChangeAction, { action: 2 });\n                            gObj.showResponsiveCustomSort();\n                            break;\n                        case gID + '_responsiveback':\n                            _this.renderResponsiveSearch(false);\n                            break;\n                    }\n                }\n            });\n        }\n    };\n    Toolbar.prototype.openResponsiveToolbarMenuPopup = function (e, id) {\n        var pos = { top: 0, left: 0 };\n        this.toolbarMenuElement.style.cssText = 'display:block;visibility:hidden';\n        var elePos = this.toolbarMenuElement.getBoundingClientRect();\n        var gClient = this.parent.element.getBoundingClientRect();\n        this.toolbarMenuElement.style.cssText = 'display:none;visibility:visible';\n        var target;\n        if (isNullOrUndefined(e)) {\n            target = this.parent.element.querySelector('#' + id);\n        }\n        else {\n            target = e.target;\n        }\n        if (this.parent.enableRtl) {\n            pos = calculatePosition(target, 'left', 'bottom');\n            if (this.isRightToolbarMenu) {\n                pos.left -= elePos.width;\n            }\n        }\n        else {\n            pos = calculatePosition(target, 'right', 'bottom');\n            if (!this.isRightToolbarMenu) {\n                pos.left -= elePos.width;\n            }\n            if ((pos.left + elePos.width + 1) >= gClient.right) {\n                pos.left -= 35;\n            }\n        }\n        this.responsiveToolbarMenu['open'](pos.top, pos.left);\n        if (e && e.preventDefault) {\n            e.preventDefault();\n        }\n        applyBiggerTheme(this.parent.element, this.responsiveToolbarMenu.element.parentElement);\n    };\n    Toolbar.prototype.getMenuItems = function () {\n        var items = [];\n        var toolbarItems = this.parent.toolbar || [];\n        for (var _i = 0, toolbarItems_2 = toolbarItems; _i < toolbarItems_2.length; _i++) {\n            var item = toolbarItems_2[_i];\n            if (typeof item === 'string' && (item === 'ColumnChooser' || item === 'PdfExport' || item === 'ExcelExport' ||\n                item === 'CsvExport' || item === 'Print')) {\n                items.push({\n                    text: this.getLocaleText(item),\n                    id: this.gridID + '_' + item.toLowerCase(),\n                    iconCss: 'e-btn-icon e-' + item.toLowerCase() + ' e-icons'\n                });\n            }\n        }\n        return items;\n    };\n    Toolbar.prototype.getLocaleText = function (item) {\n        var title;\n        if (item === 'ColumnChooser') {\n            title = this.l10n.getConstant('Columnchooser');\n        }\n        else if (item === 'PdfExport') {\n            title = this.l10n.getConstant('Pdfexport');\n        }\n        else if (item === 'ExcelExport') {\n            title = this.l10n.getConstant('Excelexport');\n        }\n        else if (item === 'CsvExport') {\n            title = this.l10n.getConstant('Csvexport');\n        }\n        else if (item === 'Print') {\n            title = this.l10n.getConstant('Print');\n        }\n        return title;\n    };\n    Toolbar.prototype.renderResponsiveToolbarpopup = function () {\n        this.l10n = this.serviceLocator.getService('localization');\n        this.toolbarMenuElement = this.parent.createElement('ul', {\n            id: this.gridID + '__toolbaritemsmenu', className: 'e-responsivetoolbar-menu'\n        });\n        this.element.setAttribute('aria-label', this.l10n.getConstant('ToolbarMenuDialogARIA'));\n        this.parent.element.appendChild(this.toolbarMenuElement);\n        this.responsiveToolbarMenu = new Menu({\n            cssClass: this.parent.cssClass ? 'e-grid-toolbarmenu' + ' ' + this.parent.cssClass : 'e-grid-toolbarmenu',\n            enableRtl: this.parent.enableRtl,\n            enablePersistence: this.parent.enablePersistence,\n            locale: this.parent.locale,\n            items: this.getMenuItems(),\n            select: this.ResponsiveToolbarMenuItemClick.bind(this),\n        });\n        this.responsiveToolbarMenu.appendTo(this.toolbarMenuElement);\n    };\n    Toolbar.prototype.ResponsiveToolbarMenuItemClick = function (args) {\n        var _this = this;\n        var gObj = this.parent;\n        var element = args.element;\n        args.item.id = element.id;\n        var newArgs = { cancel: false, name: 'clicked', item: args.item, originalEvent: args.event };\n        gObj.trigger(events.toolbarClick, newArgs, function (toolbarargs) {\n            if (!toolbarargs.cancel) {\n                switch (!isNullOrUndefined(toolbarargs.item) && toolbarargs.item.id) {\n                    case _this.gridID + '_columnchooser':\n                        gObj.notify(events.renderResponsiveChangeAction, { action: 5 });\n                        gObj.showResponsiveCustomColumnChooser();\n                        break;\n                    case _this.gridID + '_print':\n                        gObj.print();\n                        break;\n                }\n            }\n        });\n    };\n    Toolbar.prototype.modelChanged = function (e) {\n        if (e.module === 'edit') {\n            this.refreshToolbarItems();\n        }\n    };\n    Toolbar.prototype.onPropertyChanged = function (e) {\n        if (e.module !== this.getModuleName() || !this.parent.toolbar) {\n            return;\n        }\n        if (this.element) {\n            remove(this.element);\n        }\n        this.render();\n    };\n    Toolbar.prototype.keyUpHandler = function (e) {\n        if (e.keyCode === 13) {\n            this.search();\n        }\n        if (this.searchElement) {\n            this.sIcon = this.searchElement.parentElement.querySelector('.e-sicon');\n            if (this.searchElement.value.length && !isNullOrUndefined(this.sIcon)) {\n                this.sIcon.classList.add('e-clear-icon');\n                this.sIcon.setAttribute('title', this.l10n.getConstant('ClearButton'));\n                this.sIcon.style.cursor = 'pointer';\n            }\n            else {\n                this.sIcon.classList.remove('e-clear-icon');\n                this.sIcon.removeAttribute('title');\n                this.sIcon.style.cursor = 'default';\n            }\n        }\n    };\n    Toolbar.prototype.search = function () {\n        this.isSearched = true;\n        this.parent.search(this.searchElement.value);\n    };\n    Toolbar.prototype.updateSearchBox = function () {\n        if (this.searchElement) {\n            this.searchElement.value = this.parent.searchSettings.key;\n        }\n    };\n    Toolbar.prototype.wireEvent = function () {\n        if (this.searchElement) {\n            this.searchBoxObj = new SearchBox(this.searchElement, this.serviceLocator);\n            EventHandler.add(this.searchElement, 'keyup', this.keyUpHandler, this);\n            this.searchBoxObj.wireEvent();\n        }\n        EventHandler.add(this.element, 'focusin', this.onFocusIn, this);\n        EventHandler.add(this.element, 'focusout', this.onFocusOut, this);\n    };\n    Toolbar.prototype.unWireEvent = function () {\n        if (this.searchElement) {\n            EventHandler.remove(this.searchElement, 'keyup', this.keyUpHandler);\n            this.searchBoxObj.unWireEvent();\n        }\n        EventHandler.remove(this.element, 'focusin', this.onFocusIn);\n        EventHandler.remove(this.element, 'focusout', this.onFocusOut);\n    };\n    Toolbar.prototype.onFocusIn = function (e) {\n        var currentInfo = this.parent.focusModule.currentInfo;\n        if (currentInfo && currentInfo.element) {\n            removeClass([currentInfo.element, currentInfo.elementToFocus], ['e-focused', 'e-focus']);\n            currentInfo.element.tabIndex = -1;\n        }\n        e.target.tabIndex = 0;\n    };\n    Toolbar.prototype.onFocusOut = function (e) {\n        e.target.tabIndex = -1;\n    };\n    Toolbar.prototype.setFocusToolbarItem = function (element) {\n        var elementToFocus = element.querySelector('.e-btn,.e-input,.e-toolbar-item-focus');\n        if (!elementToFocus && this.parent.enableAdaptiveUI && !this.searchElement\n            && element.classList.contains('e-search-wrapper')) {\n            elementToFocus = element.querySelector('#' + this.gridID + '_searchbutton');\n        }\n        elementToFocus.focus();\n    };\n    Toolbar.prototype.getFocusableToolbarItems = function () {\n        var getFocusToolbarElements = [].slice.call(this.element.querySelectorAll('.e-toolbar-item:not(.e-overlay):not(.e-hidden)'));\n        var getFocusToolbarItems = [];\n        for (var i = 0; i < getFocusToolbarElements.length; i++) {\n            if (!isNullOrUndefined(getFocusToolbarElements[parseInt(i.toString(), 10)].querySelector('.e-btn,.e-input,.e-toolbar-item-focus'))) {\n                getFocusToolbarItems.push(getFocusToolbarElements[parseInt(i.toString(), 10)]);\n            }\n        }\n        return getFocusToolbarItems;\n    };\n    Toolbar.prototype.keyPressedHandler = function (e) {\n        if (e.target && parentsUntil(e.target, 'e-toolbar-item')) {\n            var targetParent = parentsUntil(e.target, 'e-toolbar-item');\n            var focusableToolbarItems = this.getFocusableToolbarItems();\n            if (e.action === 'tab' || e.action === 'shiftTab') {\n                if ((e.action === 'tab' && targetParent === focusableToolbarItems[focusableToolbarItems.length - 1])\n                    || (e.action === 'shiftTab' && targetParent === focusableToolbarItems[0])) {\n                    return;\n                }\n                for (var i = 0; i < focusableToolbarItems.length; i++) {\n                    if (targetParent === focusableToolbarItems[parseInt(i.toString(), 10)]) {\n                        e.preventDefault();\n                        var index = e.action === 'tab' ? i + 1 : i - 1;\n                        this.setFocusToolbarItem(focusableToolbarItems[parseInt(index.toString(), 10)]);\n                        return;\n                    }\n                }\n            }\n            if (e.action === 'enter') {\n                if (this.parent.enableAdaptiveUI && !this.searchElement\n                    && e.target.id === this.gridID + '_searchbutton') {\n                    this.renderResponsiveSearch(true);\n                }\n            }\n        }\n    };\n    Toolbar.prototype.reRenderToolbar = function () {\n        if (this.element) {\n            remove(this.element);\n        }\n        this.render();\n    };\n    Toolbar.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.evtHandlers = [{ event: events.setFullScreenDialog, handler: this.reRenderToolbar },\n            { event: events.initialEnd, handler: this.render },\n            { event: events.uiUpdate, handler: this.onPropertyChanged },\n            { event: events.inBoundModelChanged, handler: this.updateSearchBox.bind(this) },\n            { event: events.modelChanged, handler: this.refreshToolbarItems },\n            { event: events.toolbarRefresh, handler: this.refreshToolbarItems },\n            { event: events.inBoundModelChanged, handler: this.modelChanged },\n            { event: events.dataBound, handler: this.refreshToolbarItems },\n            { event: events.click, handler: this.removeResponsiveSearch },\n            { event: events.rowModeChange, handler: this.reRenderToolbar },\n            { event: events.destroy, handler: this.destroy },\n            { event: events.keyPressed, handler: this.keyPressedHandler }];\n        addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n        this.rowSelectedFunction = this.rowSelected.bind(this);\n        this.rowDeSelectedFunction = this.rowSelected.bind(this);\n        this.parent.addEventListener(events.rowSelected, this.rowSelectedFunction);\n        this.parent.addEventListener(events.rowDeselected, this.rowDeSelectedFunction);\n    };\n    Toolbar.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        addRemoveEventListener(this.parent, this.evtHandlers, false);\n        this.parent.removeEventListener(events.rowSelected, this.rowSelectedFunction);\n        this.parent.removeEventListener(events.rowDeselected, this.rowDeSelectedFunction);\n    };\n    Toolbar.prototype.removeResponsiveSearch = function (e) {\n        var target = e.target;\n        var isSearch = target.classList.contains('e-search-icon') || target.classList.contains('e-search-wrapper');\n        if (this.parent.enableAdaptiveUI && !isSearch && this.searchElement\n            && !parentsUntil(e.target, 'e-res-toolbar')) {\n            this.renderResponsiveSearch(false);\n        }\n    };\n    Toolbar.prototype.rowSelected = function () {\n        if (this.parent.enableAdaptiveUI) {\n            this.refreshResponsiveToolbarItems(ResponsiveToolbarAction.isInitial);\n            this.toolbar.refreshOverflow();\n        }\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     */\n    Toolbar.prototype.getModuleName = function () {\n        return 'toolbar';\n    };\n    return Toolbar;\n}());\nexport { Toolbar };\n","//! moment.js locale configuration\n//! locale : Gujarati [gu]\n//! author : Kaushik Thanki : https://github.com/Kaushik1987\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '૧',\n            2: '૨',\n            3: '૩',\n            4: '૪',\n            5: '૫',\n            6: '૬',\n            7: '૭',\n            8: '૮',\n            9: '૯',\n            0: '૦',\n        },\n        numberMap = {\n            '૧': '1',\n            '૨': '2',\n            '૩': '3',\n            '૪': '4',\n            '૫': '5',\n            '૬': '6',\n            '૭': '7',\n            '૮': '8',\n            '૯': '9',\n            '૦': '0',\n        };\n\n    var gu = moment.defineLocale('gu', {\n        months: 'જાન્યુઆરી_ફેબ્રુઆરી_માર્ચ_એપ્રિલ_મે_જૂન_જુલાઈ_ઑગસ્ટ_સપ્ટેમ્બર_ઑક્ટ્બર_નવેમ્બર_ડિસેમ્બર'.split(\n            '_'\n        ),\n        monthsShort:\n            'જાન્યુ._ફેબ્રુ._માર્ચ_એપ્રિ._મે_જૂન_જુલા._ઑગ._સપ્ટે._ઑક્ટ્._નવે._ડિસે.'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays: 'રવિવાર_સોમવાર_મંગળવાર_બુધ્વાર_ગુરુવાર_શુક્રવાર_શનિવાર'.split(\n            '_'\n        ),\n        weekdaysShort: 'રવિ_સોમ_મંગળ_બુધ્_ગુરુ_શુક્ર_શનિ'.split('_'),\n        weekdaysMin: 'ર_સો_મં_બુ_ગુ_શુ_શ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm વાગ્યે',\n            LTS: 'A h:mm:ss વાગ્યે',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm વાગ્યે',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm વાગ્યે',\n        },\n        calendar: {\n            sameDay: '[આજ] LT',\n            nextDay: '[કાલે] LT',\n            nextWeek: 'dddd, LT',\n            lastDay: '[ગઇકાલે] LT',\n            lastWeek: '[પાછલા] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s મા',\n            past: '%s પહેલા',\n            s: 'અમુક પળો',\n            ss: '%d સેકંડ',\n            m: 'એક મિનિટ',\n            mm: '%d મિનિટ',\n            h: 'એક કલાક',\n            hh: '%d કલાક',\n            d: 'એક દિવસ',\n            dd: '%d દિવસ',\n            M: 'એક મહિનો',\n            MM: '%d મહિનો',\n            y: 'એક વર્ષ',\n            yy: '%d વર્ષ',\n        },\n        preparse: function (string) {\n            return string.replace(/[૧૨૩૪૫૬૭૮૯૦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Gujarati notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Gujarati.\n        meridiemParse: /રાત|બપોર|સવાર|સાંજ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'રાત') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'સવાર') {\n                return hour;\n            } else if (meridiem === 'બપોર') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'સાંજ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'રાત';\n            } else if (hour < 10) {\n                return 'સવાર';\n            } else if (hour < 17) {\n                return 'બપોર';\n            } else if (hour < 20) {\n                return 'સાંજ';\n            } else {\n                return 'રાત';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return gu;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/no-explicit-any */\nimport { Component, Property, Event, EventHandler, L10n, compile, isNullOrUndefined, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, append, Animation } from '@syncfusion/ej2-base';\nimport { addClass, removeClass, KeyboardEvents, setValue, getValue, ChildProperty } from '@syncfusion/ej2-base';\nimport { Collection, Complex, Browser, Ajax, getUniqueID, closest, remove } from '@syncfusion/ej2-base';\nimport { createSpinner, showSpinner, hideSpinner } from '@syncfusion/ej2-popups';\nimport { select, selectAll } from '@syncfusion/ej2-base';\nvar CONTROL_WRAPPER = 'e-upload e-control-wrapper';\nvar INPUT_WRAPPER = 'e-file-select';\nvar DROP_AREA = 'e-file-drop';\nvar DROP_WRAPPER = 'e-file-select-wrap';\nvar LIST_PARENT = 'e-upload-files';\nvar FILE = 'e-upload-file-list';\nvar STATUS = 'e-file-status';\nvar ACTION_BUTTONS = 'e-upload-actions';\nvar UPLOAD_BUTTONS = 'e-file-upload-btn e-css e-btn e-flat e-primary';\nvar CLEAR_BUTTONS = 'e-file-clear-btn e-css e-btn e-flat';\nvar FILE_NAME = 'e-file-name';\nvar FILE_TYPE = 'e-file-type';\nvar FILE_SIZE = 'e-file-size';\nvar REMOVE_ICON = 'e-file-remove-btn';\nvar DELETE_ICON = 'e-file-delete-btn';\nvar SPINNER_PANE = 'e-spinner-pane';\nvar ABORT_ICON = 'e-file-abort-btn';\nvar RETRY_ICON = 'e-file-reload-btn';\nvar DRAG_HOVER = 'e-upload-drag-hover';\nvar PROGRESS_WRAPPER = 'e-upload-progress-wrap';\nvar PROGRESSBAR = 'e-upload-progress-bar';\nvar PROGRESSBAR_TEXT = 'e-progress-bar-text';\nvar UPLOAD_INPROGRESS = 'e-upload-progress';\nvar UPLOAD_SUCCESS = 'e-upload-success';\nvar UPLOAD_FAILED = 'e-upload-fails';\nvar TEXT_CONTAINER = 'e-file-container';\nvar VALIDATION_FAILS = 'e-validation-fails';\nvar RTL = 'e-rtl';\nvar DISABLED = 'e-disabled';\nvar RTL_CONTAINER = 'e-rtl-container';\nvar ICON_FOCUSED = 'e-clear-icon-focus';\nvar PROGRESS_INNER_WRAPPER = 'e-progress-inner-wrap';\nvar PAUSE_UPLOAD = 'e-file-pause-btn';\nvar RESUME_UPLOAD = 'e-file-play-btn';\nvar RESTRICT_RETRY = 'e-restrict-retry';\nvar wrapperAttr = ['title', 'style', 'class'];\nvar FORM_UPLOAD = 'e-form-upload';\nvar HIDDEN_INPUT = 'e-hidden-file-input';\nvar INVALID_FILE = 'e-file-invalid';\nvar INFORMATION = 'e-file-information';\nvar FilesProp = /** @class */ (function (_super) {\n    __extends(FilesProp, _super);\n    function FilesProp() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('')\n    ], FilesProp.prototype, \"name\", void 0);\n    __decorate([\n        Property(null)\n    ], FilesProp.prototype, \"size\", void 0);\n    __decorate([\n        Property('')\n    ], FilesProp.prototype, \"type\", void 0);\n    return FilesProp;\n}(ChildProperty));\nexport { FilesProp };\nvar ButtonsProps = /** @class */ (function (_super) {\n    __extends(ButtonsProps, _super);\n    function ButtonsProps() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('Browse...')\n    ], ButtonsProps.prototype, \"browse\", void 0);\n    __decorate([\n        Property('Upload')\n    ], ButtonsProps.prototype, \"upload\", void 0);\n    __decorate([\n        Property('Clear')\n    ], ButtonsProps.prototype, \"clear\", void 0);\n    return ButtonsProps;\n}(ChildProperty));\nexport { ButtonsProps };\nvar AsyncSettings = /** @class */ (function (_super) {\n    __extends(AsyncSettings, _super);\n    function AsyncSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('')\n    ], AsyncSettings.prototype, \"saveUrl\", void 0);\n    __decorate([\n        Property('')\n    ], AsyncSettings.prototype, \"removeUrl\", void 0);\n    __decorate([\n        Property(0)\n    ], AsyncSettings.prototype, \"chunkSize\", void 0);\n    __decorate([\n        Property(3)\n    ], AsyncSettings.prototype, \"retryCount\", void 0);\n    __decorate([\n        Property(500)\n    ], AsyncSettings.prototype, \"retryAfterDelay\", void 0);\n    return AsyncSettings;\n}(ChildProperty));\nexport { AsyncSettings };\n/**\n * The uploader component allows to upload images, documents, and other files from local to server.\n * ```html\n * <input type='file' name='images[]' id='upload'/>\n * ```\n * ```typescript\n * <script>\n *   var uploadObj = new Uploader();\n *   uploadObj.appendTo('#upload');\n * </script>\n * ```\n */\nvar Uploader = /** @class */ (function (_super) {\n    __extends(Uploader, _super);\n    /**\n     * Triggers when change the Uploader value.\n     *\n     * @param {UploaderModel} options - Specifies the Uploader model.\n     * @param {string | HTMLInputElement} element - Specifies the element to render as component.\n     * @private\n     */\n    function Uploader(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.initialAttr = { accept: null, multiple: false, disabled: false };\n        _this.uploadedFilesData = [];\n        _this.base64String = [];\n        _this.isForm = false;\n        _this.allTypes = false;\n        _this.pausedData = [];\n        _this.uploadMetaData = [];\n        _this.tabIndex = '0';\n        _this.btnTabIndex = '0';\n        _this.disableKeyboardNavigation = false;\n        _this.count = -1;\n        _this.actionCompleteCount = 0;\n        _this.flag = true;\n        _this.selectedFiles = [];\n        _this.uploaderName = 'UploadFiles';\n        _this.fileStreams = [];\n        _this.newFileRef = 0;\n        _this.isFirstFileOnSelection = false;\n        _this.dragCounter = 0;\n        _this.isAngular = false;\n        /**\n         * Get the file item(li) which are shown in file list.\n         *\n         * @private\n         */\n        _this.fileList = [];\n        /**\n         * Get the data of files which are shown in file list.\n         *\n         * @private\n         */\n        _this.filesData = [];\n        _this.uploaderOptions = options;\n        return _this;\n    }\n    /**\n     * Calls internally if any of the property value is changed.\n     *\n     * @param {UploaderModel} newProp - Returns the dynamic property value of the component.\n     * @param {UploaderModel} oldProp - Returns the previous property value of the component.\n     * @returns {void}\n     * @private\n     */\n    Uploader.prototype.onPropertyChanged = function (newProp, oldProp) {\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'allowedExtensions':\n                    this.setExtensions(this.allowedExtensions);\n                    this.clearAll();\n                    break;\n                case 'enabled':\n                    this.setControlStatus();\n                    break;\n                case 'multiple':\n                    this.setMultipleSelection();\n                    break;\n                case 'enableRtl':\n                    this.setRTL();\n                    this.reRenderFileList();\n                    break;\n                case 'buttons':\n                    this.buttons.browse = isNullOrUndefined(this.buttons.browse) ? '' : this.buttons.browse;\n                    this.buttons.clear = isNullOrUndefined(this.buttons.clear) ? '' : this.buttons.clear;\n                    this.buttons.upload = isNullOrUndefined(this.buttons.upload) ? '' : this.buttons.upload;\n                    this.renderButtonTemplates();\n                    break;\n                case 'dropArea':\n                    this.unBindDropEvents();\n                    this.updateDropArea();\n                    break;\n                case 'htmlAttributes':\n                    this.updateHTMLAttrToElement();\n                    this.updateHTMLAttrToWrapper();\n                    this.checkHTMLAttributes(true);\n                    break;\n                case 'files':\n                    this.renderPreLoadFiles();\n                    break;\n                case 'directoryUpload':\n                    this.updateDirectoryAttributes();\n                    break;\n                case 'template':\n                    var ejInstance = getValue('ej2_instances', this.element);\n                    if (ejInstance[0].isReact) {\n                        this.reRenderFileList();\n                    }\n                    else {\n                        this.clearAll();\n                    }\n                    break;\n                case 'minFileSize':\n                case 'maxFileSize':\n                case 'autoUpload':\n                    this.clearAll();\n                    break;\n                case 'sequentialUpload':\n                    this.clearAll();\n                    break;\n                case 'locale':\n                    this.l10n.setLocale(this.locale);\n                    this.setLocalizedTexts();\n                    this.preLocaleObj = getValue('currentLocale', this.l10n);\n                    break;\n                case 'cssClass':\n                    this.setCSSClass(oldProp.cssClass);\n                    break;\n            }\n        }\n    };\n    Uploader.prototype.setLocalizedTexts = function () {\n        if (isNullOrUndefined(this.template)) {\n            if (typeof (this.buttons.browse) === 'string') {\n                this.browseButton.innerText = (this.buttons.browse === 'Browse...') ?\n                    this.localizedTexts('Browse') : this.buttons.browse;\n                this.browseButton.setAttribute('title', this.browseButton.innerText);\n                if (this.uploadWrapper && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + DROP_AREA))) {\n                    this.uploadWrapper.querySelector('.' + DROP_AREA).innerHTML = this.localizedTexts('dropFilesHint');\n                }\n            }\n            this.updateFileList();\n        }\n    };\n    Uploader.prototype.getKeyValue = function (val) {\n        var keyValue;\n        for (var _i = 0, _a = Object.keys(this.preLocaleObj); _i < _a.length; _i++) {\n            var key = _a[_i];\n            if (this.preLocaleObj[\"\" + key] === val) {\n                keyValue = key;\n            }\n        }\n        return keyValue;\n    };\n    Uploader.prototype.updateFileList = function () {\n        var element;\n        /* istanbul ignore next */\n        if (this.fileList.length > 0 && !isNullOrUndefined(this.uploadWrapper.querySelector('.' + LIST_PARENT))) {\n            for (var i = 0; i < this.fileList.length; i++) {\n                element = this.fileList[i].querySelector('.e-file-status');\n                element.innerHTML = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n                this.filesData[i].status = this.localizedTexts(this.getKeyValue(this.filesData[i].status));\n                if (this.fileList[i].classList.contains(UPLOAD_SUCCESS)) {\n                    this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('delete'));\n                }\n                if (this.fileList[i].querySelector('.e-file-play-btn')) {\n                    this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('resume'));\n                }\n                if (this.fileList[i].querySelector('.e-file-remove-btn')) {\n                    this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('remove'));\n                }\n                if (this.fileList[i].querySelector('.e-file-reload-btn')) {\n                    this.fileList[i].querySelector('.e-icons').setAttribute('title', this.localizedTexts('retry'));\n                }\n                if (!this.autoUpload) {\n                    this.uploadButton.innerText = (this.buttons.upload === 'Upload') ?\n                        this.localizedTexts('Upload') : this.buttons.upload;\n                    this.uploadButton.setAttribute('title', this.localizedTexts('Upload'));\n                    this.clearButton.innerText = (this.buttons.clear === 'Clear') ?\n                        this.localizedTexts('Clear') : this.buttons.clear;\n                    this.clearButton.setAttribute('title', this.localizedTexts('Clear'));\n                }\n            }\n        }\n    };\n    Uploader.prototype.reRenderFileList = function () {\n        if (this.listParent) {\n            detach(this.listParent);\n            this.listParent = null;\n            this.fileList = [];\n            this.internalCreateFileList(this.filesData);\n            if (this.actionButtons) {\n                this.removeActionButtons();\n                this.renderActionButtons();\n                this.checkActionButtonStatus();\n            }\n        }\n    };\n    Uploader.prototype.preRender = function () {\n        this.localeText = { Browse: 'Browse...', Clear: 'Clear', Upload: 'Upload', invalidFileName: 'File Name is not allowed',\n            dropFilesHint: 'Or drop files here', invalidMaxFileSize: 'File size is too large',\n            invalidMinFileSize: 'File size is too small', invalidFileType: 'File type is not allowed',\n            uploadFailedMessage: 'File failed to upload', uploadSuccessMessage: 'File uploaded successfully',\n            removedSuccessMessage: 'File removed successfully', removedFailedMessage: 'Unable to remove file', inProgress: 'Uploading',\n            readyToUploadMessage: 'Ready to upload', abort: 'Abort', remove: 'Remove', cancel: 'Cancel', delete: 'Delete file',\n            pauseUpload: 'File upload paused', pause: 'Pause', resume: 'Resume', retry: 'Retry',\n            fileUploadCancel: 'File upload canceled', invalidFileSelection: 'Invalid files selected', totalFiles: 'Total files',\n            size: 'Size'\n        };\n        this.l10n = new L10n('uploader', this.localeText, this.locale);\n        this.preLocaleObj = getValue('currentLocale', this.l10n);\n        this.formRendered();\n        this.updateHTMLAttrToElement();\n        this.checkHTMLAttributes(false);\n        var ejInstance = getValue('ej2_instances', this.element);\n        /* istanbul ignore next */\n        if (this.element.tagName === 'EJS-UPLOADER') {\n            var inputElement = this.createElement('input', { attrs: { type: 'file' } });\n            var index = 0;\n            for (index; index < this.element.attributes.length; index++) {\n                if (this.element.attributes[index].nodeName !== 'id') {\n                    inputElement.setAttribute(this.element.attributes[index].nodeName, this.element.attributes[index].nodeValue);\n                }\n                else if (this.element.attributes[index].nodeName === 'id') {\n                    inputElement.setAttribute(this.element.attributes[index].nodeName, getUniqueID('uploader'));\n                }\n                inputElement.innerHTML = this.element.innerHTML;\n            }\n            if (!inputElement.hasAttribute('name')) {\n                inputElement.setAttribute('name', 'UploadFiles');\n            }\n            this.element.appendChild(inputElement);\n            this.element = inputElement;\n            setValue('ej2_instances', ejInstance, this.element);\n        }\n        /* istanbul ignore next */\n        if (ejInstance[0].isPureReactComponent) {\n            if (!isNullOrUndefined(ejInstance[0].props.name)) {\n                this.element.setAttribute('name', ejInstance[0].props.name);\n            }\n            else if (!isNullOrUndefined(ejInstance[0].props.id) && isNullOrUndefined(ejInstance[0].props.name)) {\n                this.element.setAttribute('name', ejInstance[0].props.id);\n            }\n            else {\n                this.element.setAttribute('name', 'UploadFiles');\n            }\n        }\n        if (isNullOrUndefined(this.element.getAttribute('name'))) {\n            this.element.setAttribute('name', this.element.getAttribute('id'));\n        }\n        if (!this.element.hasAttribute('type')) {\n            this.element.setAttribute('type', 'file');\n        }\n        this.updateDirectoryAttributes();\n        this.keyConfigs = {\n            enter: 'enter'\n        };\n        if (this.element.hasAttribute('tabindex')) {\n            this.tabIndex = this.element.getAttribute('tabindex');\n        }\n        this.browserName = Browser.info.name;\n        this.uploaderName = this.element.getAttribute('name');\n    };\n    Uploader.prototype.formRendered = function () {\n        var parentEle = closest(this.element, 'form');\n        if (!isNullOrUndefined(parentEle)) {\n            for (; parentEle && parentEle !== document.documentElement; parentEle = parentEle.parentElement) {\n                if (parentEle.tagName === 'FORM') {\n                    this.isForm = true;\n                    this.formElement = parentEle;\n                    parentEle.setAttribute('enctype', 'multipart/form-data');\n                    parentEle.setAttribute('encoding', 'multipart/form-data');\n                }\n            }\n        }\n    };\n    Uploader.prototype.getPersistData = function () {\n        return this.addOnPersist(['filesData']);\n    };\n    /**\n     * Return the module name of the component.\n     *\n     * @returns {string} Returns the component name.\n     */\n    Uploader.prototype.getModuleName = function () {\n        return 'uploader';\n    };\n    Uploader.prototype.updateDirectoryAttributes = function () {\n        if (this.directoryUpload) {\n            this.element.setAttribute('directory', 'true');\n            this.element.setAttribute('webkitdirectory', 'true');\n        }\n        else {\n            this.element.removeAttribute('directory');\n            this.element.removeAttribute('webkitdirectory');\n        }\n    };\n    /**\n     * To Initialize the control rendering\n     *\n     * @private\n     * @returns {void}\n     */\n    Uploader.prototype.render = function () {\n        this.renderBrowseButton();\n        this.initializeUpload();\n        this.updateHTMLAttrToWrapper();\n        this.wireEvents();\n        this.setMultipleSelection();\n        this.setExtensions(this.allowedExtensions);\n        this.setRTL();\n        this.renderPreLoadFiles();\n        this.setControlStatus();\n        this.setCSSClass();\n    };\n    Uploader.prototype.renderBrowseButton = function () {\n        this.browseButton = this.createElement('button', { className: 'e-css e-btn', attrs: { 'type': 'button' } });\n        this.browseButton.setAttribute('tabindex', this.tabIndex);\n        if (typeof (this.buttons.browse) === 'string') {\n            this.browseButton.textContent = (this.buttons.browse === 'Browse...') ?\n                this.localizedTexts('Browse') : this.buttons.browse;\n            this.browseButton.setAttribute('title', this.browseButton.innerText);\n        }\n        else {\n            this.browseButton.appendChild(this.buttons.browse);\n        }\n        this.element.setAttribute('aria-label', 'Uploader');\n    };\n    Uploader.prototype.renderActionButtons = function () {\n        this.element.setAttribute('tabindex', '-1');\n        this.actionButtons = this.createElement('div', { className: ACTION_BUTTONS });\n        this.uploadButton = this.createElement('button', { className: UPLOAD_BUTTONS,\n            attrs: { 'type': 'button', 'tabindex': this.btnTabIndex } });\n        this.clearButton = this.createElement('button', { className: CLEAR_BUTTONS,\n            attrs: { 'type': 'button', 'tabindex': this.btnTabIndex } });\n        this.actionButtons.appendChild(this.clearButton);\n        this.actionButtons.appendChild(this.uploadButton);\n        this.renderButtonTemplates();\n        this.uploadWrapper.appendChild(this.actionButtons);\n        this.browseButton.blur();\n        if (!this.isPreloadFiles) {\n            this.uploadButton.focus();\n        }\n        this.wireActionButtonEvents();\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.serverActionButtonsEventBind = function (element) {\n        if (element && !this.isForm) {\n            this.browseButton.blur();\n            this.actionButtons = element;\n            this.uploadButton = this.actionButtons.querySelector('.e-file-upload-btn');\n            this.clearButton = this.actionButtons.querySelector('.e-file-clear-btn');\n            this.uploadButton.focus();\n            this.unwireActionButtonEvents();\n            this.wireActionButtonEvents();\n            this.checkActionButtonStatus();\n        }\n    };\n    Uploader.prototype.wireActionButtonEvents = function () {\n        EventHandler.add(this.uploadButton, 'click', this.uploadButtonClick, this);\n        EventHandler.add(this.clearButton, 'click', this.clearButtonClick, this);\n    };\n    Uploader.prototype.unwireActionButtonEvents = function () {\n        EventHandler.remove(this.uploadButton, 'click', this.uploadButtonClick);\n        EventHandler.remove(this.clearButton, 'click', this.clearButtonClick);\n    };\n    Uploader.prototype.removeActionButtons = function () {\n        if (this.actionButtons) {\n            this.unwireActionButtonEvents();\n            detach(this.actionButtons);\n            this.actionButtons = null;\n        }\n    };\n    Uploader.prototype.renderButtonTemplates = function () {\n        if (typeof (this.buttons.browse) === 'string') {\n            this.browseButton.textContent = (this.buttons.browse === 'Browse...') ?\n                this.localizedTexts('Browse') : this.buttons.browse;\n            this.browseButton.setAttribute('title', this.browseButton.textContent);\n        }\n        else {\n            this.browseButton.innerHTML = '';\n            this.browseButton.appendChild(this.buttons.browse);\n        }\n        if (this.uploadButton) {\n            var uploadText = isNullOrUndefined(this.buttons.upload) ? 'Upload' : this.buttons.upload;\n            this.buttons.upload = uploadText;\n            if (typeof (this.buttons.upload) === 'string') {\n                this.uploadButton.textContent = (this.buttons.upload === 'Upload') ?\n                    this.localizedTexts('Upload') : this.buttons.upload;\n                this.uploadButton.setAttribute('title', this.uploadButton.textContent);\n            }\n            else {\n                this.uploadButton.innerHTML = '';\n                this.uploadButton.appendChild(this.buttons.upload);\n            }\n        }\n        if (this.clearButton) {\n            var clearText = isNullOrUndefined(this.buttons.clear) ? 'Clear' : this.buttons.clear;\n            this.buttons.clear = clearText;\n            if (typeof (this.buttons.clear) === 'string') {\n                this.clearButton.textContent = (this.buttons.clear === 'Clear') ?\n                    this.localizedTexts('Clear') : this.buttons.clear;\n                this.clearButton.setAttribute('title', this.clearButton.textContent);\n            }\n            else {\n                this.clearButton.innerHTML = '';\n                this.clearButton.appendChild(this.buttons.clear);\n            }\n        }\n    };\n    Uploader.prototype.initializeUpload = function () {\n        this.element.setAttribute('tabindex', '-1');\n        var inputWrapper = this.createElement('span', { className: INPUT_WRAPPER });\n        this.element.parentElement.insertBefore(inputWrapper, this.element);\n        this.dropAreaWrapper = this.createElement('div', { className: DROP_WRAPPER });\n        this.element.parentElement.insertBefore(this.dropAreaWrapper, this.element);\n        inputWrapper.appendChild(this.element);\n        this.dropAreaWrapper.appendChild(this.browseButton);\n        this.dropAreaWrapper.appendChild(inputWrapper);\n        this.uploadWrapper = this.createElement('div', { className: CONTROL_WRAPPER });\n        this.dropAreaWrapper.parentElement.insertBefore(this.uploadWrapper, this.dropAreaWrapper);\n        this.uploadWrapper.appendChild(this.dropAreaWrapper);\n        this.setDropArea();\n    };\n    Uploader.prototype.renderPreLoadFiles = function () {\n        if (this.files.length) {\n            if (this.enablePersistence && this.filesData.length) {\n                this.internalCreateFileList(this.filesData);\n                return;\n            }\n            if (isNullOrUndefined(this.files[0].size)) {\n                return;\n            }\n            this.isPreloadFiles = true;\n            var files = [].slice.call(this.files);\n            var filesData = [];\n            if (!this.multiple) {\n                this.clearData();\n                files = [files[0]];\n            }\n            for (var _i = 0, files_1 = files; _i < files_1.length; _i++) {\n                var data = files_1[_i];\n                var fileData = {\n                    name: data.name + '.' + data.type.split('.')[data.type.split('.').length - 1],\n                    rawFile: '',\n                    size: data.size,\n                    status: this.localizedTexts('uploadSuccessMessage'),\n                    type: data.type,\n                    validationMessages: { minSize: '', maxSize: '' },\n                    statusCode: '2'\n                };\n                filesData.push(fileData);\n                this.filesData.push(fileData);\n            }\n            this.internalCreateFileList(filesData);\n            if (!this.autoUpload && this.listParent && !this.actionButtons && (!this.isForm || this.allowUpload()) && this.showFileList) {\n                this.renderActionButtons();\n            }\n            this.checkActionButtonStatus();\n            if (this.sequentialUpload) {\n                this.count = this.filesData.length - 1;\n            }\n            this.isPreloadFiles = false;\n        }\n    };\n    Uploader.prototype.checkActionButtonStatus = function () {\n        if (this.actionButtons) {\n            var length_1 = this.uploadWrapper.querySelectorAll('.' + VALIDATION_FAILS).length +\n                this.uploadWrapper.querySelectorAll('.e-upload-fails:not(.e-upload-progress)').length +\n                this.uploadWrapper.querySelectorAll('span.' + UPLOAD_SUCCESS).length +\n                this.uploadWrapper.querySelectorAll('span.' + UPLOAD_INPROGRESS).length;\n            if (length_1 > 0 && length_1 === this.uploadWrapper.querySelectorAll('li').length) {\n                this.uploadButton.setAttribute('disabled', 'disabled');\n            }\n            else {\n                this.uploadButton.removeAttribute('disabled');\n            }\n        }\n    };\n    Uploader.prototype.setDropArea = function () {\n        var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n        if (this.dropArea) {\n            this.dropZoneElement = (typeof (this.dropArea) !== 'string') ? this.dropArea :\n                select(this.dropArea, document);\n            var element = this.element;\n            var enableDropText = false;\n            while (element.parentNode) {\n                element = element.parentNode;\n                if (element === this.dropZoneElement) {\n                    enableDropText = true;\n                    if (!dropTextArea) {\n                        this.createDropTextHint();\n                    }\n                    else {\n                        dropTextArea.innerHTML = this.localizedTexts('dropFilesHint');\n                    }\n                }\n            }\n            if (!enableDropText && dropTextArea) {\n                remove(dropTextArea);\n            }\n        }\n        else if (!isNullOrUndefined(this.uploaderOptions) && this.uploaderOptions.dropArea === undefined) {\n            this.createDropTextHint();\n            this.dropZoneElement = this.uploadWrapper;\n            this.setProperties({ dropArea: this.uploadWrapper }, true);\n        }\n        this.bindDropEvents();\n    };\n    Uploader.prototype.updateDropArea = function () {\n        if (this.dropArea) {\n            this.setDropArea();\n        }\n        else {\n            this.dropZoneElement = null;\n            var dropTextArea = this.dropAreaWrapper.querySelector('.e-file-drop');\n            if (dropTextArea) {\n                remove(dropTextArea);\n            }\n        }\n    };\n    Uploader.prototype.createDropTextHint = function () {\n        var fileDropArea = this.createElement('span', { className: DROP_AREA });\n        fileDropArea.innerHTML = this.localizedTexts('dropFilesHint');\n        this.dropAreaWrapper.appendChild(fileDropArea);\n    };\n    Uploader.prototype.updateHTMLAttrToElement = function () {\n        if (!isNullOrUndefined(this.htmlAttributes)) {\n            for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n                var pro = _a[_i];\n                if (wrapperAttr.indexOf(pro) < 0) {\n                    this.element.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n                }\n            }\n        }\n    };\n    Uploader.prototype.updateHTMLAttrToWrapper = function () {\n        if (!isNullOrUndefined(this.htmlAttributes)) {\n            for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n                var pro = _a[_i];\n                if (wrapperAttr.indexOf(pro) > -1) {\n                    if (pro === 'class') {\n                        var updatedClassValues = (this.htmlAttributes[\"\" + pro].replace(/\\s+/g, ' ')).trim();\n                        if (updatedClassValues !== '') {\n                            addClass([this.uploadWrapper], updatedClassValues.split(' '));\n                        }\n                    }\n                    else if (pro === 'style') {\n                        var uploadStyle = this.uploadWrapper.getAttribute(pro);\n                        uploadStyle = !isNullOrUndefined(uploadStyle) ? (uploadStyle + this.htmlAttributes[\"\" + pro]) :\n                            this.htmlAttributes[\"\" + pro];\n                        this.uploadWrapper.setAttribute(pro, uploadStyle);\n                    }\n                    else {\n                        this.uploadWrapper.setAttribute(pro, this.htmlAttributes[\"\" + pro]);\n                    }\n                }\n            }\n        }\n    };\n    Uploader.prototype.setMultipleSelection = function () {\n        if (this.multiple && !this.element.hasAttribute('multiple')) {\n            var newAttr = document.createAttribute('multiple');\n            newAttr.value = 'multiple';\n            this.element.setAttributeNode(newAttr);\n        }\n        else if (!this.multiple) {\n            this.element.removeAttribute('multiple');\n        }\n    };\n    Uploader.prototype.checkAutoUpload = function (fileData) {\n        if (this.autoUpload) {\n            if (this.sequentialUpload) {\n                /* istanbul ignore next */\n                this.sequenceUpload(fileData);\n            }\n            else {\n                this.upload(fileData);\n            }\n            this.removeActionButtons();\n        }\n        else if (!this.actionButtons) {\n            this.renderActionButtons();\n        }\n        this.checkActionButtonStatus();\n    };\n    Uploader.prototype.sequenceUpload = function (fileData) {\n        if (this.filesData.length - fileData.length === 0 ||\n            this.filesData[(this.filesData.length - fileData.length - 1)].statusCode !== '1') {\n            if (this.multiple || this.count < 0) {\n                ++this.count;\n            }\n            var isFileListCreated = this.showFileList ? false : true;\n            if (typeof this.filesData[this.count] === 'object') {\n                this.isFirstFileOnSelection = false;\n                this.upload(this.filesData[this.count], isFileListCreated);\n                if (this.filesData[this.count].statusCode === '0') {\n                    this.sequenceUpload(fileData);\n                }\n            }\n            else {\n                --this.count;\n            }\n        }\n    };\n    Uploader.prototype.setCSSClass = function (oldCSSClass) {\n        var updatedOldCssClass = oldCSSClass;\n        if (!isNullOrUndefined(oldCSSClass)) {\n            updatedOldCssClass = (oldCSSClass.replace(/\\s+/g, ' ')).trim();\n        }\n        if (!isNullOrUndefined(oldCSSClass) && updatedOldCssClass !== '') {\n            removeClass([this.uploadWrapper], updatedOldCssClass.split(' '));\n        }\n        var updatedCssClassValue = this.cssClass;\n        if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n            updatedCssClassValue = (this.cssClass.replace(/\\s+/g, ' ')).trim();\n        }\n        if (!isNullOrUndefined(this.cssClass) && updatedCssClassValue !== '') {\n            addClass([this.uploadWrapper], updatedCssClassValue.split(updatedCssClassValue.indexOf(',') > -1 ? ',' : ' '));\n        }\n    };\n    Uploader.prototype.wireEvents = function () {\n        EventHandler.add(this.browseButton, 'click', this.browseButtonClick, this);\n        EventHandler.add(this.element, 'change', this.onSelectFiles, this);\n        EventHandler.add(document, 'click', this.removeFocus, this);\n        this.keyboardModule = new KeyboardEvents(this.uploadWrapper, {\n            keyAction: this.keyActionHandler.bind(this),\n            keyConfigs: this.keyConfigs,\n            eventName: 'keydown'\n        });\n        if (this.isForm) {\n            EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n        }\n    };\n    Uploader.prototype.unWireEvents = function () {\n        EventHandler.remove(this.browseButton, 'click', this.browseButtonClick);\n        EventHandler.remove(this.element, 'change', this.onSelectFiles);\n        EventHandler.remove(document, 'click', this.removeFocus);\n        if (this.isForm) {\n            EventHandler.remove(this.formElement, 'reset', this.resetForm);\n        }\n        if (this.keyboardModule) {\n            this.keyboardModule.destroy();\n        }\n    };\n    Uploader.prototype.resetForm = function () {\n        this.clearAll();\n    };\n    Uploader.prototype.keyActionHandler = function (e) {\n        var targetElement = e.target;\n        switch (e.action) {\n            case 'enter':\n                if (e.target === this.clearButton) {\n                    this.clearButtonClick();\n                }\n                else if (e.target === this.uploadButton) {\n                    this.uploadButtonClick();\n                }\n                else if (e.target === this.browseButton) {\n                    this.browseButtonClick();\n                }\n                else if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n                    var metaData = this.getCurrentMetaData(null, e);\n                    metaData.file.statusCode = '4';\n                    metaData.file.status = this.localizedTexts('pauseUpload');\n                    this.abortUpload(metaData, false);\n                }\n                else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n                    this.resumeUpload(this.getCurrentMetaData(null, e), e);\n                }\n                else if (targetElement.classList.contains(RETRY_ICON)) {\n                    var metaData = this.getCurrentMetaData(null, e);\n                    if (!isNullOrUndefined(metaData)) {\n                        metaData.file.statusCode = '1';\n                        metaData.file.status = this.localizedTexts('readyToUploadMessage');\n                        this.chunkUpload(metaData.file);\n                    }\n                    else {\n                        var target = e.target.parentElement;\n                        var fileData = this.filesData[this.fileList.indexOf(target)];\n                        this.retry(fileData);\n                    }\n                }\n                else {\n                    this.removeFiles(e);\n                    if (!targetElement.classList.contains(ABORT_ICON)) {\n                        this.browseButton.focus();\n                    }\n                }\n                e.preventDefault();\n                e.stopPropagation();\n                break;\n        }\n    };\n    Uploader.prototype.getCurrentMetaData = function (fileInfo, e) {\n        var fileData;\n        var targetMetaData;\n        if (isNullOrUndefined(fileInfo)) {\n            var target = e.target.parentElement;\n            fileData = this.filesData[this.fileList.indexOf(target)];\n        }\n        else {\n            fileData = fileInfo;\n        }\n        for (var i = 0; i < this.uploadMetaData.length; i++) {\n            if (this.uploadMetaData[i].file.name === fileData.name) {\n                targetMetaData = this.uploadMetaData[i];\n            }\n        }\n        return targetMetaData;\n    };\n    Uploader.prototype.removeFocus = function () {\n        if (this.uploadWrapper && this.listParent && this.listParent.querySelector('.' + ICON_FOCUSED)) {\n            document.activeElement.blur();\n            this.listParent.querySelector('.' + ICON_FOCUSED).classList.remove(ICON_FOCUSED);\n        }\n    };\n    Uploader.prototype.browseButtonClick = function () {\n        this.element.click();\n    };\n    Uploader.prototype.uploadButtonClick = function () {\n        if (this.sequentialUpload) {\n            this.sequenceUpload(this.filesData);\n        }\n        else {\n            this.upload(this.filesData);\n        }\n    };\n    Uploader.prototype.clearButtonClick = function () {\n        this.clearAll();\n        /* istanbul ignore next */\n        if (this.sequentialUpload) {\n            this.count = -1;\n        }\n        this.actionCompleteCount = 0;\n    };\n    Uploader.prototype.bindDropEvents = function () {\n        if (this.dropZoneElement) {\n            EventHandler.add(this.dropZoneElement, 'drop', this.dropElement, this);\n            EventHandler.add(this.dropZoneElement, 'dragover', this.dragHover, this);\n            EventHandler.add(this.dropZoneElement, 'dragleave', this.onDragLeave, this);\n            EventHandler.add(this.dropZoneElement, 'paste', this.onPasteFile, this);\n            EventHandler.add(this.dropZoneElement, 'dragenter', this.onDragEnter, this);\n        }\n    };\n    Uploader.prototype.unBindDropEvents = function () {\n        if (this.dropZoneElement) {\n            EventHandler.remove(this.dropZoneElement, 'drop', this.dropElement);\n            EventHandler.remove(this.dropZoneElement, 'dragover', this.dragHover);\n            EventHandler.remove(this.dropZoneElement, 'dragleave', this.onDragLeave);\n            EventHandler.remove(this.dropZoneElement, 'dragenter', this.onDragEnter);\n        }\n    };\n    Uploader.prototype.onDragEnter = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        this.dropZoneElement.classList.add(DRAG_HOVER);\n        this.dragCounter = this.dragCounter + 1;\n        e.preventDefault();\n        e.stopPropagation();\n    };\n    Uploader.prototype.onDragLeave = function () {\n        if (!this.enabled) {\n            return;\n        }\n        this.dragCounter = this.dragCounter - 1;\n        if (!this.dragCounter) {\n            this.dropZoneElement.classList.remove(DRAG_HOVER);\n        }\n    };\n    Uploader.prototype.dragHover = function (e) {\n        if (!this.enabled) {\n            return;\n        }\n        if (this.dropEffect !== 'Default') {\n            e.dataTransfer.dropEffect = this.dropEffect.toLowerCase();\n        }\n        e.preventDefault();\n        e.stopPropagation();\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.dropElement = function (e) {\n        this.dragCounter = 0;\n        this.dropZoneElement.classList.remove(DRAG_HOVER);\n        this.onSelectFiles(e);\n        e.preventDefault();\n        e.stopPropagation();\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.onPasteFile = function (event) {\n        var item = event.clipboardData.items;\n        if (event.type === 'paste' && this.browserName !== 'msie' && this.browserName !== 'edge' && this.browserName !== 'safari') {\n            this.element.files = event.clipboardData.files;\n        }\n        if (item.length !== 1 && !this.multiple) {\n            return;\n        }\n        for (var file = 0; file < item.length; file++) {\n            var pasteFile = [].slice.call(item)[file];\n            if ((pasteFile.kind === 'file') || pasteFile.type.match('^image/')) {\n                this.renderSelectedFiles(event, [pasteFile.getAsFile()], false, true);\n            }\n        }\n    };\n    Uploader.prototype.getSelectedFiles = function (index) {\n        var data = [];\n        var liElement = this.fileList[index];\n        var allFiles = this.getFilesData();\n        var nameElements = +liElement.getAttribute('data-files-count');\n        var startIndex = 0;\n        for (var i = 0; i < index; i++) {\n            startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n        }\n        for (var j = startIndex; j < (startIndex + nameElements); j++) {\n            data.push(allFiles[j]);\n        }\n        return data;\n    };\n    Uploader.prototype.removeFiles = function (args) {\n        if (!this.enabled) {\n            return;\n        }\n        var selectedElement = args.target.parentElement;\n        var index = this.fileList.indexOf(selectedElement);\n        var liElement = this.fileList[index];\n        var formUpload = this.isFormUpload();\n        var fileData = formUpload ? this.getSelectedFiles(index) : this.getFilesInArray(this.filesData[index]);\n        if (isNullOrUndefined(fileData)) {\n            return;\n        }\n        if (args.target.classList.contains(ABORT_ICON) && !formUpload) {\n            fileData[0].statusCode = '5';\n            if (!isNullOrUndefined(liElement)) {\n                var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n                createSpinner({ target: spinnerTarget, width: '20px' });\n                showSpinner(spinnerTarget);\n            }\n            if (this.sequentialUpload) {\n                /* istanbul ignore next */\n                this.uploadSequential();\n            }\n            if (!(liElement.classList.contains(RESTRICT_RETRY))) {\n                this.checkActionComplete(true);\n            }\n        }\n        else if (!closest(args.target, '.' + SPINNER_PANE)) {\n            this.remove(fileData, false, false, true, args);\n        }\n        this.checkActionButtonStatus();\n    };\n    Uploader.prototype.removeFilesData = function (file, customTemplate) {\n        var index;\n        if (customTemplate) {\n            if (!this.showFileList) {\n                index = this.filesData.indexOf(file);\n                this.filesData.splice(index, 1);\n            }\n            return;\n        }\n        var selectedElement = this.getLiElement(file);\n        if (isNullOrUndefined(selectedElement)) {\n            return;\n        }\n        this.element.value = '';\n        detach(selectedElement);\n        index = this.fileList.indexOf(selectedElement);\n        this.fileList.splice(index, 1);\n        this.filesData.splice(index, 1);\n        if (this.fileList.length === 0 && !isNullOrUndefined(this.listParent)) {\n            detach(this.listParent);\n            this.listParent = null;\n            this.removeActionButtons();\n        }\n        if (this.sequentialUpload) {\n            /* istanbul ignore next */\n            if (index <= this.count) {\n                --this.count;\n            }\n        }\n    };\n    Uploader.prototype.removeUploadedFile = function (file, eventArgs, removeDirectly, custom) {\n        var _this = this;\n        var selectedFiles = file;\n        var ajax = new Ajax(this.asyncSettings.removeUrl, 'POST', true, null);\n        ajax.emitError = false;\n        var formData = new FormData();\n        ajax.beforeSend = function (e) {\n            eventArgs.currentRequest = ajax.httpRequest;\n            if (!removeDirectly) {\n                _this.trigger('removing', eventArgs, function (eventArgs) {\n                    if (eventArgs.cancel) {\n                        e.cancel = true;\n                    }\n                    else {\n                        _this.removingEventCallback(eventArgs, formData, selectedFiles, file);\n                    }\n                });\n            }\n            else {\n                _this.removingEventCallback(eventArgs, formData, selectedFiles, file);\n            }\n        };\n        ajax.onLoad = function (e) {\n            _this.removeCompleted(e, selectedFiles, custom);\n            return {};\n        };\n        /* istanbul ignore next */\n        ajax.onError = function (e) {\n            _this.removeFailed(e, selectedFiles, custom);\n            return {};\n        };\n        ajax.send(formData);\n    };\n    Uploader.prototype.removingEventCallback = function (eventArgs, formData, selectedFiles, file) {\n        /* istanbul ignore next */\n        var name = this.element.getAttribute('name');\n        var liElement = this.getLiElement(file);\n        if (!isNullOrUndefined(liElement) && (!isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON)) ||\n            !isNullOrUndefined(liElement.querySelector('.' + REMOVE_ICON)))) {\n            var spinnerTarget = liElement.querySelector('.' + DELETE_ICON) ?\n                liElement.querySelector('.' + DELETE_ICON) :\n                liElement.querySelector('.' + REMOVE_ICON);\n            createSpinner({ target: spinnerTarget, width: '20px' });\n            showSpinner(spinnerTarget);\n        }\n        if (eventArgs.postRawFile && !isNullOrUndefined(selectedFiles.rawFile) && selectedFiles.rawFile !== '') {\n            formData.append(name, selectedFiles.rawFile, selectedFiles.name);\n        }\n        else {\n            formData.append(name, selectedFiles.name);\n        }\n        this.updateFormData(formData, eventArgs.customFormData);\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.updateFormData = function (formData, customData) {\n        if (customData.length > 0 && customData[0]) {\n            var _loop_1 = function (i) {\n                var data = customData[i];\n                // eslint-disable-next-line @typescript-eslint/tslint/config\n                var value = Object.keys(data).map(function (e) {\n                    return data[\"\" + e];\n                });\n                formData.append(Object.keys(data)[0], value);\n            };\n            for (var i = 0; i < customData.length; i++) {\n                _loop_1(i);\n            }\n        }\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.updateCustomheader = function (request, currentRequest) {\n        if (currentRequest.length > 0 && currentRequest[0]) {\n            var _loop_2 = function (i) {\n                var data = currentRequest[i];\n                // eslint-disable-next-line @typescript-eslint/tslint/config\n                var value = Object.keys(data).map(function (e) {\n                    return data[\"\" + e];\n                });\n                request.setRequestHeader(Object.keys(data)[0], value);\n            };\n            for (var i = 0; i < currentRequest.length; i++) {\n                _loop_2(i);\n            }\n        }\n    };\n    Uploader.prototype.removeCompleted = function (e, files, customTemplate) {\n        var response = e && e.currentTarget ? this.getResponse(e) : null;\n        var status = e.target;\n        if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n            var args = {\n                e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedSuccessMessage'), '2')\n            };\n            this.trigger('success', args);\n            this.removeFilesData(files, customTemplate);\n            var index = this.uploadedFilesData.indexOf(files);\n            this.uploadedFilesData.splice(index, 1);\n            this.trigger('change', { files: this.uploadedFilesData });\n        }\n        else {\n            this.removeFailed(e, files, customTemplate);\n        }\n    };\n    Uploader.prototype.removeFailed = function (e, files, customTemplate) {\n        var response = e && e.currentTarget ? this.getResponse(e) : null;\n        var args = {\n            e: e, response: response, operation: 'remove', file: this.updateStatus(files, this.localizedTexts('removedFailedMessage'), '0')\n        };\n        if (!customTemplate) {\n            var index = this.filesData.indexOf(files);\n            var rootElement = this.fileList[index];\n            if (rootElement) {\n                rootElement.classList.remove(UPLOAD_SUCCESS);\n                rootElement.classList.add(UPLOAD_FAILED);\n                var statusElement = rootElement.querySelector('.' + STATUS);\n                if (statusElement) {\n                    statusElement.classList.remove(UPLOAD_SUCCESS);\n                    statusElement.classList.add(UPLOAD_FAILED);\n                }\n            }\n            this.checkActionButtonStatus();\n        }\n        this.trigger('failure', args);\n        var liElement = this.getLiElement(files);\n        /* istanbul ignore next */\n        if (!isNullOrUndefined(liElement) && !isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n            var spinnerTarget = liElement.querySelector('.' + DELETE_ICON);\n            hideSpinner(spinnerTarget);\n            detach(liElement.querySelector('.e-spinner-pane'));\n        }\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.getFilesFromFolder = function (event) {\n        this.filesEntries = [];\n        var items = this.multiple ?\n            event.dataTransfer.items : [event.dataTransfer.items[0]];\n        var validDirectoryUpload = this.checkDirectoryUpload(items);\n        if (!validDirectoryUpload) {\n            return;\n        }\n        var _loop_3 = function (i) {\n            var item = items[i].webkitGetAsEntry();\n            if (item.isFile) {\n                var files_2 = [];\n                (item).file(function (fileObj) {\n                    var path = item.fullPath;\n                    files_2.push({ 'path': path, 'file': fileObj });\n                });\n                this_1.renderSelectedFiles(event, files_2, true);\n            }\n            else if (item.isDirectory) {\n                this_1.traverseFileTree(item, event);\n            }\n        };\n        var this_1 = this;\n        for (var i = 0; i < items.length; i++) {\n            _loop_3(i);\n        }\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.checkDirectoryUpload = function (items) {\n        for (var i = 0; items && i < items.length; i++) {\n            var item = items[i].webkitGetAsEntry();\n            if (item.isDirectory) {\n                return true;\n            }\n        }\n        return false;\n    };\n    /* eslint-disable @typescript-eslint/explicit-module-boundary-types */\n    /* istanbul ignore next */\n    Uploader.prototype.traverseFileTree = function (item, event) {\n        /* eslint-enable @typescript-eslint/explicit-module-boundary-types */\n        if (item.isFile) {\n            this.filesEntries.push(item);\n        }\n        else if (item.isDirectory) {\n            var directoryReader = item.createReader();\n            this.readFileFromDirectory(directoryReader, event);\n        }\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.readFileFromDirectory = function (directoryReader, event) {\n        var _this = this;\n        directoryReader.readEntries(function (entries) {\n            for (var i = 0; i < entries.length; i++) {\n                _this.traverseFileTree(entries[i], event);\n            }\n            _this.pushFilesEntries(event);\n            if (entries.length) {\n                _this.readFileFromDirectory(directoryReader);\n            }\n        });\n    };\n    Uploader.prototype.pushFilesEntries = function (event) {\n        var _this = this;\n        var files = [];\n        var _loop_4 = function (i) {\n            this_2.filesEntries[i].file(function (fileObj) {\n                if (_this.filesEntries.length) {\n                    var path = _this.filesEntries[i].fullPath;\n                    files.push({ 'path': path, 'file': fileObj });\n                    if (i === _this.filesEntries.length - 1) {\n                        _this.filesEntries = [];\n                        _this.renderSelectedFiles(event, files, true);\n                    }\n                }\n            });\n        };\n        var this_2 = this;\n        for (var i = 0; i < this.filesEntries.length; i++) {\n            _loop_4(i);\n        }\n    };\n    Uploader.prototype.onSelectFiles = function (args) {\n        if (!this.enabled) {\n            return;\n        }\n        var targetFiles;\n        /* istanbul ignore next */\n        if (args.type === 'drop') {\n            if (this.directoryUpload) {\n                this.getFilesFromFolder(args);\n            }\n            else {\n                var files = this.sortFilesList = args.dataTransfer.files;\n                if (this.browserName !== 'msie' && this.browserName !== 'edge' && this.browserName !== 'safari') {\n                    this.element.files = files;\n                }\n                if (files.length > 0) {\n                    targetFiles = this.multiple ? this.sortFileList(files) : [files[0]];\n                    this.renderSelectedFiles(args, targetFiles);\n                }\n            }\n        }\n        else {\n            targetFiles = [].slice.call(args.target.files);\n            this.renderSelectedFiles(args, targetFiles);\n        }\n        if (this.isAngular || this.isReact) {\n            args.stopPropagation();\n        }\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.getBase64 = function (file) {\n        return new Promise(function (resolve, reject) {\n            var fileReader = new FileReader();\n            fileReader.readAsDataURL(file);\n            fileReader.onload = function () { return resolve(fileReader.result); };\n            fileReader.onerror = function (error) { return reject(error); };\n        });\n    };\n    /* istanbul ignore next */\n    /* tslint:ignore */\n    Uploader.prototype.renderSelectedFiles = function (args, targetFiles, directory, paste) {\n        var _this = this;\n        this.base64String = [];\n        var eventArgs = {\n            event: args,\n            cancel: false,\n            filesData: [],\n            isModified: false,\n            modifiedFilesData: [],\n            progressInterval: '',\n            isCanceled: false,\n            currentRequest: null,\n            customFormData: null\n        };\n        /* istanbul ignore next */\n        if (targetFiles.length < 1) {\n            eventArgs.isCanceled = true;\n            this.trigger('selected', eventArgs);\n            return;\n        }\n        this.flag = true;\n        var fileData = [];\n        if (!this.multiple) {\n            this.clearData(true);\n            this.actionCompleteCount = 0;\n            targetFiles = [targetFiles[0]];\n        }\n        for (var i = 0; i < targetFiles.length; i++) {\n            var file = directory ? targetFiles[i].file : targetFiles[i];\n            this.updateInitialFileDetails(args, targetFiles, file, i, fileData, directory, paste);\n        }\n        eventArgs.filesData = fileData;\n        if (this.allowedExtensions.indexOf('*') > -1) {\n            this.allTypes = true;\n        }\n        if (this.enableHtmlSanitizer) {\n            for (var i = 0; i < fileData.length; i++) {\n                var sanitizeFile = SanitizeHtmlHelper.beforeSanitize();\n                var sanitizeFileName = SanitizeHtmlHelper.serializeValue(sanitizeFile, fileData[parseInt(i.toString())].name);\n                var currentFileName = fileData[parseInt(i.toString())].name;\n                var isUTF8 = false;\n                for (var i_1 = 0; i_1 < currentFileName.length; i_1++) {\n                    if (currentFileName.charCodeAt(i_1) > 127) {\n                        isUTF8 = true;\n                        break;\n                    }\n                }\n                var htmlTagRegex = /<([a-z][a-z0-9]*)\\b[^>]*>(.*?)<\\/\\1>/i;\n                var hasHTMLString = htmlTagRegex.test(currentFileName);\n                if ((sanitizeFileName !== fileData[parseInt(i.toString())].name) && !(isUTF8 && !hasHTMLString)) {\n                    var encodedFileName = targetFiles[parseInt(i.toString())].name.replace(/[\\u00A0-\\u9999<>\\&]/g, function (i) {\n                        return '&#' + i.charCodeAt(0) + ';';\n                    });\n                    fileData[parseInt(i.toString())].name = encodedFileName;\n                    fileData[parseInt(i.toString())].status = this.localizedTexts('invalidFileName');\n                    fileData[parseInt(i.toString())].statusCode = '0';\n                }\n            }\n        }\n        if (!this.allTypes) {\n            fileData = this.checkExtension(fileData);\n        }\n        this.trigger('selected', eventArgs, function (eventArgs) {\n            _this._internalRenderSelect(eventArgs, fileData);\n        });\n    };\n    Uploader.prototype.updateInitialFileDetails = function (args, \n    // eslint-disable-next-line @typescript-eslint/indent\n    targetFiles, file, i, fileData, directory, paste) {\n        var fileName = directory ? targetFiles[i].path.substring(1, targetFiles[i].path.length) : paste ?\n            getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name) :\n            this.directoryUpload ? targetFiles[i].webkitRelativePath : file.name;\n        var fileDetails = {\n            name: fileName,\n            rawFile: file,\n            size: file.size,\n            status: this.localizedTexts('readyToUploadMessage'),\n            type: this.getFileType(file.name),\n            validationMessages: this.validatedFileSize(file.size),\n            statusCode: '1',\n            id: getUniqueID(file.name.substring(0, file.name.lastIndexOf('.'))) + '.' + this.getFileType(file.name)\n        };\n        /* istanbul ignore next */\n        if (paste) {\n            fileDetails.fileSource = 'paste';\n        }\n        fileDetails.status = fileDetails.validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n            fileDetails.validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : fileDetails.status;\n        if (fileDetails.validationMessages.minSize !== '' || fileDetails.validationMessages.maxSize !== '') {\n            fileDetails.statusCode = '0';\n        }\n        fileData.push(fileDetails);\n    };\n    Uploader.prototype._internalRenderSelect = function (eventArgs, fileData) {\n        if (!eventArgs.cancel) {\n            /* istanbul ignore next */\n            this.selectedFiles = this.selectedFiles.concat(fileData);\n            this.btnTabIndex = this.disableKeyboardNavigation ? '-1' : '0';\n            if (this.showFileList) {\n                if (eventArgs.isModified && eventArgs.modifiedFilesData.length > 0) {\n                    for (var j = 0; j < eventArgs.modifiedFilesData.length; j++) {\n                        for (var k = 0; k < fileData.length; k++) {\n                            if (eventArgs.modifiedFilesData[j].id === fileData[k].id) {\n                                eventArgs.modifiedFilesData[j].rawFile = fileData[k].rawFile;\n                            }\n                        }\n                    }\n                    var dataFiles = this.allTypes ? eventArgs.modifiedFilesData :\n                        this.checkExtension(eventArgs.modifiedFilesData);\n                    this.updateSortedFileList(dataFiles);\n                    this.filesData = this.filesData.concat(dataFiles);\n                    if (!this.isForm || this.allowUpload()) {\n                        this.checkAutoUpload(dataFiles);\n                    }\n                }\n                else {\n                    this.internalCreateFileList(fileData);\n                    if (this.autoUpload && this.sequenceUpload && this.sequentialUpload && this.filesData.length > 0 && this.filesData[this.filesData.length - 1].statusCode !== '2' && this.filesData[this.filesData.length - 1].statusCode !== '0') {\n                        this.filesData = this.filesData.concat(fileData);\n                        return;\n                    }\n                    this.filesData = this.filesData.concat(fileData);\n                    if (!this.isForm || this.allowUpload()) {\n                        this.checkAutoUpload(fileData);\n                    }\n                }\n                if (!isNullOrUndefined(eventArgs.progressInterval) && eventArgs.progressInterval !== '') {\n                    this.progressInterval = eventArgs.progressInterval;\n                }\n            }\n            else {\n                this.filesData = this.filesData.concat(fileData);\n                if (this.autoUpload) {\n                    this.upload(this.filesData, true);\n                }\n            }\n            for (var item = 0; item < this.filesData.length; item++) {\n                if (this.filesData[item].statusCode === '0') {\n                    this.checkActionComplete(true);\n                }\n            }\n            this.isFirstFileOnSelection = true;\n        }\n    };\n    Uploader.prototype.allowUpload = function () {\n        var allowFormUpload = false;\n        if (this.isForm && (!isNullOrUndefined(this.asyncSettings.saveUrl) && this.asyncSettings.saveUrl !== '')) {\n            allowFormUpload = true;\n        }\n        return allowFormUpload;\n    };\n    Uploader.prototype.isFormUpload = function () {\n        var isFormUpload = false;\n        if (this.isForm && ((isNullOrUndefined(this.asyncSettings.saveUrl) || this.asyncSettings.saveUrl === '')\n            && (isNullOrUndefined(this.asyncSettings.removeUrl) || this.asyncSettings.removeUrl === ''))) {\n            isFormUpload = true;\n        }\n        return isFormUpload;\n    };\n    Uploader.prototype.clearData = function (singleUpload) {\n        if (!isNullOrUndefined(this.listParent)) {\n            detach(this.listParent);\n            this.listParent = null;\n        }\n        if (this.browserName !== 'msie' && !singleUpload) {\n            this.element.value = '';\n        }\n        this.fileList = [];\n        this.filesData = [];\n        this.removeActionButtons();\n    };\n    Uploader.prototype.updateSortedFileList = function (filesData) {\n        var previousListClone = this.createElement('div', { id: 'clonewrapper' });\n        var added = -1;\n        var removedList;\n        if (this.listParent) {\n            for (var i = 0; i < this.listParent.querySelectorAll('li').length; i++) {\n                var liElement = this.listParent.querySelectorAll('li')[i];\n                previousListClone.appendChild(liElement.cloneNode(true));\n            }\n            this.removeActionButtons();\n            var oldList = [].slice.call(previousListClone.childNodes);\n            this.createParentUL();\n            for (var index = 0; index < filesData.length; index++) {\n                for (var j = 0; j < this.filesData.length; j++) {\n                    if (this.filesData[j].name === filesData[index].name) {\n                        this.listParent.appendChild(oldList[j]);\n                        EventHandler.add(oldList[j].querySelector('.e-icons'), 'click', this.removeFiles, this);\n                        this.fileList.push(oldList[j]);\n                        added = index;\n                    }\n                }\n                if (added !== index) {\n                    this.internalCreateFileList([filesData[index]]);\n                }\n            }\n        }\n        else {\n            this.internalCreateFileList(filesData);\n        }\n    };\n    Uploader.prototype.isBlank = function (str) {\n        return (!str || /^\\s*$/.test(str));\n    };\n    Uploader.prototype.checkExtension = function (files) {\n        var dropFiles = files;\n        if (!this.isBlank(this.allowedExtensions)) {\n            var allowedExtensions = [];\n            var extensions = this.allowedExtensions.split(',');\n            for (var _i = 0, extensions_1 = extensions; _i < extensions_1.length; _i++) {\n                var extension = extensions_1[_i];\n                allowedExtensions.push(extension.trim().toLocaleLowerCase());\n            }\n            for (var i = 0; i < files.length; i++) {\n                if (allowedExtensions.indexOf(('.' + files[i].type).toLocaleLowerCase()) === -1) {\n                    files[i].status = this.localizedTexts('invalidFileType');\n                    files[i].statusCode = '0';\n                }\n            }\n        }\n        return dropFiles;\n    };\n    Uploader.prototype.validatedFileSize = function (fileSize) {\n        var minSizeError = '';\n        var maxSizeError = '';\n        if (fileSize < this.minFileSize) {\n            minSizeError = this.localizedTexts('invalidMinFileSize');\n        }\n        else if (fileSize > this.maxFileSize) {\n            maxSizeError = this.localizedTexts('invalidMaxFileSize');\n        }\n        else {\n            minSizeError = '';\n            maxSizeError = '';\n        }\n        var errorMessage = { minSize: minSizeError, maxSize: maxSizeError };\n        return errorMessage;\n    };\n    Uploader.prototype.isPreLoadFile = function (fileData) {\n        var isPreload = false;\n        for (var i = 0; i < this.files.length; i++) {\n            if (this.files[i].name === fileData.name.slice(0, fileData.name.lastIndexOf('.')) && this.files[i].type === fileData.type) {\n                isPreload = true;\n            }\n        }\n        return isPreload;\n    };\n    Uploader.prototype.createCustomfileList = function (fileData) {\n        this.createParentUL();\n        for (var _i = 0, fileData_1 = fileData; _i < fileData_1.length; _i++) {\n            var listItem = fileData_1[_i];\n            var listElement = this.createElement('li', { className: FILE, attrs: { 'data-file-name': listItem.name } });\n            this.uploadTemplateFn = this.templateComplier(this.template);\n            var liTempCompiler = this.uploadTemplateFn(listItem, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, listElement);\n            if (liTempCompiler) {\n                var fromElements = [].slice.call(liTempCompiler);\n                append(fromElements, listElement);\n            }\n            var index = fileData.indexOf(listItem);\n            var eventArgs = {\n                element: listElement,\n                fileInfo: listItem,\n                index: index,\n                isPreload: this.isPreLoadFile(listItem)\n            };\n            var eventsArgs = {\n                element: listElement,\n                fileInfo: listItem,\n                index: index,\n                isPreload: this.isPreLoadFile(listItem)\n            };\n            this.trigger('rendering', eventArgs);\n            this.trigger('fileListRendering', eventsArgs);\n            this.listParent.appendChild(listElement);\n            this.fileList.push(listElement);\n        }\n        this.renderReactTemplates();\n    };\n    Uploader.prototype.createParentUL = function () {\n        if (isNullOrUndefined(this.listParent)) {\n            this.listParent = this.createElement('ul', { className: LIST_PARENT });\n            this.uploadWrapper.appendChild(this.listParent);\n        }\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    Uploader.prototype.formFileList = function (fileData, files) {\n        var fileList = this.createElement('li', { className: FILE });\n        fileList.setAttribute('data-files-count', fileData.length + '');\n        var fileContainer = this.createElement('span', { className: TEXT_CONTAINER });\n        var statusMessage;\n        for (var _i = 0, fileData_2 = fileData; _i < fileData_2.length; _i++) {\n            var listItem = fileData_2[_i];\n            var fileNameEle = this.createElement('span', { className: FILE_NAME });\n            fileNameEle.innerHTML = this.getFileNameOnly(listItem.name);\n            var fileTypeEle = this.createElement('span', { className: FILE_TYPE });\n            var fileType = this.getFileType(listItem.name);\n            fileTypeEle.innerHTML = '.' + fileType;\n            if (!fileType) {\n                fileTypeEle.classList.add('e-hidden');\n            }\n            if (!this.enableRtl) {\n                fileContainer.appendChild(fileNameEle);\n                fileContainer.appendChild(fileTypeEle);\n            }\n            else {\n                var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n                rtlContainer.appendChild(fileTypeEle);\n                rtlContainer.appendChild(fileNameEle);\n                fileContainer.appendChild(rtlContainer);\n            }\n            this.truncateName(fileNameEle);\n            statusMessage = this.formValidateFileInfo(listItem, fileList);\n        }\n        fileList.appendChild(fileContainer);\n        this.setListToFileInfo(fileData, fileList);\n        var index = this.listParent.querySelectorAll('li').length;\n        var infoEle = this.createElement('span');\n        if (fileList.classList.contains(INVALID_FILE)) {\n            infoEle.classList.add(STATUS);\n            infoEle.classList.add(INVALID_FILE);\n            infoEle.innerText = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n        }\n        else {\n            infoEle.classList.add(fileData.length > 1 ? INFORMATION : FILE_SIZE);\n            infoEle.innerText = fileData.length > 1 ? this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n                + this.localizedTexts('size') + ': ' +\n                this.bytesToSize(this.getFileSize(fileData)) : this.bytesToSize(fileData[0].size);\n            this.createFormInput(fileData);\n        }\n        fileContainer.appendChild(infoEle);\n        if (isNullOrUndefined(fileList.querySelector('.e-icons'))) {\n            var iconElement = this.createElement('span', { className: 'e-icons', attrs: { 'tabindex': this.btnTabIndex } });\n            /* istanbul ignore next */\n            if (this.browserName === 'msie') {\n                iconElement.classList.add('e-msie');\n            }\n            iconElement.setAttribute('title', this.localizedTexts('remove'));\n            fileList.appendChild(fileContainer);\n            fileList.appendChild(iconElement);\n            EventHandler.add(iconElement, 'click', this.removeFiles, this);\n            iconElement.classList.add(REMOVE_ICON);\n        }\n        var eventArgs = {\n            element: fileList,\n            fileInfo: this.mergeFileInfo(fileData, fileList),\n            index: index,\n            isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n        };\n        var eventsArgs = {\n            element: fileList,\n            fileInfo: this.mergeFileInfo(fileData, fileList),\n            index: index,\n            isPreload: this.isPreLoadFile(this.mergeFileInfo(fileData, fileList))\n        };\n        this.trigger('rendering', eventArgs);\n        this.trigger('fileListRendering', eventsArgs);\n        this.listParent.appendChild(fileList);\n        this.fileList.push(fileList);\n    };\n    Uploader.prototype.formValidateFileInfo = function (listItem, fileList) {\n        var statusMessage = listItem.status;\n        var validationMessages = this.validatedFileSize(listItem.size);\n        if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n            this.addInvalidClass(fileList);\n            statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n                validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n        }\n        var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n        if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n            this.addInvalidClass(fileList);\n            statusMessage = typeValidationMessage;\n        }\n        return statusMessage;\n    };\n    Uploader.prototype.addInvalidClass = function (fileList) {\n        fileList.classList.add(INVALID_FILE);\n    };\n    Uploader.prototype.createFormInput = function (fileData) {\n        if (this.browserName !== 'safari') {\n            var inputElement = this.element.cloneNode(true);\n            inputElement.classList.add(HIDDEN_INPUT);\n            for (var _i = 0, fileData_3 = fileData; _i < fileData_3.length; _i++) {\n                var listItem = fileData_3[_i];\n                listItem.input = inputElement;\n            }\n            inputElement.setAttribute('id', getUniqueID('hiddenUploader'));\n            inputElement.setAttribute('name', this.uploaderName);\n            this.uploadWrapper.querySelector('.' + INPUT_WRAPPER).appendChild(inputElement);\n            if (this.browserName !== 'msie' && this.browserName !== 'edge') {\n                this.element.value = '';\n            }\n        }\n    };\n    Uploader.prototype.getFileSize = function (fileData) {\n        var fileSize = 0;\n        for (var _i = 0, fileData_4 = fileData; _i < fileData_4.length; _i++) {\n            var file = fileData_4[_i];\n            fileSize += file.size;\n        }\n        return fileSize;\n    };\n    Uploader.prototype.mergeFileInfo = function (fileData, fileList) {\n        var result = {\n            name: '',\n            rawFile: '',\n            size: 0,\n            status: '',\n            type: '',\n            validationMessages: { minSize: '', maxSize: '' },\n            statusCode: '1',\n            list: fileList\n        };\n        var fileNames = [];\n        var type = '';\n        for (var _i = 0, fileData_5 = fileData; _i < fileData_5.length; _i++) {\n            var listItem = fileData_5[_i];\n            fileNames.push(listItem.name);\n            type = listItem.type;\n        }\n        result.name = fileNames.join(', ');\n        result.size = this.getFileSize(fileData);\n        result.type = type;\n        result.status = this.statusForFormUpload(fileData, fileList);\n        return result;\n    };\n    Uploader.prototype.statusForFormUpload = function (fileData, fileList) {\n        var isValid = true;\n        var statusMessage;\n        for (var _i = 0, fileData_6 = fileData; _i < fileData_6.length; _i++) {\n            var listItem = fileData_6[_i];\n            statusMessage = listItem.status;\n            var validationMessages = this.validatedFileSize(listItem.size);\n            if (validationMessages.minSize !== '' || validationMessages.maxSize !== '') {\n                isValid = false;\n                statusMessage = validationMessages.minSize !== '' ? this.localizedTexts('invalidMinFileSize') :\n                    validationMessages.maxSize !== '' ? this.localizedTexts('invalidMaxFileSize') : statusMessage;\n            }\n            var typeValidationMessage = this.checkExtension(this.getFilesInArray(listItem))[0].status;\n            if (typeValidationMessage === this.localizedTexts('invalidFileType')) {\n                isValid = false;\n                statusMessage = typeValidationMessage;\n            }\n        }\n        if (!isValid) {\n            fileList.classList.add(INVALID_FILE);\n            statusMessage = fileData.length > 1 ? this.localizedTexts('invalidFileSelection') : statusMessage;\n        }\n        else {\n            statusMessage = this.localizedTexts('totalFiles') + ': ' + fileData.length + ' , '\n                + this.localizedTexts('size') + ': ' +\n                this.bytesToSize(this.getFileSize(fileData));\n        }\n        return statusMessage;\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    Uploader.prototype.formCustomFileList = function (fileData, files) {\n        this.createParentUL();\n        var fileList = this.createElement('li', { className: FILE });\n        fileList.setAttribute('data-files-count', fileData.length + '');\n        this.setListToFileInfo(fileData, fileList);\n        var result = this.mergeFileInfo(fileData, fileList);\n        fileList.setAttribute('data-file-name', result.name);\n        this.uploadTemplateFn = this.templateComplier(this.template);\n        var liTempCompiler = this.uploadTemplateFn(result, this, 'template', this.element.id + 'Template', this.isStringTemplate, null, fileList);\n        if (liTempCompiler) {\n            var fromElements = [].slice.call(liTempCompiler);\n            append(fromElements, fileList);\n        }\n        var index = this.listParent.querySelectorAll('li').length;\n        if (!fileList.classList.contains(INVALID_FILE)) {\n            this.createFormInput(fileData);\n        }\n        var eventArgs = {\n            element: fileList,\n            fileInfo: result,\n            index: index,\n            isPreload: this.isPreLoadFile(result)\n        };\n        var eventsArgs = {\n            element: fileList,\n            fileInfo: result,\n            index: index,\n            isPreload: this.isPreLoadFile(result)\n        };\n        this.trigger('rendering', eventArgs);\n        this.trigger('fileListRendering', eventsArgs);\n        this.listParent.appendChild(fileList);\n        this.fileList.push(fileList);\n        this.renderReactTemplates();\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-param */\n    /**\n     * Create the file list for specified files data.\n     *\n     * @param { FileInfo[] } fileData - Specifies the files data for file list creation.\n     * @returns {void}\n     */\n    Uploader.prototype.createFileList = function (fileData) {\n        this.filesData = this.filesData && this.filesData.length > 0 ? this.filesData.concat(fileData) : fileData;\n        this.internalCreateFileList(fileData);\n    };\n    Uploader.prototype.internalCreateFileList = function (fileData) {\n        /* eslint-enable valid-jsdoc, jsdoc/require-param */\n        this.createParentUL();\n        if (this.template !== '' && !isNullOrUndefined(this.template)) {\n            if (this.isFormUpload()) {\n                this.uploadWrapper.classList.add(FORM_UPLOAD);\n                this.formCustomFileList(fileData, this.element.files);\n            }\n            else {\n                this.createCustomfileList(fileData);\n            }\n        }\n        else if (this.isFormUpload()) {\n            this.uploadWrapper.classList.add(FORM_UPLOAD);\n            this.formFileList(fileData, this.element.files);\n        }\n        else {\n            for (var _i = 0, fileData_7 = fileData; _i < fileData_7.length; _i++) {\n                var listItem = fileData_7[_i];\n                var liElement = this.createElement('li', {\n                    className: FILE,\n                    attrs: { 'data-file-name': listItem.name, 'data-files-count': '1' }\n                });\n                var textContainer = this.createElement('span', { className: TEXT_CONTAINER });\n                var textElement = this.createElement('span', { className: FILE_NAME, attrs: { 'title': listItem.name } });\n                textElement.innerHTML = this.getFileNameOnly(listItem.name);\n                var fileExtension = this.createElement('span', { className: FILE_TYPE });\n                var fileType = this.getFileType(listItem.name);\n                fileExtension.innerHTML = '.' + fileType;\n                if (!fileType) {\n                    fileExtension.classList.add('e-hidden');\n                }\n                if (!this.enableRtl) {\n                    textContainer.appendChild(textElement);\n                    textContainer.appendChild(fileExtension);\n                }\n                else {\n                    var rtlContainer = this.createElement('span', { className: RTL_CONTAINER });\n                    rtlContainer.appendChild(fileExtension);\n                    rtlContainer.appendChild(textElement);\n                    textContainer.appendChild(rtlContainer);\n                }\n                var fileSize = this.createElement('span', { className: FILE_SIZE });\n                fileSize.innerHTML = this.bytesToSize(listItem.size);\n                textContainer.appendChild(fileSize);\n                var statusElement = this.createElement('span', { className: STATUS });\n                textContainer.appendChild(statusElement);\n                statusElement.innerHTML = listItem.status;\n                liElement.appendChild(textContainer);\n                var iconElement = this.createElement('span', { className: ' e-icons',\n                    attrs: { 'tabindex': this.btnTabIndex } });\n                /* istanbul ignore next */\n                if (this.browserName === 'msie') {\n                    iconElement.classList.add('e-msie');\n                }\n                iconElement.setAttribute('title', this.localizedTexts('remove'));\n                liElement.appendChild(iconElement);\n                EventHandler.add(iconElement, 'click', this.removeFiles, this);\n                if (listItem.statusCode === '2') {\n                    statusElement.classList.add(UPLOAD_SUCCESS);\n                    iconElement.classList.add(DELETE_ICON);\n                    iconElement.setAttribute('title', this.localizedTexts('delete'));\n                }\n                else if (listItem.statusCode !== '1') {\n                    statusElement.classList.remove(UPLOAD_SUCCESS);\n                    statusElement.classList.add(VALIDATION_FAILS);\n                }\n                if (this.autoUpload && listItem.statusCode === '1' && this.asyncSettings.saveUrl !== '') {\n                    statusElement.innerHTML = '';\n                }\n                if (!iconElement.classList.contains(DELETE_ICON)) {\n                    iconElement.classList.add(REMOVE_ICON);\n                }\n                var index = fileData.indexOf(listItem);\n                var eventArgs = {\n                    element: liElement,\n                    fileInfo: listItem,\n                    index: index,\n                    isPreload: this.isPreLoadFile(listItem)\n                };\n                var eventsArgs = {\n                    element: liElement,\n                    fileInfo: listItem,\n                    index: index,\n                    isPreload: this.isPreLoadFile(listItem)\n                };\n                this.trigger('rendering', eventArgs);\n                this.trigger('fileListRendering', eventsArgs);\n                this.listParent.appendChild(liElement);\n                this.fileList.push(liElement);\n                this.truncateName(textElement);\n                var preventActionComplete = this.flag;\n                if (this.isPreLoadFile(listItem)) {\n                    this.flag = false;\n                    this.checkActionComplete(true);\n                    this.flag = preventActionComplete;\n                }\n            }\n        }\n    };\n    Uploader.prototype.getSlicedName = function (nameElement) {\n        var text = nameElement.textContent;\n        nameElement.dataset.tail = text.slice(text.length - 10);\n    };\n    Uploader.prototype.setListToFileInfo = function (fileData, fileList) {\n        for (var _i = 0, fileData_8 = fileData; _i < fileData_8.length; _i++) {\n            var listItem = fileData_8[_i];\n            listItem.list = fileList;\n        }\n    };\n    Uploader.prototype.truncateName = function (name) {\n        var nameElement = name;\n        if (this.browserName !== 'edge' && nameElement.offsetWidth < nameElement.scrollWidth) {\n            this.getSlicedName(nameElement);\n            /* istanbul ignore next */\n        }\n        else if (nameElement.offsetWidth + 1 < nameElement.scrollWidth) {\n            this.getSlicedName(nameElement);\n        }\n    };\n    Uploader.prototype.getFileType = function (name) {\n        var extension;\n        var index = name.lastIndexOf('.');\n        if (index >= 0) {\n            extension = name.substring(index + 1);\n        }\n        return extension ? extension : '';\n    };\n    Uploader.prototype.getFileNameOnly = function (name) {\n        var type = this.getFileType(name);\n        var names = name.split('.' + type);\n        return type = names[0];\n    };\n    Uploader.prototype.setInitialAttributes = function () {\n        if (this.initialAttr.accept) {\n            this.element.setAttribute('accept', this.initialAttr.accept);\n        }\n        if (this.initialAttr.disabled) {\n            this.element.setAttribute('disabled', 'disabled');\n        }\n        if (this.initialAttr.multiple) {\n            var newAttr = document.createAttribute('multiple');\n            this.element.setAttributeNode(newAttr);\n        }\n    };\n    Uploader.prototype.filterfileList = function (files) {\n        var filterFiles = [];\n        var li;\n        for (var i = 0; i < files.length; i++) {\n            li = this.getLiElement(files[i]);\n            if (!li.classList.contains(UPLOAD_SUCCESS)) {\n                filterFiles.push(files[i]);\n            }\n        }\n        return filterFiles;\n    };\n    Uploader.prototype.updateStatus = function (files, status, statusCode, updateLiStatus) {\n        if (updateLiStatus === void 0) { updateLiStatus = true; }\n        if (!(status === '' || isNullOrUndefined(status)) && !(statusCode === '' || isNullOrUndefined(statusCode))) {\n            files.status = status;\n            files.statusCode = statusCode;\n        }\n        if (updateLiStatus) {\n            var li = this.getLiElement(files);\n            if (!isNullOrUndefined(li)) {\n                if (!isNullOrUndefined(li.querySelector('.' + STATUS)) && !((status === '' || isNullOrUndefined(status)))) {\n                    li.querySelector('.' + STATUS).textContent = status;\n                }\n            }\n        }\n        return files;\n    };\n    Uploader.prototype.getLiElement = function (files) {\n        var index;\n        for (var i = 0; i < this.filesData.length; i++) {\n            if (!isNullOrUndefined(files) && ((!isNullOrUndefined(this.filesData[i].id) &&\n                !isNullOrUndefined(files.id)) ? (this.filesData[i].name === files.name &&\n                this.filesData[i].id === files.id) : this.filesData[i].name === files.name)) {\n                index = i;\n            }\n        }\n        return this.fileList[index];\n    };\n    Uploader.prototype.createProgressBar = function (liElement) {\n        var progressbarWrapper = this.createElement('span', { className: PROGRESS_WRAPPER });\n        var progressBar = this.createElement('progressbar', { className: PROGRESSBAR, attrs: { value: '0', max: '100' } });\n        var progressbarInnerWrapper = this.createElement('span', { className: PROGRESS_INNER_WRAPPER });\n        progressBar.setAttribute('style', 'width: 0%');\n        var progressbarText = this.createElement('span', { className: PROGRESSBAR_TEXT });\n        progressbarText.textContent = '0%';\n        progressbarInnerWrapper.appendChild(progressBar);\n        progressbarWrapper.appendChild(progressbarInnerWrapper);\n        progressbarWrapper.appendChild(progressbarText);\n        liElement.querySelector('.' + TEXT_CONTAINER).appendChild(progressbarWrapper);\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.updateProgressbar = function (e, li) {\n        if (!isNaN(Math.round((e.loaded / e.total) * 100)) && !isNullOrUndefined(li.querySelector('.' + PROGRESSBAR))) {\n            if (!isNullOrUndefined(this.progressInterval) && this.progressInterval !== '') {\n                var value = (Math.round((e.loaded / e.total) * 100)) % parseInt(this.progressInterval, 10);\n                if (value === 0 || value === 100) {\n                    this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n                }\n            }\n            else {\n                this.changeProgressValue(li, Math.round((e.loaded / e.total) * 100).toString() + '%');\n            }\n        }\n    };\n    Uploader.prototype.changeProgressValue = function (li, progressValue) {\n        li.querySelector('.' + PROGRESSBAR).setAttribute('style', 'width:' + progressValue);\n        li.querySelector('.' + PROGRESSBAR_TEXT).textContent = progressValue;\n    };\n    Uploader.prototype.uploadInProgress = function (e, files, customUI, request) {\n        var li = this.getLiElement(files);\n        if (isNullOrUndefined(li) && (!customUI)) {\n            return;\n        }\n        if (!isNullOrUndefined(li)) {\n            /* istanbul ignore next */\n            if (files.statusCode === '5') {\n                this.cancelUploadingFile(files, e, request, li);\n            }\n            if (!(li.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0) && li.querySelector('.' + STATUS)) {\n                li.querySelector('.' + STATUS).classList.add(UPLOAD_INPROGRESS);\n                this.createProgressBar(li);\n                this.updateProgressBarClasses(li, UPLOAD_INPROGRESS);\n                li.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n            }\n            this.updateProgressbar(e, li);\n            var iconEle = li.querySelector('.' + REMOVE_ICON);\n            if (!isNullOrUndefined(iconEle)) {\n                iconEle.classList.add(ABORT_ICON, UPLOAD_INPROGRESS);\n                iconEle.setAttribute('title', this.localizedTexts('abort'));\n                iconEle.classList.remove(REMOVE_ICON);\n            }\n        }\n        else {\n            this.cancelUploadingFile(files, e, request);\n        }\n        var args = { e: e, operation: 'upload', file: this.updateStatus(files, this.localizedTexts('inProgress'), '3') };\n        this.trigger('progress', args);\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.cancelUploadingFile = function (files, e, request, li) {\n        var _this = this;\n        if (files.statusCode === '5') {\n            var eventArgs = {\n                event: e,\n                fileData: files,\n                cancel: false,\n                customFormData: [],\n                currentRequest: null\n            };\n            this.trigger('canceling', eventArgs, function (eventArgs) {\n                if (eventArgs.cancel) {\n                    files.statusCode = '3';\n                    if (!isNullOrUndefined(li)) {\n                        var spinnerTarget = li.querySelector('.' + ABORT_ICON);\n                        if (!isNullOrUndefined(spinnerTarget)) {\n                            hideSpinner(spinnerTarget);\n                            detach(li.querySelector('.e-spinner-pane'));\n                        }\n                    }\n                }\n                else {\n                    request.emitError = false;\n                    request.httpRequest.abort();\n                    var formData = new FormData();\n                    if (files.statusCode === '5') {\n                        var name_1 = _this.element.getAttribute('name');\n                        formData.append(name_1, files.name);\n                        formData.append('cancel-uploading', files.name);\n                        _this.updateFormData(formData, eventArgs.customFormData);\n                        var ajax_1 = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n                        ajax_1.emitError = false;\n                        ajax_1.beforeSend = function (e) {\n                            if (eventArgs.currentRequest) {\n                                _this.updateCustomheader(ajax_1.httpRequest, eventArgs.currentRequest);\n                            }\n                        };\n                        ajax_1.onLoad = function (e) {\n                            _this.removecanceledFile(e, files);\n                            return {};\n                        };\n                        ajax_1.send(formData);\n                    }\n                }\n            });\n        }\n    };\n    Uploader.prototype.removecanceledFile = function (e, file) {\n        var liElement = this.getLiElement(file);\n        if (isNullOrUndefined(liElement) || liElement.querySelector('.' + RETRY_ICON) || isNullOrUndefined(liElement.querySelector('.' + ABORT_ICON))) {\n            return;\n        }\n        this.updateStatus(file, this.localizedTexts('fileUploadCancel'), '5');\n        this.renderFailureState(e, file, liElement);\n        var spinnerTarget = liElement.querySelector('.' + REMOVE_ICON);\n        if (!isNullOrUndefined(liElement)) {\n            hideSpinner(spinnerTarget);\n            if (!isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n                detach(liElement.querySelector('.e-spinner-pane'));\n            }\n        }\n        var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n        var args = { event: e, response: requestResponse, operation: 'cancel', file: file };\n        this.trigger('success', args);\n    };\n    Uploader.prototype.renderFailureState = function (e, file, liElement) {\n        var _this = this;\n        this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n        this.removeProgressbar(liElement, 'failure');\n        if (!isNullOrUndefined(liElement.querySelector('.e-file-status'))) {\n            liElement.querySelector('.e-file-status').classList.add(UPLOAD_FAILED);\n        }\n        var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n        if (isNullOrUndefined(deleteIcon)) {\n            return;\n        }\n        deleteIcon.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n        deleteIcon.classList.add(REMOVE_ICON);\n        deleteIcon.setAttribute('title', this.localizedTexts('remove'));\n        this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n        deleteIcon.parentElement.insertBefore(this.pauseButton, deleteIcon);\n        this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n        var retryElement = liElement.querySelector('.' + RETRY_ICON);\n        /* istanbul ignore next */\n        retryElement.addEventListener('click', function (e) {\n            _this.reloadcanceledFile(e, file, liElement, false);\n        }, false);\n    };\n    Uploader.prototype.reloadcanceledFile = function (e, file, liElement, custom) {\n        file.statusCode = '1';\n        file.status = this.localizedTexts('readyToUploadMessage');\n        if (!custom) {\n            if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n                liElement.querySelector('.' + STATUS).classList.remove(UPLOAD_FAILED);\n            }\n            if (!isNullOrUndefined(liElement.querySelector('.' + RETRY_ICON))) {\n                detach(liElement.querySelector('.' + RETRY_ICON));\n            }\n            this.pauseButton = null;\n        }\n        /* istanbul ignore next */\n        if (!isNullOrUndefined(liElement)) {\n            liElement.classList.add(RESTRICT_RETRY);\n        }\n        this.upload([file]);\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.uploadComplete = function (e, file, customUI) {\n        var status = e.target;\n        if (status.readyState === 4 && status.status >= 200 && status.status <= 299) {\n            var li = this.getLiElement(file);\n            if (isNullOrUndefined(li) && (!customUI || isNullOrUndefined(customUI))) {\n                return;\n            }\n            if (!isNullOrUndefined(li)) {\n                this.updateProgressBarClasses(li, UPLOAD_SUCCESS);\n                this.removeProgressbar(li, 'success');\n                var iconEle = li.querySelector('.' + ABORT_ICON);\n                if (!isNullOrUndefined(iconEle)) {\n                    iconEle.classList.add(DELETE_ICON);\n                    iconEle.setAttribute('title', this.localizedTexts('delete'));\n                    iconEle.classList.remove(ABORT_ICON);\n                    iconEle.classList.remove(UPLOAD_INPROGRESS);\n                }\n            }\n            this.raiseSuccessEvent(e, file);\n        }\n        else {\n            this.uploadFailed(e, file);\n        }\n    };\n    Uploader.prototype.getResponse = function (e) {\n        var target = e.currentTarget;\n        var response = {\n            readyState: target.readyState,\n            statusCode: target.status,\n            statusText: target.statusText,\n            headers: target.getAllResponseHeaders(),\n            withCredentials: target.withCredentials\n        };\n        return response;\n    };\n    Uploader.prototype.raiseSuccessEvent = function (e, file) {\n        var _this = this;\n        var response = e && e.currentTarget ? this.getResponse(e) : null;\n        var statusMessage = this.localizedTexts('uploadSuccessMessage');\n        var args = {\n            e: e, response: response, operation: 'upload', file: this.updateStatus(file, statusMessage, '2', false), statusText: statusMessage\n        };\n        var liElement = this.getLiElement(file);\n        if (!isNullOrUndefined(liElement)) {\n            var spinnerEle = liElement.querySelector('.' + SPINNER_PANE);\n            if (!isNullOrUndefined(spinnerEle)) {\n                hideSpinner(liElement);\n                detach(spinnerEle);\n            }\n        }\n        this.trigger('success', args, function (args) {\n            _this.updateStatus(file, args.statusText, '2');\n            _this.uploadedFilesData.push(file);\n            _this.trigger('change', { file: _this.uploadedFilesData });\n            _this.checkActionButtonStatus();\n            if (_this.fileList.length > 0) {\n                if ((!(_this.getLiElement(file)).classList.contains(RESTRICT_RETRY))) {\n                    _this.uploadSequential();\n                    _this.checkActionComplete(true);\n                }\n                else {\n                    /* istanbul ignore next */\n                    (_this.getLiElement(file)).classList.remove(RESTRICT_RETRY);\n                }\n            }\n            else if (!_this.showFileList) {\n                _this.checkActionComplete(true);\n            }\n        });\n    };\n    Uploader.prototype.uploadFailed = function (e, file) {\n        var _this = this;\n        var li = this.getLiElement(file);\n        var response = e && e.currentTarget ? this.getResponse(e) : null;\n        var statusMessage = this.localizedTexts('uploadFailedMessage');\n        var args = {\n            e: e, response: response, operation: 'upload', file: this.updateStatus(file, statusMessage, '0', false), statusText: statusMessage\n        };\n        if (!isNullOrUndefined(li)) {\n            this.renderFailureState(e, file, li);\n        }\n        this.trigger('failure', args, function (args) {\n            _this.updateStatus(file, args.statusText, '0');\n            _this.checkActionButtonStatus();\n            _this.uploadSequential();\n            _this.checkActionComplete(true);\n        });\n    };\n    Uploader.prototype.uploadSequential = function () {\n        if (this.sequentialUpload) {\n            if (this.autoUpload) {\n                /* istanbul ignore next */\n                this.checkAutoUpload(this.filesData);\n            }\n            else {\n                this.uploadButtonClick();\n            }\n        }\n    };\n    Uploader.prototype.checkActionComplete = function (increment) {\n        if (increment) {\n            ++this.actionCompleteCount;\n        }\n        else {\n            --this.actionCompleteCount;\n        }\n        this.raiseActionComplete();\n    };\n    Uploader.prototype.raiseActionComplete = function () {\n        if ((this.filesData.length === this.actionCompleteCount) && this.flag) {\n            this.flag = false;\n            var eventArgs = {\n                fileData: []\n            };\n            eventArgs.fileData = this.getSelectedFileStatus(this.selectedFiles);\n            this.trigger('actionComplete', eventArgs);\n        }\n    };\n    Uploader.prototype.getSelectedFileStatus = function (selectedFiles) {\n        var matchFiles = [];\n        var matchFilesIndex = 0;\n        for (var selectFileIndex = 0; selectFileIndex < selectedFiles.length; selectFileIndex++) {\n            var selectedFileData = selectedFiles[selectFileIndex];\n            for (var fileDataIndex = 0; fileDataIndex < this.filesData.length; fileDataIndex++) {\n                if (this.filesData[fileDataIndex].name === selectedFileData.name && this.filesData[fileDataIndex].status === selectedFileData.status) {\n                    matchFiles[matchFilesIndex] = this.filesData[fileDataIndex];\n                    ++matchFilesIndex;\n                }\n            }\n        }\n        return matchFiles;\n    };\n    Uploader.prototype.updateProgressBarClasses = function (li, className) {\n        var progressBar = li.querySelector('.' + PROGRESSBAR);\n        if (!isNullOrUndefined(progressBar)) {\n            progressBar.classList.add(className);\n        }\n    };\n    Uploader.prototype.removeProgressbar = function (li, callType) {\n        var _this = this;\n        if (!isNullOrUndefined(li.querySelector('.' + PROGRESS_WRAPPER))) {\n            this.progressAnimation = new Animation({ duration: 1250 });\n            this.progressAnimation.animate(li.querySelector('.' + PROGRESS_WRAPPER), { name: 'FadeOut' });\n            this.progressAnimation.animate(li.querySelector('.' + PROGRESSBAR_TEXT), { name: 'FadeOut' });\n            setTimeout(function () {\n                _this.animateProgressBar(li, callType);\n            }, 750);\n        }\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.animateProgressBar = function (li, callType) {\n        if (callType === 'success') {\n            li.classList.add(UPLOAD_SUCCESS);\n            if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n                li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n                this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n                li.querySelector('.' + STATUS).classList.add(UPLOAD_SUCCESS);\n            }\n        }\n        else {\n            if (!isNullOrUndefined(li.querySelector('.' + STATUS))) {\n                li.querySelector('.' + STATUS).classList.remove(UPLOAD_INPROGRESS);\n                this.progressAnimation.animate(li.querySelector('.' + STATUS), { name: 'FadeIn' });\n                li.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n            }\n        }\n        if (li.querySelector('.' + PROGRESS_WRAPPER)) {\n            detach(li.querySelector('.' + PROGRESS_WRAPPER));\n        }\n    };\n    Uploader.prototype.setExtensions = function (extensions) {\n        if (extensions !== '' && !isNullOrUndefined(extensions)) {\n            this.element.setAttribute('accept', extensions);\n        }\n        else {\n            this.element.removeAttribute('accept');\n        }\n    };\n    Uploader.prototype.templateComplier = function (uploadTemplate) {\n        if (uploadTemplate) {\n            try {\n                if (typeof uploadTemplate !== 'function' && selectAll(uploadTemplate, document).length) {\n                    return compile(select(uploadTemplate, document).innerHTML.trim());\n                }\n                else {\n                    return compile(uploadTemplate);\n                }\n            }\n            catch (exception) {\n                return compile(uploadTemplate);\n            }\n        }\n        return undefined;\n    };\n    Uploader.prototype.setRTL = function () {\n        if (this.enableRtl) {\n            addClass([this.uploadWrapper], RTL);\n        }\n        else {\n            removeClass([this.uploadWrapper], RTL);\n        }\n    };\n    Uploader.prototype.localizedTexts = function (localeText) {\n        this.l10n.setLocale(this.locale);\n        return this.l10n.getConstant(localeText);\n    };\n    Uploader.prototype.setControlStatus = function () {\n        if (!this.enabled) {\n            this.uploadWrapper.classList.add(DISABLED);\n            this.element.setAttribute('disabled', 'disabled');\n            this.browseButton.setAttribute('disabled', 'disabled');\n            if (!isNullOrUndefined(this.clearButton)) {\n                this.clearButton.setAttribute('disabled', 'disabled');\n            }\n            if (!isNullOrUndefined(this.uploadButton)) {\n                this.uploadButton.setAttribute('disabled', 'disabled');\n            }\n        }\n        else {\n            if (this.uploadWrapper.classList.contains(DISABLED)) {\n                this.uploadWrapper.classList.remove(DISABLED);\n            }\n            if (!isNullOrUndefined(this.browseButton) && this.element.hasAttribute('disabled')) {\n                this.element.removeAttribute('disabled');\n                this.browseButton.removeAttribute('disabled');\n            }\n            if (!isNullOrUndefined(this.clearButton) && this.clearButton.hasAttribute('disabled')) {\n                this.clearButton.removeAttribute('disabled');\n            }\n            if (!isNullOrUndefined(this.uploadButton) && this.uploadButton.hasAttribute('disabled')) {\n                this.uploadButton.hasAttribute('disabled');\n            }\n        }\n    };\n    Uploader.prototype.checkHTMLAttributes = function (isDynamic) {\n        var attributes = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n            ['accept', 'multiple', 'disabled'];\n        for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n            var prop = attributes_1[_i];\n            if (!isNullOrUndefined(this.element.getAttribute(prop))) {\n                switch (prop) {\n                    case 'accept':\n                        if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['allowedExtensions'] === undefined))\n                            || isDynamic) {\n                            this.setProperties({ allowedExtensions: this.element.getAttribute('accept') }, !isDynamic);\n                            this.initialAttr.accept = this.allowedExtensions;\n                        }\n                        break;\n                    case 'multiple':\n                        if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['multiple'] === undefined)) || isDynamic) {\n                            var isMutiple = this.element.getAttribute(prop) === 'multiple' ||\n                                this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? true : false;\n                            this.setProperties({ multiple: isMutiple }, !isDynamic);\n                            this.initialAttr.multiple = true;\n                        }\n                        break;\n                    case 'disabled':\n                        if ((isNullOrUndefined(this.uploaderOptions) || (this.uploaderOptions['enabled'] === undefined)) || isDynamic) {\n                            var isDisabled = this.element.getAttribute(prop) === 'disabled' ||\n                                this.element.getAttribute(prop) === '' || this.element.getAttribute(prop) === 'true' ? false : true;\n                            this.setProperties({ enabled: isDisabled }, !isDynamic);\n                            this.initialAttr.disabled = true;\n                        }\n                }\n            }\n        }\n    };\n    Uploader.prototype.chunkUpload = function (file, custom, fileIndex) {\n        var start = 0;\n        var end = Math.min(this.asyncSettings.chunkSize, file.size);\n        var index = 0;\n        var blob = file.rawFile.slice(start, end);\n        var metaData = { chunkIndex: index, blob: blob, file: file, start: start, end: end, retryCount: 0, request: null };\n        this.sendRequest(file, metaData, custom, fileIndex);\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    Uploader.prototype.sendRequest = function (file, metaData, custom, fileIndex) {\n        var _this = this;\n        var formData = new FormData();\n        var blob = file.rawFile.slice(metaData.start, metaData.end);\n        formData.append(this.uploaderName, blob, file.name);\n        formData.append('chunk-index', metaData.chunkIndex.toString());\n        formData.append('chunkIndex', metaData.chunkIndex.toString());\n        var totalChunk = Math.max(Math.ceil(file.size / this.asyncSettings.chunkSize), 1);\n        formData.append('total-chunk', totalChunk.toString());\n        formData.append('totalChunk', totalChunk.toString());\n        var ajax = new Ajax({ url: this.asyncSettings.saveUrl, type: 'POST', async: true, contentType: null });\n        ajax.emitError = false;\n        ajax.onLoad = function (e) {\n            _this.chunkUploadComplete(e, metaData, custom);\n            return {};\n        };\n        ajax.onUploadProgress = function (e) {\n            _this.chunkUploadInProgress(e, metaData, custom);\n            return {};\n        };\n        var eventArgs = {\n            fileData: file,\n            customFormData: [],\n            cancel: false,\n            chunkSize: this.asyncSettings.chunkSize === 0 ? null : this.asyncSettings.chunkSize\n        };\n        ajax.beforeSend = function (e) {\n            eventArgs.currentRequest = ajax.httpRequest;\n            eventArgs.currentChunkIndex = metaData.chunkIndex;\n            if (eventArgs.currentChunkIndex === 0) {\n                // This event is currently not required but to avoid breaking changes for previous customer, we have included.\n                _this.trigger('uploading', eventArgs, function (eventArgs) {\n                    _this.uploadingEventCallback(formData, eventArgs, e, file);\n                });\n            }\n            else {\n                _this.trigger('chunkUploading', eventArgs, function (eventArgs) {\n                    _this.uploadingEventCallback(formData, eventArgs, e, file);\n                });\n            }\n        };\n        /* istanbul ignore next */\n        ajax.onError = function (e) {\n            _this.chunkUploadFailed(e, metaData, custom);\n            return {};\n        };\n        ajax.send(formData);\n        metaData.request = ajax;\n    };\n    Uploader.prototype.uploadingEventCallback = function (formData, eventArgs, e, file) {\n        if (eventArgs.cancel) {\n            this.eventCancelByArgs(e, eventArgs, file);\n        }\n        else {\n            this.updateFormData(formData, eventArgs.customFormData);\n        }\n    };\n    Uploader.prototype.eventCancelByArgs = function (e, eventArgs, file) {\n        var _this = this;\n        e.cancel = true;\n        if (eventArgs.fileData.statusCode === '5') {\n            return;\n        }\n        eventArgs.fileData.statusCode = '5';\n        eventArgs.fileData.status = this.localizedTexts('fileUploadCancel');\n        var liElement = this.getLiElement(eventArgs.fileData);\n        if (liElement) {\n            if (!isNullOrUndefined(liElement.querySelector('.' + STATUS))) {\n                liElement.querySelector('.' + STATUS).innerHTML = this.localizedTexts('fileUploadCancel');\n                liElement.querySelector('.' + STATUS).classList.add(UPLOAD_FAILED);\n            }\n            this.pauseButton = this.createElement('span', { className: 'e-icons e-file-reload-btn', attrs: { 'tabindex': this.btnTabIndex } });\n            var removeIcon = liElement.querySelector('.' + REMOVE_ICON);\n            if (removeIcon) {\n                removeIcon.parentElement.insertBefore(this.pauseButton, removeIcon);\n            }\n            this.pauseButton.setAttribute('title', this.localizedTexts('retry'));\n            /* istanbul ignore next */\n            this.pauseButton.addEventListener('click', function (e) {\n                _this.reloadcanceledFile(e, file, liElement);\n            }, false);\n            this.checkActionButtonStatus();\n        }\n    };\n    Uploader.prototype.checkChunkUpload = function () {\n        return (this.asyncSettings.chunkSize <= 0 || isNullOrUndefined(this.asyncSettings.chunkSize)) ? false : true;\n    };\n    Uploader.prototype.chunkUploadComplete = function (e, metaData, custom) {\n        var _this = this;\n        var response = e.target;\n        var liElement;\n        if (response.readyState === 4 && response.status >= 200 && response.status < 300) {\n            var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n            var totalChunk = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n            var eventArgs = {\n                event: e,\n                file: metaData.file,\n                chunkIndex: metaData.chunkIndex,\n                totalChunk: totalChunk,\n                chunkSize: this.asyncSettings.chunkSize,\n                response: requestResponse\n            };\n            this.trigger('chunkSuccess', eventArgs);\n            if (isNullOrUndefined(custom) || !custom) {\n                liElement = this.getLiElement(metaData.file);\n            }\n            this.updateMetaData(metaData);\n            if (metaData.end === metaData.file.size) {\n                metaData.file.statusCode = '3';\n            }\n            if (metaData.file.statusCode === '5') {\n                var eventArgs_1 = { event: e, fileData: metaData.file, cancel: false, customFormData: [] };\n                this.trigger('canceling', eventArgs_1, function (eventArgs) {\n                    /* istanbul ignore next */\n                    if (eventArgs.cancel) {\n                        metaData.file.statusCode = '3';\n                        var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n                        if (!isNullOrUndefined(liElement) && !isNullOrUndefined(spinnerTarget)) {\n                            hideSpinner(spinnerTarget);\n                            detach(liElement.querySelector('.e-spinner-pane'));\n                        }\n                        _this.sendNextRequest(metaData);\n                    }\n                    else {\n                        metaData.request.emitError = false;\n                        response.abort();\n                        var formData = new FormData();\n                        var name_2 = _this.element.getAttribute('name');\n                        formData.append(name_2, metaData.file.name);\n                        formData.append('cancel-uploading', metaData.file.name);\n                        formData.append('cancelUploading', metaData.file.name);\n                        _this.updateFormData(formData, eventArgs.customFormData);\n                        var ajax = new Ajax(_this.asyncSettings.removeUrl, 'POST', true, null);\n                        ajax.emitError = false;\n                        ajax.onLoad = function (e) {\n                            _this.removeChunkFile(e, metaData, custom);\n                            return {};\n                        };\n                        ajax.send(formData);\n                    }\n                });\n            }\n            else {\n                if ((totalChunk - 1) === metaData.chunkIndex && totalChunk > metaData.chunkIndex) {\n                    var index = this.pausedData.indexOf(metaData);\n                    if (index >= 0) {\n                        this.pausedData.splice(index, 1);\n                    }\n                    if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n                        if (liElement && !isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n                            detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n                        }\n                        this.removeChunkProgressBar(metaData);\n                    }\n                    this.raiseSuccessEvent(e, metaData.file);\n                    return;\n                }\n                if (metaData.file.statusCode !== '4') {\n                    this.sendNextRequest(metaData);\n                }\n            }\n        }\n        else {\n            this.chunkUploadFailed(e, metaData);\n        }\n    };\n    Uploader.prototype.sendNextRequest = function (metaData) {\n        metaData.start = metaData.end;\n        metaData.end += this.asyncSettings.chunkSize;\n        metaData.end = Math.min(metaData.end, metaData.file.size);\n        metaData.chunkIndex += 1;\n        this.sendRequest(metaData.file, metaData);\n    };\n    Uploader.prototype.removeChunkFile = function (e, metaData, custom) {\n        if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) && !custom)) {\n            var liElement = this.getLiElement(metaData.file);\n            var deleteIcon = liElement.querySelector('.' + ABORT_ICON);\n            var spinnerTarget = deleteIcon;\n            this.updateStatus(metaData.file, this.localizedTexts('fileUploadCancel'), '5');\n            this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n            this.removeProgressbar(liElement, 'failure');\n            (deleteIcon && deleteIcon.classList.remove(ABORT_ICON));\n            (deleteIcon && deleteIcon.classList.add(REMOVE_ICON));\n            (deleteIcon && deleteIcon.setAttribute('title', this.localizedTexts('remove')));\n            var pauseIcon = liElement.querySelector('.' + PAUSE_UPLOAD);\n            (pauseIcon && pauseIcon.classList.add(RETRY_ICON));\n            (pauseIcon && pauseIcon.classList.remove(PAUSE_UPLOAD));\n            (pauseIcon && pauseIcon.setAttribute('title', this.localizedTexts('retry')));\n            if (!isNullOrUndefined(liElement) && !isNullOrUndefined(deleteIcon)\n                && !isNullOrUndefined(liElement.querySelector('.e-spinner-pane'))) {\n                hideSpinner(spinnerTarget);\n                detach(liElement.querySelector('.e-spinner-pane'));\n            }\n        }\n    };\n    Uploader.prototype.pauseUpload = function (metaData, e, custom) {\n        metaData.file.statusCode = '4';\n        metaData.file.status = this.localizedTexts('pause');\n        this.updateMetaData(metaData);\n        var eventArgs = {\n            event: e ? e : null,\n            file: metaData.file,\n            chunkIndex: metaData.chunkIndex,\n            chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n            chunkSize: this.asyncSettings.chunkSize\n        };\n        this.abortUpload(metaData, custom, eventArgs);\n    };\n    Uploader.prototype.abortUpload = function (metaData, custom, eventArgs) {\n        if (metaData.file.statusCode !== '4') {\n            metaData.request.emitError = false;\n            metaData.request.httpRequest.abort();\n        }\n        var liElement = this.getLiElement(metaData.file);\n        if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n            var targetElement = liElement.querySelector('.' + PAUSE_UPLOAD);\n            targetElement.classList.remove(PAUSE_UPLOAD);\n            targetElement.classList.add(RESUME_UPLOAD);\n            targetElement.setAttribute('title', this.localizedTexts('resume'));\n            targetElement.nextElementSibling.classList.add(REMOVE_ICON);\n            targetElement.nextElementSibling.classList.remove(ABORT_ICON);\n            targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('remove'));\n        }\n        for (var i = 0; i < this.pausedData.length; i++) {\n            if (this.pausedData[i].file.name === metaData.file.name) {\n                this.pausedData.splice(i, 1);\n            }\n        }\n        this.pausedData.push(metaData);\n        this.trigger('pausing', eventArgs);\n    };\n    Uploader.prototype.resumeUpload = function (metaData, e, custom) {\n        var liElement = this.getLiElement(metaData.file);\n        var targetElement;\n        if (!isNullOrUndefined(liElement)) {\n            targetElement = liElement.querySelector('.' + RESUME_UPLOAD);\n        }\n        if (!isNullOrUndefined(targetElement) && (isNullOrUndefined(custom) || !custom)) {\n            targetElement.classList.remove(RESUME_UPLOAD);\n            targetElement.classList.add(PAUSE_UPLOAD);\n            targetElement.setAttribute('title', this.localizedTexts('pause'));\n            targetElement.nextElementSibling.classList.remove(REMOVE_ICON);\n            targetElement.nextElementSibling.classList.add(ABORT_ICON);\n            targetElement.nextElementSibling.setAttribute('title', this.localizedTexts('abort'));\n        }\n        metaData.file.status = this.localizedTexts('inProgress');\n        metaData.file.statusCode = '3';\n        this.updateMetaData(metaData);\n        var eventArgs = {\n            event: e ? e : null,\n            file: metaData.file,\n            chunkIndex: metaData.chunkIndex,\n            chunkCount: Math.round(metaData.file.size / this.asyncSettings.chunkSize),\n            chunkSize: this.asyncSettings.chunkSize\n        };\n        this.trigger('resuming', eventArgs);\n        for (var i = 0; i < this.pausedData.length; i++) {\n            if (this.pausedData[i].end === this.pausedData[i].file.size) {\n                this.chunkUploadComplete(e, metaData, custom);\n            }\n            else {\n                if (this.pausedData[i].file.name === metaData.file.name) {\n                    this.pausedData[i].start = this.pausedData[i].end;\n                    this.pausedData[i].end = this.pausedData[i].end + this.asyncSettings.chunkSize;\n                    this.pausedData[i].end = Math.min(this.pausedData[i].end, this.pausedData[i].file.size);\n                    this.pausedData[i].chunkIndex = this.pausedData[i].chunkIndex + 1;\n                    this.sendRequest(this.pausedData[i].file, this.pausedData[i], custom);\n                }\n            }\n        }\n    };\n    Uploader.prototype.updateMetaData = function (metaData) {\n        if (this.uploadMetaData.indexOf(metaData) === -1) {\n            this.uploadMetaData.push(metaData);\n        }\n        else {\n            this.uploadMetaData.splice(this.uploadMetaData.indexOf(metaData), 1);\n            this.uploadMetaData.push(metaData);\n        }\n    };\n    Uploader.prototype.removeChunkProgressBar = function (metaData) {\n        var liElement = this.getLiElement(metaData.file);\n        if (!isNullOrUndefined(liElement)) {\n            this.updateProgressBarClasses(liElement, UPLOAD_SUCCESS);\n            this.removeProgressbar(liElement, 'success');\n            var cancelButton = liElement.querySelector('.' + ABORT_ICON);\n            if (!isNullOrUndefined(cancelButton)) {\n                cancelButton.classList.add(DELETE_ICON);\n                cancelButton.setAttribute('title', this.localizedTexts('delete'));\n                cancelButton.classList.remove(ABORT_ICON, UPLOAD_INPROGRESS);\n            }\n        }\n    };\n    Uploader.prototype.chunkUploadFailed = function (e, metaData, custom) {\n        var _this = this;\n        var chunkCount = Math.max(Math.ceil(metaData.file.size / this.asyncSettings.chunkSize), 1);\n        var liElement;\n        if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom)) {\n            liElement = this.getLiElement(metaData.file);\n        }\n        var requestResponse = e && e.currentTarget ? this.getResponse(e) : null;\n        var eventArgs = {\n            event: e,\n            file: metaData.file,\n            chunkIndex: metaData.chunkIndex,\n            totalChunk: chunkCount,\n            chunkSize: this.asyncSettings.chunkSize,\n            cancel: false,\n            response: requestResponse\n        };\n        this.trigger('chunkFailure', eventArgs, function (eventArgs) {\n            // To prevent triggering of failure event\n            if (!eventArgs.cancel) {\n                if (metaData.retryCount < _this.asyncSettings.retryCount) {\n                    setTimeout(function () {\n                        _this.retryRequest(liElement, metaData, custom);\n                    }, _this.asyncSettings.retryAfterDelay);\n                }\n                else {\n                    if (!isNullOrUndefined(liElement)) {\n                        var pauseButton = liElement.querySelector('.' + PAUSE_UPLOAD) ?\n                            liElement.querySelector('.' + PAUSE_UPLOAD) : liElement.querySelector('.' + RESUME_UPLOAD);\n                        if (!isNullOrUndefined(pauseButton)) {\n                            pauseButton.classList.add(RETRY_ICON);\n                            pauseButton.classList.remove(PAUSE_UPLOAD, RESUME_UPLOAD);\n                        }\n                        _this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n                        _this.removeProgressbar(liElement, 'failure');\n                        liElement.querySelector('.e-icons').classList.remove(UPLOAD_INPROGRESS);\n                        var iconElement = liElement.querySelector('.' + ABORT_ICON) ?\n                            liElement.querySelector('.' + ABORT_ICON) : liElement.querySelector('.' + REMOVE_ICON);\n                        iconElement.classList.remove(ABORT_ICON);\n                        if (!isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD))) {\n                            detach(liElement.querySelector('.' + PAUSE_UPLOAD));\n                        }\n                        if (metaData.start > 0) {\n                            iconElement.classList.add(DELETE_ICON);\n                            iconElement.setAttribute('title', _this.localizedTexts('delete'));\n                        }\n                        else {\n                            iconElement.classList.add(REMOVE_ICON);\n                            iconElement.setAttribute('title', _this.localizedTexts('remove'));\n                        }\n                    }\n                    metaData.retryCount = 0;\n                    var file_1 = metaData.file;\n                    var failureMessage = _this.localizedTexts('uploadFailedMessage');\n                    var args = {\n                        e: e, response: requestResponse,\n                        operation: 'upload',\n                        file: _this.updateStatus(file_1, failureMessage, '0', false),\n                        statusText: failureMessage\n                    };\n                    _this.trigger('failure', args, function (args) {\n                        _this.updateStatus(file_1, args.statusText, '0');\n                        _this.uploadSequential();\n                        _this.checkActionComplete(true);\n                    });\n                }\n            }\n        });\n    };\n    Uploader.prototype.retryRequest = function (liElement, metaData, custom) {\n        if (isNullOrUndefined(this.template) && (isNullOrUndefined(custom) || !custom) && liElement) {\n            this.updateProgressBarClasses(liElement, UPLOAD_FAILED);\n        }\n        metaData.retryCount += 1;\n        this.sendRequest(metaData.file, metaData);\n    };\n    Uploader.prototype.checkPausePlayAction = function (e) {\n        var targetElement = e.target;\n        var selectedElement = e.target.parentElement;\n        var index = this.fileList.indexOf(selectedElement);\n        var fileData = this.filesData[index];\n        var metaData = this.getCurrentMetaData(fileData);\n        if (targetElement.classList.contains(PAUSE_UPLOAD)) {\n            /* istanbul ignore next */\n            this.pauseUpload(metaData, e);\n        }\n        else if (targetElement.classList.contains(RESUME_UPLOAD)) {\n            /* istanbul ignore next */\n            this.resumeUpload(metaData, e);\n        }\n        else if (targetElement.classList.contains(RETRY_ICON)) {\n            if (metaData.file.status === this.localizedTexts('fileUploadCancel')) {\n                this.retryUpload(metaData, false);\n            }\n            else {\n                this.retryUpload(metaData, true);\n            }\n        }\n    };\n    Uploader.prototype.retryUpload = function (metaData, fromcanceledStage) {\n        if (fromcanceledStage) {\n            metaData.end = metaData.end + this.asyncSettings.chunkSize;\n            metaData.start = metaData.start + this.asyncSettings.chunkSize;\n            this.sendRequest(metaData.file, metaData);\n        }\n        else {\n            metaData.file.statusCode = '1';\n            metaData.file.status = this.localizedTexts('readyToUploadMessage');\n            this.chunkUpload(metaData.file);\n        }\n        /* istanbul ignore next */\n        (this.getLiElement(metaData.file)).classList.add(RESTRICT_RETRY);\n    };\n    // eslint-disable-next-line @typescript-eslint/no-unused-vars\n    Uploader.prototype.chunkUploadInProgress = function (e, metaData, custom) {\n        var _this = this;\n        if (metaData.file.statusCode === '4') {\n            return;\n        }\n        if (metaData.file.statusCode !== '4' && metaData.file.statusCode !== '5') {\n            metaData.file.statusCode = '3';\n            metaData.file.status = this.localizedTexts('inProgress');\n        }\n        this.updateMetaData(metaData);\n        var liElement = this.getLiElement(metaData.file);\n        if (isNullOrUndefined(liElement)) {\n            return;\n        }\n        var retryElement = liElement.querySelector('.' + RETRY_ICON);\n        if (!isNullOrUndefined(retryElement)) {\n            retryElement.classList.add(PAUSE_UPLOAD);\n            retryElement.setAttribute('title', this.localizedTexts('pause'));\n            retryElement.classList.remove(RETRY_ICON);\n        }\n        if (!isNullOrUndefined(liElement)) {\n            if (!(liElement.querySelectorAll('.' + PROGRESS_WRAPPER).length > 0)) {\n                var statusElement = liElement.querySelector('.' + STATUS);\n                if (isNullOrUndefined(this.template)) {\n                    statusElement.classList.add(UPLOAD_INPROGRESS);\n                    statusElement.classList.remove(UPLOAD_FAILED);\n                    this.createProgressBar(liElement);\n                    this.updateProgressBarClasses(liElement, UPLOAD_INPROGRESS);\n                }\n                var clearIcon = liElement.querySelector('.' + REMOVE_ICON) ? liElement.querySelector('.' + REMOVE_ICON) :\n                    liElement.querySelector('.' + DELETE_ICON);\n                if (!isNullOrUndefined(clearIcon)) {\n                    clearIcon.classList.add(ABORT_ICON);\n                    clearIcon.setAttribute('title', this.localizedTexts('abort'));\n                    clearIcon.classList.remove(REMOVE_ICON);\n                }\n            }\n            if (!isNaN(Math.round((e.loaded / e.total) * 100)) && isNullOrUndefined(this.template) && metaData.file.statusCode !== '4') {\n                var progressVal = void 0;\n                var totalChunks = Math.ceil(metaData.file.size / this.asyncSettings.chunkSize) - 1;\n                if (this.asyncSettings.chunkSize && totalChunks) {\n                    progressVal = Math.round(metaData.chunkIndex / totalChunks * 100);\n                    this.changeProgressValue(liElement, progressVal.toString() + '%');\n                }\n            }\n            if (metaData.chunkIndex === 0) {\n                this.checkActionButtonStatus();\n            }\n        }\n        if (isNullOrUndefined(liElement.querySelector('.' + PAUSE_UPLOAD)) && isNullOrUndefined(this.template)\n            && isNullOrUndefined(liElement.querySelector('.' + DELETE_ICON))) {\n            this.pauseButton = this.createElement('span', { className: 'e-icons e-file-pause-btn', attrs: { 'tabindex': this.btnTabIndex } });\n            if (this.browserName === 'msie') {\n                this.pauseButton.classList.add('e-msie');\n            }\n            var abortIcon = liElement.querySelector('.' + ABORT_ICON);\n            abortIcon.parentElement.insertBefore(this.pauseButton, abortIcon);\n            this.pauseButton.setAttribute('title', this.localizedTexts('pause'));\n            this.pauseButton.addEventListener('click', function (e) {\n                _this.checkPausePlayAction(e);\n            }, false);\n        }\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * It is used to convert bytes value into kilobytes or megabytes depending on the size based\n     * on [binary prefix](https://en.wikipedia.org/wiki/Binary_prefix).\n     *\n     * @param { number } bytes - Specifies the file size in bytes.\n     * @returns {string}\n     */\n    Uploader.prototype.bytesToSize = function (bytes) {\n        var i = -1;\n        if (!bytes) {\n            return '0.0 KB';\n        }\n        do {\n            bytes = bytes / 1024;\n            i++;\n        } while (bytes > 99);\n        if (i >= 2) {\n            bytes = bytes * 1024;\n            i = 1;\n        }\n        return Math.max(bytes, 0).toFixed(1) + ' ' + ['KB', 'MB'][i];\n    };\n    /**\n     * Allows you to sort the file data alphabetically based on its file name clearly.\n     *\n     * @param { FileList } filesData - specifies the files data for upload.\n     * @returns {File[]}\n     */\n    /* istanbul ignore next */\n    Uploader.prototype.sortFileList = function (filesData) {\n        filesData = filesData ? filesData : this.sortFilesList;\n        var files = filesData;\n        var fileNames = [];\n        for (var i = 0; i < files.length; i++) {\n            fileNames.push(files[i].name);\n        }\n        var sortedFileNames = fileNames.sort();\n        var sortedFilesData = [];\n        for (var _i = 0, sortedFileNames_1 = sortedFileNames; _i < sortedFileNames_1.length; _i++) {\n            var name_3 = sortedFileNames_1[_i];\n            for (var i = 0; i < files.length; i++) {\n                if (name_3 === files[i].name) {\n                    sortedFilesData.push(files[i]);\n                }\n            }\n        }\n        return sortedFilesData;\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Removes the component from the DOM and detaches all its related event handlers. Also it removes the attributes and classes.\n     *\n     * @method destroy\n     * @returns {void}\n     */\n    Uploader.prototype.destroy = function () {\n        this.element.value = null;\n        this.clearTemplate();\n        this.clearAll();\n        this.unWireEvents();\n        this.unBindDropEvents();\n        if (this.multiple) {\n            this.element.removeAttribute('multiple');\n        }\n        if (!this.enabled) {\n            this.element.removeAttribute('disabled');\n        }\n        this.element.removeAttribute('accept');\n        this.setInitialAttributes();\n        var attributes = ['aria-label', 'directory', 'webkitdirectory', 'tabindex'];\n        for (var _i = 0, attributes_2 = attributes; _i < attributes_2.length; _i++) {\n            var key = attributes_2[_i];\n            this.element.removeAttribute(key);\n        }\n        if (!isNullOrUndefined(this.uploadWrapper)) {\n            this.uploadWrapper.parentElement.appendChild(this.element);\n            detach(this.uploadWrapper);\n        }\n        this.uploadWrapper = null;\n        this.uploadWrapper = null;\n        this.browseButton = null;\n        this.dropAreaWrapper = null;\n        this.dropZoneElement = null;\n        this.dropArea = null;\n        this.keyboardModule = null;\n        this.clearButton = null;\n        this.uploadButton = null;\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * Allows you to call the upload process manually by calling save URL action.\n     * To process the selected files (added in upload queue), pass an empty argument otherwise\n     * upload the specific file based on its argument.\n     *\n     * @param { FileInfo | FileInfo[] } files - Specifies the files data for upload.\n     * @param {boolean} custom - Specifies whether the uploader is rendered with custom file list.\n     * @returns {void}\n     */\n    Uploader.prototype.upload = function (files, custom) {\n        var _this = this;\n        files = files ? files : this.filesData;\n        if (this.sequentialUpload && (this.isFirstFileOnSelection || custom)) {\n            this.sequenceUpload(files);\n        }\n        else {\n            var uploadFiles_1 = this.getFilesInArray(files);\n            var eventArgs = {\n                customFormData: [],\n                currentRequest: null,\n                cancel: false\n            };\n            this.trigger('beforeUpload', eventArgs, function (eventArgs) {\n                if (!eventArgs.cancel) {\n                    _this.uploadFiles(uploadFiles_1, custom);\n                }\n            });\n        }\n    };\n    Uploader.prototype.getFilesInArray = function (files) {\n        var uploadFiles = [];\n        if (files instanceof Array) {\n            uploadFiles = files;\n        }\n        else {\n            uploadFiles.push(files);\n        }\n        return uploadFiles;\n    };\n    /* istanbul ignore next */\n    Uploader.prototype.serverReadFileBase64 = function (fileIndex, position, totalCount) {\n        var _this = this;\n        return new Promise(function (resolve, reject) {\n            var file = _this.fileStreams[fileIndex].rawFile;\n            try {\n                var reader = new FileReader();\n                reader.onload = (function (args) {\n                    return function () {\n                        try {\n                            var contents = args.result;\n                            var data = contents ? contents.split(';base64,')[1] : null;\n                            resolve(data);\n                        }\n                        catch (e) {\n                            reject(e);\n                        }\n                    };\n                })(reader);\n                reader.readAsDataURL(file.slice(position, position + totalCount));\n            }\n            catch (e) {\n                reject(e);\n            }\n        });\n    };\n    /* eslint-disable @typescript-eslint/no-unused-vars */\n    /* istanbul ignore next */\n    Uploader.prototype.uploadFileCount = function (ele) {\n        /* eslint-enable @typescript-eslint/no-unused-vars */\n        var files = this.filesData;\n        if (!files || files.length === 0) {\n            return -1;\n        }\n        var result = files.length;\n        return result;\n    };\n    /* eslint-disable @typescript-eslint/no-unused-vars */\n    /* istanbul ignore next */\n    Uploader.prototype.getFileRead = function (index, ele) {\n        /* eslint-enable @typescript-eslint/no-unused-vars */\n        var files = this.filesData;\n        if (!files || files.length === 0) {\n            return -1;\n        }\n        var file = files[index];\n        var fileCount = this.newFileRef++;\n        this.fileStreams[fileCount] = file;\n        return fileCount;\n    };\n    /* eslint-disable @typescript-eslint/no-unused-vars */\n    /* istanbul ignore next */\n    Uploader.prototype.getFileInfo = function (index, ele) {\n        /* eslint-enable @typescript-eslint/no-unused-vars */\n        var files = this.filesData;\n        if (!files || files.length === 0) {\n            return null;\n        }\n        var file = files[index];\n        if (!file) {\n            return null;\n        }\n        return this.filesData[index];\n    };\n    Uploader.prototype.uploadFiles = function (files, custom) {\n        var selectedFiles = [];\n        if (this.asyncSettings.saveUrl === '' || isNullOrUndefined(this.asyncSettings.saveUrl)) {\n            return;\n        }\n        if (!custom || isNullOrUndefined(custom)) {\n            if (!this.multiple) {\n                var file = [];\n                file.push(files[0]);\n                selectedFiles = this.filterfileList(file);\n            }\n            else {\n                selectedFiles = this.filterfileList(files);\n            }\n        }\n        else {\n            selectedFiles = files;\n        }\n        for (var i = 0; i < selectedFiles.length; i++) {\n            this.uploadFilesRequest(selectedFiles, i, custom);\n        }\n    };\n    Uploader.prototype.uploadFilesRequest = function (selectedFiles, i, custom) {\n        var _this = this;\n        var cloneFiles = [];\n        var chunkEnabled = this.checkChunkUpload();\n        var ajax = new Ajax(this.asyncSettings.saveUrl, 'POST', true, null);\n        ajax.emitError = false;\n        var getFileData;\n        var eventArgs = {\n            fileData: selectedFiles[i],\n            customFormData: [],\n            cancel: false\n        };\n        var formData = new FormData();\n        ajax.beforeSend = function (e) {\n            eventArgs.currentRequest = ajax.httpRequest;\n            _this.trigger('uploading', eventArgs, function (eventArgs) {\n                /* istanbul ignore next */\n                if (eventArgs.cancel) {\n                    _this.eventCancelByArgs(e, eventArgs, selectedFiles[i]);\n                }\n                _this.updateFormData(formData, eventArgs.customFormData);\n            });\n        };\n        if (selectedFiles[i].statusCode === '1') {\n            var name_4 = this.element.getAttribute('name');\n            formData.append(name_4, selectedFiles[i].rawFile, selectedFiles[i].name);\n            if (chunkEnabled && selectedFiles[i].size > this.asyncSettings.chunkSize) {\n                this.chunkUpload(selectedFiles[i], custom, i);\n            }\n            else {\n                ajax.onLoad = function (e) {\n                    if (eventArgs.cancel) {\n                        return {};\n                    }\n                    else {\n                        _this.uploadComplete(e, selectedFiles[i], custom);\n                        return {};\n                    }\n                };\n                ajax.onUploadProgress = function (e) {\n                    if (eventArgs.cancel) {\n                        return {};\n                    }\n                    else {\n                        _this.uploadInProgress(e, selectedFiles[i], custom, ajax);\n                        return {};\n                    }\n                };\n                /* istanbul ignore next */\n                ajax.onError = function (e) {\n                    _this.uploadFailed(e, selectedFiles[i]);\n                    return {};\n                };\n                ajax.send(formData);\n            }\n        }\n    };\n    Uploader.prototype.spliceFiles = function (liIndex) {\n        var liElement = this.fileList[liIndex];\n        var allFiles = this.getFilesData();\n        var nameElements = +liElement.getAttribute('data-files-count');\n        var startIndex = 0;\n        for (var i = 0; i < liIndex; i++) {\n            startIndex += (+this.fileList[i].getAttribute('data-files-count'));\n        }\n        var endIndex = (startIndex + nameElements) - 1;\n        for (var j = endIndex; j >= startIndex; j--) {\n            allFiles.splice(j, 1);\n        }\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-param */\n    /**\n     * Remove the uploaded file from server manually by calling the remove URL action.\n     * If you pass an empty argument to this method, the complete file list can be cleared,\n     * otherwise remove the specific file based on its argument (“file_data”).\n     *\n     * @param { FileInfo | FileInfo[] } fileData - specifies the files data to remove from file list/server.\n     * @param { boolean } customTemplate - Set true if the component rendering with customize template.\n     * @param { boolean } removeDirectly - Set true if files remove without removing event.\n     * @param { boolean } postRawFile - Set false, to post file name only to the remove action.\n     * @returns {void}\n     */\n    Uploader.prototype.remove = function (fileData, customTemplate, removeDirectly, postRawFile, args) {\n        var _this = this;\n        if (isNullOrUndefined(postRawFile)) {\n            postRawFile = true;\n        }\n        var eventArgs = {\n            event: args,\n            cancel: false,\n            filesData: [],\n            customFormData: [],\n            postRawFile: postRawFile,\n            currentRequest: null\n        };\n        var beforeEventArgs = {\n            cancel: false,\n            customFormData: [],\n            currentRequest: null\n        };\n        this.trigger('beforeRemove', beforeEventArgs, function (beforeEventArgs) {\n            if (!beforeEventArgs.cancel) {\n                if (_this.isFormUpload()) {\n                    eventArgs.filesData = fileData;\n                    _this.trigger('removing', eventArgs, function (eventArgs) {\n                        if (!eventArgs.cancel) {\n                            var removingFiles = _this.getFilesInArray(fileData);\n                            var isLiRemoved = false;\n                            var liIndex = void 0;\n                            for (var _i = 0, removingFiles_1 = removingFiles; _i < removingFiles_1.length; _i++) {\n                                var data = removingFiles_1[_i];\n                                if (!isLiRemoved) {\n                                    liIndex = _this.fileList.indexOf(data.list);\n                                }\n                                if (liIndex > -1) {\n                                    var inputElement = !isNullOrUndefined(data.input) ? data.input : null;\n                                    if (inputElement) {\n                                        detach(inputElement);\n                                    }\n                                    _this.spliceFiles(liIndex);\n                                    detach(_this.fileList[liIndex]);\n                                    _this.fileList.splice(liIndex, 1);\n                                    isLiRemoved = true;\n                                    liIndex = -1;\n                                }\n                            }\n                        }\n                    });\n                }\n                else if (_this.isForm && (isNullOrUndefined(_this.asyncSettings.removeUrl) || _this.asyncSettings.removeUrl === '')) {\n                    eventArgs.filesData = _this.getFilesData();\n                    _this.trigger('removing', eventArgs, function (eventArgs) {\n                        if (!eventArgs.cancel) {\n                            _this.clearAll();\n                        }\n                    });\n                }\n                else {\n                    var removeFiles = [];\n                    fileData = !isNullOrUndefined(fileData) ? fileData : _this.filesData;\n                    if (fileData instanceof Array) {\n                        removeFiles = fileData;\n                    }\n                    else {\n                        removeFiles.push(fileData);\n                    }\n                    eventArgs.filesData = removeFiles;\n                    var removeUrl = _this.asyncSettings.removeUrl;\n                    var validUrl = (removeUrl === '' || isNullOrUndefined(removeUrl)) ? false : true;\n                    var _loop_5 = function (files) {\n                        var fileUploadedIndex = _this.uploadedFilesData.indexOf(files);\n                        if ((files.statusCode === '2' || files.statusCode === '4' || (files.statusCode === '0' &&\n                            fileUploadedIndex !== -1)) && validUrl) {\n                            _this.removeUploadedFile(files, eventArgs, removeDirectly, customTemplate);\n                        }\n                        else {\n                            if (!removeDirectly) {\n                                _this.trigger('removing', eventArgs, function (eventArgs) {\n                                    if (!eventArgs.cancel) {\n                                        _this.removeFilesData(files, customTemplate);\n                                    }\n                                });\n                            }\n                            else {\n                                _this.removeFilesData(files, customTemplate);\n                            }\n                        }\n                        if (args && !args.target.classList.contains(REMOVE_ICON)) {\n                            _this.checkActionComplete(false);\n                        }\n                    };\n                    for (var _i = 0, removeFiles_1 = removeFiles; _i < removeFiles_1.length; _i++) {\n                        var files = removeFiles_1[_i];\n                        _loop_5(files);\n                    }\n                }\n            }\n        });\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-param */\n    /**\n     * Clear all the file entries from list that can be uploaded files or added in upload queue.\n     *\n     * @returns {void}\n     */\n    Uploader.prototype.clearAll = function () {\n        var _this = this;\n        if (isNullOrUndefined(this.listParent)) {\n            if (this.browserName !== 'msie') {\n                this.element.value = '';\n            }\n            this.filesData = [];\n            return;\n        }\n        var eventArgs = {\n            cancel: false,\n            filesData: this.filesData\n        };\n        this.trigger('clearing', eventArgs, function (eventArgs) {\n            if (!eventArgs.cancel) {\n                _this.clearData();\n                _this.actionCompleteCount = 0;\n                _this.count = -1;\n            }\n        });\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Get the data of files which are shown in file list.\n     *\n     * @param { number } index - specifies the file list item(li) index.\n     * @returns {FileInfo[]}\n     */\n    Uploader.prototype.getFilesData = function (index) {\n        if (isNullOrUndefined(index)) {\n            return this.filesData;\n        }\n        else {\n            return this.getSelectedFiles(index);\n        }\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns-description */\n    /**\n     * Pauses the in-progress chunked upload based on the file data.\n     *\n     * @param { FileInfo | FileInfo[] } fileData - specifies the files data to pause from uploading.\n     * @param { boolean } custom - Set true if used custom UI.\n     * @returns {void}\n     */\n    Uploader.prototype.pause = function (fileData, custom) {\n        fileData = fileData ? fileData : this.filesData;\n        var fileDataFiles = this.getFilesInArray(fileData);\n        this.pauseUploading(fileDataFiles, custom);\n    };\n    Uploader.prototype.pauseUploading = function (fileData, custom) {\n        var files = this.getFiles(fileData);\n        for (var i = 0; i < files.length; i++) {\n            if (files[i].statusCode === '3') {\n                this.pauseUpload(this.getCurrentMetaData(files[i], null), null, custom);\n            }\n        }\n    };\n    Uploader.prototype.getFiles = function (fileData) {\n        var files = [];\n        if (!isNullOrUndefined(fileData) && !(fileData instanceof Array)) {\n            files.push(fileData);\n        }\n        else {\n            files = fileData;\n        }\n        return files;\n    };\n    /**\n     * Resumes the chunked upload that is previously paused based on the file data.\n     *\n     * @param { FileInfo | FileInfo[] } fileData - specifies the files data to resume the paused file.\n     * @param { boolean } custom - Set true if used custom UI.\n     * @returns {void}\n     */\n    Uploader.prototype.resume = function (fileData, custom) {\n        fileData = fileData ? fileData : this.filesData;\n        var fileDataFiles = this.getFilesInArray(fileData);\n        this.resumeFiles(fileDataFiles, custom);\n    };\n    Uploader.prototype.resumeFiles = function (fileData, custom) {\n        var files = this.getFiles(fileData);\n        for (var i = 0; i < files.length; i++) {\n            if (files[i].statusCode === '4') {\n                this.resumeUpload(this.getCurrentMetaData(files[i], null), null, custom);\n            }\n        }\n    };\n    /**\n     * Retries the canceled or failed file upload based on the file data.\n     *\n     * @param { FileInfo | FileInfo[] } fileData - specifies the files data to retry the canceled or failed file.\n     * @param { boolean } fromcanceledStage - Set true to retry from canceled stage and set false to retry from initial stage.\n     * @param {boolean} custom -Specifies whether the uploader is rendered with custom file list.\n     * @returns {void}\n     */\n    Uploader.prototype.retry = function (fileData, fromcanceledStage, custom) {\n        fileData = fileData ? fileData : this.filesData;\n        var fileDataFiles = this.getFilesInArray(fileData);\n        if (this.sequentialUpload && this.isFirstFileOnSelection) {\n            this.isFirstFileOnSelection = false;\n        }\n        this.retryFailedFiles(fileDataFiles, fromcanceledStage, custom);\n    };\n    Uploader.prototype.retryFailedFiles = function (fileData, fromcanceledStage, custom) {\n        var files = this.getFiles(fileData);\n        for (var i = 0; i < files.length; i++) {\n            if (files[i].statusCode === '5' || files[i].statusCode === '0') {\n                if (this.asyncSettings.chunkSize > 0 && this.getCurrentMetaData(files[i], null)) {\n                    this.retryUpload(this.getCurrentMetaData(files[i], null), fromcanceledStage);\n                }\n                else {\n                    var liElement = void 0;\n                    if (!custom) {\n                        liElement = this.fileList[this.filesData.indexOf(files[i])];\n                    }\n                    this.reloadcanceledFile(null, files[i], liElement, custom);\n                }\n            }\n        }\n    };\n    /**\n     * Stops the in-progress chunked upload based on the file data.\n     * When the file upload is canceled, the partially uploaded file is removed from server.\n     *\n     * @param { FileInfo | FileInfo[] } fileData - specifies the files data to cancel the progressing file.\n     * @returns {void}\n     */\n    Uploader.prototype.cancel = function (fileData) {\n        fileData = fileData ? fileData : this.filesData;\n        var cancelingFiles = this.getFilesInArray(fileData);\n        this.cancelUpload(cancelingFiles);\n    };\n    Uploader.prototype.cancelUpload = function (fileData) {\n        var files = this.getFiles(fileData);\n        if (this.asyncSettings.chunkSize > 0) {\n            for (var i = 0; i < files.length; i++) {\n                if (files[i].statusCode === '3') {\n                    var metaData = this.getCurrentMetaData(files[i], null);\n                    metaData.file.statusCode = '5';\n                    metaData.file.status = this.localizedTexts('fileUploadCancel');\n                    this.updateMetaData(metaData);\n                    this.showHideUploadSpinner(files[i]);\n                }\n            }\n        }\n        else {\n            for (var i = 0; i < files.length; i++) {\n                if (files[i].statusCode === '3') {\n                    files[i].statusCode = '5';\n                    files[i].status = this.localizedTexts('fileUploadCancel');\n                    this.showHideUploadSpinner(files[i]);\n                }\n            }\n        }\n    };\n    Uploader.prototype.showHideUploadSpinner = function (files) {\n        var liElement = this.getLiElement(files);\n        if (!isNullOrUndefined(liElement) && isNullOrUndefined(this.template)) {\n            var spinnerTarget = liElement.querySelector('.' + ABORT_ICON);\n            createSpinner({ target: spinnerTarget, width: '20px' });\n            showSpinner(spinnerTarget);\n        }\n    };\n    __decorate([\n        Complex({ saveUrl: '', removeUrl: '' }, AsyncSettings)\n    ], Uploader.prototype, \"asyncSettings\", void 0);\n    __decorate([\n        Property(false)\n    ], Uploader.prototype, \"sequentialUpload\", void 0);\n    __decorate([\n        Property({})\n    ], Uploader.prototype, \"htmlAttributes\", void 0);\n    __decorate([\n        Property('')\n    ], Uploader.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(true)\n    ], Uploader.prototype, \"enabled\", void 0);\n    __decorate([\n        Property(null)\n    ], Uploader.prototype, \"template\", void 0);\n    __decorate([\n        Property(true)\n    ], Uploader.prototype, \"multiple\", void 0);\n    __decorate([\n        Property(true)\n    ], Uploader.prototype, \"autoUpload\", void 0);\n    __decorate([\n        Property(true)\n    ], Uploader.prototype, \"enableHtmlSanitizer\", void 0);\n    __decorate([\n        Complex({}, ButtonsProps)\n    ], Uploader.prototype, \"buttons\", void 0);\n    __decorate([\n        Property('')\n    ], Uploader.prototype, \"allowedExtensions\", void 0);\n    __decorate([\n        Property(0)\n    ], Uploader.prototype, \"minFileSize\", void 0);\n    __decorate([\n        Property(30000000)\n    ], Uploader.prototype, \"maxFileSize\", void 0);\n    __decorate([\n        Property(null)\n    ], Uploader.prototype, \"dropArea\", void 0);\n    __decorate([\n        Collection([{}], FilesProp)\n    ], Uploader.prototype, \"files\", void 0);\n    __decorate([\n        Property(true)\n    ], Uploader.prototype, \"showFileList\", void 0);\n    __decorate([\n        Property(false)\n    ], Uploader.prototype, \"directoryUpload\", void 0);\n    __decorate([\n        Property('Default')\n    ], Uploader.prototype, \"dropEffect\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"actionComplete\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"rendering\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"beforeUpload\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"fileListRendering\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"selected\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"uploading\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"success\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"failure\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"removing\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"beforeRemove\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"clearing\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"progress\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"change\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"chunkSuccess\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"chunkFailure\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"chunkUploading\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"canceling\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"pausing\", void 0);\n    __decorate([\n        Event()\n    ], Uploader.prototype, \"resuming\", void 0);\n    Uploader = __decorate([\n        NotifyPropertyChanges\n    ], Uploader);\n    return Uploader;\n}(Component));\nexport { Uploader };\n/* eslint-enable @typescript-eslint/no-explicit-any */\n","import { gh, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined } from '@syncfusion/ej2-base';\nexport var FilesDirective = vueDefineComponent({\n    inject: { custom: { default: null } },\n    render: function (createElement) {\n        if (!isExecute) {\n            var h = !isExecute ? gh : createElement;\n            var slots = null;\n            if (!isNullOrUndefined(this.$slots.default)) {\n                slots = !isExecute ? this.$slots.default() : this.$slots.default;\n            }\n            return h('div', { class: 'e-directive' }, slots);\n        }\n        return;\n    },\n    updated: function () {\n        if (!isExecute && this.custom) {\n            this.custom();\n        }\n    },\n    methods: {\n        getTag: function () {\n            return 'e-files';\n        }\n    }\n});\nexport var FilesPlugin = {\n    name: 'e-files',\n    install: function (Vue) {\n        Vue.component(FilesPlugin.name, FilesDirective);\n    }\n};\n/**\n * 'files' directive represent a file of vue uploader\n * It must be contained in a Uploader component(`ejs-uploader`).\n * ```html\n * <ejs-uploader id='fileupload' v-bind:multiple='true'>\n *   <e-files>\n *    <e-file name='Java' size=23000 type='pdf'></e-file>\n *    <e-file name='C++' size=30000 type='.docx'></e-file>\n *   </e-files>\n * </ejs-uploader>\n * ```\n */\nexport var UploadedFilesDirective = vueDefineComponent({\n    render: function () {\n        return;\n    },\n    methods: {\n        getTag: function () {\n            return 'e-uploadedfiles';\n        }\n    }\n});\nexport var UploadedFilesPlugin = {\n    name: 'e-uploadedfiles',\n    install: function (Vue) {\n        Vue.component(UploadedFilesPlugin.name, UploadedFilesDirective);\n    }\n};\n","import { ComponentBase, gh, getProps, isExecute, vueDefineComponent } from '@syncfusion/ej2-vue-base';\nimport { isNullOrUndefined, getValue } from '@syncfusion/ej2-base';\nimport { Uploader } from '@syncfusion/ej2-inputs';\nimport { FilesDirective, UploadedFilesDirective, FilesPlugin, UploadedFilesPlugin } from './files.directive';\nexport var properties = ['isLazyUpdate', 'plugins', 'allowedExtensions', 'asyncSettings', 'autoUpload', 'buttons', 'cssClass', 'directoryUpload', 'dropArea', 'dropEffect', 'enableHtmlSanitizer', 'enablePersistence', 'enableRtl', 'enabled', 'files', 'htmlAttributes', 'locale', 'maxFileSize', 'minFileSize', 'multiple', 'sequentialUpload', 'showFileList', 'template', 'actionComplete', 'beforeRemove', 'beforeUpload', 'canceling', 'change', 'chunkFailure', 'chunkSuccess', 'chunkUploading', 'clearing', 'created', 'failure', 'fileListRendering', 'pausing', 'progress', 'removing', 'rendering', 'resuming', 'selected', 'success', 'uploading'];\nexport var modelProps = [];\nexport var testProp = getProps({ props: properties });\nexport var props = testProp[0], watch = testProp[1], emitProbs = Object.keys(watch);\nemitProbs.push('modelchanged', 'update:modelValue');\nfor (var _i = 0, modelProps_1 = modelProps; _i < modelProps_1.length; _i++) {\n    var props_1 = modelProps_1[_i];\n    emitProbs.push('update:' + props_1);\n}\n/**\n * Represents the Essential JS 2 VueJS Uploader Component\n * ```html\n * <ejs-uploader id='fileUpload' v-bind:multiple='true'></ejs-uploader>\n * ```\n */\nexport var UploaderComponent = vueDefineComponent({\n    name: 'UploaderComponent',\n    mixins: [ComponentBase],\n    props: props,\n    watch: watch,\n    emits: emitProbs,\n    provide: function () { return { custom: this.custom }; },\n    data: function () {\n        return {\n            ej2Instances: new Uploader({}),\n            propKeys: properties,\n            models: modelProps,\n            hasChildDirective: true,\n            hasInjectedModules: false,\n            tagMapper: { \"e-files\": \"e-uploadedfiles\" },\n            tagNameMapper: {},\n            isVue3: !isExecute,\n            templateCollection: {},\n        };\n    },\n    created: function () {\n        this.bindProperties();\n        this.ej2Instances._setProperties = this.ej2Instances.setProperties;\n        this.ej2Instances.setProperties = this.setProperties;\n        this.ej2Instances.clearTemplate = this.clearTemplate;\n        this.updated = this.updated;\n    },\n    render: function (createElement) {\n        var h = !isExecute ? gh : createElement;\n        var slots = null;\n        if (!isNullOrUndefined(this.$slots.default)) {\n            slots = !isExecute ? this.$slots.default() : this.$slots.default;\n        }\n        return h('input', slots);\n    },\n    methods: {\n        clearTemplate: function (templateNames) {\n            if (!templateNames) {\n                templateNames = Object.keys(this.templateCollection || {});\n            }\n            if (templateNames.length && this.templateCollection) {\n                for (var _i = 0, templateNames_1 = templateNames; _i < templateNames_1.length; _i++) {\n                    var tempName = templateNames_1[_i];\n                    var elementCollection = this.templateCollection[tempName];\n                    if (elementCollection && elementCollection.length) {\n                        for (var _a = 0, elementCollection_1 = elementCollection; _a < elementCollection_1.length; _a++) {\n                            var ele = elementCollection_1[_a];\n                            var destroy = getValue('__vue__.$destroy', ele);\n                            if (destroy) {\n                                ele.__vue__.$destroy();\n                            }\n                            if (ele.innerHTML) {\n                                ele.innerHTML = '';\n                            }\n                        }\n                        delete this.templateCollection[tempName];\n                    }\n                }\n            }\n        },\n        setProperties: function (prop, muteOnChange) {\n            var _this = this;\n            if (this.isVue3) {\n                this.models = !this.models ? this.ej2Instances.referModels : this.models;\n            }\n            if (this.ej2Instances && this.ej2Instances._setProperties) {\n                this.ej2Instances._setProperties(prop, muteOnChange);\n            }\n            if (prop && this.models && this.models.length) {\n                Object.keys(prop).map(function (key) {\n                    _this.models.map(function (model) {\n                        if ((key === model) && !(/datasource/i.test(key))) {\n                            if (_this.isVue3) {\n                                _this.ej2Instances.vueInstance.$emit('update:' + key, prop[key]);\n                            }\n                            else {\n                                _this.$emit('update:' + key, prop[key]);\n                                _this.$emit('modelchanged', prop[key]);\n                            }\n                        }\n                    });\n                });\n            }\n        },\n        custom: function () {\n            this.updated();\n        },\n        bytesToSize: function (bytes) {\n            return this.ej2Instances.bytesToSize(bytes);\n        },\n        cancel: function (fileData) {\n            return this.ej2Instances.cancel(fileData);\n        },\n        clearAll: function () {\n            return this.ej2Instances.clearAll();\n        },\n        createFileList: function (fileData) {\n            return this.ej2Instances.createFileList(fileData);\n        },\n        getFilesData: function (index) {\n            return this.ej2Instances.getFilesData(index);\n        },\n        pause: function (fileData, custom) {\n            return this.ej2Instances.pause(fileData, custom);\n        },\n        remove: function (fileData, customTemplate, removeDirectly, postRawFile, args) {\n            return this.ej2Instances.remove(fileData, customTemplate, removeDirectly, postRawFile, args);\n        },\n        resume: function (fileData, custom) {\n            return this.ej2Instances.resume(fileData, custom);\n        },\n        retry: function (fileData, fromcanceledStage, custom) {\n            return this.ej2Instances.retry(fileData, fromcanceledStage, custom);\n        },\n        sortFileList: function (filesData) {\n            return this.ej2Instances.sortFileList(filesData);\n        },\n        traverseFileTree: function (item, event) {\n            return this.ej2Instances.traverseFileTree(item, event);\n        },\n        upload: function (files, custom) {\n            return this.ej2Instances.upload(files, custom);\n        },\n    }\n});\nexport var UploaderPlugin = {\n    name: 'ejs-uploader',\n    install: function (Vue) {\n        Vue.component(UploaderPlugin.name, UploaderComponent);\n        Vue.component(UploadedFilesPlugin.name, UploadedFilesDirective);\n        Vue.component(FilesPlugin.name, FilesDirective);\n    }\n};\n","//! moment.js locale configuration\n//! locale : English (Ireland) [en-ie]\n//! author : Chris Cartlidge : https://github.com/chriscartlidge\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIe = moment.defineLocale('en-ie', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return enIe;\n\n})));\n","import { Browser } from '@syncfusion/ej2-base';\nimport { extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { closest, classList } from '@syncfusion/ej2-base';\nimport { ResponsiveDialogAction } from '../base/enum';\nimport { setCssInGridPopUp, getActualPropFromColl, isActionPrevent, iterateExtend, parentsUntil } from '../base/util';\nimport { addRemoveEventListener } from '../base/util';\nimport * as events from '../base/constant';\nimport { AriaService } from '../services/aria-service';\nimport * as literals from '../base/string-literals';\n/**\n *\n * The `Sort` module is used to handle sorting action.\n */\nvar Sort = /** @class */ (function () {\n    /**\n     * Constructor for Grid sorting module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @param {SortSettings} sortSettings - specifies the SortSettings\n     * @param {string[]} sortedColumns - specifies the string\n     * @param {ServiceLocator} locator - specifies the ServiceLocator\n     * @hidden\n     */\n    function Sort(parent, sortSettings, sortedColumns, locator) {\n        this.contentRefresh = true;\n        this.isModelChanged = true;\n        this.aria = new AriaService();\n        this.currentTarget = null;\n        this.parent = parent;\n        this.sortSettings = sortSettings;\n        this.sortedColumns = sortedColumns;\n        this.serviceLocator = locator;\n        this.focus = locator.getService('focus');\n        this.addEventListener();\n        this.setFullScreenDialog();\n    }\n    /**\n     * The function used to update sortSettings\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Sort.prototype.updateModel = function () {\n        var sortedColumn = { field: this.columnName, direction: this.direction };\n        var index;\n        var gCols = this.parent.groupSettings.columns;\n        var flag = false;\n        if (!this.isMultiSort) {\n            if (!gCols.length) {\n                this.sortSettings.columns = [sortedColumn];\n            }\n            else {\n                var sortedCols = [];\n                for (var i = 0, len = gCols.length; i < len; i++) {\n                    index = this.getSortedColsIndexByField(gCols[parseInt(i.toString(), 10)], sortedCols);\n                    if (this.columnName === gCols[parseInt(i.toString(), 10)]) {\n                        flag = true;\n                        sortedCols.push(sortedColumn);\n                    }\n                    else {\n                        var sCol = this.getSortColumnFromField(gCols[parseInt(i.toString(), 10)]);\n                        sortedCols.push({ field: sCol.field, direction: sCol.direction, isFromGroup: sCol.isFromGroup });\n                    }\n                }\n                if (!flag) {\n                    sortedCols.push(sortedColumn);\n                }\n                this.sortSettings.columns = sortedCols;\n            }\n        }\n        else {\n            index = this.getSortedColsIndexByField(this.columnName);\n            if (index > -1) {\n                this.sortSettings.columns.splice(index, 1);\n            }\n            this.sortSettings.columns.push(sortedColumn);\n            // eslint-disable-next-line no-self-assign\n            this.sortSettings.columns = this.sortSettings.columns;\n        }\n        this.parent.dataBind();\n        this.lastSortedCol = this.columnName;\n    };\n    /**\n     * The function used to trigger onActionComplete\n     *\n     * @param {NotifyArgs} e - specifies the NotifyArgs\n     * @returns {void}\n     * @hidden\n     */\n    Sort.prototype.onActionComplete = function (e) {\n        var args = !this.isRemove ? {\n            columnName: this.columnName, direction: this.direction, requestType: 'sorting', type: events.actionComplete\n        } : { requestType: 'sorting', type: events.actionComplete };\n        this.isRemove = false;\n        this.parent.trigger(events.actionComplete, extend(e, args));\n    };\n    /**\n     * Sorts a column with the given options.\n     *\n     * @param {string} columnName - Defines the column name to sort.\n     * @param {SortDirection} direction - Defines the direction of sorting field.\n     * @param {boolean} isMultiSort - Specifies whether the previously sorted columns are to be maintained.\n     * @returns {void}\n     */\n    Sort.prototype.sortColumn = function (columnName, direction, isMultiSort) {\n        var gObj = this.parent;\n        if (this.parent.getColumnByField(columnName).allowSorting === false || this.parent.isContextMenuOpen()) {\n            this.parent.log('action_disabled_column', { moduleName: this.getModuleName(), columnName: columnName });\n            return;\n        }\n        if (!gObj.allowMultiSorting) {\n            isMultiSort = gObj.allowMultiSorting;\n        }\n        if (this.isActionPrevent()) {\n            gObj.notify(events.preventBatch, {\n                instance: this, handler: this.sortColumn,\n                arg1: columnName, arg2: direction, arg3: isMultiSort\n            });\n            return;\n        }\n        this.backupSettings();\n        this.columnName = columnName;\n        this.direction = direction;\n        this.isMultiSort = isMultiSort;\n        this.removeSortIcons();\n        this.updateSortedCols(columnName, isMultiSort);\n        this.updateModel();\n    };\n    Sort.prototype.setFullScreenDialog = function () {\n        if (this.serviceLocator) {\n            this.serviceLocator.registerAdaptiveService(this, this.parent.enableAdaptiveUI, ResponsiveDialogAction.isSort);\n        }\n    };\n    Sort.prototype.backupSettings = function () {\n        this.lastSortedCols = iterateExtend(this.sortSettings.columns);\n        this.lastCols = this.sortedColumns;\n    };\n    Sort.prototype.restoreSettings = function () {\n        this.isModelChanged = false;\n        this.isMultiSort = true;\n        this.parent.setProperties({ sortSettings: { columns: this.lastSortedCols } }, true);\n        //this.parent.sortSettings.columns =  this.lastSortedCols;\n        this.sortedColumns = this.lastCols;\n        this.isModelChanged = true;\n    };\n    Sort.prototype.updateSortedCols = function (columnName, isMultiSort) {\n        if (!isMultiSort) {\n            if (this.parent.allowGrouping) {\n                for (var i = 0, len = this.sortedColumns.length; i < len; i++) {\n                    if (this.parent.groupSettings.columns.indexOf(this.sortedColumns[parseInt(i.toString(), 10)]) < 0) {\n                        this.sortedColumns.splice(i, 1);\n                        len--;\n                        i--;\n                    }\n                }\n            }\n            else {\n                this.sortedColumns.splice(0, this.sortedColumns.length);\n            }\n        }\n        if (this.sortedColumns.indexOf(columnName) < 0) {\n            this.sortedColumns.push(columnName);\n        }\n    };\n    /**\n     * @param {NotifyArgs} e - specifies the NotifyArgs\n     * @returns {void}\n     * @hidden\n     */\n    Sort.prototype.onPropertyChanged = function (e) {\n        if (e.module !== this.getModuleName()) {\n            return;\n        }\n        if (this.contentRefresh) {\n            var args = this.sortSettings.columns.length ? {\n                columnName: this.columnName, direction: this.direction, requestType: 'sorting',\n                type: events.actionBegin, target: this.currentTarget, cancel: false\n            } : {\n                requestType: 'sorting', type: events.actionBegin, cancel: false,\n                target: this.currentTarget\n            };\n            this.parent.notify(events.modelChanged, args);\n        }\n        this.refreshSortSettings();\n        this.removeSortIcons();\n        this.addSortIcons();\n    };\n    Sort.prototype.refreshSortSettings = function () {\n        this.sortedColumns.length = 0;\n        var sortColumns = this.sortSettings.columns;\n        for (var i = 0; i < sortColumns.length; i++) {\n            if (!sortColumns[parseInt(i.toString(), 10)].isFromGroup) {\n                this.sortedColumns.push(sortColumns[parseInt(i.toString(), 10)].field);\n            }\n        }\n    };\n    /**\n     * Clears all the sorted columns of the Grid.\n     *\n     * @returns {void}\n     */\n    Sort.prototype.clearSorting = function () {\n        var cols = getActualPropFromColl(this.sortSettings.columns);\n        if (this.isActionPrevent()) {\n            this.parent.notify(events.preventBatch, { instance: this, handler: this.clearSorting });\n            return;\n        }\n        for (var i = 0, len = cols.length; i < len; i++) {\n            this.removeSortColumn(cols[parseInt(i.toString(), 10)].field);\n        }\n    };\n    Sort.prototype.isActionPrevent = function () {\n        return isActionPrevent(this.parent);\n    };\n    /**\n     * Remove sorted column by field name.\n     *\n     * @param {string} field - Defines the column field name to remove sort.\n     * @returns {void}\n     * @hidden\n     */\n    Sort.prototype.removeSortColumn = function (field) {\n        var gObj = this.parent;\n        var cols = this.sortSettings.columns;\n        if (cols.length === 0 && this.sortedColumns.indexOf(field) < 0) {\n            return;\n        }\n        if (this.isActionPrevent()) {\n            this.parent.notify(events.preventBatch, { instance: this, handler: this.removeSortColumn, arg1: field });\n            return;\n        }\n        this.backupSettings();\n        this.removeSortIcons();\n        var args = { requestType: 'sorting', type: events.actionBegin, target: this.currentTarget };\n        for (var i = 0, len = cols.length; i < len; i++) {\n            if (cols[parseInt(i.toString(), 10)].field === field) {\n                if (gObj.allowGrouping && gObj.groupSettings.columns.indexOf(cols[parseInt(i.toString(), 10)].field) > -1) {\n                    continue;\n                }\n                this.sortedColumns.splice(this.sortedColumns.indexOf(cols[parseInt(i.toString(), 10)].field), 1);\n                cols.splice(i, 1);\n                this.isRemove = true;\n                if (this.isModelChanged) {\n                    this.parent.notify(events.modelChanged, args);\n                }\n                break;\n            }\n        }\n        if (!args.cancel) {\n            this.addSortIcons();\n        }\n    };\n    Sort.prototype.getSortedColsIndexByField = function (field, sortedColumns) {\n        var cols = sortedColumns ? sortedColumns : this.sortSettings.columns;\n        for (var i = 0, len = cols.length; i < len; i++) {\n            if (cols[parseInt(i.toString(), 10)].field === field) {\n                return i;\n            }\n        }\n        return -1;\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    Sort.prototype.getModuleName = function () {\n        return 'sort';\n    };\n    Sort.prototype.initialEnd = function () {\n        this.parent.off(events.contentReady, this.initialEnd);\n        if (this.parent.getColumns().length && this.sortSettings.columns.length) {\n            var gObj = this.parent;\n            this.contentRefresh = false;\n            this.isMultiSort = this.sortSettings.columns.length > 1;\n            for (var _i = 0, _a = gObj.sortSettings.columns.slice(); _i < _a.length; _i++) {\n                var col = _a[_i];\n                if (this.sortedColumns.indexOf(col.field) > -1) {\n                    this.sortColumn(col.field, col.direction, true);\n                }\n            }\n            this.isMultiSort = false;\n            this.contentRefresh = true;\n        }\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Sort.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.evtHandlers = [{ event: events.setFullScreenDialog, handler: this.setFullScreenDialog },\n            { event: events.renderResponsiveChangeAction, handler: this.renderResponsiveChangeAction },\n            { event: events.contentReady, handler: this.initialEnd },\n            { event: events.sortComplete, handler: this.onActionComplete },\n            { event: events.inBoundModelChanged, handler: this.onPropertyChanged },\n            { event: events.click, handler: this.clickHandler },\n            { event: events.headerRefreshed, handler: this.refreshSortIcons },\n            { event: events.keyPressed, handler: this.keyPressed },\n            { event: events.cancelBegin, handler: this.cancelBeginEvent },\n            { event: events.destroy, handler: this.destroy }];\n        addRemoveEventListener(this.parent, this.evtHandlers, true, this);\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Sort.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        addRemoveEventListener(this.parent, this.evtHandlers, false);\n    };\n    /**\n     * To destroy the sorting\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Sort.prototype.destroy = function () {\n        this.isModelChanged = false;\n        var gridElement = this.parent.element;\n        if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n            return;\n        }\n        if (this.parent.element.querySelector('.e-gridpopup').getElementsByClassName('e-sortdirect').length) {\n            this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n        }\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any\n        if (!this.parent.refreshing && (this.parent.isDestroyed || !this.parent.allowSorting)) {\n            this.clearSorting();\n        }\n        this.isModelChanged = true;\n        this.removeEventListener();\n    };\n    Sort.prototype.cancelBeginEvent = function (e) {\n        if (e.requestType === 'sorting') {\n            this.restoreSettings();\n            this.refreshSortIcons();\n            this.isMultiSort = true;\n        }\n    };\n    Sort.prototype.clickHandler = function (e) {\n        var gObj = this.parent;\n        this.currentTarget = null;\n        this.popUpClickHandler(e);\n        var target = closest(e.target, '.e-headercell');\n        if (target && !e.target.classList.contains('e-grptogglebtn') &&\n            !(target.classList.contains('e-resized')) &&\n            !e.target.classList.contains('e-rhandler') &&\n            !e.target.classList.contains('e-columnmenu') &&\n            !e.target.classList.contains('e-filtermenudiv') &&\n            !parentsUntil(e.target, 'e-stackedheadercell') &&\n            !(gObj.allowSelection && gObj.selectionSettings.allowColumnSelection &&\n                e.target.classList.contains('e-headercell'))) {\n            var gObj_1 = this.parent;\n            var colObj = gObj_1.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n            if (colObj.type !== 'checkbox') {\n                this.initiateSort(target, e, colObj);\n                if (Browser.isDevice) {\n                    this.showPopUp(e);\n                }\n            }\n        }\n        if (target) {\n            target.classList.remove('e-resized');\n        }\n        if (parentsUntil(e.target, 'e-excel-ascending') ||\n            parentsUntil(e.target, 'e-excel-descending')) {\n            var colUid = closest(e.target, '.e-filter-popup').getAttribute('uid');\n            var direction = isNullOrUndefined(parentsUntil(e.target, 'e-excel-descending')) ?\n                'Ascending' : 'Descending';\n            this.sortColumn(gObj.getColumnByUid(colUid).field, direction, false);\n        }\n    };\n    Sort.prototype.keyPressed = function (e) {\n        var ele = e.target;\n        if (!this.parent.isEdit && (e.action === 'enter' || e.action === 'ctrlEnter' || e.action === 'shiftEnter')\n            && closest(ele, '.e-headercell')) {\n            var target = this.focus.getFocusedElement();\n            if (isNullOrUndefined(target) || !target.classList.contains('e-headercell')\n                || !target.querySelector('.e-headercelldiv')) {\n                return;\n            }\n            var col = this.parent.getColumnByUid(target.querySelector('.e-headercelldiv').getAttribute('e-mappinguid'));\n            this.initiateSort(target, e, col);\n        }\n    };\n    Sort.prototype.initiateSort = function (target, e, column) {\n        var gObj = this.parent;\n        var field = column.field;\n        this.currentTarget = e.target;\n        var direction = !target.getElementsByClassName('e-ascending').length ? 'Ascending' :\n            'Descending';\n        this.isMultiSort = e.ctrlKey || this.enableSortMultiTouch ||\n            (navigator.userAgent.indexOf('Mac OS') !== -1 && e.metaKey);\n        if (e.shiftKey || (this.sortSettings.allowUnsort && target.getElementsByClassName('e-descending').length)\n            && !(gObj.groupSettings.columns.indexOf(field) > -1)) {\n            this.removeSortColumn(field);\n        }\n        else {\n            this.sortColumn(field, direction, this.isMultiSort);\n        }\n    };\n    Sort.prototype.showPopUp = function (e) {\n        var target = closest(e.target, '.e-headercell');\n        if (this.parent.allowMultiSorting && (!isNullOrUndefined(target) || this.parent.isContextMenuOpen())) {\n            setCssInGridPopUp(this.parent.element.querySelector('.e-gridpopup'), e, 'e-sortdirect e-icons e-icon-sortdirect' + (this.sortedColumns.length > 1 ? ' e-spanclicked' : ''));\n        }\n    };\n    Sort.prototype.popUpClickHandler = function (e) {\n        var target = e.target;\n        if (closest(target, '.e-headercell') || e.target.classList.contains(literals.rowCell) ||\n            closest(target, '.e-gridpopup')) {\n            if (target.classList.contains('e-sortdirect')) {\n                if (!target.classList.contains('e-spanclicked')) {\n                    target.classList.add('e-spanclicked');\n                    this.enableSortMultiTouch = true;\n                }\n                else {\n                    target.classList.remove('e-spanclicked');\n                    this.enableSortMultiTouch = false;\n                    this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n                }\n            }\n        }\n        else {\n            this.parent.element.querySelector('.e-gridpopup').style.display = 'none';\n        }\n    };\n    Sort.prototype.addSortIcons = function () {\n        var gObj = this.parent;\n        var header;\n        var filterElement;\n        var cols = this.sortSettings.columns;\n        var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n        for (var i = 0, len = cols.length; i < len; i++) {\n            header = gObj.getColumnHeaderByField(cols[parseInt(i.toString(), 10)].field);\n            if (fieldNames.indexOf(cols[parseInt(i.toString(), 10)].field) === -1 || isNullOrUndefined(header)) {\n                continue;\n            }\n            this.aria.setSort(header, (cols[parseInt(i.toString(), 10)].direction).toLowerCase());\n            if (cols.length > 1) {\n                header.querySelector('.e-headercelldiv').insertBefore(this.parent.createElement('span', { className: 'e-sortnumber', innerHTML: (i + 1).toString() }), header.querySelector('.e-headertext'));\n            }\n            filterElement = header.querySelector('.e-sortfilterdiv');\n            if (cols[parseInt(i.toString(), 10)].direction === 'Ascending') {\n                classList(filterElement, ['e-ascending', 'e-icon-ascending'], []);\n            }\n            else {\n                classList(filterElement, ['e-descending', 'e-icon-descending'], []);\n            }\n        }\n    };\n    Sort.prototype.removeSortIcons = function (position) {\n        var gObj = this.parent;\n        var header;\n        var cols = this.sortSettings.columns;\n        var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n        for (var i = position ? position : 0, len = !isNullOrUndefined(position) ? position + 1 : cols.length; i < len; i++) {\n            header = gObj.getColumnHeaderByField(cols[parseInt(i.toString(), 10)].field);\n            if (isNullOrUndefined(header) || (gObj.allowGrouping\n                && gObj.groupSettings.columns.indexOf(cols[parseInt(i.toString(), 10)].field) > -1\n                && !header.querySelector('.e-sortfilterdiv'))) {\n                continue;\n            }\n            if (fieldNames.indexOf(cols[parseInt(i.toString(), 10)].field) === -1) {\n                continue;\n            }\n            this.aria.setSort(header, 'none');\n            classList(header.querySelector('.e-sortfilterdiv'), [], ['e-descending', 'e-icon-descending', 'e-ascending', 'e-icon-ascending']);\n            if (header.querySelector('.e-sortnumber')) {\n                header.querySelector('.e-headercelldiv').removeChild(header.querySelector('.e-sortnumber'));\n            }\n        }\n    };\n    Sort.prototype.getSortColumnFromField = function (field) {\n        for (var i = 0, len = this.sortSettings.columns.length; i < len; i++) {\n            if (this.sortSettings.columns[parseInt(i.toString(), 10)].field === field) {\n                return this.sortSettings.columns[parseInt(i.toString(), 10)];\n            }\n        }\n        return false;\n    };\n    Sort.prototype.updateAriaAttr = function () {\n        var fieldNames = this.parent.getColumns().map(function (c) { return c.field; });\n        for (var _i = 0, _a = this.sortedColumns; _i < _a.length; _i++) {\n            var col = _a[_i];\n            if (fieldNames.indexOf(col) === -1) {\n                continue;\n            }\n            var header = this.parent.getColumnHeaderByField(col);\n            this.aria.setSort(header, this.getSortColumnFromField(col).direction);\n        }\n    };\n    Sort.prototype.refreshSortIcons = function () {\n        this.removeSortIcons();\n        this.isMultiSort = true;\n        this.removeSortIcons();\n        this.addSortIcons();\n        this.isMultiSort = false;\n        this.updateAriaAttr();\n    };\n    Sort.prototype.renderResponsiveChangeAction = function (args) {\n        this.responsiveDialogRenderer.action = args.action;\n    };\n    /**\n     * To show the responsive custom sort dialog\n     *\n     * @param {boolean} enable - specifes dialog open\n     * @returns {void}\n     * @hidden\n     */\n    Sort.prototype.showCustomSort = function (enable) {\n        this.responsiveDialogRenderer.isCustomDialog = enable;\n        this.responsiveDialogRenderer.showResponsiveDialog();\n    };\n    return Sort;\n}());\nexport { Sort };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, closest, Collection, Complex, attributes, detach, isNullOrUndefined, animationMode } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, ChildProperty, select, isVisible } from '@syncfusion/ej2-base';\nimport { KeyboardEvents, Browser, formatUnit, L10n } from '@syncfusion/ej2-base';\nimport { setStyleAttribute as setStyle, isNullOrUndefined as isNOU, selectAll, addClass, removeClass, remove } from '@syncfusion/ej2-base';\nimport { EventHandler, rippleEffect, Touch, compile, Animation } from '@syncfusion/ej2-base';\nimport { getRandomId, SanitizeHtmlHelper, Draggable } from '@syncfusion/ej2-base';\nimport { Toolbar } from '../toolbar/toolbar';\nvar CLS_TAB = 'e-tab';\nvar CLS_HEADER = 'e-tab-header';\nvar CLS_BLA_TEM = 'blazor-template';\nvar CLS_CONTENT = 'e-content';\nvar CLS_NEST = 'e-nested';\nvar CLS_ITEMS = 'e-items';\nvar CLS_ITEM = 'e-item';\nvar CLS_TEMPLATE = 'e-template';\nvar CLS_RTL = 'e-rtl';\nvar CLS_ACTIVE = 'e-active';\nvar CLS_DISABLE = 'e-disable';\nvar CLS_HIDDEN = 'e-hidden';\nvar CLS_FOCUS = 'e-focused';\nvar CLS_ICONS = 'e-icons';\nvar CLS_ICON = 'e-icon';\nvar CLS_ICON_TAB = 'e-icon-tab';\nvar CLS_ICON_CLOSE = 'e-close-icon';\nvar CLS_CLOSE_SHOW = 'e-close-show';\nvar CLS_TEXT = 'e-tab-text';\nvar CLS_INDICATOR = 'e-indicator';\nvar CLS_WRAP = 'e-tab-wrap';\nvar CLS_TEXT_WRAP = 'e-text-wrap';\nvar CLS_TAB_ICON = 'e-tab-icon';\nvar CLS_TB_ITEMS = 'e-toolbar-items';\nvar CLS_TB_ITEM = 'e-toolbar-item';\nvar CLS_TB_POP = 'e-toolbar-pop';\nvar CLS_TB_POPUP = 'e-toolbar-popup';\nvar CLS_HOR_NAV = 'e-hor-nav';\nvar CLS_POPUP_OPEN = 'e-popup-open';\nvar CLS_POPUP_CLOSE = 'e-popup-close';\nvar CLS_PROGRESS = 'e-progress';\nvar CLS_IGNORE = 'e-ignore';\nvar CLS_OVERLAY = 'e-overlay';\nvar CLS_HSCRCNT = 'e-hscroll-content';\nvar CLS_VSCRCNT = 'e-vscroll-content';\nvar CLS_VTAB = 'e-vertical-tab';\nvar CLS_VERTICAL = 'e-vertical';\nvar CLS_VLEFT = 'e-vertical-left';\nvar CLS_VRIGHT = 'e-vertical-right';\nvar CLS_HBOTTOM = 'e-horizontal-bottom';\nvar CLS_FILL = 'e-fill-mode';\nvar TABITEMPREFIX = 'tabitem_';\nvar CLS_REORDER_ACTIVE_ITEM = 'e-reorder-active-item';\n/**\n * Objects used for configuring the Tab selecting item action properties.\n */\nvar TabActionSettings = /** @class */ (function (_super) {\n    __extends(TabActionSettings, _super);\n    function TabActionSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('SlideLeftIn')\n    ], TabActionSettings.prototype, \"effect\", void 0);\n    __decorate([\n        Property(600)\n    ], TabActionSettings.prototype, \"duration\", void 0);\n    __decorate([\n        Property('ease')\n    ], TabActionSettings.prototype, \"easing\", void 0);\n    return TabActionSettings;\n}(ChildProperty));\nexport { TabActionSettings };\n/**\n * Objects used for configuring the Tab animation properties.\n */\nvar TabAnimationSettings = /** @class */ (function (_super) {\n    __extends(TabAnimationSettings, _super);\n    function TabAnimationSettings() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Complex({ effect: 'SlideLeftIn', duration: 600, easing: 'ease' }, TabActionSettings)\n    ], TabAnimationSettings.prototype, \"previous\", void 0);\n    __decorate([\n        Complex({ effect: 'SlideRightIn', duration: 600, easing: 'ease' }, TabActionSettings)\n    ], TabAnimationSettings.prototype, \"next\", void 0);\n    return TabAnimationSettings;\n}(ChildProperty));\nexport { TabAnimationSettings };\n/**\n * Objects used for configuring the Tab item header properties.\n */\nvar Header = /** @class */ (function (_super) {\n    __extends(Header, _super);\n    function Header() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Property('')\n    ], Header.prototype, \"text\", void 0);\n    __decorate([\n        Property('')\n    ], Header.prototype, \"iconCss\", void 0);\n    __decorate([\n        Property('left')\n    ], Header.prototype, \"iconPosition\", void 0);\n    return Header;\n}(ChildProperty));\nexport { Header };\n/**\n * An array of object that is used to configure the Tab.\n */\nvar TabItem = /** @class */ (function (_super) {\n    __extends(TabItem, _super);\n    function TabItem() {\n        return _super !== null && _super.apply(this, arguments) || this;\n    }\n    __decorate([\n        Complex({}, Header)\n    ], TabItem.prototype, \"header\", void 0);\n    __decorate([\n        Property(null)\n    ], TabItem.prototype, \"headerTemplate\", void 0);\n    __decorate([\n        Property('')\n    ], TabItem.prototype, \"content\", void 0);\n    __decorate([\n        Property('')\n    ], TabItem.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(false)\n    ], TabItem.prototype, \"disabled\", void 0);\n    __decorate([\n        Property(true)\n    ], TabItem.prototype, \"visible\", void 0);\n    __decorate([\n        Property()\n    ], TabItem.prototype, \"id\", void 0);\n    __decorate([\n        Property(-1)\n    ], TabItem.prototype, \"tabIndex\", void 0);\n    return TabItem;\n}(ChildProperty));\nexport { TabItem };\n/**\n * Tab is a content panel to show multiple contents in a single space, one at a time.\n * Each Tab item has an associated content, that will be displayed based on the active Tab header item.\n * ```html\n * <div id=\"tab\"></div>\n * <script>\n *   var tabObj = new Tab();\n *   tab.appendTo(\"#tab\");\n * </script>\n * ```\n */\nvar Tab = /** @class */ (function (_super) {\n    __extends(Tab, _super);\n    /**\n     * Initializes a new instance of the Tab class.\n     *\n     * @param {TabModel} options  - Specifies Tab model properties as options.\n     * @param {string | HTMLElement} element  - Specifies the element that is rendered as a Tab.\n     */\n    function Tab(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.show = {};\n        _this.hide = {};\n        _this.maxHeight = 0;\n        _this.title = 'Close';\n        _this.isInteracted = false;\n        _this.lastIndex = 0;\n        _this.isAdd = false;\n        _this.isIconAlone = false;\n        _this.draggableItems = [];\n        _this.resizeContext = _this.refreshActiveTabBorder.bind(_this);\n        /**\n         * Contains the keyboard configuration of the Tab.\n         */\n        _this.keyConfigs = {\n            tab: 'tab',\n            home: 'home',\n            end: 'end',\n            enter: 'enter',\n            space: 'space',\n            delete: 'delete',\n            moveLeft: 'leftarrow',\n            moveRight: 'rightarrow',\n            moveUp: 'uparrow',\n            moveDown: 'downarrow'\n        };\n        return _this;\n    }\n    /**\n     * Removes the component from the DOM and detaches all its related event handlers, attributes and classes.\n     *\n     * @returns {void}\n     */\n    Tab.prototype.destroy = function () {\n        if (this.isReact || this.isAngular) {\n            this.clearTemplate();\n        }\n        if (!isNOU(this.tbObj)) {\n            this.tbObj.destroy();\n            this.tbObj = null;\n        }\n        this.unWireEvents();\n        this.element.removeAttribute('aria-disabled');\n        this.expTemplateContent();\n        if (!this.isTemplate) {\n            while (this.element.firstElementChild) {\n                remove(this.element.firstElementChild);\n            }\n        }\n        else {\n            var cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n            this.element.classList.remove(CLS_TEMPLATE);\n            if (!isNOU(cntEle)) {\n                cntEle.innerHTML = this.cnt;\n            }\n        }\n        if (this.btnCls) {\n            this.btnCls = null;\n        }\n        this.hdrEle = null;\n        this.cntEle = null;\n        this.tbItems = null;\n        this.tbItem = null;\n        this.tbPop = null;\n        this.prevItem = null;\n        this.popEle = null;\n        this.bdrLine = null;\n        this.content = null;\n        this.dragItem = null;\n        this.cloneElement = null;\n        this.draggingItems = [];\n        if (this.draggableItems && this.draggableItems.length > 0) {\n            for (var i = 0; i < this.draggableItems.length; i++) {\n                this.draggableItems[i].destroy();\n                this.draggableItems[i] = null;\n            }\n            this.draggableItems = [];\n        }\n        _super.prototype.destroy.call(this);\n        this.trigger('destroyed');\n    };\n    /**\n     * Refresh the tab component\n     *\n     * @returns {void}\n     */\n    Tab.prototype.refresh = function () {\n        if (this.isReact) {\n            this.clearTemplate();\n        }\n        _super.prototype.refresh.call(this);\n        if (this.isReact) {\n            this.renderReactTemplates();\n        }\n    };\n    /**\n     * Initialize component\n     *\n     * @private\n     * @returns {void}\n     */\n    Tab.prototype.preRender = function () {\n        var nested = closest(this.element, '.' + CLS_CONTENT);\n        this.prevIndex = 0;\n        this.isNested = false;\n        this.isPopup = false;\n        this.initRender = true;\n        this.isSwiped = false;\n        this.itemIndexArray = [];\n        this.templateEle = [];\n        if (this.allowDragAndDrop) {\n            this.dragArea = !isNOU(this.dragArea) ? this.dragArea : '#' + this.element.id + ' ' + ('.' + CLS_HEADER);\n        }\n        if (!isNOU(nested)) {\n            nested.parentElement.classList.add(CLS_NEST);\n            this.isNested = true;\n        }\n        var name = Browser.info.name;\n        var css = (name === 'msie') ? 'e-ie' : (name === 'edge') ? 'e-edge' : (name === 'safari') ? 'e-safari' : '';\n        setStyle(this.element, { 'width': formatUnit(this.width), 'height': formatUnit(this.height) });\n        this.setCssClass(this.element, this.cssClass, true);\n        attributes(this.element, { 'aria-disabled': 'false' });\n        this.setCssClass(this.element, css, true);\n        this.updatePopAnimationConfig();\n    };\n    /**\n     * Initialize the component rendering\n     *\n     * @private\n     * @returns {void}\n     */\n    Tab.prototype.render = function () {\n        var _this = this;\n        this.btnCls = this.createElement('span', { className: CLS_ICONS + ' ' + CLS_ICON_CLOSE, attrs: { title: this.title } });\n        this.tabId = this.element.id.length > 0 ? ('-' + this.element.id) : getRandomId();\n        this.renderContainer();\n        this.wireEvents();\n        this.initRender = false;\n        if (this.isReact && this.portals && this.portals.length > 0) {\n            this.renderReactTemplates(function () {\n                if (!isNOU(_this.tbObj)) {\n                    _this.tbObj.refreshOverflow();\n                }\n                _this.refreshActiveBorder();\n            });\n        }\n    };\n    Tab.prototype.renderContainer = function () {\n        var ele = this.element;\n        this.items.forEach(function (item, index) {\n            if (isNOU(item.id) && !isNOU(item.setProperties)) {\n                item.setProperties({ id: TABITEMPREFIX + index.toString() }, true);\n            }\n        });\n        if (this.items.length > 0 && ele.children.length === 0) {\n            ele.appendChild(this.createElement('div', { className: CLS_CONTENT }));\n            this.setOrientation(this.headerPlacement, this.createElement('div', { className: CLS_HEADER }));\n            this.isTemplate = false;\n        }\n        else if (this.element.children.length > 0) {\n            this.isTemplate = true;\n            ele.classList.add(CLS_TEMPLATE);\n            var header = ele.querySelector('.' + CLS_HEADER);\n            if (header && this.headerPlacement === 'Bottom') {\n                this.setOrientation(this.headerPlacement, header);\n            }\n        }\n        if (!isNOU(select('.' + CLS_HEADER, this.element)) && !isNOU(select('.' + CLS_CONTENT, this.element))) {\n            this.renderHeader();\n            this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n            if (!isNOU(this.tbItems)) {\n                rippleEffect(this.tbItems, { selector: '.e-tab-wrap' });\n            }\n            this.renderContent();\n            if (selectAll('.' + CLS_TB_ITEM, this.element).length > 0) {\n                this.tbItems = select('.' + CLS_HEADER + ' .' + CLS_TB_ITEMS, this.element);\n                this.bdrLine = this.createElement('div', { className: CLS_INDICATOR + ' ' + CLS_HIDDEN + ' ' + CLS_IGNORE });\n                var scrCnt = select('.' + this.scrCntClass, this.tbItems);\n                if (!isNOU(scrCnt)) {\n                    scrCnt.insertBefore(this.bdrLine, scrCnt.firstChild);\n                }\n                else {\n                    this.tbItems.insertBefore(this.bdrLine, this.tbItems.firstChild);\n                }\n                this.setContentHeight(true);\n                this.select(this.selectedItem);\n            }\n            this.setRTL(this.enableRtl);\n        }\n    };\n    Tab.prototype.renderHeader = function () {\n        var _this = this;\n        var hdrPlace = this.headerPlacement;\n        var tabItems = [];\n        this.hdrEle = this.getTabHeader();\n        this.addVerticalClass();\n        if (!this.isTemplate) {\n            tabItems = this.parseObject(this.items, 0);\n        }\n        else {\n            if (this.element.children.length > 1 && this.element.children[1].classList.contains(CLS_HEADER)) {\n                this.setProperties({ headerPlacement: 'Bottom' }, true);\n            }\n            var count = this.hdrEle.children.length;\n            var hdrItems = [];\n            for (var i = 0; i < count; i++) {\n                hdrItems.push(this.hdrEle.children.item(i));\n            }\n            if (count > 0) {\n                var tabItems_1 = this.createElement('div', { className: CLS_ITEMS });\n                this.hdrEle.appendChild(tabItems_1);\n                hdrItems.forEach(function (item, index) {\n                    _this.lastIndex = index;\n                    var attr = {\n                        className: CLS_ITEM, id: CLS_ITEM + _this.tabId + '_' + index\n                    };\n                    var txt = _this.createElement('span', {\n                        className: CLS_TEXT, attrs: { 'role': 'presentation' }\n                    }).outerHTML;\n                    var cont = _this.createElement('div', {\n                        className: CLS_TEXT_WRAP, innerHTML: txt + _this.btnCls.outerHTML\n                    }).outerHTML;\n                    var wrap = _this.createElement('div', {\n                        className: CLS_WRAP, innerHTML: cont,\n                        attrs: { role: 'tab', tabIndex: '-1', 'aria-selected': 'false', 'aria-controls': CLS_CONTENT + _this.tabId + '_' + index, 'aria-disabled': 'false' }\n                    });\n                    wrap.querySelector('.' + CLS_TEXT).appendChild(item);\n                    tabItems_1.appendChild(_this.createElement('div', attr));\n                    selectAll('.' + CLS_ITEM, tabItems_1)[index].appendChild(wrap);\n                });\n            }\n        }\n        this.tbObj = new Toolbar({\n            width: (hdrPlace === 'Left' || hdrPlace === 'Right') ? 'auto' : '100%',\n            height: (hdrPlace === 'Left' || hdrPlace === 'Right') ? '100%' : 'auto',\n            overflowMode: this.overflowMode,\n            items: (tabItems.length !== 0) ? tabItems : [],\n            clicked: this.clickHandler.bind(this),\n            scrollStep: this.scrollStep,\n            enableHtmlSanitizer: this.enableHtmlSanitizer,\n            cssClass: this.cssClass\n        });\n        this.tbObj.isStringTemplate = true;\n        this.tbObj.createElement = this.createElement;\n        this.tbObj.appendTo(this.hdrEle);\n        attributes(this.hdrEle, { role: 'tablist' });\n        if (!isNOU(this.element.getAttribute('aria-label'))) {\n            this.hdrEle.setAttribute('aria-label', this.element.getAttribute('aria-label'));\n            this.element.removeAttribute('aria-label');\n        }\n        else if (!isNOU(this.element.getAttribute('aria-labelledby'))) {\n            this.hdrEle.setAttribute('aria-labelledby', this.element.getAttribute('aria-labelledby'));\n            this.element.removeAttribute('aria-labelledby');\n        }\n        this.setCloseButton(this.showCloseButton);\n        var toolbarHeader = this.tbObj.element.querySelector('.' + CLS_TB_ITEMS);\n        if (!isNOU(toolbarHeader)) {\n            if (isNOU(toolbarHeader.id) || toolbarHeader.id === '') {\n                toolbarHeader.id = this.element.id + '_' + 'tab_header_items';\n            }\n        }\n    };\n    Tab.prototype.renderContent = function () {\n        this.cntEle = select('.' + CLS_CONTENT, this.element);\n        var hdrItem = selectAll('.' + CLS_TB_ITEM, this.element);\n        if (this.isTemplate) {\n            this.cnt = (this.cntEle.children.length > 0) ? this.cntEle.innerHTML : '';\n            var contents = this.cntEle.children;\n            for (var i = 0; i < hdrItem.length; i++) {\n                if (contents.length - 1 >= i) {\n                    addClass([contents.item(i)], CLS_ITEM);\n                    attributes(contents.item(i), { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + this.tabId + '_' + i });\n                    contents.item(i).id = CLS_CONTENT + this.tabId + '_' + i;\n                }\n            }\n        }\n    };\n    Tab.prototype.reRenderItems = function () {\n        this.renderContainer();\n        if (!isNOU(this.cntEle)) {\n            this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n        }\n    };\n    Tab.prototype.parseObject = function (items, index) {\n        var _this = this;\n        var tbItems = Array.prototype.slice.call(selectAll('.e-tab-header .' + CLS_TB_ITEM, this.element));\n        var maxId = this.lastIndex;\n        if (!this.isReplace && tbItems.length > 0) {\n            var idList_1 = [];\n            tbItems.forEach(function (item) {\n                idList_1.push(_this.getIndexFromEle(item.id));\n            });\n            maxId = Math.max.apply(Math, idList_1);\n        }\n        var tItems = [];\n        var txtWrapEle;\n        var spliceArray = [];\n        var i = 0;\n        items.forEach(function (item, i) {\n            var pos = (isNOU(item.header) || isNOU(item.header.iconPosition)) ? '' : item.header.iconPosition;\n            var css = (isNOU(item.header) || isNOU(item.header.iconCss)) ? '' : item.header.iconCss;\n            if ((isNOU(item.headerTemplate)) && (isNOU(item.header) || isNOU(item.header.text) ||\n                ((item.header.text.length === 0)) && (css === ''))) {\n                spliceArray.push(i);\n                return;\n            }\n            var txt = item.headerTemplate || item.header.text;\n            if (typeof txt === 'string' && _this.enableHtmlSanitizer) {\n                txt = SanitizeHtmlHelper.sanitize(txt);\n            }\n            var itemIndex;\n            if (_this.isReplace && !isNOU(_this.tbId) && _this.tbId !== '') {\n                itemIndex = parseInt(_this.tbId.substring(_this.tbId.lastIndexOf('_') + 1), 10);\n                _this.tbId = '';\n            }\n            else {\n                itemIndex = index + i;\n            }\n            _this.lastIndex = ((tbItems.length === 0) ? i : ((_this.isReplace) ? (itemIndex) : (maxId + 1 + i)));\n            var disabled = (item.disabled) ? ' ' + CLS_DISABLE + ' ' + CLS_OVERLAY : '';\n            var hidden = (item.visible === false) ? ' ' + CLS_HIDDEN : '';\n            txtWrapEle = _this.createElement('div', { className: CLS_TEXT, attrs: { 'role': 'presentation' } });\n            var tHtml = ((txt instanceof Object) ? txt.outerHTML : txt);\n            var txtEmpty = (!isNOU(tHtml) && tHtml !== '');\n            if (!isNOU(txt.tagName)) {\n                txtWrapEle.appendChild(txt);\n            }\n            else {\n                _this.headerTextCompile(txtWrapEle, txt, i);\n            }\n            var tEle;\n            var icon = _this.createElement('span', {\n                className: CLS_ICONS + ' ' + CLS_TAB_ICON + ' ' + CLS_ICON + '-' + pos + ' ' + css\n            });\n            var tCont = _this.createElement('div', { className: CLS_TEXT_WRAP });\n            tCont.appendChild(txtWrapEle);\n            if ((txt !== '' && txt !== undefined) && css !== '') {\n                if ((pos === 'left' || pos === 'top')) {\n                    tCont.insertBefore(icon, tCont.firstElementChild);\n                }\n                else {\n                    tCont.appendChild(icon);\n                }\n                tEle = txtWrapEle;\n                _this.isIconAlone = false;\n            }\n            else {\n                tEle = ((css === '') ? txtWrapEle : icon);\n                if (tEle === icon) {\n                    detach(txtWrapEle);\n                    tCont.appendChild(icon);\n                    _this.isIconAlone = true;\n                }\n            }\n            var tabIndex = isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString();\n            var wrapAttrs = (item.disabled) ? {} : { tabIndex: tabIndex, 'data-tabindex': tabIndex, role: 'tab', 'aria-selected': 'false', 'aria-disabled': 'false' };\n            tCont.appendChild(_this.btnCls.cloneNode(true));\n            var wrap = _this.createElement('div', { className: CLS_WRAP, attrs: wrapAttrs });\n            wrap.appendChild(tCont);\n            if (_this.itemIndexArray instanceof Array) {\n                _this.itemIndexArray.splice((index + i), 0, CLS_ITEM + _this.tabId + '_' + _this.lastIndex);\n            }\n            var attrObj = {\n                id: CLS_ITEM + _this.tabId + '_' + _this.lastIndex, 'data-id': item.id\n            };\n            var tItem = { htmlAttributes: attrObj, template: wrap };\n            tItem.cssClass = ((item.cssClass !== undefined) ? item.cssClass : ' ') + ' ' + disabled + ' ' + hidden + ' '\n                + ((css !== '') ? 'e-i' + pos : '') + ' ' + ((!txtEmpty) ? CLS_ICON : '');\n            if (pos === 'top' || pos === 'bottom') {\n                _this.element.classList.add('e-vertical-icon');\n            }\n            tItems.push(tItem);\n            i++;\n        });\n        if (!this.isAdd) {\n            spliceArray.forEach(function (spliceItemIndex) {\n                _this.items.splice(spliceItemIndex, 1);\n            });\n        }\n        if (this.isIconAlone) {\n            this.element.classList.add(CLS_ICON_TAB);\n        }\n        else {\n            this.element.classList.remove(CLS_ICON_TAB);\n        }\n        return tItems;\n    };\n    Tab.prototype.removeActiveClass = function () {\n        var tabHeader = this.getTabHeader();\n        if (tabHeader) {\n            var tabItems = selectAll('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, tabHeader);\n            [].slice.call(tabItems).forEach(function (node) { return node.classList.remove(CLS_ACTIVE); });\n            [].slice.call(tabItems).forEach(function (node) { return node.firstElementChild.setAttribute('aria-selected', 'false'); });\n        }\n    };\n    Tab.prototype.checkPopupOverflow = function (ele) {\n        this.tbPop = select('.' + CLS_TB_POP, this.element);\n        var popIcon = select('.e-hor-nav', this.element);\n        var tbrItems = select('.' + CLS_TB_ITEMS, this.element);\n        var lastChild = tbrItems.lastChild;\n        var isOverflow = false;\n        if (!this.isVertical() && ((this.enableRtl && ((popIcon.offsetLeft + popIcon.offsetWidth) > tbrItems.offsetLeft))\n            || (!this.enableRtl && popIcon.offsetLeft < tbrItems.offsetWidth))) {\n            isOverflow = true;\n        }\n        else if (this.isVertical() && (popIcon.offsetTop < lastChild.offsetTop + lastChild.offsetHeight)) {\n            isOverflow = true;\n        }\n        if (isOverflow) {\n            ele.classList.add(CLS_TB_POPUP);\n            this.tbPop.insertBefore(ele, selectAll('.' + CLS_TB_POPUP, this.tbPop)[0]);\n        }\n        return true;\n    };\n    Tab.prototype.popupHandler = function (target) {\n        var ripEle = target.querySelector('.e-ripple-element');\n        if (!isNOU(ripEle)) {\n            ripEle.outerHTML = '';\n            target.querySelector('.' + CLS_WRAP).classList.remove('e-ripple');\n        }\n        this.tbItem = selectAll('.' + CLS_TB_ITEMS + ' .' + CLS_TB_ITEM, this.hdrEle);\n        var lastChild = this.tbItem[this.tbItem.length - 1];\n        if (this.tbItem.length !== 0) {\n            target.classList.remove(CLS_TB_POPUP);\n            target.removeAttribute('style');\n            this.tbItems.appendChild(target);\n            this.actEleId = target.id;\n            if (this.checkPopupOverflow(lastChild)) {\n                var prevEle = this.tbItems.lastChild.previousElementSibling;\n                this.checkPopupOverflow(prevEle);\n            }\n            this.isPopup = true;\n        }\n        return selectAll('.' + CLS_TB_ITEM, this.tbItems).length - 1;\n    };\n    Tab.prototype.setCloseButton = function (val) {\n        var trg = select('.' + CLS_HEADER, this.element);\n        if (val === true) {\n            trg.classList.add(CLS_CLOSE_SHOW);\n        }\n        else {\n            trg.classList.remove(CLS_CLOSE_SHOW);\n        }\n        this.tbObj.refreshOverflow();\n        this.refreshActiveTabBorder();\n    };\n    Tab.prototype.prevCtnAnimation = function (prev, current) {\n        var animation;\n        var checkRTL = this.enableRtl || this.element.classList.contains(CLS_RTL);\n        if (this.isPopup || prev <= current) {\n            if (this.animation.previous.effect === 'SlideLeftIn') {\n                animation = {\n                    name: 'SlideLeftOut',\n                    duration: this.animation.previous.duration, timingFunction: this.animation.previous.easing\n                };\n            }\n            else {\n                animation = null;\n            }\n        }\n        else {\n            if (this.animation.next.effect === 'SlideRightIn') {\n                animation = {\n                    name: 'SlideRightOut',\n                    duration: this.animation.next.duration, timingFunction: this.animation.next.easing\n                };\n            }\n            else {\n                animation = null;\n            }\n        }\n        return animation;\n    };\n    Tab.prototype.triggerPrevAnimation = function (oldCnt, prevIndex) {\n        var _this = this;\n        var animateObj = this.prevCtnAnimation(prevIndex, this.selectedItem);\n        if (!isNOU(animateObj)) {\n            animateObj.begin = function () {\n                setStyle(oldCnt, { 'position': 'absolute' });\n                oldCnt.classList.add(CLS_PROGRESS);\n                oldCnt.classList.add('e-view');\n            };\n            animateObj.end = function () {\n                oldCnt.style.display = 'none';\n                oldCnt.classList.remove(CLS_ACTIVE);\n                oldCnt.classList.remove(CLS_PROGRESS);\n                oldCnt.classList.remove('e-view');\n                setStyle(oldCnt, { 'display': '', 'position': '' });\n                if (oldCnt.childNodes.length === 0 && !_this.isTemplate) {\n                    detach(oldCnt);\n                }\n            };\n            new Animation(animateObj).animate(oldCnt);\n        }\n        else {\n            oldCnt.classList.remove(CLS_ACTIVE);\n        }\n    };\n    Tab.prototype.triggerAnimation = function (id, value) {\n        var _this = this;\n        var prevIndex = this.prevIndex;\n        var oldCnt;\n        var itemCollection = [].slice.call(this.element.querySelector('.' + CLS_CONTENT).children);\n        itemCollection.forEach(function (item) {\n            if (item.id === _this.prevActiveEle) {\n                oldCnt = item;\n            }\n        });\n        var prevEle = this.tbItem[prevIndex];\n        var newCnt = this.getTrgContent(this.cntEle, this.extIndex(id));\n        if (isNOU(oldCnt) && !isNOU(prevEle)) {\n            var idNo = this.extIndex(prevEle.id);\n            oldCnt = this.getTrgContent(this.cntEle, idNo);\n        }\n        if (!isNOU(newCnt)) {\n            this.prevActiveEle = newCnt.id;\n        }\n        var isPrevent = isNOU(this.animation) || isNOU(this.animation.next.effect) || isNOU(this.animation.previous.effect)\n            || this.animation.previous.effect === 'None' || this.animation.next.effect === 'None';\n        if (this.initRender || value === false || isPrevent) {\n            if (oldCnt && oldCnt !== newCnt) {\n                oldCnt.classList.remove(CLS_ACTIVE);\n            }\n            return;\n        }\n        var cnt = select('.' + CLS_CONTENT, this.element);\n        var animateObj;\n        if (this.prevIndex > this.selectedItem && !this.isPopup) {\n            var openEff = this.animation.previous.effect;\n            animateObj = {\n                name: ((openEff === 'None') ? '' : ((openEff !== 'SlideLeftIn') ? openEff : 'SlideLeftIn')),\n                duration: (this.animation.previous.duration === 0 && animationMode === 'Enable') ? 600 : this.animation.previous.duration,\n                timingFunction: this.animation.previous.easing\n            };\n        }\n        else if (this.isPopup || this.prevIndex < this.selectedItem || this.prevIndex === this.selectedItem) {\n            var clsEff = this.animation.next.effect;\n            animateObj = {\n                name: ((clsEff === 'None') ? '' : ((clsEff !== 'SlideRightIn') ? clsEff : 'SlideRightIn')),\n                duration: (this.animation.next.duration === 0 && animationMode === 'Enable') ? 600 : this.animation.next.duration,\n                timingFunction: this.animation.next.easing\n            };\n        }\n        animateObj.progress = function () {\n            cnt.classList.add(CLS_PROGRESS);\n            _this.setActiveBorder();\n        };\n        animateObj.end = function () {\n            cnt.classList.remove(CLS_PROGRESS);\n            newCnt.classList.add(CLS_ACTIVE);\n        };\n        if (!this.initRender && !isNOU(oldCnt)) {\n            this.triggerPrevAnimation(oldCnt, prevIndex);\n        }\n        this.isPopup = false;\n        if (animateObj.name === '') {\n            newCnt.classList.add(CLS_ACTIVE);\n        }\n        else {\n            new Animation(animateObj).animate(newCnt);\n        }\n    };\n    Tab.prototype.keyPressed = function (trg) {\n        var trgParent = closest(trg, '.' + CLS_HEADER + ' .' + CLS_TB_ITEM);\n        var trgIndex = this.getEleIndex(trgParent);\n        if (!isNOU(this.popEle) && trg.classList.contains('e-hor-nav')) {\n            (this.popEle.classList.contains(CLS_POPUP_OPEN)) ? this.popObj.hide(this.hide) : this.popObj.show(this.show);\n        }\n        else if (trg.classList.contains('e-scroll-nav')) {\n            trg.click();\n        }\n        else {\n            if (!isNOU(trgParent) && trgParent.classList.contains(CLS_ACTIVE) === false) {\n                this.selectTab(trgIndex, null, true);\n                if (!isNOU(this.popEle)) {\n                    this.popObj.hide(this.hide);\n                }\n            }\n        }\n    };\n    Tab.prototype.getTabHeader = function () {\n        if (isNOU(this.element)) {\n            return undefined;\n        }\n        var headers = [].slice.call(this.element.children).filter(function (e) { return e.classList.contains(CLS_HEADER); });\n        if (headers.length > 0) {\n            return headers[0];\n        }\n        else {\n            var wrap = [].slice.call(this.element.children).filter(function (e) { return !e.classList.contains(CLS_BLA_TEM); })[0];\n            if (!wrap) {\n                return undefined;\n            }\n            return [].slice.call(wrap.children).filter(function (e) { return e.classList.contains(CLS_HEADER); })[0];\n        }\n    };\n    Tab.prototype.getEleIndex = function (item) {\n        return Array.prototype.indexOf.call(selectAll('.' + CLS_TB_ITEM, this.getTabHeader()), item);\n    };\n    Tab.prototype.extIndex = function (id) {\n        return id.replace(CLS_ITEM + this.tabId + '_', '');\n    };\n    Tab.prototype.expTemplateContent = function () {\n        var _this = this;\n        this.templateEle.forEach(function (eleStr) {\n            if (!isNOU(_this.element.querySelector(eleStr))) {\n                document.body.appendChild(_this.element.querySelector(eleStr)).style.display = 'none';\n            }\n        });\n    };\n    Tab.prototype.templateCompile = function (ele, cnt, index) {\n        var tempEle = this.createElement('div');\n        this.compileElement(tempEle, cnt, 'content', index);\n        if (tempEle.childNodes.length !== 0) {\n            ele.appendChild(tempEle);\n        }\n        if (this.isReact) {\n            this.renderReactTemplates();\n        }\n    };\n    Tab.prototype.compileElement = function (ele, val, prop, index) {\n        var templateFn;\n        if (typeof val === 'string') {\n            val = val.trim();\n            if (this.isVue) {\n                templateFn = compile(SanitizeHtmlHelper.sanitize(val));\n            }\n            else {\n                ele.innerHTML = SanitizeHtmlHelper.sanitize(val);\n            }\n        }\n        else {\n            templateFn = compile(val);\n        }\n        var templateFUN;\n        if (!isNOU(templateFn)) {\n            templateFUN = templateFn({}, this, prop);\n        }\n        if (!isNOU(templateFn) && templateFUN.length > 0) {\n            [].slice.call(templateFUN).forEach(function (el) {\n                ele.appendChild(el);\n            });\n        }\n    };\n    Tab.prototype.headerTextCompile = function (element, text, index) {\n        this.compileElement(element, text, 'headerTemplate', index);\n    };\n    Tab.prototype.getContent = function (ele, cnt, callType, index) {\n        var eleStr;\n        cnt = isNOU(cnt) ? '' : cnt;\n        if (typeof cnt === 'string' || isNOU(cnt.innerHTML)) {\n            if (typeof cnt === 'string' && this.enableHtmlSanitizer) {\n                cnt = SanitizeHtmlHelper.sanitize(cnt);\n            }\n            if (cnt[0] === '.' || cnt[0] === '#') {\n                if (document.querySelectorAll(cnt).length) {\n                    var eleVal = document.querySelector(cnt);\n                    eleStr = eleVal.outerHTML.trim();\n                    if (callType === 'clone') {\n                        ele.appendChild(eleVal.cloneNode(true));\n                    }\n                    else {\n                        ele.appendChild(eleVal);\n                        eleVal.style.display = '';\n                    }\n                }\n                else {\n                    this.templateCompile(ele, cnt, index);\n                }\n            }\n            else {\n                this.templateCompile(ele, cnt, index);\n            }\n        }\n        else {\n            ele.appendChild(cnt);\n        }\n        if (!isNOU(eleStr)) {\n            if (this.templateEle.indexOf(cnt.toString()) === -1) {\n                this.templateEle.push(cnt.toString());\n            }\n        }\n    };\n    Tab.prototype.getTrgContent = function (cntEle, no) {\n        var ele;\n        if (this.element.classList.contains(CLS_NEST)) {\n            ele = select('.' + CLS_NEST + '> .' + CLS_CONTENT + ' > #' + CLS_CONTENT + this.tabId + '_' + no, this.element);\n        }\n        else {\n            ele = this.findEle(cntEle.children, CLS_CONTENT + this.tabId + '_' + no);\n        }\n        return ele;\n    };\n    Tab.prototype.findEle = function (items, key) {\n        var ele;\n        for (var i = 0; i < items.length; i++) {\n            if (items[i].id === key) {\n                ele = items[i];\n                break;\n            }\n        }\n        return ele;\n    };\n    Tab.prototype.isVertical = function () {\n        var isVertical = (this.headerPlacement === 'Left' || this.headerPlacement === 'Right') ? true : false;\n        this.scrCntClass = (isVertical) ? CLS_VSCRCNT : CLS_HSCRCNT;\n        return isVertical;\n    };\n    Tab.prototype.addVerticalClass = function () {\n        if (this.isVertical()) {\n            var tbPos = (this.headerPlacement === 'Left') ? CLS_VLEFT : CLS_VRIGHT;\n            addClass([this.hdrEle], [CLS_VERTICAL, tbPos]);\n            if (!this.element.classList.contains(CLS_NEST)) {\n                addClass([this.element], [CLS_VTAB, tbPos]);\n            }\n            else {\n                addClass([this.hdrEle], [CLS_VTAB, tbPos]);\n            }\n        }\n        if (this.headerPlacement === 'Bottom') {\n            addClass([this.hdrEle], [CLS_HBOTTOM]);\n        }\n    };\n    Tab.prototype.updatePopAnimationConfig = function () {\n        this.show = { name: (this.isVertical() ? 'FadeIn' : 'SlideDown'), duration: 100 };\n        this.hide = { name: (this.isVertical() ? 'FadeOut' : 'SlideUp'), duration: 100 };\n    };\n    Tab.prototype.changeOrientation = function (place) {\n        this.setOrientation(place, this.hdrEle);\n        var activeTab = this.hdrEle.querySelector('.' + CLS_ACTIVE);\n        var isVertical = this.hdrEle.classList.contains(CLS_VERTICAL) ? true : false;\n        removeClass([this.element], [CLS_VTAB]);\n        removeClass([this.hdrEle], [CLS_VERTICAL, CLS_VLEFT, CLS_VRIGHT]);\n        if (isVertical !== this.isVertical()) {\n            this.changeToolbarOrientation();\n            if (!isNOU(activeTab) && activeTab.classList.contains(CLS_TB_POPUP)) {\n                this.popupHandler(activeTab);\n            }\n        }\n        this.addVerticalClass();\n        this.setActiveBorder();\n        this.focusItem();\n    };\n    Tab.prototype.focusItem = function () {\n        var curActItem = select(' #' + CLS_ITEM + this.tabId + '_' + this.selectedItem, this.hdrEle);\n        if (!isNOU(curActItem)) {\n            curActItem.firstElementChild.focus();\n        }\n    };\n    Tab.prototype.changeToolbarOrientation = function () {\n        this.tbObj.setProperties({ height: (this.isVertical() ? '100%' : 'auto'), width: (this.isVertical() ? 'auto' : '100%') }, true);\n        this.tbObj.changeOrientation();\n        this.updatePopAnimationConfig();\n    };\n    Tab.prototype.setOrientation = function (place, ele) {\n        var headerPos = Array.prototype.indexOf.call(this.element.children, ele);\n        var contentPos = Array.prototype.indexOf.call(this.element.children, this.element.querySelector('.' + CLS_CONTENT));\n        if (place === 'Bottom' && (contentPos > headerPos)) {\n            this.element.appendChild(ele);\n        }\n        else {\n            removeClass([ele], [CLS_HBOTTOM]);\n            this.element.insertBefore(ele, select('.' + CLS_CONTENT, this.element));\n        }\n    };\n    Tab.prototype.setCssClass = function (ele, cls, val) {\n        if (cls === '') {\n            return;\n        }\n        var list = cls.split(' ');\n        for (var i = 0; i < list.length; i++) {\n            if (val) {\n                ele.classList.add(list[i]);\n            }\n            else {\n                ele.classList.remove(list[i]);\n            }\n        }\n    };\n    Tab.prototype.setContentHeight = function (val) {\n        if (this.element.classList.contains(CLS_FILL)) {\n            removeClass([this.element], [CLS_FILL]);\n        }\n        if (isNOU(this.cntEle)) {\n            return;\n        }\n        var hdrEle = this.getTabHeader();\n        if (this.heightAdjustMode === 'None') {\n            if (this.height === 'auto') {\n                return;\n            }\n            else {\n                if (!this.isVertical()) {\n                    setStyle(this.cntEle, { 'height': (this.element.clientHeight - hdrEle.offsetHeight) + 'px' });\n                }\n            }\n        }\n        else if (this.heightAdjustMode === 'Fill') {\n            addClass([this.element], [CLS_FILL]);\n            setStyle(this.element, { 'height': '100%' });\n            this.cntEle.style.height = 'calc(100% - ' + this.hdrEle.offsetHeight + 'px)';\n        }\n        else if (this.heightAdjustMode === 'Auto') {\n            if (this.isTemplate === true) {\n                var cnt = selectAll('.' + CLS_CONTENT + ' > .' + CLS_ITEM, this.element);\n                for (var i = 0; i < cnt.length; i++) {\n                    cnt[i].setAttribute('style', 'display:block; visibility: visible');\n                    this.maxHeight = Math.max(this.maxHeight, this.getHeight(cnt[i]));\n                    cnt[i].style.removeProperty('display');\n                    cnt[i].style.removeProperty('visibility');\n                }\n            }\n            else {\n                this.cntEle = select('.' + CLS_CONTENT, this.element);\n                if (val === true) {\n                    this.cntEle.appendChild(this.createElement('div', {\n                        id: (CLS_CONTENT + this.tabId + '_' + 0), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n                        attrs: { 'role': 'tabpanel', 'aria-labelledby': CLS_ITEM + this.tabId + '_' + 0 }\n                    }));\n                }\n                var ele = this.cntEle.children.item(0);\n                for (var i = 0; i < this.items.length; i++) {\n                    this.getContent(ele, this.items[i].content, 'clone', i);\n                    this.maxHeight = Math.max(this.maxHeight, this.getHeight(ele));\n                    while (ele.firstChild) {\n                        ele.removeChild(ele.firstChild);\n                    }\n                }\n                if (this.isReact) {\n                    this.clearTemplate(['content']);\n                }\n                this.templateEle = [];\n                this.getContent(ele, this.items[0].content, 'render', 0);\n                if (this.prevIndex !== this.selectedItem) {\n                    ele.classList.remove(CLS_ACTIVE);\n                }\n            }\n            setStyle(this.cntEle, { 'height': this.maxHeight + 'px' });\n        }\n        else {\n            setStyle(this.cntEle, { 'height': 'auto' });\n        }\n    };\n    Tab.prototype.getHeight = function (ele) {\n        var cs = window.getComputedStyle(ele);\n        return ele.offsetHeight + parseFloat(cs.getPropertyValue('padding-top')) + parseFloat(cs.getPropertyValue('padding-bottom')) +\n            parseFloat(cs.getPropertyValue('margin-top')) + parseFloat(cs.getPropertyValue('margin-bottom'));\n    };\n    Tab.prototype.setActiveBorder = function () {\n        var trgHdrEle = this.getTabHeader();\n        var trg = select('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE, trgHdrEle);\n        if (isNOU(trg)) {\n            return;\n        }\n        if (!this.reorderActiveTab) {\n            if (trg.classList.contains(CLS_TB_POPUP) && !this.bdrLine.classList.contains(CLS_HIDDEN)) {\n                this.bdrLine.classList.add(CLS_HIDDEN);\n            }\n            if (trgHdrEle && !trgHdrEle.classList.contains(CLS_REORDER_ACTIVE_ITEM)) {\n                trgHdrEle.classList.add(CLS_REORDER_ACTIVE_ITEM);\n            }\n        }\n        else if (trgHdrEle) {\n            trgHdrEle.classList.remove(CLS_REORDER_ACTIVE_ITEM);\n        }\n        var root = closest(trg, '.' + CLS_TAB);\n        if (this.element !== root) {\n            return;\n        }\n        this.tbItems = select('.' + CLS_TB_ITEMS, trgHdrEle);\n        var bar = select('.' + CLS_INDICATOR, trgHdrEle);\n        var scrollCnt = select('.' + CLS_TB_ITEMS + ' .' + this.scrCntClass, trgHdrEle);\n        if (this.isVertical()) {\n            setStyle(bar, { 'left': '', 'right': '' });\n            var tbHeight = (isNOU(scrollCnt)) ? this.tbItems.offsetHeight : scrollCnt.offsetHeight;\n            if (tbHeight !== 0) {\n                setStyle(bar, { 'top': trg.offsetTop + 'px', 'height': trg.offsetHeight + 'px' });\n            }\n            else {\n                setStyle(bar, { 'top': 0, 'height': 0 });\n            }\n        }\n        else {\n            if (this.overflowMode === 'MultiRow') {\n                var top_1 = this.headerPlacement === 'Bottom' ? trg.offsetTop : trg.offsetHeight + trg.offsetTop;\n                setStyle(bar, { 'top': top_1 + 'px', 'height': '' });\n            }\n            else {\n                setStyle(bar, { 'top': '', 'height': '' });\n            }\n            var tbWidth = (isNOU(scrollCnt)) ? this.tbItems.offsetWidth : scrollCnt.offsetWidth;\n            if (tbWidth !== 0) {\n                setStyle(bar, { 'left': trg.offsetLeft + 'px', 'right': tbWidth - (trg.offsetLeft + trg.offsetWidth) + 'px' });\n            }\n            else {\n                setStyle(bar, { 'left': 'auto', 'right': 'auto' });\n            }\n        }\n        if (!isNOU(this.bdrLine) && !trg.classList.contains(CLS_TB_POPUP)) {\n            this.bdrLine.classList.remove(CLS_HIDDEN);\n        }\n    };\n    Tab.prototype.setActive = function (value, skipDataBind, isInteracted) {\n        if (skipDataBind === void 0) { skipDataBind = false; }\n        if (isInteracted === void 0) { isInteracted = false; }\n        this.tbItem = selectAll('.' + CLS_TB_ITEM, this.getTabHeader());\n        var trg = this.tbItem[value];\n        if (value < 0 || isNaN(value) || this.tbItem.length === 0 || !isNOU(trg) && trg.classList.contains(CLS_DISABLE)) {\n            return;\n        }\n        if (value >= 0 && !skipDataBind) {\n            this.allowServerDataBinding = false;\n            this.setProperties({ selectedItem: value }, true);\n            this.allowServerDataBinding = true;\n            if (!this.initRender) {\n                this.serverDataBind();\n            }\n        }\n        if (trg.classList.contains(CLS_ACTIVE)) {\n            this.setActiveBorder();\n            return;\n        }\n        if (!this.isTemplate) {\n            attributes(trg.firstElementChild, { 'aria-controls': CLS_CONTENT + this.tabId + '_' + value });\n        }\n        var id = trg.id;\n        this.removeActiveClass();\n        trg.classList.add(CLS_ACTIVE);\n        trg.firstElementChild.setAttribute('aria-selected', 'true');\n        var no = Number(this.extIndex(id));\n        if (isNOU(this.prevActiveEle)) {\n            this.prevActiveEle = CLS_CONTENT + this.tabId + '_' + no;\n        }\n        if (this.isTemplate) {\n            if (select('.' + CLS_CONTENT, this.element).children.length > 0) {\n                var trg_1 = this.findEle(select('.' + CLS_CONTENT, this.element).children, CLS_CONTENT + this.tabId + '_' + no);\n                if (!isNOU(trg_1)) {\n                    trg_1.classList.add(CLS_ACTIVE);\n                }\n                this.triggerAnimation(id, this.enableAnimation);\n            }\n        }\n        else {\n            this.cntEle = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n            var item = this.getTrgContent(this.cntEle, this.extIndex(id));\n            if (isNOU(item)) {\n                this.cntEle.appendChild(this.createElement('div', {\n                    id: CLS_CONTENT + this.tabId + '_' + this.extIndex(id), className: CLS_ITEM + ' ' + CLS_ACTIVE,\n                    attrs: { role: 'tabpanel', 'aria-labelledby': CLS_ITEM + this.tabId + '_' + this.extIndex(id) }\n                }));\n                var eleTrg = this.getTrgContent(this.cntEle, this.extIndex(id));\n                var itemIndex = Array.prototype.indexOf.call(this.itemIndexArray, id);\n                this.getContent(eleTrg, this.items[itemIndex].content, 'render', itemIndex);\n            }\n            else {\n                item.classList.add(CLS_ACTIVE);\n            }\n            this.triggerAnimation(id, this.enableAnimation);\n        }\n        this.setActiveBorder();\n        this.refreshItemVisibility(trg);\n        if (!this.initRender && !skipDataBind) {\n            var eventArg = {\n                previousItem: this.prevItem,\n                previousIndex: this.prevIndex,\n                selectedItem: trg,\n                selectedIndex: value,\n                selectedContent: select('#' + CLS_CONTENT + this.tabId + '_' + this.selectingID, this.content),\n                isSwiped: this.isSwiped,\n                isInteracted: isInteracted,\n                preventFocus: false\n            };\n            this.trigger('selected', eventArg, function (selectEventArgs) {\n                if (!selectEventArgs.preventFocus) {\n                    trg.firstElementChild.focus();\n                }\n            });\n        }\n    };\n    Tab.prototype.setItems = function (items) {\n        this.isReplace = true;\n        this.tbItems = select('.' + CLS_TB_ITEMS, this.getTabHeader());\n        this.tbObj.items = this.parseObject(items, 0);\n        this.tbObj.dataBind();\n        this.isReplace = false;\n    };\n    Tab.prototype.setRTL = function (value) {\n        this.tbObj.enableRtl = value;\n        this.tbObj.dataBind();\n        this.setCssClass(this.element, CLS_RTL, value);\n        this.refreshActiveBorder();\n    };\n    Tab.prototype.refreshActiveBorder = function () {\n        if (!isNOU(this.bdrLine)) {\n            this.bdrLine.classList.add(CLS_HIDDEN);\n        }\n        this.setActiveBorder();\n    };\n    Tab.prototype.showPopup = function (config) {\n        var tbPop = select('.e-popup.e-toolbar-pop', this.hdrEle);\n        if (tbPop && tbPop.classList.contains('e-popup-close')) {\n            var tbPopObj = (tbPop && tbPop.ej2_instances[0]);\n            tbPopObj.position.X = (this.headerPlacement === 'Left') ? 'left' : 'right';\n            tbPopObj.dataBind();\n            tbPopObj.show(config);\n        }\n    };\n    Tab.prototype.bindDraggable = function () {\n        var _this = this;\n        if (this.allowDragAndDrop) {\n            var tabHeader = this.element.querySelector('.' + CLS_HEADER);\n            if (tabHeader) {\n                var items = Array.prototype.slice.call(tabHeader.querySelectorAll('.' + CLS_TB_ITEM));\n                items.forEach(function (element) {\n                    _this.initializeDrag(element);\n                });\n            }\n        }\n    };\n    Tab.prototype.wireEvents = function () {\n        this.bindDraggable();\n        window.addEventListener('resize', this.resizeContext);\n        EventHandler.add(this.element, 'mouseover', this.hoverHandler, this);\n        EventHandler.add(this.element, 'keydown', this.spaceKeyDown, this);\n        if (!isNOU(this.cntEle)) {\n            this.touchModule = new Touch(this.cntEle, { swipe: this.swipeHandler.bind(this) });\n        }\n        this.keyModule = new KeyboardEvents(this.element, { keyAction: this.keyHandler.bind(this), keyConfigs: this.keyConfigs });\n        this.tabKeyModule = new KeyboardEvents(this.element, {\n            keyAction: this.keyHandler.bind(this),\n            keyConfigs: { openPopup: 'shift+f10', tab: 'tab', shiftTab: 'shift+tab' },\n            eventName: 'keydown'\n        });\n    };\n    Tab.prototype.unWireEvents = function () {\n        if (!isNOU(this.keyModule)) {\n            this.keyModule.destroy();\n        }\n        if (!isNOU(this.tabKeyModule)) {\n            this.tabKeyModule.destroy();\n        }\n        if (!isNOU(this.cntEle) && !isNOU(this.touchModule)) {\n            this.touchModule.destroy();\n            this.touchModule = null;\n        }\n        window.removeEventListener('resize', this.resizeContext);\n        EventHandler.remove(this.element, 'mouseover', this.hoverHandler);\n        EventHandler.remove(this.element, 'keydown', this.spaceKeyDown);\n        this.element.classList.remove(CLS_RTL);\n        this.element.classList.remove(CLS_FOCUS);\n    };\n    Tab.prototype.clickHandler = function (args) {\n        this.element.classList.remove(CLS_FOCUS);\n        var trg = args.originalEvent.target;\n        var trgParent = closest(trg, '.' + CLS_TB_ITEM);\n        var trgIndex = this.getEleIndex(trgParent);\n        if (trg.classList.contains(CLS_ICON_CLOSE)) {\n            this.removeTab(trgIndex);\n        }\n        else if (this.isVertical() && closest(trg, '.' + CLS_HOR_NAV)) {\n            this.showPopup(this.show);\n        }\n        else {\n            this.isPopup = false;\n            if (!isNOU(trgParent) && (trgIndex !== this.selectedItem)) {\n                this.selectTab(trgIndex, args.originalEvent, true);\n            }\n        }\n    };\n    Tab.prototype.swipeHandler = function (e) {\n        if (e.velocity < 3 && isNOU(e.originalEvent.changedTouches)) {\n            return;\n        }\n        if (this.isNested) {\n            this.element.setAttribute('data-swipe', 'true');\n        }\n        var nestedTab = this.element.querySelector('[data-swipe=\"true\"]');\n        if (nestedTab) {\n            nestedTab.removeAttribute('data-swipe');\n            return;\n        }\n        this.isSwiped = true;\n        if (e.swipeDirection === 'Right' && this.selectedItem !== 0) {\n            for (var k = this.selectedItem - 1; k >= 0; k--) {\n                if (!this.tbItem[k].classList.contains(CLS_HIDDEN)) {\n                    this.selectTab(k, null, true);\n                    break;\n                }\n            }\n        }\n        else if (e.swipeDirection === 'Left' && (this.selectedItem !== selectAll('.' + CLS_TB_ITEM, this.element).length - 1)) {\n            for (var i = this.selectedItem + 1; i < this.tbItem.length; i++) {\n                if (!this.tbItem[i].classList.contains(CLS_HIDDEN)) {\n                    this.selectTab(i, null, true);\n                    break;\n                }\n            }\n        }\n        this.isSwiped = false;\n    };\n    Tab.prototype.spaceKeyDown = function (e) {\n        if ((e.keyCode === 32 && e.which === 32) || (e.keyCode === 35 && e.which === 35)) {\n            var clstHead = closest(e.target, '.' + CLS_HEADER);\n            if (!isNOU(clstHead)) {\n                e.preventDefault();\n            }\n        }\n    };\n    Tab.prototype.keyHandler = function (e) {\n        if (this.element.classList.contains(CLS_DISABLE)) {\n            return;\n        }\n        this.element.classList.add(CLS_FOCUS);\n        var trg = e.target;\n        var tabHeader = this.getTabHeader();\n        var actEle = select('.' + CLS_ACTIVE, tabHeader);\n        this.popEle = select('.' + CLS_TB_POP, tabHeader);\n        if (!isNOU(this.popEle)) {\n            this.popObj = this.popEle.ej2_instances[0];\n        }\n        var item = closest(document.activeElement, '.' + CLS_TB_ITEM);\n        var trgParent = closest(trg, '.' + CLS_TB_ITEM);\n        switch (e.action) {\n            case 'space':\n            case 'enter':\n                if (trg.parentElement.classList.contains(CLS_DISABLE)) {\n                    return;\n                }\n                if (e.action === 'enter' && trg.classList.contains('e-hor-nav')) {\n                    this.showPopup(this.show);\n                    break;\n                }\n                this.keyPressed(trg);\n                break;\n            case 'tab':\n            case 'shiftTab':\n                if (trg.classList.contains(CLS_WRAP)\n                    && closest(trg, '.' + CLS_TB_ITEM).classList.contains(CLS_ACTIVE) === false) {\n                    trg.setAttribute('tabindex', trg.getAttribute('data-tabindex'));\n                }\n                if (this.popObj && isVisible(this.popObj.element)) {\n                    this.popObj.hide(this.hide);\n                }\n                if (!isNOU(actEle) && actEle.children.item(0).getAttribute('tabindex') === '-1') {\n                    actEle.children.item(0).setAttribute('tabindex', '0');\n                }\n                break;\n            case 'moveLeft':\n            case 'moveRight':\n                if (!isNOU(item)) {\n                    this.refreshItemVisibility(item);\n                }\n                break;\n            case 'openPopup':\n                e.preventDefault();\n                if (!isNOU(this.popEle) && this.popEle.classList.contains(CLS_POPUP_CLOSE)) {\n                    this.popObj.show(this.show);\n                }\n                break;\n            case 'delete':\n                if (this.showCloseButton === true && !isNOU(trgParent)) {\n                    var nxtSib = trgParent.nextSibling;\n                    if (!isNOU(nxtSib) && nxtSib.classList.contains(CLS_TB_ITEM)) {\n                        nxtSib.firstElementChild.focus();\n                    }\n                    this.removeTab(this.getEleIndex(trgParent));\n                }\n                this.setActiveBorder();\n                break;\n        }\n    };\n    Tab.prototype.refreshItemVisibility = function (target) {\n        var scrCnt = select('.' + this.scrCntClass, this.tbItems);\n        if (!this.isVertical() && !isNOU(scrCnt)) {\n            var scrBar = select('.e-hscroll-bar', this.tbItems);\n            var scrStart = scrBar.scrollLeft;\n            var scrEnd = scrStart + scrBar.offsetWidth;\n            var eleStart = target.offsetLeft;\n            var eleWidth = target.offsetWidth;\n            var eleEnd = target.offsetLeft + target.offsetWidth;\n            if ((scrStart < eleStart) && (scrEnd < eleEnd)) {\n                var eleViewRange = scrEnd - eleStart;\n                scrBar.scrollLeft = scrStart + (eleWidth - eleViewRange);\n            }\n            else {\n                if ((scrStart > eleStart) && (scrEnd > eleEnd)) {\n                    var eleViewRange = eleEnd - scrStart;\n                    scrBar.scrollLeft = scrStart - (eleWidth - eleViewRange);\n                }\n            }\n        }\n        else {\n            return;\n        }\n    };\n    Tab.prototype.getIndexFromEle = function (id) {\n        return parseInt(id.substring(id.lastIndexOf('_') + 1), 10);\n    };\n    Tab.prototype.hoverHandler = function (e) {\n        var trg = e.target;\n        if (!isNOU(trg.classList) && trg.classList.contains(CLS_ICON_CLOSE)) {\n            trg.setAttribute('title', new L10n('tab', { closeButtonTitle: this.title }, this.locale).getConstant('closeButtonTitle'));\n        }\n    };\n    Tab.prototype.evalOnPropertyChangeItems = function (newProp, oldProp) {\n        var _this = this;\n        if (!(newProp.items instanceof Array && oldProp.items instanceof Array)) {\n            var changedProp = Object.keys(newProp.items);\n            for (var i = 0; i < changedProp.length; i++) {\n                var index = parseInt(Object.keys(newProp.items)[i], 10);\n                var properties = Object.keys(newProp.items[index]);\n                for (var j = 0; j < properties.length; j++) {\n                    var oldVal = Object(oldProp.items[index])[properties[j]];\n                    var newVal = Object(newProp.items[index])[properties[j]];\n                    var hdr = this.element.querySelectorAll('.' + CLS_TB_ITEM)[index];\n                    var itemIndex = void 0;\n                    if (hdr && !isNOU(hdr.id) && hdr.id !== '') {\n                        itemIndex = this.getIndexFromEle(hdr.id);\n                    }\n                    else {\n                        itemIndex = index;\n                    }\n                    var hdrItem = select('.' + CLS_TB_ITEMS + ' #' + CLS_ITEM + this.tabId + '_' + itemIndex, this.element);\n                    var cntItem = select('.' + CLS_CONTENT + ' #' + CLS_CONTENT + this.tabId + '_' + itemIndex, this.element);\n                    if (properties[j] === 'header' || properties[j] === 'headerTemplate') {\n                        var icon = (isNOU(this.items[index].header) ||\n                            isNOU(this.items[index].header.iconCss)) ? '' : this.items[index].header.iconCss;\n                        var textVal = this.items[index].headerTemplate || this.items[index].header.text;\n                        if (properties[j] === 'headerTemplate') {\n                            this.clearTabTemplate(hdrItem, properties[j], CLS_TB_ITEM);\n                        }\n                        if ((textVal === '') && (icon === '')) {\n                            this.removeTab(index);\n                        }\n                        else {\n                            this.tbId = hdr.id;\n                            var arr = [];\n                            arr.push(this.items[index]);\n                            this.items.splice(index, 1);\n                            this.itemIndexArray.splice(index, 1);\n                            this.tbObj.items.splice(index, 1);\n                            var isHiddenEle = hdrItem.classList.contains(CLS_HIDDEN);\n                            detach(hdrItem);\n                            this.isReplace = true;\n                            this.addTab(arr, index);\n                            if (isHiddenEle) {\n                                this.hideTab(index);\n                            }\n                            this.isReplace = false;\n                        }\n                    }\n                    if (properties[j] === 'content' && !isNOU(cntItem)) {\n                        var strVal = typeof newVal === 'string' || isNOU(newVal.innerHTML);\n                        if (strVal && (newVal[0] === '.' || newVal[0] === '#') && newVal.length) {\n                            var eleVal = document.querySelector(newVal);\n                            cntItem.appendChild(eleVal);\n                            eleVal.style.display = '';\n                        }\n                        else if (newVal === '' && oldVal[0] === '#') {\n                            document.body.appendChild(this.element.querySelector(oldVal)).style.display = 'none';\n                            cntItem.innerHTML = newVal;\n                        }\n                        else if (this.isAngular || this.isReact) {\n                            this.clearTabTemplate(cntItem, properties[j], CLS_ITEM);\n                            cntItem.innerHTML = '';\n                            this.templateCompile(cntItem, newVal, index);\n                        }\n                        else if (typeof newVal !== 'function') {\n                            cntItem.innerHTML = newVal;\n                        }\n                    }\n                    if (properties[j] === 'cssClass') {\n                        if (!isNOU(hdrItem)) {\n                            hdrItem.classList.remove(oldVal);\n                            hdrItem.classList.add(newVal);\n                        }\n                        if (!isNOU(cntItem)) {\n                            cntItem.classList.remove(oldVal);\n                            cntItem.classList.add(newVal);\n                        }\n                    }\n                    if (properties[j] === 'disabled') {\n                        this.enableTab(index, ((newVal === true) ? false : true));\n                    }\n                    if (properties[j] === 'visible') {\n                        this.hideTab(index, ((newVal === true) ? false : true));\n                    }\n                }\n            }\n            if (this.isReact && this.portals && this.portals.length > 0) {\n                this.renderReactTemplates(function () {\n                    _this.refreshActiveTabBorder();\n                });\n            }\n        }\n        else {\n            this.lastIndex = 0;\n            if (isNOU(this.tbObj)) {\n                this.reRenderItems();\n            }\n            else {\n                if (this.isReact || this.isAngular) {\n                    this.clearTemplate();\n                }\n                this.setItems(newProp.items);\n                if (this.templateEle.length > 0) {\n                    this.expTemplateContent();\n                }\n                this.templateEle = [];\n                var selectElement = select('.' + CLS_TAB + ' > .' + CLS_CONTENT, this.element);\n                while (selectElement.firstElementChild) {\n                    detach(selectElement.firstElementChild);\n                }\n                this.select(this.selectedItem);\n                this.draggableItems = [];\n                this.bindDraggable();\n            }\n        }\n    };\n    Tab.prototype.clearTabTemplate = function (templateEle, templateName, className) {\n        if (!this.clearTemplates) {\n            return;\n        }\n        if (this.registeredTemplate && this.registeredTemplate[templateName]) {\n            var registeredTemplates = this.registeredTemplate;\n            for (var index = 0; index < registeredTemplates[templateName].length; index++) {\n                var registeredItem = registeredTemplates[templateName][index].rootNodes[0];\n                var closestItem = closest(registeredItem, '.' + className);\n                if (!isNullOrUndefined(closestItem) && closestItem === templateEle) {\n                    this.clearTemplate([templateName], [registeredTemplates[templateName][index]]);\n                    break;\n                }\n            }\n        }\n        else if (this.portals && this.portals.length > 0) {\n            var portals = this.portals;\n            for (var index = 0; index < portals.length; index++) {\n                var portalItem = portals[index];\n                var closestItem = closest(portalItem.containerInfo, '.' + className);\n                if (!isNullOrUndefined(closestItem) && closestItem === templateEle) {\n                    this.clearTemplate([templateName], index);\n                    break;\n                }\n            }\n        }\n    };\n    Tab.prototype.initializeDrag = function (target) {\n        var _this = this;\n        var dragObj = new Draggable(target, {\n            dragArea: this.dragArea,\n            dragTarget: '.' + CLS_TB_ITEM,\n            clone: true,\n            helper: this.helper.bind(this),\n            dragStart: this.itemDragStart.bind(this),\n            drag: function (e) {\n                var dragIndex = _this.getEleIndex(_this.dragItem);\n                var dropIndex;\n                var dropItem;\n                var dragArgs = {\n                    draggedItem: _this.dragItem,\n                    event: e.event,\n                    target: e.target,\n                    droppedItem: e.target.closest('.' + CLS_TB_ITEM),\n                    clonedElement: _this.cloneElement,\n                    index: dragIndex\n                };\n                if (!isNOU(e.target.closest('.' + CLS_TAB)) && !e.target.closest('.' + CLS_TAB).isEqualNode(_this.element) &&\n                    _this.dragArea !== '.' + CLS_HEADER) {\n                    _this.trigger('dragging', dragArgs);\n                }\n                else {\n                    if (!(e.target.closest(_this.dragArea)) && _this.overflowMode !== 'Popup') {\n                        document.body.style.cursor = 'not-allowed';\n                        addClass([_this.cloneElement], CLS_HIDDEN);\n                        if (_this.dragItem.classList.contains(CLS_HIDDEN)) {\n                            removeClass([_this.dragItem], CLS_HIDDEN);\n                        }\n                        _this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = 'visible';\n                    }\n                    else {\n                        document.body.style.cursor = '';\n                        _this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = 'hidden';\n                        if (_this.cloneElement.classList.contains(CLS_HIDDEN)) {\n                            removeClass([_this.cloneElement], CLS_HIDDEN);\n                        }\n                    }\n                    if (_this.overflowMode === 'Scrollable' && !isNOU(_this.element.querySelector('.e-hscroll'))) {\n                        var scrollRightNavEle = _this.element.querySelector('.e-scroll-right-nav');\n                        var scrollLeftNavEle = _this.element.querySelector('.e-scroll-left-nav');\n                        var hscrollBar = _this.element.querySelector('.e-hscroll-bar');\n                        if (!isNOU(scrollRightNavEle) && Math.abs((scrollRightNavEle.offsetWidth / 2) +\n                            scrollRightNavEle.offsetLeft) > _this.cloneElement.offsetLeft + _this.cloneElement.offsetWidth) {\n                            hscrollBar.scrollLeft -= 10;\n                        }\n                        if (!isNOU(scrollLeftNavEle) && Math.abs((scrollLeftNavEle.offsetLeft + scrollLeftNavEle.offsetWidth) -\n                            _this.cloneElement.offsetLeft) > (scrollLeftNavEle.offsetWidth / 2)) {\n                            hscrollBar.scrollLeft += 10;\n                        }\n                    }\n                    _this.cloneElement.style.pointerEvents = 'none';\n                    dropItem = closest(e.target, '.' + CLS_TB_ITEM + '.e-draggable');\n                    var scrollContentWidth = 0;\n                    if (_this.overflowMode === 'Scrollable' && !isNOU(_this.element.querySelector('.e-hscroll'))) {\n                        scrollContentWidth = _this.element.querySelector('.e-hscroll-content').offsetWidth;\n                    }\n                    if (dropItem != null && !dropItem.isSameNode(_this.dragItem) &&\n                        dropItem.closest('.' + CLS_TAB).isSameNode(_this.dragItem.closest('.' + CLS_TAB))) {\n                        dropIndex = _this.getEleIndex(dropItem);\n                        if (dropIndex < dragIndex &&\n                            (Math.abs((dropItem.offsetLeft + dropItem.offsetWidth) -\n                                _this.cloneElement.offsetLeft) > (dropItem.offsetWidth / 2))) {\n                            _this.dragAction(dropItem, dragIndex, dropIndex);\n                        }\n                        if (dropIndex > dragIndex &&\n                            (Math.abs(dropItem.offsetWidth / 2) + dropItem.offsetLeft -\n                                scrollContentWidth) < _this.cloneElement.offsetLeft + _this.cloneElement.offsetWidth) {\n                            _this.dragAction(dropItem, dragIndex, dropIndex);\n                        }\n                    }\n                    _this.droppedIndex = _this.getEleIndex(_this.dragItem);\n                    _this.trigger('dragging', dragArgs);\n                }\n            },\n            dragStop: this.itemDragStop.bind(this)\n        });\n        this.draggableItems.push(dragObj);\n    };\n    Tab.prototype.helper = function (e) {\n        this.cloneElement = this.createElement('div');\n        if (e.element) {\n            this.cloneElement = (e.element.cloneNode(true));\n            addClass([this.cloneElement], 'e-tab-clone-element');\n            if (this.element.querySelector('.' + CLS_HEADER).classList.contains(CLS_CLOSE_SHOW)) {\n                addClass([this.cloneElement], CLS_CLOSE_SHOW);\n            }\n            removeClass([this.cloneElement.querySelector('.' + CLS_WRAP)], 'e-ripple');\n            if (!isNOU(this.cloneElement.querySelector('.e-ripple-element'))) {\n                remove(this.cloneElement.querySelector('.e-ripple-element'));\n            }\n            document.body.appendChild(this.cloneElement);\n        }\n        return this.cloneElement;\n    };\n    Tab.prototype.itemDragStart = function (e) {\n        var _this = this;\n        this.draggingItems = this.items.map(function (x) { return x; });\n        this.dragItem = e.element;\n        var dragArgs = {\n            draggedItem: e.element,\n            event: e.event,\n            target: e.target,\n            droppedItem: null,\n            index: this.getEleIndex(this.dragItem),\n            clonedElement: this.cloneElement,\n            cancel: false\n        };\n        this.trigger('onDragStart', dragArgs, function (tabItemDragArgs) {\n            if (tabItemDragArgs.cancel) {\n                var dragObj = e.element.ej2_instances[0];\n                if (!isNullOrUndefined(dragObj)) {\n                    dragObj.intDestroy(e.event);\n                }\n                detach(_this.cloneElement);\n            }\n            else {\n                _this.removeActiveClass();\n                addClass([_this.tbItems.querySelector('.' + CLS_INDICATOR)], CLS_HIDDEN);\n                _this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = 'hidden';\n            }\n        });\n    };\n    Tab.prototype.dragAction = function (dropItem, dragsIndex, dropIndex) {\n        if (this.items.length > 0) {\n            var item = this.draggingItems[dragsIndex];\n            this.draggingItems.splice(dragsIndex, 1);\n            this.draggingItems.splice(dropIndex, 0, item);\n        }\n        if (this.overflowMode === 'MultiRow') {\n            dropItem.parentNode.insertBefore(this.dragItem, dropItem.nextElementSibling);\n        }\n        if (dragsIndex > dropIndex) {\n            if (!(this.dragItem.parentElement).isSameNode(dropItem.parentElement)) {\n                if (this.overflowMode === 'Extended') {\n                    if (dropItem.isSameNode(dropItem.parentElement.lastChild)) {\n                        var popupContainer = this.dragItem.parentNode;\n                        dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n                        popupContainer.insertBefore(dropItem.parentElement.lastChild, popupContainer.childNodes[0]);\n                    }\n                    else {\n                        this.dragItem.parentNode.insertBefore((dropItem.parentElement.lastChild), this.dragItem.parentElement.childNodes[0]);\n                        dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n                    }\n                }\n                else {\n                    var lastEle = (dropItem.parentElement).lastChild;\n                    if (dropItem.isSameNode(lastEle)) {\n                        var popupContainer = this.dragItem.parentNode;\n                        dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n                        popupContainer.insertBefore(lastEle, popupContainer.childNodes[0]);\n                    }\n                    else {\n                        this.dragItem.parentNode.insertBefore((dropItem.parentElement).lastChild, this.dragItem.parentElement.childNodes[0]);\n                        dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n                    }\n                }\n            }\n            else {\n                this.dragItem.parentNode.insertBefore(this.dragItem, dropItem);\n            }\n        }\n        if (dragsIndex < dropIndex) {\n            if (!(this.dragItem.parentElement).isSameNode(dropItem.parentElement)) {\n                if (this.overflowMode === 'Extended') {\n                    this.dragItem.parentElement.appendChild(dropItem.parentElement.firstElementChild);\n                    dropItem.parentNode.insertBefore(this.dragItem, dropItem.nextSibling);\n                }\n                else {\n                    this.dragItem.parentNode.insertBefore((dropItem.parentElement).lastChild, this.dragItem.parentElement.childNodes[0]);\n                    dropItem.parentNode.insertBefore(this.dragItem, dropItem);\n                }\n            }\n            else {\n                this.dragItem.parentNode.insertBefore(this.dragItem, dropItem.nextElementSibling);\n            }\n        }\n    };\n    Tab.prototype.itemDragStop = function (e) {\n        var _this = this;\n        detach(this.cloneElement);\n        this.cloneElement = null;\n        this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = 'visible';\n        document.body.style.cursor = '';\n        var dragStopArgs = {\n            draggedItem: this.dragItem,\n            event: e.event,\n            target: e.target,\n            droppedItem: this.tbItem[this.droppedIndex],\n            clonedElement: null,\n            index: this.droppedIndex,\n            cancel: false\n        };\n        this.trigger('dragged', dragStopArgs, function (tabItemDropArgs) {\n            if (tabItemDropArgs.cancel) {\n                _this.refresh();\n            }\n            else {\n                if (_this.items.length > 0 && _this.draggingItems.length > 0) {\n                    _this.items = _this.draggingItems;\n                    _this.selectedItem = _this.droppedIndex;\n                    _this.refresh();\n                }\n                else {\n                    _this.dragItem.querySelector('.' + CLS_WRAP).style.visibility = '';\n                    removeClass([_this.tbItems.querySelector('.' + CLS_INDICATOR)], CLS_HIDDEN);\n                    _this.selectTab(_this.droppedIndex, null, true);\n                }\n            }\n        });\n        this.dragItem = null;\n    };\n    /**\n     * Enables or disables the specified Tab item. On passing value as `false`, the item will be disabled.\n     *\n     * @param {number} index - Index value of target Tab item.\n     * @param {boolean} value - Boolean value that determines whether the command should be enabled or disabled.\n     * By default, isEnable is true.\n     * @returns {void}.\n     */\n    Tab.prototype.enableTab = function (index, value) {\n        var tbItems = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n        if (isNOU(tbItems)) {\n            return;\n        }\n        if (value === true) {\n            tbItems.classList.remove(CLS_DISABLE, CLS_OVERLAY);\n            tbItems.firstElementChild.setAttribute('tabindex', tbItems.firstElementChild.getAttribute('data-tabindex'));\n        }\n        else {\n            tbItems.classList.add(CLS_DISABLE, CLS_OVERLAY);\n            tbItems.firstElementChild.removeAttribute('tabindex');\n            if (tbItems.classList.contains(CLS_ACTIVE)) {\n                this.select(index + 1);\n            }\n        }\n        if (!isNOU(this.items[index])) {\n            this.items[index].disabled = !value;\n            this.dataBind();\n        }\n        tbItems.firstElementChild.setAttribute('aria-disabled', (value === true) ? 'false' : 'true');\n    };\n    /**\n     * Adds new items to the Tab that accepts an array as Tab items.\n     *\n     * @param {TabItemModel[]} items - An array of item that is added to the Tab.\n     * @param {number} index - Number value that determines where the items to be added. By default, index is 0.\n     * @returns {void}.\n     */\n    Tab.prototype.addTab = function (items, index) {\n        var _this = this;\n        var addArgs = { addedItems: items, cancel: false };\n        if (!this.isReplace) {\n            this.trigger('adding', addArgs, function (tabAddingArgs) {\n                if (!tabAddingArgs.cancel) {\n                    _this.addingTabContent(items, index);\n                }\n            });\n        }\n        else {\n            this.addingTabContent(items, index);\n        }\n        if (this.isReact) {\n            this.renderReactTemplates();\n        }\n    };\n    Tab.prototype.addingTabContent = function (items, index) {\n        var _this = this;\n        var lastEleIndex = 0;\n        this.hdrEle = select('.' + CLS_HEADER, this.element);\n        if (isNOU(this.hdrEle)) {\n            this.items = items;\n            this.reRenderItems();\n            this.bindDraggable();\n        }\n        else {\n            var itemsCount = selectAll('.e-tab-header .' + CLS_TB_ITEM, this.element).length;\n            if (itemsCount !== 0) {\n                lastEleIndex = this.lastIndex + 1;\n            }\n            if (isNOU(index)) {\n                index = itemsCount - 1;\n            }\n            if (itemsCount < index || index < 0 || isNaN(index)) {\n                return;\n            }\n            if (itemsCount === 0 && !isNOU(this.hdrEle)) {\n                this.hdrEle.style.display = '';\n            }\n            if (!isNOU(this.bdrLine)) {\n                this.bdrLine.classList.add(CLS_HIDDEN);\n            }\n            this.tbItems = select('.' + CLS_TB_ITEMS, this.getTabHeader());\n            this.isAdd = true;\n            var tabItems_2 = this.parseObject(items, index);\n            this.isAdd = false;\n            var i_1 = 0;\n            var textValue_1;\n            items.forEach(function (item, place) {\n                textValue_1 = item.headerTemplate || item.header.text;\n                if (!(isNOU(item.headerTemplate || item.header) || isNOU(textValue_1) ||\n                    (textValue_1.length === 0) && !isNOU(item.header) && isNOU(item.header.iconCss))) {\n                    if (tabItems_2[place]) {\n                        if (isNOU(item.id)) {\n                            item.id = CLS_ITEM + _this.tabId + '_' + TABITEMPREFIX + (lastEleIndex + place).toString();\n                        }\n                        tabItems_2[place].htmlAttributes['data-id'] = item.id;\n                    }\n                    _this.items.splice((index + i_1), 0, item);\n                    i_1++;\n                }\n                if (_this.isTemplate && !isNOU(item.header) && !isNOU(item.header.text)) {\n                    var no = lastEleIndex + place;\n                    var ele = _this.createElement('div', {\n                        id: CLS_CONTENT + _this.tabId + '_' + no, className: CLS_ITEM,\n                        attrs: { role: 'tabpanel', 'aria-labelledby': CLS_ITEM + '_' + no }\n                    });\n                    _this.cntEle.insertBefore(ele, _this.cntEle.children[(index + place)]);\n                    var eleTrg = _this.getTrgContent(_this.cntEle, no.toString());\n                    _this.getContent(eleTrg, item.content, 'render', index);\n                }\n            });\n            this.tbObj.addItems(tabItems_2, index);\n            if (!this.isReplace) {\n                this.trigger('added', { addedItems: items });\n            }\n            if (this.selectedItem === index) {\n                this.select(index);\n            }\n            else {\n                this.setActiveBorder();\n                this.tbItem = selectAll('.' + CLS_TB_ITEM, this.getTabHeader());\n            }\n            this.bindDraggable();\n        }\n    };\n    /**\n     * Removes the items in the Tab from the specified index.\n     *\n     * @param {number} index - Index of target item that is going to be removed.\n     * @returns {void}.\n     */\n    Tab.prototype.removeTab = function (index) {\n        var _this = this;\n        var trg = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n        if (isNOU(trg)) {\n            return;\n        }\n        var removeArgs = { removedItem: trg, removedIndex: index, cancel: false };\n        this.trigger('removing', removeArgs, function (tabRemovingArgs) {\n            if (!tabRemovingArgs.cancel) {\n                var header = select('#' + CLS_ITEM + _this.tabId + '_' + _this.extIndex(trg.id), select('.' + CLS_TB_ITEMS, _this.element));\n                if (!isNOU(header)) {\n                    _this.clearTabTemplate(header, 'headerTemplate', CLS_TB_ITEM);\n                }\n                _this.tbObj.removeItems(index);\n                if (_this.allowDragAndDrop && (index !== Array.prototype.indexOf.call(_this.itemIndexArray, trg.id))) {\n                    index = Array.prototype.indexOf.call(_this.itemIndexArray, trg.id);\n                }\n                var targetEleIndex = _this.itemIndexArray.indexOf(trg.id);\n                _this.items.splice(targetEleIndex, 1);\n                _this.itemIndexArray.splice(targetEleIndex, 1);\n                _this.refreshActiveBorder();\n                var cntTrg = select('#' + CLS_CONTENT + _this.tabId + '_' + _this.extIndex(trg.id), select('.' + CLS_CONTENT, _this.element));\n                if (!isNOU(cntTrg)) {\n                    _this.clearTabTemplate(cntTrg, 'content', CLS_ITEM);\n                    detach(cntTrg);\n                }\n                _this.trigger('removed', tabRemovingArgs);\n                if (_this.draggableItems && _this.draggableItems.length > 0) {\n                    _this.draggableItems[index].destroy();\n                    _this.draggableItems[index] = null;\n                    _this.draggableItems.splice(index, 1);\n                }\n                if (trg.classList.contains(CLS_ACTIVE)) {\n                    index = (index > selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_TB_POPUP + ')', _this.element).length - 1) ? index - 1 : index;\n                    _this.enableAnimation = false;\n                    _this.selectedItem = index;\n                    _this.select(index);\n                }\n                else if (index !== _this.selectedItem) {\n                    if (index < _this.selectedItem) {\n                        index = _this.itemIndexArray.indexOf(_this.tbItem[_this.selectedItem].id);\n                        _this.setProperties({ selectedItem: index > -1 ? index : _this.selectedItem }, true);\n                        _this.prevIndex = _this.selectedItem;\n                    }\n                    _this.tbItem = selectAll('.' + CLS_TB_ITEM, _this.getTabHeader());\n                }\n                if (selectAll('.' + CLS_TB_ITEM, _this.element).length === 0) {\n                    _this.hdrEle.style.display = 'none';\n                }\n                _this.enableAnimation = true;\n            }\n        });\n    };\n    /**\n     * Shows or hides the Tab that is in the specified index.\n     *\n     * @param {number} index - Index value of target item.\n     * @param {boolean} value - Based on this Boolean value, item will be hide (false) or show (true). By default, value is true.\n     * @returns {void}.\n     */\n    Tab.prototype.hideTab = function (index, value) {\n        var items;\n        var item = selectAll('.' + CLS_TB_ITEM, this.element)[index];\n        if (isNOU(item)) {\n            return;\n        }\n        if (isNOU(value)) {\n            value = true;\n        }\n        this.bdrLine.classList.add(CLS_HIDDEN);\n        if (value === true) {\n            item.classList.add(CLS_HIDDEN);\n            items = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_HIDDEN + ')', this.tbItems);\n            if (items.length !== 0 && item.classList.contains(CLS_ACTIVE)) {\n                if (index !== 0) {\n                    for (var i = index - 1; i >= 0; i--) {\n                        if (!this.tbItem[i].classList.contains(CLS_HIDDEN)) {\n                            this.select(i);\n                            break;\n                        }\n                        else if (i === 0) {\n                            for (var k = index + 1; k < this.tbItem.length; k++) {\n                                if (!this.tbItem[k].classList.contains(CLS_HIDDEN)) {\n                                    this.select(k);\n                                    break;\n                                }\n                            }\n                        }\n                    }\n                }\n                else {\n                    for (var k = index + 1; k < this.tbItem.length; k++) {\n                        if (!this.tbItem[k].classList.contains(CLS_HIDDEN)) {\n                            this.select(k);\n                            break;\n                        }\n                    }\n                }\n            }\n            else if (items.length === 0) {\n                this.element.classList.add(CLS_HIDDEN);\n            }\n        }\n        else {\n            this.element.classList.remove(CLS_HIDDEN);\n            items = selectAll('.' + CLS_TB_ITEM + ':not(.' + CLS_HIDDEN + ')', this.tbItems);\n            item.classList.remove(CLS_HIDDEN);\n            if (items.length === 0) {\n                this.select(index);\n            }\n        }\n        this.setActiveBorder();\n        if (!isNullOrUndefined(item.firstElementChild)) {\n            item.firstElementChild.setAttribute('aria-hidden', '' + value);\n        }\n        if (this.overflowMode === 'Popup' && this.tbObj) {\n            this.tbObj.refreshOverflow();\n        }\n    };\n    Tab.prototype.selectTab = function (args, event, isInteracted) {\n        if (event === void 0) { event = null; }\n        if (isInteracted === void 0) { isInteracted = false; }\n        this.isInteracted = isInteracted;\n        this.select(args, event);\n    };\n    /**\n     * Specifies the index or HTMLElement to select an item from the Tab.\n     *\n     * @param {number | HTMLElement} args - Index or DOM element is used for selecting an item from the Tab.\n     * @param {Event} event - An event which takes place in DOM.\n     * @returns {void}\n     */\n    Tab.prototype.select = function (args, event) {\n        var _this = this;\n        var tabHeader = this.getTabHeader();\n        this.tbItems = select('.' + CLS_TB_ITEMS, tabHeader);\n        this.tbItem = selectAll('.' + CLS_TB_ITEM, tabHeader);\n        this.content = select('.' + CLS_CONTENT, this.element);\n        this.prevItem = this.tbItem[this.prevIndex];\n        if (isNOU(this.selectedItem) || (this.selectedItem < 0) || (this.tbItem.length <= this.selectedItem) || isNaN(this.selectedItem)) {\n            this.selectedItem = 0;\n        }\n        else {\n            this.selectedID = this.extIndex(this.tbItem[this.selectedItem].id);\n        }\n        var trg = this.tbItem[args];\n        if (isNOU(trg)) {\n            this.selectedID = '0';\n        }\n        else {\n            this.selectingID = this.extIndex(trg.id);\n        }\n        if (!isNOU(this.prevItem) && !this.prevItem.classList.contains(CLS_DISABLE)) {\n            this.prevItem.children.item(0).setAttribute('tabindex', this.prevItem.firstElementChild.getAttribute('tabindex'));\n        }\n        var eventArg = {\n            event: event,\n            previousItem: this.prevItem,\n            previousIndex: this.prevIndex,\n            selectedItem: this.tbItem[this.selectedItem],\n            selectedIndex: this.selectedItem,\n            selectedContent: !isNOU(this.content) ?\n                select('#' + CLS_CONTENT + this.tabId + '_' + this.selectedID, this.content) : null,\n            selectingItem: trg,\n            selectingIndex: args,\n            selectingContent: !isNOU(this.content) ?\n                select('#' + CLS_CONTENT + this.tabId + '_' + this.selectingID, this.content) : null,\n            isSwiped: this.isSwiped,\n            isInteracted: this.isInteracted,\n            cancel: false\n        };\n        if (!this.initRender) {\n            this.trigger('selecting', eventArg, function (selectArgs) {\n                if (!selectArgs.cancel) {\n                    _this.selectingContent(args, _this.isInteracted);\n                }\n            });\n        }\n        else {\n            this.selectingContent(args, this.isInteracted);\n        }\n        this.isInteracted = false;\n    };\n    Tab.prototype.selectingContent = function (args, isInteracted) {\n        if (typeof args === 'number') {\n            if (!isNOU(this.tbItem[args]) && (this.tbItem[args].classList.contains(CLS_DISABLE) ||\n                this.tbItem[args].classList.contains(CLS_HIDDEN))) {\n                for (var i = args + 1; i < this.items.length; i++) {\n                    if (this.items[i].disabled === false && this.items[i].visible === true) {\n                        args = i;\n                        break;\n                    }\n                    else {\n                        args = 0;\n                    }\n                }\n            }\n            if (this.tbItem.length > args && args >= 0 && !isNaN(args)) {\n                this.prevIndex = this.selectedItem;\n                this.prevItem = this.tbItem[this.prevIndex];\n                if (this.tbItem[args].classList.contains(CLS_TB_POPUP) && this.reorderActiveTab) {\n                    this.setActive(this.popupHandler(this.tbItem[args]), null, isInteracted);\n                    if ((!isNOU(this.items) && this.items.length > 0) && this.allowDragAndDrop) {\n                        this.tbItem = selectAll('.' + CLS_TB_ITEMS + ' .' + CLS_TB_ITEM, this.hdrEle);\n                        var item = this.items[args];\n                        this.items.splice(args, 1);\n                        this.items.splice(this.tbItem.length - 1, 0, item);\n                        var itemId = this.itemIndexArray[args];\n                        this.itemIndexArray.splice(args, 1);\n                        this.itemIndexArray.splice(this.tbItem.length - 1, 0, itemId);\n                    }\n                }\n                else {\n                    this.setActive(args, null, isInteracted);\n                }\n            }\n            else {\n                this.setActive(0, null, isInteracted);\n            }\n        }\n        else if (args instanceof (HTMLElement)) {\n            this.setActive(this.getEleIndex(args), null, isInteracted);\n        }\n    };\n    /**\n     * Gets the item index from the Tab.\n     *\n     * @param  {string} tabItemId - Item ID is used for getting index from the Tab.\n     * @returns {number} - It returns item index.\n     */\n    Tab.prototype.getItemIndex = function (tabItemId) {\n        var tabIndex;\n        for (var i = 0; i < this.tbItem.length; i++) {\n            var value = this.tbItem[i].getAttribute('data-id');\n            if (tabItemId === value) {\n                tabIndex = i;\n                break;\n            }\n        }\n        return tabIndex;\n    };\n    /**\n     * Specifies the value to disable/enable the Tab component.\n     * When set to `true`, the component will be disabled.\n     *\n     * @param  {boolean} value - Based on this Boolean value, Tab will be enabled (false) or disabled (true).\n     * @returns {void}.\n     */\n    Tab.prototype.disable = function (value) {\n        this.setCssClass(this.element, CLS_DISABLE, value);\n        this.element.setAttribute('aria-disabled', '' + value);\n    };\n    /**\n     * Get the properties to be maintained in the persisted state.\n     *\n     * @returns {string} - It returns the persisted state.\n     */\n    Tab.prototype.getPersistData = function () {\n        return this.addOnPersist(['selectedItem', 'actEleId']);\n    };\n    /**\n     * Returns the current module name.\n     *\n     * @returns {string} - It returns the current module name.\n     * @private\n     */\n    Tab.prototype.getModuleName = function () {\n        return 'tab';\n    };\n    /**\n     * Gets called when the model property changes.The data that describes the old and new values of the property that changed.\n     *\n     * @param  {TabModel} newProp - It contains the new value of data.\n     * @param  {TabModel} oldProp - It contains the old value of data.\n     * @returns {void}\n     * @private\n     */\n    Tab.prototype.onPropertyChanged = function (newProp, oldProp) {\n        var _this = this;\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'width':\n                    setStyle(this.element, { width: formatUnit(newProp.width) });\n                    break;\n                case 'height':\n                    setStyle(this.element, { height: formatUnit(newProp.height) });\n                    this.setContentHeight(false);\n                    break;\n                case 'cssClass':\n                    var headerEle = this.element.querySelector('.' + CLS_HEADER);\n                    if (oldProp.cssClass !== '' && !isNullOrUndefined(oldProp.cssClass)) {\n                        this.setCssClass(this.element, oldProp.cssClass, false);\n                        this.setCssClass(this.element, newProp.cssClass, true);\n                        if (!isNullOrUndefined(headerEle)) {\n                            this.setCssClass(headerEle, oldProp.cssClass, false);\n                            this.setCssClass(headerEle, newProp.cssClass, true);\n                        }\n                    }\n                    else {\n                        this.setCssClass(this.element, newProp.cssClass, true);\n                        if (!isNullOrUndefined(headerEle)) {\n                            this.setCssClass(headerEle, newProp.cssClass, true);\n                        }\n                    }\n                    break;\n                case 'items':\n                    this.evalOnPropertyChangeItems(newProp, oldProp);\n                    break;\n                case 'showCloseButton':\n                    this.setCloseButton(newProp.showCloseButton);\n                    break;\n                case 'reorderActiveTab':\n                    this.refreshActiveTabBorder();\n                    break;\n                case 'selectedItem':\n                    this.selectedItem = oldProp.selectedItem;\n                    this.select(newProp.selectedItem);\n                    break;\n                case 'headerPlacement':\n                    this.changeOrientation(newProp.headerPlacement);\n                    break;\n                case 'enableRtl':\n                    this.setRTL(newProp.enableRtl);\n                    break;\n                case 'overflowMode':\n                    this.tbObj.overflowMode = newProp.overflowMode;\n                    this.tbObj.dataBind();\n                    this.refreshActiveTabBorder();\n                    break;\n                case 'heightAdjustMode':\n                    this.setContentHeight(false);\n                    this.select(this.selectedItem);\n                    break;\n                case 'scrollStep':\n                    if (this.tbObj) {\n                        this.tbObj.scrollStep = this.scrollStep;\n                    }\n                    break;\n                case 'allowDragAndDrop':\n                    this.bindDraggable();\n                    break;\n                case 'dragArea':\n                    if (this.allowDragAndDrop) {\n                        this.draggableItems.forEach(function (item) {\n                            item.dragArea = _this.dragArea;\n                        });\n                        this.refresh();\n                    }\n                    break;\n            }\n        }\n    };\n    /**\n     * To refresh the active tab contents.\n     *\n     * @returns {void}\n     */\n    Tab.prototype.refreshActiveTab = function () {\n        if (this.isReact && this.isTemplate) {\n            this.clearTemplate();\n        }\n        if (!this.isTemplate) {\n            if (this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE)) {\n                detach(this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE).children[0]);\n                detach(this.element.querySelector('.' + CLS_CONTENT).querySelector('.' + CLS_ACTIVE).children[0]);\n                var item = this.items[this.selectedItem];\n                var pos = (isNOU(item.header) || isNOU(item.header.iconPosition)) ? '' : item.header.iconPosition;\n                var css = (isNOU(item.header) || isNOU(item.header.iconCss)) ? '' : item.header.iconCss;\n                var text = item.headerTemplate || item.header.text;\n                var txtWrap = this.createElement('div', { className: CLS_TEXT, attrs: { 'role': 'presentation' } });\n                if (!isNOU(text.tagName)) {\n                    txtWrap.appendChild(text);\n                }\n                else {\n                    this.headerTextCompile(txtWrap, text, this.selectedItem);\n                }\n                var tEle = void 0;\n                var icon = this.createElement('span', {\n                    className: CLS_ICONS + ' ' + CLS_TAB_ICON + ' ' + CLS_ICON + '-' + pos + ' ' + css\n                });\n                var tConts = this.createElement('div', { className: CLS_TEXT_WRAP });\n                tConts.appendChild(txtWrap);\n                if ((text !== '' && text !== undefined) && css !== '') {\n                    if ((pos === 'left' || pos === 'top')) {\n                        tConts.insertBefore(icon, tConts.firstElementChild);\n                    }\n                    else {\n                        tConts.appendChild(icon);\n                    }\n                    tEle = txtWrap;\n                    this.isIconAlone = false;\n                }\n                else {\n                    tEle = ((css === '') ? txtWrap : icon);\n                    if (tEle === icon) {\n                        detach(txtWrap);\n                        tConts.appendChild(icon);\n                        this.isIconAlone = true;\n                    }\n                }\n                var tabIndex = isNOU(item.tabIndex) ? '-1' : item.tabIndex.toString();\n                var wrapAtt = (item.disabled) ? {} : { tabIndex: tabIndex, 'data-tabindex': tabIndex, role: 'tab', 'aria-selected': 'true', 'aria-disabled': 'false' };\n                tConts.appendChild(this.btnCls.cloneNode(true));\n                var wraper = this.createElement('div', { className: CLS_WRAP, attrs: wrapAtt });\n                wraper.appendChild(tConts);\n                if (pos === 'top' || pos === 'bottom') {\n                    this.element.classList.add('e-vertical-icon');\n                }\n                this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE).appendChild(wraper);\n                var crElem = this.createElement('div');\n                var cnt = item.content;\n                var eleStr = void 0;\n                if (typeof cnt === 'string' || isNOU(cnt.innerHTML)) {\n                    if (typeof cnt === 'string' && this.enableHtmlSanitizer) {\n                        cnt = SanitizeHtmlHelper.sanitize(cnt);\n                    }\n                    if (cnt[0] === '.' || cnt[0] === '#') {\n                        if (document.querySelectorAll(cnt).length) {\n                            var eleVal = document.querySelector(cnt);\n                            eleStr = eleVal.outerHTML.trim();\n                            crElem.appendChild(eleVal);\n                            eleVal.style.display = '';\n                        }\n                        else {\n                            this.compileElement(crElem, cnt, 'content', this.selectedItem);\n                        }\n                    }\n                    else {\n                        this.compileElement(crElem, cnt, 'content', this.selectedItem);\n                    }\n                }\n                else {\n                    crElem.appendChild(cnt);\n                }\n                if (!isNOU(eleStr)) {\n                    if (this.templateEle.indexOf(cnt.toString()) === -1) {\n                        this.templateEle.push(cnt.toString());\n                    }\n                }\n                this.element.querySelector('.' + CLS_ITEM + '.' + CLS_ACTIVE).appendChild(crElem);\n            }\n        }\n        else {\n            var tabItems = this.element.querySelector('.' + CLS_TB_ITEMS);\n            var element = this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE);\n            var index = this.getIndexFromEle(element.id);\n            var header = element.innerText;\n            var detachContent = this.element.querySelector('.' + CLS_CONTENT).querySelector('.' + CLS_ACTIVE).children[0];\n            var mainContents = detachContent.innerHTML;\n            detach(element);\n            detach(detachContent);\n            var attr = {\n                className: CLS_TB_ITEM + ' ' + CLS_TEMPLATE + ' ' + CLS_ACTIVE, id: CLS_ITEM + this.tabId + '_' + index\n            };\n            var txtString = this.createElement('span', {\n                className: CLS_TEXT, innerHTML: header, attrs: { 'role': 'presentation' }\n            }).outerHTML;\n            var conte = this.createElement('div', {\n                className: CLS_TEXT_WRAP, innerHTML: txtString + this.btnCls.outerHTML\n            }).outerHTML;\n            var tabIndex = element.firstElementChild.getAttribute('data-tabindex');\n            var wrap = this.createElement('div', {\n                className: CLS_WRAP, innerHTML: conte,\n                attrs: { tabIndex: tabIndex, 'data-tabindex': tabIndex, role: 'tab', 'aria-controls': CLS_CONTENT + this.tabId + '_' + index, 'aria-selected': 'true', 'aria-disabled': 'false' }\n            });\n            tabItems.insertBefore(this.createElement('div', attr), tabItems.children[index + 1]);\n            this.element.querySelector('.' + CLS_TB_ITEM + '.' + CLS_ACTIVE).appendChild(wrap);\n            var crElem = this.createElement('div', { innerHTML: mainContents });\n            this.element.querySelector('.' + CLS_CONTENT).querySelector('.' + CLS_ACTIVE).appendChild(crElem);\n        }\n        if (this.isReact) {\n            this.renderReactTemplates();\n        }\n    };\n    /**\n     * To refresh the active tab indicator.\n     *\n     * @returns {void}\n     */\n    Tab.prototype.refreshActiveTabBorder = function () {\n        var activeEle = select('.' + CLS_TB_ITEM + '.' + CLS_TB_POPUP + '.' + CLS_ACTIVE, this.element);\n        if (!isNOU(activeEle) && this.reorderActiveTab) {\n            this.select(this.getEleIndex(activeEle));\n        }\n        this.refreshActiveBorder();\n    };\n    __decorate([\n        Collection([], TabItem)\n    ], Tab.prototype, \"items\", void 0);\n    __decorate([\n        Property('100%')\n    ], Tab.prototype, \"width\", void 0);\n    __decorate([\n        Property('auto')\n    ], Tab.prototype, \"height\", void 0);\n    __decorate([\n        Property('')\n    ], Tab.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(0)\n    ], Tab.prototype, \"selectedItem\", void 0);\n    __decorate([\n        Property('Top')\n    ], Tab.prototype, \"headerPlacement\", void 0);\n    __decorate([\n        Property('Content')\n    ], Tab.prototype, \"heightAdjustMode\", void 0);\n    __decorate([\n        Property('Scrollable')\n    ], Tab.prototype, \"overflowMode\", void 0);\n    __decorate([\n        Property('Dynamic')\n    ], Tab.prototype, \"loadOn\", void 0);\n    __decorate([\n        Property(false)\n    ], Tab.prototype, \"enablePersistence\", void 0);\n    __decorate([\n        Property(false)\n    ], Tab.prototype, \"enableHtmlSanitizer\", void 0);\n    __decorate([\n        Property(false)\n    ], Tab.prototype, \"showCloseButton\", void 0);\n    __decorate([\n        Property(true)\n    ], Tab.prototype, \"reorderActiveTab\", void 0);\n    __decorate([\n        Property()\n    ], Tab.prototype, \"scrollStep\", void 0);\n    __decorate([\n        Property()\n    ], Tab.prototype, \"dragArea\", void 0);\n    __decorate([\n        Property(false)\n    ], Tab.prototype, \"allowDragAndDrop\", void 0);\n    __decorate([\n        Property(true)\n    ], Tab.prototype, \"clearTemplates\", void 0);\n    __decorate([\n        Complex({}, TabAnimationSettings)\n    ], Tab.prototype, \"animation\", void 0);\n    __decorate([\n        Event()\n    ], Tab.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], Tab.prototype, \"adding\", void 0);\n    __decorate([\n        Event()\n    ], Tab.prototype, \"added\", void 0);\n    __decorate([\n        Event()\n    ], Tab.prototype, \"selecting\", void 0);\n    __decorate([\n        Event()\n    ], Tab.prototype, \"selected\", void 0);\n    __decorate([\n        Event()\n    ], Tab.prototype, \"removing\", void 0);\n    __decorate([\n        Event()\n    ], Tab.prototype, \"removed\", void 0);\n    __decorate([\n        Event()\n    ], Tab.prototype, \"onDragStart\", void 0);\n    __decorate([\n        Event()\n    ], Tab.prototype, \"dragging\", void 0);\n    __decorate([\n        Event()\n    ], Tab.prototype, \"dragged\", void 0);\n    __decorate([\n        Event()\n    ], Tab.prototype, \"destroyed\", void 0);\n    Tab = __decorate([\n        NotifyPropertyChanges\n    ], Tab);\n    return Tab;\n}(Component));\nexport { Tab };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Collection, Event, NotifyPropertyChanges, detach, Property, EventHandler, isRippleEnabled, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { addClass, getUniqueID, rippleEffect, getComponent } from '@syncfusion/ej2-base';\nimport { attributes, Component, closest, select, SanitizeHtmlHelper } from '@syncfusion/ej2-base';\nimport { classList, removeClass } from '@syncfusion/ej2-base';\nimport { Button } from '@syncfusion/ej2-buttons';\nimport { Popup } from '@syncfusion/ej2-popups';\nimport { upDownKeyHandler } from './../common/common';\nimport { getModel, Item, setBlankIconStyle } from './../common/common';\nvar classNames = {\n    DISABLED: 'e-disabled',\n    FOCUS: 'e-focused',\n    ICON: 'e-menu-icon',\n    ITEM: 'e-item',\n    POPUP: 'e-dropdown-popup',\n    RTL: 'e-rtl',\n    SEPARATOR: 'e-separator',\n    VERTICAL: 'e-vertical'\n};\n/**\n * DropDownButton component is used to toggle contextual overlays for displaying list of action items.\n * It can contain both text and images.\n * ```html\n * <button id=\"element\">DropDownButton</button>\n * ```\n * ```typescript\n * <script>\n * var dropDownButtonObj = new DropDownButton({items: [{ text: 'Action1' }, { text: 'Action2' },{ text: 'Action3' }]);\n * dropDownButtonObj.appendTo(\"#element\");\n * </script>\n * ```\n */\nvar DropDownButton = /** @class */ (function (_super) {\n    __extends(DropDownButton, _super);\n    /**\n     * Constructor for creating the widget\n     *\n     * @param  {DropDownButtonModel} options - Specifies dropdown button model\n     * @param  {string|HTMLButtonElement} element - Specifies element\n     * @hidden\n     */\n    function DropDownButton(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.isPopupCreated = true;\n        return _this;\n    }\n    DropDownButton.prototype.preRender = function () {\n        /** */\n    };\n    /**\n     * Get the properties to be maintained in the persisted state.\n     *\n     * @returns {string} - Persist data\n     */\n    DropDownButton.prototype.getPersistData = function () {\n        return this.addOnPersist([]);\n    };\n    /**\n     * To open/close DropDownButton popup based on current state of the DropDownButton.\n     *\n     * @returns {void}\n     */\n    DropDownButton.prototype.toggle = function () {\n        if (this.canOpen()) {\n            this.openPopUp();\n        }\n        else if (this.createPopupOnClick && !this.isPopupCreated) {\n            this.createPopup();\n            this.openPopUp();\n        }\n        else {\n            this.closePopup();\n        }\n    };\n    /**\n     * Initialize the Component rendering\n     *\n     * @returns {void}\n     * @private\n     */\n    DropDownButton.prototype.render = function () {\n        this.initialize();\n        if (!this.disabled) {\n            this.wireEvents();\n        }\n        this.renderComplete();\n    };\n    /**\n     * Adds a new item to the menu. By default, new item appends to the list as the last item,\n     * but you can insert based on the text parameter.\n     *\n     * @param  { ItemModel[] } items - Specifies an array of JSON data.\n     * @param { string } text - Specifies the text to insert the newly added item in the menu.\n     * @returns {void}.\n     */\n    DropDownButton.prototype.addItems = function (items, text) {\n        var newItem;\n        var idx = this.items.length;\n        for (var j = 0, len = this.items.length; j < len; j++) {\n            if (text === this.items[j].text) {\n                idx = j;\n                break;\n            }\n        }\n        for (var i = items.length - 1; i >= 0; i--) {\n            // eslint-disable-next-line @typescript-eslint/no-explicit-any\n            newItem = new Item(this, 'items', items[i], true);\n            this.items.splice(idx, 0, newItem);\n        }\n        if (!this.canOpen()) {\n            this.createItems();\n        }\n    };\n    /**\n     * Removes the items from the menu.\n     *\n     * @param  { string[] } items - Specifies an array of string to remove the items.\n     * @param { string } isUniqueId - Set `true` if specified items is a collection of unique id.\n     * @returns {void}.\n     */\n    DropDownButton.prototype.removeItems = function (items, isUniqueId) {\n        var refresh = false;\n        for (var i = 0, len = items.length; i < len; i++) {\n            for (var j = 0, len_1 = this.items.length; j < len_1; j++) {\n                if (items[i] === (isUniqueId ? this.items[j].id : this.items[j].text)) {\n                    this.items.splice(j, 1);\n                    refresh = true;\n                    break;\n                }\n            }\n        }\n        if (refresh && this.getULElement()) {\n            this.createItems();\n        }\n    };\n    DropDownButton.prototype.createPopup = function () {\n        var _a;\n        var div = this.createElement('div', {\n            className: classNames.POPUP,\n            id: this.element.id + '-popup'\n        });\n        document.body.appendChild(div);\n        this.dropDown = new Popup(div, {\n            relateTo: this.element,\n            collision: { X: 'fit', Y: 'flip' },\n            position: { X: 'left', Y: 'bottom' },\n            targetType: 'relative',\n            content: this.target ? this.getTargetElement() : '',\n            enableRtl: this.enableRtl\n        });\n        this.dropDown.element.setAttribute('role', 'dialog');\n        this.dropDown.element.setAttribute('aria-label', 'dropdown menu');\n        if (!isNullOrUndefined(this.popupContent)) {\n            this.popupContent.style.display = '';\n        }\n        if (this.dropDown.element.style.position === 'fixed') {\n            this.dropDown.refreshPosition(this.element);\n        }\n        this.dropDown.hide();\n        attributes(this.element, (_a = {},\n            _a['aria-haspopup'] = this.items.length || this.target ? 'true' : 'false',\n            _a['aria-expanded'] = 'false',\n            _a['type'] = 'button',\n            _a));\n        if (this.cssClass) {\n            addClass([div], this.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n        }\n        this.isPopupCreated = true;\n    };\n    DropDownButton.prototype.getTargetElement = function () {\n        if (this.createPopupOnClick && !this.isColorPicker() && !isNullOrUndefined(this.popupContent)) {\n            return this.popupContent;\n        }\n        return typeof (this.target) === 'string' ? select(this.target) : this.target;\n    };\n    DropDownButton.prototype.createItems = function (appendItems) {\n        var items = this.items;\n        var showIcon = this.hasIcon(this.items, 'iconCss');\n        var span;\n        var item;\n        var li;\n        var eventArgs;\n        var ul = this.getULElement();\n        if (ul) {\n            ul.innerHTML = '';\n        }\n        else {\n            ul = this.createElement('ul', {\n                attrs: { 'role': 'menu', 'tabindex': '0' }\n            });\n        }\n        for (var i = 0; i < items.length; i++) {\n            item = items[i];\n            var tempItem = item.text;\n            li = this.createElement('li', {\n                innerHTML: item.url ? '' : tempItem,\n                className: item.separator ? classNames.ITEM + ' ' + classNames.SEPARATOR : classNames.ITEM,\n                attrs: item.separator ? { 'role': 'separator', 'tabindex': '-1', 'aria-label': 'separator', 'aria-hidden': 'true' } : { 'role': 'menuitem', 'tabindex': '-1', 'aria-label': tempItem },\n                id: item.id ? item.id : getUniqueID('e-' + this.getModuleName() + '-item')\n            });\n            if (this.enableHtmlSanitizer) {\n                li.textContent = item.url ? '' : tempItem;\n            }\n            else {\n                li.innerHTML = item.url ? '' : tempItem;\n            }\n            if (item.url) {\n                li.appendChild(this.createAnchor(item));\n                li.classList.add('e-url');\n            }\n            if (item.iconCss) {\n                span = this.createElement('span', { className: classNames.ICON + ' ' + item.iconCss });\n                if (item.url) {\n                    li.childNodes[0].appendChild(span);\n                }\n                else {\n                    li.insertBefore(span, li.childNodes[0]);\n                }\n            }\n            else {\n                if (showIcon && !item.separator) {\n                    li.classList.add('e-blank-icon');\n                }\n            }\n            var beforeDisabled = item.disabled;\n            if (item.disabled) {\n                li.classList.add('e-disabled');\n            }\n            eventArgs = { item: item, element: li };\n            this.trigger('beforeItemRender', eventArgs);\n            var afterDisabled = eventArgs.item.disabled;\n            if (beforeDisabled !== afterDisabled) {\n                if (eventArgs.item.disabled) {\n                    li.classList.add('e-disabled');\n                }\n                else {\n                    li.classList.remove('e-disabled');\n                }\n            }\n            ul.appendChild(li);\n        }\n        if (appendItems) {\n            this.getPopUpElement().appendChild(ul);\n        }\n        if (showIcon) {\n            setBlankIconStyle(this.getPopUpElement());\n        }\n    };\n    DropDownButton.prototype.hasIcon = function (items, field) {\n        for (var i = 0, len = items.length; i < len; i++) {\n            if (items[i][\"\" + field]) {\n                return true;\n            }\n        }\n        return false;\n    };\n    DropDownButton.prototype.createAnchor = function (item) {\n        var tempItem = (this.enableHtmlSanitizer) ? SanitizeHtmlHelper.sanitize(item.text) : item.text;\n        return this.createElement('a', { className: 'e-menu-text e-menu-url', innerHTML: tempItem, attrs: { 'href': item.url } });\n    };\n    DropDownButton.prototype.initialize = function () {\n        this.button = new Button({\n            iconCss: this.iconCss, iconPosition: this.iconPosition, cssClass: this.cssClass, content: this.content,\n            disabled: this.disabled, enableRtl: this.enableRtl, enablePersistence: this.enablePersistence\n        });\n        this.button.createElement = this.createElement;\n        this.button.appendTo(this.element);\n        if (!this.element.id) {\n            this.element.id = getUniqueID('e-' + this.getModuleName());\n        }\n        this.appendArrowSpan();\n        this.setActiveElem([this.element]);\n        this.element.setAttribute('aria-label', this.element.textContent ? this.element.textContent : 'dropdownbutton');\n        if ((this.target && !this.isColorPicker() && !this.createPopupOnClick) || !this.createPopupOnClick) {\n            this.createPopup();\n        }\n        else {\n            this.isPopupCreated = false;\n            if (this.target && !this.isColorPicker() && this.createPopupOnClick) {\n                this.popupContent = this.getTargetElement();\n                this.popupContent.style.display = 'none';\n            }\n        }\n    };\n    DropDownButton.prototype.isColorPicker = function () {\n        if (!this.element) {\n            return false;\n        }\n        var prevElem = this.element.previousSibling;\n        if (prevElem && prevElem.classList && prevElem.classList.contains('e-split-colorpicker')) {\n            return true;\n        }\n        return false;\n    };\n    DropDownButton.prototype.appendArrowSpan = function () {\n        this.element.appendChild(this.createElement('span', {\n            className: 'e-btn-icon e-icons ' + 'e-icon-' + (this.cssClass.indexOf(classNames.VERTICAL) > -1\n                ? 'bottom' : 'right') + ' e-caret'\n        }));\n    };\n    DropDownButton.prototype.setActiveElem = function (elem) {\n        this.activeElem = elem;\n    };\n    /**\n     * Get component name.\n     *\n     * @returns {string} - Module Name\n     * @private\n     */\n    DropDownButton.prototype.getModuleName = function () {\n        return 'dropdown-btn';\n    };\n    DropDownButton.prototype.canOpen = function () {\n        var val = false;\n        if (this.isPopupCreated) {\n            val = this.getPopUpElement().classList.contains('e-popup-close');\n        }\n        return val;\n    };\n    /**\n     * Destroys the widget.\n     *\n     * @returns {void}\n     */\n    DropDownButton.prototype.destroy = function () {\n        var _this = this;\n        _super.prototype.destroy.call(this);\n        if (this.getModuleName() === 'dropdown-btn') {\n            var classList_1;\n            if (this.element.querySelector('span.e-caret')) {\n                detach(this.element.querySelector('span.e-caret'));\n            }\n            if (this.cssClass) {\n                classList_1 = this.cssClass.split(' ');\n            }\n            this.button.destroy();\n            if (classList_1) {\n                removeClass([this.element], classList_1);\n            }\n            removeClass(this.activeElem, ['e-active']);\n            var attrList = this.element.getAttribute('class') ? ['aria-haspopup', 'aria-expanded', 'aria-owns', 'type']\n                : ['aria-haspopup', 'aria-expanded', 'aria-owns', 'type', 'class'];\n            attrList.forEach(function (key) {\n                _this.element.removeAttribute(key);\n            });\n            this.popupUnWireEvents();\n            this.destroyPopup();\n            this.isPopupCreated = false;\n            if (!this.disabled) {\n                this.unWireEvents();\n            }\n        }\n    };\n    DropDownButton.prototype.destroyPopup = function () {\n        if (this.isPopupCreated) {\n            this.dropDown.destroy();\n            if (this.getPopUpElement()) {\n                var popupEle = document.getElementById(this.getPopUpElement().id);\n                if (popupEle) {\n                    removeClass([popupEle], ['e-popup-open', 'e-popup-close']);\n                    detach(popupEle);\n                }\n            }\n            EventHandler.remove(this.getPopUpElement(), 'click', this.clickHandler);\n            EventHandler.remove(this.getPopUpElement(), 'keydown', this.keyBoardHandler);\n            if (this.isPopupCreated && this.dropDown) {\n                this.dropDown.element = null;\n                this.dropDown = undefined;\n            }\n        }\n        this.isPopupCreated = false;\n    };\n    DropDownButton.prototype.getPopUpElement = function () {\n        var val = null;\n        if (!this.dropDown && this.activeElem[0].classList.contains('e-split-btn')) {\n            var dropDownBtn = getComponent(this.activeElem[1], 'dropdown-btn');\n            if (dropDownBtn) {\n                this.dropDown = dropDownBtn.dropDown;\n            }\n        }\n        if (this.dropDown) {\n            val = this.dropDown.element;\n        }\n        return val;\n    };\n    DropDownButton.prototype.getULElement = function () {\n        var val = null;\n        if (this.getPopUpElement()) {\n            val = this.getPopUpElement().children[0];\n        }\n        return val;\n    };\n    DropDownButton.prototype.wireEvents = function () {\n        this.delegateMousedownHandler = this.mousedownHandler.bind(this);\n        if (!this.createPopupOnClick) {\n            EventHandler.add(document, 'mousedown touchstart', this.delegateMousedownHandler, this);\n        }\n        EventHandler.add(this.element, 'click', this.clickHandler, this);\n        EventHandler.add(this.element, 'keydown', this.keyBoardHandler, this);\n        EventHandler.add(window, 'resize', this.windowResize, this);\n    };\n    DropDownButton.prototype.windowResize = function () {\n        if (!this.canOpen() && this.dropDown) {\n            this.dropDown.refreshPosition(this.element);\n        }\n    };\n    DropDownButton.prototype.popupWireEvents = function () {\n        if (!this.delegateMousedownHandler) {\n            this.delegateMousedownHandler = this.mousedownHandler.bind(this);\n        }\n        var popupElement = this.getPopUpElement();\n        if (this.createPopupOnClick) {\n            EventHandler.add(document, 'mousedown touchstart', this.delegateMousedownHandler, this);\n        }\n        if (popupElement) {\n            EventHandler.add(popupElement, 'click', this.clickHandler, this);\n            EventHandler.add(popupElement, 'keydown', this.keyBoardHandler, this);\n            if (this.closeActionEvents) {\n                EventHandler.add(popupElement, this.closeActionEvents, this.focusoutHandler, this);\n            }\n        }\n        this.rippleFn = rippleEffect(popupElement, { selector: '.' + classNames.ITEM });\n    };\n    DropDownButton.prototype.popupUnWireEvents = function () {\n        var popupElement = this.getPopUpElement();\n        if (this.createPopupOnClick) {\n            EventHandler.remove(document, 'mousedown touchstart', this.delegateMousedownHandler);\n        }\n        if (popupElement && popupElement.parentElement) {\n            EventHandler.remove(popupElement, 'click', this.clickHandler);\n            EventHandler.remove(popupElement, 'keydown', this.keyBoardHandler);\n            if (this.closeActionEvents) {\n                EventHandler.remove(popupElement, this.closeActionEvents, this.focusoutHandler);\n            }\n        }\n        if (isRippleEnabled && this.rippleFn) {\n            this.rippleFn();\n        }\n    };\n    /**\n     * Handles the keyboard interactions.\n     *\n     * @param {KeyboardEventArgs} e - Specifies keyboard event args.\n     * @returns {void}\n     * @hidden\n     */\n    DropDownButton.prototype.keyBoardHandler = function (e) {\n        if (e.target === this.element && (e.keyCode === 9 || (!e.altKey && e.keyCode === 40) || e.keyCode === 38)) {\n            return;\n        }\n        switch (e.keyCode) {\n            case 38:\n            case 40:\n                if (e.altKey && (e.keyCode === 38 || e.keyCode === 40)) {\n                    this.keyEventHandler(e);\n                }\n                else {\n                    this.upDownKeyHandler(e);\n                }\n                break;\n            case 9:\n            case 13:\n            case 27:\n            case 32:\n                this.keyEventHandler(e);\n                break;\n        }\n    };\n    DropDownButton.prototype.upDownKeyHandler = function (e) {\n        if (this.target && (e.keyCode === 38 || e.keyCode === 40)) {\n            return;\n        }\n        e.preventDefault();\n        upDownKeyHandler(this.getULElement(), e.keyCode);\n    };\n    DropDownButton.prototype.keyEventHandler = function (e) {\n        if (this.target && (e.keyCode === 13 || e.keyCode === 9)) {\n            return;\n        }\n        if (e.keyCode === 13 && this.activeElem[0].classList.contains('e-split-btn')) {\n            this.triggerSelect(e);\n            this.activeElem[0].focus();\n            return;\n        }\n        if (e.target && e.target.className.indexOf('e-edit-template') > -1 && e.keyCode === 32) {\n            return;\n        }\n        if (e.keyCode !== 9) {\n            e.preventDefault();\n        }\n        if (e.keyCode === 27 || e.keyCode === 38 || e.keyCode === 9) {\n            if (!this.canOpen()) {\n                this.closePopup(e, this.element);\n            }\n        }\n        else {\n            this.clickHandler(e);\n        }\n    };\n    DropDownButton.prototype.getLI = function (elem) {\n        return elem.tagName === 'LI' ? elem : closest(elem, 'li');\n    };\n    DropDownButton.prototype.mousedownHandler = function (e) {\n        var trgt = e.target;\n        if (this.dropDown && !this.canOpen() && !(closest(trgt, '[id=\"' + this.getPopUpElement().id + '\"]')\n            || closest(trgt, '[id=\"' + this.element.id + '\"]'))) {\n            this.closePopup(e);\n        }\n    };\n    DropDownButton.prototype.focusoutHandler = function (e) {\n        if (this.isPopupCreated && !this.canOpen()) {\n            var liTarget = e.relatedTarget;\n            if (liTarget && liTarget.className.indexOf('e-item') > -1) {\n                var li = this.getLI(liTarget);\n                if (li) {\n                    var liIdx = Array.prototype.indexOf.call(this.getULElement().children, li);\n                    var item = this.items[liIdx];\n                    if (item) {\n                        var selectEventArgs = { element: li, item: item, event: e };\n                        this.trigger('select', selectEventArgs);\n                    }\n                }\n            }\n            this.closePopup(e);\n        }\n    };\n    DropDownButton.prototype.clickHandler = function (e) {\n        var trgt = e.target;\n        if (closest(trgt, '[id=\"' + this.element.id + '\"]')) {\n            if (!this.createPopupOnClick || (this.target && this.target !== '' && !this.isColorPicker() && !this.createPopupOnClick)) {\n                if (this.getPopUpElement().classList.contains('e-popup-close')) {\n                    this.openPopUp(e);\n                }\n                else {\n                    this.closePopup(e);\n                }\n            }\n            else if (this.isPopupCreated) {\n                this.closePopup(e, this.activeElem[0]);\n            }\n            else {\n                this.createPopup();\n                this.openPopUp(e);\n            }\n        }\n        else {\n            if (closest(trgt, '[id=\"' + this.getPopUpElement().id + '\"]')) {\n                var li = this.getLI(e.target);\n                if (li) {\n                    this.triggerSelect(e);\n                    this.closePopup(e, this.activeElem[0]);\n                }\n            }\n        }\n    };\n    DropDownButton.prototype.triggerSelect = function (e) {\n        var eventArgs;\n        var liIdx;\n        var item;\n        var li = this.getLI(e.target);\n        if (li) {\n            liIdx = Array.prototype.indexOf.call(this.getULElement().children, li);\n            item = this.items[liIdx];\n            if (item) {\n                eventArgs = { element: li, item: item, event: e };\n                this.trigger('select', eventArgs);\n            }\n        }\n    };\n    DropDownButton.prototype.openPopUp = function (e) {\n        var _this = this;\n        if (e === void 0) { e = null; }\n        var isReact = false;\n        var popupElem = this.getPopUpElement();\n        if (!this.target) {\n            this.createItems(true);\n        }\n        else {\n            if (this.activeElem.length > 1) {\n                var splitButton = getComponent(this.activeElem[0], 'split-btn');\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                if (splitButton.isReact && popupElem.childNodes.length < 1) {\n                    isReact = true;\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    splitButton.appendReactElement(this.getTargetElement(), this.getPopUpElement());\n                    this.renderReactTemplates();\n                }\n            }\n            else {\n                // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                if (this.isReact && popupElem.childNodes.length < 1) {\n                    isReact = true;\n                    // eslint-disable-next-line @typescript-eslint/no-explicit-any\n                    this.appendReactElement(this.getTargetElement(), this.getPopUpElement());\n                    this.renderReactTemplates();\n                }\n            }\n        }\n        var ul = this.getULElement();\n        this.popupWireEvents();\n        var beforeOpenArgs = { element: ul, items: this.items, event: e, cancel: false };\n        this.trigger('beforeOpen', beforeOpenArgs, function (observedArgs) {\n            if (!observedArgs.cancel) {\n                var ul_1 = _this.getULElement();\n                _this.dropDown.show(null, _this.element);\n                addClass([_this.element], 'e-active');\n                _this.element.setAttribute('aria-expanded', 'true');\n                _this.element.setAttribute('aria-owns', _this.getPopUpElement().id);\n                if (ul_1) {\n                    ul_1.focus();\n                }\n                if (_this.enableRtl && ul_1.parentElement.style.left !== '0px') {\n                    var wrapperWidth = void 0;\n                    if (_this.element.parentElement && _this.element.parentElement.classList.contains('e-split-btn-wrapper')) {\n                        wrapperWidth = _this.element.parentElement.offsetWidth;\n                    }\n                    else {\n                        wrapperWidth = _this.element.offsetWidth;\n                    }\n                    var popupRect = ul_1.parentElement.offsetWidth - wrapperWidth;\n                    var popupLeft = parseFloat(ul_1.parentElement.style.left) - popupRect;\n                    if (popupLeft < 0) {\n                        popupLeft = 0;\n                    }\n                    ul_1.parentElement.style.left = popupLeft + \"px\";\n                }\n                var openArgs = { element: ul_1, items: _this.items };\n                _this.trigger('open', openArgs);\n            }\n        });\n    };\n    DropDownButton.prototype.closePopup = function (e, focusEle) {\n        var _this = this;\n        if (e === void 0) { e = null; }\n        var ul = this.getULElement();\n        var beforeCloseArgs = { element: ul, items: this.items, event: e, cancel: false };\n        this.trigger('beforeClose', beforeCloseArgs, function (observedArgs) {\n            if (!observedArgs.cancel) {\n                var popupElement = _this.getPopUpElement();\n                if (popupElement) {\n                    EventHandler.remove(popupElement, 'keydown', _this.keyBoardHandler);\n                }\n                _this.popupUnWireEvents();\n                var ul_2 = _this.getULElement();\n                var selectedLi = void 0;\n                if (ul_2) {\n                    selectedLi = ul_2.querySelector('.e-selected');\n                }\n                if (selectedLi) {\n                    selectedLi.classList.remove('e-selected');\n                }\n                _this.dropDown.hide();\n                removeClass(_this.activeElem, 'e-active');\n                _this.element.setAttribute('aria-expanded', 'false');\n                _this.element.removeAttribute('aria-owns');\n                if (focusEle) {\n                    focusEle.focus();\n                }\n                var closeArgs = { element: ul_2, items: _this.items };\n                _this.trigger('close', closeArgs);\n                if (!_this.target && ul_2) {\n                    detach(ul_2);\n                }\n                if (!_this.target || _this.isColorPicker() || (_this.target && !_this.isColorPicker())) {\n                    if (_this.createPopupOnClick) {\n                        _this.destroyPopup();\n                    }\n                }\n            }\n            else {\n                if (ul) {\n                    ul.focus();\n                }\n            }\n        });\n    };\n    DropDownButton.prototype.unWireEvents = function () {\n        if (!this.createPopupOnClick) {\n            EventHandler.remove(document, 'mousedown touchstart', this.delegateMousedownHandler);\n        }\n        EventHandler.remove(this.element, 'click', this.clickHandler);\n        EventHandler.remove(this.element, 'keydown', this.keyBoardHandler);\n        if (this.isPopupCreated) {\n            EventHandler.remove(this.getPopUpElement(), 'click', this.clickHandler);\n            EventHandler.remove(this.getPopUpElement(), 'keydown', this.keyBoardHandler);\n        }\n        EventHandler.remove(window, 'resize', this.windowResize);\n    };\n    /**\n     * Called internally if any of the property value changed.\n     *\n     * @param  {DropDownButtonModel} newProp - Specifies new properties\n     * @param  {DropDownButtonModel} oldProp - Specifies old properties\n     * @returns {void}\n     * @private\n     */\n    DropDownButton.prototype.onPropertyChanged = function (newProp, oldProp) {\n        var btnModel = ['content', 'cssClass', 'iconCss', 'iconPosition', 'disabled', 'enableRtl'];\n        this.button.setProperties(getModel(newProp, btnModel));\n        var popupElement;\n        if (this.isPopupCreated) {\n            popupElement = this.getPopUpElement();\n            this.dropDown.setProperties(getModel(newProp, ['enableRtl']));\n        }\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'content':\n                    if (!this.element.querySelector('span.e-caret')) {\n                        this.appendArrowSpan();\n                    }\n                    break;\n                case 'disabled':\n                    if (newProp.disabled) {\n                        this.unWireEvents();\n                        if (this.isPopupCreated && !this.canOpen()) {\n                            this.closePopup();\n                        }\n                    }\n                    else {\n                        this.wireEvents();\n                    }\n                    break;\n                case 'cssClass':\n                    if (newProp.cssClass.indexOf(classNames.VERTICAL) > -1 || oldProp.cssClass.indexOf(classNames.VERTICAL) > -1) {\n                        if (!this.element.querySelector('span.e-caret')) {\n                            this.appendArrowSpan();\n                        }\n                        var arrowSpan = this.element.querySelector('span.e-caret');\n                        newProp.cssClass.indexOf(classNames.VERTICAL) > -1 ? classList(arrowSpan, ['e-icon-bottom'], ['e-icon-right'])\n                            : classList(arrowSpan, ['e-icon-right'], ['e-icon-bottom']);\n                    }\n                    if (this.isPopupCreated) {\n                        if (oldProp.cssClass) {\n                            removeClass([popupElement], oldProp.cssClass.split(' '));\n                        }\n                        if (newProp.cssClass) {\n                            addClass([popupElement], newProp.cssClass.replace(/\\s+/g, ' ').trim().split(' '));\n                        }\n                    }\n                    break;\n                case 'target':\n                    this.dropDown.content = this.getTargetElement();\n                    this.dropDown.dataBind();\n                    break;\n                case 'items':\n                    if (this.isPopupCreated && this.getULElement()) {\n                        this.createItems();\n                    }\n                    break;\n                case 'createPopupOnClick':\n                    if (newProp.createPopupOnClick) {\n                        this.destroyPopup();\n                    }\n                    else {\n                        this.createPopup();\n                    }\n                    break;\n            }\n        }\n    };\n    /**\n     * Sets the focus to DropDownButton\n     * its native method\n     *\n     * @public\n     * @returns {void}\n     */\n    DropDownButton.prototype.focusIn = function () {\n        this.element.focus();\n    };\n    __decorate([\n        Property('')\n    ], DropDownButton.prototype, \"content\", void 0);\n    __decorate([\n        Property('')\n    ], DropDownButton.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(false)\n    ], DropDownButton.prototype, \"disabled\", void 0);\n    __decorate([\n        Property('')\n    ], DropDownButton.prototype, \"iconCss\", void 0);\n    __decorate([\n        Property('Left')\n    ], DropDownButton.prototype, \"iconPosition\", void 0);\n    __decorate([\n        Property(false)\n    ], DropDownButton.prototype, \"enableHtmlSanitizer\", void 0);\n    __decorate([\n        Collection([], Item)\n    ], DropDownButton.prototype, \"items\", void 0);\n    __decorate([\n        Property(false)\n    ], DropDownButton.prototype, \"createPopupOnClick\", void 0);\n    __decorate([\n        Property('')\n    ], DropDownButton.prototype, \"target\", void 0);\n    __decorate([\n        Property('')\n    ], DropDownButton.prototype, \"closeActionEvents\", void 0);\n    __decorate([\n        Event()\n    ], DropDownButton.prototype, \"beforeItemRender\", void 0);\n    __decorate([\n        Event()\n    ], DropDownButton.prototype, \"beforeOpen\", void 0);\n    __decorate([\n        Event()\n    ], DropDownButton.prototype, \"beforeClose\", void 0);\n    __decorate([\n        Event()\n    ], DropDownButton.prototype, \"close\", void 0);\n    __decorate([\n        Event()\n    ], DropDownButton.prototype, \"open\", void 0);\n    __decorate([\n        Event()\n    ], DropDownButton.prototype, \"select\", void 0);\n    __decorate([\n        Event()\n    ], DropDownButton.prototype, \"created\", void 0);\n    DropDownButton = __decorate([\n        NotifyPropertyChanges\n    ], DropDownButton);\n    return DropDownButton;\n}(Component));\nexport { DropDownButton };\n","//! moment.js locale configuration\n//! locale : Cambodian [km]\n//! author : Kruy Vanna : https://github.com/kruyvanna\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '១',\n            2: '២',\n            3: '៣',\n            4: '៤',\n            5: '៥',\n            6: '៦',\n            7: '៧',\n            8: '៨',\n            9: '៩',\n            0: '០',\n        },\n        numberMap = {\n            '១': '1',\n            '២': '2',\n            '៣': '3',\n            '៤': '4',\n            '៥': '5',\n            '៦': '6',\n            '៧': '7',\n            '៨': '8',\n            '៩': '9',\n            '០': '0',\n        };\n\n    var km = moment.defineLocale('km', {\n        months: 'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n            '_'\n        ),\n        monthsShort:\n            'មករា_កុម្ភៈ_មីនា_មេសា_ឧសភា_មិថុនា_កក្កដា_សីហា_កញ្ញា_តុលា_វិច្ឆិកា_ធ្នូ'.split(\n                '_'\n            ),\n        weekdays: 'អាទិត្យ_ច័ន្ទ_អង្គារ_ពុធ_ព្រហស្បតិ៍_សុក្រ_សៅរ៍'.split('_'),\n        weekdaysShort: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysMin: 'អា_ច_អ_ព_ព្រ_សុ_ស'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        meridiemParse: /ព្រឹក|ល្ងាច/,\n        isPM: function (input) {\n            return input === 'ល្ងាច';\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 12) {\n                return 'ព្រឹក';\n            } else {\n                return 'ល្ងាច';\n            }\n        },\n        calendar: {\n            sameDay: '[ថ្ងៃនេះ ម៉ោង] LT',\n            nextDay: '[ស្អែក ម៉ោង] LT',\n            nextWeek: 'dddd [ម៉ោង] LT',\n            lastDay: '[ម្សិលមិញ ម៉ោង] LT',\n            lastWeek: 'dddd [សប្តាហ៍មុន] [ម៉ោង] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sទៀត',\n            past: '%sមុន',\n            s: 'ប៉ុន្មានវិនាទី',\n            ss: '%d វិនាទី',\n            m: 'មួយនាទី',\n            mm: '%d នាទី',\n            h: 'មួយម៉ោង',\n            hh: '%d ម៉ោង',\n            d: 'មួយថ្ងៃ',\n            dd: '%d ថ្ងៃ',\n            M: 'មួយខែ',\n            MM: '%d ខែ',\n            y: 'មួយឆ្នាំ',\n            yy: '%d ឆ្នាំ',\n        },\n        dayOfMonthOrdinalParse: /ទី\\d{1,2}/,\n        ordinal: 'ទី%d',\n        preparse: function (string) {\n            return string.replace(/[១២៣៤៥៦៧៨៩០]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return km;\n\n})));\n","/* eslint-disable jsdoc/require-returns */\n/**\n * Numeric Range.\n *\n * @private\n */\nvar DoubleRange = /** @class */ (function () {\n    function DoubleRange(start, end) {\n        /*\n          if (!isNaN(start) && !isNaN(end)) {\n           this.mIsEmpty = true;\n          } else {\n              this.mIsEmpty = false;\n          }*/\n        if (start < end) {\n            this.mStart = start;\n            this.mEnd = end;\n        }\n        else {\n            this.mStart = end;\n            this.mEnd = start;\n        }\n    }\n    Object.defineProperty(DoubleRange.prototype, \"start\", {\n        //private mIsEmpty: boolean;\n        /** @private */\n        get: function () {\n            return this.mStart;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DoubleRange.prototype, \"end\", {\n        /** @private */\n        get: function () {\n            return this.mEnd;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DoubleRange.prototype, \"delta\", {\n        /*\n          get isEmpty(): boolean {\n             return this.mIsEmpty;\n         }*/\n        /** @private */\n        get: function () {\n            return (this.mEnd - this.mStart);\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(DoubleRange.prototype, \"median\", {\n        /** @private */\n        get: function () {\n            return this.mStart + (this.mEnd - this.mStart) / 2;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    return DoubleRange;\n}());\nexport { DoubleRange };\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Row\n *\n * @hidden\n */\nvar Row = /** @class */ (function () {\n    function Row(options, parent) {\n        merge(this, options);\n        this.parent = parent;\n    }\n    Row.prototype.clone = function () {\n        var row = new Row({});\n        merge(row, this);\n        row.cells = this.cells.map(function (cell) { return cell.clone(); });\n        return row;\n    };\n    /**\n     * Replaces the row data and grid refresh the particular row element only.\n     *\n     * @param  {Object} data - To update new data for the particular row.\n     * @returns {void}\n     */\n    Row.prototype.setRowValue = function (data) {\n        if (!this.parent) {\n            return;\n        }\n        var key = this.data[this.parent.getPrimaryKeyFieldNames()[0]];\n        this.parent.setRowData(key, data);\n    };\n    /**\n     * Replaces the given field value and refresh the particular cell element only.\n     *\n     * @param {string} field - Specifies the field name which you want to update.\n     * @param {string | number | boolean | Date} value - To update new value for the particular cell.\n     * @returns {void}\n     */\n    Row.prototype.setCellValue = function (field, value) {\n        if (!this.parent) {\n            return;\n        }\n        var isValDiff = !(this.data[\"\" + field].toString() === value.toString());\n        if (isValDiff) {\n            var pKeyField = this.parent.getPrimaryKeyFieldNames()[0];\n            var key = this.data[\"\" + pKeyField];\n            this.parent.setCellValue(key, field, value);\n            this.makechanges(pKeyField, this.data);\n        }\n        else {\n            return;\n        }\n    };\n    Row.prototype.makechanges = function (key, data) {\n        if (!this.parent) {\n            return;\n        }\n        var gObj = this.parent;\n        var dataManager = gObj.getDataModule().dataManager;\n        dataManager.update(key, data);\n    };\n    return Row;\n}());\nexport { Row };\n","//! moment.js locale configuration\n//! locale : Malay [ms]\n//! author : Weldan Jamili : https://github.com/weldan\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var ms = moment.defineLocale('ms', {\n        months: 'Januari_Februari_Mac_April_Mei_Jun_Julai_Ogos_September_Oktober_November_Disember'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mac_Apr_Mei_Jun_Jul_Ogs_Sep_Okt_Nov_Dis'.split('_'),\n        weekdays: 'Ahad_Isnin_Selasa_Rabu_Khamis_Jumaat_Sabtu'.split('_'),\n        weekdaysShort: 'Ahd_Isn_Sel_Rab_Kha_Jum_Sab'.split('_'),\n        weekdaysMin: 'Ah_Is_Sl_Rb_Km_Jm_Sb'.split('_'),\n        longDateFormat: {\n            LT: 'HH.mm',\n            LTS: 'HH.mm.ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY [pukul] HH.mm',\n            LLLL: 'dddd, D MMMM YYYY [pukul] HH.mm',\n        },\n        meridiemParse: /pagi|tengahari|petang|malam/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'pagi') {\n                return hour;\n            } else if (meridiem === 'tengahari') {\n                return hour >= 11 ? hour : hour + 12;\n            } else if (meridiem === 'petang' || meridiem === 'malam') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours < 11) {\n                return 'pagi';\n            } else if (hours < 15) {\n                return 'tengahari';\n            } else if (hours < 19) {\n                return 'petang';\n            } else {\n                return 'malam';\n            }\n        },\n        calendar: {\n            sameDay: '[Hari ini pukul] LT',\n            nextDay: '[Esok pukul] LT',\n            nextWeek: 'dddd [pukul] LT',\n            lastDay: '[Kelmarin pukul] LT',\n            lastWeek: 'dddd [lepas pukul] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'dalam %s',\n            past: '%s yang lepas',\n            s: 'beberapa saat',\n            ss: '%d saat',\n            m: 'seminit',\n            mm: '%d minit',\n            h: 'sejam',\n            hh: '%d jam',\n            d: 'sehari',\n            dd: '%d hari',\n            M: 'sebulan',\n            MM: '%d bulan',\n            y: 'setahun',\n            yy: '%d tahun',\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 7, // The week that contains Jan 7th is the first week of the year.\n        },\n    });\n\n    return ms;\n\n})));\n","//! moment.js locale configuration\n//! locale : Estonian [et]\n//! author : Henry Kehlmann : https://github.com/madhenry\n//! improvements : Illimar Tambek : https://github.com/ragulka\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    function processRelativeTime(number, withoutSuffix, key, isFuture) {\n        var format = {\n            s: ['mõne sekundi', 'mõni sekund', 'paar sekundit'],\n            ss: [number + 'sekundi', number + 'sekundit'],\n            m: ['ühe minuti', 'üks minut'],\n            mm: [number + ' minuti', number + ' minutit'],\n            h: ['ühe tunni', 'tund aega', 'üks tund'],\n            hh: [number + ' tunni', number + ' tundi'],\n            d: ['ühe päeva', 'üks päev'],\n            M: ['kuu aja', 'kuu aega', 'üks kuu'],\n            MM: [number + ' kuu', number + ' kuud'],\n            y: ['ühe aasta', 'aasta', 'üks aasta'],\n            yy: [number + ' aasta', number + ' aastat'],\n        };\n        if (withoutSuffix) {\n            return format[key][2] ? format[key][2] : format[key][1];\n        }\n        return isFuture ? format[key][0] : format[key][1];\n    }\n\n    var et = moment.defineLocale('et', {\n        months: 'jaanuar_veebruar_märts_aprill_mai_juuni_juuli_august_september_oktoober_november_detsember'.split(\n            '_'\n        ),\n        monthsShort:\n            'jaan_veebr_märts_apr_mai_juuni_juuli_aug_sept_okt_nov_dets'.split('_'),\n        weekdays:\n            'pühapäev_esmaspäev_teisipäev_kolmapäev_neljapäev_reede_laupäev'.split(\n                '_'\n            ),\n        weekdaysShort: 'P_E_T_K_N_R_L'.split('_'),\n        weekdaysMin: 'P_E_T_K_N_R_L'.split('_'),\n        longDateFormat: {\n            LT: 'H:mm',\n            LTS: 'H:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'D. MMMM YYYY',\n            LLL: 'D. MMMM YYYY H:mm',\n            LLLL: 'dddd, D. MMMM YYYY H:mm',\n        },\n        calendar: {\n            sameDay: '[Täna,] LT',\n            nextDay: '[Homme,] LT',\n            nextWeek: '[Järgmine] dddd LT',\n            lastDay: '[Eile,] LT',\n            lastWeek: '[Eelmine] dddd LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s pärast',\n            past: '%s tagasi',\n            s: processRelativeTime,\n            ss: processRelativeTime,\n            m: processRelativeTime,\n            mm: processRelativeTime,\n            h: processRelativeTime,\n            hh: processRelativeTime,\n            d: processRelativeTime,\n            dd: '%d päeva',\n            M: processRelativeTime,\n            MM: processRelativeTime,\n            y: processRelativeTime,\n            yy: processRelativeTime,\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return et;\n\n})));\n","//! moment.js locale configuration\n//! locale : English (India) [en-in]\n//! author : Jatin Agrawal : https://github.com/jatinag22\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var enIn = moment.defineLocale('en-in', {\n        months: 'January_February_March_April_May_June_July_August_September_October_November_December'.split(\n            '_'\n        ),\n        monthsShort: 'Jan_Feb_Mar_Apr_May_Jun_Jul_Aug_Sep_Oct_Nov_Dec'.split('_'),\n        weekdays: 'Sunday_Monday_Tuesday_Wednesday_Thursday_Friday_Saturday'.split(\n            '_'\n        ),\n        weekdaysShort: 'Sun_Mon_Tue_Wed_Thu_Fri_Sat'.split('_'),\n        weekdaysMin: 'Su_Mo_Tu_We_Th_Fr_Sa'.split('_'),\n        longDateFormat: {\n            LT: 'h:mm A',\n            LTS: 'h:mm:ss A',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY h:mm A',\n            LLLL: 'dddd, D MMMM YYYY h:mm A',\n        },\n        calendar: {\n            sameDay: '[Today at] LT',\n            nextDay: '[Tomorrow at] LT',\n            nextWeek: 'dddd [at] LT',\n            lastDay: '[Yesterday at] LT',\n            lastWeek: '[Last] dddd [at] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'in %s',\n            past: '%s ago',\n            s: 'a few seconds',\n            ss: '%d seconds',\n            m: 'a minute',\n            mm: '%d minutes',\n            h: 'an hour',\n            hh: '%d hours',\n            d: 'a day',\n            dd: '%d days',\n            M: 'a month',\n            MM: '%d months',\n            y: 'a year',\n            yy: '%d years',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(st|nd|rd|th)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 1st is the first week of the year.\n        },\n    });\n\n    return enIn;\n\n})));\n","//! moment.js locale configuration\n//! locale : Sinhalese [si]\n//! author : Sampath Sitinamaluwa : https://github.com/sampathsris\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    /*jshint -W100*/\n    var si = moment.defineLocale('si', {\n        months: 'ජනවාරි_පෙබරවාරි_මාර්තු_අප්‍රේල්_මැයි_ජූනි_ජූලි_අගෝස්තු_සැප්තැම්බර්_ඔක්තෝබර්_නොවැම්බර්_දෙසැම්බර්'.split(\n            '_'\n        ),\n        monthsShort: 'ජන_පෙබ_මාර්_අප්_මැයි_ජූනි_ජූලි_අගෝ_සැප්_ඔක්_නොවැ_දෙසැ'.split(\n            '_'\n        ),\n        weekdays:\n            'ඉරිදා_සඳුදා_අඟහරුවාදා_බදාදා_බ්‍රහස්පතින්දා_සිකුරාදා_සෙනසුරාදා'.split(\n                '_'\n            ),\n        weekdaysShort: 'ඉරි_සඳු_අඟ_බදා_බ්‍රහ_සිකු_සෙන'.split('_'),\n        weekdaysMin: 'ඉ_ස_අ_බ_බ්‍ර_සි_සෙ'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'a h:mm',\n            LTS: 'a h:mm:ss',\n            L: 'YYYY/MM/DD',\n            LL: 'YYYY MMMM D',\n            LLL: 'YYYY MMMM D, a h:mm',\n            LLLL: 'YYYY MMMM D [වැනි] dddd, a h:mm:ss',\n        },\n        calendar: {\n            sameDay: '[අද] LT[ට]',\n            nextDay: '[හෙට] LT[ට]',\n            nextWeek: 'dddd LT[ට]',\n            lastDay: '[ඊයේ] LT[ට]',\n            lastWeek: '[පසුගිය] dddd LT[ට]',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%sකින්',\n            past: '%sකට පෙර',\n            s: 'තත්පර කිහිපය',\n            ss: 'තත්පර %d',\n            m: 'මිනිත්තුව',\n            mm: 'මිනිත්තු %d',\n            h: 'පැය',\n            hh: 'පැය %d',\n            d: 'දිනය',\n            dd: 'දින %d',\n            M: 'මාසය',\n            MM: 'මාස %d',\n            y: 'වසර',\n            yy: 'වසර %d',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2} වැනි/,\n        ordinal: function (number) {\n            return number + ' වැනි';\n        },\n        meridiemParse: /පෙර වරු|පස් වරු|පෙ.ව|ප.ව./,\n        isPM: function (input) {\n            return input === 'ප.ව.' || input === 'පස් වරු';\n        },\n        meridiem: function (hours, minutes, isLower) {\n            if (hours > 11) {\n                return isLower ? 'ප.ව.' : 'පස් වරු';\n            } else {\n                return isLower ? 'පෙ.ව.' : 'පෙර වරු';\n            }\n        },\n    });\n\n    return si;\n\n})));\n","import { merge } from '@syncfusion/ej2-base';\n/**\n * Cell\n *\n * @hidden\n */\nvar Cell = /** @class */ (function () {\n    function Cell(options) {\n        this.isSpanned = false;\n        this.isRowSpanned = false;\n        merge(this, options);\n    }\n    Cell.prototype.clone = function () {\n        var cell = new Cell({});\n        merge(cell, this);\n        return cell;\n    };\n    return Cell;\n}());\nexport { Cell };\n","import { EventHandler, detach, formatUnit, Browser, closest } from '@syncfusion/ej2-base';\nimport { Column } from '../models/column';\nimport { ColumnWidthService } from '../services/width-controller';\nimport * as events from '../base/constant';\nimport { getScrollBarWidth, parentsUntil, Global, frozenDirection, isChildColumn, applyStickyLeftRightPosition, groupCaptionRowLeftRightPos } from '../base/util';\nimport { isNullOrUndefined, addClass, removeClass } from '@syncfusion/ej2-base';\nimport * as literals from '../base/string-literals';\nexport var resizeClassList = {\n    root: 'e-rhandler',\n    suppress: 'e-rsuppress',\n    icon: 'e-ricon',\n    helper: 'e-rhelper',\n    header: 'th.e-headercell',\n    cursor: 'e-rcursor'\n};\n/**\n * `Resize` module is used to handle Resize to fit for columns.\n *\n * @hidden\n * @private\n */\nvar Resize = /** @class */ (function () {\n    /**\n     * Constructor for the Grid resize module\n     *\n     * @param {IGrid} parent - specifies the IGrid\n     * @hidden\n     */\n    function Resize(parent) {\n        this.tapped = false;\n        this.isDblClk = true;\n        /** @hidden */\n        this.resizeProcess = false;\n        this.parent = parent;\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.widthService = new ColumnWidthService(parent);\n        this.addEventListener();\n    }\n    /**\n     * Resize by field names.\n     *\n     * @param  {string|string[]} fName - Defines the field name.\n     * @returns {void}\n     */\n    Resize.prototype.autoFitColumns = function (fName) {\n        var columnName = (fName === undefined || fName === null || fName.length <= 0) ?\n            this.parent.getColumns().map(function (x) { return x.field; }) : (typeof fName === 'string') ? [fName] : fName;\n        this.parent.isAutoFitColumns = true;\n        if (this.parent.enableAdaptiveUI) {\n            this.parent.element.classList.add('e-grid-autofit');\n        }\n        this.findColumn(columnName);\n    };\n    Resize.prototype.autoFit = function () {\n        var newarray = this.parent.getColumns().filter(function (c) { return c.autoFit === true; })\n            .map(function (c) { return c.field || c.headerText; });\n        if (newarray.length > 0) {\n            this.autoFitColumns(newarray);\n        }\n        if (this.parent.resizeSettings.mode === 'Auto') {\n            this.widthService.setWidthToTable();\n        }\n    };\n    Resize.prototype.resizeColumn = function (fName, index, id) {\n        var gObj = this.parent;\n        var tWidth = 0;\n        var headerTable = gObj.getHeaderTable();\n        var contentTable = gObj.getContentTable();\n        var footerTable;\n        var headerDivTag = 'e-gridheader';\n        var contentDivTag = literals.gridContent;\n        var footerDivTag = literals.gridFooter;\n        var indentWidth = 0;\n        var uid = id ? id : this.parent.getUidByColumnField(fName);\n        var columnIndex = this.parent.getNormalizedColumnIndex(uid);\n        var headerTextClone = headerTable.querySelector('[e-mappinguid=\"' + uid + '\"]').parentElement.cloneNode(true);\n        var contentTextClone = contentTable.querySelectorAll(\"td.e-rowcell:nth-child(\" + (columnIndex + 1) + \"):not(.e-groupcaption):not(.e-detailcell)\");\n        var footerTextClone;\n        var columnIndexByField = this.parent.getColumnIndexByField(fName);\n        if (!isNullOrUndefined(gObj.getFooterContent())) {\n            footerTable = gObj.getFooterContentTable();\n        }\n        if (footerTable) {\n            footerTextClone = footerTable.querySelectorAll(\"td:nth-child(\" + (columnIndex + 1) + \"):not(.e-groupcaption)\");\n        }\n        var indentWidthClone = [].slice.call(headerTable.querySelector('tr').getElementsByClassName('e-grouptopleftcell'));\n        if (indentWidthClone.length > 0) {\n            for (var i = 0; i < indentWidthClone.length; i++) {\n                indentWidth += indentWidthClone[parseInt(i.toString(), 10)].offsetWidth;\n            }\n        }\n        var detailsElement = contentTable.querySelector('.e-detailrowcollapse') ||\n            contentTable.querySelector('.e-detailrowexpand');\n        if ((this.parent.detailTemplate || this.parent.childGrid) && detailsElement) {\n            indentWidth += detailsElement.offsetWidth;\n        }\n        var headerText = [headerTextClone];\n        var contentText = [];\n        var footerText = [];\n        if (footerTable) {\n            for (var i = 0; i < footerTextClone.length; i++) {\n                footerText[parseInt(i.toString(), 10)] = footerTextClone[parseInt(i.toString(), 10)].cloneNode(true);\n            }\n        }\n        for (var i = 0; i < contentTextClone.length; i++) {\n            contentText[parseInt(i.toString(), 10)] = contentTextClone[parseInt(i.toString(), 10)].cloneNode(true);\n        }\n        var wHeader = this.createTable(headerTable, headerText, headerDivTag);\n        var wFooter = null;\n        var wContent = null;\n        if (gObj.getCurrentViewRecords().length) {\n            wContent = this.createTable(contentTable, contentText, contentDivTag);\n        }\n        if (footerText.length) {\n            wFooter = this.createTable(footerTable, footerText, footerDivTag);\n        }\n        var columnbyindex = gObj.getColumns()[parseInt(columnIndexByField.toString(), 10)];\n        var width = columnbyindex.width = formatUnit(Math.max(wHeader, wContent, wFooter));\n        var colMaxWidth = columnbyindex.maxWidth && parseFloat(columnbyindex.maxWidth.toString());\n        if (parseInt(width, 10) > colMaxWidth) {\n            columnbyindex.width = colMaxWidth;\n        }\n        this.widthService.setColumnWidth(gObj.getColumns()[parseInt(columnIndexByField.toString(), 10)]);\n        var result = gObj.getColumns().some(function (x) { return x.width === null\n            || x.width === undefined || x.width.length <= 0; });\n        if (result === false) {\n            var element = gObj.getColumns();\n            for (var i = 0; i < element.length; i++) {\n                if (element[parseInt(i.toString(), 10)].visible) {\n                    tWidth = tWidth + parseFloat(element[parseInt(i.toString(), 10)].width);\n                }\n            }\n        }\n        var calcTableWidth = tWidth + indentWidth;\n        if (tWidth > 0) {\n            if (this.parent.detailTemplate || this.parent.childGrid) {\n                this.widthService.setColumnWidth(new Column({ width: '30px' }));\n            }\n            if (this.parent.resizeSettings.mode === 'Auto') {\n                calcTableWidth = '100%';\n            }\n            headerTable.style.width = formatUnit(calcTableWidth);\n            contentTable.style.width = formatUnit(calcTableWidth);\n            if (!isNullOrUndefined(footerTable)) {\n                footerTable.style.width = formatUnit(calcTableWidth);\n            }\n        }\n        if (gObj.isFrozenGrid() && gObj.enableColumnVirtualization) {\n            this.widthService.refreshFrozenScrollbar();\n        }\n        var tableWidth = headerTable.offsetWidth;\n        var contentwidth = (gObj.getContent().scrollWidth);\n        if (contentwidth > tableWidth) {\n            if (!isNullOrUndefined(contentTable.querySelector('.e-emptyrow'))) {\n                addClass([headerTable], ['e-tableborder']);\n                removeClass([contentTable], ['e-tableborder']);\n            }\n            else {\n                addClass([headerTable, contentTable], ['e-tableborder']);\n            }\n        }\n        else {\n            removeClass([headerTable, contentTable], ['e-tableborder']);\n        }\n        if (!isNullOrUndefined(footerTable)) {\n            footerTable.classList.add('e-tableborder');\n        }\n    };\n    /**\n     * To destroy the resize\n     *\n     * @returns {void}\n     * @hidden\n     */\n    Resize.prototype.destroy = function () {\n        var gridElement = this.parent.element;\n        if (!gridElement || (!gridElement.querySelector('.' + literals.gridHeader) && !gridElement.querySelector('.' + literals.gridContent))) {\n            return;\n        }\n        this.widthService = null;\n        this.unwireEvents();\n        this.removeEventListener();\n    };\n    /**\n     * For internal use only - Get the module name.\n     *\n     * @returns {string} returns the module name\n     * @private\n     */\n    Resize.prototype.getModuleName = function () {\n        return 'resize';\n    };\n    Resize.prototype.findColumn = function (fName) {\n        for (var i = 0; i < fName.length; i++) {\n            var fieldName = fName[parseInt(i.toString(), 10)];\n            var columnIndex = this.parent.getColumnIndexByField(fieldName);\n            var column = this.parent.getColumns()[parseInt(columnIndex.toString(), 10)];\n            if (columnIndex > -1 && !isNullOrUndefined(column) && column.visible === true) {\n                this.resizeColumn(fieldName, columnIndex);\n            }\n        }\n        if (this.parent.allowTextWrap) {\n            this.parent.notify(events.freezeRender, { case: 'refreshHeight', isModeChg: true });\n        }\n        if (this.parent.isFrozenGrid()) {\n            this.refreshResizefrzCols(true, true);\n        }\n    };\n    /**\n     * To create table for autofit\n     *\n     * @param {Element} table - specifies the table\n     * @param {Element[]} text - specifies the text\n     * @param {string} tag - specifies the tag name\n     * @returns {number} returns the number\n     * @hidden\n     */\n    Resize.prototype.createTable = function (table, text, tag) {\n        var myTableDiv = this.parent.createElement('div');\n        var adaptiveClass = this.parent.enableAdaptiveUI ? ' e-bigger' : '';\n        myTableDiv.className = this.parent.element.className + adaptiveClass;\n        myTableDiv.style.cssText = 'display: inline-block;visibility:hidden;position:absolute';\n        var mySubDiv = this.parent.createElement('div');\n        mySubDiv.className = tag;\n        var myTable = this.parent.createElement('table', { attrs: { role: 'grid' } });\n        myTable.className = table.className;\n        myTable.classList.add('e-resizetable');\n        myTable.style.cssText = 'table-layout: auto;width: auto';\n        var myTr = this.parent.createElement('tr');\n        for (var i = 0; i < text.length; i++) {\n            var tr = myTr.cloneNode();\n            tr.className = table.querySelector('tr').className;\n            tr.appendChild(text[parseInt(i.toString(), 10)]);\n            myTable.appendChild(tr);\n        }\n        mySubDiv.appendChild(myTable);\n        myTableDiv.appendChild(mySubDiv);\n        document.body.appendChild(myTableDiv);\n        var offsetWidthValue = myTable.getBoundingClientRect().width;\n        document.body.removeChild(myTableDiv);\n        return Math.ceil(offsetWidthValue);\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Resize.prototype.addEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.on(events.headerRefreshed, this.refreshHeight, this);\n        this.parent.on(events.refreshResizePosition, this.refreshResizePosition, this);\n        this.parent.on(events.initialEnd, this.wireEvents, this);\n        this.parent.on(events.contentReady, this.autoFit, this);\n        this.parent.on(events.refreshHandlers, this.refreshHeight, this);\n        this.parent.on(events.destroy, this.destroy, this);\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Resize.prototype.removeEventListener = function () {\n        if (this.parent.isDestroyed) {\n            return;\n        }\n        this.parent.off(events.headerRefreshed, this.refreshHeight);\n        this.parent.off(events.refreshResizePosition, this.refreshResizePosition);\n        this.parent.off(events.initialEnd, this.wireEvents);\n        this.parent.off(events.refreshHandlers, this.refreshHeight);\n        this.parent.off(events.destroy, this.destroy);\n    };\n    /**\n     * @returns {void}\n     * @hidden\n     */\n    Resize.prototype.render = function () {\n        this.unwireEvents();\n        this.wireEvents();\n        this.setHandlerHeight();\n    };\n    Resize.prototype.refreshHeight = function () {\n        if (this.parent.getHeaderTable()) {\n            var element = this.getResizeHandlers();\n            for (var i = 0; i < element.length; i++) {\n                if (element[parseInt(i.toString(), 10)].parentElement.offsetHeight > 0) {\n                    element[parseInt(i.toString(), 10)].style.height = element[parseInt(i.toString(), 10)].parentElement.offsetHeight + 'px';\n                }\n            }\n            this.setHandlerHeight();\n        }\n    };\n    Resize.prototype.wireEvents = function () {\n        EventHandler.add(this.parent.getHeaderContent(), Browser.touchStartEvent, this.touchResizeStart, this);\n        EventHandler.add(this.parent.getHeaderContent(), events.dblclick, this.callAutoFit, this);\n    };\n    Resize.prototype.unwireEvents = function () {\n        EventHandler.remove(this.parent.getHeaderContent(), Browser.touchStartEvent, this.touchResizeStart);\n        EventHandler.remove(this.parent.getHeaderContent(), events.dblclick, this.callAutoFit);\n    };\n    Resize.prototype.getResizeHandlers = function () {\n        return [].slice.call(this.parent.getHeaderTable().getElementsByClassName(resizeClassList.root));\n    };\n    Resize.prototype.setHandlerHeight = function () {\n        var element = [].slice.call(this.parent.getHeaderTable().getElementsByClassName(resizeClassList.suppress));\n        for (var i = 0; i < element.length; i++) {\n            element[parseInt(i.toString(), 10)].style.height = element[parseInt(i.toString(), 10)].parentElement.offsetHeight + 'px';\n        }\n    };\n    Resize.prototype.callAutoFit = function (e) {\n        if (e.target.classList.contains('e-rhandler')) {\n            var col = this.getTargetColumn(e);\n            if (col.columns) {\n                return;\n            }\n            this.resizeColumn(col.field, this.parent.getNormalizedColumnIndex(col.uid), col.uid);\n            var header = closest(e.target, resizeClassList.header);\n            header.classList.add('e-resized');\n        }\n    };\n    Resize.prototype.touchResizeStart = function (e) {\n        if (!Global.timer) {\n            Global.timer = setTimeout(function () {\n                Global.timer = null;\n            }, 300);\n            return this.resizeStart(e);\n        }\n        else {\n            clearTimeout(Global.timer);\n            Global.timer = null;\n            this.callAutoFit(e);\n        }\n    };\n    Resize.prototype.resizeStart = function (e) {\n        var _this = this;\n        if (e.target.classList.contains('e-rhandler')) {\n            if (!this.helper) {\n                if (this.getScrollBarWidth() === 0) {\n                    this.resizeProcess = true;\n                    if (this.parent.allowGrouping) {\n                        for (var i = 0; i < this.parent.groupSettings.columns.length; i++) {\n                            this.widthService.setColumnWidth(new Column({ width: '30px' }), i);\n                        }\n                    }\n                    for (var _i = 0, _a = this.refreshColumnWidth(); _i < _a.length; _i++) {\n                        var col = _a[_i];\n                        this.widthService.setColumnWidth(col);\n                    }\n                    this.widthService.setWidthToTable();\n                    this.resizeProcess = false;\n                }\n                this.refreshStackedColumnWidth();\n                this.element = e.target;\n                this.parentElementWidth = this.parent.element.getBoundingClientRect().width;\n                this.appendHelper();\n                this.column = this.getTargetColumn(e);\n                this.pageX = this.getPointX(e);\n                if (this.column.getFreezeTableName() === literals.frozenRight) {\n                    if (this.parent.enableRtl) {\n                        this.minMove = (this.column.minWidth ? parseFloat(this.column.minWidth.toString()) : 0)\n                            - parseFloat(isNullOrUndefined(this.column.width) ? '' : this.column.width.toString());\n                    }\n                    else {\n                        this.minMove = parseFloat(isNullOrUndefined(this.column.width) ? '' : this.column.width.toString())\n                            - (this.column.minWidth ? parseFloat(this.column.minWidth.toString()) : 0);\n                    }\n                }\n                else if (this.parent.enableRtl) {\n                    this.minMove = parseFloat(this.column.width.toString())\n                        - (this.column.minWidth ? parseFloat(this.column.minWidth.toString()) : 0);\n                }\n                else {\n                    this.minMove = (this.column.minWidth ? parseFloat(this.column.minWidth.toString()) : 0)\n                        - parseFloat(isNullOrUndefined(this.column.width) ? '' : this.column.width.toString());\n                }\n                this.minMove += this.pageX;\n            }\n            if (Browser.isDevice && !this.helper.classList.contains(resizeClassList.icon)) {\n                this.helper.classList.add(resizeClassList.icon);\n                EventHandler.add(document, Browser.touchStartEvent, this.removeHelper, this);\n                EventHandler.add(this.helper, Browser.touchStartEvent, this.resizeStart, this);\n            }\n            else {\n                var args = { e: e, column: this.column };\n                this.parent.trigger(events.resizeStart, args, function (args) {\n                    if (args.cancel || _this.parent.isEdit) {\n                        _this.cancelResizeAction();\n                        return;\n                    }\n                    EventHandler.add(document, Browser.touchEndEvent, _this.resizeEnd, _this);\n                    EventHandler.add(_this.parent.element, Browser.touchMoveEvent, _this.resizing, _this);\n                    _this.updateCursor('add');\n                });\n            }\n        }\n    };\n    Resize.prototype.cancelResizeAction = function (removeEvents) {\n        if (removeEvents) {\n            EventHandler.remove(this.parent.element, Browser.touchMoveEvent, this.resizing);\n            EventHandler.remove(document, Browser.touchEndEvent, this.resizeEnd);\n            this.updateCursor('remove');\n        }\n        if (Browser.isDevice) {\n            EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n            EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n        }\n        detach(this.helper);\n        this.refresh();\n    };\n    Resize.prototype.getWidth = function (width, minWidth, maxWidth) {\n        if (minWidth && width < minWidth) {\n            return minWidth;\n        }\n        else if ((maxWidth && width > maxWidth)) {\n            return maxWidth;\n        }\n        else {\n            return width;\n        }\n    };\n    Resize.prototype.updateResizeEleHeight = function () {\n        var elements = [].slice.call(this.parent.getHeaderContent().getElementsByClassName('e-rhandler'));\n        for (var i = 0; i < elements.length; i++) {\n            elements[parseInt(i.toString(), 10)].style.height = this.element.parentElement.offsetHeight + 'px';\n        }\n    };\n    Resize.prototype.getColData = function (column, mousemove) {\n        return {\n            width: parseFloat(isNullOrUndefined(this.widthService.getWidth(column)) || this.widthService.getWidth(column) === 'auto' ? '0'\n                : this.widthService.getWidth(column).toString()) + mousemove,\n            minWidth: column.minWidth ? parseFloat(column.minWidth.toString()) : null,\n            maxWidth: column.maxWidth ? parseFloat(column.maxWidth.toString()) : null\n        };\n    };\n    Resize.prototype.refreshResizeFixedCols = function (pos) {\n        var cols = this.parent.getColumns();\n        var translateX = this.parent.enableColumnVirtualization ? this.parent.translateX : 0;\n        var th = [].slice.call(this.parent.getHeaderContent().querySelector('tbody').querySelectorAll('.e-fixedfreeze')).concat([].slice.call(this.parent.getContent().querySelectorAll('.e-fixedfreeze')));\n        for (var i = 0; i < th.length; i++) {\n            var node = th[parseInt(i.toString(), 10)];\n            var column = void 0;\n            if (node.classList.contains('e-summarycell')) {\n                var uid = node.getAttribute('e-mappinguid');\n                column = this.parent.getColumnByUid(uid);\n            }\n            else {\n                var index = parseInt(node.getAttribute('data-colindex'), 10);\n                column = cols[parseInt(index.toString(), 10)];\n            }\n            var width = 0;\n            if (pos === 'Left') {\n                if (this.parent.getVisibleFrozenLeftCount()) {\n                    width = this.parent.getIndentCount() * 30;\n                }\n                else if (this.parent.getFrozenMode() === 'Right') {\n                    width = this.parent.groupSettings.columns.length * 30;\n                }\n                for (var j = 0; j < cols.length; j++) {\n                    if (column.index > cols[parseInt(j.toString(), 10)].index) {\n                        if (column.uid === cols[parseInt(j.toString(), 10)].uid) {\n                            break;\n                        }\n                        if ((cols[parseInt(j.toString(), 10)].freeze === 'Left' || cols[parseInt(j.toString(), 10)].isFrozen) ||\n                            cols[parseInt(j.toString(), 10)].freeze === 'Fixed') {\n                            if (cols[parseInt(j.toString(), 10)].visible) {\n                                width += parseFloat(cols[parseInt(j.toString(), 10)].width.toString());\n                            }\n                        }\n                    }\n                }\n                applyStickyLeftRightPosition(node, ((width === 0 ? width : width - 1) - translateX), this.parent.enableRtl, 'Left');\n            }\n            if (pos === 'Right') {\n                width = this.parent.getFrozenMode() === 'Right' && this.parent.isRowDragable() ? 30 : 0;\n                for (var j = cols.length - 1; j >= 0; j--) {\n                    if (column.uid === cols[parseInt(j.toString(), 10)].uid) {\n                        break;\n                    }\n                    if (cols[parseInt(j.toString(), 10)].freeze === 'Right' || cols[parseInt(j.toString(), 10)].freeze === 'Fixed') {\n                        if (cols[parseInt(j.toString(), 10)].visible) {\n                            width += parseFloat(cols[parseInt(j.toString(), 10)].width.toString());\n                        }\n                    }\n                }\n                applyStickyLeftRightPosition(node, width + translateX, this.parent.enableRtl, 'Right');\n            }\n        }\n    };\n    Resize.prototype.refreshResizePosition = function () {\n        this.refreshResizefrzCols(true);\n    };\n    Resize.prototype.refreshResizefrzCols = function (freezeRefresh, isAutoFitCol) {\n        var _this = this;\n        var translateX = this.parent.enableColumnVirtualization ? this.parent.translateX : 0;\n        if (freezeRefresh || ((this.column.freeze === 'Left' || this.column.isFrozen) ||\n            (this.column.columns && frozenDirection(this.column) === 'Left'))) {\n            var width_1 = this.parent.getIndentCount() * 30;\n            var columns = this.parent.getColumns().filter(function (col) { return col.freeze === 'Left' || col.isFrozen; });\n            if (!freezeRefresh || isAutoFitCol) {\n                this.frzHdrRefresh('Left');\n            }\n            for (var i = 0; i < columns.length; i++) {\n                if (freezeRefresh || (columns[parseInt(i.toString(), 10)].index > this.column.index)) {\n                    var elements = [];\n                    if (this.parent.frozenRows) {\n                        elements = [].slice.call(this.parent.getHeaderContent().querySelectorAll('td[data-colindex=\"' + i + '\"]')).concat([].slice.call(this.parent.getContent().querySelectorAll('td[data-colindex=\"' + i + '\"]')));\n                    }\n                    else {\n                        elements = [].slice.call(this.parent.getContent().querySelectorAll('td[data-colindex=\"' + i + '\"]'));\n                    }\n                    elements.filter(function (cell) {\n                        applyStickyLeftRightPosition(cell, width_1 - translateX, _this.parent.enableRtl, 'Left');\n                    });\n                    if (this.parent.enableColumnVirtualization) {\n                        columns[parseInt(i.toString(), 10)].valueX = width_1;\n                    }\n                }\n                if (columns[parseInt(i.toString(), 10)].visible) {\n                    width_1 += parseFloat(columns[parseInt(i.toString(), 10)].width.toString());\n                }\n            }\n            this.refreshResizeFixedCols('Left');\n        }\n        if (freezeRefresh || (this.column.freeze === 'Right' || (this.column.columns && frozenDirection(this.column) === 'Right'))) {\n            var width_2 = this.parent.getFrozenMode() === 'Right' && this.parent.isRowDragable() ? 30 : 0;\n            var columns = this.parent.getColumns();\n            if (!freezeRefresh || isAutoFitCol) {\n                this.frzHdrRefresh('Right');\n            }\n            var columnsRight = columns.filter(function (col) { return col.freeze === 'Right'; });\n            for (var i = columns.length - 1; i >= columns.length - columnsRight.length; i--) {\n                var elements = [];\n                if (this.parent.frozenRows) {\n                    elements = [].slice.call(this.parent.getHeaderContent().querySelectorAll('td[data-colindex=\"' + i + '\"]')).concat([].slice.call(this.parent.getContent().querySelectorAll('td[data-colindex=\"' + i + '\"]')));\n                }\n                else {\n                    elements = [].slice.call(this.parent.getContent().querySelectorAll('td[data-colindex=\"' + i + '\"]'));\n                }\n                elements.filter(function (cell) {\n                    applyStickyLeftRightPosition(cell, width_2 + translateX, _this.parent.enableRtl, 'Right');\n                });\n                if (this.parent.enableColumnVirtualization) {\n                    columns[parseInt(i.toString(), 10)].valueX = width_2;\n                }\n                if (columns[parseInt(i.toString(), 10)].visible) {\n                    width_2 = width_2 + parseFloat(columns[parseInt(i.toString(), 10)].width.toString());\n                }\n            }\n            this.refreshResizeFixedCols('Right');\n        }\n        if (this.column && (this.column.freeze === 'Fixed' || (this.column.columns && frozenDirection(this.column) === 'Fixed'))) {\n            this.refreshResizeFixedCols('Left');\n            this.refreshResizeFixedCols('Right');\n            this.frzHdrRefresh('Left');\n            this.frzHdrRefresh('Right');\n        }\n        if (this.parent.groupSettings.columns.length && this.parent.aggregates.length &&\n            this.parent.getContent().querySelector('.e-groupcaptionrow')) {\n            this.refreshGroupCaptionRow();\n        }\n    };\n    Resize.prototype.refreshGroupCaptionRow = function () {\n        var capRow = [].slice.call(this.parent.getContent().querySelectorAll('.e-groupcaptionrow'));\n        for (var i = 0; i < capRow.length; i++) {\n            var tr = capRow[parseInt(i.toString(), 10)];\n            if (tr.querySelector('.e-summarycell')) {\n                groupCaptionRowLeftRightPos(tr, this.parent);\n            }\n        }\n    };\n    Resize.prototype.frzHdrRefresh = function (pos) {\n        var _this = this;\n        var translateX = this.parent.enableColumnVirtualization ? this.parent.translateX : 0;\n        if (pos === 'Left') {\n            var tr = [].slice.call(this.parent.getHeaderContent().querySelector('thead').querySelectorAll('tr'));\n            for (var i = 0; i < tr.length; i++) {\n                var th = [].slice.call(tr[parseInt(i.toString(), 10)].querySelectorAll('.e-leftfreeze,.e-fixedfreeze'));\n                var _loop_1 = function (j) {\n                    var node = th[parseInt(j.toString(), 10)];\n                    if (node.classList.contains('e-rowdragheader') || node.classList.contains('e-dragheadercell') ||\n                        node.classList.contains('e-grouptopleftcell')) {\n                        return \"continue\";\n                    }\n                    var column = this_1.getParticularCol(node);\n                    var cols = this_1.parent.getColumns();\n                    var width = 0;\n                    var summarycell = [];\n                    if (this_1.parent.aggregates.length && this_1.parent.getFooterContent()) {\n                        if (this_1.parent.getContent().querySelectorAll('.e-summaryrow').length) {\n                            var summaryRows = [].slice.call(this_1.parent.getContent().querySelectorAll('.e-summaryrow'));\n                            summaryRows.filter(function (row) {\n                                summarycell.push(row.querySelector('[e-mappinguid=\"' + column.uid + '\"]'));\n                            });\n                        }\n                        summarycell = summarycell.concat([].slice.call(this_1.parent.getFooterContent().querySelectorAll('[e-mappinguid=\"' + column.uid + '\"]')));\n                    }\n                    if (node.classList.contains('e-fixedfreeze')) {\n                        if (this_1.parent.getVisibleFrozenLeftCount()) {\n                            width = this_1.parent.getIndentCount() * 30;\n                        }\n                        else if (this_1.parent.getFrozenMode() === 'Right') {\n                            width = this_1.parent.groupSettings.columns.length * 30;\n                        }\n                        for (var w = 0; w < cols.length; w++) {\n                            if (column.index > cols[parseInt(w.toString(), 10)].index) {\n                                if (column.uid === cols[parseInt(w.toString(), 10)].uid) {\n                                    break;\n                                }\n                                if ((cols[parseInt(w.toString(), 10)].freeze === 'Left' || cols[parseInt(w.toString(), 10)].isFrozen) ||\n                                    cols[parseInt(w.toString(), 10)].freeze === 'Fixed') {\n                                    if (cols[parseInt(w.toString(), 10)].visible) {\n                                        width += parseInt(cols[parseInt(w.toString(), 10)].width.toString(), 10);\n                                    }\n                                }\n                            }\n                        }\n                        if (summarycell && summarycell.length) {\n                            summarycell.filter(function (cell) {\n                                applyStickyLeftRightPosition(cell, width - translateX, _this.parent.enableRtl, 'Left');\n                            });\n                        }\n                        applyStickyLeftRightPosition(node, ((width === 0 ? width : width - 1) - translateX), this_1.parent.enableRtl, 'Left');\n                    }\n                    else {\n                        width = this_1.parent.getIndentCount() * 30;\n                        if (column.index === 0) {\n                            if (summarycell && summarycell.length) {\n                                summarycell.filter(function (cell) {\n                                    applyStickyLeftRightPosition(cell, width - translateX, _this.parent.enableRtl, 'Left');\n                                });\n                            }\n                            applyStickyLeftRightPosition(node, width - translateX, this_1.parent.enableRtl, 'Left');\n                            if (this_1.parent.enableColumnVirtualization) {\n                                column.valueX = width;\n                            }\n                        }\n                        else {\n                            for (var k = 0; k < cols.length; k++) {\n                                if (column.index < cols[parseInt(k.toString(), 10)].index ||\n                                    column.uid === cols[parseInt(k.toString(), 10)].uid) {\n                                    break;\n                                }\n                                if (cols[parseInt(k.toString(), 10)].visible) {\n                                    width += parseInt(cols[parseInt(k.toString(), 10)].width.toString(), 10);\n                                }\n                            }\n                            if (summarycell && summarycell.length) {\n                                summarycell.filter(function (cell) {\n                                    applyStickyLeftRightPosition(cell, width - translateX, _this.parent.enableRtl, 'Left');\n                                });\n                            }\n                            applyStickyLeftRightPosition(node, width - translateX, this_1.parent.enableRtl, 'Left');\n                            if (this_1.parent.enableColumnVirtualization) {\n                                column.valueX = width;\n                            }\n                        }\n                    }\n                };\n                var this_1 = this;\n                for (var j = 0; j < th.length; j++) {\n                    _loop_1(j);\n                }\n            }\n        }\n        if (pos === 'Right') {\n            var tr = [].slice.call(this.parent.getHeaderContent().querySelector('thead').querySelectorAll('tr'));\n            for (var i = 0; i < tr.length; i++) {\n                var th = [].slice.call(tr[parseInt(i.toString(), 10)].querySelectorAll('.e-rightfreeze, .e-fixedfreeze'));\n                var _loop_2 = function (j) {\n                    var node = th[parseInt(j.toString(), 10)];\n                    var column = this_2.getParticularCol(node);\n                    var cols = this_2.parent.getColumns();\n                    var width = 0;\n                    var summarycell = [];\n                    if (this_2.parent.aggregates.length && this_2.parent.getFooterContent()) {\n                        if (this_2.parent.getContent().querySelectorAll('.e-summaryrow').length) {\n                            var summaryRows = [].slice.call(this_2.parent.getContent().querySelectorAll('.e-summaryrow'));\n                            summaryRows.filter(function (row) {\n                                summarycell.push(row.querySelector('[e-mappinguid=\"' + column.uid + '\"]'));\n                            });\n                        }\n                        summarycell = summarycell.concat([].slice.call(this_2.parent.getFooterContent().querySelectorAll('[e-mappinguid=\"' + column.uid + '\"]')));\n                    }\n                    if (node.classList.contains('e-fixedfreeze')) {\n                        width = this_2.parent.getFrozenMode() === 'Right' && this_2.parent.isRowDragable() ? 30 : 0;\n                        for (var w = cols.length - 1; w >= 0; w--) {\n                            if (column.index < cols[parseInt(w.toString(), 10)].index) {\n                                if ((column.columns && isChildColumn(column, cols[parseInt(w.toString(), 10)].uid)) ||\n                                    column.index > cols[parseInt(w.toString(), 10)].index) {\n                                    break;\n                                }\n                                if (cols[parseInt(w.toString(), 10)].freeze === 'Right' ||\n                                    cols[parseInt(w.toString(), 10)].freeze === 'Fixed') {\n                                    if (cols[parseInt(w.toString(), 10)].visible) {\n                                        width += parseFloat(cols[parseInt(w.toString(), 10)].width.toString());\n                                    }\n                                }\n                            }\n                        }\n                        if (summarycell.length) {\n                            summarycell.filter(function (cell) {\n                                applyStickyLeftRightPosition(cell, width + translateX, _this.parent.enableRtl, 'Right');\n                            });\n                        }\n                        applyStickyLeftRightPosition(node, width + translateX, this_2.parent.enableRtl, 'Right');\n                    }\n                    else {\n                        width = this_2.parent.getFrozenMode() === 'Right' && this_2.parent.isRowDragable() ? 30 : 0;\n                        for (var k = cols.length - 1; k >= 0; k--) {\n                            if ((column.columns && isChildColumn(column, cols[parseInt(k.toString(), 10)].uid)) ||\n                                column.index > cols[parseInt(k.toString(), 10)].index ||\n                                column.uid === cols[parseInt(k.toString(), 10)].uid) {\n                                break;\n                            }\n                            if (cols[parseInt(k.toString(), 10)].visible) {\n                                width += parseInt(cols[parseInt(k.toString(), 10)].width.toString(), 10);\n                            }\n                        }\n                        if (summarycell.length) {\n                            summarycell.filter(function (cell) {\n                                applyStickyLeftRightPosition(cell, width + translateX, _this.parent.enableRtl, 'Right');\n                            });\n                        }\n                        applyStickyLeftRightPosition(node, width + translateX, this_2.parent.enableRtl, 'Right');\n                        if (this_2.parent.enableColumnVirtualization) {\n                            column.valueX = width;\n                        }\n                    }\n                };\n                var this_2 = this;\n                for (var j = th.length - 1; j >= 0; j--) {\n                    _loop_2(j);\n                }\n            }\n        }\n    };\n    Resize.prototype.getParticularCol = function (node) {\n        var uid = node.classList.contains('e-filterbarcell') ? node.getAttribute('e-mappinguid') :\n            node.querySelector('[e-mappinguid]').getAttribute('e-mappinguid');\n        return this.parent.getColumnByUid(uid);\n    };\n    Resize.prototype.resizing = function (e) {\n        if (isNullOrUndefined(this.column)) {\n            return;\n        }\n        if (this.parent.isFrozenGrid()) {\n            this.refreshResizefrzCols();\n        }\n        var offsetWidth = 0;\n        if (isNullOrUndefined(this.column)) {\n            offsetWidth = parentsUntil(this.element, 'th').offsetWidth;\n        }\n        if (this.parent.allowTextWrap) {\n            this.updateResizeEleHeight();\n            this.setHelperHeight();\n        }\n        var pageX = this.getPointX(e);\n        var mousemove = this.parent.enableRtl ? -(pageX - this.pageX) : (pageX - this.pageX);\n        var colData = this.getColData(this.column, mousemove);\n        if (!colData.width) {\n            colData.width = closest(this.element, 'th').offsetWidth;\n        }\n        var width = this.getWidth(colData.width, colData.minWidth, colData.maxWidth);\n        this.parent.log('resize_min_max', { column: this.column, width: width });\n        if (((!this.parent.enableRtl && this.minMove >= pageX) || (this.parent.enableRtl && this.minMove <= pageX))) {\n            width = this.column.minWidth ? parseFloat(this.column.minWidth.toString()) : 10;\n            this.pageX = pageX = this.minMove;\n        }\n        if (width !== parseFloat(isNullOrUndefined(this.column.width) || this.column.width === 'auto' ?\n            offsetWidth.toString() : this.column.width.toString())) {\n            this.pageX = pageX;\n            this.column.width = formatUnit(width);\n            var args = {\n                e: e,\n                column: this.column\n            };\n            this.parent.trigger(events.onResize, args);\n            if (args.cancel) {\n                this.cancelResizeAction(true);\n                return;\n            }\n            var columns = [this.column];\n            var finalColumns = [this.column];\n            if (this.column.columns) {\n                columns = this.getSubColumns(this.column, []);\n                columns = this.calulateColumnsWidth(columns, false, mousemove);\n                finalColumns = this.calulateColumnsWidth(columns, true, mousemove);\n            }\n            this.resizeProcess = true;\n            for (var _i = 0, finalColumns_1 = finalColumns; _i < finalColumns_1.length; _i++) {\n                var col = finalColumns_1[_i];\n                this.widthService.setColumnWidth(col, null, 'resize');\n            }\n            this.resizeProcess = false;\n            this.updateHelper();\n        }\n        this.isDblClk = false;\n    };\n    Resize.prototype.calulateColumnsWidth = function (columns, isUpdate, mousemove) {\n        var finalColumns = [];\n        for (var _i = 0, columns_1 = columns; _i < columns_1.length; _i++) {\n            var col = columns_1[_i];\n            var totalWidth = 0;\n            for (var i = 0; i < columns.length; i++) {\n                totalWidth += parseFloat(columns[parseInt(i.toString(), 10)].width.toString());\n            }\n            var colData = this.getColData(col, (parseFloat(col.width)) * mousemove / totalWidth);\n            var colWidth = this.getWidth(colData.width, colData.minWidth, colData.maxWidth);\n            if ((colWidth !== parseFloat(col.width.toString()))) {\n                if (isUpdate) {\n                    col.width = formatUnit(colWidth < 1 ? 1 : colWidth);\n                }\n                finalColumns.push(col);\n            }\n        }\n        return finalColumns;\n    };\n    Resize.prototype.getSubColumns = function (column, subColumns) {\n        for (var _i = 0, _a = column.columns; _i < _a.length; _i++) {\n            var col = _a[_i];\n            if (col.visible !== false && col.allowResizing) {\n                if (col.columns) {\n                    this.getSubColumns(col, subColumns);\n                }\n                else {\n                    subColumns.push(col);\n                }\n            }\n        }\n        return subColumns;\n    };\n    Resize.prototype.resizeEnd = function (e) {\n        if (!this.helper || this.parent.isDestroyed) {\n            return;\n        }\n        var gObj = this.parent;\n        EventHandler.remove(this.parent.element, Browser.touchMoveEvent, this.resizing);\n        EventHandler.remove(document, Browser.touchEndEvent, this.resizeEnd);\n        this.updateCursor('remove');\n        detach(this.helper);\n        var args = { e: e, column: this.column };\n        var content = this.parent.getContent().querySelector('.' + literals.content);\n        var cTable = content;\n        if (cTable.scrollHeight > cTable.clientHeight) {\n            this.parent.scrollModule.setPadding();\n            cTable.style.overflowY = 'scroll';\n        }\n        this.parent.trigger(events.resizeStop, args);\n        closest(this.element, '.e-headercell').classList.add('e-resized');\n        this.isFrozenColResized = false;\n        if (this.parent.allowTextWrap) {\n            this.updateResizeEleHeight();\n            this.parent.notify(events.textWrapRefresh, { case: 'textwrap' });\n        }\n        var headerTable = gObj.getHeaderTable();\n        var contentTable = gObj.getContentTable();\n        var footerTable;\n        if (!isNullOrUndefined(gObj.getFooterContent())) {\n            footerTable = gObj.getFooterContentTable();\n        }\n        var tableWidth = headerTable.offsetWidth;\n        var contentwidth = (gObj.getContent().scrollWidth);\n        if (contentwidth > tableWidth) {\n            if (!isNullOrUndefined(contentTable.querySelector('.e-emptyrow'))) {\n                addClass([headerTable], ['e-tableborder']);\n                removeClass([contentTable], ['e-tableborder']);\n            }\n            else {\n                addClass([headerTable, contentTable], ['e-tableborder']);\n            }\n        }\n        else {\n            removeClass([headerTable, contentTable], ['e-tableborder']);\n        }\n        if (!isNullOrUndefined(footerTable)) {\n            footerTable.classList.add('e-tableborder');\n        }\n        this.refresh();\n        this.doubleTapEvent(e);\n        this.isDblClk = true;\n    };\n    Resize.prototype.getPointX = function (e) {\n        if (e.touches && e.touches.length) {\n            return e.touches[0].pageX;\n        }\n        else {\n            return e.pageX;\n        }\n    };\n    Resize.prototype.refreshColumnWidth = function () {\n        var columns = this.parent.getColumns();\n        for (var _i = 0, _a = [].slice.apply(this.parent.getHeaderContent().querySelectorAll('th.e-headercell')); _i < _a.length; _i++) {\n            var ele = _a[_i];\n            for (var _b = 0, columns_2 = columns; _b < columns_2.length; _b++) {\n                var column = columns_2[_b];\n                if (ele.querySelector('[e-mappinguid]') &&\n                    ele.querySelector('[e-mappinguid]').getAttribute('e-mappinguid') === column.uid && column.visible) {\n                    column.width = ele.getBoundingClientRect().width;\n                    break;\n                }\n            }\n        }\n        return columns;\n    };\n    Resize.prototype.refreshStackedColumnWidth = function () {\n        for (var _i = 0, _a = this.parent.getStackedColumns(this.parent.columns); _i < _a.length; _i++) {\n            var stackedColumn = _a[_i];\n            stackedColumn.width = this.getStackedWidth(stackedColumn, 0);\n        }\n    };\n    Resize.prototype.getStackedWidth = function (column, width) {\n        for (var _i = 0, _a = column.columns; _i < _a.length; _i++) {\n            var col = _a[_i];\n            if (col.visible !== false) {\n                if (col.columns) {\n                    width = this.getStackedWidth(col, width);\n                }\n                else {\n                    width += parseFloat(col.width.toString());\n                }\n            }\n        }\n        return width;\n    };\n    Resize.prototype.getTargetColumn = function (e) {\n        var cell = closest(e.target, resizeClassList.header);\n        cell = cell.querySelector('.e-headercelldiv') || cell.querySelector('.e-stackedheadercelldiv');\n        var uid = cell.getAttribute('e-mappinguid');\n        return this.parent.getColumnByUid(uid);\n    };\n    Resize.prototype.updateCursor = function (action) {\n        var headerRows = [].slice.call(this.parent.getHeaderContent().querySelectorAll('th'));\n        headerRows.push(this.parent.element);\n        for (var _i = 0, headerRows_1 = headerRows; _i < headerRows_1.length; _i++) {\n            var row = headerRows_1[_i];\n            row.classList[\"\" + action](resizeClassList.cursor);\n        }\n    };\n    Resize.prototype.refresh = function () {\n        this.column = null;\n        this.pageX = null;\n        this.element = null;\n        this.helper = null;\n    };\n    Resize.prototype.appendHelper = function () {\n        this.helper = this.parent.createElement('div', {\n            className: resizeClassList.helper\n        });\n        this.parent.element.appendChild(this.helper);\n        this.setHelperHeight();\n    };\n    Resize.prototype.setHelperHeight = function () {\n        var height = this.parent.getContent().offsetHeight - this.getScrollBarWidth();\n        var rect = closest(this.element, resizeClassList.header);\n        var tr = [].slice.call(this.parent.getHeaderContent().querySelectorAll('tr'));\n        for (var i = tr.indexOf(rect.parentElement); i < tr.length && i > -1; i++) {\n            height += tr[parseInt(i.toString(), 10)].offsetHeight;\n        }\n        var pos = this.calcPos(rect);\n        pos.left += (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2);\n        this.helper.style.cssText = 'height: ' + height + 'px; top: ' + pos.top + 'px; left:' + Math.floor(pos.left) + 'px;';\n        if (this.parent.enableVirtualization) {\n            this.helper.classList.add('e-virtual-rhandler');\n        }\n    };\n    Resize.prototype.getScrollBarWidth = function (height) {\n        var ele = this.parent.getContent().firstChild;\n        return (ele.scrollHeight > ele.clientHeight && height) ||\n            ele.scrollWidth > ele.clientWidth ? getScrollBarWidth() : 0;\n    };\n    Resize.prototype.removeHelper = function (e) {\n        var cls = e.target.classList;\n        if (!(cls.contains(resizeClassList.root) || cls.contains(resizeClassList.icon)) && this.helper) {\n            EventHandler.remove(document, Browser.touchStartEvent, this.removeHelper);\n            EventHandler.remove(this.helper, Browser.touchStartEvent, this.resizeStart);\n            detach(this.helper);\n            this.refresh();\n        }\n    };\n    Resize.prototype.updateHelper = function () {\n        var rect = closest(this.element, resizeClassList.header);\n        var left;\n        left = Math.floor(this.calcPos(rect).left + (this.parent.enableRtl ? 0 - 1 : rect.offsetWidth - 2));\n        var borderWidth = 2; // to maintain the helper inside of grid element.\n        if (left > this.parentElementWidth) {\n            left = this.parentElementWidth - borderWidth;\n        }\n        this.helper.style.left = left + 'px';\n    };\n    Resize.prototype.calcPos = function (elem) {\n        var parentOffset = {\n            top: 0,\n            left: 0\n        };\n        var offset = elem.getBoundingClientRect();\n        var doc = elem.ownerDocument;\n        var offsetParent = parentsUntil(elem, 'e-grid') || doc.documentElement;\n        while (offsetParent &&\n            (offsetParent === doc.body || offsetParent === doc.documentElement) &&\n            offsetParent.style.position === 'static') {\n            offsetParent = offsetParent.parentNode;\n        }\n        if (offsetParent && offsetParent !== elem && offsetParent.nodeType === 1) {\n            parentOffset = offsetParent.getBoundingClientRect();\n        }\n        return {\n            top: offset.top - parentOffset.top,\n            left: offset.left - parentOffset.left\n        };\n    };\n    Resize.prototype.doubleTapEvent = function (e) {\n        var _this = this;\n        if (this.getUserAgent() && this.isDblClk) {\n            if (!this.tapped) {\n                this.tapped = setTimeout(function () {\n                    _this.tapped = null;\n                }, 300);\n            }\n            else {\n                clearTimeout(this.tapped);\n                this.callAutoFit(e);\n                this.tapped = null;\n            }\n        }\n    };\n    Resize.prototype.getUserAgent = function () {\n        var userAgent = Browser.userAgent.toLowerCase();\n        return /iphone|ipod|ipad/.test(userAgent);\n    };\n    Resize.prototype.timeoutHandler = function () {\n        this.tapped = null;\n    };\n    return Resize;\n}());\nexport { Resize };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\nimport { Component, Property, Event, EventHandler, L10n, setValue, getValue, isNullOrUndefined, Browser } from '@syncfusion/ej2-base';\nimport { NotifyPropertyChanges, detach, Internationalization, getUniqueID, closest } from '@syncfusion/ej2-base';\nimport { addClass, removeClass } from '@syncfusion/ej2-base';\nimport { Input } from '../input/input';\nvar HIDE_CLEAR = 'e-clear-icon-hide';\nvar TEXTBOX_FOCUS = 'e-input-focus';\nvar containerAttr = ['title', 'style', 'class'];\n/**\n * Represents the TextBox component that allows the user to enter the values based on it's type.\n * ```html\n * <input name='images' id='textbox'/>\n * ```\n * ```typescript\n * <script>\n *   var textboxObj = new TextBox();\n *   textboxObj.appendTo('#textbox');\n * </script>\n * ```\n */\nvar TextBox = /** @class */ (function (_super) {\n    __extends(TextBox, _super);\n    /**\n     *\n     * @param {TextBoxModel} options - Specifies the TextBox model.\n     * @param {string | HTMLInputElement | HTMLTextAreaElement} element - Specifies the element to render as component.\n     * @private\n     */\n    function TextBox(options, element) {\n        var _this = _super.call(this, options, element) || this;\n        _this.previousValue = null;\n        _this.isAngular = false;\n        _this.isHiddenInput = false;\n        _this.isForm = false;\n        _this.inputPreviousValue = null;\n        _this.isVue = false;\n        _this.textboxOptions = options;\n        return _this;\n    }\n    /**\n     * Calls internally if any of the property value is changed.\n     *\n     * @param {TextBoxModel} newProp - Returns the dynamic property value of the component.\n     * @param {TextBoxModel} oldProp - Returns the previous property value of the component.\n     * @returns {void}\n     * @private\n     */\n    TextBox.prototype.onPropertyChanged = function (newProp, oldProp) {\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'floatLabelType':\n                    Input.removeFloating(this.textboxWrapper);\n                    Input.addFloating(this.respectiveElement, this.floatLabelType, this.placeholder);\n                    break;\n                case 'enabled':\n                    Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n                    this.bindClearEvent();\n                    break;\n                case 'width':\n                    Input.setWidth(newProp.width, this.textboxWrapper.container);\n                    break;\n                case 'value':\n                    {\n                        var prevOnChange = this.isProtectedOnChange;\n                        this.isProtectedOnChange = true;\n                        if (!this.isBlank(this.value)) {\n                            this.value = this.value.toString();\n                        }\n                        this.isProtectedOnChange = prevOnChange;\n                        Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n                        if (this.isHiddenInput) {\n                            this.element.value = this.respectiveElement.value;\n                        }\n                        this.inputPreviousValue = this.respectiveElement.value;\n                        /* istanbul ignore next */\n                        if ((this.isAngular || this.isVue) && this.preventChange === true) {\n                            this.previousValue = this.isAngular ? this.value : this.previousValue;\n                            this.preventChange = false;\n                        }\n                        else if (isNullOrUndefined(this.isAngular) || !this.isAngular\n                            || (this.isAngular && !this.preventChange) || (this.isAngular && isNullOrUndefined(this.preventChange))) {\n                            this.raiseChangeEvent();\n                        }\n                    }\n                    break;\n                case 'htmlAttributes':\n                    {\n                        this.updateHTMLAttrToElement();\n                        this.updateHTMLAttrToWrapper();\n                        this.checkAttributes(true);\n                        this.multiline && !isNullOrUndefined(this.textarea) ? Input.validateInputType(this.textboxWrapper.container, this.textarea) : Input.validateInputType(this.textboxWrapper.container, this.element);\n                    }\n                    break;\n                case 'readonly':\n                    Input.setReadonly(this.readonly, this.respectiveElement);\n                    break;\n                case 'type':\n                    if (this.respectiveElement.tagName !== 'TEXTAREA') {\n                        this.respectiveElement.setAttribute('type', this.type);\n                        Input.validateInputType(this.textboxWrapper.container, this.element);\n                        this.raiseChangeEvent();\n                    }\n                    break;\n                case 'showClearButton':\n                    Input.setClearButton(this.showClearButton, this.respectiveElement, this.textboxWrapper);\n                    this.bindClearEvent();\n                    break;\n                case 'enableRtl':\n                    Input.setEnableRtl(this.enableRtl, [this.textboxWrapper.container]);\n                    break;\n                case 'placeholder':\n                    Input.setPlaceholder(this.placeholder, this.respectiveElement);\n                    Input.calculateWidth(this.respectiveElement, this.textboxWrapper.container);\n                    break;\n                case 'autocomplete':\n                    if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n                        this.respectiveElement.autocomplete = this.autocomplete;\n                    }\n                    else {\n                        this.removeAttributes(['autocomplete']);\n                    }\n                    break;\n                case 'cssClass':\n                    this.updateCssClass(newProp.cssClass, oldProp.cssClass);\n                    break;\n                case 'locale':\n                    this.globalize = new Internationalization(this.locale);\n                    this.l10n.setLocale(this.locale);\n                    this.setProperties({ placeholder: this.l10n.getConstant('placeholder') }, true);\n                    Input.setPlaceholder(this.placeholder, this.respectiveElement);\n                    break;\n            }\n        }\n    };\n    /**\n     * Gets the component name\n     *\n     * @returns {string} Returns the component name.\n     * @private\n     */\n    TextBox.prototype.getModuleName = function () {\n        return 'textbox';\n    };\n    TextBox.prototype.isBlank = function (str) {\n        return (!str || /^\\s*$/.test(str));\n    };\n    TextBox.prototype.preRender = function () {\n        this.cloneElement = this.element.cloneNode(true);\n        this.formElement = closest(this.element, 'form');\n        if (!isNullOrUndefined(this.formElement)) {\n            this.isForm = true;\n        }\n        /* istanbul ignore next */\n        if (this.element.tagName === 'EJS-TEXTBOX') {\n            var ejInstance = getValue('ej2_instances', this.element);\n            var inputElement = this.multiline ?\n                this.createElement('textarea') :\n                this.createElement('input');\n            var index = 0;\n            for (index; index < this.element.attributes.length; index++) {\n                var attributeName = this.element.attributes[index].nodeName;\n                if (attributeName !== 'id' && attributeName !== 'class') {\n                    inputElement.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n                    inputElement.innerHTML = this.element.innerHTML;\n                    if (attributeName === 'name') {\n                        this.element.removeAttribute('name');\n                    }\n                }\n                else if (attributeName === 'class') {\n                    inputElement.setAttribute(attributeName, this.element.className.split(' ').filter(function (item) { return item.indexOf('ng-') !== 0; }).join(' '));\n                }\n            }\n            this.element.appendChild(inputElement);\n            this.element = inputElement;\n            setValue('ej2_instances', ejInstance, this.element);\n        }\n        this.updateHTMLAttrToElement();\n        this.checkAttributes(false);\n        if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['value'] === undefined)) && this.element.value !== '') {\n            this.setProperties({ value: this.element.value }, true);\n        }\n        if (this.element.tagName !== 'TEXTAREA') {\n            this.element.setAttribute('type', this.type);\n        }\n        if (this.type === 'text') {\n            this.element.setAttribute('role', 'textbox');\n        }\n        this.globalize = new Internationalization(this.locale);\n        var localeText = { placeholder: this.placeholder };\n        this.l10n = new L10n('textbox', localeText, this.locale);\n        if (this.l10n.getConstant('placeholder') !== '') {\n            this.setProperties({ placeholder: this.placeholder || this.l10n.getConstant('placeholder') }, true);\n        }\n        if (!this.element.hasAttribute('id')) {\n            this.element.setAttribute('id', getUniqueID('textbox'));\n        }\n        if (!this.element.hasAttribute('name')) {\n            this.element.setAttribute('name', this.element.getAttribute('id'));\n        }\n        if (this.element.tagName === 'INPUT' && this.multiline) {\n            this.isHiddenInput = true;\n            this.textarea = this.createElement('textarea');\n            this.element.parentNode.insertBefore(this.textarea, this.element);\n            this.element.setAttribute('type', 'hidden');\n            this.textarea.setAttribute('name', this.element.getAttribute('name'));\n            this.element.removeAttribute('name');\n            this.textarea.setAttribute('role', this.element.getAttribute('role'));\n            this.element.removeAttribute('role');\n            this.textarea.setAttribute('id', getUniqueID('textarea'));\n            var apiAttributes = ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n            for (var index = 0; index < this.element.attributes.length; index++) {\n                var attributeName = this.element.attributes[index].nodeName;\n                if (this.element.hasAttribute(attributeName) && containerAttr.indexOf(attributeName) < 0 &&\n                    !(attributeName === 'id' || attributeName === 'type' || attributeName === 'e-mappinguid')) {\n                    // e-mappinguid attribute is handled for Grid component.\n                    this.textarea.setAttribute(attributeName, this.element.attributes[index].nodeValue);\n                    if (apiAttributes.indexOf(attributeName) < 0) {\n                        this.element.removeAttribute(attributeName);\n                        index--;\n                    }\n                }\n            }\n        }\n    };\n    TextBox.prototype.checkAttributes = function (isDynamic) {\n        var attrs = isDynamic ? isNullOrUndefined(this.htmlAttributes) ? [] : Object.keys(this.htmlAttributes) :\n            ['placeholder', 'disabled', 'value', 'readonly', 'type', 'autocomplete'];\n        for (var _i = 0, attrs_1 = attrs; _i < attrs_1.length; _i++) {\n            var key = attrs_1[_i];\n            if (!isNullOrUndefined(this.element.getAttribute(key))) {\n                switch (key) {\n                    case 'disabled':\n                        if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['enabled'] === undefined)) || isDynamic) {\n                            var enabled = this.element.getAttribute(key) === 'disabled' || this.element.getAttribute(key) === '' ||\n                                this.element.getAttribute(key) === 'true' ? false : true;\n                            this.setProperties({ enabled: enabled }, !isDynamic);\n                        }\n                        break;\n                    case 'readonly':\n                        if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['readonly'] === undefined)) || isDynamic) {\n                            var readonly = this.element.getAttribute(key) === 'readonly' || this.element.getAttribute(key) === ''\n                                || this.element.getAttribute(key) === 'true' ? true : false;\n                            this.setProperties({ readonly: readonly }, !isDynamic);\n                        }\n                        break;\n                    case 'placeholder':\n                        if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['placeholder'] === undefined)) || isDynamic) {\n                            this.setProperties({ placeholder: this.element.placeholder }, !isDynamic);\n                        }\n                        break;\n                    case 'autocomplete':\n                        if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['autocomplete'] === undefined)) || isDynamic) {\n                            var autoCompleteTxt = this.element.autocomplete === 'off' ? 'off' : 'on';\n                            this.setProperties({ autocomplete: autoCompleteTxt }, !isDynamic);\n                        }\n                        break;\n                    case 'value':\n                        if (((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['value'] === undefined)) || isDynamic) && this.element.value !== '') {\n                            this.setProperties({ value: this.element.value }, !isDynamic);\n                        }\n                        break;\n                    case 'type':\n                        if ((isNullOrUndefined(this.textboxOptions) || (this.textboxOptions['type'] === undefined)) || isDynamic) {\n                            this.setProperties({ type: this.element.type }, !isDynamic);\n                        }\n                        break;\n                }\n            }\n        }\n    };\n    /**\n     * To Initialize the control rendering\n     *\n     * @returns {void}\n     * @private\n     */\n    TextBox.prototype.render = function () {\n        var updatedCssClassValue = this.cssClass;\n        if (!isNullOrUndefined(this.cssClass) && this.cssClass !== '') {\n            updatedCssClassValue = this.getInputValidClassList(this.cssClass);\n        }\n        this.respectiveElement = (this.isHiddenInput) ? this.textarea : this.element;\n        this.textboxWrapper = Input.createInput({\n            element: this.respectiveElement,\n            floatLabelType: this.floatLabelType,\n            properties: {\n                enabled: this.enabled,\n                enableRtl: this.enableRtl,\n                cssClass: updatedCssClassValue,\n                readonly: this.readonly,\n                placeholder: this.placeholder,\n                showClearButton: this.showClearButton\n            }\n        });\n        this.updateHTMLAttrToWrapper();\n        if (this.isHiddenInput) {\n            this.respectiveElement.parentNode.insertBefore(this.element, this.respectiveElement);\n        }\n        this.wireEvents();\n        if (!isNullOrUndefined(this.value)) {\n            Input.setValue(this.value, this.respectiveElement, this.floatLabelType, this.showClearButton);\n            if (this.isHiddenInput) {\n                this.element.value = this.respectiveElement.value;\n            }\n        }\n        if (!isNullOrUndefined(this.value)) {\n            this.initialValue = this.value;\n            this.setInitialValue();\n        }\n        if (this.autocomplete !== 'on' && this.autocomplete !== '') {\n            this.respectiveElement.autocomplete = this.autocomplete;\n        }\n        else if (!isNullOrUndefined(this.textboxOptions) && (this.textboxOptions['autocomplete'] !== undefined)) {\n            this.removeAttributes(['autocomplete']);\n        }\n        this.previousValue = this.value;\n        this.inputPreviousValue = this.value;\n        this.respectiveElement.defaultValue = this.respectiveElement.value;\n        Input.setWidth(this.width, this.textboxWrapper.container);\n        if (!isNullOrUndefined(closest(this.element, 'fieldset')) && closest(this.element, 'fieldset').disabled) {\n            this.enabled = false;\n        }\n        this.renderComplete();\n    };\n    TextBox.prototype.updateHTMLAttrToWrapper = function () {\n        if (!isNullOrUndefined(this.htmlAttributes)) {\n            for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n                var key = _a[_i];\n                if (containerAttr.indexOf(key) > -1) {\n                    if (key === 'class') {\n                        var updatedClassValues = this.getInputValidClassList(this.htmlAttributes[\"\" + key]);\n                        if (updatedClassValues !== '') {\n                            addClass([this.textboxWrapper.container], updatedClassValues.split(' '));\n                        }\n                    }\n                    else if (key === 'style') {\n                        var setStyle = this.textboxWrapper.container.getAttribute(key);\n                        setStyle = !isNullOrUndefined(setStyle) ? (setStyle + this.htmlAttributes[\"\" + key]) :\n                            this.htmlAttributes[\"\" + key];\n                        this.textboxWrapper.container.setAttribute(key, setStyle);\n                    }\n                    else {\n                        this.textboxWrapper.container.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                    }\n                }\n            }\n        }\n    };\n    TextBox.prototype.updateHTMLAttrToElement = function () {\n        if (!isNullOrUndefined(this.htmlAttributes)) {\n            for (var _i = 0, _a = Object.keys(this.htmlAttributes); _i < _a.length; _i++) {\n                var key = _a[_i];\n                if (containerAttr.indexOf(key) < 0) {\n                    this.multiline && !isNullOrUndefined(this.textarea) ? this.textarea.setAttribute(key, this.htmlAttributes[\"\" + key]) : this.element.setAttribute(key, this.htmlAttributes[\"\" + key]);\n                }\n            }\n        }\n    };\n    TextBox.prototype.updateCssClass = function (newClass, oldClass) {\n        Input.setCssClass(this.getInputValidClassList(newClass), [this.textboxWrapper.container], this.getInputValidClassList(oldClass));\n    };\n    TextBox.prototype.getInputValidClassList = function (inputClassName) {\n        var result = inputClassName;\n        if (!isNullOrUndefined(inputClassName) && inputClassName !== '') {\n            result = (inputClassName.replace(/\\s+/g, ' ')).trim();\n        }\n        return result;\n    };\n    TextBox.prototype.setInitialValue = function () {\n        if (!this.isAngular) {\n            this.respectiveElement.setAttribute('value', this.initialValue);\n        }\n    };\n    TextBox.prototype.wireEvents = function () {\n        EventHandler.add(this.respectiveElement, 'focus', this.focusHandler, this);\n        EventHandler.add(this.respectiveElement, 'blur', this.focusOutHandler, this);\n        EventHandler.add(this.respectiveElement, 'keydown', this.keydownHandler, this);\n        EventHandler.add(this.respectiveElement, 'input', this.inputHandler, this);\n        EventHandler.add(this.respectiveElement, 'change', this.changeHandler, this);\n        if (this.isForm) {\n            EventHandler.add(this.formElement, 'reset', this.resetForm, this);\n        }\n        this.bindClearEvent();\n        if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n            && this.textboxWrapper.container.classList.contains('e-autofill') &&\n            this.textboxWrapper.container.classList.contains('e-outline')) {\n            EventHandler.add((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler, this);\n        }\n    };\n    TextBox.prototype.animationHandler = function () {\n        this.textboxWrapper.container.classList.add('e-valid-input');\n        var label = this.textboxWrapper.container.querySelector('.e-float-text');\n        if (!isNullOrUndefined(label)) {\n            label.classList.add('e-label-top');\n            if (label.classList.contains('e-label-bottom')) {\n                label.classList.remove('e-label-bottom');\n            }\n        }\n    };\n    TextBox.prototype.resetValue = function (value) {\n        var prevOnChange = this.isProtectedOnChange;\n        this.isProtectedOnChange = true;\n        this.value = value;\n        if (value == null && this.textboxWrapper.container.classList.contains('e-valid-input')) {\n            this.textboxWrapper.container.classList.remove('e-valid-input');\n        }\n        this.isProtectedOnChange = prevOnChange;\n    };\n    TextBox.prototype.resetForm = function () {\n        if (this.isAngular) {\n            this.resetValue('');\n        }\n        else {\n            this.resetValue(this.initialValue);\n        }\n        if (!isNullOrUndefined(this.textboxWrapper)) {\n            var label = this.textboxWrapper.container.querySelector('.e-float-text');\n            if (!isNullOrUndefined(label) && this.floatLabelType !== 'Always') {\n                if ((isNullOrUndefined(this.initialValue) || this.initialValue === '')) {\n                    label.classList.add('e-label-bottom');\n                    label.classList.remove('e-label-top');\n                }\n                else if (this.initialValue !== '') {\n                    label.classList.add('e-label-top');\n                    label.classList.remove('e-label-bottom');\n                }\n            }\n        }\n    };\n    TextBox.prototype.focusHandler = function (args) {\n        var eventArgs = {\n            container: this.textboxWrapper.container,\n            event: args,\n            value: this.value\n        };\n        this.trigger('focus', eventArgs);\n    };\n    TextBox.prototype.focusOutHandler = function (args) {\n        if (!(this.previousValue === null && this.value === null && this.respectiveElement.value === '') &&\n            (this.previousValue !== this.value)) {\n            this.raiseChangeEvent(args, true);\n        }\n        var eventArgs = {\n            container: this.textboxWrapper.container,\n            event: args,\n            value: this.value\n        };\n        this.trigger('blur', eventArgs);\n    };\n    TextBox.prototype.keydownHandler = function (args) {\n        if ((args.keyCode === 13 || args.keyCode === 9) && !((this.previousValue === null || this.previousValue === \"\") && (this.value === null || this.value === \"\") && this.respectiveElement.value === \"\")) {\n            this.setProperties({ value: this.respectiveElement.value }, true);\n        }\n    };\n    TextBox.prototype.inputHandler = function (args) {\n        // eslint-disable-next-line @typescript-eslint/no-explicit-any, @typescript-eslint/no-this-alias\n        var textboxObj = this;\n        var eventArgs = {\n            event: args,\n            value: this.respectiveElement.value,\n            previousValue: this.inputPreviousValue,\n            container: this.textboxWrapper.container\n        };\n        this.inputPreviousValue = this.respectiveElement.value;\n        /* istanbul ignore next */\n        if (this.isAngular) {\n            textboxObj.localChange({ value: this.respectiveElement.value });\n            this.preventChange = true;\n        }\n        if (this.isVue) {\n            this.preventChange = true;\n        }\n        this.trigger('input', eventArgs);\n        args.stopPropagation();\n    };\n    TextBox.prototype.changeHandler = function (args) {\n        this.setProperties({ value: this.respectiveElement.value }, true);\n        if (this.previousValue != this.value) {\n            this.raiseChangeEvent(args, true);\n        }\n        args.stopPropagation();\n    };\n    TextBox.prototype.raiseChangeEvent = function (event, interaction) {\n        var eventArgs = {\n            event: event,\n            value: this.value,\n            previousValue: this.previousValue,\n            container: this.textboxWrapper.container,\n            isInteraction: interaction ? interaction : false,\n            isInteracted: interaction ? interaction : false\n        };\n        this.preventChange = false;\n        this.trigger('change', eventArgs);\n        this.previousValue = this.value;\n        //EJ2CORE-738:For this task we update the textarea value to the input when input tag with multiline is present\n        if (this.element.tagName === 'INPUT' && this.multiline && Browser.info.name === 'mozilla') {\n            this.element.value = this.respectiveElement.value;\n        }\n    };\n    TextBox.prototype.bindClearEvent = function () {\n        if (this.showClearButton) {\n            if (this.enabled) {\n                EventHandler.add(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler, this);\n            }\n            else {\n                EventHandler.remove(this.textboxWrapper.clearButton, 'mousedown touchstart', this.resetInputHandler);\n            }\n        }\n    };\n    TextBox.prototype.resetInputHandler = function (event) {\n        event.preventDefault();\n        if (!(this.textboxWrapper.clearButton.classList.contains(HIDE_CLEAR)) || this.textboxWrapper.container.classList.contains('e-static-clear')) {\n            Input.setValue('', this.respectiveElement, this.floatLabelType, this.showClearButton);\n            if (this.isHiddenInput) {\n                this.element.value = this.respectiveElement.value;\n            }\n            this.setProperties({ value: this.respectiveElement.value }, true);\n            var eventArgs = {\n                event: event,\n                value: this.respectiveElement.value,\n                previousValue: this.inputPreviousValue,\n                container: this.textboxWrapper.container\n            };\n            this.trigger('input', eventArgs);\n            this.inputPreviousValue = this.respectiveElement.value;\n            this.raiseChangeEvent(event, true);\n            if (closest(this.element, 'form')) {\n                var element = this.element;\n                var keyupEvent = document.createEvent('KeyboardEvent');\n                keyupEvent.initEvent('keyup', false, true);\n                element.dispatchEvent(keyupEvent);\n            }\n        }\n    };\n    TextBox.prototype.unWireEvents = function () {\n        EventHandler.remove(this.respectiveElement, 'focus', this.focusHandler);\n        EventHandler.remove(this.respectiveElement, 'blur', this.focusOutHandler);\n        EventHandler.remove(this.respectiveElement, 'keydown', this.keydownHandler);\n        EventHandler.remove(this.respectiveElement, 'input', this.inputHandler);\n        EventHandler.remove(this.respectiveElement, 'change', this.changeHandler);\n        if (this.isForm) {\n            EventHandler.remove(this.formElement, 'reset', this.resetForm);\n        }\n        if (!isNullOrUndefined(this.textboxWrapper.container.querySelector('.e-float-text')) && this.floatLabelType === 'Auto'\n            && this.textboxWrapper.container.classList.contains('e-outline') &&\n            this.textboxWrapper.container.classList.contains('e-autofill')) {\n            EventHandler.remove((this.textboxWrapper.container.querySelector('.e-float-text')), 'animationstart', this.animationHandler);\n        }\n    };\n    /**\n     * Removes the component from the DOM and detaches all its related event handlers.\n     * Also, it maintains the initial TextBox element from the DOM.\n     *\n     * @method destroy\n     * @returns {void}\n     */\n    TextBox.prototype.destroy = function () {\n        this.unWireEvents();\n        if (this.element.tagName === 'INPUT' && this.multiline) {\n            detach(this.textboxWrapper.container.getElementsByTagName('textarea')[0]);\n            this.respectiveElement = this.element;\n            this.element.removeAttribute('type');\n        }\n        this.respectiveElement.value = this.respectiveElement.defaultValue;\n        this.respectiveElement.classList.remove('e-input');\n        this.removeAttributes(['aria-disabled', 'aria-readonly', 'aria-labelledby']);\n        if (!isNullOrUndefined(this.textboxWrapper)) {\n            this.textboxWrapper.container.insertAdjacentElement('afterend', this.respectiveElement);\n            detach(this.textboxWrapper.container);\n        }\n        this.textboxWrapper = null;\n        Input.destroy();\n        _super.prototype.destroy.call(this);\n    };\n    /**\n     * Adding the icons to the TextBox component.\n     *\n     * @param { string } position - Specify the icon placement on the TextBox. Possible values are append and prepend.\n     * @param { string | string[] } icons - Icon classes which are need to add to the span element which is going to created.\n     * Span element acts as icon or button element for TextBox.\n     * @returns {void}\n     */\n    TextBox.prototype.addIcon = function (position, icons) {\n        Input.addIcon(position, icons, this.textboxWrapper.container, this.respectiveElement, this.createElement);\n    };\n    /* eslint-disable valid-jsdoc, jsdoc/require-returns */\n    /**\n     * Gets the properties to be maintained in the persisted state.\n     *\n     */\n    TextBox.prototype.getPersistData = function () {\n        var keyEntity = ['value'];\n        return this.addOnPersist(keyEntity);\n    };\n    /* eslint-enable valid-jsdoc, jsdoc/require-returns */\n    /**\n     * Adding the multiple attributes as key-value pair to the TextBox element.\n     *\n     * @param {string} attributes - Specifies the attributes to be add to TextBox element.\n     * @returns {void}\n     */\n    TextBox.prototype.addAttributes = function (attributes) {\n        for (var _i = 0, _a = Object.keys(attributes); _i < _a.length; _i++) {\n            var key = _a[_i];\n            if (key === 'disabled') {\n                this.setProperties({ enabled: false }, true);\n                Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n            }\n            else if (key === 'readonly') {\n                this.setProperties({ readonly: true }, true);\n                Input.setReadonly(this.readonly, this.respectiveElement);\n            }\n            else if (key === 'class') {\n                this.respectiveElement.classList.add(attributes[\"\" + key]);\n            }\n            else if (key === 'placeholder') {\n                this.setProperties({ placeholder: attributes[\"\" + key] }, true);\n                Input.setPlaceholder(this.placeholder, this.respectiveElement);\n            }\n            else if (key === 'rows' && this.respectiveElement.tagName === 'TEXTAREA') {\n                this.respectiveElement.setAttribute(key, attributes[\"\" + key]);\n            }\n            else {\n                this.respectiveElement.setAttribute(key, attributes[\"\" + key]);\n            }\n        }\n    };\n    /**\n     * Removing the multiple attributes as key-value pair to the TextBox element.\n     *\n     * @param { string[] } attributes - Specifies the attributes name to be removed from TextBox element.\n     * @returns {void}\n     */\n    TextBox.prototype.removeAttributes = function (attributes) {\n        for (var _i = 0, attributes_1 = attributes; _i < attributes_1.length; _i++) {\n            var key = attributes_1[_i];\n            if (key === 'disabled') {\n                this.setProperties({ enabled: true }, true);\n                Input.setEnabled(this.enabled, this.respectiveElement, this.floatLabelType, this.textboxWrapper.container);\n            }\n            else if (key === 'readonly') {\n                this.setProperties({ readonly: false }, true);\n                Input.setReadonly(this.readonly, this.respectiveElement);\n            }\n            else if (key === 'placeholder') {\n                this.setProperties({ placeholder: null }, true);\n                Input.setPlaceholder(this.placeholder, this.respectiveElement);\n            }\n            else {\n                this.respectiveElement.removeAttribute(key);\n            }\n        }\n    };\n    /**\n     * Sets the focus to widget for interaction.\n     *\n     * @returns {void}\n     */\n    TextBox.prototype.focusIn = function () {\n        if (document.activeElement !== this.respectiveElement && this.enabled) {\n            this.respectiveElement.focus();\n            if (this.textboxWrapper.container.classList.contains('e-input-group')\n                || this.textboxWrapper.container.classList.contains('e-outline')\n                || this.textboxWrapper.container.classList.contains('e-filled')) {\n                addClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n            }\n        }\n    };\n    /**\n     * Remove the focus from widget, if the widget is in focus state.\n     *\n     * @returns {void}\n     */\n    TextBox.prototype.focusOut = function () {\n        if (document.activeElement === this.respectiveElement && this.enabled) {\n            this.respectiveElement.blur();\n            if (this.textboxWrapper.container.classList.contains('e-input-group')\n                || this.textboxWrapper.container.classList.contains('e-outline')\n                || this.textboxWrapper.container.classList.contains('e-filled')) {\n                removeClass([this.textboxWrapper.container], [TEXTBOX_FOCUS]);\n            }\n        }\n    };\n    __decorate([\n        Property('text')\n    ], TextBox.prototype, \"type\", void 0);\n    __decorate([\n        Property(false)\n    ], TextBox.prototype, \"readonly\", void 0);\n    __decorate([\n        Property(null)\n    ], TextBox.prototype, \"value\", void 0);\n    __decorate([\n        Property('Never')\n    ], TextBox.prototype, \"floatLabelType\", void 0);\n    __decorate([\n        Property('')\n    ], TextBox.prototype, \"cssClass\", void 0);\n    __decorate([\n        Property(null)\n    ], TextBox.prototype, \"placeholder\", void 0);\n    __decorate([\n        Property('on')\n    ], TextBox.prototype, \"autocomplete\", void 0);\n    __decorate([\n        Property({})\n    ], TextBox.prototype, \"htmlAttributes\", void 0);\n    __decorate([\n        Property(false)\n    ], TextBox.prototype, \"multiline\", void 0);\n    __decorate([\n        Property(true)\n    ], TextBox.prototype, \"enabled\", void 0);\n    __decorate([\n        Property(false)\n    ], TextBox.prototype, \"showClearButton\", void 0);\n    __decorate([\n        Property(false)\n    ], TextBox.prototype, \"enablePersistence\", void 0);\n    __decorate([\n        Property(null)\n    ], TextBox.prototype, \"width\", void 0);\n    __decorate([\n        Event()\n    ], TextBox.prototype, \"created\", void 0);\n    __decorate([\n        Event()\n    ], TextBox.prototype, \"destroyed\", void 0);\n    __decorate([\n        Event()\n    ], TextBox.prototype, \"change\", void 0);\n    __decorate([\n        Event()\n    ], TextBox.prototype, \"blur\", void 0);\n    __decorate([\n        Event()\n    ], TextBox.prototype, \"focus\", void 0);\n    __decorate([\n        Event()\n    ], TextBox.prototype, \"input\", void 0);\n    TextBox = __decorate([\n        NotifyPropertyChanges\n    ], TextBox);\n    return TextBox;\n}(Component));\nexport { TextBox };\n","//! moment.js locale configuration\n//! locale : Portuguese [pt]\n//! author : Jefferson : https://github.com/jalex79\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var pt = moment.defineLocale('pt', {\n        months: 'janeiro_fevereiro_março_abril_maio_junho_julho_agosto_setembro_outubro_novembro_dezembro'.split(\n            '_'\n        ),\n        monthsShort: 'jan_fev_mar_abr_mai_jun_jul_ago_set_out_nov_dez'.split('_'),\n        weekdays:\n            'Domingo_Segunda-feira_Terça-feira_Quarta-feira_Quinta-feira_Sexta-feira_Sábado'.split(\n                '_'\n            ),\n        weekdaysShort: 'Dom_Seg_Ter_Qua_Qui_Sex_Sáb'.split('_'),\n        weekdaysMin: 'Do_2ª_3ª_4ª_5ª_6ª_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D [de] MMMM [de] YYYY',\n            LLL: 'D [de] MMMM [de] YYYY HH:mm',\n            LLLL: 'dddd, D [de] MMMM [de] YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[Hoje às] LT',\n            nextDay: '[Amanhã às] LT',\n            nextWeek: 'dddd [às] LT',\n            lastDay: '[Ontem às] LT',\n            lastWeek: function () {\n                return this.day() === 0 || this.day() === 6\n                    ? '[Último] dddd [às] LT' // Saturday + Sunday\n                    : '[Última] dddd [às] LT'; // Monday - Friday\n            },\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'em %s',\n            past: 'há %s',\n            s: 'segundos',\n            ss: '%d segundos',\n            m: 'um minuto',\n            mm: '%d minutos',\n            h: 'uma hora',\n            hh: '%d horas',\n            d: 'um dia',\n            dd: '%d dias',\n            w: 'uma semana',\n            ww: '%d semanas',\n            M: 'um mês',\n            MM: '%d meses',\n            y: 'um ano',\n            yy: '%d anos',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}º/,\n        ordinal: '%dº',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return pt;\n\n})));\n","/**\n * Save class provide method to save file\n * ```typescript\n * let blob : Blob = new Blob([''], { type: 'text/plain' });\n * Save.save('fileName.txt',blob);\n */\nvar Save = /** @class */ (function () {\n    /**\n     * Initialize new instance of {save}\n     */\n    function Save() {\n        // tslint:disable\n    }\n    /**\n     * Saves the file with specified name and sends the file to client browser\n     * @param  {string} fileName- file name to save.\n     * @param  {Blob} buffer- the content to write in file\n     * @param  {boolean} isMicrosoftBrowser- specify whether microsoft browser or not\n     * @returns {void}\n     */\n    Save.save = function (fileName, buffer) {\n        if (fileName === null || fileName === undefined || fileName === '') {\n            throw new Error('ArgumentException: fileName cannot be undefined, null or empty');\n        }\n        var extension = fileName.substring(fileName.lastIndexOf('.') + 1, fileName.length);\n        var mimeType = this.getMimeType(extension);\n        if (mimeType !== '') {\n            buffer = new Blob([buffer], { type: mimeType });\n        }\n        if (this.isMicrosoftBrowser) {\n            navigator.msSaveBlob(buffer, fileName);\n        }\n        else {\n            var downloadLink = document.createElementNS('http://www.w3.org/1999/xhtml', 'a');\n            this.saveInternal(fileName, extension, buffer, downloadLink, 'download' in downloadLink);\n        }\n    };\n    Save.saveInternal = function (fileName, extension, buffer, downloadLink, hasDownloadAttribute) {\n        if (hasDownloadAttribute) {\n            downloadLink.download = fileName;\n            var dataUrl_1 = window.URL.createObjectURL(buffer);\n            downloadLink.href = dataUrl_1;\n            var event_1 = document.createEvent('MouseEvent');\n            event_1.initEvent('click', true, true);\n            downloadLink.dispatchEvent(event_1);\n            setTimeout(function () {\n                window.URL.revokeObjectURL(dataUrl_1);\n                dataUrl_1 = undefined;\n            });\n        }\n        else {\n            if (extension !== 'docx' && extension !== 'xlsx') {\n                var url = window.URL.createObjectURL(buffer);\n                var isPopupBlocked = window.open(url, '_blank');\n                if (!isPopupBlocked) {\n                    window.location.href = url;\n                }\n            }\n            else {\n                var reader_1 = new FileReader();\n                reader_1.onloadend = function () {\n                    var isPopupBlocked = window.open(reader_1.result, '_blank');\n                    if (!isPopupBlocked) {\n                        window.location.href = reader_1.result;\n                    }\n                };\n                reader_1.readAsDataURL(buffer);\n            }\n        }\n    };\n    /**\n     *\n     * @param {string} extension - get mime type of the specified extension\n     * @private\n     */\n    Save.getMimeType = function (extension) {\n        var mimeType = '';\n        switch (extension) {\n            case 'html':\n                mimeType = 'text/html';\n                break;\n            case 'pdf':\n                mimeType = 'application/pdf';\n                break;\n            case 'docx':\n                mimeType = 'application/vnd.openxmlformats-officedocument.wordprocessingml.document';\n                break;\n            case 'xlsx':\n                mimeType = 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet';\n                break;\n            case 'txt':\n                mimeType = 'text/plain';\n                break;\n        }\n        return mimeType;\n    };\n    return Save;\n}());\nexport { Save };\n","//! moment.js locale configuration\n//! locale : Punjabi (India) [pa-in]\n//! author : Harpreet Singh : https://github.com/harpreetkhalsagtbit\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var symbolMap = {\n            1: '੧',\n            2: '੨',\n            3: '੩',\n            4: '੪',\n            5: '੫',\n            6: '੬',\n            7: '੭',\n            8: '੮',\n            9: '੯',\n            0: '੦',\n        },\n        numberMap = {\n            '੧': '1',\n            '੨': '2',\n            '੩': '3',\n            '੪': '4',\n            '੫': '5',\n            '੬': '6',\n            '੭': '7',\n            '੮': '8',\n            '੯': '9',\n            '੦': '0',\n        };\n\n    var paIn = moment.defineLocale('pa-in', {\n        // There are months name as per Nanakshahi Calendar but they are not used as rigidly in modern Punjabi.\n        months: 'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n            '_'\n        ),\n        monthsShort:\n            'ਜਨਵਰੀ_ਫ਼ਰਵਰੀ_ਮਾਰਚ_ਅਪ੍ਰੈਲ_ਮਈ_ਜੂਨ_ਜੁਲਾਈ_ਅਗਸਤ_ਸਤੰਬਰ_ਅਕਤੂਬਰ_ਨਵੰਬਰ_ਦਸੰਬਰ'.split(\n                '_'\n            ),\n        weekdays: 'ਐਤਵਾਰ_ਸੋਮਵਾਰ_ਮੰਗਲਵਾਰ_ਬੁਧਵਾਰ_ਵੀਰਵਾਰ_ਸ਼ੁੱਕਰਵਾਰ_ਸ਼ਨੀਚਰਵਾਰ'.split(\n            '_'\n        ),\n        weekdaysShort: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        weekdaysMin: 'ਐਤ_ਸੋਮ_ਮੰਗਲ_ਬੁਧ_ਵੀਰ_ਸ਼ੁਕਰ_ਸ਼ਨੀ'.split('_'),\n        longDateFormat: {\n            LT: 'A h:mm ਵਜੇ',\n            LTS: 'A h:mm:ss ਵਜੇ',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY, A h:mm ਵਜੇ',\n            LLLL: 'dddd, D MMMM YYYY, A h:mm ਵਜੇ',\n        },\n        calendar: {\n            sameDay: '[ਅਜ] LT',\n            nextDay: '[ਕਲ] LT',\n            nextWeek: '[ਅਗਲਾ] dddd, LT',\n            lastDay: '[ਕਲ] LT',\n            lastWeek: '[ਪਿਛਲੇ] dddd, LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s ਵਿੱਚ',\n            past: '%s ਪਿਛਲੇ',\n            s: 'ਕੁਝ ਸਕਿੰਟ',\n            ss: '%d ਸਕਿੰਟ',\n            m: 'ਇਕ ਮਿੰਟ',\n            mm: '%d ਮਿੰਟ',\n            h: 'ਇੱਕ ਘੰਟਾ',\n            hh: '%d ਘੰਟੇ',\n            d: 'ਇੱਕ ਦਿਨ',\n            dd: '%d ਦਿਨ',\n            M: 'ਇੱਕ ਮਹੀਨਾ',\n            MM: '%d ਮਹੀਨੇ',\n            y: 'ਇੱਕ ਸਾਲ',\n            yy: '%d ਸਾਲ',\n        },\n        preparse: function (string) {\n            return string.replace(/[੧੨੩੪੫੬੭੮੯੦]/g, function (match) {\n                return numberMap[match];\n            });\n        },\n        postformat: function (string) {\n            return string.replace(/\\d/g, function (match) {\n                return symbolMap[match];\n            });\n        },\n        // Punjabi notation for meridiems are quite fuzzy in practice. While there exists\n        // a rigid notion of a 'Pahar' it is not used as rigidly in modern Punjabi.\n        meridiemParse: /ਰਾਤ|ਸਵੇਰ|ਦੁਪਹਿਰ|ਸ਼ਾਮ/,\n        meridiemHour: function (hour, meridiem) {\n            if (hour === 12) {\n                hour = 0;\n            }\n            if (meridiem === 'ਰਾਤ') {\n                return hour < 4 ? hour : hour + 12;\n            } else if (meridiem === 'ਸਵੇਰ') {\n                return hour;\n            } else if (meridiem === 'ਦੁਪਹਿਰ') {\n                return hour >= 10 ? hour : hour + 12;\n            } else if (meridiem === 'ਸ਼ਾਮ') {\n                return hour + 12;\n            }\n        },\n        meridiem: function (hour, minute, isLower) {\n            if (hour < 4) {\n                return 'ਰਾਤ';\n            } else if (hour < 10) {\n                return 'ਸਵੇਰ';\n            } else if (hour < 17) {\n                return 'ਦੁਪਹਿਰ';\n            } else if (hour < 20) {\n                return 'ਸ਼ਾਮ';\n            } else {\n                return 'ਰਾਤ';\n            }\n        },\n        week: {\n            dow: 0, // Sunday is the first day of the week.\n            doy: 6, // The week that contains Jan 6th is the first week of the year.\n        },\n    });\n\n    return paIn;\n\n})));\n","/**\n * Encoding class: Contains the details about encoding type, whether to write a Unicode byte order mark (BOM).\n * ```typescript\n * let encoding : Encoding = new Encoding();\n * encoding.type = 'Utf8';\n * encoding.getBytes('Encoding', 0, 5);\n * ```\n */\nvar Encoding = /** @class */ (function () {\n    /**\n     * Initializes a new instance of the Encoding class. A parameter specifies whether to write a Unicode byte order mark\n     * @param  {boolean} includeBom?-true to specify that a Unicode byte order mark is written; otherwise, false.\n     */\n    function Encoding(includeBom) {\n        this.emitBOM = true;\n        this.encodingType = 'Ansi';\n        this.initBOM(includeBom);\n    }\n    Object.defineProperty(Encoding.prototype, \"includeBom\", {\n        /**\n         * Gets a value indicating whether to write a Unicode byte order mark\n         * @returns boolean- true to specify that a Unicode byte order mark is written; otherwise, false\n         */\n        get: function () {\n            return this.emitBOM;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    Object.defineProperty(Encoding.prototype, \"type\", {\n        /**\n         * Gets the encoding type.\n         * @returns EncodingType\n         */\n        get: function () {\n            return this.encodingType;\n        },\n        /**\n         * Sets the encoding type.\n         * @param  {EncodingType} value\n         */\n        set: function (value) {\n            this.encodingType = value;\n        },\n        enumerable: true,\n        configurable: true\n    });\n    /**\n     * Initialize the includeBom to emit BOM or Not\n     * @param  {boolean} includeBom\n     */\n    Encoding.prototype.initBOM = function (includeBom) {\n        if (includeBom === undefined || includeBom === null) {\n            this.emitBOM = true;\n        }\n        else {\n            this.emitBOM = includeBom;\n        }\n    };\n    /**\n     * Calculates the number of bytes produced by encoding the characters in the specified string\n     * @param  {string} chars - The string containing the set of characters to encode\n     * @returns {number} - The number of bytes produced by encoding the specified characters\n     */\n    Encoding.prototype.getByteCount = function (chars) {\n        var byteCount = 0;\n        validateNullOrUndefined(chars, 'string');\n        if (chars === '') {\n            var byte = this.utf8Len(chars.charCodeAt(0));\n            return byte;\n        }\n        if (this.type === null || this.type === undefined) {\n            this.type = 'Ansi';\n        }\n        return this.getByteCountInternal(chars, 0, chars.length);\n    };\n    /**\n     * Return the Byte of character\n     * @param  {number} codePoint\n     * @returns {number}\n     */\n    Encoding.prototype.utf8Len = function (codePoint) {\n        var bytes = codePoint <= 0x7F ? 1 :\n            codePoint <= 0x7FF ? 2 :\n                codePoint <= 0xFFFF ? 3 :\n                    codePoint <= 0x1FFFFF ? 4 : 0;\n        return bytes;\n    };\n    /**\n     * for 4 byte character return surrogate pair true, otherwise false\n     * @param  {number} codeUnit\n     * @returns {boolean}\n     */\n    Encoding.prototype.isHighSurrogate = function (codeUnit) {\n        return codeUnit >= 0xD800 && codeUnit <= 0xDBFF;\n    };\n    /**\n     * for 4byte character generate the surrogate pair\n     * @param  {number} highCodeUnit\n     * @param  {number} lowCodeUnit\n     */\n    Encoding.prototype.toCodepoint = function (highCodeUnit, lowCodeUnit) {\n        highCodeUnit = (0x3FF & highCodeUnit) << 10;\n        var u = highCodeUnit | (0x3FF & lowCodeUnit);\n        return u + 0x10000;\n    };\n    /**\n     * private method to get the byte count for specific charindex and count\n     * @param  {string} chars\n     * @param  {number} charIndex\n     * @param  {number} charCount\n     */\n    Encoding.prototype.getByteCountInternal = function (chars, charIndex, charCount) {\n        var byteCount = 0;\n        if (this.encodingType === 'Utf8' || this.encodingType === 'Unicode') {\n            var isUtf8 = this.encodingType === 'Utf8';\n            for (var i = 0; i < charCount; i++) {\n                var charCode = chars.charCodeAt(isUtf8 ? charIndex : charIndex++);\n                if (this.isHighSurrogate(charCode)) {\n                    if (isUtf8) {\n                        var high = charCode;\n                        var low = chars.charCodeAt(++charIndex);\n                        byteCount += this.utf8Len(this.toCodepoint(high, low));\n                    }\n                    else {\n                        byteCount += 4;\n                        ++i;\n                    }\n                }\n                else {\n                    if (isUtf8) {\n                        byteCount += this.utf8Len(charCode);\n                    }\n                    else {\n                        byteCount += 2;\n                    }\n                }\n                if (isUtf8) {\n                    charIndex++;\n                }\n            }\n            return byteCount;\n        }\n        else {\n            byteCount = charCount;\n            return byteCount;\n        }\n    };\n    /**\n     * Encodes a set of characters from the specified string into the ArrayBuffer.\n     * @param  {string} s- The string containing the set of characters to encode\n     * @param  {number} charIndex-The index of the first character to encode.\n     * @param  {number} charCount- The number of characters to encode.\n     * @returns {ArrayBuffer} - The ArrayBuffer that contains the resulting sequence of bytes.\n     */\n    Encoding.prototype.getBytes = function (s, charIndex, charCount) {\n        validateNullOrUndefined(s, 'string');\n        validateNullOrUndefined(charIndex, 'charIndex');\n        validateNullOrUndefined(charCount, 'charCount');\n        if (charIndex < 0 || charCount < 0) {\n            throw new RangeError('Argument Out Of Range Exception: charIndex or charCount is less than zero');\n        }\n        if (s.length - charIndex < charCount) {\n            throw new RangeError('Argument Out Of Range Exception: charIndex and charCount do not denote a valid range in string');\n        }\n        var bytes;\n        if (s === '') {\n            bytes = new ArrayBuffer(0);\n            return bytes;\n        }\n        if (this.type === null || this.type === undefined) {\n            this.type = 'Ansi';\n        }\n        var byteCount = this.getByteCountInternal(s, charIndex, charCount);\n        switch (this.type) {\n            case 'Utf8':\n                bytes = this.getBytesOfUtf8Encoding(byteCount, s, charIndex, charCount);\n                return bytes;\n            case 'Unicode':\n                bytes = this.getBytesOfUnicodeEncoding(byteCount, s, charIndex, charCount);\n                return bytes;\n            default:\n                bytes = this.getBytesOfAnsiEncoding(byteCount, s, charIndex, charCount);\n                return bytes;\n        }\n    };\n    /**\n     * Decodes a sequence of bytes from the specified ArrayBuffer into the string.\n     * @param  {ArrayBuffer} bytes- The ArrayBuffer containing the sequence of bytes to decode.\n     * @param  {number} index- The index of the first byte to decode.\n     * @param  {number} count- The number of bytes to decode.\n     * @returns {string} - The string that contains the resulting set of characters.\n     */\n    Encoding.prototype.getString = function (bytes, index, count) {\n        validateNullOrUndefined(bytes, 'bytes');\n        validateNullOrUndefined(index, 'index');\n        validateNullOrUndefined(count, 'count');\n        if (index < 0 || count < 0) {\n            throw new RangeError('Argument Out Of Range Exception: index or count is less than zero');\n        }\n        if (bytes.byteLength - index < count) {\n            throw new RangeError('Argument Out Of Range Exception: index and count do not denote a valid range in bytes');\n        }\n        if (bytes.byteLength === 0 || count === 0) {\n            return '';\n        }\n        if (this.type === null || this.type === undefined) {\n            this.type = 'Ansi';\n        }\n        var out = '';\n        var byteCal = new Uint8Array(bytes);\n        switch (this.type) {\n            case 'Utf8':\n                var s = this.getStringOfUtf8Encoding(byteCal, index, count);\n                return s;\n            case 'Unicode':\n                var byteUnicode = new Uint16Array(bytes);\n                out = this.getStringofUnicodeEncoding(byteUnicode, index, count);\n                return out;\n            default:\n                var j = index;\n                for (var i = 0; i < count; i++) {\n                    var c = byteCal[j];\n                    out += String.fromCharCode(c); // 1 byte(ASCII) character                  \n                    j++;\n                }\n                return out;\n        }\n    };\n    Encoding.prototype.getBytesOfAnsiEncoding = function (byteCount, s, charIndex, charCount) {\n        var bytes = new ArrayBuffer(byteCount);\n        var bufview = new Uint8Array(bytes);\n        var k = 0;\n        for (var i = 0; i < charCount; i++) {\n            var charcode = s.charCodeAt(charIndex++);\n            if (charcode < 0x800) {\n                bufview[k] = charcode;\n            }\n            else {\n                bufview[k] = 63; //replacement character '?'\n            }\n            k++;\n        }\n        return bytes;\n    };\n    Encoding.prototype.getBytesOfUtf8Encoding = function (byteCount, s, charIndex, charCount) {\n        var bytes = new ArrayBuffer(byteCount);\n        var uint = new Uint8Array(bytes);\n        var index = charIndex;\n        var j = 0;\n        for (var i = 0; i < charCount; i++) {\n            var charcode = s.charCodeAt(index);\n            if (charcode <= 0x7F) { // 1 byte character 2^7\n                uint[j] = charcode;\n            }\n            else if (charcode < 0x800) { // 2 byte character 2^11\n                uint[j] = 0xc0 | (charcode >> 6);\n                uint[++j] = 0x80 | (charcode & 0x3f);\n            }\n            else if ((charcode < 0xd800 || charcode >= 0xe000)) { // 3 byte character 2^16        \n                uint[j] = 0xe0 | (charcode >> 12);\n                uint[++j] = 0x80 | ((charcode >> 6) & 0x3f);\n                uint[++j] = 0x80 | (charcode & 0x3f);\n            }\n            else {\n                uint[j] = 0xef;\n                uint[++j] = 0xbf;\n                uint[++j] = 0xbd; // U+FFFE \"replacement character\"\n            }\n            ++j;\n            ++index;\n        }\n        return bytes;\n    };\n    Encoding.prototype.getBytesOfUnicodeEncoding = function (byteCount, s, charIndex, charCount) {\n        var bytes = new ArrayBuffer(byteCount);\n        var uint16 = new Uint16Array(bytes);\n        for (var i = 0; i < charCount; i++) {\n            var charcode = s.charCodeAt(i);\n            uint16[i] = charcode;\n        }\n        return bytes;\n    };\n    Encoding.prototype.getStringOfUtf8Encoding = function (byteCal, index, count) {\n        var j = 0;\n        var i = index;\n        var s = '';\n        for (j; j < count; j++) {\n            var c = byteCal[i++];\n            while (i > byteCal.length) {\n                return s;\n            }\n            if (c > 127) {\n                if (c > 191 && c < 224 && i < count) {\n                    c = (c & 31) << 6 | byteCal[i] & 63;\n                }\n                else if (c > 223 && c < 240 && i < byteCal.byteLength) {\n                    c = (c & 15) << 12 | (byteCal[i] & 63) << 6 | byteCal[++i] & 63;\n                }\n                else if (c > 239 && c < 248 && i < byteCal.byteLength) {\n                    c = (c & 7) << 18 | (byteCal[i] & 63) << 12 | (byteCal[++i] & 63) << 6 | byteCal[++i] & 63;\n                }\n                ++i;\n            }\n            s += String.fromCharCode(c); // 1 byte(ASCII) character                          \n        }\n        return s;\n    };\n    Encoding.prototype.getStringofUnicodeEncoding = function (byteUni, index, count) {\n        if (count > byteUni.length) {\n            throw new RangeError('ArgumentOutOfRange_Count');\n        }\n        var byte16 = new Uint16Array(count);\n        var out = '';\n        for (var i = 0; i < count && i < byteUni.length; i++) {\n            byte16[i] = byteUni[index++];\n        }\n        out = String.fromCharCode.apply(null, byte16);\n        return out;\n    };\n    /**\n     * To clear the encoding instance\n     * @return {void}\n     */\n    Encoding.prototype.destroy = function () {\n        this.emitBOM = undefined;\n        this.encodingType = undefined;\n    };\n    return Encoding;\n}());\nexport { Encoding };\n/**\n * To check the object is null or undefined and throw error if it is null or undefined\n * @param {Object} value - object to check is null or undefined\n * @return {boolean}\n * @throws {ArgumentException} - if the value is null or undefined\n * @private\n */\nexport function validateNullOrUndefined(value, message) {\n    if (value === null || value === undefined) {\n        throw new Error('ArgumentException: ' + message + ' cannot be null or undefined');\n    }\n}\n","//! moment.js locale configuration\n//! locale : Scottish Gaelic [gd]\n//! author : Jon Ashdown : https://github.com/jonashdown\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var months = [\n            'Am Faoilleach',\n            'An Gearran',\n            'Am Màrt',\n            'An Giblean',\n            'An Cèitean',\n            'An t-Ògmhios',\n            'An t-Iuchar',\n            'An Lùnastal',\n            'An t-Sultain',\n            'An Dàmhair',\n            'An t-Samhain',\n            'An Dùbhlachd',\n        ],\n        monthsShort = [\n            'Faoi',\n            'Gear',\n            'Màrt',\n            'Gibl',\n            'Cèit',\n            'Ògmh',\n            'Iuch',\n            'Lùn',\n            'Sult',\n            'Dàmh',\n            'Samh',\n            'Dùbh',\n        ],\n        weekdays = [\n            'Didòmhnaich',\n            'Diluain',\n            'Dimàirt',\n            'Diciadain',\n            'Diardaoin',\n            'Dihaoine',\n            'Disathairne',\n        ],\n        weekdaysShort = ['Did', 'Dil', 'Dim', 'Dic', 'Dia', 'Dih', 'Dis'],\n        weekdaysMin = ['Dò', 'Lu', 'Mà', 'Ci', 'Ar', 'Ha', 'Sa'];\n\n    var gd = moment.defineLocale('gd', {\n        months: months,\n        monthsShort: monthsShort,\n        monthsParseExact: true,\n        weekdays: weekdays,\n        weekdaysShort: weekdaysShort,\n        weekdaysMin: weekdaysMin,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[An-diugh aig] LT',\n            nextDay: '[A-màireach aig] LT',\n            nextWeek: 'dddd [aig] LT',\n            lastDay: '[An-dè aig] LT',\n            lastWeek: 'dddd [seo chaidh] [aig] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'ann an %s',\n            past: 'bho chionn %s',\n            s: 'beagan diogan',\n            ss: '%d diogan',\n            m: 'mionaid',\n            mm: '%d mionaidean',\n            h: 'uair',\n            hh: '%d uairean',\n            d: 'latha',\n            dd: '%d latha',\n            M: 'mìos',\n            MM: '%d mìosan',\n            y: 'bliadhna',\n            yy: '%d bliadhna',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(d|na|mh)/,\n        ordinal: function (number) {\n            var output = number === 1 ? 'd' : number % 10 === 2 ? 'na' : 'mh';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return gd;\n\n})));\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\nvar __decorate = (this && this.__decorate) || function (decorators, target, key, desc) {\n    var c = arguments.length, r = c < 3 ? target : desc === null ? desc = Object.getOwnPropertyDescriptor(target, key) : desc, d;\n    if (typeof Reflect === \"object\" && typeof Reflect.decorate === \"function\") r = Reflect.decorate(decorators, target, key, desc);\n    else for (var i = decorators.length - 1; i >= 0; i--) if (d = decorators[i]) r = (c < 3 ? d(r) : c > 3 ? d(target, key, r) : d(target, key)) || r;\n    return c > 3 && r && Object.defineProperty(target, key, r), r;\n};\n/* eslint-disable @typescript-eslint/triple-slash-reference */\n/// <reference path='../common/menu-base-model.d.ts'/>\nimport { attributes, getUniqueID, Collection, NotifyPropertyChanges, Property } from '@syncfusion/ej2-base';\nimport { getZindexPartial } from '@syncfusion/ej2-popups';\nimport { MenuBase, MenuItem } from '../common/menu-base';\n/**\n * The ContextMenu is a graphical user interface that appears on the user right click/touch hold operation.\n * ```html\n * <div id = 'target'></div>\n * <ul id = 'contextmenu'></ul>\n * ```\n * ```typescript\n * <script>\n * var contextMenuObj = new ContextMenu({items: [{ text: 'Cut' }, { text: 'Copy' },{ text: 'Paste' }], target: '#target'});\n * </script>\n * ```\n */\nvar ContextMenu = /** @class */ (function (_super) {\n    __extends(ContextMenu, _super);\n    /**\n     * Constructor for creating the widget.\n     *\n     * @private\n     * @param {ContextMenuModel} options - Specifies the context menu model\n     * @param {string} element - Specifies the element\n     */\n    function ContextMenu(options, element) {\n        return _super.call(this, options, element) || this;\n    }\n    /**\n     * For internal use only - prerender processing.\n     *\n     * @private\n     * @returns {void}\n     */\n    ContextMenu.prototype.preRender = function () {\n        this.isMenu = false;\n        this.element.id = this.element.id || getUniqueID('ej2-contextmenu');\n        _super.prototype.preRender.call(this);\n    };\n    ContextMenu.prototype.initialize = function () {\n        _super.prototype.initialize.call(this);\n        attributes(this.element, { 'role': 'menubar', 'tabindex': '0' });\n        this.element.style.zIndex = getZindexPartial(this.element).toString();\n    };\n    /**\n     * This method is used to open the ContextMenu in specified position.\n     *\n     * @param {number} top - To specify ContextMenu vertical positioning.\n     * @param {number} left - To specify ContextMenu horizontal positioning.\n     * @param {HTMLElement} target - To calculate z-index for ContextMenu based upon the specified target.\n     * @function open\n     * @returns {void}\n     */\n    ContextMenu.prototype.open = function (top, left, target) {\n        _super.prototype.openMenu.call(this, null, null, top, left, null, target);\n    };\n    /**\n     * Closes the ContextMenu if it is opened.\n     *\n     * @function close\n     * @returns {void}\n     */\n    ContextMenu.prototype.close = function () {\n        _super.prototype.closeMenu.call(this);\n    };\n    /**\n     * Called internally if any of the property value changed.\n     *\n     * @private\n     * @param {ContextMenuModel} newProp - Specifies new properties\n     * @param {ContextMenuModel} oldProp - Specifies old properties\n     * @returns {void}\n     */\n    ContextMenu.prototype.onPropertyChanged = function (newProp, oldProp) {\n        _super.prototype.onPropertyChanged.call(this, newProp, oldProp);\n        for (var _i = 0, _a = Object.keys(newProp); _i < _a.length; _i++) {\n            var prop = _a[_i];\n            switch (prop) {\n                case 'filter':\n                    this.close();\n                    this.filter = newProp.filter;\n                    break;\n                case 'target':\n                    this.unWireEvents(oldProp.target);\n                    this.wireEvents();\n                    break;\n            }\n        }\n    };\n    /**\n     * Get module name.\n     *\n     * @returns {string} - Module Name\n     * @private\n     */\n    ContextMenu.prototype.getModuleName = function () {\n        return 'contextmenu';\n    };\n    __decorate([\n        Property('')\n    ], ContextMenu.prototype, \"target\", void 0);\n    __decorate([\n        Property('')\n    ], ContextMenu.prototype, \"filter\", void 0);\n    __decorate([\n        Collection([], MenuItem)\n    ], ContextMenu.prototype, \"items\", void 0);\n    ContextMenu = __decorate([\n        NotifyPropertyChanges\n    ], ContextMenu);\n    return ContextMenu;\n}(MenuBase));\nexport { ContextMenu };\n","//! moment.js locale configuration\n//! locale : Dutch [nl]\n//! author : Joris Röling : https://github.com/jorisroling\n//! author : Jacob Middag : https://github.com/middagj\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var monthsShortWithDots =\n            'jan._feb._mrt._apr._mei_jun._jul._aug._sep._okt._nov._dec.'.split('_'),\n        monthsShortWithoutDots =\n            'jan_feb_mrt_apr_mei_jun_jul_aug_sep_okt_nov_dec'.split('_'),\n        monthsParse = [\n            /^jan/i,\n            /^feb/i,\n            /^maart|mrt.?$/i,\n            /^apr/i,\n            /^mei$/i,\n            /^jun[i.]?$/i,\n            /^jul[i.]?$/i,\n            /^aug/i,\n            /^sep/i,\n            /^okt/i,\n            /^nov/i,\n            /^dec/i,\n        ],\n        monthsRegex =\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december|jan\\.?|feb\\.?|mrt\\.?|apr\\.?|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i;\n\n    var nl = moment.defineLocale('nl', {\n        months: 'januari_februari_maart_april_mei_juni_juli_augustus_september_oktober_november_december'.split(\n            '_'\n        ),\n        monthsShort: function (m, format) {\n            if (!m) {\n                return monthsShortWithDots;\n            } else if (/-MMM-/.test(format)) {\n                return monthsShortWithoutDots[m.month()];\n            } else {\n                return monthsShortWithDots[m.month()];\n            }\n        },\n\n        monthsRegex: monthsRegex,\n        monthsShortRegex: monthsRegex,\n        monthsStrictRegex:\n            /^(januari|februari|maart|april|mei|ju[nl]i|augustus|september|oktober|november|december)/i,\n        monthsShortStrictRegex:\n            /^(jan\\.?|feb\\.?|mrt\\.?|apr\\.?|mei|ju[nl]\\.?|aug\\.?|sep\\.?|okt\\.?|nov\\.?|dec\\.?)/i,\n\n        monthsParse: monthsParse,\n        longMonthsParse: monthsParse,\n        shortMonthsParse: monthsParse,\n\n        weekdays:\n            'zondag_maandag_dinsdag_woensdag_donderdag_vrijdag_zaterdag'.split('_'),\n        weekdaysShort: 'zo._ma._di._wo._do._vr._za.'.split('_'),\n        weekdaysMin: 'zo_ma_di_wo_do_vr_za'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD-MM-YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[vandaag om] LT',\n            nextDay: '[morgen om] LT',\n            nextWeek: 'dddd [om] LT',\n            lastDay: '[gisteren om] LT',\n            lastWeek: '[afgelopen] dddd [om] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'over %s',\n            past: '%s geleden',\n            s: 'een paar seconden',\n            ss: '%d seconden',\n            m: 'één minuut',\n            mm: '%d minuten',\n            h: 'één uur',\n            hh: '%d uur',\n            d: 'één dag',\n            dd: '%d dagen',\n            w: 'één week',\n            ww: '%d weken',\n            M: 'één maand',\n            MM: '%d maanden',\n            y: 'één jaar',\n            yy: '%d jaar',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(ste|de)/,\n        ordinal: function (number) {\n            return (\n                number +\n                (number === 1 || number === 8 || number >= 20 ? 'ste' : 'de')\n            );\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return nl;\n\n})));\n","/* eslint-disable jsdoc/require-returns */\n/* eslint-disable valid-jsdoc */\n/* eslint-disable jsdoc/require-param */\nimport { ChartLocation, RectOption, isCollide, isOverlap } from '../../common/utils/helper';\nimport { markerAnimate, appendChildElement, getVisiblePoints } from '../../common/utils/helper';\nimport { getLabelText, convertHexToColor, calculateRect, textElement, colorNameToHex } from '../../common/utils/helper';\nimport { measureText, TextOption, Rect } from '@syncfusion/ej2-svg-base';\nimport { textRender } from '../../common/model/constants';\nimport { createTemplate, getFontStyle, getElement, measureElementRect, templateAnimate, withIn, withInBounds } from '../../common/utils/helper';\nimport { createElement, getValue, extend } from '@syncfusion/ej2-base';\nimport { getPoint, getRotatedRectangleCoordinates, isRotatedRectIntersect } from '../../common/utils/helper';\n/**\n * `DataLabel` module is used to render data label for the data point.\n */\nvar DataLabel = /** @class */ (function () {\n    /**\n     * Constructor for the data label module.\n     *\n     * @private\n     */\n    function DataLabel(chart) {\n        this.errorHeight = 0;\n        this.chart = chart;\n    }\n    DataLabel.prototype.initPrivateVariables = function (series, marker) {\n        var transform = '';\n        var clipPath = '';\n        var render = series.chart.renderer;\n        var index = (series.index === undefined) ? series.category : series.index;\n        if (series.chart.chartAreaType === 'Cartesian') {\n            transform = 'translate(' + series.clipRect.x + ',' + (series.clipRect.y) + ')';\n            clipPath = 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + index + ')';\n        }\n        if (marker.dataLabel.visible && !this.chart.enableCanvas) {\n            series.shapeElement = render.createGroup({\n                'id': this.chart.element.id + 'ShapeGroup' + index,\n                'transform': transform,\n                'clip-path': 'url(#' + this.chart.element.id + '_ChartSeriesClipRect_' + index + ')'\n            });\n            series.textElement = render.createGroup({\n                'id': this.chart.element.id + 'TextGroup' + index,\n                'transform': transform,\n                'clip-path': clipPath\n            });\n            series.textElement.setAttribute('aria-hidden', 'true');\n        }\n        this.markerHeight = ((series.type === 'Scatter' || marker.visible)) ? (marker.height / 2) : 0;\n        this.commonId = this.chart.element.id + '_Series_' + index + '_Point_';\n        this.calculateErrorHeight(series, series.marker.dataLabel.position);\n        this.chartBackground = this.chart.chartArea.background === 'transparent' ?\n            this.chart.background || this.chart.themeStyle.background : this.chart.chartArea.background;\n    };\n    DataLabel.prototype.calculateErrorHeight = function (series, position) {\n        if (!series.errorBar.visible) {\n            return null;\n        }\n        else if (series.errorBar.visible && this.chart.chartAreaType !== 'PolarRadar') {\n            var direction = series.errorBar.direction;\n            var positiveHeight = this.chart.errorBarModule.positiveHeight;\n            var negativeHeight = this.chart.errorBarModule.negativeHeight;\n            if (this.isRectSeries(series)) {\n                if (position === 'Top' || position === 'Auto') {\n                    if (direction === 'Both' || direction === 'Minus') {\n                        this.errorHeight = negativeHeight;\n                    }\n                    else {\n                        this.errorHeight = 0;\n                    }\n                }\n                if (position === 'Outer' || position === 'Auto') {\n                    if (direction === 'Both' || direction === 'Plus') {\n                        this.errorHeight = positiveHeight;\n                    }\n                    else {\n                        this.errorHeight = 0;\n                    }\n                }\n            }\n            else {\n                if (position === 'Top' || position === 'Outer' || position === 'Auto') {\n                    if ((direction === 'Both' || direction === 'Plus') && (!series.chart.isTransposed)) {\n                        this.errorHeight = positiveHeight;\n                    }\n                    else {\n                        this.errorHeight = 0;\n                    }\n                }\n                if (position === 'Bottom' || position === 'Auto') {\n                    if (direction === 'Both' || direction === 'Minus') {\n                        this.errorHeight = negativeHeight;\n                    }\n                    else {\n                        this.errorHeight = 0;\n                    }\n                }\n            }\n        }\n        else {\n            this.errorHeight = 0;\n        }\n    };\n    DataLabel.prototype.isRectSeries = function (series) {\n        return series.isRectSeries || series.type === 'RangeArea' || series.type === 'SplineRangeArea' || series.type === 'RangeStepArea';\n    };\n    /**\n     * Render the data label for series.\n     *\n     * @returns {void}\n     */\n    DataLabel.prototype.render = function (series, chart, dataLabel) {\n        // initialize the private variable\n        this.initPrivateVariables(series, series.marker);\n        var rect;\n        var labelLocation = { x: 0, y: 0 };\n        var rgbValue;\n        var contrast;\n        var argsData;\n        var border;\n        var textSize;\n        var angle;\n        var degree;\n        this.inverted = chart.requireInvertedAxis;\n        this.yAxisInversed = series.yAxis.isAxisInverse;\n        var redraw = chart.redraw;\n        var isDataLabelOverlap = false;\n        var coordinatesAfterRotation = [];\n        var templateId = chart.element.id + '_Series_' +\n            (series.index === undefined ? series.category : series.index) + '_DataLabelCollections';\n        var element = createElement('div', {\n            id: templateId\n        });\n        var visiblePoints = getVisiblePoints(series);\n        var point;\n        var rectCenterX;\n        var rectCenterY;\n        // Data label point iteration started\n        for (var i = 0; i < visiblePoints.length; i++) {\n            point = visiblePoints[i];\n            if (!dataLabel.showZero && ((point.y !== 0) || (point.y === 0 && series.emptyPointSettings.mode === 'Zero'))) {\n                return null;\n            }\n            this.margin = dataLabel.margin;\n            var labelText = [];\n            var labelLength = void 0;\n            var xPos = void 0;\n            var yPos = void 0;\n            var xValue = void 0;\n            var yValue = void 0;\n            var isRender = true;\n            var clip = series.clipRect;\n            var shapeRect = void 0;\n            isDataLabelOverlap = false;\n            dataLabel.angle = dataLabel.labelIntersectAction === 'Rotate90' ? 90 : dataLabel.angle;\n            dataLabel.enableRotation = dataLabel.labelIntersectAction === 'Rotate90' ? true : dataLabel.enableRotation;\n            angle = degree = dataLabel.angle;\n            border = { width: dataLabel.border.width, color: dataLabel.border.color };\n            var argsFont = (extend({}, getValue('properties', dataLabel.font), null, true));\n            if ((point.symbolLocations.length && point.symbolLocations[0]) ||\n                (series.type === 'BoxAndWhisker' && point.regions.length)) {\n                labelText = getLabelText(point, series, chart);\n                labelLength = labelText.length;\n                for (var i_1 = 0; i_1 < labelLength; i_1++) {\n                    argsData = {\n                        cancel: false, name: textRender, series: series,\n                        point: point, text: labelText[i_1], border: border,\n                        color: dataLabel.fill, template: dataLabel.template, font: argsFont, location: labelLocation,\n                        textSize: measureText(labelText[i_1], dataLabel.font, this.chart.themeStyle.datalabelFont)\n                    };\n                    chart.trigger(textRender, argsData);\n                    if (!argsData.cancel) {\n                        this.fontBackground = argsData.color;\n                        this.isDataLabelShape(argsData);\n                        this.markerHeight = series.type === 'Bubble' ? (point.regions[0].height / 2) : this.markerHeight;\n                        if (argsData.template !== null) {\n                            this.createDataLabelTemplate(element, series, dataLabel, point, argsData, i_1, redraw);\n                        }\n                        else {\n                            textSize = measureText(argsData.text, dataLabel.font, this.chart.themeStyle.datalabelFont);\n                            rect = this.calculateTextPosition(point, series, textSize, dataLabel, i_1);\n                            // To check whether the polar radar chart datalabel intersects the axis label or not\n                            if (chart.chartAreaType === 'PolarRadar') {\n                                for (var _i = 0, _a = chart.chartAxisLayoutPanel.visibleAxisLabelRect; _i < _a.length; _i++) {\n                                    var rectRegion = _a[_i];\n                                    if (isOverlap(new Rect(rect.x, rect.y, rect.width, rect.height), rectRegion)) {\n                                        isRender = false;\n                                        break;\n                                    }\n                                }\n                            }\n                            var actualRect = new Rect(rect.x + clip.x, rect.y + clip.y, rect.width, rect.height);\n                            //let notOverlapping: boolean;\n                            if (dataLabel.enableRotation) {\n                                var rectCoordinates = this.getRectanglePoints(rect);\n                                rectCenterX = rect.x + (rect.width / 2);\n                                rectCenterY = (rect.y + (rect.height / 2));\n                                coordinatesAfterRotation = getRotatedRectangleCoordinates(rectCoordinates, rectCenterX, rectCenterY, angle);\n                                isDataLabelOverlap = (dataLabel.labelIntersectAction === 'Rotate90' || angle == -90) ? false : this.isDataLabelOverlapWithChartBound(coordinatesAfterRotation, chart, clip);\n                                if (!isDataLabelOverlap) {\n                                    this.chart.rotatedDataLabelCollections.push(coordinatesAfterRotation);\n                                    var currentPointIndex = this.chart.rotatedDataLabelCollections.length - 1;\n                                    for (var index = currentPointIndex; index >= 0; index--) {\n                                        if (this.chart.rotatedDataLabelCollections[currentPointIndex] &&\n                                            this.chart.rotatedDataLabelCollections[index - 1] &&\n                                            isRotatedRectIntersect(this.chart.rotatedDataLabelCollections[currentPointIndex], this.chart.rotatedDataLabelCollections[index - 1])) {\n                                            isDataLabelOverlap = true;\n                                            this.chart.rotatedDataLabelCollections[currentPointIndex] = null;\n                                            break;\n                                        }\n                                    }\n                                }\n                            }\n                            else {\n                                isDataLabelOverlap = isCollide(rect, chart.dataLabelCollections, clip);\n                            }\n                            if ((!isDataLabelOverlap || dataLabel.labelIntersectAction === 'None') && isRender) {\n                                chart.dataLabelCollections.push(actualRect);\n                                if (this.isShape) {\n                                    shapeRect = chart.renderer.drawRectangle(new RectOption(this.commonId + point.index + '_TextShape_' + i_1, argsData.color, argsData.border, dataLabel.opacity, rect, dataLabel.rx, dataLabel.ry), new Int32Array([clip.x, clip.y]));\n                                    if (series.shapeElement) {\n                                        series.shapeElement.appendChild(shapeRect);\n                                    }\n                                }\n                                // Checking the font color\n                                var backgroundColor = this.fontBackground === 'transparent' ? ((this.chart.theme.indexOf('Dark') > -1 || this.chart.theme === 'HighContrast') ? 'black' : 'white') : this.fontBackground;\n                                rgbValue = convertHexToColor(colorNameToHex(backgroundColor));\n                                contrast = Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000);\n                                xPos = (rect.x + this.margin.left + textSize.width / 2) + labelLocation.x;\n                                yPos = (rect.y + this.margin.top + textSize.height * 3 / 4) + labelLocation.y;\n                                labelLocation = { x: 0, y: 0 };\n                                if (angle !== 0 && dataLabel.enableRotation) {\n                                    // xValue = xPos - (dataLabel.margin.left) / 2 + (dataLabel.margin.right / 2);\n                                    xValue = rectCenterX;\n                                    //yValue = yPos - (dataLabel.margin.top) / 2 - (textSize.height / dataLabel.margin.top) +\n                                    // (dataLabel.margin.bottom) / 2;\n                                    yValue = rectCenterY;\n                                    degree = (angle > 360) ? angle - 360 : (angle < -360) ? angle + 360 : angle;\n                                }\n                                else {\n                                    degree = 0;\n                                    xValue = rect.x;\n                                    yValue = rect.y;\n                                    xPos -= chart.chartAreaType == 'Cartesian' && xPos + (textSize.width / 2) > clip.width ? (xPos + textSize.width / 2) - clip.width : 0;\n                                    yPos -= (yPos + textSize.height > clip.y + clip.height && !(series.type.indexOf('Bar') > -1)) ? (yPos + textSize.height) - (clip.y + clip.height) : 0;\n                                }\n                                var textAnchor = dataLabel.labelIntersectAction === 'Rotate90' ? (dataLabel.position == 'Top' ? 'start' : (dataLabel.position == 'Middle' ? 'middle' : 'end')) :\n                                    ((angle == -90 && dataLabel.enableRotation) ? (dataLabel.position == 'Top' ? 'end' : (dataLabel.position == 'Middle' ? 'middle' : 'start')) : 'middle');\n                                textElement(chart.renderer, new TextOption(this.commonId + point.index + '_Text_' + i_1, xPos, yPos, textAnchor, argsData.text, 'rotate(' + degree + ',' + (xValue) + ',' + (yValue) + ')', 'auto', degree), argsData.font, argsData.font.color ||\n                                    ((contrast >= 128 || series.type === 'Hilo' || series.type === 'HiloOpenClose') ? 'black' : 'white'), series.textElement, false, redraw, true, false, series.chart.duration, series.clipRect, null, null, chart.enableCanvas, null, this.chart.themeStyle.datalabelFont);\n                            }\n                        }\n                    }\n                }\n            }\n        }\n        if (element.childElementCount) {\n            if (!chart.enableCanvas) {\n                appendChildElement(chart.enableCanvas, getElement(chart.element.id + '_Secondary_Element'), element, chart.redraw, \n                // eslint-disable-next-line @typescript-eslint/indent\n                false, 'x', 'y', null, '', false, false, null, chart.duration);\n            }\n            else {\n                getElement(chart.element.id + '_Secondary_Element').appendChild(element);\n            }\n        }\n    };\n    /**\n     * Get rect coordinates\n     */\n    DataLabel.prototype.getRectanglePoints = function (rect) {\n        var loc1 = new ChartLocation(rect.x, rect.y);\n        var loc2 = new ChartLocation(rect.x + rect.width, rect.y);\n        var loc3 = new ChartLocation(rect.x + rect.width, rect.y + rect.height);\n        var loc4 = new ChartLocation(rect.x, rect.y + rect.height);\n        return [loc1, loc2, loc3, loc4];\n    };\n    DataLabel.prototype.isDataLabelOverlapWithChartBound = function (rectCoordinates, chart, clip) {\n        for (var index = 0; index < rectCoordinates.length; index++) {\n            if (!withInBounds(rectCoordinates[index].x + clip.x, rectCoordinates[index].y + clip.y, chart.initialClipRect)) {\n                return true;\n            }\n        }\n        return false;\n    };\n    /**\n     * Render the data label template.\n     *\n     * @returns {void}\n     * @private\n     */\n    DataLabel.prototype.createDataLabelTemplate = function (parentElement, series, dataLabel, point, data, labelIndex, redraw) {\n        this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n        var clip = series.clipRect;\n        var childElement = createTemplate(createElement('div', {\n            id: this.chart.element.id + '_Series_' + (series.index === undefined ? series.category : series.index) + '_DataLabel_'\n                + point.index + (labelIndex ? ('_' + labelIndex) : ''),\n            styles: 'position: absolute;background-color:' + data.color + ';' +\n                getFontStyle(dataLabel.font) + ';border:' + data.border.width + 'px solid ' + data.border.color + ';'\n        }), point.index, data.template, this.chart, point, series, this.chart.element.id + '_DataLabel', labelIndex);\n        this.calculateTemplateLabelSize(parentElement, childElement, point, series, dataLabel, labelIndex, clip, redraw);\n    };\n    DataLabel.prototype.calculateTemplateLabelSize = function (parentElement, childElement, point, series, dataLabel, labelIndex, clip, redraw, isReactCallback) {\n        var elementRect = measureElementRect(childElement, redraw, isReactCallback);\n        var rect = this.calculateTextPosition(point, series, { width: elementRect.width, height: elementRect.height }, dataLabel, labelIndex);\n        var clipWidth = 0;\n        var clipHeight = 0;\n        var isOverlap = false;\n        if (isReactCallback) {\n            isOverlap = (elementRect.width === 0 || elementRect.height === 0); // To check the data label already overlap before react callback call\n            // clipWidth = ((series.clipRect.x + rect.x) + elementRect.width) > parentElement.clientWidth ?\n            //     (parentElement.clientWidth - (series.clipRect.x + rect.x)) : 0;\n            // clipHeight = (series.points.length - 1 === point.index) ? elementRect.height / 2 : 0;\n        }\n        childElement.style.left = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.x) + rect.x - clipWidth) + 'px';\n        childElement.style.top = ((this.chart.chartAreaType === 'PolarRadar' ? 0 : series.clipRect.y) + rect.y + clipHeight) + 'px';\n        var backgroundColor = this.fontBackground === 'transparent' ? (this.chart.theme.indexOf('Dark') > -1 ? 'black' : 'white') : this.fontBackground;\n        var rgbValue = convertHexToColor(colorNameToHex(backgroundColor));\n        var vAxis = series.chart.requireInvertedAxis ? series.xAxis : series.yAxis;\n        var hAxis = series.chart.requireInvertedAxis ? series.yAxis : series.xAxis;\n        childElement.style.color = dataLabel.font.color ||\n            ((Math.round((rgbValue.r * 299 + rgbValue.g * 587 + rgbValue.b * 114) / 1000)) >= 128 ? 'black' : 'white');\n        if (childElement.childElementCount && !isOverlap && (!isCollide(rect, this.chart.dataLabelCollections, clip) ||\n            dataLabel.labelIntersectAction === 'None') && (series.seriesType !== 'XY' || point.yValue === undefined ||\n            withIn(point.yValue, series.yAxis.visibleRange) || (series.type.indexOf('Stacking') > -1) ||\n            (series.type.indexOf('100') > -1 && withIn(series.stackedValues.endValues[point.index], series.yAxis.visibleRange))) &&\n            withIn(point.xValue, series.xAxis.visibleRange) && parseFloat(childElement.style.top) >= vAxis.rect.y &&\n            parseFloat(childElement.style.left) >= hAxis.rect.x &&\n            parseFloat(childElement.style.top) <= vAxis.rect.y + vAxis.rect.height &&\n            parseFloat(childElement.style.left) <= hAxis.rect.x + hAxis.rect.width) {\n            this.chart.dataLabelCollections.push(new Rect(rect.x + clip.x, rect.y + clip.y, rect.width, rect.height));\n            appendChildElement(this.chart.enableCanvas, parentElement, childElement, redraw, true, 'left', 'top');\n            if (series.animation.enable && this.chart.animateSeries && !this.chart.enableCanvas) {\n                this.doDataLabelAnimation(series, childElement);\n            }\n            else if (this.chart.enableCanvas) {\n                parentElement.appendChild(childElement);\n            }\n        }\n    };\n    DataLabel.prototype.calculateTextPosition = function (point, series, textSize, dataLabel, labelIndex) {\n        var labelRegion = labelIndex > 1 ? (series.type === 'Candle') ? point.regions[1] : point.regions[0] : point.regions[0];\n        if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n            labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n        }\n        var location;\n        location = this.getLabelLocation(point, series, textSize, labelIndex);\n        var padding = 5;\n        var clipRect = series.clipRect;\n        // calculating alignment\n        if (!this.chart.requireInvertedAxis || !this.isRectSeries(series) || series.type === 'BoxAndWhisker') {\n            this.locationX = location.x;\n            var alignmentValue = textSize.height + (this.borderWidth * 2) + this.markerHeight +\n                this.margin.bottom + this.margin.top + padding;\n            location.x = (dataLabel.position === 'Auto') ? location.x :\n                this.calculateAlignment(alignmentValue, location.x, dataLabel.alignment, this.isRectSeries(series) ? point.yValue < 0 : false);\n            // calculating position\n            location.y = (!this.isRectSeries(series) || series.type === 'BoxAndWhisker') ?\n                this.calculatePathPosition(location.y, dataLabel.position, series, point, textSize, labelIndex) :\n                this.calculateRectPosition(location.y, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n            if (this.isRectSeries(series) && this.chart.chartAreaType === 'PolarRadar') {\n                location = this.calculatePolarRectPosition(location, dataLabel.position, series, point, textSize, labelIndex, dataLabel.alignment, alignmentValue);\n            }\n        }\n        else {\n            this.locationY = location.y;\n            var alignmentValue = textSize.width + this.borderWidth + this.margin.left + this.margin.right - padding;\n            location.x = dataLabel.position === 'Auto' ? location.x :\n                this.calculateAlignment(alignmentValue, location.x, dataLabel.alignment, point.yValue < 0);\n            location.x = this.calculateRectPosition(location.x, labelRegion, point.yValue < 0 !== this.yAxisInversed, dataLabel.position, series, textSize, labelIndex, point);\n        }\n        var rect = calculateRect(location, textSize, this.margin);\n        // Checking the condition whether data Label has been exist the clip rect\n        if (!(dataLabel.enableRotation === true && dataLabel.angle !== 0) &&\n            !((rect.y > (clipRect.y + clipRect.height)) || (rect.x > (clipRect.x + clipRect.width)) ||\n                (rect.x + rect.width < 0) || (rect.y + rect.height < 0))) {\n            rect.x = rect.x < 0 ? padding : rect.x;\n            rect.y = (rect.y < 0) && !(dataLabel.labelIntersectAction === 'None') ? padding : rect.y;\n            rect.x -= (rect.x + rect.width) > (clipRect.x + clipRect.width) ? (rect.x + rect.width)\n                - (clipRect.x + clipRect.width) + padding : 0;\n            rect.y -= (rect.y + rect.height) > (clipRect.y + clipRect.height) ? (rect.y + rect.height)\n                - (clipRect.y + clipRect.height) + padding : 0;\n            this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n        }\n        var dataLabelOutRegion;\n        if (this.inverted && series.isRectSeries && (rect.x + rect.width > labelRegion.x + labelRegion.width)) {\n            dataLabelOutRegion = true;\n        }\n        this.fontBackground = dataLabelOutRegion ? this.chartBackground : this.fontBackground;\n        return rect;\n    };\n    // Calculation label location for polar column draw types\n    DataLabel.prototype.calculatePolarRectPosition = function (location, position, series, point, size, labelIndex, alignment, alignmentValue) {\n        var padding = 5;\n        var columnRadius;\n        var chartWidth = this.chart.availableSize.width;\n        var alignmentSign = (alignment === 'Center') ? 0 : (alignment === 'Far' ? 1 : -1);\n        var angle = (point.regionData.startAngle - 0.5 * Math.PI) + (point.regionData.endAngle - point.regionData.startAngle) / 2;\n        if (labelIndex === 0) {\n            columnRadius = point.regionData.radius < point.regionData.innerRadius ? point.regionData.innerRadius\n                : point.regionData.radius;\n        }\n        else {\n            columnRadius = point.regionData.radius > point.regionData.innerRadius ? point.regionData.innerRadius\n                : point.regionData.radius;\n        }\n        this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n        if (series.drawType.indexOf('Stacking') > -1) {\n            position = position === 'Outer' ? 'Top' : position;\n        }\n        else if (series.drawType.indexOf('Range') > -1) {\n            position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n        }\n        if (position === 'Outer') {\n            columnRadius = labelIndex === 0 ? columnRadius + 2 * padding + this.markerHeight :\n                columnRadius - 2 * padding - this.markerHeight;\n        }\n        else if (position === 'Middle') {\n            columnRadius = columnRadius / 2 + padding;\n            if (series.drawType === 'StackingColumn') {\n                columnRadius = point.regionData.innerRadius + ((point.regionData.radius - point.regionData.innerRadius) / 2)\n                    + padding - (size.height / 2);\n            }\n        }\n        else if (position === 'Top') {\n            columnRadius = labelIndex === 0 ? columnRadius - 2 * padding - this.markerHeight :\n                columnRadius + 2 * padding + this.markerHeight;\n        }\n        else if (position === 'Bottom') {\n            columnRadius = 2 * padding;\n            columnRadius += (series.drawType === 'StackingColumn') ? (point.regionData.innerRadius + this.markerHeight) : 0;\n        }\n        else {\n            if (labelIndex === 0) {\n                columnRadius = columnRadius >= series.chart.radius ? columnRadius - padding :\n                    series.drawType === 'StackingColumn' ? columnRadius - 2 * padding : columnRadius + 2 * padding;\n            }\n            else {\n                columnRadius = columnRadius >= series.chart.radius ? columnRadius + padding : columnRadius - 2 * padding;\n            }\n        }\n        columnRadius += (alignmentValue * alignmentSign);\n        location.x = series.clipRect.width / 2 + series.clipRect.x + columnRadius * Math.cos(angle);\n        // To change x location based on text anchor for column and stackingcolumn chart\n        if (series.drawType === 'StackingColumn') {\n            location.x = location.x < chartWidth / 2 ? location.x + size.width / 2 :\n                (location.x > chartWidth / 2 ? location.x - size.width / 2 : location.x);\n        }\n        else if (series.drawType === 'Column') {\n            location.x = location.x < chartWidth / 2 ? location.x - size.width / 2 :\n                (location.x > chartWidth / 2 ? location.x + size.width / 2 : location.x);\n        }\n        location.y = series.clipRect.height / 2 + series.clipRect.y + columnRadius * Math.sin(angle);\n        return location;\n    };\n    /**\n     * Get the label location\n     */\n    DataLabel.prototype.getLabelLocation = function (point, series, textSize, labelIndex) {\n        var location = new ChartLocation(0, 0);\n        var labelRegion = (series.type === 'Candle' && labelIndex > 1) ? point.regions[1] : point.regions[0];\n        if (series.type === 'HiloOpenClose') {\n            labelRegion = (labelIndex === 2) ? point.regions[1] : point.regions[2];\n        }\n        var xAxis = series.xAxis;\n        var yAxis = series.yAxis;\n        var isInverted = series.chart.requireInvertedAxis;\n        if (series.type === 'BoxAndWhisker') {\n            this.markerHeight = 0;\n            switch (labelIndex) {\n                case 0:\n                    location = getPoint(point.xValue, point.median, xAxis, yAxis, isInverted);\n                    break;\n                case 1:\n                    location = getPoint(point.xValue, point.maximum, xAxis, yAxis, isInverted);\n                    break;\n                case 2:\n                    location = getPoint(point.xValue, point.minimum, xAxis, yAxis, isInverted);\n                    break;\n                case 3:\n                    location = getPoint(point.xValue, point.upperQuartile, xAxis, yAxis, isInverted);\n                    break;\n                case 4:\n                    location = getPoint(point.xValue, point.lowerQuartile, xAxis, yAxis, isInverted);\n                    break;\n                default: {\n                    location = getPoint(point.xValue, point.outliers[labelIndex - 5], xAxis, yAxis, isInverted);\n                    this.markerHeight = series.marker.height / 2;\n                    break;\n                }\n            }\n            if (isInverted) {\n                location.y = point.regions[0].y + (point.regions[0].height / 2);\n            }\n            else {\n                location.x = point.regions[0].x + (point.regions[0].width / 2);\n            }\n        }\n        else if (labelIndex === 0 || labelIndex === 1) {\n            location = new ChartLocation(point.symbolLocations[0].x, point.symbolLocations[0].y);\n        }\n        else if ((labelIndex === 2 || labelIndex === 3) && series.type === 'Candle') {\n            location = new ChartLocation(point.symbolLocations[1].x, point.symbolLocations[1].y);\n        }\n        else if (isInverted) {\n            location = { x: labelRegion.x + (labelRegion.width) / 2, y: labelRegion.y };\n        }\n        else {\n            location = { x: labelRegion.x + labelRegion.width, y: labelRegion.y + (labelRegion.height) / 2 };\n        }\n        //Aligning the label at the beginning of the tick, when tick size is less than text size\n        if (labelIndex > 1 && series.type === 'HiloOpenClose') {\n            if (series.chart.requireInvertedAxis) {\n                var height = labelRegion.height;\n                location.y = labelRegion.y + height / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n            }\n            else {\n                var width = labelRegion.width;\n                location.x = labelRegion.x + width / 2 + 2 * (labelIndex === 2 ? 1 : -1);\n            }\n        }\n        return location;\n    };\n    DataLabel.prototype.calculateRectPosition = function (labelLocation, rect, isMinus, position, series, textSize, labelIndex, point) {\n        if (series.chart.chartAreaType === 'PolarRadar') {\n            return null;\n        }\n        var padding = 5;\n        var margin = this.margin;\n        var textLength = !this.inverted ? textSize.height : textSize.width;\n        var extraSpace = this.borderWidth + textLength / 2 + (position !== 'Outer' && series.type.indexOf('Column') > -1 &&\n            (Math.abs(rect.height - textSize.height) < padding) ? 0 : padding);\n        if (series.type === 'StackingColumn100' || series.type === 'StackingBar100') {\n            position = (position === 'Outer') ? 'Top' : position;\n        }\n        else if (series.type.indexOf('Range') > -1) {\n            position = (position === 'Outer' || position === 'Top') ? position : 'Auto';\n        }\n        else if (series.type === 'Waterfall') {\n            position = position === 'Auto' ? 'Middle' : position;\n        }\n        switch (position) {\n            case 'Bottom':\n                labelLocation = !this.inverted ?\n                    isMinus ? (labelLocation + (series.type === 'Waterfall' ? (-extraSpace - margin.top - this.markerHeight) : (-rect.height + extraSpace + margin.top))) :\n                        (labelLocation + rect.height - extraSpace - margin.bottom) :\n                    isMinus ? (labelLocation + (series.type === 'Waterfall' ? (+extraSpace + margin.left + this.markerHeight) : (+rect.width - extraSpace - margin.left))) :\n                        (labelLocation - rect.width + extraSpace + margin.right);\n                break;\n            case 'Middle':\n                labelLocation = labelLocation = !this.inverted ?\n                    (isMinus ? labelLocation - (rect.height / 2) : labelLocation + (rect.height / 2)) :\n                    (isMinus ? labelLocation + (rect.width / 2) : labelLocation - (rect.width / 2));\n                break;\n            case 'Auto':\n                labelLocation = this.calculateRectActualPosition(labelLocation, rect, isMinus, series, textSize, labelIndex, point);\n                break;\n            default:\n                extraSpace += this.errorHeight;\n                labelLocation = this.calculateTopAndOuterPosition(labelLocation, rect, position, series, labelIndex, extraSpace, isMinus);\n                break;\n        }\n        var check = !this.inverted ? (labelLocation < rect.y || labelLocation > rect.y + rect.height) :\n            (labelLocation < rect.x || labelLocation > rect.x + rect.width);\n        this.fontBackground = check ?\n            (this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground)\n            : this.fontBackground === 'transparent' ? (point.color || series.interior) : this.fontBackground;\n        var seriesLength = series.chart.series.length;\n        if (position === 'Outer' && (series.type.indexOf('Stacking') > -1) && ((seriesLength - 1) > series.index)) {\n            var nextSeries = void 0;\n            var nextSeriesPoint = void 0;\n            for (var i = series.index + 1; i < seriesLength; i++) {\n                nextSeries = series.chart.series[i];\n                nextSeriesPoint = nextSeries.points[point.index];\n                if ((nextSeries.type.indexOf('Stacking') > -1) && (nextSeries.type.indexOf('100') === -1)) {\n                    this.fontBackground = (nextSeriesPoint && ((nextSeriesPoint.yValue < 0 && point.yValue < 0) ||\n                        (nextSeriesPoint.yValue > 0 && point.yValue > 0))) ? (nextSeriesPoint ? nextSeriesPoint.color :\n                        nextSeries.interior) : this.fontBackground;\n                    break;\n                }\n            }\n        }\n        return labelLocation;\n    };\n    DataLabel.prototype.calculatePathPosition = function (labelLocation, position, series, point, size, labelIndex) {\n        var padding = 5;\n        if ((series.type.indexOf('Area') > -1 && series.type !== 'RangeArea' && series.type !== 'SplineRangeArea' && series.type !== 'RangeStepArea')\n            && this.yAxisInversed && series.marker.dataLabel.position !== 'Auto') {\n            position = position === 'Top' ? 'Bottom' : position === 'Bottom' ? 'Top' : position;\n        }\n        this.fontBackground = this.fontBackground === 'transparent' ? this.chartBackground : this.fontBackground;\n        switch (position) {\n            case 'Top':\n            case 'Outer':\n                labelLocation = labelLocation - this.markerHeight - this.borderWidth - size.height / 2 - this.margin.bottom - padding -\n                    this.errorHeight;\n                break;\n            case 'Bottom':\n                labelLocation = labelLocation + this.markerHeight + this.borderWidth + size.height / 2 + this.margin.top + padding +\n                    this.errorHeight;\n                break;\n            case 'Auto':\n                labelLocation = this.calculatePathActualPosition(labelLocation, this.markerHeight, series, point, size, labelIndex);\n                break;\n        }\n        return labelLocation;\n    };\n    DataLabel.prototype.isDataLabelShape = function (style) {\n        this.isShape = (style.color !== 'transparent' || style.border.width > 0);\n        this.borderWidth = style.border.width;\n        if (!this.isShape) {\n            this.margin = { left: 0, right: 0, bottom: 0, top: 0 };\n        }\n    };\n    DataLabel.prototype.calculateRectActualPosition = function (labelLocation, rect, isMinus, series, size, labelIndex, point) {\n        var location;\n        var labelRect;\n        var isOverLap = true;\n        var position = 0;\n        var collection = this.chart.dataLabelCollections;\n        var finalPosition = series.type.indexOf('Range') !== -1 || series.type === 'Hilo' ? 2 : 4;\n        while (isOverLap && position < finalPosition) {\n            var actualPosition = this.getPosition(position);\n            if (series.type.indexOf('Stacking') > -1 && actualPosition === 'Outer') {\n                actualPosition = 'Top';\n                position++;\n            }\n            location = this.calculateRectPosition(labelLocation, rect, isMinus, actualPosition, series, size, labelIndex, point);\n            if (!this.inverted) {\n                labelRect = calculateRect(new ChartLocation(this.locationX, location), size, this.margin);\n                isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect) || labelRect.y > series.clipRect.height;\n            }\n            else {\n                labelRect = calculateRect(new ChartLocation(location, this.locationY), size, this.margin);\n                isOverLap = labelRect.x < 0 || isCollide(labelRect, collection, series.clipRect) ||\n                    labelRect.x + labelRect.width > series.clipRect.width;\n            }\n            position++;\n        }\n        return location;\n    };\n    // alignment calculation assigned here\n    DataLabel.prototype.calculateAlignment = function (value, labelLocation, alignment, isMinus) {\n        switch (alignment) {\n            case 'Far':\n                labelLocation = !this.inverted ? (isMinus ? labelLocation + value : labelLocation - value) :\n                    (isMinus ? labelLocation - value : labelLocation + value);\n                break;\n            case 'Near':\n                labelLocation = !this.inverted ? (isMinus ? labelLocation - value : labelLocation + value) :\n                    (isMinus ? labelLocation + value : labelLocation - value);\n                break;\n            // eslint-disable-next-line no-self-assign\n            case 'Center':\n                labelLocation = labelLocation;\n                break;\n        }\n        return labelLocation;\n    };\n    //calculation for top and outer position of datalabel for rect series\n    DataLabel.prototype.calculateTopAndOuterPosition = function (location, rect, position, series, index, extraSpace, isMinus) {\n        var margin = this.margin;\n        var top;\n        switch (series.type) {\n            case 'RangeColumn':\n            case 'RangeArea':\n            case 'RangeStepArea':\n            case 'SplineRangeArea':\n            case 'Hilo':\n                top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n                location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n                break;\n            case 'Candle':\n                top = (index === 0 || index === 2) && !this.yAxisInversed\n                    || (index === 1 || index === 3) && this.yAxisInversed;\n                location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top, index > 1);\n                break;\n            case 'HiloOpenClose':\n                if (index <= 1) {\n                    top = (index === 0 && !this.yAxisInversed) || (index === 1 && this.yAxisInversed);\n                    location = this.updateLabelLocation(position, location, extraSpace, margin, rect, top);\n                }\n                else {\n                    if (this.yAxisInversed) {\n                        location = !this.inverted ? location + extraSpace + margin.top : location - extraSpace - margin.right;\n                    }\n                    else {\n                        location = !this.inverted ? location - extraSpace - margin.bottom : location + extraSpace + margin.left;\n                    }\n                }\n                break;\n            default:\n                if ((isMinus && position === 'Top') || (!isMinus && position === 'Outer')) {\n                    location = !this.inverted ? location + (isMinus && series.type === 'Waterfall' ? (-rect.height + extraSpace + margin.bottom) : (-extraSpace - margin.bottom - this.markerHeight)) :\n                        location + (isMinus && series.type === 'Waterfall' ? (+rect.width - extraSpace - margin.left) : (+extraSpace + margin.left + this.markerHeight));\n                }\n                else {\n                    location = !this.inverted ? location + (isMinus && series.type === 'Waterfall' ? (-rect.height - extraSpace - margin.top) : (+extraSpace + margin.top + this.markerHeight)) :\n                        location + (isMinus && series.type === 'Waterfall' ? (+rect.width + extraSpace + margin.top) : (-extraSpace - margin.right - this.markerHeight));\n                }\n                break;\n        }\n        return location;\n    };\n    /**\n     * Updates the label location\n     */\n    DataLabel.prototype.updateLabelLocation = function (position, location, extraSpace, margin, rect, top, inside) {\n        if (inside === void 0) { inside = false; }\n        if (!this.inverted) {\n            if (top) {\n                location = (position === 'Outer' && !inside) ? location - extraSpace - margin.bottom - this.markerHeight :\n                    location + extraSpace + margin.top + this.markerHeight;\n            }\n            else {\n                location = (position === 'Outer' && !inside) ? location + rect.height + extraSpace + margin.top + this.markerHeight :\n                    location + rect.height - extraSpace - margin.bottom - this.markerHeight;\n            }\n        }\n        else {\n            if (top) {\n                location = (position === 'Outer' && !inside) ? location + extraSpace + margin.left + this.markerHeight :\n                    location - extraSpace - margin.right - this.markerHeight;\n            }\n            else {\n                location = (position === 'Outer' && !inside) ? location - rect.width - extraSpace - margin.right - this.markerHeight :\n                    location - rect.width + extraSpace + margin.left + this.markerHeight;\n            }\n        }\n        return location;\n    };\n    DataLabel.prototype.calculatePathActualPosition = function (y, markerSize, series, point, size, labelIndex) {\n        var points = series.points;\n        var index = point.index;\n        var yValue = points[index].yValue;\n        var position;\n        var nextPoint = points.length - 1 > index ? points[index + 1] : null;\n        var previousPoint = index > 0 ? points[index - 1] : null;\n        var yLocation;\n        var isOverLap = true;\n        var labelRect;\n        var isBottom;\n        var positionIndex;\n        var collection = this.chart.dataLabelCollections;\n        if (series.type === 'Bubble') {\n            position = 'Top';\n        }\n        else if (series.type.indexOf('Step') > -1) {\n            position = 'Top';\n            if (index) {\n                position = (!previousPoint || !previousPoint.visible || (yValue > previousPoint.yValue !== this.yAxisInversed)\n                    || yValue === previousPoint.yValue) ? 'Top' : 'Bottom';\n            }\n        }\n        else if (series.type === 'BoxAndWhisker') {\n            if (labelIndex === 1 || labelIndex === 3 || labelIndex > 4) {\n                position = series.yAxis.isAxisInverse ? 'Bottom' : 'Top';\n            }\n            else if (labelIndex === 2 || labelIndex === 4) {\n                position = series.yAxis.isAxisInverse ? 'Top' : 'Bottom';\n            }\n            else {\n                isOverLap = false;\n                position = 'Middle';\n                yLocation = this.calculatePathPosition(y, position, series, point, size, labelIndex);\n            }\n        }\n        else {\n            if (index === 0) {\n                position = (!nextPoint || !nextPoint.visible || yValue > nextPoint.yValue ||\n                    (yValue < nextPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n            }\n            else if (index === points.length - 1) {\n                position = (!previousPoint || !previousPoint.visible || yValue > previousPoint.yValue ||\n                    (yValue < previousPoint.yValue && this.yAxisInversed)) ? 'Top' : 'Bottom';\n            }\n            else {\n                if (!nextPoint.visible && !(previousPoint && previousPoint.visible)) {\n                    position = 'Top';\n                }\n                else if (!nextPoint.visible || !previousPoint) {\n                    position = (nextPoint.yValue > yValue || (previousPoint && previousPoint.yValue > yValue)) ?\n                        'Bottom' : 'Top';\n                }\n                else {\n                    var slope = (nextPoint.yValue - previousPoint.yValue) / 2;\n                    var intersectY = (slope * index) + (nextPoint.yValue - (slope * (index + 1)));\n                    position = !this.yAxisInversed ? intersectY < yValue ? 'Top' : 'Bottom' :\n                        intersectY < yValue ? 'Bottom' : 'Top';\n                }\n            }\n        }\n        isBottom = position === 'Bottom';\n        positionIndex = ['Outer', 'Top', 'Bottom', 'Middle', 'Auto'].indexOf(position);\n        while (isOverLap && positionIndex < 4) {\n            yLocation = this.calculatePathPosition(y, this.getPosition(positionIndex), series, point, size, labelIndex);\n            labelRect = calculateRect(new ChartLocation(this.locationX, yLocation), size, this.margin);\n            isOverLap = labelRect.y < 0 || isCollide(labelRect, collection, series.clipRect)\n                || (labelRect.y + labelRect.height) > series.clipRect.height;\n            positionIndex = isBottom ? positionIndex - 1 : positionIndex + 1;\n            isBottom = false;\n        }\n        return yLocation;\n    };\n    /**\n     * Animates the data label.\n     *\n     * @param  {Series} series - Data label of the series gets animated.\n     * @returns {void}\n     */\n    DataLabel.prototype.doDataLabelAnimation = function (series, element) {\n        var shapeElements = series.shapeElement.childNodes;\n        var textNode = series.textElement.childNodes;\n        var delay = series.animation.delay + series.animation.duration;\n        var duration = series.chart.animated ? series.chart.duration : 200;\n        var location;\n        var length = element ? 1 : textNode.length;\n        var tempElement;\n        for (var i = 0; i < length; i++) {\n            tempElement = textNode[i];\n            if (element) {\n                element.style.visibility = 'hidden';\n                templateAnimate(element, delay, duration, 'ZoomIn');\n            }\n            else {\n                location = new ChartLocation((+tempElement.getAttribute('x')) + ((+tempElement.getAttribute('width')) / 2), (+tempElement.getAttribute('y')) + ((+tempElement.getAttribute('height')) / 2));\n                markerAnimate(tempElement, delay, duration, series, null, location, true);\n                if (shapeElements[i]) {\n                    tempElement = shapeElements[i];\n                    location = new ChartLocation((+tempElement.getAttribute('x')) + ((+tempElement.getAttribute('width')) / 2), (+tempElement.getAttribute('y')) + ((+tempElement.getAttribute('height')) / 2));\n                    markerAnimate(tempElement, delay, duration, series, null, location, true);\n                }\n            }\n        }\n    };\n    DataLabel.prototype.getPosition = function (index) {\n        return (['Outer', 'Top', 'Bottom', 'Middle', 'Auto'][index]);\n    };\n    /**\n     * Get module name.\n     */\n    DataLabel.prototype.getModuleName = function () {\n        // Returns the module name\n        return 'DataLabel';\n    };\n    /**\n     * To destroy the dataLabel for series.\n     *\n     * @returns {void}\n     * @private\n     */\n    DataLabel.prototype.destroy = function () {\n        // Destroy method performed here\n    };\n    return DataLabel;\n}());\nexport { DataLabel };\n","var __extends = (this && this.__extends) || (function () {\n    var extendStatics = function (d, b) {\n        extendStatics = Object.setPrototypeOf ||\n            ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n            function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; };\n        return extendStatics(d, b);\n    };\n    return function (d, b) {\n        extendStatics(d, b);\n        function __() { this.constructor = d; }\n        d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n    };\n})();\n/* eslint-disable @typescript-eslint/no-unused-vars */\n/* eslint-disable curly */\n/* eslint-disable max-len */\n/* eslint-disable jsdoc/require-returns */\n/* eslint-disable jsdoc/require-param */\n/* eslint-disable valid-jsdoc */\n/**\n * Chart legend\n */\nimport { remove, Browser, extend, isNullOrUndefined } from '@syncfusion/ej2-base';\nimport { LegendOptions, BaseLegend } from '../../common/legend/legend';\nimport { textTrim, removeElement, RectOption, withInBounds, blazorTemplatesReset } from '../../common/utils/helper';\nimport { getUnicodeText } from '../../common/utils/helper';\nimport { measureText, Rect, getElement } from '@syncfusion/ej2-svg-base';\nimport { legendRender, legendClick, regSub, regSup } from '../../common/model/constants';\nimport { textWrap } from '../../common/utils/helper';\n/**\n * `Legend` module is used to render legend for the chart.\n */\nvar Legend = /** @class */ (function (_super) {\n    __extends(Legend, _super);\n    function Legend(chart) {\n        var _this = _super.call(this, chart) || this;\n        _this.library = _this;\n        _this.addEventListener();\n        return _this;\n    }\n    /**\n     * Binding events for legend module.\n     */\n    Legend.prototype.addEventListener = function () {\n        if (this.chart.isDestroyed) {\n            return;\n        }\n        this.chart.on(Browser.touchMoveEvent, this.mouseMove, this);\n        this.chart.on('click', this.click, this);\n        this.chart.on(Browser.touchEndEvent, this.mouseEnd, this);\n    };\n    /**\n     * UnBinding events for legend module.\n     */\n    Legend.prototype.removeEventListener = function () {\n        if (this.chart.isDestroyed) {\n            return;\n        }\n        this.chart.off(Browser.touchMoveEvent, this.mouseMove);\n        this.chart.off('click', this.click);\n        this.chart.off(Browser.touchEndEvent, this.mouseEnd);\n    };\n    /**\n     * To handle mosue move for legend module\n     */\n    Legend.prototype.mouseMove = function (e) {\n        if (this.chart.legendSettings.visible && !this.chart.isTouch) {\n            this.move(e);\n            if (this.chart.highlightModule && (this.chart.highlightMode !== 'None' || this.chart.legendSettings.enableHighlight)) {\n                var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_marker_',\n                    this.legendID + '_shape_', this.legendID + '_g_'];\n                var targetId = e.target.id;\n                var index = void 0;\n                for (var _i = 0, legendItemsId_1 = legendItemsId; _i < legendItemsId_1.length; _i++) {\n                    var id = legendItemsId_1[_i];\n                    if (targetId.indexOf(id) > -1) {\n                        index = parseInt(targetId.split(id)[1], 10);\n                        this.chart.highlightModule.legendSelection(this.chart, index, e.target, e.type);\n                        break;\n                    }\n                }\n                // this.click(e);\n            }\n        }\n    };\n    /**\n     * To handle mosue end for legend module\n     */\n    Legend.prototype.mouseEnd = function (e) {\n        if (this.chart.legendSettings.visible && this.chart.isTouch) {\n            this.move(e);\n        }\n    };\n    /**\n     * Get the legend options.\n     *\n     * @returns {void}\n     * @private\n     */\n    Legend.prototype.getLegendOptions = function (visibleSeriesCollection, chart) {\n        this.legendCollections = [];\n        var seriesType;\n        var fill;\n        var dashArray;\n        var colors = [];\n        this.isRtlEnable = chart.enableRtl;\n        this.isReverse = !this.isRtlEnable && chart.legendSettings.reverse;\n        if (visibleSeriesCollection.length > 1) {\n            this.legend.mode = 'Series';\n        }\n        for (var _i = 0, visibleSeriesCollection_1 = visibleSeriesCollection; _i < visibleSeriesCollection_1.length; _i++) {\n            var series = visibleSeriesCollection_1[_i];\n            if (this.legend.mode === 'Series') {\n                if (series.category !== 'Indicator') {\n                    seriesType = (chart.chartAreaType === 'PolarRadar') ? series.drawType :\n                        series.type;\n                    dashArray = !series.marker.visible && (seriesType.indexOf('Line') > -1 && seriesType.indexOf('Area') === -1) ? series.dashArray : '';\n                    // To set legend color when use pointColorMapping\n                    fill = (series.pointColorMapping && series.points.length > 0) ?\n                        (series.points[0].interior ? series.points[0].interior : series.interior) : series.interior;\n                    this.legendCollections.push(new LegendOptions(series.name, fill, series.legendShape, (series.category === 'TrendLine' ?\n                        this.chart.series[series.sourceIndex].trendlines[series.index].visible : series.visible), seriesType, series.legendImageUrl ? series.legendImageUrl : (series.type === 'Scatter' && series.marker.shape === 'Image' ?\n                        series.marker.imageUrl : ''), series.marker.shape, series.marker.visible, null, null, dashArray));\n                }\n            }\n            else if (this.legend.mode === 'Point') {\n                var _loop_1 = function (points) {\n                    seriesType = (chart.chartAreaType === 'PolarRadar') ? series.drawType :\n                        series.type;\n                    fill = points.interior ? points.interior : series.interior;\n                    if (this_1.legendCollections.filter(function (i) { return i.text === points.x.toString(); }).length === 0) {\n                        this_1.legendCollections.push(new LegendOptions(points.x.toString(), fill, series.legendShape, (series.category === 'TrendLine' ?\n                            this_1.chart.series[series.sourceIndex].trendlines[series.index].visible : points.visible), seriesType, (series.type === 'Scatter' && series.marker.shape === 'Image') ? series.marker.imageUrl : '', series.marker.shape, series.marker.visible));\n                    }\n                };\n                var this_1 = this;\n                for (var _a = 0, _b = series.points; _a < _b.length; _a++) {\n                    var points = _b[_a];\n                    _loop_1(points);\n                }\n            }\n            else if (this.legend.mode === 'Range') {\n                for (var _c = 0, _d = series.points; _c < _d.length; _c++) {\n                    var points = _d[_c];\n                    seriesType = (chart.chartAreaType === 'PolarRadar') ? series.drawType :\n                        series.type;\n                    fill = points.interior ? points.interior : series.interior;\n                    var legendLabel = 'Others';\n                    if (colors.indexOf(fill) < 0) {\n                        colors.push(fill);\n                        if (chart.rangeColorSettings.length >= 1 && chart.rangeColorSettings[0].colors.length === 1) {\n                            for (var _e = 0, _f = chart.rangeColorSettings; _e < _f.length; _e++) {\n                                var rangeMap = _f[_e];\n                                if (rangeMap.colors[0] === fill) {\n                                    legendLabel = rangeMap.label;\n                                }\n                            }\n                            this.legendCollections.push(new LegendOptions(legendLabel, fill, series.legendShape, (series.category === 'TrendLine' ?\n                                this.chart.series[series.sourceIndex].trendlines[series.index].visible : points.visible), seriesType, (series.type === 'Scatter' && series.marker.shape === 'Image') ? series.marker.imageUrl : '', series.marker.shape, series.marker.visible));\n                        }\n                    }\n                }\n            }\n            else {\n                if (this.legendCollections.length === 0 && chart.rangeColorSettings.length > 0) {\n                    var startLabel = chart.rangeColorSettings[0].start.toString();\n                    var endLabel = chart.rangeColorSettings[chart.rangeColorSettings.length - 1].end.toString();\n                    this.legendCollections.push(new LegendOptions(startLabel, series.interior, 'Rectangle', true, seriesType, '', series.marker.shape, series.marker.visible));\n                    this.legendCollections.push(new LegendOptions(endLabel, series.interior, 'Rectangle', true, seriesType, '', series.marker.shape, series.marker.visible));\n                }\n            }\n        }\n        if (this.isReverse && chart.legendSettings.mode !== 'Gradient') {\n            this.legendCollections.reverse();\n        }\n    };\n    /** @private */\n    Legend.prototype.getLegendBounds = function (availableSize, legendBounds, legend) {\n        this.calculateLegendTitle(legend, legendBounds);\n        this.isTitle = legend.title ? true : false;\n        this.chartRowCount = 1;\n        this.rowHeights = [];\n        this.columnHeights = [];\n        this.pageHeights = [];\n        var padding = legend.padding;\n        var titlePosition = legend.titlePosition;\n        var extraHeight = 0;\n        var legendOption;\n        var extraWidth = 0;\n        var arrowWidth = this.arrowWidth;\n        var arrowHeight = this.arrowHeight;\n        var verticalArrowSpace = this.isVertical && !legend.enablePages ? arrowHeight : 0;\n        var titleSpace = this.isTitle && titlePosition === 'Top' ? this.legendTitleSize.height + this.fivePixel : 0;\n        titleSpace = this.isTitle && this.isVertical && titlePosition !== 'Top' ? this.legendTitleSize.height + this.fivePixel : titleSpace;\n        if (!this.isVertical) {\n            extraHeight = !legend.height ? ((availableSize.height / 100) * 5) : 0;\n        }\n        else {\n            extraWidth = !legend.width ? ((availableSize.width / 100) * 5) : 0;\n        }\n        legendBounds.height += (extraHeight);\n        legendBounds.width += extraWidth;\n        var shapeWidth = legend.shapeWidth;\n        var shapePadding = legend.shapePadding;\n        var maximumWidth = 0;\n        var rowWidth = 0;\n        var legendWidth = 0;\n        var columnHeight = 0;\n        var columnCount = 0;\n        var rowCount = 0;\n        var titlePlusArrowSpace = 0;\n        var legendEventArgs;\n        var render = false;\n        this.maxItemHeight = Math.max(measureText('MeasureText', legend.textStyle, this.chart.themeStyle.legendLabelFont).height, legend.shapeHeight);\n        for (var i = 0; i < this.legendCollections.length; i++) {\n            legendOption = this.legendCollections[i];\n            if (regSub.test(legendOption.text)) {\n                legendOption.text = getUnicodeText(legendOption.text, regSub);\n            }\n            if (regSup.test(legendOption.text)) {\n                legendOption.text = getUnicodeText(legendOption.text, regSup);\n            }\n            legendEventArgs = {\n                fill: legendOption.fill, text: legendOption.text, shape: legendOption.shape,\n                markerShape: legendOption.markerShape, name: legendRender, cancel: false\n            };\n            this.chart.trigger(legendRender, legendEventArgs);\n            legendOption.render = !legendEventArgs.cancel;\n            legendOption.text = legendEventArgs.text;\n            legendOption.fill = legendEventArgs.fill;\n            legendOption.shape = legendEventArgs.shape;\n            legendOption.markerShape = legendEventArgs.markerShape;\n            legendOption.textSize = measureText(legendOption.text, legend.textStyle, this.chart.themeStyle.legendLabelFont);\n            shapeWidth = legendOption.text ? legend.shapeWidth : 0;\n            shapePadding = legendOption.text ? legend.shapePadding : 0;\n            if (legendOption.render && legendOption.text) {\n                render = true;\n                legendWidth = shapeWidth + shapePadding + (legend.maximumLabelWidth ? legend.maximumLabelWidth : legendOption.textSize.width) + (!this.isVertical ? (i === 0) ? padding : this.itemPadding : padding);\n                rowWidth = rowWidth + legendWidth;\n                if (!legend.enablePages && !this.isVertical) {\n                    titlePlusArrowSpace = this.isTitle && titlePosition !== 'Top' ? this.legendTitleSize.width + this.fivePixel : 0;\n                    titlePlusArrowSpace += arrowWidth;\n                }\n                this.getLegendHeight(legendOption, legend, legendBounds, rowWidth, this.maxItemHeight, padding);\n                if (legendBounds.width < (padding + rowWidth + titlePlusArrowSpace) || this.isVertical) {\n                    maximumWidth = Math.max(maximumWidth, (rowWidth + padding + titlePlusArrowSpace - (this.isVertical ? 0 : legendWidth)));\n                    if (rowCount === 0 && (legendWidth !== rowWidth)) {\n                        rowCount = 1;\n                    }\n                    rowWidth = this.isVertical ? 0 : legendWidth;\n                    rowCount++;\n                    columnCount = 0;\n                    columnHeight = verticalArrowSpace;\n                    //columnHeight = (rowCount * (this.maxItemHeight + padding)) + padding + titleSpace + verticalArrowSpace;\n                }\n                var len = (rowCount > 0 ? (rowCount - 1) : 0);\n                this.rowHeights[len] = Math.max((this.rowHeights[len] ? this.rowHeights[len] : 0), legendOption.textSize.height);\n                // this.maxItemHeight = Math.max(this.maxItemHeight, legendOption.textSize.height);\n                this.columnHeights[columnCount] = (this.columnHeights[columnCount] ? this.columnHeights[columnCount] : 0) + legendOption.textSize.height + (this.isVertical ? (i === 0) ? padding : this.itemPadding : padding);\n                columnCount++;\n            }\n        }\n        columnHeight = Math.max.apply(null, this.columnHeights) + padding + titleSpace;\n        columnHeight = Math.max(columnHeight, (this.maxItemHeight + padding) + padding + titleSpace);\n        this.isPaging = legendBounds.height < columnHeight;\n        if (this.isPaging && !legend.enablePages) {\n            if (this.isVertical) {\n                // eslint-disable-next-line no-self-assign\n                columnHeight = columnHeight;\n            }\n            else {\n                columnHeight = (this.maxItemHeight + padding) + padding + (titlePosition === 'Top' ? titleSpace : 0);\n            }\n        }\n        this.totalPages = rowCount;\n        if (!this.isPaging && !this.isVertical) {\n            rowWidth += this.isTitle && titlePosition !== 'Top' ? (this.fivePixel + this.legendTitleSize.width + this.fivePixel) : 0;\n        }\n        if (render) {\n            this.setBounds(Math.max((rowWidth + padding), maximumWidth), columnHeight, legend, legendBounds);\n        }\n        else {\n            this.setBounds(0, 0, legend, legendBounds);\n        }\n    };\n    /** @private */\n    Legend.prototype.getLegendHeight = function (legendOption, legend, legendBounds, rowWidth, legendHeight, padding) {\n        var legendWidth = legendOption.textSize.width;\n        var textPadding = legend.shapePadding + (padding * 2) + legend.shapeWidth;\n        switch (legend.textWrap) {\n            case 'Wrap':\n            case 'AnyWhere':\n                if (legendWidth > legend.maximumLabelWidth || legendWidth + rowWidth > legendBounds.width) {\n                    legendOption.textCollection = textWrap(legendOption.text, (legend.maximumLabelWidth ? Math.min(legend.maximumLabelWidth, (legendBounds.width - textPadding)) : (legendBounds.width - textPadding)), legend.textStyle, this.chart.enableRtl, null, null, this.chart.themeStyle.legendLabelFont);\n                }\n                else {\n                    legendOption.textCollection.push(legendOption.text);\n                }\n                legendOption.textSize.height = (legendHeight * legendOption.textCollection.length);\n                break;\n        }\n    };\n    /** @private */\n    Legend.prototype.getRenderPoint = function (legendOption, start, textPadding, prevLegend, rect, count, firstLegend, rowCount) {\n        var padding = this.legend.padding;\n        var textWidth = textPadding + (this.legend.maximumLabelWidth ? this.legend.maximumLabelWidth : prevLegend.textSize.width);\n        var previousBound = prevLegend.location.x + ((!this.isRtlEnable) ? textWidth : -textWidth);\n        if (this.isWithinBounds(previousBound, (this.legend.maximumLabelWidth ? this.legend.maximumLabelWidth : legendOption.textSize.width) + textPadding - this.itemPadding, rect) || this.isVertical) {\n            legendOption.location.x = start.x;\n            if (count !== firstLegend)\n                this.chartRowCount++;\n            legendOption.location.y = (count === firstLegend) ? prevLegend.location.y :\n                prevLegend.location.y + (this.isVertical ? prevLegend.textSize.height : this.rowHeights[(this.chartRowCount - 2)]) + (this.isVertical ? this.itemPadding : padding);\n        }\n        else {\n            legendOption.location.x = (count === firstLegend) ? prevLegend.location.x : previousBound;\n            legendOption.location.y = prevLegend.location.y;\n        }\n        var availwidth = (!this.isRtlEnable) ? (this.legendBounds.x + this.legendBounds.width) - (legendOption.location.x +\n            textPadding - this.itemPadding - this.legend.shapeWidth / 2) : (legendOption.location.x - textPadding + this.itemPadding + (this.legend.shapeWidth / 2)) - this.legendBounds.x;\n        if (!this.isVertical && this.isPaging && !this.legend.enablePages) {\n            availwidth = this.legendBounds.width - legendOption.location.x - this.fivePixel;\n        }\n        availwidth = this.legend.maximumLabelWidth ? Math.min(this.legend.maximumLabelWidth, availwidth) : availwidth;\n        if (this.legend.textOverflow === 'Ellipsis' && this.legend.textWrap === 'Normal') {\n            legendOption.text = textTrim(+availwidth.toFixed(4), legendOption.text, this.legend.textStyle, this.chart.enableRtl, this.chart.themeStyle.legendLabelFont);\n        }\n    };\n    Legend.prototype.isWithinBounds = function (previousBound, textWidth, rect) {\n        if (!this.isRtlEnable) {\n            return (previousBound + textWidth) > (rect.x + rect.width + (this.legend.shapeWidth / 2));\n        }\n        else {\n            return (previousBound - textWidth) < (rect.x - (this.legend.shapeWidth / 2));\n        }\n    };\n    /** @private */\n    Legend.prototype.LegendClick = function (index, event) {\n        var chart = this.chart;\n        var seriesIndex = chart.legendSettings.mode === 'Series' ? index : 0;\n        var legendIndex = !this.isReverse ? index : (this.legendCollections.length - 1) - index;\n        var series = chart.visibleSeries[seriesIndex];\n        var legend = this.legendCollections[legendIndex];\n        var changeDetection = 'isProtectedOnChange';\n        if (chart.legendSettings.mode === 'Series') {\n            var legendClickArgs = {\n                legendText: legend.text, legendShape: legend.shape,\n                chart: chart.isBlazor ? {} : chart, series: series, points: series.points, name: legendClick, cancel: false\n            };\n            this.chart.trigger(legendClick, legendClickArgs);\n            series.legendShape = legendClickArgs.legendShape;\n            if (!legendClickArgs.cancel) {\n                if (series.fill !== null) {\n                    chart.visibleSeries[index].interior = series.fill;\n                }\n                if (chart.legendSettings.toggleVisibility) {\n                    series.chart[changeDetection] = true;\n                    if (series.category === 'TrendLine') {\n                        if (!chart.series[series.sourceIndex].trendlines[series.index].visible && chart.series[series.sourceIndex].visible) {\n                            chart.series[series.sourceIndex].trendlines[series.index].visible = true;\n                        }\n                        else {\n                            chart.series[series.sourceIndex].trendlines[series.index].visible = false;\n                        }\n                    }\n                    else {\n                        this.changeSeriesVisiblity(series, series.visible);\n                    }\n                    legend.visible = series.category === 'TrendLine' ? chart.series[series.sourceIndex].trendlines[series.index].visible :\n                        (series.visible);\n                    this.refreshLegendToggle(chart, series);\n                }\n                else if (chart.highlightModule) {\n                    chart.highlightModule.legendSelection(chart, index, event.target, event.type);\n                }\n                else if (chart.selectionModule) {\n                    chart.selectionModule.legendSelection(chart, index, event.target, event.type);\n                }\n                series.chart[changeDetection] = false;\n            }\n        }\n        else if (chart.legendSettings.mode === 'Point') {\n            var point = series.points[index];\n            var legendClickArgs = {\n                legendText: legend.text, legendShape: legend.shape,\n                chart: chart.isBlazor ? {} : chart, series: series, points: [point], name: legendClick, cancel: false\n            };\n            this.chart.trigger(legendClick, legendClickArgs);\n            if (chart.legendSettings.toggleVisibility && !legendClickArgs.cancel) {\n                point.visible = !point.visible;\n                var legendOption = this.legendCollections[index];\n                legendOption.visible = point.visible;\n                this.refreshLegendToggle(chart, series);\n            }\n        }\n        else if (chart.legendSettings.mode === 'Range') {\n            var points = [];\n            var legendOption = this.legendCollections[index];\n            for (var _i = 0, _a = series.points; _i < _a.length; _i++) {\n                var point = _a[_i];\n                if (legendOption.fill === (point.interior || series.interior)) {\n                    points.push(point);\n                }\n            }\n            var legendClickArgs = {\n                legendText: legend.text, legendShape: legend.shape,\n                chart: chart.isBlazor ? {} : chart, series: series, points: points, name: legendClick, cancel: false\n            };\n            this.chart.trigger(legendClick, legendClickArgs);\n            if (chart.legendSettings.toggleVisibility && !legendClickArgs.cancel) {\n                legendOption.visible = !legendOption.visible;\n                for (var _b = 0, points_1 = points; _b < points_1.length; _b++) {\n                    var point = points_1[_b];\n                    point.visible = !point.visible;\n                }\n                this.refreshLegendToggle(chart, series);\n            }\n        }\n    };\n    Legend.prototype.refreshLegendToggle = function (chart, series) {\n        var selectedDataIndexes = [];\n        if (chart.selectionModule) {\n            selectedDataIndexes = extend([], chart.selectionModule.selectedDataIndexes, null, true);\n        }\n        if ((chart.svgObject.childNodes.length > 0) && !chart.enableAnimation && !chart.enableCanvas) {\n            while (chart.svgObject.lastChild) {\n                chart.svgObject.removeChild(chart.svgObject.lastChild);\n            }\n            remove(chart.svgObject);\n        }\n        chart.animateSeries = false;\n        chart.redraw = chart.enableAnimation;\n        chart.rotatedDataLabelCollections = [];\n        removeElement(getElement(chart.element.id + '_Secondary_Element').querySelectorAll('.ejSVGTooltip')[0]);\n        blazorTemplatesReset(chart);\n        this.redrawSeriesElements(series, chart);\n        chart.removeSvg();\n        chart.refreshAxis();\n        series.refreshAxisLabel();\n        this.refreshSeries(chart.visibleSeries);\n        for (var _i = 0, _a = chart.visibleSeries; _i < _a.length; _i++) {\n            var series_1 = _a[_i];\n            if (!isNullOrUndefined(series_1)) {\n                chart.markerRender.removeHighlightedMarker(series_1, null, true);\n            }\n        }\n        chart.refreshBound();\n        chart.trigger('loaded', { chart: chart });\n        if (selectedDataIndexes.length > 0) {\n            chart.selectionModule.selectedDataIndexes = selectedDataIndexes;\n            chart.selectionModule.redrawSelection(chart, chart.selectionMode);\n        }\n        if (chart.highlightModule && chart.highlightMode !== 'None' || chart.legendSettings.enableHighlight) {\n            chart.highlightModule.redrawSelection(chart, chart.highlightMode);\n        }\n        chart.redraw = false;\n    };\n    Legend.prototype.changeSeriesVisiblity = function (series, visibility) {\n        series.visible = !visibility;\n        if (this.isSecondaryAxis(series.xAxis)) {\n            series.xAxis.internalVisibility = series.xAxis.series.some(function (value) { return (value.visible); });\n        }\n        if (this.isSecondaryAxis(series.yAxis) || (series.category == 'Pareto' && series.type == 'Line')) {\n            series.yAxis.internalVisibility = series.yAxis.series.some(function (value) { return (value.visible); });\n        }\n        if (series.trendlines.length && series.visible) {\n            series.trendlines.forEach(function (trendline) {\n                trendline.visible = true;\n            });\n        }\n    };\n    Legend.prototype.isSecondaryAxis = function (axis) {\n        return (this.chart.axes.indexOf(axis) > -1);\n    };\n    Legend.prototype.redrawSeriesElements = function (series, chart) {\n        if (!chart.redraw) {\n            return null;\n        }\n        removeElement(chart.element.id + '_Series_' + (series.index === undefined ? series.category : series.index) +\n            '_DataLabelCollections');\n    };\n    Legend.prototype.refreshSeries = function (seriesCollection) {\n        for (var _i = 0, seriesCollection_1 = seriesCollection; _i < seriesCollection_1.length; _i++) {\n            var series = seriesCollection_1[_i];\n            if (series.type.indexOf('Spline') > -1) {\n                var isArea = (series.type.indexOf('Area') > -1 || series.drawType.indexOf('Area') > -1);\n                var isRange = series.type.indexOf('Range') > -1;\n                this.chart['spline' + (isArea ? isRange ? 'RangeArea' : 'Area' : '') + 'SeriesModule'].findSplinePoint(series);\n            }\n            series.position = undefined;\n        }\n    };\n    /**\n     * To show the tooltip for the trimmed text in legend.\n     *\n     * @returns {void}\n     */\n    Legend.prototype.click = function (event) {\n        var _this = this;\n        if (!this.chart.legendSettings.visible) {\n            return;\n        }\n        var pageX = this.chart.mouseX;\n        var pageY = this.chart.mouseY;\n        var legendRegion = [];\n        var targetId = event.target.id.indexOf('_chart_legend_g_') > -1 ?\n            event.target.firstChild['id'] : event.target.id;\n        var legendItemsId = [this.legendID + '_text_', this.legendID + '_shape_marker_',\n            this.legendID + '_shape_'];\n        var seriesIndex;\n        for (var _i = 0, legendItemsId_2 = legendItemsId; _i < legendItemsId_2.length; _i++) {\n            var id = legendItemsId_2[_i];\n            if (targetId.indexOf(id) > -1) {\n                seriesIndex = parseInt(targetId.split(id)[1], 10);\n                this.LegendClick(seriesIndex, event);\n                break;\n            }\n        }\n        if (targetId.indexOf(this.legendID + '_pageup') > -1) {\n            this.changePage(event, true);\n        }\n        else if (targetId.indexOf(this.legendID + '_pagedown') > -1) {\n            this.changePage(event, false);\n        }\n        if (this.chart.enableCanvas && this.pagingRegions.length) {\n            this.checkWithinBounds(pageX, pageY);\n        }\n        legendRegion = this.legendRegions.filter(function (region) {\n            return (withInBounds(pageX, (pageY + (_this.isPaging ? (_this.currentPageNumber - 1) * _this.translatePage(_this.chart.enableCanvas, null, 1, 2) : 0)), region.rect));\n        });\n        if (legendRegion.length && this.chart.enableCanvas) {\n            this.LegendClick(legendRegion[0].index, event);\n        }\n    };\n    /**\n     * To check click position is within legend bounds\n     */\n    Legend.prototype.checkWithinBounds = function (pageX, pageY) {\n        var cRender = this.chart.renderer;\n        var bounds = this.legendBounds;\n        var borderWidth = this.chart.legendSettings.border.width;\n        var canvasRect = new Rect(bounds.x, bounds.y, bounds.width, bounds.height);\n        canvasRect.x = canvasRect.x - borderWidth / 2;\n        canvasRect.y = canvasRect.y - borderWidth / 2;\n        canvasRect.width = canvasRect.width + borderWidth;\n        canvasRect.height = canvasRect.height + borderWidth;\n        if (withInBounds(pageX, pageY, this.pagingRegions[0])) {\n            // pageDown calculations are performing here\n            if (!this.isRtlEnable) {\n                this.canvasPageDown(cRender, canvasRect, bounds);\n            }\n            else {\n                this.canvasPageUp(cRender, canvasRect, bounds);\n            }\n            return null;\n        }\n        if (withInBounds(pageX, pageY, this.pagingRegions[1])) {\n            // pageUp calculations are performing here\n            if (!this.isRtlEnable) {\n                this.canvasPageUp(cRender, canvasRect, bounds);\n            }\n            else {\n                this.canvasPageDown(cRender, canvasRect, bounds);\n            }\n            return null;\n        }\n    };\n    Legend.prototype.canvasPageDown = function (cRender, canvasRect, bounds) {\n        if (--this.currentPageNumber > 0) {\n            this.legendRegions = [];\n            cRender.clearRect(canvasRect);\n            cRender.canvasClip(new RectOption('legendClipPath', 'transparent', { width: 0, color: '' }, null, canvasRect));\n            this.renderLegend(this.chart, this.legend, bounds);\n            cRender.canvasRestore();\n        }\n        else {\n            ++this.currentPageNumber;\n        }\n    };\n    Legend.prototype.canvasPageUp = function (cRender, canvasRect, bounds) {\n        if (++this.currentPageNumber > 0 && this.currentPageNumber <= this.totalNoOfPages) {\n            this.legendRegions = [];\n            cRender.clearRect(canvasRect);\n            cRender.canvasClip(new RectOption('legendClipPath', 'transpaent', { width: 0, color: '' }, null, canvasRect));\n            this.renderLegend(this.chart, this.legend, bounds);\n            cRender.canvasRestore();\n        }\n        else {\n            --this.currentPageNumber;\n        }\n    };\n    /**\n     * Get module name\n     */\n    Legend.prototype.getModuleName = function () {\n        return 'Legend';\n    };\n    /**\n     * To destroy the Legend.\n     *\n     * @returns {void}\n     * @private\n     */\n    Legend.prototype.destroy = function () {\n        this.removeEventListener();\n    };\n    return Legend;\n}(BaseLegend));\nexport { Legend };\n","//! moment.js locale configuration\n//! locale : Pseudo [x-pseudo]\n//! author : Andrew Hood : https://github.com/andrewhood125\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var xPseudo = moment.defineLocale('x-pseudo', {\n        months: 'J~áñúá~rý_F~ébrú~árý_~Márc~h_Áp~ríl_~Máý_~Júñé~_Júl~ý_Áú~gúst~_Sép~témb~ér_Ó~ctób~ér_Ñ~óvém~bér_~Décé~mbér'.split(\n            '_'\n        ),\n        monthsShort:\n            'J~áñ_~Féb_~Már_~Ápr_~Máý_~Júñ_~Júl_~Áúg_~Sép_~Óct_~Ñóv_~Déc'.split(\n                '_'\n            ),\n        monthsParseExact: true,\n        weekdays:\n            'S~úñdá~ý_Mó~ñdáý~_Túé~sdáý~_Wéd~ñésd~áý_T~húrs~dáý_~Fríd~áý_S~átúr~dáý'.split(\n                '_'\n            ),\n        weekdaysShort: 'S~úñ_~Móñ_~Túé_~Wéd_~Thú_~Frí_~Sát'.split('_'),\n        weekdaysMin: 'S~ú_Mó~_Tú_~Wé_T~h_Fr~_Sá'.split('_'),\n        weekdaysParseExact: true,\n        longDateFormat: {\n            LT: 'HH:mm',\n            L: 'DD/MM/YYYY',\n            LL: 'D MMMM YYYY',\n            LLL: 'D MMMM YYYY HH:mm',\n            LLLL: 'dddd, D MMMM YYYY HH:mm',\n        },\n        calendar: {\n            sameDay: '[T~ódá~ý át] LT',\n            nextDay: '[T~ómó~rró~w át] LT',\n            nextWeek: 'dddd [át] LT',\n            lastDay: '[Ý~ést~érdá~ý át] LT',\n            lastWeek: '[L~ást] dddd [át] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: 'í~ñ %s',\n            past: '%s á~gó',\n            s: 'á ~féw ~sécó~ñds',\n            ss: '%d s~écóñ~ds',\n            m: 'á ~míñ~úté',\n            mm: '%d m~íñú~tés',\n            h: 'á~ñ hó~úr',\n            hh: '%d h~óúrs',\n            d: 'á ~dáý',\n            dd: '%d d~áýs',\n            M: 'á ~móñ~th',\n            MM: '%d m~óñt~hs',\n            y: 'á ~ýéár',\n            yy: '%d ý~éárs',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}(th|st|nd|rd)/,\n        ordinal: function (number) {\n            var b = number % 10,\n                output =\n                    ~~((number % 100) / 10) === 1\n                        ? 'th'\n                        : b === 1\n                        ? 'st'\n                        : b === 2\n                        ? 'nd'\n                        : b === 3\n                        ? 'rd'\n                        : 'th';\n            return number + output;\n        },\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return xPseudo;\n\n})));\n","//! moment.js locale configuration\n//! locale : Northern Sami [se]\n//! authors : Bård Rolstad Henriksen : https://github.com/karamell\n\n;(function (global, factory) {\n   typeof exports === 'object' && typeof module !== 'undefined'\n       && typeof require === 'function' ? factory(require('../moment')) :\n   typeof define === 'function' && define.amd ? define(['../moment'], factory) :\n   factory(global.moment)\n}(this, (function (moment) { 'use strict';\n\n    //! moment.js locale configuration\n\n    var se = moment.defineLocale('se', {\n        months: 'ođđajagemánnu_guovvamánnu_njukčamánnu_cuoŋománnu_miessemánnu_geassemánnu_suoidnemánnu_borgemánnu_čakčamánnu_golggotmánnu_skábmamánnu_juovlamánnu'.split(\n            '_'\n        ),\n        monthsShort:\n            'ođđj_guov_njuk_cuo_mies_geas_suoi_borg_čakč_golg_skáb_juov'.split('_'),\n        weekdays:\n            'sotnabeaivi_vuossárga_maŋŋebárga_gaskavahkku_duorastat_bearjadat_lávvardat'.split(\n                '_'\n            ),\n        weekdaysShort: 'sotn_vuos_maŋ_gask_duor_bear_láv'.split('_'),\n        weekdaysMin: 's_v_m_g_d_b_L'.split('_'),\n        longDateFormat: {\n            LT: 'HH:mm',\n            LTS: 'HH:mm:ss',\n            L: 'DD.MM.YYYY',\n            LL: 'MMMM D. [b.] YYYY',\n            LLL: 'MMMM D. [b.] YYYY [ti.] HH:mm',\n            LLLL: 'dddd, MMMM D. [b.] YYYY [ti.] HH:mm',\n        },\n        calendar: {\n            sameDay: '[otne ti] LT',\n            nextDay: '[ihttin ti] LT',\n            nextWeek: 'dddd [ti] LT',\n            lastDay: '[ikte ti] LT',\n            lastWeek: '[ovddit] dddd [ti] LT',\n            sameElse: 'L',\n        },\n        relativeTime: {\n            future: '%s geažes',\n            past: 'maŋit %s',\n            s: 'moadde sekunddat',\n            ss: '%d sekunddat',\n            m: 'okta minuhta',\n            mm: '%d minuhtat',\n            h: 'okta diimmu',\n            hh: '%d diimmut',\n            d: 'okta beaivi',\n            dd: '%d beaivvit',\n            M: 'okta mánnu',\n            MM: '%d mánut',\n            y: 'okta jahki',\n            yy: '%d jagit',\n        },\n        dayOfMonthOrdinalParse: /\\d{1,2}\\./,\n        ordinal: '%d.',\n        week: {\n            dow: 1, // Monday is the first day of the week.\n            doy: 4, // The week that contains Jan 4th is the first week of the year.\n        },\n    });\n\n    return se;\n\n})));\n"],"sourceRoot":""}